--- /dev/null
+Revision history for Perl extension Imager.
+
+0.01 Thu May 6 15:25:03 1999
+ - original version; created by h2xs 1.18
+
+0.02 Mon May 10 20:20:20 1999
+ - Added PPM writer, and a new return type to
+ be used to return undef() from a function returning
+ (int)0.
+
+0.03 Thu May 20 23:23:23 1999
+ - Added Pseudo image handling thingies, now
+ you can use your own get and put pixel routines.
+
+0.04 Mon May 24 22:14:55 1999
+ - Rewrote parts of jpeg support.
+
+0.05 Tue May 25 23:40:01 1999
+ - Added png support with libpng
+ fixed error reporting and return types from
+ some format routines.
+
+0.06 Wed May 26 19:05:39 1999
+ - Fixed Data::Dumper being used when it shouldn't have
+ added feature checking to see at run time if
+ certain formats are avaliable.
+ removed some ancient C++ style comments that hadn't
+ been properly removed, some out of bounds errors in ppm.c
+ fixed tests so missing features are skipped.
+
+0.07 Thu May 27 03:15:00 1999
+ - Fixed the typemap for i_img and i_color so that you can pass
+ a null pointer to them without getting a warning when warnings
+ are enabled. Maybe this is counter perl but it greatly increases
+ the usability of the functions.
+
+0.08 Fri May 28 14:13:21 1999
+ - Added support for gif via, giflib or libungif.
+ gif is so ridden with patent issues but the user
+ can decide which library to use since they have the same
+ include files and calling interface.
+
+0.09 Mon May 31 17:52:32 1999
+ - Added image scaling per axis - faster than doing both
+ axes at the same time. The current method uses lancoz
+ kernel and filtering. But more types should be added -
+ including: nearest neighbor, linear, and bicubic.
+
+0.10 Mon Jun 7 03:25:54 1999
+ - Added T1 postscript font handling. It's very primitive
+ at the moment but creative people can do nice stuff
+ with it. Currently it is not possible to have it
+ generate an image of the correct size for a given string
+ but that is on the way.
+
+0.11 Mon Jun 7 14:43:35 1999
+ - Added T1 features for direct to image rendering in
+ a single color. fixed some debug messages going to
+ stderr instead of a log file.
+
+0.12 Tue Jun 8 02:58:43 1999
+ - Fixed bugs in jpeg.c when loading images. Also specified
+ prototype behaviour to on in the Imager.xs file. The
+ Makefile.PL step doesn't complain anymore so that is
+ hopefully fixed.
+
+0.13 Wed Jun 9 06:55:58 1999
+ - Fixed Imager.xs for init_log call. Minor fixes here
+ and there.
+
+0.14 Thu Jun 10 14:11:22 1999
+ - Rewrote most of the logging stuff so that it is now
+ possible to remove all logging from the XS part of the
+ module. Also some primitive check of memory usage was
+ added. Claes Jacobsson sent in some filters, inverter,
+ contrast and a noise filter.
+
+0.15 Mon Jun 14 08:13:29 1999
+ - Wrote minor enhancement on the calling syntax list.
+ Started on the object interface - added better support
+ for quering avaliable filetypes. Fixed memory leaks in
+ most loaders. New filters from Claes in this version
+ are bumpmap, postlevels and mosaic.
+
+0.16 Wed Jun 16 20:54:33 1999
+ - Added fixes to the BEGIN and END parts, added writer
+ function for the OO interface. Also added basic IPTC
+ reading support for jpegs. Also a few filters have been
+ added to the OO interface.
+
+0.17 Thu Jun 24 11:09:15 1999
+ - Added dynamic loading stuff - It's still missing a nice
+ global symbol table. This will be fixed in next release.
+ also calling the plugins is not all to easy at the moment.
+
+
+0.18 Mon Jun 28 12:31:33 1999
+ - Added global symbol table - plugins now need a symbol
+ table pointer in them. When the module is loaded it is
+ set to point at the global symbol table. Also some barebones
+ Makefile.PL has been made in the dynfilt directory - it works
+ on my system - I hope it does on yours.
+
+
+0.19 Fri Jul 1 15:00:03 1999
+ - Added a way new scaling method for creating easy previews.
+ It only uses nearest neighbor, so it's doesn't look very nice
+ but it may be better for applications like remote sensing.
+
+0.20 Mon Jul 5 10:15:37 1999
+ - Added and rewrote documentation.
+
+0.21 Mon Jul 6 19:15:37 1999
+ - Fixed a bug in the scaling routine - it wasn't
+ handling 0< cases.
+
+0.22 Sat Oct 9 07:04:14 1999
+ - Added a new method to write gif images - now
+ it is possible to have a part of a palette fixed.
+ this is very usefull if one needs to make sure that
+ some color like white is in the pallete. This method
+ also allows some ditherding and gives better colormap
+ than the mediancut from the gif libraries. It does
+ need much more cpu power though. Hopefully later versions
+ will be faster.
+
+0.23 **************** Internal release only
+ - Fixed the %instances bug - caused ALL memory to be leaked.
+ Added real noise function - need feedback on how it should
+ be used. Also box(), and polyline are now in place. Polygon
+ is missing but antialiased line drawing with integer endpoints are
+ done but should be replaced with a version that can have
+ floating point endvalues. Two noise filters addded.
+
+0.24 **************** Internal release only
+ - Converted i_color into an object from a reference, so now it's
+ giving an object instead of a void ptr or an integer or something.
+
+0.25 **************** Internal release only
+ - Added basic Truetype functionality - still needs a rewrite
+ to be decent. Currently it's a port of a demo program that
+ uses an awful amount of global variables and there is much IO since
+ no caching of glyphs is done.
+
+0.26 Tue Nov 23 03:57:00 1999 > Development release <
+ - Added transformations so that an image can be wrapped.
+ To achive decent speed a C based stackmachine is included. As a result
+ transformations need to be specified in rpn (postfix) notation. It
+ also can use the Affix::Infix2Postfix class to do the conversion for it.
+
+0.27 Tue Dec 28 03:57:00 1999 > CPAN release <
+ - This is a bugfix version mostly, thanks to claes for pointing
+ out the problems - fixed palette saving wasn't working correctly after
+ version 0.24 - rather surprised this didn't crash everything.
+ Also fixed that for t1 fonts the bounding box wasn't being reported
+ unless the font had been used before. This is either a bug in t1lib
+ or a mistake in it's documentation. Another lingering bug since 0.24
+ what that $img->box() wasn't creating it's default color properly.
+ Added i_tt_text() method and more debuging to the truetype routines.
+ truetype testcase fixed and old debug rubish removed.
+
+0.28 Tue Jan 4 05:25:58 2000 > CPAN release <
+ - Only fixes to truetype test and transformation tests.
+ Thanks to schinder of cpan testers for testing and reporting.
+
+0.29 Tue Jan 4 21:49:57 2000 > CPAN release <
+ - fixes to get rid of warnings under pre 5.005,
+ Fixed broken preproccessor directives to work on non gnu
+ compilers. Fixed DSO test on HPUX - both code errors and
+ HPUX creates .sl instead of .so so the tests were failing.
+
+0.30 Sun Jan 7 05:00:06 2000 > Bunch of Alpha releases <
+ - An attempt to automate installation.
+
+0.31 Sat Jan 15 03:58:29 2000 > Fixes fixes fixes <
+ - Fixed a bug pointed out by Leolo where loading gifs
+ skips the first line of the imageload() has been
+ by read() - for now load is an alias for read. It will
+ be removed in the future. Also, fixes dynamic loading on
+ systems that prepend an underscore to symbols. At the present
+ the only system that I know of that needs this is OpenBSD.
+ BUT YOU MUST RECOMPILE ALL OF YOUR OLD MODULES AGAINST THIS BUILD.
+ Added getchannels() method ( How did I manage to delay this
+ untill now ). Some document changes but nothing substantial.
+ Also fixed the png read/write routines to handle all colorspaces
+ and images with alpha information. Also now it's possible to
+ have Imager guess the format of the files to load or save
+ when passing files to read or save from the filename.
+ Also all of the tests except dynamic loading now pass on OS/2.
+
+0.32 Tue Feb 29 17:26:00 2000 CPAN RELEASE
+ - Added the getcolorcount method. Fixed interlace handling
+ on png images. Fixed the missing channel count in crop()
+ method. Rewrote most of t1lib database stuff - created color
+ and font classes. T1 stuff is mostly done - TT things were
+ rewritten too and now include most of what is needed for
+ pixmap caching. Added documentation for fonts. Comments have
+ been added to some of the relevant c-routines. Added a copy()
+ function in Imager.xs and a corresponding method name.
+ Changed the underlying data type for the raw XS images from
+ pointers to objects - this will hopefully catch the most
+ basic errors and keep the segfaulting down. This means that
+ all of the underlying XS calls for readjpeg, readgif, readpng
+ and readraw do not take the first parameter any more.
+ Made fixes to keep it not spewing warning on 5.004 perl.
+
+ **** If you had any code that didn't use the OO interface ****
+ **** It will probably not work any longer ****
+
+0.33 Beta -- No final
+ - Fixed the end message from Imager 0.32. Destroy called
+ on an empty image. Did some work on the polygon method.
+ Some clean up in the Makefile.PL script. Fixed a buffer
+ overrun in the t_transform in Imager.XS. Fixed the
+ error handling in the jpeg loader. It now correctly
+ returns undef if a load on an image fails. It also
+ sends the error messages to the log file. Added errstr()
+ method to the image object. Added a new way to read()
+ objects from scalars. So far this is only implemented for
+ jpeg, png and gif. ppm and raw soon - as always if someone
+ wants to do an overhaul on the ppm stuff feel free. It seems
+ like such a basic format that interfacing with a library is more
+ work than implementing all of the needed routines instead.
+
+0.34 Beta -- No final
+ - Bunch of documentation fixes, backed out ppm code.
+ Put in TonyC's giant transform2 patch. Fixed the patch
+ to make it ansi compliant. Fixed a bunch of bugs in the
+ Freetype code with regard to vertical and horizontal
+ positioning and bounding boxes. Cleaned up a lot of the
+ code so it runs under -Wall. Code that is still in
+ development such as the polygon converter do not compile
+ cleanly. Fixed the non antialiased versions of truetype
+ dump to image routines. Also removed the FIXME for the
+ hardcoding of antialias in the Imager string method.
+ Fixed sign error and a missing cache of the bounding box
+ calculation for the rasterize function. Removed some
+ debugging code I forgot to remove. Added iolayer.h
+ and iolayer.c but they don't do anything for now.
+
+0.35 pre2 -- No time yet
+ - Fixed some compile warnings for various files under -Wall.
+ Added functionality for jpeg reading of seekable files, it's not
+ really working yet. This version is pretty much *not* working.
+ Do not install unless you intend to do a lot of development.
+ Repeat - it doesn't even pass tests (but it compiles). Ok now reading
+ jpegs works from scalars, my guess is that it also works from non
+ seeking sources such as sockets or pipes.
+
+0.35 pre3 - No time yet
+ - Added the *right* patch from Tony which combines
+ the common code from i_readgif and i_readgif_scalar into
+ i_readgif_low. Added tiff reading support through iolayer.
+
+0.35 pre4 - No time yet
+ - Added tiff writing (no options) support through
+ iolayer. Also made some small fixes for the iolayer reading
+ (was always doing two reads when one was needed). Patched the
+ Imager::read() call so that it now uses a mixture of old and new
+ functions.
+
+0.35 pre5 - No time yet
+ - Fixed various gnu'isms in the c code (some bugs in the link list
+ implmentation). Fixed missing #skip codes when gif format is not
+ present in any form. Added fixes for 5.004_04 in the transform2 function.
+ Made sure it compiles cleanly with sun's cc. Switched from a .jpeg
+ for transform2 check to a .ppm file so it runs when jpeg is not
+ present. Added a test for tiff files in t10formats.t.
+
+
+0.35 pre6 - No time yet
+ - Fixes to Makefile.PL. Should find freetype includes on more
+ distributions now. Ran tests on Solaris and Hpux, minor fixes.
+ Compiles with some warnings on with both hpux and solaris' cc.
+ Made some minor changes to the documentation. Fixes to tiff.c log
+ code.
+
+0.35 pre7 - No time yet
+ - Fixes 64 bit bug on freebsd. While libtiff mirrors the effects of
+ lseek it's toff_t is a uint32, while lseek uses off_t which can be a 64
+ bit quantity. Added the IM_LFLAGS environment variable to help
+ people with broken libgifs (that want to link with X).
+
+0.35 Sun Jan 28 19:42:59 EST 2001
+ - More makefile fixes, fixed a few signedness warnings.
+ Checked to see if it compiled cleanly on Solaris and HPUX.
+ Fixed a 5.004_04 warning and added more ENV flags for makefile.
+
+0.36 Mon Jan 29 09:36:11 EST 2001
+ - String as 0 or "" caused an error in $img->string(). Fixed a
+ documentation error invoving string() method syntax. Merged a patch
+ for non antialised truetype fonts. Fixed an error in the Makefile.PL
+ which caused a makefile to be generated that bombed with sgi's make.
+
+0.37 Mon Tue 30 09:36:11 EST 2001
+ - Several documentation fixes. Pod documentation for almost every
+ function in image.c. Added sys/types.h include in iolayer which was
+ causing problems on various linux systems.
+
+0.38 pre1 - No time yet
+ - Fixed a braindamaged fix on the Makefile.PL file. Moved the
+ code for Imager::Color into lib/Imager/Color.pm. Wrote some pod
+ about how it works. Made the names of Imager::Color XS routines
+ all begin with ICL_ and used the prefix rules of XS to get nice names
+ in perl. Found a bug (not fixed) in how XS handles
+ returning an object to an object it had as a parameter (double
+ free).
+
+0.38 pre2 - No time yet
+ - Fixes lots of for documentation, patch for freetype bounding
+ box handling. Split put code for Imager::Font into Font.pm and added
+ more documentation for Font.pm. Added string local ascender and
+ descender for tt fonts. Note that this needs to be added to t1 fonts
+ before 0.38 final.
+
+0.38 pre3 - No time yet
+ - Fixed an in consistency in the bounding box functions for t1
+ fonts. Now both versions get the 6 argument bounding_box method
+ described in Imager::Font. Started converting the comments in
+ font.c so that they are viewable by doco.perl. Added two examples
+ of filters. Need to make them more usefull and then add more
+ notes than are in compile.txt.
+
+
+0.38 pre4 - No time yet
+ - Completed adding pod comments to font.c, tiff.c and iolayer.c.
+ Those along with image.c should now have every single function
+ described in pod format.
+
+0.38 pre5 - No time yet
+ - Replaced ppm.c with pnm.c which adds support for pbm/pgm/ppm
+ files ascii and binary formats. Added patches for the gif routines.
+ Patched some of the color quantizing routines (Leolo and TonyC).
+ There is one bomb and one warning in this test, and frankly I don't
+ see why they are suddenly there.
+
+0.38 pre6 - No time yet
+ - Patch from Tony that fixes infix when Parse::RecDescent is present.
+ Checked some cases where malloc/free were used instead of mymalloc/myfree.
+ Added bufchain iolayer code. You can now write to a chain of buffers and
+ later slurp it all into a single perl scalar. Found some oddity of t/t10
+ test not giving the right return value when malloc debugging was enabled.
+ Fixed some of the logging code and the malloc debugging options. Added
+ more tests for tiffs.
+
+0.38 pre7 - No time yet
+ - Added i_gradgen code and put it into the filters hash. Think a
+ seperate pod for filters would be a good idea. Also removed some of the
+ debugging code from the iolayer. Added pod comments to filters.c and
+ looked over the code.
+
+0.38 pre8 - No time yet
+ - limited Win32 support, Imager installs and builds using VC++,
+ but there's no image/font format support yet.
+
+0.38 pre9 - No time yet
+ - Added lots of color quantization code from Tony with benchmarks.
+ Also fixes ugly stack overrun in old version. Added fixes for the lmfixed
+ problem. Four of them, let's see which is fastest. This version adds
+ some voronoi partitioning - it's dog slow but it's a reference implementation
+ to check if faster algorithms are doing the right thing [tm]. Added a check
+ for giflib 3.
+
+
+
+~~~~~~~~~~~~~^ ^ ^~~~~~~~~~~~~~
+
+
+0.40 TODO list
+ iolayer:
+ - Add scalar/mmap to iolayer
+ - Add close() code to iolayer
+ - Merge callback interface into iolayer
+ - Add interface for writing to all formats but tiff
+ - Add interface for reading for png (started),
+ gif (merge with cb patch), ppm and raw
+ - Add make new tests once all formats support io_layer
+ - Implment the maxread threshold (Indicates how far
+ a library can read before it indicates that it's done).
+
+ MultiImage & metadata support:
+ - Figure what interface should be between C and perl?
+ - How to store data in the C interface for tags/metadata?
+
+ Old sins:
+ - Make sure everything is doable with the OO interface
+ - Split the other classes into seperate files
+ - Compile with memory debugging enabled and fix leaks
+ - Check if hashbox code is choosing the wrong closest color
+
+ Documentation:
+ - Add to the documentation
+ - Write a tutorial?
+ - Write a guide to installing the helper libraries
+ - Go through the entire project and add comments in pod
+ so doco.perl can be used to read them.
+
+===================================================
+
+ For latest versions check the Imager-devel pages:
+ http://www.eecs.umich.edu/~addi/perl/Imager/devel/
+
+===================================================
+
--- /dev/null
+package Imager;
+
+
+
+use strict;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS %formats $DEBUG %filters %DSOs $ERRSTR $fontstate %OPCODES $I2P $FORMATGUESS);
+use IO::File;
+
+use Imager::Color;
+use Imager::Font;
+
+@EXPORT_OK = qw(
+ init
+ init_log
+ DSO_open
+ DSO_close
+ DSO_funclist
+ DSO_call
+
+ load_plugin
+ unload_plugin
+
+ i_list_formats
+ i_has_format
+
+ i_color_new
+ i_color_set
+ i_color_info
+
+ i_img_empty
+ i_img_empty_ch
+ i_img_exorcise
+ i_img_destroy
+
+ i_img_info
+
+ i_img_setmask
+ i_img_getmask
+
+ i_draw
+ i_line_aa
+ i_box
+ i_box_filled
+ i_arc
+
+ i_bezier_multi
+ i_poly_aa
+
+ i_copyto
+ i_rubthru
+ i_scaleaxis
+ i_scale_nn
+ i_haar
+ i_count_colors
+
+
+ i_gaussian
+ i_conv
+
+ i_img_diff
+
+ i_init_fonts
+ i_t1_new
+ i_t1_destroy
+ i_t1_set_aa
+ i_t1_cp
+ i_t1_text
+ i_t1_bbox
+
+
+ i_tt_set_aa
+ i_tt_cp
+ i_tt_text
+ i_tt_bbox
+
+ i_readjpeg
+ i_writejpeg
+
+ i_readjpeg_wiol
+ i_writejpeg_wiol
+
+ i_readtiff_wiol
+ i_writetiff_wiol
+
+ i_readpng
+ i_writepng
+
+ i_readgif
+ i_readgif_callback
+ i_writegif
+ i_writegifmc
+ i_writegif_gen
+ i_writegif_callback
+
+ i_readpnm_wiol
+ i_writeppm
+
+ i_readraw
+ i_writeraw
+
+ i_contrast
+ i_hardinvert
+ i_noise
+ i_bumpmap
+ i_postlevels
+ i_mosaic
+ i_watermark
+
+ malloc_state
+
+ list_formats
+
+ i_gifquant
+
+ newfont
+ newcolor
+ newcolour
+ NC
+ NF
+
+);
+
+
+
+@EXPORT=qw(
+ init_log
+ i_list_formats
+ i_has_format
+ malloc_state
+ i_color_new
+
+ i_img_empty
+ i_img_empty_ch
+ );
+
+%EXPORT_TAGS=
+ (handy => [qw(
+ newfont
+ newcolor
+ NF
+ NC
+ )],
+ all => [@EXPORT_OK],
+ default => [qw(
+ load_plugin
+ unload_plugin
+ )]);
+
+
+BEGIN {
+ require Exporter;
+ require DynaLoader;
+
+ $VERSION = '0.38pre9';
+ @ISA = qw(Exporter DynaLoader);
+ bootstrap Imager $VERSION;
+}
+
+BEGIN {
+ i_init_fonts(); # Initialize font engines
+ for(i_list_formats()) { $formats{$_}++; }
+
+ if ($formats{'t1'}) {
+ i_t1_set_aa(1);
+ }
+
+ if (!$formats{'t1'} and !$formats{'tt'}) {
+ $fontstate='no font support';
+ }
+
+ %OPCODES=(Add=>[0],Sub=>[1],Mult=>[2],Div=>[3],Parm=>[4],'sin'=>[5],'cos'=>[6],'x'=>[4,0],'y'=>[4,1]);
+
+ $DEBUG=0;
+
+ $filters{contrast}={
+ callseq => ['image','intensity'],
+ callsub => sub { my %hsh=@_; i_contrast($hsh{image},$hsh{intensity}); }
+ };
+
+ $filters{noise} ={
+ callseq => ['image', 'amount', 'subtype'],
+ defaults => { amount=>3,subtype=>0 },
+ callsub => sub { my %hsh=@_; i_noise($hsh{image},$hsh{amount},$hsh{subtype}); }
+ };
+
+ $filters{hardinvert} ={
+ callseq => ['image'],
+ defaults => { },
+ callsub => sub { my %hsh=@_; i_hardinvert($hsh{image}); }
+ };
+
+ $filters{autolevels} ={
+ callseq => ['image','lsat','usat','skew'],
+ defaults => { lsat=>0.1,usat=>0.1,skew=>0.0 },
+ callsub => sub { my %hsh=@_; i_autolevels($hsh{image},$hsh{lsat},$hsh{usat},$hsh{skew}); }
+ };
+
+ $filters{turbnoise} ={
+ callseq => ['image'],
+ defaults => { xo=>0.0,yo=>0.0,scale=>10.0 },
+ callsub => sub { my %hsh=@_; i_turbnoise($hsh{image},$hsh{xo},$hsh{yo},$hsh{scale}); }
+ };
+
+ $filters{radnoise} ={
+ callseq => ['image'],
+ defaults => { xo=>100,yo=>100,ascale=>17.0,rscale=>0.02 },
+ callsub => sub { my %hsh=@_; i_radnoise($hsh{image},$hsh{xo},$hsh{yo},$hsh{rscale},$hsh{ascale}); }
+ };
+
+ $filters{conv} ={
+ callseq => ['image', 'coef'],
+ defaults => { },
+ callsub => sub { my %hsh=@_; i_conv($hsh{image},$hsh{coef}); }
+ };
+
+ $filters{gradgen} ={
+ callseq => ['image', 'xo', 'yo', 'colors', 'dist'],
+ defaults => { },
+ callsub => sub { my %hsh=@_; i_gradgen($hsh{image}, $hsh{xo}, $hsh{yo}, $hsh{colors}, $hsh{dist}); }
+ };
+
+ $filters{nearest_color} ={
+ callseq => ['image', 'xo', 'yo', 'colors', 'dist'],
+ defaults => { },
+ callsub => sub { my %hsh=@_; i_nearest_color($hsh{image}, $hsh{xo}, $hsh{yo}, $hsh{colors}, $hsh{dist}); }
+ };
+
+ $FORMATGUESS=\&def_guess_type;
+}
+
+#
+# Non methods
+#
+
+# initlize Imager
+# NOTE: this might be moved to an import override later on
+
+#sub import {
+# my $pack = shift;
+# (look through @_ for special tags, process, and remove them);
+# use Data::Dumper;
+# print Dumper($pack);
+# print Dumper(@_);
+#}
+
+sub init {
+ my %parms=(loglevel=>1,@_);
+ if ($parms{'log'}) {
+ init_log($parms{'log'},$parms{'loglevel'});
+ }
+
+# if ($parms{T1LIB_CONFIG}) { $ENV{T1LIB_CONFIG}=$parms{T1LIB_CONFIG}; }
+# if ( $ENV{T1LIB_CONFIG} and ( $fontstate eq 'missing conf' )) {
+# i_init_fonts();
+# $fontstate='ok';
+# }
+}
+
+END {
+ if ($DEBUG) {
+ print "shutdown code\n";
+ # for(keys %instances) { $instances{$_}->DESTROY(); }
+ malloc_state(); # how do decide if this should be used? -- store something from the import
+ print "Imager exiting\n";
+ }
+}
+
+# Load a filter plugin
+
+sub load_plugin {
+ my ($filename)=@_;
+ my $i;
+ my ($DSO_handle,$str)=DSO_open($filename);
+ if (!defined($DSO_handle)) { $Imager::ERRSTR="Couldn't load plugin '$filename'\n"; return undef; }
+ my %funcs=DSO_funclist($DSO_handle);
+ if ($DEBUG) { print "loading module $filename\n"; $i=0; for(keys %funcs) { printf(" %2d: %s\n",$i++,$_); } }
+ $i=0;
+ for(keys %funcs) { if ($filters{$_}) { $ERRSTR="filter '$_' already exists\n"; DSO_close($DSO_handle); return undef; } }
+
+ $DSOs{$filename}=[$DSO_handle,\%funcs];
+
+ for(keys %funcs) {
+ my $evstr="\$filters{'".$_."'}={".$funcs{$_}.'};';
+ $DEBUG && print "eval string:\n",$evstr,"\n";
+ eval $evstr;
+ print $@ if $@;
+ }
+ return 1;
+}
+
+# Unload a plugin
+
+sub unload_plugin {
+ my ($filename)=@_;
+
+ if (!$DSOs{$filename}) { $ERRSTR="plugin '$filename' not loaded."; return undef; }
+ my ($DSO_handle,$funcref)=@{$DSOs{$filename}};
+ for(keys %{$funcref}) {
+ delete $filters{$_};
+ $DEBUG && print "unloading: $_\n";
+ }
+ my $rc=DSO_close($DSO_handle);
+ if (!defined($rc)) { $ERRSTR="unable to unload plugin '$filename'."; return undef; }
+ return 1;
+}
+
+
+#
+# Methods to be called on objects.
+#
+
+# Create a new Imager object takes very few parameters.
+# usually you call this method and then call open from
+# the resulting object
+
+sub new {
+ my $class = shift;
+ my $self ={};
+ my %hsh=@_;
+ bless $self,$class;
+ $self->{IMG}=undef; # Just to indicate what exists
+ $self->{ERRSTR}=undef; #
+ $self->{DEBUG}=$DEBUG;
+ $self->{DEBUG} && print "Initialized Imager\n";
+ if ($hsh{xsize} && $hsh{ysize}) { $self->img_set(%hsh); }
+ return $self;
+}
+
+
+# Copy an entire image with no changes
+# - if an image has magic the copy of it will not be magical
+
+sub copy {
+ my $self = shift;
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+
+ my $newcopy=Imager->new();
+ $newcopy->{IMG}=i_img_new();
+ i_copy($newcopy->{IMG},$self->{IMG});
+ return $newcopy;
+}
+
+# Paste a region
+
+sub paste {
+ my $self = shift;
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+ my %input=(left=>0, top=>0, @_);
+ unless($input{img}) {
+ $self->{ERRSTR}="no source image";
+ return;
+ }
+ $input{left}=0 if $input{left} <= 0;
+ $input{top}=0 if $input{top} <= 0;
+ my $src=$input{img};
+ my($r,$b)=i_img_info($src->{IMG});
+
+ i_copyto($self->{IMG}, $src->{IMG},
+ 0,0, $r, $b, $input{left}, $input{top});
+ return $self; # What should go here??
+}
+
+# Crop an image - i.e. return a new image that is smaller
+
+sub crop {
+ my $self=shift;
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+ my %hsh=(left=>0,right=>0,top=>0,bottom=>0,@_);
+
+ my ($w,$h,$l,$r,$b,$t)=($self->getwidth(),$self->getheight(),
+ @hsh{qw(left right bottom top)});
+ $l=0 if not defined $l;
+ $t=0 if not defined $t;
+ $r=$self->getwidth if not defined $r;
+ $b=$self->getheight if not defined $b;
+
+ ($l,$r)=($r,$l) if $l>$r;
+ ($t,$b)=($b,$t) if $t>$b;
+
+ if ($hsh{'width'}) {
+ $l=int(0.5+($w-$hsh{'width'})/2);
+ $r=$l+$hsh{'width'};
+ } else {
+ $hsh{'width'}=$r-$l;
+ }
+ if ($hsh{'height'}) {
+ $b=int(0.5+($h-$hsh{'height'})/2);
+ $t=$h+$hsh{'height'};
+ } else {
+ $hsh{'height'}=$b-$t;
+ }
+
+# print "l=$l, r=$r, h=$hsh{'width'}\n";
+# print "t=$t, b=$b, w=$hsh{'height'}\n";
+
+ my $dst=Imager->new(xsize=>$hsh{'width'},ysize=>$hsh{'height'},channels=>$self->getchannels());
+
+ i_copyto($dst->{IMG},$self->{IMG},$l,$t,$r,$b,0,0);
+ return $dst;
+}
+
+# Sets an image to a certain size and channel number
+# if there was previously data in the image it is discarded
+
+sub img_set {
+ my $self=shift;
+
+ my %hsh=(xsize=>100,ysize=>100,channels=>3,@_);
+
+ if (defined($self->{IMG})) {
+ i_img_destroy($self->{IMG});
+ undef($self->{IMG});
+ }
+
+ $self->{IMG}=Imager::ImgRaw::new($hsh{'xsize'},$hsh{'ysize'},$hsh{'channels'});
+}
+
+# Read an image from file
+
+sub read {
+ my $self = shift;
+ my %input=@_;
+ my ($fh, $fd, $IO);
+
+ if (defined($self->{IMG})) {
+ i_img_destroy($self->{IMG});
+ undef($self->{IMG});
+ }
+
+ if (!$input{fd} and !$input{file} and !$input{data}) { $self->{ERRSTR}='no file, fd or data parameter'; return undef; }
+ if ($input{file}) {
+ $fh = new IO::File($input{file},"r");
+ if (!defined $fh) { $self->{ERRSTR}='Could not open file'; return undef; }
+ binmode($fh);
+ $fd = $fh->fileno();
+ }
+ if ($input{fd}) { $fd=$input{fd} };
+
+ # FIXME: Find the format here if not specified
+ # yes the code isn't here yet - next week maybe?
+
+ if (!$input{type} and $input{file}) { $input{type}=$FORMATGUESS->($input{file}); }
+ if (!$formats{$input{type}}) { $self->{ERRSTR}='format not supported'; return undef; }
+
+ my %iolready=(jpeg=>1, tiff=>1, pnm=>1);
+
+ if ($iolready{$input{type}}) {
+ # Setup data source
+ $IO = io_new_fd($fd); # sort of simple for now eh?
+
+ if ( $input{type} eq 'jpeg' ) {
+ ($self->{IMG},$self->{IPTCRAW})=i_readjpeg_wiol( $IO );
+ if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read jpeg image'; return undef; }
+ $self->{DEBUG} && print "loading a jpeg file\n";
+ return $self;
+ }
+
+ if ( $input{type} eq 'tiff' ) {
+ $self->{IMG}=i_readtiff_wiol( $IO, -1 ); # Fixme, check if that length parameter is ever needed
+ if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read tiff image'; return undef; }
+ $self->{DEBUG} && print "loading a tiff file\n";
+ return $self;
+ }
+
+ if ( $input{type} eq 'pnm' ) {
+ $self->{IMG}=i_readpnm_wiol( $IO, -1 ); # Fixme, check if that length parameter is ever needed
+ if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read pnm image'; return undef; }
+ $self->{DEBUG} && print "loading a pnm file\n";
+ return $self;
+ }
+
+ } else {
+
+ # Old code for reference while changing the new stuff
+
+
+ if (!$input{type} and $input{file}) { $input{type}=$FORMATGUESS->($input{file}); }
+ if (!$input{type}) { $self->{ERRSTR}='type parameter missing and not possible to guess from extension'; return undef; }
+
+ if (!$formats{$input{type}}) { $self->{ERRSTR}='format not supported'; return undef; }
+
+ if ($input{file}) {
+ $fh = new IO::File($input{file},"r");
+ if (!defined $fh) { $self->{ERRSTR}='Could not open file'; return undef; }
+ binmode($fh);
+ $fd = $fh->fileno();
+ }
+ if ($input{fd}) { $fd=$input{fd} };
+
+ if ( $input{type} eq 'gif' ) {
+ if (exists $input{data}) { $self->{IMG}=i_readgif_scalar($input{data}); }
+ else { $self->{IMG}=i_readgif( $fd ) }
+ if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read gif image'; return undef; }
+ $self->{DEBUG} && print "loading a gif file\n";
+ } elsif ( $input{type} eq 'jpeg' ) {
+ if (exists $input{data}) { ($self->{IMG},$self->{IPTCRAW})=i_readjpeg_scalar($input{data}); }
+ else { ($self->{IMG},$self->{IPTCRAW})=i_readjpeg( $fd ); }
+ if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read jpeg image'; return undef; }
+ $self->{DEBUG} && print "loading a jpeg file\n";
+ } elsif ( $input{type} eq 'png' ) {
+ if (exists $input{data}) { $self->{IMG}=i_readpng_scalar($input{data}); }
+ else { $self->{IMG}=i_readpng( $fd ); }
+ if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read png image'; return undef; }
+ $self->{DEBUG} && print "loading a png file\n";
+ } elsif ( $input{type} eq 'raw' ) {
+ my %params=(datachannels=>3,storechannels=>3,interleave=>1);
+ for(keys(%input)) { $params{$_}=$input{$_}; }
+
+ if ( !($params{xsize} && $params{ysize}) ) { $self->{ERRSTR}='missing xsize or ysize parameter for raw'; return undef; }
+ $self->{IMG}=i_readraw( $fd, $params{xsize}, $params{ysize},
+ $params{datachannels}, $params{storechannels}, $params{interleave});
+ if ( !defined($self->{IMG}) ) { $self->{ERRSTR}='unable to read raw image'; return undef; }
+ $self->{DEBUG} && print "loading a raw file\n";
+ }
+ return $self;
+ }
+}
+
+
+# Write an image to file
+
+sub write {
+ my $self = shift;
+ my %input=(jpegquality=>75, gifquant=>'mc', lmdither=>6.0, lmfixed=>[], @_);
+ my ($fh, $rc, $fd, $IO);
+
+ my %iolready=( tiff=>1 ); # this will be SO MUCH BETTER once they are all in there
+
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+
+ if (!$input{file} and !$input{'fd'} and !$input{'data'}) { $self->{ERRSTR}='file/fd/data parameter missing'; return undef; }
+ if (!$input{type}) { $input{type}=$FORMATGUESS->($input{file}); }
+ if (!$input{type}) { $self->{ERRSTR}='type parameter missing and not possible to guess from extension'; return undef; }
+
+ if (!$formats{$input{type}}) { $self->{ERRSTR}='format not supported'; return undef; }
+
+ if (exists $input{'fd'}) {
+ $fd=$input{'fd'};
+ } elsif (exists $input{'data'}) {
+ $IO = Imager::io_new_bufchain();
+ } else {
+ $fh = new IO::File($input{file},"w+");
+ if (!defined $fh) { $self->{ERRSTR}='Could not open file'; return undef; }
+ binmode($fh);
+ $fd = $fh->fileno();
+ }
+
+
+
+ if ($iolready{$input{type}}) {
+ if ($fd) {
+ $IO = io_new_fd($fd);
+ }
+
+ if ($input{type} eq 'tiff') {
+ if (!i_writetiff_wiol($self->{IMG}, $IO)) { $self->{ERRSTR}='Could not write to buffer'; return undef; }
+ }
+
+ my $data = io_slurp($IO);
+ if (!$data) { $self->{ERRSTR}='Could not slurp from buffer'; return undef; }
+
+ ${$input{data}} = $data;
+ return $self;
+ } else {
+
+ if ( $input{type} eq 'gif' ) {
+ if (not $input{gifplanes}) {
+ my $gp;
+ my $count=i_count_colors($self->{IMG}, 256);
+ $gp=8 if $count == -1;
+ $gp=1 if not $gp and $count <= 2;
+ $gp=2 if not $gp and $count <= 4;
+ $gp=3 if not $gp and $count <= 8;
+ $gp=4 if not $gp and $count <= 16;
+ $gp=5 if not $gp and $count <= 32;
+ $gp=6 if not $gp and $count <= 64;
+ $gp=7 if not $gp and $count <= 128;
+ $input{gifplanes} = $gp || 8;
+ }
+
+ if ($input{gifplanes}>8) {
+ $input{gifplanes}=8;
+ }
+ if ($input{gifquant} eq 'gen' || $input{callback}) {
+
+
+ if ($input{gifquant} eq 'lm') {
+
+ $input{make_colors} = 'addi';
+ $input{translate} = 'perturb';
+ $input{perturb} = $input{lmdither};
+ } elsif ($input{gifquant} eq 'gen') {
+ # just pass options through
+ } else {
+ $input{make_colors} = 'webmap'; # ignored
+ $input{translate} = 'giflib';
+ }
+
+ if ($input{callback}) {
+ defined $input{maxbuffer} or $input{maxbuffer} = -1;
+ $rc = i_writegif_callback($input{callback}, $input{maxbuffer},
+ \%input, $self->{IMG});
+ } else {
+ $rc = i_writegif_gen($fd, \%input, $self->{IMG});
+ }
+
+
+
+ } elsif ($input{gifquant} eq 'lm') {
+ $rc=i_writegif($self->{IMG},$fd,$input{gifplanes},$input{lmdither},$input{lmfixed});
+ } else {
+ $rc=i_writegifmc($self->{IMG},$fd,$input{gifplanes});
+ }
+ if ( !defined($rc) ) {
+ $self->{ERRSTR}='unable to write gif image'; return undef;
+ }
+ $self->{DEBUG} && print "writing a gif file\n";
+
+ } elsif ( $input{type} eq 'jpeg' ) {
+ $rc=i_writejpeg($self->{IMG},$fd,$input{jpegquality});
+ if ( !defined($rc) ) {
+ $self->{ERRSTR}='unable to write jpeg image'; return undef;
+ }
+ $self->{DEBUG} && print "writing a jpeg file\n";
+ } elsif ( $input{type} eq 'png' ) {
+ $rc=i_writepng($self->{IMG},$fd);
+ if ( !defined($rc) ) {
+ $self->{ERRSTR}='unable to write png image'; return undef;
+ }
+ $self->{DEBUG} && print "writing a png file\n";
+ } elsif ( $input{type} eq 'pnm' ) {
+ $rc=i_writeppm($self->{IMG},$fd);
+ if ( !defined($rc) ) {
+ $self->{ERRSTR}='unable to write pnm image'; return undef;
+ }
+ $self->{DEBUG} && print "writing a pnm file\n";
+ } elsif ( $input{type} eq 'raw' ) {
+ $rc=i_writeraw($self->{IMG},$fd);
+ if ( !defined($rc) ) {
+ $self->{ERRSTR}='unable to write raw image'; return undef;
+ }
+ $self->{DEBUG} && print "writing a raw file\n";
+ } elsif ( $input{type} eq 'tiff' ) {
+ $rc=i_writetiff_wiol($self->{IMG},io_new_fd($fd) );
+ if ( !defined($rc) ) {
+ $self->{ERRSTR}='unable to write tiff image'; return undef;
+ }
+ $self->{DEBUG} && print "writing a tiff file\n";
+ }
+
+ }
+ return $self;
+}
+
+sub write_multi {
+ my ($class, $opts, @images) = @_;
+
+ if ($opts->{type} eq 'gif') {
+ # translate to ImgRaw
+ if (grep !UNIVERSAL::isa($_, 'Imager') || !$_->{IMG}, @images) {
+ $ERRSTR = "Usage: Imager->write_multi({ options }, @images)";
+ return 0;
+ }
+ my @work = map $_->{IMG}, @images;
+ if ($opts->{callback}) {
+ # Note: you may need to fix giflib for this one to work
+ my $maxbuffer = $opts->{maxbuffer};
+ defined $maxbuffer or $maxbuffer = -1; # max by default
+ return i_writegif_callback($opts->{callback}, $maxbuffer,
+ $opts, @work);
+ }
+ if ($opts->{fd}) {
+ return i_writegif_gen($opts->{fd}, $opts, @work);
+ }
+ else {
+ my $fh = IO::File->new($opts->{file}, "w+");
+ unless ($fh) {
+ $ERRSTR = "Error creating $opts->{file}: $!";
+ return 0;
+ }
+ binmode($fh);
+ return i_writegif_gen(fileno($fh), $opts, @work);
+ }
+ }
+ else {
+ $ERRSTR = "Sorry, write_multi doesn't support $opts->{type} yet";
+ return 0;
+ }
+}
+
+# Destroy an Imager object
+
+sub DESTROY {
+ my $self=shift;
+ # delete $instances{$self};
+ if (defined($self->{IMG})) {
+ i_img_destroy($self->{IMG});
+ undef($self->{IMG});
+ } else {
+# print "Destroy Called on an empty image!\n"; # why did I put this here??
+ }
+}
+
+# Perform an inplace filter of an image
+# that is the image will be overwritten with the data
+
+sub filter {
+ my $self=shift;
+ my %input=@_;
+ my %hsh;
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+
+ if (!$input{type}) { $self->{ERRSTR}='type parameter missing'; return undef; }
+
+ if ( (grep { $_ eq $input{type} } keys %filters) != 1) {
+ $self->{ERRSTR}='type parameter not matching any filter'; return undef;
+ }
+
+ if (defined($filters{$input{type}}{defaults})) {
+ %hsh=('image',$self->{IMG},%{$filters{$input{type}}{defaults}},%input);
+ } else {
+ %hsh=('image',$self->{IMG},%input);
+ }
+
+ my @cs=@{$filters{$input{type}}{callseq}};
+
+ for(@cs) {
+ if (!defined($hsh{$_})) {
+ $self->{ERRSTR}="missing parameter '$_' for filter ".$input{type}; return undef;
+ }
+ }
+
+ &{$filters{$input{type}}{callsub}}(%hsh);
+
+ my @b=keys %hsh;
+
+ $self->{DEBUG} && print "callseq is: @cs\n";
+ $self->{DEBUG} && print "matching callseq is: @b\n";
+
+ return $self;
+}
+
+# Scale an image to requested size and return the scaled version
+
+sub scale {
+ my $self=shift;
+ my %opts=(scalefactor=>0.5,type=>'max',qtype=>'normal',@_);
+ my $img = Imager->new();
+ my $tmp = Imager->new();
+
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+
+ if ($opts{xpixels} and $opts{ypixels} and $opts{type}) {
+ my ($xpix,$ypix)=( $opts{xpixels}/$self->getwidth() , $opts{ypixels}/$self->getheight() );
+ if ($opts{type} eq 'min') { $opts{scalefactor}=min($xpix,$ypix); }
+ if ($opts{type} eq 'max') { $opts{scalefactor}=max($xpix,$ypix); }
+ } elsif ($opts{xpixels}) { $opts{scalefactor}=$opts{xpixels}/$self->getwidth(); }
+ elsif ($opts{ypixels}) { $opts{scalefactor}=$opts{ypixels}/$self->getheight(); }
+
+ if ($opts{qtype} eq 'normal') {
+ $tmp->{IMG}=i_scaleaxis($self->{IMG},$opts{scalefactor},0);
+ if ( !defined($tmp->{IMG}) ) { $self->{ERRSTR}='unable to scale image'; return undef; }
+ $img->{IMG}=i_scaleaxis($tmp->{IMG},$opts{scalefactor},1);
+ if ( !defined($img->{IMG}) ) { $self->{ERRSTR}='unable to scale image'; return undef; }
+ return $img;
+ }
+ if ($opts{'qtype'} eq 'preview') {
+ $img->{IMG}=i_scale_nn($self->{IMG},$opts{'scalefactor'},$opts{'scalefactor'});
+ if ( !defined($img->{IMG}) ) { $self->{ERRSTR}='unable to scale image'; return undef; }
+ return $img;
+ }
+ $self->{ERRSTR}='scale: invalid value for qtype'; return undef;
+}
+
+# Scales only along the X axis
+
+sub scaleX {
+ my $self=shift;
+ my %opts=(scalefactor=>0.5,@_);
+
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+
+ my $img = Imager->new();
+
+ if ($opts{pixels}) { $opts{scalefactor}=$opts{pixels}/$self->getwidth(); }
+
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+ $img->{IMG}=i_scaleaxis($self->{IMG},$opts{scalefactor},0);
+
+ if ( !defined($img->{IMG}) ) { $self->{ERRSTR}='unable to scale image'; return undef; }
+ return $img;
+}
+
+# Scales only along the Y axis
+
+sub scaleY {
+ my $self=shift;
+ my %opts=(scalefactor=>0.5,@_);
+
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+
+ my $img = Imager->new();
+
+ if ($opts{pixels}) { $opts{scalefactor}=$opts{pixels}/$self->getheight(); }
+
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+ $img->{IMG}=i_scaleaxis($self->{IMG},$opts{scalefactor},1);
+
+ if ( !defined($img->{IMG}) ) { $self->{ERRSTR}='unable to scale image'; return undef; }
+ return $img;
+}
+
+
+# Transform returns a spatial transformation of the input image
+# this moves pixels to a new location in the returned image.
+# NOTE - should make a utility function to check transforms for
+# stack overruns
+
+sub transform {
+ my $self=shift;
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+ my %opts=@_;
+ my (@op,@ropx,@ropy,$iop,$or,@parm,$expr,@xt,@yt,@pt,$numre);
+
+# print Dumper(\%opts);
+# xopcopdes
+
+ if ( $opts{'xexpr'} and $opts{'yexpr'} ) {
+ if (!$I2P) {
+ eval ("use Affix::Infix2Postfix;");
+ print $@;
+ if ( $@ ) {
+ $self->{ERRSTR}='transform: expr given and Affix::Infix2Postfix is not avaliable.';
+ return undef;
+ }
+ $I2P=Affix::Infix2Postfix->new('ops'=>[{op=>'+',trans=>'Add'},
+ {op=>'-',trans=>'Sub'},
+ {op=>'*',trans=>'Mult'},
+ {op=>'/',trans=>'Div'},
+ {op=>'-',type=>'unary',trans=>'u-'},
+ {op=>'**'},
+ {op=>'func',type=>'unary'}],
+ 'grouping'=>[qw( \( \) )],
+ 'func'=>[qw( sin cos )],
+ 'vars'=>[qw( x y )]
+ );
+ }
+
+ @xt=$I2P->translate($opts{'xexpr'});
+ @yt=$I2P->translate($opts{'yexpr'});
+
+ $numre=$I2P->{'numre'};
+ @pt=(0,0);
+
+ for(@xt) { if (/$numre/) { push(@pt,$_); push(@{$opts{'xopcodes'}},'Parm',$#pt); } else { push(@{$opts{'xopcodes'}},$_); } }
+ for(@yt) { if (/$numre/) { push(@pt,$_); push(@{$opts{'yopcodes'}},'Parm',$#pt); } else { push(@{$opts{'yopcodes'}},$_); } }
+ @{$opts{'parm'}}=@pt;
+ }
+
+# print Dumper(\%opts);
+
+ if ( !exists $opts{'xopcodes'} or @{$opts{'xopcodes'}}==0) {
+ $self->{ERRSTR}='transform: no xopcodes given.';
+ return undef;
+ }
+
+ @op=@{$opts{'xopcodes'}};
+ for $iop (@op) {
+ if (!defined ($OPCODES{$iop}) and ($iop !~ /^\d+$/) ) {
+ $self->{ERRSTR}="transform: illegal opcode '$_'.";
+ return undef;
+ }
+ push(@ropx,(exists $OPCODES{$iop}) ? @{$OPCODES{$iop}} : $iop );
+ }
+
+
+# yopcopdes
+
+ if ( !exists $opts{'yopcodes'} or @{$opts{'yopcodes'}}==0) {
+ $self->{ERRSTR}='transform: no yopcodes given.';
+ return undef;
+ }
+
+ @op=@{$opts{'yopcodes'}};
+ for $iop (@op) {
+ if (!defined ($OPCODES{$iop}) and ($iop !~ /^\d+$/) ) {
+ $self->{ERRSTR}="transform: illegal opcode '$_'.";
+ return undef;
+ }
+ push(@ropy,(exists $OPCODES{$iop}) ? @{$OPCODES{$iop}} : $iop );
+ }
+
+#parameters
+
+ if ( !exists $opts{'parm'}) {
+ $self->{ERRSTR}='transform: no parameter arg given.';
+ return undef;
+ }
+
+# print Dumper(\@ropx);
+# print Dumper(\@ropy);
+# print Dumper(\@ropy);
+
+ my $img = Imager->new();
+ $img->{IMG}=i_transform($self->{IMG},\@ropx,\@ropy,$opts{'parm'});
+ if ( !defined($img->{IMG}) ) { $self->{ERRSTR}='transform: failed'; return undef; }
+ return $img;
+}
+
+
+{
+ my $got_expr;
+ sub transform2 {
+ my ($opts, @imgs) = @_;
+
+ if (!$got_expr) {
+ # this is fairly big, delay loading it
+ eval "use Imager::Expr";
+ die $@ if $@;
+ ++$got_expr;
+ }
+
+ $opts->{variables} = [ qw(x y) ];
+ my ($width, $height) = @{$opts}{qw(width height)};
+ if (@imgs) {
+ $width ||= $imgs[0]->getwidth();
+ $height ||= $imgs[0]->getheight();
+ my $img_num = 1;
+ for my $img (@imgs) {
+ $opts->{constants}{"w$img_num"} = $img->getwidth();
+ $opts->{constants}{"h$img_num"} = $img->getheight();
+ $opts->{constants}{"cx$img_num"} = $img->getwidth()/2;
+ $opts->{constants}{"cy$img_num"} = $img->getheight()/2;
+ ++$img_num;
+ }
+ }
+ if ($width) {
+ $opts->{constants}{w} = $width;
+ $opts->{constants}{cx} = $width/2;
+ }
+ else {
+ $Imager::ERRSTR = "No width supplied";
+ return;
+ }
+ if ($height) {
+ $opts->{constants}{h} = $height;
+ $opts->{constants}{cy} = $height/2;
+ }
+ else {
+ $Imager::ERRSTR = "No height supplied";
+ return;
+ }
+ my $code = Imager::Expr->new($opts);
+ if (!$code) {
+ $Imager::ERRSTR = Imager::Expr::error();
+ return;
+ }
+
+ my $img = Imager->new();
+ $img->{IMG} = i_transform2($opts->{width}, $opts->{height}, $code->code(),
+ $code->nregs(), $code->cregs(),
+ [ map { $_->{IMG} } @imgs ]);
+ if (!defined $img->{IMG}) {
+ $Imager::ERRSTR = "transform2 failed";
+ return;
+ }
+
+ return $img;
+ }
+}
+
+
+
+
+
+
+
+
+sub rubthrough {
+ my $self=shift;
+ my %opts=(tx=>0,ty=>0,@_);
+
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+ unless ($opts{src} && $opts{src}->{IMG}) { $self->{ERRSTR}='empty input image for source'; return undef; }
+
+ i_rubthru($self->{IMG}, $opts{src}->{IMG}, $opts{tx},$opts{ty});
+ return $self;
+}
+
+
+
+# These two are supported for legacy code only
+
+sub i_color_new {
+ return Imager::Color->new($_[0], $_[1], $_[2], $_[3]);
+}
+
+sub i_color_set {
+ return Imager::Color::set($_[0], $_[1], $_[2], $_[3], $_[4]);
+}
+
+
+
+# Draws a box between the specified corner points.
+
+sub box {
+ my $self=shift;
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+ my $dflcl=i_color_new(255,255,255,255);
+ my %opts=(color=>$dflcl,xmin=>0,ymin=>0,xmax=>$self->getwidth()-1,ymax=>$self->getheight()-1,@_);
+
+ if (exists $opts{'box'}) {
+ $opts{'xmin'} = min($opts{'box'}->[0],$opts{'box'}->[2]);
+ $opts{'xmax'} = max($opts{'box'}->[0],$opts{'box'}->[2]);
+ $opts{'ymin'} = min($opts{'box'}->[1],$opts{'box'}->[3]);
+ $opts{'ymax'} = max($opts{'box'}->[1],$opts{'box'}->[3]);
+ }
+
+ if ($opts{filled}) { i_box_filled($self->{IMG},$opts{xmin},$opts{ymin},$opts{xmax},$opts{ymax},$opts{color}); }
+ else { i_box($self->{IMG},$opts{xmin},$opts{ymin},$opts{xmax},$opts{ymax},$opts{color}); }
+ return $self;
+}
+
+# Draws an arc - this routine SUCKS and is buggy - it sometimes doesn't work when the arc is a convex polygon
+
+sub arc {
+ my $self=shift;
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+ my $dflcl=i_color_new(255,255,255,255);
+ my %opts=(color=>$dflcl,
+ 'r'=>min($self->getwidth(),$self->getheight())/3,
+ 'x'=>$self->getwidth()/2,
+ 'y'=>$self->getheight()/2,
+ 'd1'=>0, 'd2'=>361, @_);
+ i_arc($self->{IMG},$opts{'x'},$opts{'y'},$opts{'r'},$opts{'d1'},$opts{'d2'},$opts{'color'});
+ return $self;
+}
+
+# Draws a line from one point to (but not including) the destination point
+
+sub line {
+ my $self=shift;
+ my $dflcl=i_color_new(0,0,0,0);
+ my %opts=(color=>$dflcl,@_);
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+
+ unless (exists $opts{x1} and exists $opts{y1}) { $self->{ERRSTR}='missing begining coord'; return undef; }
+ unless (exists $opts{x2} and exists $opts{y2}) { $self->{ERRSTR}='missing ending coord'; return undef; }
+
+ if ($opts{antialias}) {
+ i_line_aa($self->{IMG},$opts{x1}, $opts{y1}, $opts{x2}, $opts{y2}, $opts{color});
+ } else {
+ i_draw($self->{IMG},$opts{x1}, $opts{y1}, $opts{x2}, $opts{y2}, $opts{color});
+ }
+ return $self;
+}
+
+# Draws a line between an ordered set of points - It more or less just transforms this
+# into a list of lines.
+
+sub polyline {
+ my $self=shift;
+ my ($pt,$ls,@points);
+ my $dflcl=i_color_new(0,0,0,0);
+ my %opts=(color=>$dflcl,@_);
+
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+
+ if (exists($opts{points})) { @points=@{$opts{points}}; }
+ if (!exists($opts{points}) and exists($opts{'x'}) and exists($opts{'y'}) ) {
+ @points=map { [ $opts{'x'}->[$_],$opts{'y'}->[$_] ] } (0..(scalar @{$opts{'x'}}-1));
+ }
+
+# print Dumper(\@points);
+
+ if ($opts{antialias}) {
+ for $pt(@points) {
+ if (defined($ls)) { i_line_aa($self->{IMG},$ls->[0],$ls->[1],$pt->[0],$pt->[1],$opts{color}); }
+ $ls=$pt;
+ }
+ } else {
+ for $pt(@points) {
+ if (defined($ls)) { i_draw($self->{IMG},$ls->[0],$ls->[1],$pt->[0],$pt->[1],$opts{color}); }
+ $ls=$pt;
+ }
+ }
+ return $self;
+}
+
+# this the multipoint bezier curve
+# this is here more for testing that actual usage since
+# this is not a good algorithm. Usually the curve would be
+# broken into smaller segments and each done individually.
+
+sub polybezier {
+ my $self=shift;
+ my ($pt,$ls,@points);
+ my $dflcl=i_color_new(0,0,0,0);
+ my %opts=(color=>$dflcl,@_);
+
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+
+ if (exists $opts{points}) {
+ $opts{'x'}=map { $_->[0]; } @{$opts{'points'}};
+ $opts{'y'}=map { $_->[1]; } @{$opts{'points'}};
+ }
+
+ unless ( @{$opts{'x'}} and @{$opts{'x'}} == @{$opts{'y'}} ) {
+ $self->{ERRSTR}='Missing or invalid points.';
+ return;
+ }
+
+ i_bezier_multi($self->{IMG},$opts{'x'},$opts{'y'},$opts{'color'});
+ return $self;
+}
+
+
+# destructive border - image is shrunk by one pixel all around
+
+sub border {
+ my ($self,%opts)=@_;
+ my($tx,$ty)=($self->getwidth()-1,$self->getheight()-1);
+ $self->polyline('x'=>[0,$tx,$tx,0,0],'y'=>[0,0,$ty,$ty,0],%opts);
+}
+
+
+# Get the width of an image
+
+sub getwidth {
+ my $self = shift;
+ if (!defined($self->{IMG})) { $self->{ERRSTR} = 'image is empty'; return undef; }
+ return (i_img_info($self->{IMG}))[0];
+}
+
+# Get the height of an image
+
+sub getheight {
+ my $self = shift;
+ if (!defined($self->{IMG})) { $self->{ERRSTR} = 'image is empty'; return undef; }
+ return (i_img_info($self->{IMG}))[1];
+}
+
+# Get number of channels in an image
+
+sub getchannels {
+ my $self = shift;
+ if (!defined($self->{IMG})) { $self->{ERRSTR} = 'image is empty'; return undef; }
+ return i_img_getchannels($self->{IMG});
+}
+
+# Get channel mask
+
+sub getmask {
+ my $self = shift;
+ if (!defined($self->{IMG})) { $self->{ERRSTR} = 'image is empty'; return undef; }
+ return i_img_getmask($self->{IMG});
+}
+
+# Set channel mask
+
+sub setmask {
+ my $self = shift;
+ my %opts = @_;
+ if (!defined($self->{IMG})) { $self->{ERRSTR} = 'image is empty'; return undef; }
+ i_img_setmask( $self->{IMG} , $opts{mask} );
+}
+
+# Get number of colors in an image
+
+sub getcolorcount {
+ my $self=shift;
+ my %opts=(maxcolors=>2**30,@_);
+ if (!defined($self->{IMG})) { $self->{ERRSTR}='image is empty'; return undef; }
+ my $rc=i_count_colors($self->{IMG},$opts{'maxcolors'});
+ return ($rc==-1? undef : $rc);
+}
+
+# draw string to an image
+
+sub string {
+ my $self = shift;
+ unless ($self->{IMG}) { $self->{ERRSTR}='empty input image'; return undef; }
+
+ my %input=('x'=>0, 'y'=>0, @_);
+ $input{string}||=$input{text};
+
+ unless(exists $input{string}) {
+ $self->{ERRSTR}="missing required parameter 'string'";
+ return;
+ }
+
+ unless($input{font}) {
+ $self->{ERRSTR}="missing required parameter 'font'";
+ return;
+ }
+
+ my $aa=1;
+ my $font=$input{'font'};
+ my $align=$font->{'align'} unless exists $input{'align'};
+ my $color=$input{'color'} || $font->{'color'};
+ my $size=$input{'size'} || $font->{'size'};
+
+ if (!defined($size)) { $self->{ERRSTR}='No size parameter and no default in font'; return undef; }
+
+ $aa=$font->{'aa'} if exists $font->{'aa'};
+ $aa=$input{'aa'} if exists $input{'aa'};
+
+
+
+# unless($font->can('text')) {
+# $self->{ERRSTR}="font is unable to do what we need";
+# return;
+# }
+
+# use Data::Dumper;
+# warn Dumper($font);
+
+# print "Channel=".$input{'channel'}."\n";
+
+ if ( $font->{'type'} eq 't1' ) {
+ if ( exists $input{'channel'} ) {
+ Imager::Font::t1_set_aa_level($aa);
+ i_t1_cp($self->{IMG},$input{'x'},$input{'y'},
+ $input{'channel'},$font->{'id'},$size,
+ $input{'string'},length($input{'string'}),1);
+ } else {
+ Imager::Font::t1_set_aa_level($aa);
+ i_t1_text($self->{IMG},$input{'x'},$input{'y'},
+ $color,$font->{'id'},$size,
+ $input{'string'},length($input{'string'}),1);
+ }
+ }
+
+ if ( $font->{'type'} eq 'tt' ) {
+ if ( exists $input{'channel'} ) {
+ i_tt_cp($font->{'id'},$self->{IMG},$input{'x'},$input{'y'},$input{'channel'},
+ $size,$input{'string'},length($input{'string'}),$aa);
+ } else {
+ i_tt_text($font->{'id'},$self->{IMG},$input{'x'},$input{'y'},$color,$size,
+ $input{'string'},length($input{'string'}),$aa);
+ }
+ }
+
+ return $self;
+}
+
+
+
+
+
+# Shortcuts that can be exported
+
+sub newcolor { Imager::Color->new(@_); }
+sub newfont { Imager::Font->new(@_); }
+
+*NC=*newcolour=*newcolor;
+*NF=*newfont;
+
+*open=\&read;
+*circle=\&arc;
+
+
+#### Utility routines
+
+sub errstr { $_[0]->{ERRSTR} }
+
+
+
+
+
+
+# Default guess for the type of an image from extension
+
+sub def_guess_type {
+ my $name=lc(shift);
+ my $ext;
+ $ext=($name =~ m/\.([^\.]+)$/)[0];
+ return 'tiff' if ($ext =~ m/^tiff?$/);
+ return 'jpeg' if ($ext =~ m/^jpe?g$/);
+ return 'pnm' if ($ext =~ m/^p[pgb]m$/);
+ return 'png' if ($ext eq "png");
+ return 'gif' if ($ext eq "gif");
+ return ();
+}
+
+# get the minimum of a list
+
+sub min {
+ my $mx=shift;
+ for(@_) { if ($_<$mx) { $mx=$_; }}
+ return $mx;
+}
+
+# get the maximum of a list
+
+sub max {
+ my $mx=shift;
+ for(@_) { if ($_>$mx) { $mx=$_; }}
+ return $mx;
+}
+
+# string stuff for iptc headers
+
+sub clean {
+ my($str)=$_[0];
+ $str = substr($str,3);
+ $str =~ s/[\n\r]//g;
+ $str =~ s/\s+/ /g;
+ $str =~ s/^\s//;
+ $str =~ s/\s$//;
+ return $str;
+}
+
+# A little hack to parse iptc headers.
+
+sub parseiptc {
+ my $self=shift;
+ my(@sar,$item,@ar);
+ my($caption,$photogr,$headln,$credit);
+
+ my $str=$self->{IPTCRAW};
+
+ #print $str;
+
+ @ar=split(/8BIM/,$str);
+
+ my $i=0;
+ foreach (@ar) {
+ if (/^\004\004/) {
+ @sar=split(/\034\002/);
+ foreach $item (@sar) {
+ if ($item =~ m/^x/) {
+ $caption=&clean($item);
+ $i++;
+ }
+ if ($item =~ m/^P/) {
+ $photogr=&clean($item);
+ $i++;
+ }
+ if ($item =~ m/^i/) {
+ $headln=&clean($item);
+ $i++;
+ }
+ if ($item =~ m/^n/) {
+ $credit=&clean($item);
+ $i++;
+ }
+ }
+ }
+ }
+ return (caption=>$caption,photogr=>$photogr,headln=>$headln,credit=>$credit);
+}
+
+
+
+
+
+
+# Autoload methods go after =cut, and are processed by the autosplit program.
+
+1;
+__END__
+# Below is the stub of documentation for your module. You better edit it!
+
+=head1 NAME
+
+Imager - Perl extension for Generating 24 bit Images
+
+=head1 SYNOPSIS
+
+ use Imager qw(init);
+
+ init();
+ $img = Imager->new();
+ $img->open(file=>'image.ppm',type=>'pnm')
+ || print "failed: ",$img->{ERRSTR},"\n";
+ $scaled=$img->scale(xpixels=>400,ypixels=>400);
+ $scaled->write(file=>'sc_image.ppm',type=>'pnm')
+ || print "failed: ",$scaled->{ERRSTR},"\n";
+
+=head1 DESCRIPTION
+
+Imager is a module for creating and altering images - It is not meant
+as a replacement or a competitor to ImageMagick or GD. Both are
+excellent packages and well supported.
+
+=head2 API
+
+Almost all functions take the parameters in the hash fashion.
+Example:
+
+ $img->open(file=>'lena.png',type=>'png');
+
+or just:
+
+ $img->open(file=>'lena.png');
+
+=head2 Basic concept
+
+An Image object is created with C<$img = Imager-E<gt>new()> Should
+this fail for some reason an explanation can be found in
+C<$Imager::ERRSTR> usually error messages are stored in
+C<$img-E<gt>{ERRSTR}>, but since no object is created this is the only
+way to give back errors. C<$Imager::ERRSTR> is also used to report
+all errors not directly associated with an image object. Examples:
+
+ $img=Imager->new(); # This is an empty image (size is 0 by 0)
+ $img->open(file=>'lena.png',type=>'png'); # initializes from file
+
+or if you want to create an empty image:
+
+ $img=Imager->new(xsize=>400,ysize=>300,channels=>4);
+
+This example creates a completely black image of width 400 and
+height 300 and 4 channels.
+
+If you have an existing image, use img_set() to change it's dimensions
+- this will destroy any existing image data:
+
+ $img->img_set(xsize=>500, ysize=>500, channels=>4);
+
+Color objects are created by calling the Imager::Color->new()
+method:
+
+ $color = Imager::Color->new($red, $green, $blue);
+ $color = Imager::Color->new($red, $green, $blue, $alpha);
+ $color = Imager::Color->new("#C0C0FF"); # html color specification
+
+This object can then be passed to functions that require a color parameter.
+
+Coordinates in Imager have the origin in the upper left corner. The
+horizontal coordinate increases to the right and the vertical
+downwards.
+
+=head2 Reading and writing images
+
+C<$img-E<gt>read()> generally takes two parameters, 'file' and 'type'.
+If the type of the file can be determined from the suffix of the file
+it can be omitted. Format dependant parameters are: For images of
+type 'raw' two extra parameters are needed 'xsize' and 'ysize', if the
+'channel' parameter is omitted for type 'raw' it is assumed to be 3.
+gif and png images might have a palette are converted to truecolor bit
+when read. Alpha channel is preserved for png images irregardless of
+them being in RGB or gray colorspace. Similarly grayscale jpegs are
+one channel images after reading them. For jpeg images the iptc
+header information (stored in the APP13 header) is avaliable to some
+degree. You can get the raw header with C<$img-E<gt>{IPTCRAW}>, but
+you can also retrieve the most basic information with
+C<%hsh=$img-E<gt>parseiptc()> as always patches are welcome. Neither
+pnm nor tiff have extra options. Examples:
+
+ $img = Imager->new();
+ $img->read(file=>"cover.jpg") or die $img->errstr; # gets type from name
+
+ $img = Imager->new();
+ { local(*FH,$/); open(FH,"file.gif") or die $!; $a=<FH>; }
+ $img->read(data=>$a,type=>'gif') or die $img->errstr;
+
+The second example shows how to read an image from a scalar, this is
+usefull if your data originates from somewhere else than a filesystem
+such as a database over a DBI connection.
+
+*Note that load() is now an alias for read but will be removed later*
+
+C<$img-E<gt>write> has the same interface as C<read()>. The earlier
+comments on C<read()> for autodetecting filetypes apply. For jpegs
+quality can be adjusted via the 'jpegquality' parameter (0-100). The
+number of colorplanes in gifs are set with 'gifplanes' and should be
+between 1 (2 color) and 8 (256 colors). It is also possible to choose
+between two quantizing methods with the parameter 'gifquant'. If set
+to mc it uses the mediancut algorithm from either giflibrary. If set
+to lm it uses a local means algorithm. It is then possible to give
+some extra settings. lmdither is the dither deviation amount in pixels
+(manhattan distance). lmfixed can be an array ref who holds an array
+of Imager::Color objects. Note that the local means algorithm needs
+much more cpu time but also gives considerable better results than the
+median cut algorithm.
+
+Currently just for gif files, you can specify various options for the
+conversion from Imager's internal RGB format to the target's indexed
+file format. If you set the gifquant option to 'gen', you can use the
+options specified under L<Quantization options>.
+
+To see what Imager is compiled to support the following code snippet
+is sufficient:
+
+ use Imager;
+ print "@{[keys %Imager::formats]}";
+
+=head2 Multi-image files
+
+Currently just for gif files, you can create files that contain more
+than one image.
+
+To do this:
+
+ Imager->write_multi(\%opts, @images)
+
+Where %opts describes 3 possible types of outputs:
+
+=over 4
+
+=item callback
+
+A code reference which is called with a single parameter, the data to
+be written. You can also specify $opts{maxbuffer} which is the
+maximum amount of data buffered. Note that there can be larger writes
+than this if the file library writes larger blocks. A smaller value
+maybe useful for writing to a socket for incremental display.
+
+=item fd
+
+The file descriptor to save the images to.
+
+=item file
+
+The name of the file to write to.
+
+%opts may also include the keys from L<Gif options> and L<Quantization
+options>.
+
+=back
+
+The current aim is to support other multiple image formats in the
+future, such as TIFF, and to support reading multiple images from a
+single file.
+
+A simple example:
+
+ my @images;
+ # ... code to put images in @images
+ Imager->write_multi({type=>'gif',
+ file=>'anim.gif',
+ gif_delays=>[ 10 x @images ] },
+ @images)
+ or die "Oh dear!";
+
+=head2 Gif options
+
+These options can be specified when calling write_multi() for gif
+files, when writing a single image with the gifquant option set to
+'gen', or for direct calls to i_writegif_gen and i_writegif_callback.
+
+Note that some viewers will ignore some of these options
+(gif_user_input in particular).
+
+=over 4
+
+=item gif_each_palette
+
+Each image in the gif file has it's own palette if this is non-zero.
+All but the first image has a local colour table (the first uses the
+global colour table.
+
+=item interlace
+
+The images are written interlaced if this is non-zero.
+
+=item gif_delays
+
+A reference to an array containing the delays between images, in 1/100
+seconds.
+
+=item gif_user_input
+
+A reference to an array contains user input flags. If the given flag
+is non-zero the image viewer should wait for input before displaying
+the next image.
+
+=item gif_disposal
+
+A reference to an array of image disposal methods. These define what
+should be done to the image before displaying the next one. These are
+integers, where 0 means unspecified, 1 means the image should be left
+in place, 2 means restore to background colour and 3 means restore to
+the previous value.
+
+=item gif_tran_color
+
+A reference to an Imager::Color object, which is the colour to use for
+the palette entry used to represent transparency in the palette.
+
+=item gif_positions
+
+A reference to an array of references to arrays which represent screen
+positions for each image.
+
+=item gif_loop_count
+
+If this is non-zero the Netscape loop extension block is generated,
+which makes the animation of the images repeat.
+
+This is currently unimplemented due to some limitations in giflib.
+
+=back
+
+=head2 Quantization options
+
+These options can be specified when calling write_multi() for gif
+files, when writing a single image with the gifquant option set to
+'gen', or for direct calls to i_writegif_gen and i_writegif_callback.
+
+=over 4
+
+=item colors
+
+A arrayref of colors that are fixed. Note that some color generators
+will ignore this.
+
+=item transp
+
+The type of transparency processing to perform for images with an
+alpha channel where the output format does not have a proper alpha
+channel (eg. gif). This can be any of:
+
+=over 4
+
+=item none
+
+No transparency processing is done. (default)
+
+=item threshold
+
+Pixels more transparent that tr_threshold are rendered as transparent.
+
+=item errdiff
+
+An error diffusion dither is done on the alpha channel. Note that
+this is independent of the translation performed on the colour
+channels, so some combinations may cause undesired artifacts.
+
+=item ordered
+
+The ordered dither specified by tr_orddith is performed on the alpha
+channel.
+
+=back
+
+=item tr_threshold
+
+The highest alpha value at which a pixel will be made transparent when
+transp is 'threshold'. (0-255, default 127)
+
+=item tr_errdiff
+
+The type of error diffusion to perform on the alpha channel when
+transp is 'errdiff'. This can be any defined error diffusion type
+except for custom (see errdiff below).
+
+=item tr_ordered
+
+The type of ordered dither to perform on the alpha channel when transp
+is 'orddith'. Possible values are:
+
+=over 4
+
+=item random
+
+A semi-random map is used. The map is the same each time. Currently
+the default (which may change.)
+
+=item dot8
+
+8x8 dot dither.
+
+=item dot4
+
+4x4 dot dither
+
+=item hline
+
+horizontal line dither.
+
+=item vline
+
+vertical line dither.
+
+=item "/line"
+
+=item slashline
+
+diagonal line dither
+
+=item '\line'
+
+=item backline
+
+diagonal line dither
+
+=item custom
+
+A custom dither matrix is used - see tr_map
+
+=back
+
+=item tr_map
+
+When tr_orddith is custom this defines an 8 x 8 matrix of integers
+representing the transparency threshold for pixels corresponding to
+each position. This should be a 64 element array where the first 8
+entries correspond to the first row of the matrix. Values should be
+betweern 0 and 255.
+
+=item make_colors
+
+Defines how the quantization engine will build the palette(s).
+Currently this is ignored if 'translate' is 'giflib', but that may
+change. Possible values are:
+
+=over 4
+
+=item none
+
+Only colors supplied in 'colors' are used.
+
+=item webmap
+
+The web color map is used (need url here.)
+
+=item addi
+
+The original code for generating the color map (Addi's code) is used.
+
+=back
+
+Other methods may be added in the future.
+
+=item colors
+
+A arrayref containing Imager::Color objects, which represents the
+starting set of colors to use in translating the images. webmap will
+ignore this. The final colors used are copied back into this array
+(which is expanded if necessary.)
+
+=item max_colors
+
+The maximum number of colors to use in the image.
+
+=item translate
+
+The method used to translate the RGB values in the source image into
+the colors selected by make_colors. Note that make_colors is ignored
+whene translate is 'giflib'.
+
+Possible values are:
+
+=over 4
+
+=item giflib
+
+The giflib native quantization function is used.
+
+=item closest
+
+The closest color available is used.
+
+=item perturb
+
+The pixel color is modified by perturb, and the closest color is chosen.
+
+=item errdiff
+
+An error diffusion dither is performed.
+
+=back
+
+It's possible other transate values will be added.
+
+=item errdiff
+
+The type of error diffusion dither to perform. These values (except
+for custom) can also be used in tr_errdif.
+
+=over 4
+
+=item floyd
+
+Floyd-Steinberg dither
+
+=item jarvis
+
+Jarvis, Judice and Ninke dither
+
+=item stucki
+
+Stucki dither
+
+=item custom
+
+Custom. If you use this you must also set errdiff_width,
+errdiff_height and errdiff_map.
+
+=back
+
+=item errdiff_width
+
+=item errdiff_height
+
+=item errdiff_orig
+
+=item errdiff_map
+
+When translate is 'errdiff' and errdiff is 'custom' these define a
+custom error diffusion map. errdiff_width and errdiff_height define
+the size of the map in the arrayref in errdiff_map. errdiff_orig is
+an integer which indicates the current pixel position in the top row
+of the map.
+
+=item perturb
+
+When translate is 'perturb' this is the magnitude of the random bias
+applied to each channel of the pixel before it is looked up in the
+color table.
+
+=back
+
+=head2 Obtaining/setting attributes of images
+
+To get the size of an image in pixels the C<$img-E<gt>getwidth()> and
+C<$img-E<gt>getheight()> are used.
+
+To get the number of channels in
+an image C<$img-E<gt>getchannels()> is used. $img-E<gt>getmask() and
+$img-E<gt>setmask() are used to get/set the channel mask of the image.
+
+ $mask=$img->getmask();
+ $img->setmask(mask=>1+2); # modify red and green only
+ $img->setmask(mask=>8); # modify alpha only
+ $img->setmask(mask=>$mask); # restore previous mask
+
+The mask of an image describes which channels are updated when some
+operation is performed on an image. Naturally it is not possible to
+apply masks to operations like scaling that alter the dimensions of
+images.
+
+It is possible to have Imager find the number of colors in an image
+by using C<$img-E<gt>getcolorcount()>. It requires memory proportionally
+to the number of colors in the image so it is possible to have it
+stop sooner if you only need to know if there are more than a certain number
+of colors in the image. If there are more colors than asked for
+the function return undef. Examples:
+
+ if (!defined($img->getcolorcount(maxcolors=>512)) {
+ print "Less than 512 colors in image\n";
+ }
+
+=head2 Drawing Methods
+
+IMPLEMENTATION MORE OR LESS DONE CHECK THE TESTS
+
+DOCUMENTATION OF THIS SECTION OUT OF SYNC
+
+It is possible to draw with graphics primitives onto images. Such
+primitives include boxes, arcs, circles and lines. A reference
+oriented list follows.
+
+Box:
+ $img->box(color=>$blue,xmin=>10,ymin=>30,xmax=>200,ymax=>300,filled=>1);
+
+The above example calls the C<box> method for the image and the box
+covers the pixels with in the rectangle specified. If C<filled> is
+ommited it is drawn as an outline. If any of the edges of the box are
+ommited it will snap to the outer edge of the image in that direction.
+Also if a color is omitted a color with (255,255,255,255) is used
+instead.
+
+Arc:
+ $img->arc(color=>$red, r=20, x=>200, y=>100, d1=>10, d2=>20 );
+
+This creates a filled red arc with a 'center' at (200, 100) and spans
+10 degrees and the slice has a radius of 20. SEE section on BUGS.
+
+Circle:
+ $img->circle(color=>$green, r=50, x=>200, y=>100);
+
+This creates a green circle with its center at (200, 100) and has a
+radius of 20.
+
+Line:
+ $img->line(color=>$green, x1=10, x2=>100,
+ y1=>20, y2=>50, antialias=>1 );
+
+That draws an antialiased line from (10,100) to (20,50).
+
+Polyline:
+ $img->polyline(points=>[[$x0,$y0],[$x1,$y1],[$x2,$y2]],color=>$red);
+ $img->polyline(x=>[$x0,$x1,$x2], y=>[$y0,$y1,$y2], antialias=>1);
+
+Polyline is used to draw multilple lines between a series of points.
+The point set can either be specified as an arrayref to an array of
+array references (where each such array represents a point). The
+other way is to specify two array references.
+
+=head2 Text rendering
+
+Text rendering is described in the Imager::Font manpage.
+
+=head2 Image resizing
+
+To scale an image so porportions are maintained use the
+C<$img-E<gt>scale()> method. if you give either a xpixels or ypixels
+parameter they will determine the width or height respectively. If
+both are given the one resulting in a larger image is used. example:
+C<$img> is 700 pixels wide and 500 pixels tall.
+
+ $img->scale(xpixels=>400); # 400x285
+ $img->scale(ypixels=>400); # 560x400
+
+ $img->scale(xpixels=>400,ypixels=>400); # 560x400
+ $img->scale(xpixels=>400,ypixels=>400,type=>min); # 400x285
+
+ $img->scale(scalefactor=>0.25); 175x125 $img->scale(); # 350x250
+
+if you want to create low quality previews of images you can pass
+C<qtype=E<gt>'preview'> to scale and it will use nearest neighbor
+sampling instead of filtering. It is much faster but also generates
+worse looking images - especially if the original has a lot of sharp
+variations and the scaled image is by more than 3-5 times smaller than
+the original.
+
+If you need to scale images per axis it is best to do it simply by
+calling scaleX and scaleY. You can pass either 'scalefactor' or
+'pixels' to both functions.
+
+Another way to resize an image size is to crop it. The parameters
+to crop are the edges of the area that you want in the returned image.
+If a parameter is omited a default is used instead.
+
+ $newimg = $img->crop(left=>50, right=>100, top=>10, bottom=>100);
+ $newimg = $img->crop(left=>50, top=>10, width=>50, height=>90);
+ $newimg = $img->crop(left=>50, right=>100); # top
+
+You can also specify width and height parameters which will produce a
+new image cropped from the center of the input image, with the given
+width and height.
+
+ $newimg = $img->crop(width=>50, height=>50);
+
+The width and height parameters take precedence over the left/right
+and top/bottom parameters respectively.
+
+=head2 Copying images
+
+To create a copy of an image use the C<copy()> method. This is usefull
+if you want to keep an original after doing something that changes the image
+inplace like writing text.
+
+ $img=$orig->copy();
+
+To copy an image to onto another image use the C<paste()> method.
+
+ $dest->paste(left=>40,top=>20,img=>$logo);
+
+That copies the entire C<$logo> image onto the C<$dest> image so that the
+upper left corner of the C<$logo> image is at (40,20).
+
+=head2 Blending Images
+
+To put an image or a part of an image directly into another it is
+best to call the C<paste()> method on the image you want to add to.
+
+ $img->paste(img=>$srcimage,left=>30,top=>50);
+
+That will take paste C<$srcimage> into C<$img> with the upper
+left corner at (30,50). If no values are given for C<left>
+or C<top> they will default to 0.
+
+A more complicated way of blending images is where one image is
+put 'over' the other with a certain amount of opaqueness. The
+method that does this is rubthrough.
+
+ $img->rubthrough(src=>$srcimage,tx=>30,ty=>50);
+
+That will take the image C<$srcimage> and overlay it with the
+upper left corner at (30,50). The C<$srcimage> must be a 4 channel
+image. The last channel is used as an alpha channel.
+
+
+=head2 Filters
+
+A special image method is the filter method. An example is:
+
+ $img->filter(type=>'autolevels');
+
+This will call the autolevels filter. Here is a list of the filters
+that are always avaliable in Imager. This list can be obtained by
+running the C<filterlist.perl> script that comes with the module
+source.
+
+ Filter Arguments
+ turbnoise
+ autolevels lsat(0.1) usat(0.1) skew(0)
+ radnoise
+ noise amount(3) subtype(0)
+ contrast intensity
+ hardinvert
+ gradgen xo yo colors dist
+
+The default values are in parenthesis. All parameters must have some
+value but if a parameter has a default value it may be omitted when
+calling the filter function.
+
+FIXME: make a seperate pod for filters?
+
+=head2 Transformations
+
+Another special image method is transform. It can be used to generate
+warps and rotations and such features. It can be given the operations
+in postfix notation or the module Affix::Infix2Postfix can be used.
+Look in the test case t/t55trans.t for an example.
+
+transform() needs expressions (or opcodes) that determine the source
+pixel for each target pixel. Source expressions are infix expressions
+using any of the +, -, *, / or ** binary operators, the - unary
+operator, ( and ) for grouping and the sin() and cos() functions. The
+target pixel is input as the variables x and y.
+
+You specify the x and y expressions as xexpr and yexpr respectively.
+You can also specify opcodes directly, but that's magic deep enough
+that you can look at the source code.
+
+You can still use the transform() function, but the transform2()
+function is just as fast and is more likely to be enhanced and
+maintained.
+
+Later versions of Imager also support a transform2() class method
+which allows you perform a more general set of operations, rather than
+just specifying a spatial transformation as with the transform()
+method, you can also perform colour transformations, image synthesis
+and image combinations.
+
+transform2() takes an reference to an options hash, and a list of
+images to operate one (this list may be empty):
+
+ my %opts;
+ my @imgs;
+ ...
+ my $img = Imager::transform2(\%opts, @imgs)
+ or die "transform2 failed: $Imager::ERRSTR";
+
+The options hash may define a transformation function, and optionally:
+
+=over 4
+
+=item *
+
+width - the width of the image in pixels. If this isn't supplied the
+width of the first input image is used. If there are no input images
+an error occurs.
+
+=item *
+
+height - the height of the image in pixels. If this isn't supplied
+the height of the first input image is used. If there are no input
+images an error occurs.
+
+=item *
+
+constants - a reference to hash of constants to define for the
+expression engine. Some extra constants are defined by Imager
+
+=back
+
+The tranformation function is specified using either the expr or
+rpnexpr member of the options.
+
+=over 4
+
+=item Infix expressions
+
+You can supply infix expressions to transform 2 with the expr keyword.
+
+$opts{expr} = 'return getp1(w-x, h-y)'
+
+The 'expression' supplied follows this general grammar:
+
+ ( identifier '=' expr ';' )* 'return' expr
+
+This allows you to simplify your expressions using variables.
+
+A more complex example might be:
+
+$opts{expr} = 'pix = getp1(x,y); return if(value(pix)>0.8,pix*0.8,pix)'
+
+Currently to use infix expressions you must have the Parse::RecDescent
+module installed (available from CPAN). There is also what might be a
+significant delay the first time you run the infix expression parser
+due to the compilation of the expression grammar.
+
+=item Postfix expressions
+
+You can supply postfix or reverse-polish notation expressions to
+transform2() through the rpnexpr keyword.
+
+The parser for rpnexpr emulates a stack machine, so operators will
+expect to see their parameters on top of the stack. A stack machine
+isn't actually used during the image transformation itself.
+
+You can store the value at the top of the stack in a variable called
+foo using !foo and retrieve that value again using @foo. The !foo
+notation will pop the value from the stack.
+
+An example equivalent to the infix expression above:
+
+ $opts{rpnexpr} = 'x y getp1 !pix @pix value 0.8 gt @pix 0.8 * @pix ifp'
+
+=back
+
+transform2() has a fairly rich range of operators.
+
+=over 4
+
+=item +, *, -, /, %, **
+
+multiplication, addition, subtraction, division, remainder and
+exponentiation. Multiplication, addition and subtraction can be used
+on colour values too - though you need to be careful - adding 2 white
+values together and multiplying by 0.5 will give you grey, not white.
+
+Division by zero (or a small number) just results in a large number.
+Modulo zero (or a small number) results in zero.
+
+=item sin(N), cos(N), atan2(y,x)
+
+Some basic trig functions. They work in radians, so you can't just
+use the hue values.
+
+=item distance(x1, y1, x2, y2)
+
+Find the distance between two points. This is handy (along with
+atan2()) for producing circular effects.
+
+=item sqrt(n)
+
+Find the square root. I haven't had much use for this since adding
+the distance() function.
+
+=item abs(n)
+
+Find the absolute value.
+
+=item getp1(x,y), getp2(x,y), getp3(x, y)
+
+Get the pixel at position (x,y) from the first, second or third image
+respectively. I may add a getpn() function at some point, but this
+prevents static checking of the instructions against the number of
+images actually passed in.
+
+=item value(c), hue(c), sat(c), hsv(h,s,v)
+
+Separates a colour value into it's value (brightness), hue (colour)
+and saturation elements. Use hsv() to put them back together (after
+suitable manipulation).
+
+=item red(c), green(c), blue(c), rgb(r,g,b)
+
+Separates a colour value into it's red, green and blue colours. Use
+rgb(r,g,b) to put it back together.
+
+=item int(n)
+
+Convert a value to an integer. Uses a C int cast, so it may break on
+large values.
+
+=item if(cond,ntrue,nfalse), if(cond,ctrue,cfalse)
+
+A simple (and inefficient) if function.
+
+=item <=,<,==,>=,>,!=
+
+Relational operators (typically used with if()). Since we're working
+with floating point values the equalities are 'near equalities' - an
+epsilon value is used.
+
+=item &&, ||, not(n)
+
+Basic logical operators.
+
+=back
+
+A few examples:
+
+=over 4
+
+=item rpnexpr=>'x 25 % 15 * y 35 % 10 * getp1 !pat x y getp1 !pix @pix sat 0.7 gt @pat @pix ifp'
+
+tiles a smaller version of the input image over itself where the colour has a saturation over 0.7.
+
+=item rpnexpr=>'x 25 % 15 * y 35 % 10 * getp1 !pat y 360 / !rat x y getp1 1 @rat - pmult @pat @rat pmult padd'
+
+tiles the input image over itself so that at the top of the image the
+full-size image is at full strength and at the bottom the tiling is
+most visible.
+
+=item rpnexpr=>'x y getp1 !pix @pix value 0.96 gt @pix sat 0.1 lt and 128 128 255 rgb @pix ifp'
+
+replace pixels that are white or almost white with a palish blue
+
+=item rpnexpr=>'x 35 % 10 * y 45 % 8 * getp1 !pat x y getp1 !pix @pix sat 0.2 lt @pix value 0.9 gt and @pix @pat @pix value 2 / 0.5 + pmult ifp'
+
+Tiles the input image overitself where the image isn't white or almost
+white.
+
+=item rpnexpr=>'x y 160 180 distance !d y 180 - x 160 - atan2 !a @d 10 / @a + 3.1416 2 * % !a2 @a2 180 * 3.1416 / 1 @a2 sin 1 + 2 / hsv'
+
+Produces a spiral.
+
+=item rpnexpr=>'x y 160 180 distance !d y 180 - x 160 - atan2 !a @d 10 / @a + 3.1416 2 * % !a2 @a 180 * 3.1416 / 1 @a2 sin 1 + 2 / hsv'
+
+A spiral built on top of a colour wheel.
+
+=back
+
+For details on expression parsing see L<Imager::Expr>. For details on
+the virtual machine used to transform the images, see
+L<Imager::regmach.pod>.
+
+=head2 Plugins
+
+It is possible to add filters to the module without recompiling the
+module itself. This is done by using DSOs (Dynamic shared object)
+avaliable on most systems. This way you can maintain our own filters
+and not have to get me to add it, or worse patch every new version of
+the Module. Modules can be loaded AND UNLOADED at runtime. This
+means that you can have a server/daemon thingy that can do something
+like:
+
+ load_plugin("dynfilt/dyntest.so") || die "unable to load plugin\n";
+ %hsh=(a=>35,b=>200,type=>lin_stretch);
+ $img->filter(%hsh);
+ unload_plugin("dynfilt/dyntest.so") || die "unable to load plugin\n";
+ $img->write(type=>'pnm',file=>'testout/t60.jpg')
+ || die "error in write()\n";
+
+Someone decides that the filter is not working as it should -
+dyntest.c modified and recompiled.
+
+ load_plugin("dynfilt/dyntest.so") || die "unable to load plugin\n";
+ $img->filter(%hsh);
+
+An example plugin comes with the module - Please send feedback to
+addi@umich.edu if you test this.
+
+Note: This seems to test ok on the following systems:
+Linux, Solaris, HPUX, OpenBSD, FreeBSD, TRU64/OSF1, AIX.
+If you test this on other systems please let me know.
+
+=head1 BUGS
+
+box, arc, circle do not support antialiasing yet. arc, is only filled
+as of yet. Some routines do not return $self where they should. This
+affects code like this, C<$img-E<gt>box()-E<gt>arc()> where an object
+is expected.
+
+When saving Gif images the program does NOT try to shave of extra
+colors if it is possible. If you specify 128 colors and there are
+only 2 colors used - it will have a 128 colortable anyway.
+
+=head1 AUTHOR
+
+Arnar M. Hrafnkelsson, addi@umich.edu
+And a great deal of help from others - see the README for a complete
+list.
+=head1 SEE ALSO
+
+perl(1), Imager::Color(3), Affix::Infix2Postfix(3), Parse::RecDescent(3)
+http://www.eecs.umich.edu/~addi/perl/Imager/
+
+
+=cut
--- /dev/null
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+#include "ppport.h"
+#ifdef __cplusplus
+
+#endif
+
+#include "image.h"
+#include "feat.h"
+#include "dynaload.h"
+#include "regmach.h"
+
+typedef io_glue* Imager__IO;
+typedef i_color* Imager__Color;
+typedef i_img* Imager__ImgRaw;
+
+
+#ifdef HAVE_LIBTT
+typedef TT_Fonthandle* Imager__TTHandle;
+#endif
+
+typedef struct i_reader_data_tag
+{
+ /* presumably a CODE ref or name of a sub */
+ SV *sv;
+} i_reader_data;
+
+/* used by functions that want callbacks */
+static int read_callback(char *userdata, char *buffer, int need, int want) {
+ i_reader_data *rd = (i_reader_data *)userdata;
+ int count;
+ int result;
+ SV *data;
+ dSP; dTARG = sv_newmortal();
+ /* thanks to Simon Cozens for help with the dTARG above */
+
+ ENTER;
+ SAVETMPS;
+ EXTEND(SP, 2);
+ PUSHMARK(SP);
+ PUSHi(want);
+ PUSHi(need);
+ PUTBACK;
+
+ count = perl_call_sv(rd->sv, G_SCALAR);
+
+ SPAGAIN;
+
+ if (count != 1)
+ croak("Result of perl_call_sv(..., G_SCALAR) != 1");
+
+ data = POPs;
+
+ if (SvOK(data)) {
+ STRLEN len;
+ char *ptr = SvPV(data, len);
+ if (len > want)
+ croak("Too much data returned in reader callback");
+
+ memcpy(buffer, ptr, len);
+ result = len;
+ }
+ else {
+ result = -1;
+ }
+
+ PUTBACK;
+ FREETMPS;
+ LEAVE;
+
+ return result;
+}
+
+typedef struct
+{
+ SV *sv; /* a coderef or sub name */
+} i_writer_data;
+
+/* used by functions that want callbacks */
+static int write_callback(char *userdata, char const *data, int size) {
+ i_writer_data *wd = (i_writer_data *)userdata;
+ int count;
+ int success;
+ SV *sv;
+ dSP;
+
+ ENTER;
+ SAVETMPS;
+ EXTEND(SP, 1);
+ PUSHMARK(SP);
+ XPUSHs(sv_2mortal(newSVpv((char *)data, size)));
+ PUTBACK;
+
+ count = perl_call_sv(wd->sv, G_SCALAR);
+
+ SPAGAIN;
+
+ if (count != 1)
+ croak("Result of perl_call_sv(..., G_SCALAR) != 1");
+
+ sv = POPs;
+ success = SvTRUE(sv);
+
+
+ PUTBACK;
+ FREETMPS;
+ LEAVE;
+
+ return success;
+}
+
+struct value_name {
+ char *name;
+ int value;
+};
+static int lookup_name(struct value_name *names, int count, char *name, int def_value)
+{
+ int i;
+ for (i = 0; i < count; ++i)
+ if (strEQ(names[i].name, name))
+ return names[i].value;
+
+ return def_value;
+}
+static struct value_name transp_names[] =
+{
+ { "none", tr_none },
+ { "threshold", tr_threshold },
+ { "errdiff", tr_errdiff },
+ { "ordered", tr_ordered, },
+};
+
+static struct value_name make_color_names[] =
+{
+ { "none", mc_none, },
+ { "webmap", mc_web_map, },
+ { "addi", mc_addi, },
+};
+
+static struct value_name translate_names[] =
+{
+#ifdef HAVE_LIBGIF
+ { "giflib", pt_giflib, },
+#endif
+ { "closest", pt_closest, },
+ { "perturb", pt_perturb, },
+ { "errdiff", pt_errdiff, },
+};
+
+static struct value_name errdiff_names[] =
+{
+ { "floyd", ed_floyd, },
+ { "jarvis", ed_jarvis, },
+ { "stucki", ed_stucki, },
+ { "custom", ed_custom, },
+};
+
+static struct value_name orddith_names[] =
+{
+ { "random", od_random, },
+ { "dot8", od_dot8, },
+ { "dot4", od_dot4, },
+ { "hline", od_hline, },
+ { "vline", od_vline, },
+ { "/line", od_slashline, },
+ { "slashline", od_slashline, },
+ { "\\line", od_backline, },
+ { "backline", od_backline, },
+ { "custom", od_custom, },
+};
+
+/* look through the hash for quantization options */
+static void handle_quant_opts(i_quantize *quant, HV *hv)
+{
+ /*** POSSIBLY BROKEN: do I need to unref the SV from hv_fetch ***/
+ SV **sv;
+ int i;
+ STRLEN len;
+ char *str;
+
+ sv = hv_fetch(hv, "transp", 6, 0);
+ if (sv && *sv && (str = SvPV(*sv, len))) {
+ quant->transp =
+ lookup_name(transp_names, sizeof(transp_names)/sizeof(*transp_names),
+ str, tr_none);
+ if (quant->transp != tr_none) {
+ quant->tr_threshold = 127;
+ sv = hv_fetch(hv, "tr_threshold", 12, 0);
+ if (sv && *sv)
+ quant->tr_threshold = SvIV(*sv);
+ }
+ if (quant->transp == tr_errdiff) {
+ sv = hv_fetch(hv, "tr_errdiff", 10, 0);
+ if (sv && *sv && (str = SvPV(*sv, len)))
+ quant->tr_errdiff = lookup_name(errdiff_names, sizeof(errdiff_names)/sizeof(*errdiff_names), str, ed_floyd);
+ }
+ if (quant->transp == tr_ordered) {
+ quant->tr_orddith = od_random;
+ sv = hv_fetch(hv, "tr_orddith", 10, 0);
+ if (sv && *sv && (str = SvPV(*sv, len)))
+ quant->tr_orddith = lookup_name(orddith_names, sizeof(orddith_names)/sizeof(*orddith_names), str, od_random);
+
+ if (quant->tr_orddith == od_custom) {
+ sv = hv_fetch(hv, "tr_map", 6, 0);
+ if (sv && *sv && SvTYPE(SvRV(*sv)) == SVt_PVAV) {
+ AV *av = (AV*)SvRV(*sv);
+ len = av_len(av) + 1;
+ if (len > sizeof(quant->tr_custom))
+ len = sizeof(quant->tr_custom);
+ for (i = 0; i < len; ++i) {
+ SV **sv2 = av_fetch(av, i, 0);
+ if (sv2 && *sv2) {
+ quant->tr_custom[i] = SvIV(*sv2);
+ }
+ }
+ while (i < sizeof(quant->tr_custom))
+ quant->tr_custom[i++] = 0;
+ }
+ }
+ }
+ }
+ quant->make_colors = mc_addi;
+ sv = hv_fetch(hv, "make_colors", 11, 0);
+ if (sv && *sv && (str = SvPV(*sv, len))) {
+ quant->make_colors =
+ lookup_name(make_color_names, sizeof(make_color_names)/sizeof(*make_color_names), str, mc_addi);
+ }
+ sv = hv_fetch(hv, "colors", 6, 0);
+ if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) {
+ /* needs to be an array of Imager::Color
+ note that the caller allocates the mc_color array and sets mc_size
+ to it's size */
+ AV *av = (AV *)SvRV(*sv);
+ quant->mc_count = av_len(av)+1;
+ if (quant->mc_count > quant->mc_size)
+ quant->mc_count = quant->mc_size;
+ for (i = 0; i < quant->mc_count; ++i) {
+ SV **sv1 = av_fetch(av, i, 0);
+ if (sv1 && *sv1 && SvROK(*sv1) && sv_derived_from(*sv1, "Imager::Color")) {
+ i_color *col = (i_color *)SvIV((SV*)SvRV(*sv1));
+ quant->mc_colors[i] = *col;
+ }
+ }
+ }
+ sv = hv_fetch(hv, "max_colors", 10, 0);
+ if (sv && *sv) {
+ i = SvIV(*sv);
+ if (i <= quant->mc_size && i >= quant->mc_count)
+ quant->mc_size = i;
+ }
+
+ quant->translate = pt_closest;
+ sv = hv_fetch(hv, "translate", 9, 0);
+ if (sv && *sv && (str = SvPV(*sv, len))) {
+ quant->translate = lookup_name(translate_names, sizeof(translate_names)/sizeof(*translate_names), str, pt_closest);
+ }
+ sv = hv_fetch(hv, "errdiff", 7, 0);
+ if (sv && *sv && (str = SvPV(*sv, len))) {
+ quant->errdiff = lookup_name(errdiff_names, sizeof(errdiff_names)/sizeof(*errdiff_names), str, ed_floyd);
+ }
+ if (quant->translate == pt_errdiff && quant->errdiff == ed_custom) {
+ /* get the error diffusion map */
+ sv = hv_fetch(hv, "errdiff_width", 13, 0);
+ if (sv && *sv)
+ quant->ed_width = SvIV(*sv);
+ sv = hv_fetch(hv, "errdiff_height", 14, 0);
+ if (sv && *sv)
+ quant->ed_height = SvIV(*sv);
+ sv = hv_fetch(hv, "errdiff_orig", 12, 0);
+ if (sv && *sv)
+ quant->ed_orig = SvIV(*sv);
+ if (quant->ed_width > 0 && quant->ed_height > 0) {
+ int sum = 0;
+ quant->ed_map = mymalloc(sizeof(int)*quant->ed_width*quant->ed_height);
+ sv = hv_fetch(hv, "errdiff_map", 11, 0);
+ if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) {
+ AV *av = (AV*)SvRV(*sv);
+ len = av_len(av) + 1;
+ if (len > quant->ed_width * quant->ed_height)
+ len = quant->ed_width * quant->ed_height;
+ for (i = 0; i < len; ++i) {
+ SV **sv2 = av_fetch(av, i, 0);
+ if (sv2 && *sv2) {
+ quant->ed_map[i] = SvIV(*sv2);
+ sum += quant->ed_map[i];
+ }
+ }
+ }
+ if (!sum) {
+ /* broken map */
+ myfree(quant->ed_map);
+ quant->ed_map = 0;
+ quant->errdiff = ed_floyd;
+ }
+ }
+ }
+ sv = hv_fetch(hv, "perturb", 7, 0);
+ if (sv && *sv)
+ quant->perturb = SvIV(*sv);
+}
+
+/* look through the hash for options to add to opts */
+static void handle_gif_opts(i_gif_opts *opts, HV *hv)
+{
+ /*** FIXME: POSSIBLY BROKEN: do I need to unref the SV from hv_fetch? ***/
+ SV **sv;
+ int i;
+ /**((char *)0) = '\0';*/
+ sv = hv_fetch(hv, "gif_each_palette", 16, 0);
+ if (sv && *sv)
+ opts->each_palette = SvIV(*sv);
+ sv = hv_fetch(hv, "interlace", 9, 0);
+ if (sv && *sv)
+ opts->interlace = SvIV(*sv);
+ sv = hv_fetch(hv, "gif_delays", 10, 0);
+ if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) {
+ AV *av = (AV*)SvRV(*sv);
+ opts->delay_count = av_len(av)+1;
+ opts->delays = mymalloc(sizeof(int) * opts->delay_count);
+ for (i = 0; i < opts->delay_count; ++i) {
+ SV *sv1 = *av_fetch(av, i, 0);
+ opts->delays[i] = SvIV(sv1);
+ }
+ }
+ sv = hv_fetch(hv, "gif_user_input", 14, 0);
+ if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) {
+ AV *av = (AV*)SvRV(*sv);
+ opts->user_input_count = av_len(av)+1;
+ opts->user_input_flags = mymalloc(opts->user_input_count);
+ for (i = 0; i < opts->user_input_count; ++i) {
+ SV *sv1 = *av_fetch(av, i, 0);
+ opts->user_input_flags[i] = SvIV(sv1) != 0;
+ }
+ }
+ sv = hv_fetch(hv, "gif_disposal", 12, 0);
+ if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) {
+ AV *av = (AV*)SvRV(*sv);
+ opts->disposal_count = av_len(av)+1;
+ opts->disposal = mymalloc(opts->disposal_count);
+ for (i = 0; i < opts->disposal_count; ++i) {
+ SV *sv1 = *av_fetch(av, i, 0);
+ opts->disposal[i] = SvIV(sv1);
+ }
+ }
+ sv = hv_fetch(hv, "gif_tran_color", 14, 0);
+ if (sv && *sv && SvROK(*sv) && sv_derived_from(*sv, "Imager::Color")) {
+ i_color *col = (i_color *)SvIV((SV *)SvRV(*sv));
+ opts->tran_color = *col;
+ }
+ sv = hv_fetch(hv, "gif_positions", 13, 0);
+ if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) {
+ AV *av = (AV *)SvRV(*sv);
+ opts->position_count = av_len(av) + 1;
+ opts->positions = mymalloc(sizeof(i_gif_pos) * opts->position_count);
+ for (i = 0; i < opts->position_count; ++i) {
+ SV **sv2 = av_fetch(av, i, 0);
+ opts->positions[i].x = opts->positions[i].y = 0;
+ if (sv && *sv && SvROK(*sv) && SvTYPE(SvRV(*sv)) == SVt_PVAV) {
+ AV *av2 = (AV*)SvRV(*sv2);
+ SV **sv3;
+ sv3 = av_fetch(av2, 0, 0);
+ if (sv3 && *sv3)
+ opts->positions[i].x = SvIV(*sv3);
+ sv3 = av_fetch(av2, 1, 0);
+ if (sv3 && *sv3)
+ opts->positions[i].y = SvIV(*sv3);
+ }
+ }
+ }
+ /* Netscape2.0 loop count extension */
+ sv = hv_fetch(hv, "gif_loop_count", 14, 0);
+ if (sv && *sv)
+ opts->loop_count = SvIV(*sv);
+}
+
+/* copies the color map from the hv into the colors member of the HV */
+static void copy_colors_back(HV *hv, i_quantize *quant) {
+ SV **sv;
+ AV *av;
+ int i;
+ SV *work;
+
+ sv = hv_fetch(hv, "colors", 6, 0);
+ if (!sv || !*sv || !SvROK(*sv) || SvTYPE(SvRV(*sv)) != SVt_PVAV) {
+ SV *ref;
+ av = newAV();
+ ref = newRV_inc((SV*) av);
+ sv = hv_store(hv, "colors", 6, ref, 0);
+ }
+ else {
+ av = (AV *)SvRV(*sv);
+ }
+ av_extend(av, quant->mc_count+1);
+ for (i = 0; i < quant->mc_count; ++i) {
+ i_color *in = quant->mc_colors+i;
+ Imager__Color c = ICL_new_internal(in->rgb.r, in->rgb.g, in->rgb.b, 255);
+ work = sv_newmortal();
+ sv_setref_pv(work, "Imager::Color", (void *)c);
+ SvREFCNT_inc(work);
+ if (!av_store(av, i, work)) {
+ SvREFCNT_dec(work);
+ }
+ }
+}
+
+/* used to make the typemap happy */
+typedef HV *HASH;
+
+MODULE = Imager PACKAGE = Imager::Color PREFIX = ICL_
+
+Imager::Color
+ICL_new_internal(r,g,b,a)
+ unsigned char r
+ unsigned char g
+ unsigned char b
+ unsigned char a
+
+void
+ICL_DESTROY(cl)
+ Imager::Color cl
+
+
+Imager::Color
+ICL_set_internal(cl,r,g,b,a)
+ Imager::Color cl
+ unsigned char r
+ unsigned char g
+ unsigned char b
+ unsigned char a
+
+
+void
+ICL_info(cl)
+ Imager::Color cl
+
+
+void
+ICL_rgba(cl)
+ Imager::Color cl
+ PPCODE:
+ EXTEND(SP, 4);
+ PUSHs(sv_2mortal(newSVnv(cl->rgba.r)));
+ PUSHs(sv_2mortal(newSVnv(cl->rgba.g)));
+ PUSHs(sv_2mortal(newSVnv(cl->rgba.b)));
+ PUSHs(sv_2mortal(newSVnv(cl->rgba.a)));
+
+
+
+
+
+
+
+MODULE = Imager PACKAGE = Imager::ImgRaw PREFIX = IIM_
+
+Imager::ImgRaw
+IIM_new(x,y,ch)
+ int x
+ int y
+ int ch
+
+void
+IIM_DESTROY(im)
+ Imager::ImgRaw im
+
+
+
+MODULE = Imager PACKAGE = Imager
+
+PROTOTYPES: ENABLE
+
+
+Imager::IO
+io_new_fd(fd)
+ int fd
+
+Imager::IO
+io_new_bufchain()
+
+
+void
+io_slurp(ig)
+ Imager::IO ig
+ PREINIT:
+ unsigned char* data;
+ size_t tlength;
+ SV* r;
+ PPCODE:
+ data = NULL;
+ tlength = io_slurp(ig, &data);
+ r = sv_newmortal();
+ EXTEND(SP,1);
+ PUSHs(sv_2mortal(newSVpv(data,tlength)));
+ myfree(data);
+
+
+
+void
+i_list_formats()
+ PREINIT:
+ char* item;
+ int i;
+ PPCODE:
+ i=0;
+ while( (item=i_format_list[i++]) != NULL ) {
+ EXTEND(SP, 1);
+ PUSHs(sv_2mortal(newSVpv(item,0)));
+ }
+
+undef_int
+i_has_format(frmt)
+ char* frmt
+
+Imager::ImgRaw
+i_img_new()
+
+Imager::ImgRaw
+i_img_empty(im,x,y)
+ Imager::ImgRaw im
+ int x
+ int y
+
+Imager::ImgRaw
+i_img_empty_ch(im,x,y,ch)
+ Imager::ImgRaw im
+ int x
+ int y
+ int ch
+
+void
+init_log(name,level)
+ char* name
+ int level
+
+void
+i_img_exorcise(im)
+ Imager::ImgRaw im
+
+void
+i_img_destroy(im)
+ Imager::ImgRaw im
+
+void
+i_img_info(im)
+ Imager::ImgRaw im
+ PREINIT:
+ int info[4];
+ PPCODE:
+ i_img_info(im,info);
+ EXTEND(SP, 4);
+ PUSHs(sv_2mortal(newSViv(info[0])));
+ PUSHs(sv_2mortal(newSViv(info[1])));
+ PUSHs(sv_2mortal(newSViv(info[2])));
+ PUSHs(sv_2mortal(newSViv(info[3])));
+
+
+
+
+void
+i_img_setmask(im,ch_mask)
+ Imager::ImgRaw im
+ int ch_mask
+
+int
+i_img_getmask(im)
+ Imager::ImgRaw im
+
+int
+i_img_getchannels(im)
+ Imager::ImgRaw im
+
+void
+i_img_getdata(im)
+ Imager::ImgRaw im
+ PPCODE:
+ EXTEND(SP, 1);
+ PUSHs(sv_2mortal(newSVpv(im->data, im->bytes)));
+
+
+void
+i_draw(im,x1,y1,x2,y2,val)
+ Imager::ImgRaw im
+ int x1
+ int y1
+ int x2
+ int y2
+ Imager::Color val
+
+void
+i_line_aa(im,x1,y1,x2,y2,val)
+ Imager::ImgRaw im
+ int x1
+ int y1
+ int x2
+ int y2
+ Imager::Color val
+
+void
+i_box(im,x1,y1,x2,y2,val)
+ Imager::ImgRaw im
+ int x1
+ int y1
+ int x2
+ int y2
+ Imager::Color val
+
+void
+i_box_filled(im,x1,y1,x2,y2,val)
+ Imager::ImgRaw im
+ int x1
+ int y1
+ int x2
+ int y2
+ Imager::Color val
+
+void
+i_arc(im,x,y,rad,d1,d2,val)
+ Imager::ImgRaw im
+ int x
+ int y
+ float rad
+ float d1
+ float d2
+ Imager::Color val
+
+
+
+void
+i_bezier_multi(im,xc,yc,val)
+ Imager::ImgRaw im
+ Imager::Color val
+ PREINIT:
+ double *x,*y;
+ int len;
+ AV *av1;
+ AV *av2;
+ SV *sv1;
+ SV *sv2;
+ int i;
+ PPCODE:
+ ICL_info(val);
+ if (!SvROK(ST(1))) croak("Imager: Parameter 1 to i_bezier_multi must be a reference to an array\n");
+ if (SvTYPE(SvRV(ST(1))) != SVt_PVAV) croak("Imager: Parameter 1 to i_bezier_multi must be a reference to an array\n");
+ if (!SvROK(ST(2))) croak("Imager: Parameter 2 to i_bezier_multi must be a reference to an array\n");
+ if (SvTYPE(SvRV(ST(2))) != SVt_PVAV) croak("Imager: Parameter 2 to i_bezier_multi must be a reference to an array\n");
+ av1=(AV*)SvRV(ST(1));
+ av2=(AV*)SvRV(ST(2));
+ if (av_len(av1) != av_len(av2)) croak("Imager: x and y arrays to i_bezier_multi must be equal length\n");
+ len=av_len(av1)+1;
+ x=mymalloc( len*sizeof(double) );
+ y=mymalloc( len*sizeof(double) );
+ for(i=0;i<len;i++) {
+ sv1=(*(av_fetch(av1,i,0)));
+ sv2=(*(av_fetch(av2,i,0)));
+ x[i]=(double)SvNV(sv1);
+ y[i]=(double)SvNV(sv2);
+ }
+ i_bezier_multi(im,len,x,y,val);
+ myfree(x);
+ myfree(y);
+
+
+void
+i_poly_aa(im,xc,yc,val)
+ Imager::ImgRaw im
+ Imager::Color val
+ PREINIT:
+ double *x,*y;
+ int len;
+ AV *av1;
+ AV *av2;
+ SV *sv1;
+ SV *sv2;
+ int i;
+ PPCODE:
+ ICL_info(val);
+ if (!SvROK(ST(1))) croak("Imager: Parameter 1 to i_poly_aa must be a reference to an array\n");
+ if (SvTYPE(SvRV(ST(1))) != SVt_PVAV) croak("Imager: Parameter 1 to i_poly_aa must be a reference to an array\n");
+ if (!SvROK(ST(2))) croak("Imager: Parameter 1 to i_poly_aa must be a reference to an array\n");
+ if (SvTYPE(SvRV(ST(2))) != SVt_PVAV) croak("Imager: Parameter 1 to i_poly_aa must be a reference to an array\n");
+ av1=(AV*)SvRV(ST(1));
+ av2=(AV*)SvRV(ST(2));
+ if (av_len(av1) != av_len(av2)) croak("Imager: x and y arrays to i_poly_aa must be equal length\n");
+ len=av_len(av1)+1;
+ x=mymalloc( len*sizeof(double) );
+ y=mymalloc( len*sizeof(double) );
+ for(i=0;i<len;i++) {
+ sv1=(*(av_fetch(av1,i,0)));
+ sv2=(*(av_fetch(av2,i,0)));
+ x[i]=(double)SvNV(sv1);
+ y[i]=(double)SvNV(sv2);
+ }
+ i_poly_aa(im,len,x,y,val);
+ myfree(x);
+ myfree(y);
+
+
+
+void
+i_flood_fill(im,seedx,seedy,dcol)
+ Imager::ImgRaw im
+ int seedx
+ int seedy
+ Imager::Color dcol
+
+
+void
+i_copyto(im,src,x1,y1,x2,y2,tx,ty)
+ Imager::ImgRaw im
+ Imager::ImgRaw src
+ int x1
+ int y1
+ int x2
+ int y2
+ int tx
+ int ty
+
+
+void
+i_copyto_trans(im,src,x1,y1,x2,y2,tx,ty,trans)
+ Imager::ImgRaw im
+ Imager::ImgRaw src
+ int x1
+ int y1
+ int x2
+ int y2
+ int tx
+ int ty
+ Imager::Color trans
+
+void
+i_copy(im,src)
+ Imager::ImgRaw im
+ Imager::ImgRaw src
+
+
+void
+i_rubthru(im,src,tx,ty)
+ Imager::ImgRaw im
+ Imager::ImgRaw src
+ int tx
+ int ty
+
+
+void
+i_gaussian(im,stdev)
+ Imager::ImgRaw im
+ float stdev
+
+void
+i_conv(im,pcoef)
+ Imager::ImgRaw im
+ PREINIT:
+ float* coeff;
+ int len;
+ AV* av;
+ SV* sv1;
+ int i;
+ PPCODE:
+ if (!SvROK(ST(1))) croak("Imager: Parameter 1 must be a reference to an array\n");
+ if (SvTYPE(SvRV(ST(1))) != SVt_PVAV) croak("Imager: Parameter 1 must be a reference to an array\n");
+ av=(AV*)SvRV(ST(1));
+ len=av_len(av)+1;
+ coeff=mymalloc( len*sizeof(float) );
+ for(i=0;i<len;i++) {
+ sv1=(*(av_fetch(av,i,0)));
+ coeff[i]=(float)SvNV(sv1);
+ }
+ i_conv(im,coeff,len);
+ myfree(coeff);
+
+
+float
+i_img_diff(im1,im2)
+ Imager::ImgRaw im1
+ Imager::ImgRaw im2
+
+
+
+undef_int
+i_init_fonts()
+
+#ifdef HAVE_LIBT1
+
+void
+i_t1_set_aa(st)
+ int st
+
+int
+i_t1_new(pfb,afm=NULL)
+ char* pfb
+ char* afm
+
+int
+i_t1_destroy(font_id)
+ int font_id
+
+
+undef_int
+i_t1_cp(im,xb,yb,channel,fontnum,points,str,len,align)
+ Imager::ImgRaw im
+ int xb
+ int yb
+ int channel
+ int fontnum
+ float points
+ char* str
+ int len
+ int align
+
+void
+i_t1_bbox(fontnum,point,str,len)
+ int fontnum
+ float point
+ char* str
+ int len
+ PREINIT:
+ int cords[6];
+ PPCODE:
+ i_t1_bbox(fontnum,point,str,len,cords);
+ EXTEND(SP, 4);
+ PUSHs(sv_2mortal(newSViv(cords[0])));
+ PUSHs(sv_2mortal(newSViv(cords[1])));
+ PUSHs(sv_2mortal(newSViv(cords[2])));
+ PUSHs(sv_2mortal(newSViv(cords[3])));
+ PUSHs(sv_2mortal(newSViv(cords[4])));
+ PUSHs(sv_2mortal(newSViv(cords[5])));
+
+
+
+undef_int
+i_t1_text(im,xb,yb,cl,fontnum,points,str,len,align)
+ Imager::ImgRaw im
+ int xb
+ int yb
+ Imager::Color cl
+ int fontnum
+ float points
+ char* str
+ int len
+ int align
+
+#endif
+
+#ifdef HAVE_LIBTT
+
+
+Imager::TTHandle
+i_tt_new(fontname)
+ char* fontname
+
+void
+i_tt_destroy(handle)
+ Imager::TTHandle handle
+
+
+
+undef_int
+i_tt_text(handle,im,xb,yb,cl,points,str,len,smooth)
+ Imager::TTHandle handle
+ Imager::ImgRaw im
+ int xb
+ int yb
+ Imager::Color cl
+ float points
+ char* str
+ int len
+ int smooth
+
+
+undef_int
+i_tt_cp(handle,im,xb,yb,channel,points,str,len,smooth)
+ Imager::TTHandle handle
+ Imager::ImgRaw im
+ int xb
+ int yb
+ int channel
+ float points
+ char* str
+ int len
+ int smooth
+
+
+
+undef_int
+i_tt_bbox(handle,point,str,len)
+ Imager::TTHandle handle
+ float point
+ char* str
+ int len
+ PREINIT:
+ int cords[6],rc;
+ PPCODE:
+ if ((rc=i_tt_bbox(handle,point,str,len,cords))) {
+ EXTEND(SP, 4);
+ PUSHs(sv_2mortal(newSViv(cords[0])));
+ PUSHs(sv_2mortal(newSViv(cords[1])));
+ PUSHs(sv_2mortal(newSViv(cords[2])));
+ PUSHs(sv_2mortal(newSViv(cords[3])));
+ PUSHs(sv_2mortal(newSViv(cords[4])));
+ PUSHs(sv_2mortal(newSViv(cords[5])));
+ }
+
+
+#endif
+
+
+
+
+#ifdef HAVE_LIBJPEG
+undef_int
+i_writejpeg(im,fd,qfactor)
+ Imager::ImgRaw im
+ int fd
+ int qfactor
+
+void
+i_readjpeg(fd)
+ int fd
+ PREINIT:
+ char* iptc_itext;
+ int tlength;
+ i_img* rimg;
+ SV* r;
+ PPCODE:
+ iptc_itext = NULL;
+ rimg=i_readjpeg(fd,&iptc_itext,&tlength);
+ if (iptc_itext == NULL) {
+ r = sv_newmortal();
+ EXTEND(SP,1);
+ sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
+ PUSHs(r);
+ } else {
+ r = sv_newmortal();
+ EXTEND(SP,2);
+ sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
+ PUSHs(r);
+ PUSHs(sv_2mortal(newSVpv(iptc_itext,tlength)));
+ myfree(iptc_itext);
+ }
+
+
+void
+i_readjpeg_scalar(...)
+ PROTOTYPE: $
+ PREINIT:
+ char* data;
+ unsigned int length;
+ char* iptc_itext;
+ int tlength;
+ i_img* rimg;
+ SV* r;
+ PPCODE:
+ iptc_itext = NULL;
+ data = (char *)SvPV(ST(0), length);
+ rimg=i_readjpeg_scalar(data,length,&iptc_itext,&tlength);
+ mm_log((1,"i_readjpeg_scalar: 0x%08X\n",rimg));
+ if (iptc_itext == NULL) {
+ r = sv_newmortal();
+ EXTEND(SP,1);
+ sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
+ PUSHs(r);
+ } else {
+ r = sv_newmortal();
+ EXTEND(SP,2);
+ sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
+ PUSHs(r);
+ PUSHs(sv_2mortal(newSVpv(iptc_itext,tlength)));
+ myfree(iptc_itext);
+ }
+
+
+void
+i_readjpeg_wiol(ig)
+ Imager::IO ig
+ PREINIT:
+ char* iptc_itext;
+ int tlength;
+ i_img* rimg;
+ SV* r;
+ PPCODE:
+ iptc_itext = NULL;
+ rimg = i_readjpeg_wiol(ig,-1,&iptc_itext,&tlength);
+ if (iptc_itext == NULL) {
+ r = sv_newmortal();
+ EXTEND(SP,1);
+ sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
+ PUSHs(r);
+ } else {
+ r = sv_newmortal();
+ EXTEND(SP,2);
+ sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
+ PUSHs(r);
+ PUSHs(sv_2mortal(newSVpv(iptc_itext,tlength)));
+ myfree(iptc_itext);
+ }
+
+
+#endif
+
+
+
+
+#ifdef HAVE_LIBTIFF
+
+Imager::ImgRaw
+i_readtiff_wiol(ig, length)
+ Imager::IO ig
+ int length
+
+
+undef_int
+i_writetiff_wiol(im, ig)
+ Imager::ImgRaw im
+ Imager::IO ig
+
+
+#endif /* HAVE_LIBTIFF */
+
+
+
+
+
+#ifdef HAVE_LIBPNG
+
+Imager::ImgRaw
+i_readpng(fd)
+ int fd
+
+
+undef_int
+i_writepng(im,fd)
+ Imager::ImgRaw im
+ int fd
+
+
+Imager::ImgRaw
+i_readpng_scalar(...)
+ PROTOTYPE: $
+ PREINIT:
+ char* data;
+ unsigned int length;
+ CODE:
+ data = (char *)SvPV(ST(0), length);
+ RETVAL=i_readpng_scalar(data,length);
+ OUTPUT:
+ RETVAL
+
+
+
+#endif
+
+
+#ifdef HAVE_LIBGIF
+
+undef_int
+i_writegif(im,fd,colors,pixdev,fixed)
+ Imager::ImgRaw im
+ int fd
+ int colors
+ int pixdev
+ PREINIT:
+ int fixedlen;
+ Imager__Color fixed;
+ Imager__Color tmp;
+ AV* av;
+ SV* sv1;
+ IV Itmp;
+ int i;
+ CODE:
+ if (!SvROK(ST(4))) croak("Imager: Parameter 4 must be a reference to an array\n");
+ if (SvTYPE(SvRV(ST(4))) != SVt_PVAV) croak("Imager: Parameter 4 must be a reference to an array\n");
+ av=(AV*)SvRV(ST(4));
+ fixedlen=av_len(av)+1;
+ fixed=mymalloc( fixedlen*sizeof(i_color) );
+ for(i=0;i<fixedlen;i++) {
+ sv1=(*(av_fetch(av,i,0)));
+ if (sv_derived_from(sv1, "Imager::Color")) {
+ Itmp = SvIV((SV*)SvRV(sv1));
+ tmp = (i_color*) Itmp;
+ } else croak("Imager: one of the elements of array ref is not of Imager::Color type\n");
+ fixed[i]=*tmp;
+ }
+ RETVAL=i_writegif(im,fd,colors,pixdev,fixedlen,fixed);
+ myfree(fixed);
+ ST(0) = sv_newmortal();
+ if (RETVAL == 0) ST(0)=&PL_sv_undef;
+ else sv_setiv(ST(0), (IV)RETVAL);
+
+
+
+
+undef_int
+i_writegifmc(im,fd,colors)
+ Imager::ImgRaw im
+ int fd
+ int colors
+
+undef_int
+i_writegifex(im,fd)
+ Imager::ImgRaw im
+ int fd
+
+undef_int
+i_writegif_gen(fd, ...)
+ int fd
+ PROTOTYPE: $$@
+ PREINIT:
+ i_quantize quant;
+ i_gif_opts opts;
+ i_img **imgs = NULL;
+ int img_count;
+ int i;
+ HV *hv;
+ CODE:
+ if (items < 3)
+ croak("Usage: i_writegif_gen(fd,hashref, images...)");
+ if (!SvROK(ST(1)) || ! SvTYPE(SvRV(ST(1))))
+ croak("i_writegif_gen: Second argument must be a hash ref");
+ hv = (HV *)SvRV(ST(1));
+ memset(&quant, 0, sizeof(quant));
+ quant.mc_size = 256;
+ quant.mc_colors = mymalloc(quant.mc_size * sizeof(i_color));
+ memset(&opts, 0, sizeof(opts));
+ handle_quant_opts(&quant, hv);
+ handle_gif_opts(&opts, hv);
+ img_count = items - 2;
+ RETVAL = 1;
+ if (img_count < 1) {
+ RETVAL = 0;
+ }
+ else {
+ imgs = mymalloc(sizeof(i_img *) * img_count);
+ for (i = 0; i < img_count; ++i) {
+ SV *sv = ST(2+i);
+ imgs[i] = NULL;
+ if (SvROK(sv) && sv_derived_from(sv, "Imager::ImgRaw")) {
+ imgs[i] = (i_img *)SvIV((SV*)SvRV(sv));
+ }
+ else {
+ RETVAL = 0;
+ break;
+ }
+ }
+ if (RETVAL) {
+ RETVAL = i_writegif_gen(&quant, fd, imgs, img_count, &opts);
+ }
+ myfree(imgs);
+ if (RETVAL) {
+ copy_colors_back(hv, &quant);
+ }
+ }
+ ST(0) = sv_newmortal();
+ if (RETVAL == 0) ST(0)=&PL_sv_undef;
+ else sv_setiv(ST(0), (IV)RETVAL);
+
+undef_int
+i_writegif_callback(cb, maxbuffer,...)
+ int maxbuffer;
+ PREINIT:
+ i_quantize quant;
+ i_gif_opts opts;
+ i_img **imgs = NULL;
+ int img_count;
+ int i;
+ HV *hv;
+ i_writer_data wd;
+ CODE:
+ if (items < 4)
+ croak("Usage: i_writegif_callback(\\&callback,maxbuffer,hashref, images...)");
+ if (!SvROK(ST(2)) || ! SvTYPE(SvRV(ST(2))))
+ croak("i_writegif_callback: Second argument must be a hash ref");
+ hv = (HV *)SvRV(ST(2));
+ memset(&quant, 0, sizeof(quant));
+ quant.mc_size = 256;
+ quant.mc_colors = mymalloc(quant.mc_size * sizeof(i_color));
+ memset(&opts, 0, sizeof(opts));
+ handle_quant_opts(&quant, hv);
+ handle_gif_opts(&opts, hv);
+ img_count = items - 3;
+ RETVAL = 1;
+ if (img_count < 1) {
+ RETVAL = 0;
+ }
+ else {
+ imgs = mymalloc(sizeof(i_img *) * img_count);
+ for (i = 0; i < img_count; ++i) {
+ SV *sv = ST(3+i);
+ imgs[i] = NULL;
+ if (SvROK(sv) && sv_derived_from(sv, "Imager::ImgRaw")) {
+ imgs[i] = (i_img *)SvIV((SV*)SvRV(sv));
+ }
+ else {
+ RETVAL = 0;
+ break;
+ }
+ }
+ if (RETVAL) {
+ wd.sv = ST(0);
+ RETVAL = i_writegif_callback(&quant, write_callback, (char *)&wd, maxbuffer, imgs, img_count, &opts);
+ }
+ myfree(imgs);
+ if (RETVAL) {
+ copy_colors_back(hv, &quant);
+ }
+ }
+ ST(0) = sv_newmortal();
+ if (RETVAL == 0) ST(0)=&PL_sv_undef;
+ else sv_setiv(ST(0), (IV)RETVAL);
+
+void
+i_readgif(fd)
+ int fd
+ PREINIT:
+ int* colour_table;
+ int colours, q, w;
+ i_img* rimg;
+ SV* temp[3];
+ AV* ct;
+ SV* r;
+ PPCODE:
+ colour_table = NULL;
+ colours = 0;
+
+ if(GIMME_V == G_ARRAY) {
+ rimg = i_readgif(fd,&colour_table,&colours);
+ } else {
+ /* don't waste time with colours if they aren't wanted */
+ rimg = i_readgif(fd,NULL,NULL);
+ }
+
+ if (colour_table == NULL) {
+ EXTEND(SP,1);
+ r=sv_newmortal();
+ sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
+ PUSHs(r);
+ } else {
+ /* the following creates an [[r,g,b], [r, g, b], [r, g, b]...] */
+ /* I don't know if I have the reference counts right or not :( */
+ /* Neither do I :-) */
+ /* No Idea here either */
+
+ ct=newAV();
+ av_extend(ct, colours);
+ for(q=0; q<colours; q++) {
+ for(w=0; w<3; w++)
+ temp[w]=sv_2mortal(newSViv(colour_table[q*3 + w]));
+ av_store(ct, q, (SV*)newRV_noinc((SV*)av_make(3, temp)));
+ }
+ myfree(colour_table);
+
+ EXTEND(SP,2);
+ r=sv_newmortal();
+ sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
+ PUSHs(r);
+ PUSHs(newRV_noinc((SV*)ct));
+ }
+
+
+
+
+
+void
+i_readgif_scalar(...)
+ PROTOTYPE: $
+ PREINIT:
+ char* data;
+ unsigned int length;
+ int* colour_table;
+ int colours, q, w;
+ i_img* rimg;
+ SV* temp[3];
+ AV* ct;
+ SV* r;
+ PPCODE:
+ data = (char *)SvPV(ST(0), length);
+ colour_table=NULL;
+ colours=0;
+
+ if(GIMME_V == G_ARRAY) {
+ rimg=i_readgif_scalar(data,length,&colour_table,&colours);
+ } else {
+ /* don't waste time with colours if they aren't wanted */
+ rimg=i_readgif_scalar(data,length,NULL,NULL);
+ }
+
+ if (colour_table == NULL) {
+ EXTEND(SP,1);
+ r=sv_newmortal();
+ sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
+ PUSHs(r);
+ } else {
+ /* the following creates an [[r,g,b], [r, g, b], [r, g, b]...] */
+ /* I don't know if I have the reference counts right or not :( */
+ /* Neither do I :-) */
+ ct=newAV();
+ av_extend(ct, colours);
+ for(q=0; q<colours; q++) {
+ for(w=0; w<3; w++)
+ temp[w]=sv_2mortal(newSViv(colour_table[q*3 + w]));
+ av_store(ct, q, (SV*)newRV_noinc((SV*)av_make(3, temp)));
+ }
+ myfree(colour_table);
+
+ EXTEND(SP,2);
+ r=sv_newmortal();
+ sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
+ PUSHs(r);
+ PUSHs(newRV_noinc((SV*)ct));
+ }
+
+void
+i_readgif_callback(...)
+ PROTOTYPE: &
+ PREINIT:
+ char* data;
+ int length;
+ int* colour_table;
+ int colours, q, w;
+ i_img* rimg;
+ SV* temp[3];
+ AV* ct;
+ SV* r;
+ i_reader_data rd;
+ PPCODE:
+ rd.sv = ST(0);
+ colour_table=NULL;
+ colours=0;
+
+ if(GIMME_V == G_ARRAY) {
+ rimg=i_readgif_callback(read_callback, (char *)&rd,&colour_table,&colours);
+ } else {
+ /* don't waste time with colours if they aren't wanted */
+ rimg=i_readgif_callback(read_callback, (char *)&rd,NULL,NULL);
+ }
+
+ if (colour_table == NULL) {
+ EXTEND(SP,1);
+ r=sv_newmortal();
+ sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
+ PUSHs(r);
+ } else {
+ /* the following creates an [[r,g,b], [r, g, b], [r, g, b]...] */
+ /* I don't know if I have the reference counts right or not :( */
+ /* Neither do I :-) */
+ /* Neither do I - maybe I'll move this somewhere */
+ ct=newAV();
+ av_extend(ct, colours);
+ for(q=0; q<colours; q++) {
+ for(w=0; w<3; w++)
+ temp[w]=sv_2mortal(newSViv(colour_table[q*3 + w]));
+ av_store(ct, q, (SV*)newRV_noinc((SV*)av_make(3, temp)));
+ }
+ myfree(colour_table);
+
+ EXTEND(SP,2);
+ r=sv_newmortal();
+ sv_setref_pv(r, "Imager::ImgRaw", (void*)rimg);
+ PUSHs(r);
+ PUSHs(newRV_noinc((SV*)ct));
+ }
+
+
+
+
+
+
+#endif
+
+
+
+Imager::ImgRaw
+i_readpnm_wiol(ig, length)
+ Imager::IO ig
+ int length
+
+
+undef_int
+i_writeppm(im,fd)
+ Imager::ImgRaw im
+ int fd
+
+Imager::ImgRaw
+i_readraw(fd,x,y,datachannels,storechannels,intrl)
+ int fd
+ int x
+ int y
+ int datachannels
+ int storechannels
+ int intrl
+
+undef_int
+i_writeraw(im,fd)
+ Imager::ImgRaw im
+ int fd
+
+
+Imager::ImgRaw
+i_scaleaxis(im,Value,Axis)
+ Imager::ImgRaw im
+ float Value
+ int Axis
+
+Imager::ImgRaw
+i_scale_nn(im,scx,scy)
+ Imager::ImgRaw im
+ float scx
+ float scy
+
+Imager::ImgRaw
+i_haar(im)
+ Imager::ImgRaw im
+
+int
+i_count_colors(im,maxc)
+ Imager::ImgRaw im
+ int maxc
+
+
+Imager::ImgRaw
+i_transform(im,opx,opy,parm)
+ Imager::ImgRaw im
+ PREINIT:
+ double* parm;
+ int* opx;
+ int* opy;
+ int opxl;
+ int opyl;
+ int parmlen;
+ AV* av;
+ SV* sv1;
+ int i;
+ CODE:
+ if (!SvROK(ST(1))) croak("Imager: Parameter 1 must be a reference to an array\n");
+ if (!SvROK(ST(2))) croak("Imager: Parameter 2 must be a reference to an array\n");
+ if (!SvROK(ST(3))) croak("Imager: Parameter 3 must be a reference to an array\n");
+ if (SvTYPE(SvRV(ST(1))) != SVt_PVAV) croak("Imager: Parameter 1 must be a reference to an array\n");
+ if (SvTYPE(SvRV(ST(2))) != SVt_PVAV) croak("Imager: Parameter 2 must be a reference to an array\n");
+ if (SvTYPE(SvRV(ST(3))) != SVt_PVAV) croak("Imager: Parameter 3 must be a reference to an array\n");
+ av=(AV*)SvRV(ST(1));
+ opxl=av_len(av)+1;
+ opx=mymalloc( opxl*sizeof(int) );
+ for(i=0;i<opxl;i++) {
+ sv1=(*(av_fetch(av,i,0)));
+ opx[i]=(int)SvIV(sv1);
+ }
+ av=(AV*)SvRV(ST(2));
+ opyl=av_len(av)+1;
+ opy=mymalloc( opyl*sizeof(int) );
+ for(i=0;i<opyl;i++) {
+ sv1=(*(av_fetch(av,i,0)));
+ opy[i]=(int)SvIV(sv1);
+ }
+ av=(AV*)SvRV(ST(3));
+ parmlen=av_len(av)+1;
+ parm=mymalloc( parmlen*sizeof(double) );
+ for(i=0;i<parmlen;i++) { /* FIXME: Bug? */
+ sv1=(*(av_fetch(av,i,0)));
+ parm[i]=(double)SvNV(sv1);
+ }
+ RETVAL=i_transform(im,opx,opxl,opy,opyl,parm,parmlen);
+ myfree(parm);
+ myfree(opy);
+ myfree(opx);
+ ST(0) = sv_newmortal();
+ if (RETVAL == 0) ST(0)=&PL_sv_undef;
+ else sv_setref_pv(ST(0), "Imager::ImgRaw", (void*)RETVAL);
+
+Imager::ImgRaw
+i_transform2(width,height,ops,n_regs,c_regs,in_imgs)
+ PREINIT:
+ int width;
+ int height;
+ double* parm;
+ struct rm_op *ops;
+ unsigned int ops_len;
+ int ops_count;
+ double *n_regs;
+ int n_regs_count;
+ i_color *c_regs;
+ int c_regs_count;
+ int in_imgs_count;
+ i_img **in_imgs;
+ AV* av;
+ SV* sv1;
+ IV tmp;
+ int i;
+ CODE:
+ if (!SvROK(ST(3))) croak("Imager: Parameter 4 must be a reference to an array\n");
+ if (!SvROK(ST(4))) croak("Imager: Parameter 5 must be a reference to an array\n");
+ if (!SvROK(ST(5))) croak("Imager: Parameter 6 must be a reference to an array of images\n");
+ if (SvTYPE(SvRV(ST(3))) != SVt_PVAV) croak("Imager: Parameter 4 must be a reference to an array\n");
+ if (SvTYPE(SvRV(ST(4))) != SVt_PVAV) croak("Imager: Parameter 5 must be a reference to an array\n");
+
+ /*if (SvTYPE(SvRV(ST(5))) != SVt_PVAV) croak("Imager: Parameter 6 must be a reference to an array\n");*/
+
+ if (SvTYPE(SvRV(ST(5))) == SVt_PVAV) {
+ av = (AV*)SvRV(ST(5));
+ in_imgs_count = av_len(av)+1;
+ for (i = 0; i < in_imgs_count; ++i) {
+ sv1 = *av_fetch(av, i, 0);
+ if (!sv_derived_from(sv1, "Imager::ImgRaw")) {
+ croak("Parameter 5 must contain only images");
+ }
+ }
+ }
+ else {
+ in_imgs_count = 0;
+ }
+ if (SvTYPE(SvRV(ST(5))) == SVt_PVAV) {
+ av = (AV*)SvRV(ST(5));
+ in_imgs = mymalloc(in_imgs_count*sizeof(i_img*));
+ for (i = 0; i < in_imgs_count; ++i) {
+ sv1 = *av_fetch(av,i,0);
+ if (!sv_derived_from(sv1, "Imager::ImgRaw")) {
+ croak("Parameter 5 must contain only images");
+ }
+ tmp = SvIV((SV*)SvRV(sv1));
+ in_imgs[i] = (i_img*)tmp;
+ }
+ }
+ else {
+ /* no input images */
+ in_imgs = NULL;
+ }
+ /* default the output size from the first input if possible */
+ if (SvOK(ST(0)))
+ width = SvIV(ST(0));
+ else if (in_imgs_count)
+ width = in_imgs[0]->xsize;
+ else
+ croak("No output image width supplied");
+
+ if (SvOK(ST(1)))
+ height = SvIV(ST(1));
+ else if (in_imgs_count)
+ height = in_imgs[0]->ysize;
+ else
+ croak("No output image height supplied");
+
+ ops = (struct rm_op *)SvPV(ST(2), ops_len);
+ if (ops_len % sizeof(struct rm_op))
+ croak("Imager: Parameter 3 must be a bitmap of regops\n");
+ ops_count = ops_len / sizeof(struct rm_op);
+ av = (AV*)SvRV(ST(3));
+ n_regs_count = av_len(av)+1;
+ n_regs = mymalloc(n_regs_count * sizeof(double));
+ for (i = 0; i < n_regs_count; ++i) {
+ sv1 = *av_fetch(av,i,0);
+ if (SvOK(sv1))
+ n_regs[i] = SvNV(sv1);
+ }
+ av = (AV*)SvRV(ST(4));
+ c_regs_count = av_len(av)+1;
+ c_regs = mymalloc(c_regs_count * sizeof(i_color));
+ /* I don't bother initializing the colou?r registers */
+
+ RETVAL=i_transform2(width, height, 3, ops, ops_count,
+ n_regs, n_regs_count,
+ c_regs, c_regs_count, in_imgs, in_imgs_count);
+ if (in_imgs)
+ myfree(in_imgs);
+ myfree(n_regs);
+ myfree(c_regs);
+ ST(0) = sv_newmortal();
+ if (RETVAL == 0) ST(0)=&PL_sv_undef;
+ else sv_setref_pv(ST(0), "Imager::ImgRaw", (void*)RETVAL);
+
+
+void
+i_contrast(im,intensity)
+ Imager::ImgRaw im
+ float intensity
+
+void
+i_hardinvert(im)
+ Imager::ImgRaw im
+
+void
+i_noise(im,amount,type)
+ Imager::ImgRaw im
+ float amount
+ unsigned char type
+
+void
+i_bumpmap(im,bump,channel,light_x,light_y,strength)
+ Imager::ImgRaw im
+ Imager::ImgRaw bump
+ int channel
+ int light_x
+ int light_y
+ int strength
+
+void
+i_postlevels(im,levels)
+ Imager::ImgRaw im
+ int levels
+
+void
+i_mosaic(im,size)
+ Imager::ImgRaw im
+ int size
+
+void
+i_watermark(im,wmark,tx,ty,pixdiff)
+ Imager::ImgRaw im
+ Imager::ImgRaw wmark
+ int tx
+ int ty
+ int pixdiff
+
+
+void
+i_autolevels(im,lsat,usat,skew)
+ Imager::ImgRaw im
+ float lsat
+ float usat
+ float skew
+
+void
+i_radnoise(im,xo,yo,rscale,ascale)
+ Imager::ImgRaw im
+ float xo
+ float yo
+ float rscale
+ float ascale
+
+void
+i_turbnoise(im, xo, yo, scale)
+ Imager::ImgRaw im
+ float xo
+ float yo
+ float scale
+
+
+void
+i_gradgen(im, ...)
+ Imager::ImgRaw im
+ PREINIT:
+ int num;
+ int *xo;
+ int *yo;
+ i_color *ival;
+ int dmeasure;
+ int i;
+ SV *sv;
+ AV *axx;
+ AV *ayy;
+ AV *ac;
+ CODE:
+ if (items != 5)
+ croak("Usage: i_gradgen(im, xo, yo, ival, dmeasure)");
+ if (!SvROK(ST(1)) || ! SvTYPE(SvRV(ST(1))))
+ croak("i_gradgen: Second argument must be an array ref");
+ if (!SvROK(ST(2)) || ! SvTYPE(SvRV(ST(2))))
+ croak("i_gradgen: Third argument must be an array ref");
+ if (!SvROK(ST(3)) || ! SvTYPE(SvRV(ST(3))))
+ croak("i_gradgen: Fourth argument must be an array ref");
+ axx = (AV *)SvRV(ST(1));
+ ayy = (AV *)SvRV(ST(2));
+ ac = (AV *)SvRV(ST(3));
+ dmeasure = (int)SvIV(ST(4));
+
+ num = av_len(axx) < av_len(ayy) ? av_len(axx) : av_len(ayy);
+ num = num <= av_len(ac) ? num : av_len(ac);
+ num++;
+ if (num < 2) croak("Usage: i_gradgen array refs must have more than 1 entry each");
+ xo = mymalloc( sizeof(int) * num );
+ yo = mymalloc( sizeof(int) * num );
+ ival = mymalloc( sizeof(i_color) * num );
+ for(i = 0; i<num; i++) {
+ xo[i] = (int)SvIV(* av_fetch(axx, i, 0));
+ yo[i] = (int)SvIV(* av_fetch(ayy, i, 0));
+ sv = *av_fetch(ac, i, 0);
+ if ( !sv_derived_from(sv, "Imager::Color") ) {
+ free(axx); free(ayy); free(ac);
+ croak("i_gradgen: Element of fourth argument is not derived from Imager::Color");
+ }
+ ival[i] = *(i_color *)SvIV((SV *)SvRV(sv));
+ }
+ i_gradgen(im, num, xo, yo, ival, dmeasure);
+
+
+
+
+
+
+
+
+void
+i_nearest_color(im, ...)
+ Imager::ImgRaw im
+ PREINIT:
+ int num;
+ int *xo;
+ int *yo;
+ i_color *ival;
+ int dmeasure;
+ int i;
+ SV *sv;
+ AV *axx;
+ AV *ayy;
+ AV *ac;
+ CODE:
+ if (items != 5)
+ croak("Usage: i_nearest_color(im, xo, yo, ival, dmeasure)");
+ if (!SvROK(ST(1)) || ! SvTYPE(SvRV(ST(1))))
+ croak("i_nearest_color: Second argument must be an array ref");
+ if (!SvROK(ST(2)) || ! SvTYPE(SvRV(ST(2))))
+ croak("i_nearest_color: Third argument must be an array ref");
+ if (!SvROK(ST(3)) || ! SvTYPE(SvRV(ST(3))))
+ croak("i_nearest_color: Fourth argument must be an array ref");
+ axx = (AV *)SvRV(ST(1));
+ ayy = (AV *)SvRV(ST(2));
+ ac = (AV *)SvRV(ST(3));
+ dmeasure = (int)SvIV(ST(4));
+
+ num = av_len(axx) < av_len(ayy) ? av_len(axx) : av_len(ayy);
+ num = num <= av_len(ac) ? num : av_len(ac);
+ num++;
+ if (num < 2) croak("Usage: i_nearest_color array refs must have more than 1 entry each");
+ xo = mymalloc( sizeof(int) * num );
+ yo = mymalloc( sizeof(int) * num );
+ ival = mymalloc( sizeof(i_color) * num );
+ for(i = 0; i<num; i++) {
+ xo[i] = (int)SvIV(* av_fetch(axx, i, 0));
+ yo[i] = (int)SvIV(* av_fetch(ayy, i, 0));
+ sv = *av_fetch(ac, i, 0);
+ if ( !sv_derived_from(sv, "Imager::Color") ) {
+ free(axx); free(ayy); free(ac);
+ croak("i_nearest_color: Element of fourth argument is not derived from Imager::Color");
+ }
+ ival[i] = *(i_color *)SvIV((SV *)SvRV(sv));
+ }
+ i_nearest_color(im, num, xo, yo, ival, dmeasure);
+
+
+
+
+void
+malloc_state()
+
+void
+hashinfo(hv)
+ PREINIT:
+ HV* hv;
+ int stuff;
+ PPCODE:
+ if (!SvROK(ST(0))) croak("Imager: Parameter 0 must be a reference to a hash\n");
+ hv=(HV*)SvRV(ST(0));
+ if (SvTYPE(hv)!=SVt_PVHV) croak("Imager: Parameter 0 must be a reference to a hash\n");
+ if (getint(hv,"stuff",&stuff)) printf("ok: %d\n",stuff); else printf("key doesn't exist\n");
+ if (getint(hv,"stuff2",&stuff)) printf("ok: %d\n",stuff); else printf("key doesn't exist\n");
+
+void
+DSO_open(filename)
+ char* filename
+ PREINIT:
+ void *rc;
+ char *evstr;
+ PPCODE:
+ rc=DSO_open(filename,&evstr);
+ if (rc!=NULL) {
+ if (evstr!=NULL) {
+ EXTEND(SP,2);
+ PUSHs(sv_2mortal(newSViv((IV)rc)));
+ PUSHs(sv_2mortal(newSVpvn(evstr, strlen(evstr))));
+ } else {
+ EXTEND(SP,1);
+ PUSHs(sv_2mortal(newSViv((IV)rc)));
+ }
+ }
+
+
+undef_int
+DSO_close(dso_handle)
+ void* dso_handle
+
+void
+DSO_funclist(dso_handle_v)
+ void* dso_handle_v
+ PREINIT:
+ int i;
+ DSO_handle *dso_handle;
+ PPCODE:
+ dso_handle=(DSO_handle*)dso_handle_v;
+ i=0;
+ while( dso_handle->function_list[i].name != NULL) {
+ EXTEND(SP,1);
+ PUSHs(sv_2mortal(newSVpv(dso_handle->function_list[i].name,0)));
+ EXTEND(SP,1);
+ PUSHs(sv_2mortal(newSVpv(dso_handle->function_list[i++].pcode,0)));
+ }
+
+
+void
+DSO_call(handle,func_index,hv)
+ void* handle
+ int func_index
+ PREINIT:
+ HV* hv;
+ PPCODE:
+ if (!SvROK(ST(2))) croak("Imager: Parameter 2 must be a reference to a hash\n");
+ hv=(HV*)SvRV(ST(2));
+ if (SvTYPE(hv)!=SVt_PVHV) croak("Imager: Parameter 2 must be a reference to a hash\n");
+ DSO_call( (DSO_handle *)handle,func_index,hv);
+
+
+
+
--- /dev/null
+Changes
+Imager.pm
+Imager.xs
+MANIFEST
+README
+Makefile.PL
+draw.c
+draw.h
+conv.c
+gaussian.c
+ppport.h
+image.c
+image.h
+datatypes.h
+datatypes.c
+feat.h
+io.c
+io.h
+log.c
+log.h
+jpeg.c
+png.c
+gif.c
+tiff.c
+quant.c
+raw.c
+pnm.c
+filters.c
+feat.c
+font.c
+regmach.c
+regmach.h
+stackmach.c
+stackmach.h
+trans2.c
+iolayer.h
+iolayer.c
+fontfiles/dcr10.afm
+fontfiles/dcr10.pfb
+fontfiles/dodge.ttf
+lib/Imager/regmach.pod
+lib/Imager/Regops.pm
+lib/Imager/Expr.pm
+lib/Imager/Expr/Assem.pm
+lib/Imager/Color.pm
+lib/Imager/Font.pm
+lib/Imager/Transform.pm
+t/t00basic.t
+t/t10formats.t
+t/t15color.t
+t/t30t1font.t
+t/t35ttfont.t
+t/t36oofont.t
+t/t40scale.t
+t/t50basicoo.t
+t/t55trans.t
+t/t56postfix.t
+t/t57infix.t
+t/t58trans2.t
+t/t59assem.t
+t/t60dyntest.t
+t/t65crop.t
+t/t66paste.t
+t/t70newgif.t
+t/t75polyaa.t
+t/t90cc.t
+testimg/scale.ppm
+testimg/scale.gif
+testimg/scalei.gif
+testimg/penguin-base.ppm
+typemap
+dynaload.c
+dynaload.h
+ext.h
+plug.h
+filterlist.perl
+doco.perl
+errep.perl
+regops.perl
+spot.perl For making an ordered dither matrix from a spot function
+transbench.perl
+transform.perl Shell interface to Imager::Transform
+bigtest.perl Library selection tester
+dynfilt/pluginst.h
+dynfilt/dyntest.c
+dynfilt/dt2.c
+dynfilt/mandelbrot.c
+dynfilt/flines.c
+dynfilt/compile.txt
+dynfilt/Makefile.PL
+bench/quantone.perl One round of benchmarking image quantization.
+bench/quantbench.perl Benchmark various quantization methods
+bench/makegrad.perl Builds regular images for quantization.
+bench/kscdisplay.png Photo test for quantization.
+bench/benchform.perl Formats the benchmark results
\ No newline at end of file
--- /dev/null
+
+use ExtUtils::MakeMaker;
+use Cwd;
+use Config;
+
+$lext=$Config{'so'}; # Get extensions of libraries
+
+#
+# IM_INCPATH colon seperated list of paths to extra include paths
+# IM_LIBPATH colon seperated list of paths to extra library paths
+#
+# IM_VERBOSE turns on verbose mode for the library finding and such
+# IM_MANUAL to manually select which libraries are used and which not
+# IM_ENABLE to programmatically select which libraries are used
+# and which are not
+# IM_NOLOG if true logging will not be compiled into the module
+# IM_DEBUG_MALLOC if true malloc debbuging will be compiled into the module
+# do not use IM_DEBUG_MALLOC in production - this slows
+# everything down by alot
+# IM_CFLAGS Extra flags to pass to the compiler
+# IM_LFLAGS Extra flags to pass to the linker
+# IM_DFLAGS Extra flags to pass to the preprocessor
+
+
+getenv(); # get environment variables
+init(); # initialize global data
+pathcheck(); # Check if directories exist
+
+# Pick what libraries are used
+if ($MANUAL) {
+ manual();
+} else {
+ automatic();
+ if (exists $ENV{IM_ENABLE}) {
+ my %en = map { $_, 1 } split ' ', $ENV{IM_ENABLE};
+ for my $key (keys %formats) {
+ delete $formats{$key} unless $en{$key};
+ }
+ }
+}
+
+# Make sure there isn't a clash between the gif libraries.
+gifcheck();
+
+for $frm(values %formats) {
+ $F_DEFINE .= ' -D'.$frm->{def};
+ $F_LIBS .= ' ' .$frm->{libfiles};
+ $F_OBJECT .= ' ' .$frm->{objfiles};
+}
+
+$F_INC = join(" ",map { (exists $definc{$_})?'':'-I'.$_ } @incs);
+$F_LIBS = join(" ",map { '-L'.$_ } @libs).' '.$F_LIBS;
+
+$OSLIBS = '';
+$OSDEF = "-DOS_$^O";
+
+if ($^O eq 'hpux') { $OSLIBS .= ' -ldld'; }
+if (defined $Config{'d_dlsymun'}) { $OSDEF .= ' -DDLSYMUN'; }
+
+@objs = qw(Imager.o draw.o image.o io.o iolayer.o log.o
+ gaussian.o conv.o pnm.o raw.o feat.o font.o
+ filters.o dynaload.o stackmach.o datatypes.o
+ regmach.o trans2.o quant.o);
+
+%opts=(
+ 'NAME' => 'Imager',
+ 'VERSION_FROM' => 'Imager.pm',
+ 'LIBS' => "$LFLAGS -lm $OSLIBS $F_LIBS",
+ 'DEFINE' => "$F_DEFINE $EXTDEF $OSDEF $CFLAGS",
+ 'INC' => "$DFLAGS $F_INC",
+ 'OBJECT' => join(' ', @objs, $F_OBJECT)
+ );
+
+if ($VERBOSE) { print Dumper(\%opts); }
+mkdir('testout',0777); # since we cannot include it in the archive.
+WriteMakefile(%opts);
+exit;
+
+
+sub MY::postamble {
+'
+dyntest.(MYEXTLIB) : dynfilt/Makefile
+ cd dynfilt && $(MAKE) $(PASTHRU)
+
+lib/Imager/Regops.pm : regmach.h regops.perl
+ $(PERL) regops.perl regmach.h lib/Imager/Regops.pm
+';
+}
+
+# manual configuration of helper libraries
+
+sub manual {
+ print <<EOF;
+
+ Please answer the following questions about
+ which formats are avaliable on your computer
+
+press <return> to continue
+EOF
+
+ <STDIN>; # eat one return
+
+ for $frm(sort { $formats{$b}{order} <=> $formats{$a}{order} } keys %formats) {
+ SWX:
+ if ($formats{$frm}{docs}) { print "\n",$formats{$frm}{docs},"\n\n"; }
+ print "Enable $frm support: ";
+ $gz=<STDIN>;
+ chomp($gz);
+ if ($gz =~ m/^(y|yes|n|no)/i) {
+ $gz=substr(lc($gz),0,1);
+ if ($gz eq 'n') {
+ delete $formats{$frm};
+ }
+ } else { goto SWX; }
+ }
+}
+
+
+# automatic configuration of helper libraries
+
+sub automatic {
+ for $frm(keys %formats) {
+ delete $formats{$frm} if !checkformat($frm);
+ }
+}
+
+
+sub gifcheck {
+ if ($formats{'gif'} and $formats{'ungif'}) {
+ print "ungif and gif can not coexist - removing ungif support\n";
+ delete $formats{'ungif'};
+ }
+ my @dirs;
+ for my $frm (grep $formats{$_}, qw(gif ungif)) {
+ push(@dirs, @{$formats{$frm}{incdir}}) if $formats{$frm}{incdir};
+ }
+ my $minor = 0;
+ my $major = 0;
+ FILES: for my $dir (@dirs) {
+ my $h = "$dir/gif_lib.h";
+ open H, "< $h" or next;
+ while (<H>) {
+ if (/GIF_LIB_VERSION\s+"\s*version\s*(\d+)\.(\d+)/i) {
+ $major = $1;
+ $minor = $2;
+ close H;
+ last FILES;
+ }
+ }
+ close H;
+ }
+
+ # we need the version in a #ifdefable form
+
+ $F_DEFINE .= "-DIM_GIFMAJOR=$major -DIM_GIFMINOR=$minor";
+}
+
+
+sub gd {
+ my($path,$chk)=@_;
+
+# print "checking path $path\n";
+ if ( !opendir(DH,$path) ) {
+ warn "Cannot open dir $path: $!\n";
+ return;
+ }
+ my @l=grep { $chk->($_) } readdir(DH);
+ # print @l;
+ close(DH);
+ return map $path, @l;
+}
+
+
+sub checkformat {
+ my $frm=shift;
+ my $libchk=$formats{$frm}{'libcheck'};
+ my $incchk=$formats{$frm}{'inccheck'};
+
+ my @l;
+ for my $lp (@libs) {
+ push(@l, gd($lp,$libchk));
+ }
+
+ my @i;
+ for my $ip (@incs) {
+ push(@i, gd($ip,$incchk));
+ }
+
+ printf("%10s: includes %s - libraries %s\n",$frm,(@i?'found':'not found'),(@l?'found':'not found'));
+ $formats{$frm}{incdir} = \@i;
+ $formats{$frm}{libdir} = \@l;
+ return scalar(@i && @l);
+}
+
+
+
+
+sub pathcheck {
+ if ($VERBOSE) {
+ print "pathcheck\n";
+ print " Include paths:\n";
+ for (@incs) { print $_,"\n"; }
+ }
+ @incs=grep { -d $_ && -r _ && -x _ or ( print(" $_ doesnt exist or is unaccessible - removed."),0) } @incs;
+
+ if ($VERBOSE) {
+ print "\nLibrary paths:\n";
+ for (@incs) { print $_,"\n"; }
+ }
+ @libs=grep { -d $_ && -r _ && -x _ or ( print(" $_ doesnt exist or is unaccessible - removed."),0) } @libs;
+ print "\ndone.\n";
+}
+
+
+# Format data initialization
+
+# format definition is:
+# defines needed
+# default include path
+# files needed for include (boolean perl code)
+# default lib path
+# libs needed
+# files needed for link (boolean perl code)
+# object files needed for the format
+
+
+sub init {
+
+ @definc{'/usr/include'}=();
+ @incs=(qw(/usr/include /usr/local/include /usr/include/freetype /usr/local/include/freetype), split /:/, $INCPATH );
+ @libs=(split(/ /, $Config{'libpth'}), split(/:/, $LIBPATH) );
+
+ $formats{'jpeg'}={
+ order=>'21',
+ def=>'HAVE_LIBJPEG',
+ inccheck=>sub { $_[0] eq 'jpeglib.h' },
+ libcheck=>sub { $_[0] eq 'libjpeg.a' or $_ eq "libjpeg.$lext" },
+ libfiles=>'-ljpeg',
+ objfiles=>'jpeg.o',
+ docs=>q{
+ In order to use jpeg with this module you need to have libjpeg
+ installed on your computer}
+ };
+
+ $formats{'tiff'}={
+ order=>'23',
+ def=>'HAVE_LIBTIFF',
+ inccheck=>sub { $_[0] eq 'tiffio.h' },
+ libcheck=>sub { $_[0] eq 'libtiff.a' or $_ eq "libtiff.$lext" },
+ libfiles=>'-ltiff',
+ objfiles=>'tiff.o',
+ docs=>q{
+ In order to use tiff with this module you need to have libtiff
+ installed on your computer}
+ };
+
+ $formats{'png'}={
+ order=>'22',
+ def=>'HAVE_LIBPNG',
+ inccheck=>sub { $_[0] eq 'png.h' },
+ libcheck=>sub { $_[0] eq 'libpng.a' or $_[0] eq "libpng.$lext" },
+ libfiles=>'-lpng -lz',
+ objfiles=>'png.o',
+ docs=>q{
+ Png stands for Portable Network Graphics and is intended as
+ a replacement for gif on the web. It is patent free and
+ is recommended by the w3c, you need libpng to use these formats}
+ };
+
+ $formats{'gif'}={
+ order=>'20',
+ def=>'HAVE_LIBGIF',
+ inccheck=>sub { $_[0] eq 'gif_lib.h' },
+ libcheck=>sub { $_[0] eq 'libgif.a' or $_[0] eq "libgif.$lext" },
+ libfiles=>'-lgif',
+ objfiles=>'gif.o',
+ docs=>q{
+ gif is the de facto standard for webgraphics at the moment,
+ it does have some patent problems. If you have giflib and
+ are not in violation with the unisys patent you should use
+ this instead of the 'ungif' option. Note that they cannot
+ be in use at the same time}
+ };
+
+ $formats{'ungif'}={
+ order=>'21',
+ def=>'HAVE_LIBGIF',
+ inccheck=>sub { $_[0] eq 'gif_lib.h' },
+ libcheck=>sub { $_[0] eq 'libungif.a' or $_[0] eq "libungif.$lext" },
+ libfiles=>'-lungif',
+ objfiles=>'gif.o',
+ docs=>q{
+ gif is the de facto standard for webgraphics at the moment,
+ it does have some patent problems. If you have libungif and
+ want to create images free from LZW patented compression you
+ should use this option instead of the 'gif' option}
+ };
+
+ $formats{'T1-fonts'}={
+ order=>'30',
+ def=>'HAVE_LIBT1',
+ inccheck=>sub { $_[0] eq 't1lib.h' },
+ libcheck=>sub { $_[0] eq 'libt1.a' or $_[0] eq "libt1.$lext" },
+ libfiles=>'-lt1',
+ objfiles=>'',
+ docs=>q{
+ postscript t1 fonts are scalable fonts. They can include
+ ligatures and kerning information and generally yield good
+ visual quality. We depend on libt1 to rasterize the fonts
+ for use in images.}
+ };
+
+ $formats{'TT-fonts'}={
+ order=>'31',
+ def=>'HAVE_LIBTT',
+ inccheck=>sub { $_[0] eq 'freetype.h' },
+ libcheck=>sub { $_[0] eq 'libttf.a' or $_[0] eq "libttf.$lext" },
+ libfiles=>'-lttf',
+ objfiles=>'',
+ docs=>q{
+ Truetype fonts are scalable fonts. They can include
+ kerning and hinting information and generally yield good
+ visual quality esp on low resultions. The freetype library is
+ used to rasterize for us. The only drawback is that there
+ are alot of badly designed fonts out there.}
+ };
+ # Make fix indent
+ for (keys %formats) { $formats{$_}->{docs} =~ s/^\s+/ /mg; }
+}
+
+
+
+sub gen {
+ my $V = $ENV{$_[0]};
+ defined($V) ? $V : "";
+}
+
+
+# Get information from environment variables
+
+sub getenv {
+
+ ($VERBOSE,
+ $INCPATH,
+ $LIBPATH,
+ $NOLOG,
+ $DEBUG_MALLOC,
+ $MANUAL,
+ $CFLAGS,
+ $LFLAGS,
+ $DFLAGS) = map { gen $_ } qw(IM_VERBOSE
+ IM_INCPATH
+ IM_LIBPATH
+ IM_NOLOG
+ IM_DEBUG_MALLOC
+ IM_MANUAL
+ IM_CFLAGS
+ IM_LFLAGS
+ IM_DFLAGS);
+
+ if ($VERBOSE) { print "Verbose mode\n"; require Data::Dumper; import Data::Dumper qw(Dumper);}
+
+ if ($NOLOG) { print "Logging not compiled into module\n"; }
+ else { $EXTDEF.=' -DIMAGER_LOG'; }
+
+ if ($DEBUG_MALLOC) {
+ $EXTDEF.=' -DIMAGER_DEBUG_MALLOC';
+ print "Malloc debugging enabled\n";
+ }
+
+}
--- /dev/null
+================================================================
+Copyright (c) 1999, 2000 Arnar M. Hrafnkelsson. All rights reserved.
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+================================================================
+
+>> THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY WHATSOEVER <<
+
+================================================================
+
+
+========================
+1. Patent infringements?
+========================
+
+Imager as such contains no patented algorithms. The external
+libraries (which are not written by me) may or may not contain
+patented algorithms. YOU ARE SOLELY RESPONSIBLE FOR OBTAINING
+LICENSE(S) TO USE SUCH LIBRARIES SHOULD YOU NEED ANY.
+
+
+========================
+2. Compiling and testing
+========================
+
+Some care has been taken to make the installation as smooth as
+possible. This is rather hard due to the difference between operating
+systems and site setups. To get started just type
+
+$ perl Makefile.PL
+
+It should blurb out a list of which libraries were found and which
+not. If you add a library to the machine after installing Imager it
+does not automatically become available in Imager. It only uses the
+libraries that are found. If the list of found libraries is not what
+you expected, then the Makefile.PL is either not searching in the
+right directories or your box does not have the libraries you think it
+does. For a list of where to get the libraries have a look at
+3. External dependencies. To widen the search path for libraries and
+include files set the IM_INCPATH and IM_LIBPATH variables. The
+environment variables that matter when Makefile.PL is run are
+
+IM_INCPATH colon separated list of paths to extra include files
+IM_LIBPATH colon separated list of paths to extra library files
+
+IM_VERBOSE turns on verbose mode for the library scanning and such
+IM_MANUAL to manually select which libraries are used and which not
+IM_NOLOG if true logging will not be compiled into the module
+IM_DEBUG_MALLOC if true malloc debugging will be compiled into the module
+ do not use IM_DEBUG_MALLOC in production - this slows
+ everything down
+
+IM_CFLAGS Extra flags to pass to the compiler
+IM_LFLAGS Extra flags to pass to the linker
+IM_DFLAGS Extra flags to pass to the preprocessor
+
+
+
+When finding the libraries has been sorted out it's time for
+
+$ make
+
+and if that works then do
+
+$ make test
+
+If either fails do take a peek at the file errep.perl. It's creates a
+file report.txt. This is some information which will help me discover
+where the problem is so I can try to fix it in future releases. If
+you find running it ok (just remember - no warranty!) please send the
+report.txt via email to addi@umich.edu .
+
+Troubleshooting tips:
+
+A common problem is that libgif/libungif are sometimes linked to the X
+libraries and then running the tests fails. In that case something
+like:
+
+$ IM_LFLAGS="-L/usr/X11R6/lib -lX11" perl Makefile.PL
+
+Which simply sets the environment variables for the extra libraries
+to include the X libraries (which we do not use at all, but must
+included since libgif has been linked with it).
+
+Also note that libgif has a few bugs: You can run something like
+
+$ perl -Iblib/lib -Iblib/arch t/t10formats.t
+
+This way you can see what comments the test script prints out.
+t/t10formats.t checks for an bug in libgiff and prints out a patch
+if that bug is present, note that this bug only affects the more
+"advanced" features of libgif.
+
+Imager needs to have a fairly recent libtiff installed (we know it
+it runs fine with 3.5.5). In the future we might consider supporting older
+libtiff versions. For now you can either configure Imager manually (by
+setting the IM_MANUAL environment variable to 1, in sh:
+
+$ IM_MANUAL=1 perl Makefile.PL
+
+and simply say no to tiff support when asked if you want it, the same thing
+can be used to circumvent problems in gifs to get Imager going.
+
+
+If it worked just continue with the installation as normally
+(with make install).
+
+========================
+3. External dependencies
+========================
+
+Some hints about getting the Imager module to find the libraries it
+needs for specific features. The libraries it uses are:
+
+ jpeg: ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz
+
+ png: ftp://ftp.uu.net/graphics/png
+ you also need zlib to use png: ftp://ftp.uu.net/pub/archiving/zip/zlib
+
+ gif: http://www.arrakeen.demon.co.uk/giflib/
+or at: http://prtr-13.ucsc.edu/~badger/software/libungif/index.shtml
+
+ tiff: http://www.libtiff.org/
+
+ t1: ftp://ftp.neuroinformatik.ruhr-uni-bochum.de/pub/software/t1lib/
+or at: ftp://sunsite.unc.edu/pub/Linux/libs/graphics/
+
+ tt: http://www.freetype.org/
+
+
+Precompiled versions of some of the libraries might be found at:
+
+AIX:
+ http://www.bull.de/
+ ftp://ftp.rge.com/pub/systems/aix/bull/
+
+
+
+========================
+4. Logging and debugging
+========================
+
+Logging is compiled in by default - if you should want to get of it
+from the binaries you can do so by setting the env IMAGER_NOLOG
+to something. If you want to enable malloc debugging to check for leaks
+then set IMAGER_DEBUG_MALLOC to something. Needless to say it is
+pretty pointless to have malloc debug enabled with no logging since you
+can never see the malloc information that way.
+
+
+========================
+5. Truetype information
+========================
+
+If you enable the truetype part and want it to be TESTED you MUST set
+the environment variable TTFONTTEST to a complete path to a truetype
+font.
+
+
+=================
+6. Win32 Support
+=================
+
+Imager can be installed on Win32 systems. This was ported and tested
+with Microsoft Visual C++ 6.0 with build 623 of ActivePerl. Currently
+I haven't tried to test any of the image formats except for ppm, since
+I don't have the required libraries on my NT machine. This may
+change. The same is true for font support, though it might be
+preferable to try to use Win32's native font support over the external
+librarie - why force the user to install yet another library.
+
+I haven't tried to target compilers other than VC++, since I don't
+have them installed.
+
+If you have any problems with the Win32 support, please email
+tony@develop-help.com (don't forget to use nmake instead of make).
+
+=======================
+7. General information
+=======================
+
+The Imager module homepage is currently at:
+
+ http://www.eecs.umich.edu/~addi/perl/Imager/
+
+The current docs are rather bad as I've been busy adding features
+but hopefully they will be updated soon. Until then you'll just
+have to use the source. The test scripts might also be a good idea.
+By activating the the #init_log lines in the test script you can get
+rather verbose debugging output from the C code.
+
+
+========================
+8. Thanks
+========================
+
+Thanks go to:
+ Tony Cook ( TonyC )
+ Claes Jacobson ( Claes )
+ Philip Gwyn ( Leolo )
+ Brad Murray ( HalfJack )
+ Nicholas Dronen ( Veblen )
+ Michael G Schwern ( Schwern )
+ Rocco Caputo ( Dngor )
+ Graham barr ( Gbarr )
+ Mark-Jason Dominus ( Mjd )
+ Jerome
+ Jason Alexander ( Jalex )
+ Randal R. Schwartz ( Merlyn )
+ Tkil ( )
+ Artur Bergman ( Sky )
+ Luc St-Louis ( Lucs )
+ PerlJam ( )
+ Roderick Schertler ( Roderick )
+ Nathan Torkington ( gnat )
+
+(and just to play it safe) all those I forgot to mention.
--- /dev/null
+#!perl -w
+use strict;
+<>; #drop the uname
+my @text = <>;
+$text[0] =~ s/\$VAR1/\$data/;
+my $data;
+eval join '', @text;
+print <<EOS;
+ | closest | errdiff |
+algorithm | image | mono | addi |webmap| mono | addi |webmap|
+EOS
+for my $algo (qw(hashbox sortchan linsearch rand2dist)) {
+ for my $image (qw(rgbtile hsvgrad kscdisplay)) {
+ printf("%-10s|%-10s|", $algo, $image);
+ for my $tran (qw(closest errdiff)) {
+ for my $pal (qw(mono addi webmap)) {
+ printf("%6.2f|", $data->{$algo}{$image}{$tran}{$pal});
+ }
+ }
+ print "\n";
+ }
+}
+
+__END__
+
+=head1 NAME
+
+ benchform.perl - formats quantbench.perl results into a table.
+
+=head1 SYNOPSIS
+
+ perl benchform.perl quantbench.txt
+
+=cut
--- /dev/null
+#!perl -w
+use Imager;
+
+=head1 NAME
+
+makegrad.perl - builds a large gradient image for quant.c benchmarking
+
+=head1 SYNOPSIS
+
+ perl makegrad.perl
+
+=cut
+
+# a trans2 script to produce our pretty graduation
+my $hsv = <<'EOS';
+y cy - x cx - atan2 pi / 180 * !hue
+1 1 x cx / y cy / distance !sat
+@hue @sat 1 hsv
+EOS
+
+my $img = Imager::transform2({rpnexpr=>$hsv, width=>600, height=>600})
+ or die "transform2 failed: $Imager::ERRSTR";
+
+$img->write(file=>'hsvgrad.png', type=>'png')
+ or die "Write to hsvgrad.png failed: ", $img->errstr;
+
+# trans2 code to produce RGB tiles
+my $rgb = <<'EOS';
+8 !tilesper
+w @tilesper / !tilex
+h @tilesper / !tiley
+x @tilex % @tilex / 255 * !red
+y @tiley % @tiley / 255 * !green
+x @tilex / int
+y @tiley / int @tilesper * + @tilesper @tilesper * / 255 * !blue
+@red @green @blue rgb
+EOS
+$img = Imager::transform2({rpnexpr=>$rgb, width=>600, height=>600})
+ or die "transform2 failed: $Imager::ERRSTR";
+$img->write(file=>'rgbtile.png', type=>'png')
+ or die "write to rgbtile failed: ",$img->errstr;
--- /dev/null
+#!perl -w
+use strict;
+use Data::Dumper;
+
+print <<EOS;
+This program benchmarks various RGB to palette index code segments (quant.c).
+
+The idea is to run it on various processors to see which is fastest on
+average.
+
+It takes about 50 minutes on my 700MHz PIII laptop.
+
+If you want to see what the output images look like, cd to .. and run:
+
+ perl -Mblib bench/quantone.perl foo
+
+which gives the output files a prefix of 'foo'.
+
+EOS
+
+-e 'hsvgrad.png' && -e 'rgbtile.png'
+ or die "Run makegrad.perl first";
+-e 'kscdisplay.png'
+ or die "Missing file. Download http://www.develop-help.com/imager/kscdisplay.png";
+chdir ".." or die "Can't chdir to parent: $!";
+
+#my %qopts = qw(linsearch IM_CFLINSEARCH
+# hashbox IM_CFHASHBOX
+# sortchan IM_CFSORTCHAN
+# rand2dist IM_CFRAND2DIST);
+
+my %qopts = qw(hashbox IM_CFHASHBOX
+ rand2dist IM_CFRAND2DIST);
+
+
+# $bench{$opt}{$image}{$tran}{$pal} = time
+my %bench;
+$|++;
+unlink "bench/quantbench.txt";
+for my $opt (keys %qopts) {
+ open LOG, ">> bench/quantbench.log" or die "Cannot open log: $!";
+ print LOG "*** $opt ***\n";
+ close LOG;
+ $ENV{IM_CFLAGS} = "-DIM_CF_COPTS -D$qopts{$opt}";
+ print "*** $opt configuring";
+ system "perl Makefile.PL >>bench/quantbench.log 2>&1"
+ and die "Failed to configure Imager";
+ print " building";
+ system "make >>bench/quantbench.log 2>&1"
+ and die "Failed to build Imager";
+ print " benchmarking";
+ my @out = `perl -Mblib bench/quantone.perl`;
+ $? and die "Failed to run benchmark: $?";
+ chomp @out;
+ print "parsing\n";
+ my ($image, $tran);
+ foreach (@out) {
+ if (/^\*\*\s+(\S+)\s+(\S+)/) {
+ $image = $1;
+ $tran = $2;
+ }
+ elsif (/^\s*(\w+).*\@\s*([\d.]+)/ or /^\s*(\w+?):.+?([\d.]+?) CPU\)/) {
+ print "$1: $2\n";
+ $bench{$opt}{$image}{$tran}{$1} = $2;
+ }
+ elsif (/^Benchmark:/) {
+ # ignored
+ }
+ else {
+ die "Unknown benchmark output: $_\n";
+ }
+ }
+}
+
+system "uname -srmp >bench/quantbench.txt"; # is -srmp portable?
+open BENCH, ">> bench/quantbench.txt"
+ or die "Cannot open bench/quantbench.txt: $!";
+print BENCH Dumper(\%bench);
+close BENCH or die "Cannot close benchmark file: $!";
+print "Please email bench/quantbench.txt to tony\@develop-help.com\n";
+
+__END__
+
+=head1 NAME
+
+quantbench.pl - Benchmarks Imager's image quantization code.
+
+=head1 SYNOPSIS
+
+ perl makegrad.pl
+ perl quantbench.pl
+
+=head1 DESCRIPTION
+
+Builds Imager with various quantization code options, and then times
+the results of running with those options, with various palettes and
+options.
+
+The aim is to run this with several options on several platforms, and
+see which produces the fastest results overall.
+
+Requires that PNG and GIF (or ungif) support is present.
+
+=cut
+
--- /dev/null
+#!perl -w
+use Imager;
+use Benchmark;
+
+# actual benchmarking code for quantbench.pl - not intended to be used
+# directly
+
+my %imgs;
+
+my $out = shift;
+
+# rgbtile and hsvgrad are both difficult images - they both have
+# more than 256 colours
+my $img = Imager->new;
+$img->open(file=>'bench/rgbtile.png')
+ or die "Cannot load bench/rgbtile.png:",$img->errstr;
+$imgs{rgbtile} = $img;
+
+$img = Imager->new;
+$img->open(file=>'bench/hsvgrad.png')
+ or die "Cannot load bench/hsvgrad.png:", $img->errstr;
+$imgs{hsvgrad} = $img;
+
+$img = Imager->new;
+$img->open(file=>'bench/kscdisplay.png')
+ or die "Cannot load bench/kscdisplay.png:", $img->errstr;
+$imgs{kscdisplay} = $img;
+
+# I need some other images
+for my $key (keys %imgs) {
+ for my $tran (qw(closest errdiff)) {
+ my $img = $imgs{$key};
+ print "** $key $tran\n";
+ timethese(10,
+ {
+ addi=>sub {
+ $img->write(file=>out($out, $key, $tran, 'addi'), type=>'gif',
+ gifquant=>'gen', make_colors=>'addi',
+ translate=>$tran)
+ or die "addi",$img->errstr;
+ },
+ webmap=>sub {
+ $img->write(file=>out($out, $key, $tran, 'webmap'),
+ type=>'gif',
+ gifquant=>'gen', make_colors=>'webmap',
+ translate=>$tran)
+ or die "webmap",$img->errstr;
+ },
+ mono=>sub {
+ $img->write(file=>out($out, $key, $tran, 'mono'), type=>'gif',
+ gifquant=>'gen', make_colors=>'none',
+ colors=>[Imager::Color->new(0,0,0),
+ Imager::Color->new(255,255,255) ],
+ translate=>$tran)
+ or die "mono",$img->errstr;
+ },
+ });
+ }
+}
+
+sub out {
+ my ($out, $in, $tran, $pal) = @_;
+ $out or return '/dev/null';
+ return "bench/${out}_${in}_${tran}_$pal.gif";
+}
+
+__END__
+
+=head1 NAME
+
+quantone.perl - benchmarks image quantization with various options
+
+=head1 SYNOPSIS
+
+ # just benchmark
+ perl bench/quantone.perl
+ # produce output images too
+ perl bench/quantone.perl prefix
+
+=head1 DESCRIPTION
+
+Benchmarks image quantization on some test images, and with various
+options.
+
+The current images are 2 synthesized images (rgbtile.png and
+hsvgrad.png), and a cropped photo (kscdisplay.png).
+
+This program is designed to be run by L<quantbench.perl>.
+
+=cut
--- /dev/null
+#!perl -w
+use strict;
+# tests Imager with every combination of options
+my @opts = qw(jpeg tiff png gif ungif T1-fonts TT-fonts);
+
+# each option gets a bit
+my %bits;
+@bits{@opts} = map { 1 << $_ } 0..(@opts-1);
+
+my $perl = $ENV{PERLBIN} || "perl";
+my $make = $ENV{MAKEBIN} || "make";
+my $makeopts = $ENV{MAKEOPTS} || '';
+use Getopt::Std;
+my %opts;
+getopts('vd', \%opts);
+
+my $top = (1 << @opts)-1;
+
+my @results;
+
+unlink('testout/bigtest.txt');
+my $total = 0;
+my $good = 0;
+system("$make clean") if -e 'Makefile' && !$opts{d};
+for my $set (0..$top) {
+ ++$total;
+ $ENV{IM_ENABLE} = join(' ', grep($set & $bits{$_}, @opts));
+ print STDERR $opts{v} ? "Enable: $ENV{IM_ENABLE}\n" : '.';
+ system("echo '****' \$IM_ENABLE >>testout/bigtest.txt");
+ if ($opts{d}) {
+ if (system("$make $makeopts disttest >>testout/bigtest.txt 2>&1")) {
+ push(@results, [ $ENV{IM_ENABLE}, 'disttest failed' ]);
+ next;
+ }
+ }
+ else {
+ unlink 'Makefile';
+ if (system("$perl Makefile.PL >>testout/bigtest.txt 2>&1")) {
+ push(@results, [ $ENV{IM_ENABLE}, 'Makefile.PL failed' ]);
+ next;
+ }
+ if (system("$make $makeopts >>testout/bigtest.txt 2>&1")) {
+ push(@results, [ $ENV{IM_ENABLE}, 'make failed' ]);
+ next;
+ }
+ if (system("$make test >>testout/bigtest.txt 2>&1")) {
+ push(@results, [ $ENV{IM_ENABLE}, 'test failed' ]);
+ next;
+ }
+ if (system("$make clean >>testout/bigtest.txt 2>&1")) {
+ push(@results, [ $ENV{IM_ENABLE}, 'clean failed' ]);
+ next;
+ }
+ }
+
+ push(@results, [ $ENV{IM_ENABLE}, 'success' ]);
+ ++$good;
+}
+print STDERR "\n";
+printf("%-20s %-50s\n", "Result", "Options");
+printf("%-20s %-50s\n", "-" x 20, "-" x 50);
+foreach my $row (@results) {
+ printf("%-20s %-50s\n", @$row[1,0]);
+}
+print "-" x 71, "\n";
+print "Total: $total Successes: $good Failures: ",$total-$good,"\n";
+print "Output in testout/bigtest.txt\n";
+
+__END__
+
+=head1 NAME
+
+ bigtest.perl - tests combinations of libraries usable by Imager
+
+=head1 SYNOPSYS
+
+ perl bigtest.perl
+ # grab a cup of coffee or four - this takes a while
+
+=head1 DESCRIPTION
+
+bigtest.perl uses the new IM_ENABLE environment variable of
+Makefile.PL to built Imager for all possible combinations of libraries
+that Imager uses.
+
+At the time of writing this is 128 combinations, which takes quite a
+while.
+
+=head1 OPTIONS
+
+ -v - verbose output
+
+ -d - perform disttest for each combination
+
+=head1 ENVIRONMENT VARIABLES
+
+PERLBIN - the perl binary to use
+
+MAKEBIN - the make binary to use
+
+Any other variables used by Imager's Makefile.PL, except for IM_MANUAL
+or IM_ENABLE.
+
+=head1 BUGS
+
+Doesn't test other possible options, like IM_NOLOG or IM_DEBUG_MALLOC.
+
+=head1 AUTHOR
+
+Tony Cook <tony@develop-help.com>
+
+=cut
+
--- /dev/null
+#include "image.h"
+
+/*
+ General convolution for 2d decoupled filters
+ end effects are acounted for by increasing
+ scaling the result with the sum of used coefficients
+
+ coeff: (float array) coefficients for filter
+ len: length of filter.. number of coefficients
+ note that this has to be an odd number
+ (since the filter is even);
+*/
+
+void
+i_conv(i_img *im,float *coeff,int len) {
+ int i,l,c,ch,center;
+ float pc;
+ i_color rcolor;
+ float res[11];
+ i_img timg;
+
+ mm_log((1,"i_conv(im* 0x%x,coeff 0x%x,len %d)\n",im,coeff,len));
+
+ i_img_empty_ch(&timg,im->xsize,im->ysize,im->channels);
+
+ center=(len-1)/2;
+
+
+ for(l=0;l<im->ysize;l++) {
+ for(i=0;i<im->xsize;i++) {
+ pc=0.0;
+ for(ch=0;ch<im->channels;ch++) res[ch]=0;
+ for(c=0;c<len;c++)
+ if (i_gpix(im,i+c-center,l,&rcolor)!=-1) {
+ for(ch=0;ch<im->channels;ch++) res[ch]+=(float)(rcolor.channel[ch])*coeff[c];
+ pc+=coeff[c];
+ }
+ for(ch=0;ch<im->channels;ch++) rcolor.channel[ch]=(unsigned char)(((res[ch]/pc>255.0)?255.0:res[ch]/pc));
+ i_ppix(&timg,i,l,&rcolor);
+ }
+ }
+
+ for(l=0;l<im->xsize;l++)
+ {
+ for(i=0;i<im->ysize;i++)
+ {
+ pc=0.0;
+ for(ch=0;ch<im->channels;ch++) res[ch]=0;
+ for(c=0;c<len;c++)
+ if (i_gpix(&timg,l,i+c-center,&rcolor)!=-1)
+ {
+ for(ch=0;ch<im->channels;ch++) res[ch]+=(float)(rcolor.channel[ch])*coeff[c];
+ pc+=coeff[c];
+ }
+ for(ch=0;ch<im->channels;ch++) rcolor.channel[ch]=(unsigned char)(((res[ch]/(float)(pc)>255.0)?255.0:res[ch]/(float)(pc)));
+ i_ppix(im,l,i,&rcolor);
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
--- /dev/null
+#include "io.h"
+#include "datatypes.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+
+
+/*
+ 2d bitmask with test and set operations
+*/
+
+struct i_bitmap*
+btm_new(int xsize,int ysize) {
+ int i;
+ struct i_bitmap *btm;
+ btm=(struct i_bitmap*)mymalloc(sizeof(struct i_bitmap));
+ btm->data=(char*)mymalloc((xsize*ysize+8)/8);
+ btm->xsize=xsize;
+ btm->ysize=ysize;
+ for(i=0;i<(xsize*ysize+8)/8;i++) btm->data[i]=0; /* Is this always needed */
+ return btm;
+}
+
+
+void
+btm_destroy(struct i_bitmap *btm) {
+ myfree(btm->data);
+ myfree(btm);
+}
+
+
+int
+btm_test(struct i_bitmap *btm,int x,int y) {
+ int btno;
+ if (x<0 || x>btm->xsize-1 || y<0 || y>btm->ysize-1) return 0;
+ btno=btm->xsize*y+x;
+ return (1<<(btno%8))&(btm->data[btno/8]);
+}
+
+void
+btm_set(struct i_bitmap *btm,int x,int y) {
+ int btno;
+ btno=btm->xsize*y+x;
+ btm->data[btno/8]|=1<<(btno%8);
+}
+
+
+
+
+
+/*
+ Linked list - stack type
+*/
+
+struct llink *
+llink_new(struct llink* p,int size) {
+ struct llink *l;
+ l=(struct llink*)mymalloc(sizeof(struct llink));
+ l->n=NULL;
+ l->p=p;
+ l->fill=0;
+ l->data=(void*)mymalloc(size);
+ return l;
+}
+
+/* free's the data pointer, itself, and sets the previous' next pointer to null */
+
+void
+llink_destroy(struct llink* l) {
+ if (l->p != NULL) { l->p->n=NULL; }
+ myfree(l->data);
+ myfree(l);
+}
+
+
+/* if it returns true there wasn't room for the
+ item on the link */
+
+int
+llist_llink_push(struct llist *lst, struct llink *lnk,void *data) {
+ int multip;
+ multip=lst->multip;
+
+ /* fprintf(stderr,"llist_llink_push: data=0x%08X -> 0x%08X\n",data,*(int*)data);
+ fprintf(stderr,"ssize = %d, multip = %d, fill = %d\n",lst->ssize,lst->multip,lnk->fill); */
+ if (lnk->fill == lst->multip) return 1;
+ /* memcpy((char*)(lnk->data)+lnk->fill*lst->ssize,data,lst->ssize); */
+ memcpy((char*)(lnk->data)+lnk->fill*lst->ssize,data,lst->ssize);
+
+ /* printf("data=%X res=%X\n",*(int*)data,*(int*)(lnk->data));*/
+ lnk->fill++;
+ lst->count++;
+ return 0;
+}
+
+struct llist *
+llist_new(int multip, int ssize) {
+ struct llist *l;
+ l=(struct llist*)mymalloc(sizeof(struct llist));
+ l->h=l->t=NULL;
+ l->multip=multip;
+ l->ssize=ssize;
+ l->count=0;
+ return l;
+}
+
+void
+llist_push(struct llist *l,void *data) {
+ int ssize=l->ssize;
+ int multip=l->multip;
+
+ /* fprintf(stderr,"llist_push: data=0x%08X\n",data); */
+
+ if (l->t == NULL) l->t=l->h=llink_new(NULL,ssize*multip); /* Tail is empty - list is empty */
+ else { /* Check for overflow in current tail */
+ if (l->t->fill >= l->multip) {
+ struct llink* nt=llink_new(l->t,ssize*multip);
+ l->t->n=nt;
+ l->t=nt;
+ /* fprintf(stderr,"Chain extended\n"); */
+ }
+ }
+ /* fprintf(stderr,"0x%08X\n",l->t); */
+ if (llist_llink_push(l,l->t,data)) { fprintf(stderr,"DARN!\n"); }
+}
+
+/* returns 0 if the list is empty */
+
+int
+llist_pop(struct llist *l,void *data) {
+ /* int ssize=l->ssize;
+ int multip=l->multip;*/
+ if (l->t == NULL) return 0;
+ l->t->fill--;
+ l->count--;
+ /* memcpy(data,(char*)(l->t->data)+l->ssize*l->t->fill,l->ssize); */
+ memcpy(data,(char*)(l->t->data)+l->ssize*l->t->fill,l->ssize);
+
+ if (!l->t->fill) { /* This link empty */
+ if (l->t->p == NULL) l->h=l->t=NULL; /* and it's the only link */
+ else {
+ l->t=l->t->p;
+ llink_destroy(l->t->n);
+ }
+ }
+ return 1;
+}
+
+void
+llist_dump(struct llist *l) {
+ int k,j;
+ int i=0;
+ struct llink *lnk;
+ lnk=l->h;
+ while(lnk != NULL) {
+ for(j=0;j<lnk->fill;j++) {
+ /* memcpy(&k,(char*)(lnk->data)+l->ssize*j,sizeof(void*));*/
+ memcpy(&k,(char*)(lnk->data)+l->ssize*j,sizeof(void*));
+ printf("%d - %X\n",i,k);
+ i++;
+ }
+ lnk=lnk->n;
+ }
+}
+
+void
+llist_destroy(struct llist *l) {
+ struct llink *t,*lnk = l->h;
+ while( lnk != NULL ) {
+ t=lnk;
+ lnk=lnk->n;
+ myfree(t);
+ }
+ myfree(l);
+}
+
+
+
+
+
+
+/*
+ Oct-tree implementation
+*/
+
+struct octt *
+octt_new() {
+ int i;
+ struct octt *t;
+
+ t=(struct octt*)mymalloc(sizeof(struct octt));
+ for(i=0;i<8;i++) t->t[i]=NULL;
+ t->cnt=0;
+ return t;
+}
+
+
+/* returns 1 if the colors wasn't in the octtree already */
+
+
+int
+octt_add(struct octt *ct,unsigned char r,unsigned char g,unsigned char b) {
+ struct octt *c;
+ int i,cm;
+ int ci,idx[8];
+ int rc;
+ rc=0;
+ c=ct;
+ /* printf("[r,g,b]=[%d,%d,%d]\n",r,g,b); */
+ ct->cnt++;
+ for(i=7;i>-1;i--) {
+ cm=1<<i;
+ ci=((!!(r&cm))<<2)+((!!(g&cm))<<1)+!!(b&cm);
+ /* printf("idx[%d]=%d\n",i,ci); */
+ if (c->t[ci] == NULL) { c->t[ci]=octt_new(); rc=1; }
+ c=c->t[ci];
+ c->cnt++;
+ idx[i]=ci;
+ }
+ return rc;
+}
+
+
+void
+octt_delete(struct octt *ct) {
+ int i;
+ for(i=0;i<8;i++) if (ct->t[i] != NULL) octt_delete(ct->t[i]); /* do not free instance here because it will free itself */
+ myfree(ct);
+}
+
+
+void
+octt_dump(struct octt *ct) {
+ int i;
+ /* printf("node [0x%08X] -> (%d)\n",ct,ct->cnt); */
+ for(i=0;i<8;i++) if (ct->t[i] != NULL) printf("[ %d ] -> 0x%08X\n",i,(unsigned int)ct->t[i]);
+ for(i=0;i<8;i++) if (ct->t[i] != NULL) octt_dump(ct->t[i]);
+}
+
+/* note that all calls of octt_count are operating on the same overflow
+ variable so all calls will know at the same time if an overflow
+ has occured and stops there. */
+
+void
+octt_count(struct octt *ct,int *tot,int max,int *overflow) {
+ int i,c;
+ c=0;
+ if (!(*overflow)) return;
+ for(i=0;i<8;i++) if (ct->t[i]!=NULL) {
+ octt_count(ct->t[i],tot,max,overflow);
+ c++;
+ }
+ if (!c) (*tot)++;
+ if ( (*tot) > (*overflow) ) *overflow=0;
+}
--- /dev/null
+#ifndef _DATATYPES_H_
+#define _DATATYPES_H_
+
+#include "io.h"
+
+#define MAXCHANNELS 4
+
+typedef struct { unsigned char gray_color; } gray_color;
+typedef struct { unsigned char r,g,b; } rgb_color;
+typedef struct { unsigned char r,g,b,a; } rgba_color;
+typedef struct { unsigned char c,m,y,k; } cmyk_color;
+
+typedef int undef_int; /* special value to put in typemaps to retun undef on 0 and 1 on 1 */
+
+typedef union {
+ gray_color gray;
+ rgb_color rgb;
+ rgba_color rgba;
+ cmyk_color cmyk;
+ unsigned char channel[MAXCHANNELS];
+ unsigned int ui;
+} i_color;
+
+
+struct _i_img {
+ int channels;
+ int xsize,ysize,bytes;
+ unsigned char *data;
+ unsigned int ch_mask;
+
+ int (*i_f_ppix) (struct _i_img *,int,int,i_color *);
+ int (*i_f_gpix) (struct _i_img *,int,int,i_color *);
+ void *ext_data;
+};
+
+typedef struct _i_img i_img;
+
+/* used for palette indices in some internal code (which might be
+ exposed at some point
+*/
+typedef unsigned char i_palidx;
+
+/*Â Helper datatypes
+ The types in here so far are:
+
+ doubly linked bucket list - pretty efficient
+ octtree - no idea about goodness
+
+ needed: hashes.
+
+*/
+
+
+
+
+
+/* bitmap mask */
+
+struct i_bitmap {
+ int xsize,ysize;
+ char *data;
+};
+
+struct i_bitmap* btm_new(int xsize,int ysize);
+void btm_destroy(struct i_bitmap *btm);
+int btm_test(struct i_bitmap *btm,int x,int y);
+void btm_set(struct i_bitmap *btm,int x,int y);
+
+
+
+
+
+
+
+
+/* Stack/Linked list */
+
+struct llink {
+ struct llink *p,*n;
+ void *data;
+ int fill; /* Number used in this link */
+};
+
+struct llist {
+ struct llink *h,*t;
+ int multip; /* # of copies in a single chain */
+ int ssize; /* size of each small element */
+ int count; /* number of elements on the list */
+};
+
+
+/* Links */
+
+struct llink *llink_new( struct llink* p,int size );
+int llist_llink_push( struct llist *lst, struct llink *lnk, void *data );
+
+/* Lists */
+
+struct llist *llist_new( int multip, int ssize );
+void llist_destroy( struct llist *l );
+void llist_push( struct llist *l, void *data );
+void llist_dump( struct llist *l );
+int llist_pop( struct llist *l,void *data );
+
+
+
+
+/* Octtree */
+
+struct octt {
+ struct octt *t[8];
+ int cnt;
+};
+
+struct octt *octt_new();
+int octt_add(struct octt *ct,unsigned char r,unsigned char g,unsigned char b);
+void octt_dump(struct octt *ct);
+void octt_count(struct octt *ct,int *tot,int max,int *overflow);
+void octt_delete(struct octt *ct);
+
+#endif
+
--- /dev/null
+#!/usr/bin/perl -w
+
+use Cwd;
+
+# doco.perl - 24 Jan 18:09:40 EST 2001
+# Addi - (addi@umich.edu)
+#
+# Extract documentation and help from the source files
+#
+# -f <files> list FIXME comments for files
+# -f list FIXME comments for all files
+# -d <file> list pod comments from file
+
+my $comm = shift or USAGE();
+
+if ($comm eq "-f") {
+ if (!@ARGV) {
+ getfiles();
+ @files = @CFILES;
+ }
+
+ for my $file (@files) {
+ local(*FH, $/); open(FH,"$BASE/$file") or die $!;
+ my $data = <FH>; close(FH);
+ while( $data =~ m/FIXME:(.*?)\*\//sg ) {
+ printf("%10.10s:%5d %s\n", $file, ptol($data, pos($data)), $1);
+ }
+ }
+ exit(0);
+}
+
+if ($comm eq "-d") {
+ USAGE() if !@ARGV;
+ my $file = shift;
+ getfiles();
+ local(*FH, $/); open(FH, "$BASE/$file") or die $!;
+ my $data = <FH>; close(FH);
+ $data =~ s/^(=item)/\n$1/mg;
+ $data =~ s/^(=cut)/\n~~~~~~~~\n\n$1\n\n/mg;
+ print "\n";
+ open(FH,"|pod2text ") or die "Cannot run pod2text: $!\n";
+ print FH $data;
+ close(FH);
+ exit(2);
+}
+
+
+sub USAGE {
+
+print<<'EOF';
+doco.perl [-f files| stuff]
+
+ -f <files> list FIXME comments for files.
+ -f list FIXME comments for all files.
+
+EOF
+ exit;
+}
+
+sub getfiles {
+ $BASE=cwd;
+ local(*FH);
+ open(FH,"$BASE/MANIFEST") or die "Cannot open MANIFEST file: $!\n";
+ my @MANIFEST = <FH>;
+ chomp(@MANIFEST);
+ @CFILES = grep { m/\.c\s*$/ } @MANIFEST;
+}
+
+# string position to line number in string
+
+sub ptol {
+ my ($str, $pos) = @_;
+ my $lcnt=1;
+ $lcnt++ while(substr($str,0,$pos)=~m/\n/g);
+ $lcnt;
+}
--- /dev/null
+#include "image.h"
+#include "draw.h"
+#include "log.h"
+
+void
+i_mmarray_cr(i_mmarray *ar,int l) {
+ int i;
+
+ ar->lines=l;
+ ar->data=mymalloc(sizeof(minmax)*l);
+ for(i=0;i<l;i++) { ar->data[i].max=-1; ar->data[i].min=MAXINT; }
+}
+
+void
+i_mmarray_dst(i_mmarray *ar) {
+ ar->lines=0;
+ if (ar->data != NULL) { myfree(ar->data); ar->data=NULL; }
+}
+
+void
+i_mmarray_add(i_mmarray *ar,int x,int y) {
+ if (y>-1 && y<ar->lines)
+ {
+ if (x<ar->data[y].min) ar->data[y].min=x;
+ if (x>ar->data[y].max) ar->data[y].max=x;
+ }
+}
+
+int
+i_mmarray_gmin(i_mmarray *ar,int y) {
+ if (y>-1 && y<ar->lines) return ar->data[y].min;
+ else return -1;
+}
+
+int
+i_mmarray_getm(i_mmarray *ar,int y) {
+ if (y>-1 && y<ar->lines) return ar->data[y].max;
+ else return MAXINT;
+}
+
+void
+i_mmarray_render(i_img *im,i_mmarray *ar,i_color *val) {
+ int i,x;
+ for(i=0;i<ar->lines;i++) if (ar->data[i].max!=-1) for(x=ar->data[i].min;x<ar->data[i].max;x++) i_ppix(im,x,i,val);
+}
+
+
+static
+void
+i_arcdraw(int x1, int y1, int x2, int y2, i_mmarray *ar) {
+ double alpha;
+ double dsec;
+ int temp;
+ alpha=(double)(y2-y1)/(double)(x2-x1);
+ if (fabs(alpha)<1)
+ {
+ if (x2<x1) { temp=x1; x1=x2; x2=temp; temp=y1; y1=y2; y2=temp; }
+ dsec=y1;
+ while(x1<x2)
+ {
+ dsec+=alpha;
+ i_mmarray_add(ar,x1,(int)(dsec+0.5));
+ x1++;
+ }
+ }
+ else
+ {
+ alpha=1/alpha;
+ if (y2<y1) { temp=x1; x1=x2; x2=temp; temp=y1; y1=y2; y2=temp; }
+ dsec=x1;
+ while(y1<y2)
+ {
+ dsec+=alpha;
+ i_mmarray_add(ar,(int)(dsec+0.5),y1);
+ y1++;
+ }
+ }
+}
+
+void
+i_mmarray_info(i_mmarray *ar) {
+ int i;
+ for(i=0;i<ar->lines;i++)
+ if (ar->data[i].max!=-1) printf("line %d: min=%d, max=%d.\n",i,ar->data[i].min,ar->data[i].max);
+}
+
+
+void
+i_arc(i_img *im,int x,int y,float rad,float d1,float d2,i_color *val) {
+ i_mmarray dot;
+ float f,fx,fy;
+ int x1,y1;
+
+ mm_log((1,"i_arc(im* 0x%x,x %d,y %d,rad %.2f,d1 %.2f,d2 %.2f,val 0x%x)\n",im,x,y,rad,d1,d2,val));
+
+ i_mmarray_cr(&dot,im->ysize);
+
+ x1=(int)(x+0.5+rad*cos(d1*PI/180.0));
+ y1=(int)(y+0.5+rad*sin(d1*PI/180.0));
+ fx=(float)x1; fy=(float)y1;
+
+ /* printf("x1: %d.\ny1: %d.\n",x1,y1); */
+ i_arcdraw(x, y, x1, y1, &dot);
+
+ x1=(int)(x+0.5+rad*cos(d2*PI/180.0));
+ y1=(int)(y+0.5+rad*sin(d2*PI/180.0));
+
+ for(f=d1;f<=d2;f+=0.01) i_mmarray_add(&dot,(int)(x+0.5+rad*cos(f*PI/180.0)),(int)(y+0.5+rad*sin(f*PI/180.0)));
+
+ /* printf("x1: %d.\ny1: %d.\n",x1,y1); */
+ i_arcdraw(x, y, x1, y1, &dot);
+
+ /* dot.info(); */
+ i_mmarray_render(im,&dot,val);
+}
+
+void
+i_box(i_img *im,int x1,int y1,int x2,int y2,i_color *val) {
+ int x,y;
+ mm_log((1,"i_box(im* 0x%x,x1 %d,y1 %d,x2 %d,y2 %d,val 0x%x)\n",im,x1,y1,x2,y2,val));
+ for(x=x1;x<x2+1;x++) {
+ i_ppix(im,x,y1,val);
+ i_ppix(im,x,y2,val);
+ }
+ for(y=y1;y<y2+1;y++) {
+ i_ppix(im,x1,y,val);
+ i_ppix(im,x2,y,val);
+ }
+}
+
+void
+i_box_filled(i_img *im,int x1,int y1,int x2,int y2,i_color *val) {
+ int x,y;
+ mm_log((1,"i_box_filled(im* 0x%x,x1 %d,y1 %d,x2 %d,y2 %d,val 0x%x)\n",im,x1,y1,x2,y2,val));
+ for(x=x1;x<x2+1;x++) for (y=y1;y<y2+1;y++) i_ppix(im,x,y,val);
+}
+
+
+void
+i_draw(i_img *im,int x1,int y1,int x2,int y2,i_color *val) {
+ double alpha;
+ double dsec;
+ int temp;
+
+ mm_log((1,"i_draw(im* 0x%x,x1 %d,y1 %d,x2 %d,y2 %d,val 0x%x)\n",im,x1,y1,x2,y2,val));
+
+ alpha=(double)(y2-y1)/(double)(x2-x1);
+ if (fabs(alpha)<1)
+ {
+ if (x2<x1) { temp=x1; x1=x2; x2=temp; temp=y1; y1=y2; y2=temp; }
+ dsec=y1;
+ while(x1<x2)
+ {
+ dsec+=alpha;
+ i_ppix(im,x1,(int)(dsec+0.5),val);
+ x1++;
+ }
+ }
+ else
+ {
+ alpha=1/alpha;
+ if (y2<y1) { temp=x1; x1=x2; x2=temp; temp=y1; y1=y2; y2=temp; }
+ dsec=x1;
+ while(y1<y2)
+ {
+ dsec+=alpha;
+ i_ppix(im,(int)(dsec+0.5),y1,val);
+ y1++;
+ }
+ }
+ mm_log((1,"i_draw: alpha=%f.\n",alpha));
+}
+
+void
+i_line_aa(i_img *im,int x1,int y1,int x2,int y2,i_color *val) {
+ i_color tval;
+ float alpha;
+ float dsec,dfrac;
+ int temp,dx,dy,isec,ch;
+
+ mm_log((1,"i_draw(im* 0x%x,x1 %d,y1 %d,x2 %d,y2 %d,val 0x%x)\n",im,x1,y1,x2,y2,val));
+
+ dy=y2-y1;
+ dx=x2-x1;
+
+ if (abs(dx)>abs(dy)) { /* alpha < 1 */
+ if (x2<x1) { temp=x1; x1=x2; x2=temp; temp=y1; y1=y2; y2=temp; }
+ alpha=(float)(y2-y1)/(float)(x2-x1);
+
+ dsec=y1;
+ while(x1<=x2) {
+ isec=(int)dsec;
+ dfrac=dsec-isec;
+ /* dfrac=1-(1-dfrac)*(1-dfrac); */
+ /* This is something we can play with to try to get better looking lines */
+
+ i_gpix(im,x1,isec,&tval);
+ for(ch=0;ch<im->channels;ch++) tval.channel[ch]=(unsigned char)(dfrac*(float)tval.channel[ch]+(1-dfrac)*(float)val->channel[ch]);
+ i_ppix(im,x1,isec,&tval);
+
+ i_gpix(im,x1,isec+1,&tval);
+ for(ch=0;ch<im->channels;ch++) tval.channel[ch]=(unsigned char)((1-dfrac)*(float)tval.channel[ch]+dfrac*(float)val->channel[ch]);
+ i_ppix(im,x1,isec+1,&tval);
+
+ dsec+=alpha;
+ x1++;
+ }
+ } else {
+ if (y2<y1) { temp=y1; y1=y2; y2=temp; temp=x1; x1=x2; x2=temp; }
+ alpha=(float)(x2-x1)/(float)(y2-y1);
+ dsec=x1;
+ while(y1<=y2) {
+ isec=(int)dsec;
+ dfrac=dsec-isec;
+ /* dfrac=sqrt(dfrac); */
+ /* This is something we can play with */
+ i_gpix(im,isec,y1,&tval);
+ for(ch=0;ch<im->channels;ch++) tval.channel[ch]=(unsigned char)(dfrac*(float)tval.channel[ch]+(1-dfrac)*(float)val->channel[ch]);
+ i_ppix(im,isec,y1,&tval);
+
+ i_gpix(im,isec+1,y1,&tval);
+ for(ch=0;ch<im->channels;ch++) tval.channel[ch]=(unsigned char)((1-dfrac)*(float)tval.channel[ch]+dfrac*(float)val->channel[ch]);
+ i_ppix(im,isec+1,y1,&tval);
+
+ dsec+=alpha;
+ y1++;
+ }
+ }
+}
+
+double
+perm(int n,int k) {
+ double r;
+ int i;
+ r=1;
+ for(i=k+1;i<=n;i++) r*=i;
+ for(i=1;i<=(n-k);i++) r/=i;
+ return r;
+}
+
+
+/* Note in calculating t^k*(1-t)^(n-k)
+ we can start by using t^0=1 so this simplifies to
+ t^0*(1-t)^n - we want to multiply that with t/(1-t) each iteration
+ to get a new level - this may lead to errors who knows lets test it */
+
+void
+i_bezier_multi(i_img *im,int l,double *x,double *y,i_color *val) {
+ double *bzcoef;
+ double t,cx,cy;
+ int k,i;
+ int lx = 0,ly = 0;
+ int n=l-1;
+ double itr,ccoef;
+
+
+ bzcoef=mymalloc(sizeof(double)*l);
+ for(k=0;k<l;k++) bzcoef[k]=perm(n,k);
+ ICL_info(val);
+
+
+ /* for(k=0;k<l;k++) printf("bzcoef: %d -> %f\n",k,bzcoef[k]); */
+ i=0;
+ for(t=0;t<=1;t+=0.005) {
+ cx=cy=0;
+ itr=t/(1-t);
+ ccoef=pow(1-t,n);
+ for(k=0;k<l;k++) {
+ /* cx+=bzcoef[k]*x[k]*pow(t,k)*pow(1-t,n-k);
+ cy+=bzcoef[k]*y[k]*pow(t,k)*pow(1-t,n-k);*/
+
+ cx+=bzcoef[k]*x[k]*ccoef;
+ cy+=bzcoef[k]*y[k]*ccoef;
+ ccoef*=itr;
+ }
+ /* printf("%f -> (%d,%d)\n",t,(int)(0.5+cx),(int)(0.5+cy)); */
+ if (i++) {
+ i_line_aa(im,lx,ly,(int)(0.5+cx),(int)(0.5+cy),val);
+ }
+ /* i_ppix(im,(int)(0.5+cx),(int)(0.5+cy),val); */
+ lx=(int)(0.5+cx);
+ ly=(int)(0.5+cy);
+ }
+ ICL_info(val);
+ myfree(bzcoef);
+}
+
+
+
+/* Flood fill
+
+ REF: Graphics Gems I. page 282+
+
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* This should be moved into a seperate file? */
+
+/* This is the truncation used:
+
+ a double is multiplied by 16 and then truncated.
+ This means that 0 -> 0
+ So a triangle of (0,0) (10,10) (10,0) Will look like it's
+ not filling the (10,10) point nor the (10,0)-(10,10) line segment
+
+*/
+
+
+
+
+#define IMTRUNC(x) ((int)(x*16))
+
+
+/*
+typedef struct {
+ short ms,ls;
+} pcord;
+*/
+
+typedef int pcord;
+
+struct p_point {
+ int n;
+ pcord x,y;
+};
+
+struct p_line {
+ int n;
+ pcord x1,y1;
+ pcord x2,y2;
+ pcord miny,maxy;
+};
+
+struct p_slice {
+ int n;
+ double x;
+};
+
+int
+p_compy(const struct p_point *p1, const struct p_point *p2) {
+ if (p1->y > p2->y) return 1;
+ if (p1->y < p2->y) return -1;
+ return 0;
+}
+
+int
+p_compx(const struct p_slice *p1, const struct p_slice *p2) {
+ if (p1->x > p2->x) return 1;
+ if (p1->x < p2->x) return -1;
+ return 0;
+}
+
+/* Change this to int? and round right goddamn it! */
+
+double
+p_eval_aty(struct p_line *l,pcord y) {
+ int t;
+ t=l->y2-l->y1;
+ if (t) return ( (y-l->y1)*l->x2 + (l->y2-y)*l->x1 )/t;
+ return (l->x1+l->x2)/2.0;
+}
+
+double
+p_eval_atx(struct p_line *l,pcord x) {
+ int t;
+ t=l->x2-l->x1;
+ if (t) return ( (x-l->x1)*l->y2 + (l->x2-x)*l->y1 )/t;
+ return (l->y1+l->y2)/2.0;
+}
+
+
+/* Algorithm to count the pixels covered by line going through pixel (x,y)
+ in coarse coords.
+*/
+
+/*
+static int
+p_eval_coverage(struct p_line *l, int lc, int x, pcord y1, pcord y2) {
+
+ return 0;
+}
+*/
+
+
+/* Antialiasing polygon algorithm
+ specs:
+ 1. only nice polygons - no crossovers
+ 2. 1/16 pixel resolution # previously - floating point co-ordinates
+ 3. full antialiasing ( complete spectrum of blends )
+ 4. uses hardly any memory
+ 5. no subsampling phase
+
+ For each interval we must:
+ 1. find which lines are in it
+ 2. order the lines from in increasing x order.
+ since we are assuming no crossovers it is sufficent
+ to check a single point on each line.
+*/
+
+/*
+ Terms:
+
+ 1. Interval: A vertical segment in which no lines cross nor end.
+ 2. Scanline: A physical line, contains 16 subpixels in the horizontal direction
+ 3. Slice: A start stop line pair.
+
+ */
+
+/* Templine logic:
+
+ The variable tempflush describes if there is anything in the templine array or not.
+
+ if tempflush is 0 then the array is clean.
+ if tempflush is 1 then the array contains a partial filled scanline
+
+ */
+
+/* Rendering of a single start stop pair:
+
+?? REWRITE
+
+ The rendering is split in three parts
+ 1. From the first start pixel to the first stop pixel
+ 2. Area from the first end pixel to the last start pixel
+ 3. Area from the first end pixel to the last start pixel
+
+ */
+
+
+void
+i_poly_aa(i_img *im,int l,double *x,double *y,i_color *val) {
+ int i,k; /* Index variables */
+ int clc; /* Index of next item on interval linelist */
+ int tx; /* Coarse x coord within a scanline */
+ pcord miny,maxy; /* Min and max values of the current slice in the subcord system */
+ pcord minacy,maxacy; /* Min and max values of the current scanline bounded by the slice
+ in the subcord system */
+ int cscl; /* Current scanline */
+ pcord cc; /* Current vertical centerpoint of interval */
+ int mt1,mt2;
+ int minsx,minex,maxsx,maxex; /* The horizontal stretches of the lines beloning to the current slice within a scanline */
+ int *templine; /* Line accumulator */
+
+ struct p_point *pset; /* List of points in polygon */
+ struct p_line *lset; /* List of lines in polygon */
+ struct p_slice *tllist; /* List of slices */
+
+ i_color red,blue,yellow;
+ red.rgb.r=255;
+ red.rgb.g=0;
+ red.rgb.b=0;
+
+ blue.rgb.r=0;
+ blue.rgb.g=0;
+ blue.rgb.b=255;
+
+ yellow.rgb.r=255;
+ yellow.rgb.g=255;
+ yellow.rgb.b=255;
+
+ if ( (pset=mymalloc(sizeof(struct p_point)*l)) == NULL) { m_fatal(2,"malloc failed\n"); return; }
+ if ( (lset=mymalloc(sizeof(struct p_line)*l)) == NULL) { m_fatal(2,"malloc failed\n"); return; }
+ if ( (tllist=mymalloc(sizeof(struct p_slice)*l)) == NULL) { m_fatal(2,"malloc failed\n"); return; }
+ if ( (templine=mymalloc(sizeof(int)*im->xsize)) == NULL) { m_fatal(2,"malloc failed\n"); return; }
+
+ /* insert the lines into the line list */
+
+ for(i=0;i<l;i++) {
+ pset[i].n=i;
+ pset[i].x=IMTRUNC(x[i]);
+ pset[i].y=IMTRUNC(y[i]);
+ lset[i].n=i;
+ lset[i].x1=IMTRUNC(x[i]);
+ lset[i].y1=IMTRUNC(y[i]);
+ lset[i].x2=IMTRUNC(x[(i+1)%l]);
+ lset[i].y2=IMTRUNC(y[(i+1)%l]);
+ lset[i].miny=min(lset[i].y1,lset[i].y2);
+ lset[i].maxy=max(lset[i].y1,lset[i].y2);
+ }
+
+ qsort(pset,l,sizeof(struct p_point),(int(*)(const void *,const void *))p_compy);
+
+ printf("post point list (sorted in ascending y order)\n");
+ for(i=0;i<l;i++) {
+ printf("%d [ %d ] %d %d\n",i,pset[i].n,pset[i].x,pset[i].y);
+ }
+
+ printf("line list\n");
+ for(i=0;i<l;i++) {
+ printf("%d [ %d ] (%d , %d) -> (%d , %d) yspan ( %d , %d )\n",i,lset[i].n,lset[i].x1,lset[i].y1,lset[i].x2,lset[i].y2,lset[i].miny,lset[i].maxy);
+ }
+
+ printf("MAIN LOOP\n\n");
+
+ /* Zero templine buffer */
+ /* Templine buffer flushed everytime a scan line ends */
+ for(i=0;i<im->xsize;i++) templine[i]=0;
+
+
+ /* loop on intervals */
+ for(i=0;i<l-1;i++) {
+ cc=(pset[i].y+pset[i+1].y)/2;
+ printf("current slice is: %d to %d ( cpoint %d )\n",pset[i].y,pset[i+1].y,cc);
+ clc=0;
+
+ /* stuff this in a function ?? */
+
+ /* Check what lines belong to interval */
+ for(k=0;k<l;k++) {
+ printf("checking line: %d [ %d ] (%d , %d) -> (%d, %d) yspan ( %d , %d )",
+ k,lset[k].n,lset[k].x1,lset[k].y1,lset[k].x2,lset[k].y2,lset[k].miny,lset[k].maxy);
+ if (cc >= lset[k].miny && cc <= lset[k].maxy) {
+ if (lset[k].miny == lset[k].maxy) printf(" HORIZONTAL - skipped\n");
+ else {
+ printf(" INSIDE\n");
+ tllist[clc].x=p_eval_aty(&lset[k],cc);
+ tllist[clc++].n=k;
+ }
+ } else printf(" OUTSIDE\n");
+ }
+
+ /*
+ at this point a table of pixels that need special care should
+ be generated from the line list - it should be ordered so that only
+ one needs to be checked - options: rendering to a list then order - or
+ rendering in the right order might be possible to do nicely with the
+ following heuristic:
+
+ 1. Draw leftmost pixel for this line
+ 2. If preceeding pixel was occupied check next one else go to 1 again.
+ */
+
+ printf("lines in current interval:");
+ for(k=0;k<clc;k++) printf(" %d (%.2f)",tllist[k].n,tllist[k].x);
+ printf("\n");
+
+ /* evaluate the lines in the middle of the slice */
+
+ printf("Sort lines left to right within interval\n");
+ qsort(tllist,clc,sizeof(struct p_slice),(int(*)(const void *,const void *))p_compx);
+
+ printf("sorted lines in interval - output:");
+ for(k=0;k<clc;k++) printf(" %d",tllist[k].n);
+ printf("\n");
+
+ miny=pset[i].y;
+ maxy=pset[i+1].y;
+
+ /* iterate over scanlines */
+ for(cscl=(miny)/16;cscl<=maxy/16;cscl++) {
+ minacy=max(miny,cscl*16);
+ maxacy=min(maxy,cscl*16+15);
+
+ printf("Scanline bound %d - %d\n",minacy, maxacy);
+
+ /* iterate over line pairs (slices) within interval */
+ for(k=0;k<clc-1;k+=2) {
+
+ mt1=p_eval_aty(&lset[tllist[k].n],minacy); /* upper corner */
+ mt2=p_eval_aty(&lset[tllist[k].n],maxacy); /* lower corner */
+ minsx=min(mt1,mt2);
+ minex=max(mt1,mt2);
+ mt1=p_eval_aty(&lset[tllist[k+1].n],minacy); /* upper corner */
+ mt2=p_eval_aty(&lset[tllist[k+1].n],maxacy); /* lower corner */
+ maxsx=min(mt1,mt2);
+ maxex=max(mt1,mt2);
+
+ printf("minsx: %d minex: %d\n",minsx,minex);
+ printf("maxsx: %d maxex: %d\n",maxsx,maxex);
+
+ if (minex/16<maxsx/16) printf("Scan slice is simple!\n");
+ else printf("Scan slice is complicated!\n");
+
+ if (minsx/16 == minex/16) { /* The line starts and ends in the same pixel */
+ printf("Low slant start pixel\n");
+ templine[minsx/16]=(maxacy-minacy+1)*(minex-minsx+1)/2+((minex | 0xF)-minex)*(maxacy-minacy+1);
+ } else {
+ for(tx=minsx/16;tx<minex/16+1;tx++) {
+ int minx,maxx,minxy,maxxy;
+ minx=max(minsx, tx*16 );
+ maxx=min(minex, tx*16+15);
+
+ if (minx == maxx) {
+ templine[tx]=(maxacy-minacy+1);
+ } else {
+
+ minxy=p_eval_atx(&lset[tllist[k].n], minx);
+ maxxy=p_eval_atx(&lset[tllist[k].n], maxx);
+
+ templine[tx]+=(abs(minxy-maxxy)+1)*(minex-minsx+1)/2; /* The triangle between the points */
+ if (mt1 < mt2) { /* \ slant */
+ /* ((minex | 0xF)-minex)*(maxacy-minacy+1); FIXME: unfinished */
+
+
+
+ } else {
+ templine[tx]+=((minex | 0xF)-minex)*(maxacy-minacy+1);
+ }
+
+ }
+ }
+ }
+
+ for(tx=maxsx/16;tx<maxex/16+1;tx++) templine[tx]+=16*(maxacy-minacy+1);
+
+ /* for(tx=minex/16+1;tx<maxsx/16;tx++) 0; */
+
+
+ printf("line %d: painting %d - %d\n",cscl,minex/16+1,maxsx/16);
+ if ( (minacy != cscl*16) || (maxacy != cscl*16+15) ) {
+ for(tx=minsx/16;tx<maxex/16+1;tx++) {
+ i_ppix(im,tx,cscl,&yellow);
+ }
+ }
+ else {
+ for(tx=minsx/16;tx<minex/16+1;tx++) i_ppix(im,tx,cscl,&red);
+ for(tx=maxsx/16;tx<maxex/16+1;tx++) i_ppix(im,tx,cscl,&blue);
+ for(tx=minex/16+1;tx<maxsx/16;tx++) i_ppix(im,tx,cscl,val);
+ }
+
+ } /* Slices */
+ } /* Scanlines */
+ } /* Intervals */
+} /* Function */
+
+
+
+
+
+
+
+/* Flood fill algorithm - based on the Ken Fishkins (pixar) gem in
+ graphics gems I */
+
+/*
+struct stc {
+ int mylx,myrx;
+ int dadlx,dadrx;
+ int myy;
+ int mydirection;
+};
+
+Not used code???
+*/
+
+
+struct stack_element {
+ int myLx,myRx;
+ int dadLx,dadRx;
+ int myY;
+ int myDirection;
+};
+
+
+/* create the link data to put push onto the stack */
+
+static
+struct stack_element*
+crdata(int left,int right,int dadl,int dadr,int y, int dir) {
+ struct stack_element *ste;
+ ste=(struct stack_element*)mymalloc(sizeof(struct stack_element));
+ ste->myLx=left;
+ ste->myRx=right;
+ ste->dadLx=dadl;
+ ste->dadRx=dadr;
+ ste->myY=y;
+ ste->myDirection=dir;
+ return ste;
+}
+
+/* i_ccomp compares two colors and gives true if they are the same */
+
+static int
+i_ccomp(i_color *val1,i_color *val2,int ch) {
+ int i;
+ for(i=0;i<ch;i++) if (val1->channel[i] !=val2->channel[i]) return 0;
+ return 1;
+}
+
+
+static int
+i_lspan(i_img *im,int seedx,int seedy,i_color *val) {
+ i_color cval;
+ while(1) {
+ if (seedx-1 < 0) break;
+ i_gpix(im,seedx-1,seedy,&cval);
+ if (!i_ccomp(val,&cval,im->channels)) break;
+ seedx--;
+ }
+ return seedx;
+}
+
+static int
+i_rspan(i_img *im,int seedx,int seedy,i_color *val) {
+ i_color cval;
+ while(1) {
+ if (seedx+1 > im->xsize-1) break;
+ i_gpix(im,seedx+1,seedy,&cval);
+ if (!i_ccomp(val,&cval,im->channels)) break;
+ seedx++;
+ }
+ return seedx;
+}
+
+/* Macro to create a link and push on to the list */
+
+#define ST_PUSH(left,right,dadl,dadr,y,dir) { struct stack_element *s=crdata(left,right,dadl,dadr,y,dir); llist_push(st,&s);}
+
+/* pops the shadow on TOS into local variables lx,rx,y,direction,dadLx and dadRx */
+/* No overflow check! */
+
+#define ST_POP() { struct stack_element *s; llist_pop(st,&s); lx=s->myLx; rx=s->myRx; dadLx=s->dadLx; dadRx=s->dadRx; y=s->myY; direction=s->myDirection; myfree(s); }
+
+#define ST_STACK(dir,dadLx,dadRx,lx,rx,y) { int pushrx=rx+1; int pushlx=lx-1; ST_PUSH(lx,rx,pushlx,pushrx,y+dir,dir); if (rx > dadRx) ST_PUSH(dadRx+1,rx,pushlx,pushrx,y-dir,-dir); if (lx < dadLx) ST_PUSH(lx,dadLx-1,pushlx,pushrx,y-dir,-dir); }
+
+#define SET(x,y) btm_set(btm,x,y);
+
+#define INSIDE(x,y) ((!btm_test(btm,x,y) && ( i_gpix(im,x,y,&cval),i_ccomp(&val,&cval,channels) ) ))
+
+void
+i_flood_fill(i_img *im,int seedx,int seedy,i_color *dcol) {
+
+ int lx,rx;
+ int y;
+ int direction;
+ int dadLx,dadRx;
+
+ int wasIn=0;
+ int x=0;
+
+ /* int tx,ty; */
+
+ int bxmin=seedx,bxmax=seedx,bymin=seedy,bymax=seedy;
+
+ struct llist *st;
+ struct i_bitmap *btm;
+
+ int channels,xsize,ysize;
+ i_color cval,val;
+
+ channels=im->channels;
+ xsize=im->xsize;
+ ysize=im->ysize;
+
+ btm=btm_new(xsize,ysize);
+ st=llist_new(100,sizeof(struct stack_element*));
+
+ /* Get the reference color */
+ i_gpix(im,seedx,seedy,&val);
+
+ /* Find the starting span and fill it */
+ lx=i_lspan(im,seedx,seedy,&val);
+ rx=i_rspan(im,seedx,seedy,&val);
+
+ /* printf("span: %d %d \n",lx,rx); */
+
+ for(x=lx;x<=rx;x++) SET(x,seedy);
+
+ ST_PUSH(lx,rx,lx,rx,seedy+1,1);
+ ST_PUSH(lx,rx,lx,rx,seedy-1,-1);
+
+ while(st->count) {
+ ST_POP();
+
+ if (y<0 || y>ysize-1) continue;
+
+ if (bymin > y) bymin=y; /* in the worst case an extra line */
+ if (bymax < y) bymax=y;
+
+ /* printf("start of scan - on stack : %d \n",st->count); */
+
+
+ /* printf("lx=%d rx=%d dadLx=%d dadRx=%d y=%d direction=%d\n",lx,rx,dadLx,dadRx,y,direction); */
+
+ /*
+ printf(" ");
+ for(tx=0;tx<xsize;tx++) printf("%d",tx%10);
+ printf("\n");
+ for(ty=0;ty<ysize;ty++) {
+ printf("%d",ty%10);
+ for(tx=0;tx<xsize;tx++) printf("%d",!!btm_test(btm,tx,ty));
+ printf("\n");
+ }
+
+ printf("y=%d\n",y);
+ */
+
+
+ x=lx+1;
+ if ( (wasIn = INSIDE(lx,y)) ) {
+ SET(lx,y);
+ lx--;
+ while(INSIDE(lx,y) && lx > 0) {
+ SET(lx,y);
+ lx--;
+ }
+ }
+
+ if (bxmin > lx) bxmin=lx;
+
+ while(x <= xsize-1) {
+ /* printf("x=%d\n",x); */
+ if (wasIn) {
+
+ if (INSIDE(x,y)) {
+ /* case 1: was inside, am still inside */
+ SET(x,y);
+ } else {
+ /* case 2: was inside, am no longer inside: just found the
+ right edge of a span */
+ ST_STACK(direction,dadLx,dadRx,lx,(x-1),y);
+
+ if (bxmax < x) bxmax=x;
+
+ wasIn=0;
+ }
+ } else {
+ if (x>rx) goto EXT;
+ if (INSIDE(x,y)) {
+ SET(x,y);
+ /* case 3: Wasn't inside, am now: just found the start of a new run */
+ wasIn=1;
+ lx=x;
+ } else {
+ /* case 4: Wasn't inside, still isn't */
+ }
+ }
+ x++;
+ }
+ EXT: /* out of loop */
+ if (wasIn) {
+ /* hit an edge of the frame buffer while inside a run */
+ ST_STACK(direction,dadLx,dadRx,lx,(x-1),y);
+ if (bxmax < x) bxmax=x;
+ }
+ }
+
+ /* printf("lx=%d rx=%d dadLx=%d dadRx=%d y=%d direction=%d\n",lx,rx,dadLx,dadRx,y,direction);
+ printf("bounding box: [%d,%d] - [%d,%d]\n",bxmin,bymin,bxmax,bymax); */
+
+ for(y=bymin;y<=bymax;y++) for(x=bxmin;x<=bxmax;x++) if (btm_test(btm,x,y)) i_ppix(im,x,y,dcol);
+
+ btm_destroy(btm);
+ llist_destroy(st);
+}
--- /dev/null
+#include "image.h"
+
+typedef struct {
+ int min,max;
+} minmax;
+
+typedef struct {
+ minmax *data;
+ int lines;
+} i_mmarray;
+
+/* FIXME: Merge this into datatypes.{c,h} */
+
+void i_mmarray_cr(i_mmarray *ar,int l);
+void i_mmarray_dst(i_mmarray *ar);
+void i_mmarray_add(i_mmarray *ar,int x,int y);
+int i_mmarray_gmin(i_mmarray *ar,int y);
+int i_mmarray_getm(i_mmarray *ar,int y);
+void i_mmarray_render(i_img *im,i_mmarray *ar,i_color *val);
+static void i_arcdraw(int x1, int y1, int x2, int y2, i_mmarray *ar);
+void i_mmarray_info(i_mmarray *ar);
+void i_arc(i_img *im,int x,int y,float rad,float d1,float d2,i_color *val);
+void i_box(i_img *im,int x0,int y0,int x1,int y1,i_color *val);
+void i_draw(i_img *im,int x1,int y1,int x2,int y2,i_color *val);
--- /dev/null
+#include "dynaload.h"
+#include "XSUB.h" /* so we can compile on threaded perls */
+
+/* These functions are all shared - then comes platform dependant code */
+
+
+int getstr(void *hv_t,char *key,char **store) {
+ SV** svpp;
+ HV* hv=(HV*)hv_t;
+
+ mm_log((1,"getstr(hv_t 0x%X, key %s, store 0x%X)\n",hv_t,key,store));
+
+ if ( !hv_exists(hv,key,strlen(key)) ) return 0;
+
+ svpp=hv_fetch(hv, key, strlen(key), 0);
+ *store=SvPV(*svpp, PL_na );
+
+ return 1;
+}
+
+int getint(void *hv_t,char *key,int *store) {
+ SV** svpp;
+ HV* hv=(HV*)hv_t;
+
+ mm_log((1,"getint(hv_t 0x%X, key %s, store 0x%X)\n",hv_t,key,store));
+
+ if ( !hv_exists(hv,key,strlen(key)) ) return 0;
+
+ svpp=hv_fetch(hv, key, strlen(key), 0);
+ *store=(int)SvIV(*svpp);
+ return 1;
+}
+
+int getdouble(void *hv_t,char* key,double *store) {
+ SV** svpp;
+ HV* hv=(HV*)hv_t;
+
+ mm_log((1,"getdouble(hv_t 0x%X, key %s, store 0x%X)\n",hv_t,key,store));
+
+ if ( !hv_exists(hv,key,strlen(key)) ) return 0;
+ svpp=hv_fetch(hv, key, strlen(key), 0);
+ *store=(float)SvNV(*svpp);
+ return 1;
+}
+
+int getvoid(void *hv_t,char* key,void **store) {
+ SV** svpp;
+ HV* hv=(HV*)hv_t;
+
+ mm_log((1,"getvoid(hv_t 0x%X, key %s, store 0x%X)\n",hv_t,key,store));
+
+ if ( !hv_exists(hv,key,strlen(key)) ) return 0;
+
+ svpp=hv_fetch(hv, key, strlen(key), 0);
+ *store=(void*)SvIV(*svpp);
+
+ return 1;
+}
+
+int getobj(void *hv_t,char *key,char *type,void **store) {
+ SV** svpp;
+ HV* hv=(HV*)hv_t;
+
+ mm_log((1,"getobj(hv_t 0x%X, key %s,type %s, store 0x%X)\n",hv_t,key,type,store));
+
+ if ( !hv_exists(hv,key,strlen(key)) ) return 0;
+
+ svpp=hv_fetch(hv, key, strlen(key), 0);
+
+ if (sv_derived_from(*svpp,type)) {
+ IV tmp = SvIV((SV*)SvRV(*svpp));
+ *store = (void*) tmp;
+ } else {
+ mm_log((1,"getobj: key exists in hash but is not of correct type"));
+ return 0;
+ }
+
+ return 1;
+}
+
+
+UTIL_table_t UTIL_table={getstr,getint,getdouble,getvoid,getobj};
+extern symbol_table_t symbol_table;
+
+/*
+ Dynamic loading works like this:
+ dynaload opens the shared object and
+ loads all the functions into an array of functions
+ it returns a string from the dynamic function that
+ can be supplied to the parser for evaling.
+*/
+
+void
+DSO_call(DSO_handle *handle,int func_index,HV* hv) {
+ mm_log((1,"DSO_call(handle 0x%X, func_index %d, hv 0x%X)\n",handle,func_index,hv));
+ (handle->function_list[func_index].iptr)((void*)hv);
+}
+
+
+#if defined( OS_hpux )
+
+void*
+DSO_open(char* file,char** evalstring) {
+ shl_t tt_handle;
+ void *d_handle,**plugin_symtab,**plugin_utiltab;
+ int rc,*iptr, (*fptr)(int);
+ func_ptr *function_list;
+ DSO_handle *dso_handle;
+ void (*f)(void *s,void *u); /* these will just have to be void for now */
+ int i;
+
+ *evalstring=NULL;
+
+ mm_log( (1,"DSO_open(file '%s' (0x%08X), evalstring 0x%08X)\n",file,file,evalstring) );
+
+ if ( (tt_handle = shl_load(file, BIND_DEFERRED,0L)) == NULL) return NULL;
+ if ( (shl_findsym(&tt_handle, I_EVALSTR,TYPE_UNDEFINED,(void*)evalstring))) return NULL;
+
+ /*
+ if ( (shl_findsym(&tt_handle, "symbol_table",TYPE_UNDEFINED,(void*)&plugin_symtab))) return NULL;
+ if ( (shl_findsym(&tt_handle, "util_table",TYPE_UNDEFINED,&plugin_utiltab))) return NULL;
+ (*plugin_symtab)=&symbol_table;
+ (*plugin_utiltab)=&UTIL_table;
+ */
+
+ if ( (shl_findsym(&tt_handle, I_INSTALL_TABLES ,TYPE_UNDEFINED, &f ))) return NULL;
+
+ mm_log( (1,"Calling install_tables\n") );
+ f(&symbol_table,&UTIL_table);
+ mm_log( (1,"Call ok.\n") );
+
+ if ( (shl_findsym(&tt_handle, I_FUNCTION_LIST ,TYPE_UNDEFINED,(func_ptr*)&function_list))) return NULL;
+ if ( (dso_handle=(DSO_handle*)malloc(sizeof(DSO_handle))) == NULL) return NULL;
+
+ dso_handle->handle=tt_handle; /* needed to close again */
+ dso_handle->function_list=function_list;
+ if ( (dso_handle->filename=(char*)malloc(strlen(file))) == NULL) { free(dso_handle); return NULL; }
+ strcpy(dso_handle->filename,file);
+
+ mm_log((1,"DSO_open <- (0x%X)\n",dso_handle));
+ return (void*)dso_handle;
+}
+
+undef_int
+DSO_close(void *ptr) {
+ DSO_handle *handle=(DSO_handle*) ptr;
+ mm_log((1,"DSO_close(ptr 0x%X)\n",ptr));
+ return !shl_unload((handle->handle));
+}
+
+#elif defined(WIN32)
+
+void *
+DSO_open(char *file, char **evalstring) {
+ HMODULE d_handle;
+ func_ptr *function_list;
+ DSO_handle *dso_handle;
+
+ void (*f)(void *s,void *u); /* these will just have to be void for now */
+
+ mm_log( (1,"DSO_open(file '%s' (0x%08X), evalstring 0x%08X)\n",file,file,evalstring) );
+
+ *evalstring = NULL;
+ if ((d_handle = LoadLibrary(file)) == NULL) {
+ mm_log((1, "DSO_open: LoadLibrary(%s) failed: %lu\n", file, GetLastError()));
+ return NULL;
+ }
+ if ( (*evalstring = (char *)GetProcAddress(d_handle, I_EVALSTR)) == NULL) {
+ mm_log((1,"DSO_open: GetProcAddress didn't fine '%s': %lu\n", I_EVALSTR, GetLastError()));
+ FreeLibrary(d_handle);
+ return NULL;
+ }
+ if ((f = (void (*)(void *, void*))GetProcAddress(d_handle, I_INSTALL_TABLES)) == NULL) {
+ mm_log((1, "DSO_open: GetProcAddress didn't find '%s': %lu\n", I_INSTALL_TABLES, GetLastError()));
+ FreeLibrary(d_handle);
+ return NULL;
+ }
+ mm_log((1, "Calling install tables\n"));
+ f(&symbol_table, &UTIL_table);
+ mm_log((1, "Call ok\n"));
+
+ if ( (function_list = (func_ptr *)GetProcAddress(d_handle, I_FUNCTION_LIST)) == NULL) {
+ mm_log((1, "DSO_open: GetProcAddress didn't find '%s': %lu\n", I_FUNCTION_LIST, GetLastError()));
+ FreeLibrary(d_handle);
+ return NULL;
+ }
+ if ( (dso_handle = (DSO_handle*)malloc(sizeof(DSO_handle))) == NULL) {
+ mm_log( (1, "DSO_Open: out of memory\n") );
+ FreeLibrary(d_handle);
+ return NULL;
+ }
+ dso_handle->handle=d_handle; /* needed to close again */
+ dso_handle->function_list=function_list;
+ if ( (dso_handle->filename=(char*)malloc(strlen(file))) == NULL) { free(dso_handle); FreeLibrary(d_handle); return NULL; }
+ strcpy(dso_handle->filename,file);
+
+ mm_log( (1,"DSO_open <- 0x%X\n",dso_handle) );
+ return (void*)dso_handle;
+
+}
+
+undef_int
+DSO_close(void *ptr) {
+ DSO_handle *handle = (DSO_handle *)ptr;
+ FreeLibrary(handle->handle);
+ free(handle->filename);
+ free(handle);
+}
+
+#else
+
+/* OS/2 has no dlclose; Perl doesn't provide one. */
+#ifdef __EMX__ /* OS/2 */
+int
+dlclose(minthandle_t h) {
+ return DosFreeModule(h) ? -1 : 0;
+}
+#endif /* __EMX__ */
+
+
+void*
+DSO_open(char* file,char** evalstring) {
+ void *d_handle;
+ func_ptr *function_list;
+ DSO_handle *dso_handle;
+
+ void (*f)(void *s,void *u); /* these will just have to be void for now */
+
+ *evalstring=NULL;
+
+ mm_log( (1,"DSO_open(file '%s' (0x%08X), evalstring 0x%08X)\n",file,file,evalstring) );
+
+ if ( (d_handle = dlopen(file, RTLD_LAZY)) == NULL) {
+ mm_log( (1,"DSO_open: dlopen failed: %s.\n",dlerror()) );
+ return NULL;
+ }
+
+ if ( (*evalstring = (char *)dlsym(d_handle, I_EVALSTR)) == NULL) {
+ mm_log( (1,"DSO_open: dlsym didn't find '%s': %s.\n",I_EVALSTR,dlerror()) );
+ return NULL;
+ }
+
+ /*
+
+ I'll just leave this thing in here for now if I need it real soon
+
+ mm_log( (1,"DSO_open: going to dlsym '%s'\n", I_SYMBOL_TABLE ));
+ if ( (plugin_symtab = dlsym(d_handle, I_SYMBOL_TABLE)) == NULL) {
+ mm_log( (1,"DSO_open: dlsym didn't find '%s': %s.\n",I_SYMBOL_TABLE,dlerror()) );
+ return NULL;
+ }
+
+ mm_log( (1,"DSO_open: going to dlsym '%s'\n", I_UTIL_TABLE ));
+ if ( (plugin_utiltab = dlsym(d_handle, I_UTIL_TABLE)) == NULL) {
+ mm_log( (1,"DSO_open: dlsym didn't find '%s': %s.\n",I_UTIL_TABLE,dlerror()) );
+ return NULL;
+ }
+
+ */
+
+ f = (void(*)(void *s,void *u))dlsym(d_handle, I_INSTALL_TABLES);
+ mm_log( (1,"DSO_open: going to dlsym '%s'\n", I_INSTALL_TABLES ));
+ if ( (f = (void(*)(void *s,void *u))dlsym(d_handle, I_INSTALL_TABLES)) == NULL) {
+ mm_log( (1,"DSO_open: dlsym didn't find '%s': %s.\n",I_INSTALL_TABLES,dlerror()) );
+ return NULL;
+ }
+
+ mm_log( (1,"Calling install_tables\n") );
+ f(&symbol_table,&UTIL_table);
+ mm_log( (1,"Call ok.\n") );
+
+ /* (*plugin_symtab)=&symbol_table;
+ (*plugin_utiltab)=&UTIL_table; */
+
+ mm_log( (1,"DSO_open: going to dlsym '%s'\n", I_FUNCTION_LIST ));
+ if ( (function_list=(func_ptr *)dlsym(d_handle, I_FUNCTION_LIST)) == NULL) {
+ mm_log( (1,"DSO_open: dlsym didn't find '%s': %s.\n",I_FUNCTION_LIST,dlerror()) );
+ return NULL;
+ }
+
+ if ( (dso_handle=(DSO_handle*)malloc(sizeof(DSO_handle))) == NULL) return NULL;
+
+ dso_handle->handle=d_handle; /* needed to close again */
+ dso_handle->function_list=function_list;
+ if ( (dso_handle->filename=(char*)malloc(strlen(file))) == NULL) { free(dso_handle); return NULL; }
+ strcpy(dso_handle->filename,file);
+
+ mm_log( (1,"DSO_open <- 0x%X\n",dso_handle) );
+ return (void*)dso_handle;
+}
+
+undef_int
+DSO_close(void *ptr) {
+ DSO_handle *handle;
+ mm_log((1,"DSO_close(ptr 0x%X)\n",ptr));
+ handle=(DSO_handle*) ptr;
+ return !dlclose(handle->handle);
+}
+
+#endif
+
--- /dev/null
+#ifndef _DYNALOAD_H_
+#define _DYNALOAD_H_
+
+#include "log.h"
+
+#if defined(OS_hpux)
+#include <dl.h>
+typedef shl_t minthandle_t;
+#elif defined(WIN32)
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+typedef HMODULE minthandle_t;
+#undef WIN32_LEAN_AND_MEAN
+#else
+#include <dlfcn.h>
+typedef void *minthandle_t;
+#endif
+
+#include "EXTERN.h"
+#include "perl.h"
+#include "ppport.h"
+
+#include "ext.h"
+
+typedef struct {
+ minthandle_t handle;
+ char *filename;
+ func_ptr *function_list;
+} DSO_handle;
+
+typedef struct {
+ HV* hv;
+ char *key;
+ void *store;
+} UTIL_args;
+
+int getobj(void *hv_t,char *key,char *type,void **store);
+int getint(void *hv_t,char *key,int *store);
+int getdouble(void *hv_t,char *key,double *store);
+int getvoid(void *hv_t,char *key,void **store);
+
+
+void *DSO_open(char* file,char** evalstring);
+int DSO_close(void *);
+void DSO_call(DSO_handle *handle,int func_index,HV* hv);
+
+#ifdef __EMX__ /* OS/2 */
+# ifndef RTLD_LAZY
+# define RTLD_LAZY 0
+# endif /* RTLD_LAZY */
+int dlclose(minthandle_t);
+#endif /* __EMX__ */
+
+#ifdef DLSYMUN
+
+#define I_EVALSTR "_evalstr"
+#define I_SYMBOL_TABLE "_symbol_table"
+#define I_UTIL_TABLE "_util_table"
+#define I_FUNCTION_LIST "_function_list"
+#define I_INSTALL_TABLES "_install_tables"
+
+#else
+
+#define I_EVALSTR "evalstr"
+#define I_SYMBOL_TABLE "symbol_table"
+#define I_UTIL_TABLE "util_table"
+#define I_FUNCTION_LIST "function_list"
+#define I_INSTALL_TABLES "install_tables"
+
+#endif
+
+#endif /* _DYNALOAD_H_ */
+
--- /dev/null
+use Config;
+use ExtUtils::MakeMaker;
+$Verbose = 1;
+
+$lddl=$Config{"lddlflags"};
+
+@plugins= qw(dyntest dt2 mandelbrot flines);
+
+$libstr=join(' ',map { $_.'.$(SO)' } @plugins);
+
+#print $libstr,"\n";
+#print $objstr,"\n";
+#print MY::top_targets();
+
+WriteMakefile(
+ NAME => 'Imager::plugins',
+ SKIP => [qw(all dynamic static )],
+ clean => {'FILES' => $libstr},
+);
+
+
+
+
+sub lddl_magic {
+ my $t;
+ $t=$lddl;
+ $t=~s/-bI:\$\(PERL_INC\)\/perl.exp//;
+ $t=~s/\$\(BASEEXT\)/$_[0]/;
+ return $t;
+}
+
+
+
+
+sub MY::top_targets {
+ use Config;
+if ($^O eq 'aix') {
+ '
+all :: dynamic
+
+dynamic :: '.$libstr.(join("\n",map { qq{
+
+$_.\$(SO): $_\$(OBJ_EXT)
+ LD_RUN_PATH="\$(LD_RUN_PATH)" \$(LD) -o \$\@ }.lddl_magic($_).qq{ \$(OTHERLDFLAGS) $_\$(OBJ_EXT)
+
+} } @plugins)).'
+
+
+pure_all ::
+ \$(NOOP)
+
+';
+
+}
+elsif ($^O =~ /win32/i && $Config{cc} =~ /cl/) {
+ my @libpth = grep /\S/, split /("[^"]*"|\S+)/,$Config{libpth};
+
+ '
+all :: dynamic
+
+dynamic :: '.$libstr.(join("\n",map { qq{
+
+$_.\$(SO): $_\$(OBJ_EXT)
+ \$(LD) /OUT:\$\@ }.lddl_magic($_).qq{ \$(OTHERLDFLAGS) $_\$(OBJ_EXT) $Config{libs} }.join(' ', map "/libpath:$_", @libpth).qq{
+
+} } @plugins)).'
+
+
+pure_all ::
+ \$(NOOP)
+
+';
+
+} else {
+ '
+all :: dynamic
+
+dynamic :: '.$libstr.(join("\n",map { qq{
+
+$_.\$(SO): $_\$(OBJ_EXT)
+ LD_RUN_PATH="\$(LD_RUN_PATH)" \$(LD) -o \$\@ \$(LDDLFLAGS) \$(OTHERLDFLAGS) $_\$(OBJ_EXT)
+
+} } @plugins)).'
+
+
+pure_all ::
+ \$(NOOP)
+
+';
+
+}
+}
--- /dev/null
+linux - solaris : gcc -o dyntest.so -fPIC -G dyntest.c
+AIX: LD_RUN_PATH="" ld -o dyntest.a -bhalt:4 -bM:SRE -bE:dyntest.exp -b noentry -lc -L/usr/local/lib dyntest.o
--- /dev/null
+#include "pluginst.h"
+#include <stdio.h>
+
+char evalstr[]="Plugin for creating html tables from images";
+
+/* input parameters
+ fname - file to add the html to.
+
+*/
+
+
+
+void
+html_art(void *INP) {
+ i_img *im;
+ i_color rcolor;
+ int i,x,y;
+ int info[4];
+ FILE *fp;
+ char *fname;
+
+ if ( !getSTR("fname",&fname) ) { fprintf(stderr,"Error: filename is missing\n"); return; }
+ if ( !getOBJ("image","Imager::ImgRaw",&im) ) { fprintf(stderr,"Error: image is missing\n"); return; }
+
+ printf("parameters: (im 0x%x,fname %s)\n",im,fname);
+
+ printf("image info:\n size (%d,%d)\n channels (%d)\n channel mask (%d)\n bytes (%d)\n",im->xsize,im->ysize,im->channels,im->ch_mask,im->bytes);
+
+ fp=fopen(fname,"ab+");
+ fprintf(fp,"<TABLE BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"0\">");
+ for(y=0;y<im->ysize;y+=2) {
+ fprintf(fp,"<TR>");
+ for(x=0;x<im->xsize;x++) {
+ i_gpix(im,x,y,&rcolor);
+ fprintf(fp,"<TD BGCOLOR=\"#%02X%02X%02X\"> </TD>",rcolor.rgb.r,rcolor.rgb.g,rcolor.rgb.b);
+ }
+ fprintf(fp,"</TR>");
+ }
+ fprintf(fp,"</TABLE>");
+ fclose(fp);
+}
+
+func_ptr function_list[]={
+ {
+ "html_art",
+ html_art,
+ "callseq => ['image','fname'], \
+ callsub => sub { my %hsh=@_; DSO_call($DSO_handle,0,\\%hsh); } \
+ "
+ },
+ {NULL,NULL,NULL}};
+
+
+/* Remember to double backslash backslashes within Double quotes in C */
--- /dev/null
+#include "pluginst.h"
+
+
+char evalstr[]="Description string of plugin dyntest - kind of like";
+
+void null_plug(void *ptr) { }
+
+/* Example dynamic filter - level stretch (linear) - note it only stretches and doesn't compress */
+
+/* input parameters
+ a: the current black
+ b: the current white
+
+ 0 <= a < b <= 255;
+
+ output pixel value calculated by: o=((i-a)*255)/(b-a);
+
+ note that since we do not have the needed functions to manipulate the data structures *** YET ***
+*/
+
+
+unsigned char
+static
+saturate(int in) {
+ if (in>255) { return 255; }
+ else if (in>0) return in;
+ return 0;
+}
+
+void lin_stretch(void *INP) {
+
+ int a, b;
+ i_img *im;
+ i_color rcolor;
+ int i,bytes,x,y;
+ int info[4];
+
+ if ( !getOBJ("image","Imager::ImgRaw",&im) ) { fprintf(stderr,"Error: image is missing\n"); }
+ if ( !getINT("a",&a) ) { fprintf(stderr,"Error: a is missing\n"); }
+ if ( !getINT("b",&b) ) { fprintf(stderr,"Error: b is missing\n"); }
+
+ /* fprintf(stderr,"parameters: (im 0x%x,a %d,b %d)\n",im,a,b);*/
+ bytes=im->bytes;
+
+ i_img_info(im,info);
+ for(i=0;i<4;i++) { printf("%d: %d\n",i,info[i]); }
+ printf("image info:\n size (%d,%d)\n channels (%d)\n channel mask (%d)\n bytes (%d)\n",im->xsize,im->ysize,im->channels,im->ch_mask,im->bytes);
+
+ for(y=0;y<im->ysize;y++) for(x=0;x<im->xsize;x++) {
+ i_gpix(im,x,y,&rcolor);
+ for(i=0;i<im->channels;i++) rcolor.channel[i]=saturate((255*(rcolor.channel[i]-a))/(b-a));
+ i_ppix(im,x,y,&rcolor);
+ }
+
+}
+
+func_ptr function_list[]={
+ {
+ "null_plug",
+ null_plug,
+ "callsub => sub { 1; }"
+ },{
+ "lin_stretch",
+ lin_stretch,
+ "callseq => ['image','a','b'], \
+ callsub => sub { my %hsh=@_; DSO_call($DSO_handle,1,\\%hsh); } \
+ "
+ },
+ {NULL,NULL,NULL}};
+
+
+/* Remember to double backslash backslashes within Double quotes in C */
+
--- /dev/null
+#include "pluginst.h"
+
+
+char evalstr[]="Fancy lines";
+
+/* input parameters
+ image is the image object.
+*/
+
+
+
+unsigned char
+static
+saturate(int in) {
+ if (in>255) { return 255; }
+ else if (in>0) return in;
+ return 0;
+}
+
+
+
+void
+flines(void *INP) {
+ i_img *im;
+ i_color vl;
+ int i,bytes,x,y;
+ int idx;
+
+ if ( !getOBJ("image","Imager::ImgRaw",&im) ) {
+ fprintf(stderr,"Error: image is missing\n");
+ return;
+ }
+
+ fprintf(stderr, "flines: parameters: (im 0x%x)\n",im);
+ fprintf(stderr, "flines: image info:\n size (%d,%d)\n channels (%d)\n channel mask (%d)\n bytes (%d)\n",im->xsize,im->ysize,im->channels,im->ch_mask,im->bytes);
+
+ for(y = 0; y < im->ysize; y ++) {
+ for(x = 0; x < im->xsize; x ++ ) {
+ i_gpix(im,x,y,&vl);
+ if (!(y%2)) {
+ float yf = y/(float)im->ysize;
+ float mf = 1.2-0.8*yf;
+ vl.rgb.r = saturate(vl.rgb.r*mf);
+ vl.rgb.g = saturate(vl.rgb.g*mf);
+ vl.rgb.b = saturate(vl.rgb.b*mf);
+ } else {
+ float yf = (im->ysize-y)/(float)im->ysize;
+ float mf = 1.2-0.8*yf;
+ vl.rgb.r = saturate(vl.rgb.r*mf);
+ vl.rgb.g = saturate(vl.rgb.g*mf);
+ vl.rgb.b = saturate(vl.rgb.b*mf);
+ }
+ i_ppix(im,x,y,&vl);
+ }
+ }
+}
+
+
+
+func_ptr function_list[]={
+ {
+ "flines",
+ flines,
+ "callseq => ['image'], \
+ callsub => sub { my %hsh=@_; DSO_call($DSO_handle,0,\\%hsh); } \
+ "
+ },
+ {NULL,NULL,NULL}};
+
+
+/* Remember to double backslash backslashes within Double quotes in C */
+
--- /dev/null
+#include "pluginst.h"
+
+
+char evalstr[]="Mandlebrot renderer";
+
+/* Example Mandlebrot generator */
+
+/* input parameters
+ image is the image object.
+*/
+
+
+#define MXITER 256
+
+static
+int
+mandel(float x, float y) {
+ float xn, yn;
+ float xo, yo;
+ float dist;
+ int iter = 1;
+ /* Z(n+1) = Z(n) ^2 + c */
+
+ /* printf("(%.2f, %.2f) -> \n", x,y); */
+
+ xo = x;
+ yo = y;
+
+ while( xo*xo+yo*yo <= 10 && iter < MXITER) {
+ xn = xo*xo-yo*yo + x;
+ yn = 2*xo*yo + y;
+ xo=xn;
+ yo=yn;
+ iter++;
+ }
+ return (iter == MXITER)?0:iter;
+}
+
+
+
+void mandlebrot(void *INP) {
+
+ i_img *im;
+ i_color vl;
+ int i,bytes,x,y;
+ int idx;
+
+ float xs, ys;
+ float div;
+
+ i_color icl[256];
+ srand(12235);
+ for(i=1;i<256; i++) {
+ icl[i].rgb.r = 100+(int) (155.0*rand()/(RAND_MAX+1.0));
+ icl[i].rgb.g = 100+(int) (155.0*rand()/(RAND_MAX+1.0));
+ icl[i].rgb.g = 100+(int) (155.0*rand()/(RAND_MAX+1.0));
+ }
+
+ icl[0].rgb.r = 0;
+ icl[0].rgb.g = 0;
+ icl[0].rgb.g = 0;
+
+
+
+ if ( !getOBJ("image","Imager::ImgRaw",&im) ) { fprintf(stderr,"Error: image is missing\n"); }
+
+ fprintf(stderr,"mandlebrot: parameters: (im 0x%x)\n",im);
+ bytes=im->bytes;
+
+ fprintf(stderr, "mandlebrot: image info:\n size (%d,%d)\n channels (%d)\n channel mask (%d)\n bytes (%d)\n",im->xsize,im->ysize,im->channels,im->ch_mask,im->bytes);
+ div = 2.5;
+
+ xs = 0.8*div;
+ ys = 0.5*div;
+
+ div /= im->xsize;
+
+
+ fprintf(stderr, "Divider: %f \n", div);
+ for(y = 0; y < im->ysize; y ++) {
+ for(x = 0; x < im->xsize; x ++ ) {
+ idx = mandel(x*div-xs , y*div-ys);
+ idx = (idx>255)?255:idx;
+ i_ppix(im,x,y,&icl[idx]);
+ }
+ }
+}
+
+
+
+func_ptr function_list[]={
+ {
+ "mandlebrot",
+ mandlebrot,
+ "callseq => ['image'], \
+ callsub => sub { my %hsh=@_; DSO_call($DSO_handle,0,\\%hsh); } \
+ "
+ },
+ {NULL,NULL,NULL}};
+
+
+/* Remember to double backslash backslashes within Double quotes in C */
+
--- /dev/null
+#include "../plug.h"
+
+#ifdef _MSC_VER
+#define WIN32_EXPORT __declspec(dllexport)
+#else
+/* this may need to change for other Win32 compilers */
+#define WIN32_EXPORT
+#endif
+
+symbol_table_t *symbol_table;
+UTIL_table_t *util_table;
+
+void WIN32_EXPORT
+install_tables(symbol_table_t *s,UTIL_table_t *u) {
+ symbol_table=s;
+ util_table=u;
+}
--- /dev/null
+
+
+use Config;
+
+@precommands=('uname -a','perl -V');
+@manpages=('dlopen','shl_load','dlsym','dlclose');
+@postcommands=map { "man $_ | col -bf | cat -s" } @manpages;
+
+print <<EOF;
+
+ This script will gather information about your system in order to
+ help debugging the problem compiling or testing Imager on your
+ system.
+
+ Make sure that you are in the same directory as errep.perl is when
+ running the script. Also make sure that the environment variables
+ are the same as when running perl Makefile.PL
+
+ It issues: uname -a, perl -V and gets the %Config hash from the
+ build of the perl binary. Then it tries to build and test the
+ module (but not install it). It dumps out the test logs if there
+ are any. It ends by dumping out some manpages.
+
+ All the results are saved to the file 'report.txt'
+
+ Continue [Y/n]?
+
+EOF
+
+$a=<STDIN>;
+chomp($a);
+die "Aborted!\n" if $a =~ /^n/i;
+
+print "Generating info about system\n";
+
+open OSTD, '>&STDOUT' or die $!;
+open STDOUT, '>report.txt' or die $!;
+open STDERR, '>&STDOUT' or die $!;
+
+rcomm('rm testout/*');
+rcomm(@precommands);
+rcomm("$^X Makefile.PL") || rcomm("make") || rcomm("make test");
+head("Logfiles from run");
+dumplogs();
+
+pconf();
+rcomm(@postcommands);
+
+sub pconf {
+ head("perl Config parameters");
+ for(sort keys %Config) { print $_,"=>",(defined $Config{$_} ? $Config{$_} : '(undef)'),"\n"; }
+ print "\n";
+}
+
+
+sub rcomm {
+ my @commands=@_;
+ my ($comm,$R);
+ for $comm(@commands) {
+ print "Executing '$comm'\n";
+ print OSTD "Executing '$comm'\n";
+ $R=system($comm);
+ print "warning - rc=$R\n" if $R;
+ print "=====================\n\n";
+ }
+ return $R;
+}
+
+sub head {
+ my $h=shift;
+ print "=========================\n";
+ print $h;
+ print "\n=========================\n";
+}
+
+sub dumplogs {
+ opendir(DH,"testout") || die "Cannot open dir testout: $!\n";
+ my @fl=sort grep(/\.log$/,readdir(DH));
+
+ for my $f (@fl) {
+ print "::::::::::::::\ntestout/$f\n::::::::::::::\n";
+ open(FH,"testout/$f") || warn "Cannot open testout/$f: $!\n";
+ print while(<FH>);
+ close(FH);
+ }
+}
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+#include "image.h"
+
+/* structures for passing data between Imager-plugin and the Imager-module */
+
+typedef struct {
+ char *name;
+ void (*iptr)(void* ptr);
+ char *pcode;
+} func_ptr;
+
+
+typedef struct {
+ int (*getstr)(void *hv_t,char* key,char **store);
+ int (*getint)(void *hv_t,char *key,int *store);
+ int (*getdouble)(void *hv_t,char* key,double *store);
+ int (*getvoid)(void *hv_t,char* key,void **store);
+ int (*getobj)(void *hv_t,char* key,char* type,void **store);
+} UTIL_table_t;
--- /dev/null
+#include "feat.h"
+
+undef_int
+i_has_format(char *frmt) {
+ int rc,i;
+ rc=0;
+ i=0;
+ while(i_format_list[i] != NULL) if ( !strcmp(frmt,i_format_list[i++]) ) rc=1;
+ return(rc);
+}
--- /dev/null
+#include "image.h"
+
+static char *i_format_list[]={
+#ifdef HAVE_LIBJPEG
+ "jpeg",
+#endif
+#ifdef HAVE_LIBTIFF
+ "tiff",
+#endif
+#ifdef HAVE_LIBPNG
+ "png",
+#endif
+#ifdef HAVE_LIBGIF
+ "gif",
+#endif
+#ifdef HAVE_LIBT1
+ "t1",
+#endif
+#ifdef HAVE_LIBTT
+ "tt",
+#endif
+ "raw",
+ "pnm",
+ NULL};
+
--- /dev/null
+#!/usr/bin/perl
+
+use Imager;
+print "Filter Arguments\n";
+for $filt (keys %Imager::filters) {
+ @callseq=@{$Imager::filters{$filt}{'callseq'}};
+ %defaults=%{$Imager::filters{$filt}{'defaults'}};
+ shift(@callseq);
+ @b=map { exists($defaults{$_}) ? $_.'('.$defaults{$_}.')' : $_ } @callseq;
+ $str=join(" ",@b);
+ printf("%-15s %s\n",$filt,$str );
+}
--- /dev/null
+#include "image.h"
+#include <stdlib.h>
+#include <math.h>
+
+
+/*
+=head1 NAME
+
+filters.c - implements filters that operate on images
+
+=head1 SYNOPSIS
+
+
+ i_contrast(im, 0.8);
+ i_hardinvert(im);
+ // and more
+
+=head1 DESCRIPTION
+
+filters.c implements basic filters for Imager. These filters
+should be accessible from the filter interface as defined in
+the pod for Imager.
+
+=head1 FUNCTION REFERENCE
+
+Some of these functions are internal.
+
+=over 4
+
+=cut
+*/
+
+
+
+
+
+
+
+/*
+=item i_contrast(im, intensity)
+
+Scales the pixel values by the amount specified.
+
+ im - image object
+ intensity - scalefactor
+
+=cut
+*/
+
+void
+i_contrast(i_img *im, float intensity) {
+ int x, y;
+ unsigned char ch;
+ unsigned int new_color;
+ i_color rcolor;
+
+ mm_log((1,"i_contrast(im %p, intensity %f)\n", im, intensity));
+
+ if(intensity < 0) return;
+
+ for(y = 0; y < im->ysize; y++) for(x = 0; x < im->xsize; x++) {
+ i_gpix(im, x, y, &rcolor);
+
+ for(ch = 0; ch < im->channels; ch++) {
+ new_color = (unsigned int) rcolor.channel[ch];
+ new_color *= intensity;
+
+ if(new_color > 255) {
+ new_color = 255;
+ }
+ rcolor.channel[ch] = (unsigned char) new_color;
+ }
+ i_ppix(im, x, y, &rcolor);
+ }
+}
+
+
+/*
+=item i_hardinvert(im)
+
+Inverts the pixel values of the input image.
+
+ im - image object
+
+=cut
+*/
+
+void
+i_hardinvert(i_img *im) {
+ int x, y;
+ unsigned char ch;
+
+ i_color rcolor;
+
+ mm_log((1,"i_hardinvert(im %p)\n", im));
+
+ for(y = 0; y < im->ysize; y++) {
+ for(x = 0; x < im->xsize; x++) {
+ i_gpix(im, x, y, &rcolor);
+
+ for(ch = 0; ch < im->channels; ch++) {
+ rcolor.channel[ch] = 255 - rcolor.channel[ch];
+ }
+
+ i_ppix(im, x, y, &rcolor);
+ }
+ }
+}
+
+
+
+/*
+=item i_noise(im, amount, type)
+
+Inverts the pixel values by the amount specified.
+
+ im - image object
+ amount - deviation in pixel values
+ type - noise individual for each channel if true
+
+=cut
+*/
+
+#ifdef _MSC_VER
+/* random() is non-ASCII, even if it is better than rand() */
+#define random() rand()
+#endif
+
+void
+i_noise(i_img *im, float amount, unsigned char type) {
+ int x, y;
+ unsigned char ch;
+ int new_color;
+ float damount = amount * 2;
+ i_color rcolor;
+ int color_inc = 0;
+
+ mm_log((1,"i_noise(im %p, intensity %.2f\n", im, amount));
+
+ if(amount < 0) return;
+
+ for(y = 0; y < im->ysize; y++) for(x = 0; x < im->xsize; x++) {
+ i_gpix(im, x, y, &rcolor);
+
+ if(type == 0) {
+ color_inc = (amount - (damount * ((float)random() / RAND_MAX)));
+ }
+
+ for(ch = 0; ch < im->channels; ch++) {
+ new_color = (int) rcolor.channel[ch];
+
+ if(type != 0) {
+ new_color += (amount - (damount * ((float)random() / RAND_MAX)));
+ } else {
+ new_color += color_inc;
+ }
+
+ if(new_color < 0) {
+ new_color = 0;
+ }
+ if(new_color > 255) {
+ new_color = 255;
+ }
+
+ rcolor.channel[ch] = (unsigned char) new_color;
+ }
+
+ i_ppix(im, x, y, &rcolor);
+ }
+}
+
+
+/*
+=item i_noise(im, amount, type)
+
+Inverts the pixel values by the amount specified.
+
+ im - image object
+ amount - deviation in pixel values
+ type - noise individual for each channel if true
+
+=cut
+*/
+
+
+/*
+=item i_applyimage(im, add_im, mode)
+
+Apply's an image to another image
+
+ im - target image
+ add_im - image that is applied to target
+ mode - what method is used in applying:
+
+ 0 Normal
+ 1 Multiply
+ 2 Screen
+ 3 Overlay
+ 4 Soft Light
+ 5 Hard Light
+ 6 Color dodge
+ 7 Color Burn
+ 8 Darker
+ 9 Lighter
+ 10 Add
+ 11 Subtract
+ 12 Difference
+ 13 Exclusion
+
+=cut
+*/
+
+void i_applyimage(i_img *im, i_img *add_im, unsigned char mode) {
+ int x, y;
+ int mx, my;
+
+ mm_log((1, "i_applyimage(im %p, add_im %p, mode %d", im, add_im, mode));
+
+ mx = (add_im->xsize <= im->xsize) ? add_im->xsize : add_im->xsize;
+ my = (add_im->ysize <= im->ysize) ? add_im->ysize : add_im->ysize;
+
+ for(x = 0; x < mx; x++) {
+ for(y = 0; y < my; y++) {
+ }
+ }
+}
+
+
+/*
+=item i_bumpmap(im, bump, channel, light_x, light_y, st)
+
+Makes a bumpmap on image im using the bump image as the elevation map.
+
+ im - target image
+ bump - image that contains the elevation info
+ channel - to take the elevation information from
+ light_x - x coordinate of light source
+ light_y - y coordinate of light source
+ st - length of shadow
+
+=cut
+*/
+
+void
+i_bumpmap(i_img *im, i_img *bump, int channel, int light_x, int light_y, int st) {
+ int x, y, ch;
+ int mx, my;
+ i_color x1_color, y1_color, x2_color, y2_color, dst_color;
+ double nX, nY;
+ double tX, tY, tZ;
+ double aX, aY, aL;
+ double fZ;
+ unsigned char px1, px2, py1, py2;
+
+ i_img new_im;
+
+ mm_log((1, "i_bumpmap(im %p, add_im %p, channel %d, light_x %d, light_y %d, st %d)\n",
+ im, bump, channel, light_x, light_y, st));
+
+
+ if(channel >= bump->channels) {
+ mm_log((1, "i_bumpmap: channel = %d while bump image only has %d channels\n", channel, bump->channels));
+ return;
+ }
+
+ mx = (bump->xsize <= im->xsize) ? bump->xsize : im->xsize;
+ my = (bump->ysize <= im->ysize) ? bump->ysize : im->ysize;
+
+ i_img_empty_ch(&new_im, im->xsize, im->ysize, im->channels);
+
+ aX = (light_x > (mx >> 1)) ? light_x : mx - light_x;
+ aY = (light_y > (my >> 1)) ? light_y : my - light_y;
+
+ aL = sqrt((aX * aX) + (aY * aY));
+
+ for(y = 1; y < my - 1; y++) {
+ for(x = 1; x < mx - 1; x++) {
+ i_gpix(bump, x + st, y, &x1_color);
+ i_gpix(bump, x, y + st, &y1_color);
+ i_gpix(bump, x - st, y, &x2_color);
+ i_gpix(bump, x, y - st, &y2_color);
+
+ i_gpix(im, x, y, &dst_color);
+
+ px1 = x1_color.channel[channel];
+ py1 = y1_color.channel[channel];
+ px2 = x2_color.channel[channel];
+ py2 = y2_color.channel[channel];
+
+ nX = px1 - px2;
+ nY = py1 - py2;
+
+ nX += 128;
+ nY += 128;
+
+ fZ = (sqrt((nX * nX) + (nY * nY)) / aL);
+
+ tX = abs(x - light_x) / aL;
+ tY = abs(y - light_y) / aL;
+
+ tZ = 1 - (sqrt((tX * tX) + (tY * tY)) * fZ);
+
+ if(tZ < 0) tZ = 0;
+ if(tZ > 2) tZ = 2;
+
+ for(ch = 0; ch < im->channels; ch++)
+ dst_color.channel[ch] = (unsigned char) (float)(dst_color.channel[ch] * tZ);
+
+ i_ppix(&new_im, x, y, &dst_color);
+ }
+ }
+
+ i_copyto(im, &new_im, 0, 0, (int)im->xsize, (int)im->ysize, 0, 0);
+
+ i_img_exorcise(&new_im);
+}
+
+
+
+/*
+=item i_postlevels(im, levels)
+
+Quantizes Images to fewer levels.
+
+ im - target image
+ levels - number of levels
+
+=cut
+*/
+
+void
+i_postlevels(i_img *im, int levels) {
+ int x, y, ch;
+ float pv;
+ int rv;
+ float av;
+
+ i_color rcolor;
+
+ rv = (int) ((float)(256 / levels));
+ av = (float)levels;
+
+ for(y = 0; y < im->ysize; y++) for(x = 0; x < im->xsize; x++) {
+ i_gpix(im, x, y, &rcolor);
+
+ for(ch = 0; ch < im->channels; ch++) {
+ pv = (((float)rcolor.channel[ch] / 255)) * av;
+ pv = (int) ((int)pv * rv);
+
+ if(pv < 0) pv = 0;
+ else if(pv > 255) pv = 255;
+
+ rcolor.channel[ch] = (unsigned char) pv;
+ }
+ i_ppix(im, x, y, &rcolor);
+ }
+}
+
+
+/*
+=item i_mosaic(im, size)
+
+Makes an image looks like a mosaic with tilesize of size
+
+ im - target image
+ size - size of tiles
+
+=cut
+*/
+
+void
+i_mosaic(i_img *im, int size) {
+ int x, y, ch;
+ int lx, ly, z;
+ long sqrsize;
+
+ i_color rcolor;
+ long col[256];
+
+ sqrsize = size * size;
+
+ for(y = 0; y < im->ysize; y += size) for(x = 0; x < im->xsize; x += size) {
+ for(z = 0; z < 256; z++) col[z] = 0;
+
+ for(lx = 0; lx < size; lx++) {
+ for(ly = 0; ly < size; ly++) {
+ i_gpix(im, (x + lx), (y + ly), &rcolor);
+
+ for(ch = 0; ch < im->channels; ch++) {
+ col[ch] += rcolor.channel[ch];
+ }
+ }
+ }
+
+ for(ch = 0; ch < im->channels; ch++)
+ rcolor.channel[ch] = (int) ((float)col[ch] / sqrsize);
+
+
+ for(lx = 0; lx < size; lx++)
+ for(ly = 0; ly < size; ly++)
+ i_ppix(im, (x + lx), (y + ly), &rcolor);
+
+ }
+}
+
+/*
+=item saturate(in)
+
+Clamps the input value between 0 and 255. (internal)
+
+ in - input integer
+
+=cut
+*/
+
+static
+unsigned char
+saturate(int in) {
+ if (in>255) { return 255; }
+ else if (in>0) return in;
+ return 0;
+}
+
+
+/*
+=item i_watermark(im, wmark, tx, ty, pixdiff)
+
+Applies a watermark to the target image
+
+ im - target image
+ wmark - watermark image
+ tx - x coordinate of where watermark should be applied
+ ty - y coordinate of where watermark should be applied
+ pixdiff - the magnitude of the watermark, controls how visible it is
+
+=cut
+*/
+
+void
+i_watermark(i_img *im, i_img *wmark, int tx, int ty, int pixdiff) {
+ int vx, vy, ch;
+ i_color val, wval;
+
+ for(vx=0;vx<128;vx++) for(vy=0;vy<110;vy++) {
+
+ i_gpix(im, tx+vx, ty+vy,&val );
+ i_gpix(wmark, vx, vy, &wval);
+
+ for(ch=0;ch<im->channels;ch++)
+ val.channel[ch] = saturate( val.channel[ch] + (pixdiff* (wval.channel[0]-128) )/128 );
+
+ i_ppix(im,tx+vx,ty+vy,&val);
+ }
+}
+
+
+/*
+=item i_autolevels(im, lsat, usat, skew)
+
+Scales and translates each color such that it fills the range completely.
+Skew is not implemented yet - purpose is to control the color skew that can
+occur when changing the contrast.
+
+ im - target image
+ lsat - fraction of pixels that will be truncated at the lower end of the spectrum
+ usat - fraction of pixels that will be truncated at the higher end of the spectrum
+ skew - not used yet
+
+=cut
+*/
+
+void
+i_autolevels(i_img *im, float lsat, float usat, float skew) {
+ i_color val;
+ int i, x, y, rhist[256], ghist[256], bhist[256];
+ int rsum, rmin, rmax;
+ int gsum, gmin, gmax;
+ int bsum, bmin, bmax;
+ int rcl, rcu, gcl, gcu, bcl, bcu;
+
+ mm_log((1,"i_autolevels(im %p, lsat %f,usat %f,skew %f)\n", im, lsat,usat,skew));
+
+ rsum=gsum=bsum=0;
+ for(i=0;i<256;i++) rhist[i]=ghist[i]=bhist[i] = 0;
+ /* create histogram for each channel */
+ for(y = 0; y < im->ysize; y++) for(x = 0; x < im->xsize; x++) {
+ i_gpix(im, x, y, &val);
+ rhist[val.channel[0]]++;
+ ghist[val.channel[1]]++;
+ bhist[val.channel[2]]++;
+ }
+
+ for(i=0;i<256;i++) {
+ rsum+=rhist[i];
+ gsum+=ghist[i];
+ bsum+=bhist[i];
+ }
+
+ rmin = gmin = bmin = 0;
+ rmax = gmax = bmax = 255;
+
+ rcu = rcl = gcu = gcl = bcu = bcl = 0;
+
+ for(i=0; i<256; i++) {
+ rcl += rhist[i]; if ( (rcl<rsum*lsat) ) rmin=i;
+ rcu += rhist[255-i]; if ( (rcu<rsum*usat) ) rmax=255-i;
+
+ gcl += ghist[i]; if ( (gcl<gsum*lsat) ) gmin=i;
+ gcu += ghist[255-i]; if ( (gcu<gsum*usat) ) gmax=255-i;
+
+ bcl += bhist[i]; if ( (bcl<bsum*lsat) ) bmin=i;
+ bcu += bhist[255-i]; if ( (bcu<bsum*usat) ) bmax=255-i;
+ }
+
+ for(y = 0; y < im->ysize; y++) for(x = 0; x < im->xsize; x++) {
+ i_gpix(im, x, y, &val);
+ val.channel[0]=saturate((val.channel[0]-rmin)*255/(rmax-rmin));
+ val.channel[1]=saturate((val.channel[1]-gmin)*255/(gmax-gmin));
+ val.channel[2]=saturate((val.channel[2]-bmin)*255/(bmax-bmin));
+ i_ppix(im, x, y, &val);
+ }
+}
+
+/*
+=item Noise(x,y)
+
+Pseudo noise utility function used to generate perlin noise. (internal)
+
+ x - x coordinate
+ y - y coordinate
+
+=cut
+*/
+
+static
+float
+Noise(int x, int y) {
+ int n = x + y * 57;
+ n = (n<<13) ^ n;
+ return ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0);
+}
+
+/*
+=item SmoothedNoise1(x,y)
+
+Pseudo noise utility function used to generate perlin noise. (internal)
+
+ x - x coordinate
+ y - y coordinate
+
+=cut
+*/
+
+static
+float
+SmoothedNoise1(float x, float y) {
+ float corners = ( Noise(x-1, y-1)+Noise(x+1, y-1)+Noise(x-1, y+1)+Noise(x+1, y+1) ) / 16;
+ float sides = ( Noise(x-1, y) +Noise(x+1, y) +Noise(x, y-1) +Noise(x, y+1) ) / 8;
+ float center = Noise(x, y) / 4;
+ return corners + sides + center;
+}
+
+
+/*
+=item G_Interpolate(a, b, x)
+
+Utility function used to generate perlin noise. (internal)
+
+=cut
+*/
+
+static
+float C_Interpolate(float a, float b, float x) {
+ /* float ft = x * 3.1415927; */
+ float ft = x * PI;
+ float f = (1 - cos(ft)) * .5;
+ return a*(1-f) + b*f;
+}
+
+
+/*
+=item InterpolatedNoise(x, y)
+
+Utility function used to generate perlin noise. (internal)
+
+=cut
+*/
+
+static
+float
+InterpolatedNoise(float x, float y) {
+
+ int integer_X = x;
+ float fractional_X = x - integer_X;
+ int integer_Y = y;
+ float fractional_Y = y - integer_Y;
+
+ float v1 = SmoothedNoise1(integer_X, integer_Y);
+ float v2 = SmoothedNoise1(integer_X + 1, integer_Y);
+ float v3 = SmoothedNoise1(integer_X, integer_Y + 1);
+ float v4 = SmoothedNoise1(integer_X + 1, integer_Y + 1);
+
+ float i1 = C_Interpolate(v1 , v2 , fractional_X);
+ float i2 = C_Interpolate(v3 , v4 , fractional_X);
+
+ return C_Interpolate(i1 , i2 , fractional_Y);
+}
+
+
+
+/*
+=item PerlinNoise_2D(x, y)
+
+Utility function used to generate perlin noise. (internal)
+
+=cut
+*/
+
+static
+float
+PerlinNoise_2D(float x, float y) {
+ int i,frequency;
+ float amplitude;
+ float total = 0;
+ int Number_Of_Octaves=6;
+ int n = Number_Of_Octaves - 1;
+
+ for(i=0;i<n;i++) {
+ frequency = 2*i;
+ amplitude = PI;
+ total = total + InterpolatedNoise(x * frequency, y * frequency) * amplitude;
+ }
+
+ return total;
+}
+
+
+/*
+=item i_radnoise(im, xo, yo, rscale, ascale)
+
+Perlin-like radial noise.
+
+ im - target image
+ xo - x coordinate of center
+ yo - y coordinate of center
+ rscale - radial scale
+ ascale - angular scale
+
+=cut
+*/
+
+void
+i_radnoise(i_img *im, int xo, int yo, float rscale, float ascale) {
+ int x, y, ch;
+ i_color val;
+ unsigned char v;
+ float xc, yc, r;
+ double a;
+
+ for(y = 0; y < im->ysize; y++) for(x = 0; x < im->xsize; x++) {
+ xc = (float)x-xo+0.5;
+ yc = (float)y-yo+0.5;
+ r = rscale*sqrt(xc*xc+yc*yc)+1.2;
+ a = (PI+atan2(yc,xc))*ascale;
+ v = saturate(128+100*(PerlinNoise_2D(a,r)));
+ /* v=saturate(120+12*PerlinNoise_2D(xo+(float)x/scale,yo+(float)y/scale)); Good soft marble */
+ for(ch=0; ch<im->channels; ch++) val.channel[ch]=v;
+ i_ppix(im, x, y, &val);
+ }
+}
+
+
+/*
+=item i_turbnoise(im, xo, yo, scale)
+
+Perlin-like 2d noise noise.
+
+ im - target image
+ xo - x coordinate translation
+ yo - y coordinate translation
+ scale - scale of noise
+
+=cut
+*/
+
+void
+i_turbnoise(i_img *im, float xo, float yo, float scale) {
+ int x,y,ch;
+ unsigned char v;
+ i_color val;
+
+ for(y = 0; y < im->ysize; y++) for(x = 0; x < im->xsize; x++) {
+ /* v=saturate(125*(1.0+PerlinNoise_2D(xo+(float)x/scale,yo+(float)y/scale))); */
+ v = saturate(120*(1.0+sin(xo+(float)x/scale+PerlinNoise_2D(xo+(float)x/scale,yo+(float)y/scale))));
+ for(ch=0; ch<im->channels; ch++) val.channel[ch] = v;
+ i_ppix(im, x, y, &val);
+ }
+}
+
+
+
+/*
+=item i_gradgen(im, num, xo, yo, ival, dmeasure)
+
+Gradient generating function.
+
+ im - target image
+ num - number of points given
+ xo - array of x coordinates
+ yo - array of y coordinates
+ ival - array of i_color objects
+ dmeasure - distance measure to be used.
+ 0 = Euclidean
+ 1 = Euclidean squared
+ 2 = Manhattan distance
+
+=cut
+*/
+
+
+void
+i_gradgen(i_img *im, int num, int *xo, int *yo, i_color *ival, int dmeasure) {
+
+ i_color val;
+ int p, x, y, ch;
+ int channels = im->channels;
+ int xsize = im->xsize;
+ int ysize = im->ysize;
+
+ float *fdist;
+
+ mm_log((1,"i_gradgen(im %p, num %d, xo %p, yo %p, ival %p, dmeasure %d)\n", im, num, xo, yo, ival, dmeasure));
+
+ for(p = 0; p<num; p++) {
+ mm_log((1,"i_gradgen: (%d, %d)\n", xo[p], yo[p]));
+ ICL_info(&ival[p]);
+ }
+
+ fdist = mymalloc( sizeof(float) * num );
+
+ for(y = 0; y<ysize; y++) for(x = 0; x<xsize; x++) {
+ float cs = 0;
+ float csd = 0;
+ for(p = 0; p<num; p++) {
+ int xd = x-xo[p];
+ int yd = y-yo[p];
+ switch (dmeasure) {
+ case 0: /* euclidean */
+ fdist[p] = sqrt(xd*xd + yd*yd); /* euclidean distance */
+ break;
+ case 1: /* euclidean squared */
+ fdist[p] = xd*xd + yd*yd; /* euclidean distance */
+ break;
+ case 2: /* euclidean squared */
+ fdist[p] = max(xd*xd, yd*yd); /* manhattan distance */
+ break;
+ default:
+ m_fatal(3,"i_gradgen: Unknown distance measure\n");
+ }
+ cs += fdist[p];
+ }
+
+ csd = 1/((num-1)*cs);
+
+ for(p = 0; p<num; p++) fdist[p] = (cs-fdist[p])*csd;
+
+ for(ch = 0; ch<channels; ch++) {
+ int tres = 0;
+ for(p = 0; p<num; p++) tres += ival[p].channel[ch] * fdist[p];
+ val.channel[ch] = saturate(tres);
+ }
+ i_ppix(im, x, y, &val);
+ }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+void
+i_nearest_color_foo(i_img *im, int num, int *xo, int *yo, i_color *ival, int dmeasure) {
+
+ i_color val;
+ int p, x, y, ch;
+ int channels = im->channels;
+ int xsize = im->xsize;
+ int ysize = im->ysize;
+
+ mm_log((1,"i_gradgen(im %p, num %d, xo %p, yo %p, ival %p, dmeasure %d)\n", im, num, xo, yo, ival, dmeasure));
+
+ for(p = 0; p<num; p++) {
+ mm_log((1,"i_gradgen: (%d, %d)\n", xo[p], yo[p]));
+ ICL_info(&ival[p]);
+ }
+
+ for(y = 0; y<ysize; y++) for(x = 0; x<xsize; x++) {
+ int midx = 0;
+ float mindist = 0;
+ float curdist = 0;
+
+ int xd = x-xo[0];
+ int yd = y-yo[0];
+
+ switch (dmeasure) {
+ case 0: /* euclidean */
+ mindist = sqrt(xd*xd + yd*yd); /* euclidean distance */
+ break;
+ case 1: /* euclidean squared */
+ mindist = xd*xd + yd*yd; /* euclidean distance */
+ break;
+ case 2: /* euclidean squared */
+ mindist = max(xd*xd, yd*yd); /* manhattan distance */
+ break;
+ default:
+ m_fatal(3,"i_nearest_color: Unknown distance measure\n");
+ }
+
+ for(p = 1; p<num; p++) {
+ xd = x-xo[p];
+ yd = y-yo[p];
+ switch (dmeasure) {
+ case 0: /* euclidean */
+ curdist = sqrt(xd*xd + yd*yd); /* euclidean distance */
+ break;
+ case 1: /* euclidean squared */
+ curdist = xd*xd + yd*yd; /* euclidean distance */
+ break;
+ case 2: /* euclidean squared */
+ curdist = max(xd*xd, yd*yd); /* manhattan distance */
+ break;
+ default:
+ m_fatal(3,"i_nearest_color: Unknown distance measure\n");
+ }
+ if (curdist < mindist) {
+ mindist = curdist;
+ midx = p;
+ }
+ }
+ i_ppix(im, x, y, &ival[midx]);
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+void
+i_nearest_color(i_img *im, int num, int *xo, int *yo, i_color *oval, int dmeasure) {
+ i_color *ival;
+ float *tval;
+ float c1, c2;
+ i_color val;
+ int p, x, y, ch;
+ int channels = im->channels;
+ int xsize = im->xsize;
+ int ysize = im->ysize;
+ int *cmatch;
+
+ mm_log((1,"i_nearest_color(im %p, num %d, xo %p, yo %p, ival %p, dmeasure %d)\n", im, num, xo, yo, ival, dmeasure));
+
+
+ tval = mymalloc( sizeof(float)*num*im->channels );
+ ival = mymalloc( sizeof(i_color)*num );
+ cmatch = mymalloc( sizeof(int)*num );
+
+ for(p = 0; p<num; p++) {
+ for(ch = 0; ch<im->channels; ch++) tval[ p * im->channels + ch] = 0;
+ cmatch[p] = 0;
+ }
+
+
+ for(y = 0; y<ysize; y++) for(x = 0; x<xsize; x++) {
+ int midx = 0;
+ float mindist = 0;
+ float curdist = 0;
+
+ int xd = x-xo[0];
+ int yd = y-yo[0];
+
+ switch (dmeasure) {
+ case 0: /* euclidean */
+ mindist = sqrt(xd*xd + yd*yd); /* euclidean distance */
+ break;
+ case 1: /* euclidean squared */
+ mindist = xd*xd + yd*yd; /* euclidean distance */
+ break;
+ case 2: /* euclidean squared */
+ mindist = max(xd*xd, yd*yd); /* manhattan distance */
+ break;
+ default:
+ m_fatal(3,"i_nearest_color: Unknown distance measure\n");
+ }
+
+ for(p = 1; p<num; p++) {
+ xd = x-xo[p];
+ yd = y-yo[p];
+ switch (dmeasure) {
+ case 0: /* euclidean */
+ curdist = sqrt(xd*xd + yd*yd); /* euclidean distance */
+ break;
+ case 1: /* euclidean squared */
+ curdist = xd*xd + yd*yd; /* euclidean distance */
+ break;
+ case 2: /* euclidean squared */
+ curdist = max(xd*xd, yd*yd); /* manhattan distance */
+ break;
+ default:
+ m_fatal(3,"i_nearest_color: Unknown distance measure\n");
+ }
+ if (curdist < mindist) {
+ mindist = curdist;
+ midx = p;
+ }
+ }
+
+ cmatch[midx]++;
+ i_gpix(im, x, y, &val);
+ c2 = 1.0/(float)(cmatch[midx]);
+ c1 = 1.0-c2;
+
+ // printf("pixel [%d %d %d] c1+c2 = %f\n", val.channel[0], val.channel[1], val.channel[2], c1+c2);
+ // printf("cmatch = %d, c1 = %f, c2 = %f tval=[%f %f %f]\n", cmatch[midx], c1, c2, tval[midx*im->channels], tval[midx*im->channels+1], tval[midx*im->channels+2] );
+
+ for(ch = 0; ch<im->channels; ch++)
+ tval[midx*im->channels + ch] = c1*tval[midx*im->channels + ch] + c2 * (float) val.channel[ch];
+
+
+ }
+
+ for(p = 0; p<num; p++) for(ch = 0; ch<im->channels; ch++) ival[p].channel[ch] = tval[p*im->channels + ch];
+
+ i_nearest_color_foo(im, num, xo, yo, ival, dmeasure);
+}
--- /dev/null
+#include "image.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+
+
+
+
+/*
+=head1 NAME
+
+font.c - implements font handling functions for t1 and truetype fonts
+
+=head1 SYNOPSIS
+
+ i_init_fonts();
+
+ #ifdef HAVE_LIBT1
+ fontnum = i_t1_new(path_to_pfb, path_to_afm);
+ i_t1_bbox(fontnum, points, "foo", 3, int cords[6]);
+ rc = i_t1_destroy(fontnum);
+ #endif
+
+ #ifdef HAVE_LIBTT
+ handle = i_tt_new(path_to_ttf);
+ rc = i_tt_bbox(handle, points, "foo", 3, int cords[6]);
+ i_tt_destroy(handle);
+
+ // and much more
+
+=head1 DESCRIPTION
+
+font.c implements font creation, rendering, bounding box functions and
+more for Imager.
+
+=head1 FUNCTION REFERENCE
+
+Some of these functions are internal.
+
+=over 4
+
+=cut
+
+*/
+
+
+
+
+
+
+
+
+
+/*
+=item i_init_fonts()
+
+Initialize font rendering libraries if they are avaliable.
+
+=cut
+*/
+
+undef_int
+i_init_fonts() {
+ mm_log((1,"Initializing fonts\n"));
+
+#ifdef HAVE_LIBT1
+ init_t1();
+#endif
+
+#ifdef HAVE_LIBTT
+ init_tt();
+#endif
+
+ return(1); /* FIXME: Always true - check the return values of the init_t1 and init_tt functions */
+}
+
+
+
+
+#ifdef HAVE_LIBT1
+
+
+
+/*
+=item i_init_t1()
+
+Initializes the t1lib font rendering engine.
+
+=cut
+*/
+
+undef_int
+init_t1() {
+ mm_log((1,"init_t1()\n"));
+ if ((T1_InitLib(LOGFILE|IGNORE_CONFIGFILE|IGNORE_FONTDATABASE) == NULL)){
+ mm_log((1,"Initialization of t1lib failed\n"));
+ return(1);
+ }
+ T1_SetLogLevel(T1LOG_DEBUG);
+ i_t1_set_aa(1); /* Default Antialias value */
+ return(0);
+}
+
+
+/*
+=item i_close_t1()
+
+Shuts the t1lib font rendering engine down.
+
+ This it seems that this function is never used.
+
+=cut
+*/
+
+void
+i_close_t1() {
+ T1_CloseLib();
+}
+
+
+/*
+=item i_t1_new(pfb, afm)
+
+Loads the fonts with the given filenames, returns its font id
+
+ pfb - path to pfb file for font
+ afm - path to afm file for font
+
+=cut
+*/
+
+int
+i_t1_new(char *pfb,char *afm) {
+ int font_id;
+ mm_log((1,"i_t1_new(pfb %s,afm %s)\n",pfb,(afm?afm:"NULL")));
+ font_id = T1_AddFont(pfb);
+ if (font_id<0) {
+ mm_log((1,"i_t1_new: Failed to load pfb file '%s' - return code %d.\n",pfb,font_id));
+ return font_id;
+ }
+
+ if (afm != NULL) {
+ mm_log((1,"i_t1_new: requesting afm file '%s'.\n",afm));
+ if (T1_SetAfmFileName(font_id,afm)<0) mm_log((1,"i_t1_new: afm loading of '%s' failed.\n",afm));
+ }
+ return font_id;
+}
+
+/*
+=item i_t1_destroy(font_id)
+
+Frees resources for a t1 font with given font id.
+
+ font_id - number of the font to free
+
+=cut
+*/
+
+int
+i_t1_destroy(int font_id) {
+ mm_log((1,"i_t1_destroy(font_id %d)\n",font_id));
+ return T1_DeleteFont(font_id);
+}
+
+
+/*
+=item i_t1_set_aa(st)
+
+Sets the antialiasing level of the t1 library.
+
+ st - 0 = NONE, 1 = LOW, 2 = HIGH.
+
+=cut
+*/
+
+void
+i_t1_set_aa(int st) {
+ int i;
+ unsigned long cst[17];
+ switch(st) {
+ case 0:
+ T1_AASetBitsPerPixel( 8 );
+ T1_AASetLevel( T1_AA_NONE );
+ T1_AANSetGrayValues( 0, 255 );
+ mm_log((1,"setting T1 antialias to none\n"));
+ break;
+ case 1:
+ T1_AASetBitsPerPixel( 8 );
+ T1_AASetLevel( T1_AA_LOW );
+ T1_AASetGrayValues( 0,65,127,191,255 );
+ mm_log((1,"setting T1 antialias to low\n"));
+ break;
+ case 2:
+ T1_AASetBitsPerPixel(8);
+ T1_AASetLevel(T1_AA_HIGH);
+ for(i=0;i<17;i++) cst[i]=(i*255)/16;
+ T1_AAHSetGrayValues( cst );
+ mm_log((1,"setting T1 antialias to high\n"));
+ }
+}
+
+
+/*
+=item i_t1_cp(im, xb, yb, channel, fontnum, points, str, len, align)
+
+Interface to text rendering into a single channel in an image
+
+ im pointer to image structure
+ xb x coordinate of start of string
+ yb y coordinate of start of string ( see align )
+ channel - destination channel
+ fontnum - t1 library font id
+ points - number of points in fontheight
+ str - string to render
+ len - string length
+ align - (0 - top of font glyph | 1 - baseline )
+
+=cut
+*/
+
+undef_int
+i_t1_cp(i_img *im,int xb,int yb,int channel,int fontnum,float points,char* str,int len,int align) {
+ GLYPH *glyph;
+ int xsize,ysize,x,y;
+ i_color val;
+
+ unsigned int ch_mask_store;
+
+ if (im == NULL) { mm_log((1,"i_t1_cp: Null image in input\n")); return(0); }
+
+ glyph=T1_AASetString( fontnum, str, len, 0, T1_KERNING, points, NULL);
+
+ mm_log((1,"metrics: ascent: %d descent: %d\n",glyph->metrics.ascent,glyph->metrics.descent));
+ mm_log((1," leftSideBearing: %d rightSideBearing: %d\n",glyph->metrics.leftSideBearing,glyph->metrics.rightSideBearing));
+ mm_log((1," advanceX: %d advanceY: %d\n",glyph->metrics.advanceX,glyph->metrics.advanceY));
+ mm_log((1,"bpp: %d\n",glyph->bpp));
+
+ xsize=glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing;
+ ysize=glyph->metrics.ascent-glyph->metrics.descent;
+
+ mm_log((1,"width: %d height: %d\n",xsize,ysize));
+
+ ch_mask_store=im->ch_mask;
+ im->ch_mask=1<<channel;
+
+ if (align==1) { xb+=glyph->metrics.leftSideBearing; yb-=glyph->metrics.ascent; }
+
+ for(y=0;y<ysize;y++) for(x=0;x<xsize;x++) {
+ val.channel[channel]=glyph->bits[y*xsize+x];
+ i_ppix(im,x+xb,y+yb,&val);
+ }
+
+ im->ch_mask=ch_mask_store;
+ return 1;
+}
+
+
+/*
+=item i_t1_bbox(handle, fontnum, points, str, len, cords)
+
+function to get a strings bounding box given the font id and sizes
+
+ handle - pointer to font handle
+ fontnum - t1 library font id
+ points - number of points in fontheight
+ str - string to measure
+ len - string length
+ cords - the bounding box (modified in place)
+
+=cut
+*/
+
+void
+i_t1_bbox(int fontnum,float points,char *str,int len,int cords[6]) {
+ BBox bbox;
+ BBox gbbox;
+
+ mm_log((1,"i_t1_bbox(fontnum %d,points %.2f,str '%.*s', len %d)\n",fontnum,points,len,str,len));
+ T1_LoadFont(fontnum); /* FIXME: Here a return code is ignored - haw haw haw */
+ bbox = T1_GetStringBBox(fontnum,str,len,0,T1_KERNING);
+ gbbox = T1_GetFontBBox(fontnum);
+
+ mm_log((1,"bbox: (%d,%d,%d,%d)\n",
+ (int)(bbox.llx*points/1000),
+ (int)(gbbox.lly*points/1000),
+ (int)(bbox.urx*points/1000),
+ (int)(gbbox.ury*points/1000),
+ (int)(bbox.lly*points/1000),
+ (int)(bbox.ury*points/1000) ));
+
+
+ cords[0]=((float)bbox.llx*points)/1000;
+ cords[2]=((float)bbox.urx*points)/1000;
+
+ cords[1]=((float)gbbox.lly*points)/1000;
+ cords[3]=((float)gbbox.ury*points)/1000;
+
+ cords[4]=((float)bbox.lly*points)/1000;
+ cords[5]=((float)bbox.ury*points)/1000;
+}
+
+
+/*
+=item i_t1_text(im, xb, yb, cl, fontnum, points, str, len, align)
+
+Interface to text rendering in a single color onto an image
+
+ im - pointer to image structure
+ xb - x coordinate of start of string
+ yb - y coordinate of start of string ( see align )
+ cl - color to draw the text in
+ fontnum - t1 library font id
+ points - number of points in fontheight
+ str - char pointer to string to render
+ len - string length
+ align - (0 - top of font glyph | 1 - baseline )
+
+=cut
+*/
+
+undef_int
+i_t1_text(i_img *im,int xb,int yb,i_color *cl,int fontnum,float points,char* str,int len,int align) {
+ GLYPH *glyph;
+ int xsize,ysize,x,y,ch;
+ i_color val;
+ unsigned char c,i;
+
+ if (im == NULL) { mm_log((1,"i_t1_cp: Null image in input\n")); return(0); }
+
+ glyph=T1_AASetString( fontnum, str, len, 0, T1_KERNING, points, NULL);
+
+ mm_log((1,"metrics: ascent: %d descent: %d\n",glyph->metrics.ascent,glyph->metrics.descent));
+ mm_log((1," leftSideBearing: %d rightSideBearing: %d\n",glyph->metrics.leftSideBearing,glyph->metrics.rightSideBearing));
+ mm_log((1," advanceX: %d advanceY: %d\n",glyph->metrics.advanceX,glyph->metrics.advanceY));
+ mm_log((1,"bpp: %d\n",glyph->bpp));
+
+ xsize=glyph->metrics.rightSideBearing-glyph->metrics.leftSideBearing;
+ ysize=glyph->metrics.ascent-glyph->metrics.descent;
+
+ mm_log((1,"width: %d height: %d\n",xsize,ysize));
+
+ if (align==1) { xb+=glyph->metrics.leftSideBearing; yb-=glyph->metrics.ascent; }
+
+ for(y=0;y<ysize;y++) for(x=0;x<xsize;x++) {
+ c=glyph->bits[y*xsize+x];
+ i=255-c;
+ i_gpix(im,x+xb,y+yb,&val);
+ for(ch=0;ch<im->channels;ch++) val.channel[ch]=(c*cl->channel[ch]+i*val.channel[ch])/255;
+ i_ppix(im,x+xb,y+yb,&val);
+ }
+ return 1;
+}
+
+
+#endif /* HAVE_LIBT1 */
+
+
+
+
+
+
+
+
+
+
+/* Truetype font support */
+
+#ifdef HAVE_LIBTT
+
+
+/* Defines */
+
+#define USTRCT(x) ((x).z)
+#define TT_VALID( handle ) ( ( handle ).z != NULL )
+
+
+/* Prototypes */
+
+static int i_tt_get_instance( TT_Fonthandle *handle, int points, int smooth );
+static void i_tt_init_raster_map( TT_Raster_Map* bit, int width, int height, int smooth );
+static void i_tt_done_raster_map( TT_Raster_Map *bit );
+static void i_tt_clear_raster_map( TT_Raster_Map* bit );
+static void i_tt_blit_or( TT_Raster_Map *dst, TT_Raster_Map *src,int x_off, int y_off );
+static int i_tt_get_glyph( TT_Fonthandle *handle, int inst, unsigned char j );
+static void i_tt_render_glyph( TT_Glyph glyph, TT_Glyph_Metrics* gmetrics, TT_Raster_Map *bit, TT_Raster_Map *small_bit, int x_off, int y_off, int smooth );
+static void i_tt_render_all_glyphs( TT_Fonthandle *handle, int inst, TT_Raster_Map *bit, TT_Raster_Map *small_bit, int cords[6], char* txt, int len, int smooth );
+static void i_tt_dump_raster_map2( i_img* im, TT_Raster_Map* bit, int xb, int yb, i_color *cl, int smooth );
+static void i_tt_dump_raster_map_channel( i_img* im, TT_Raster_Map* bit, int xb, int yb, int channel, int smooth );
+static int i_tt_rasterize( TT_Fonthandle *handle, TT_Raster_Map *bit, int cords[6], float points, char* txt, int len, int smooth );
+static undef_int i_tt_bbox_inst( TT_Fonthandle *handle, int inst ,const char *txt, int len, int cords[6] );
+
+
+/* static globals needed */
+
+static TT_Engine engine;
+static int LTT_dpi = 72; /* FIXME: this ought to be a part of the call interface */
+static int LTT_hinted = 1; /* FIXME: this too */
+
+
+/*
+ * FreeType interface
+ */
+
+
+/*
+=item init_tt()
+
+Initializes the freetype font rendering engine
+
+=cut
+*/
+
+undef_int
+init_tt() {
+ TT_Error error;
+ mm_log((1,"init_tt()\n"));
+ error = TT_Init_FreeType( &engine );
+ if ( error ){
+ mm_log((1,"Initialization of freetype failed, code = 0x%x\n",error));
+ return(1);
+ }
+ return(0);
+}
+
+
+/*
+=item i_tt_get_instance(handle, points, smooth)
+
+Finds a points+smooth instance or if one doesn't exist in the cache
+allocates room and returns its cache entry
+
+ fontname - path to the font to load
+ handle - handle to the font.
+ points - points of the requested font
+ smooth - boolean (True: antialias on, False: antialias is off)
+
+=cut
+*/
+
+static
+int
+i_tt_get_instance( TT_Fonthandle *handle, int points, int smooth ) {
+ int i,idx;
+ TT_Error error;
+
+ mm_log((1,"i_tt_get_instance(handle 0x%X, points %d, smooth %d)\n",handle,points,smooth));
+
+ if (smooth == -1) { /* Smooth doesn't matter for this search */
+ for(i=0;i<TT_CHC;i++) if (handle->instanceh[i].ptsize==points) {
+ mm_log((1,"i_tt_get_instance: in cache - (non selective smoothing search) returning %d\n",i));
+ return i;
+ }
+ smooth=1; /* We will be adding a font - add it as smooth then */
+ } else { /* Smooth doesn't matter for this search */
+ for(i=0;i<TT_CHC;i++) if (handle->instanceh[i].ptsize==points && handle->instanceh[i].smooth==smooth) {
+ mm_log((1,"i_tt_get_instance: in cache returning %d\n",i));
+ return i;
+ }
+ }
+
+ /* Found the instance in the cache - return the cache index */
+
+ for(idx=0;idx<TT_CHC;idx++) if (!(handle->instanceh[idx].order)) break; /* find the lru item */
+
+ mm_log((1,"i_tt_get_instance: lru item is %d\n",idx));
+ mm_log((1,"i_tt_get_instance: lru pointer 0x%X\n",USTRCT(handle->instanceh[idx].instance) ));
+
+ if ( USTRCT(handle->instanceh[idx].instance) ) {
+ mm_log((1,"i_tt_get_instance: freeing lru item from cache %d\n",idx));
+ TT_Done_Instance( handle->instanceh[idx].instance ); /* Free instance if needed */
+ }
+
+ /* create and initialize instance */
+ /* FIXME: probably a memory leak on fail */
+
+ (void) (( error = TT_New_Instance( handle->face, &handle->instanceh[idx].instance ) ) ||
+ ( error = TT_Set_Instance_Resolutions( handle->instanceh[idx].instance, LTT_dpi, LTT_dpi ) ) ||
+ ( error = TT_Set_Instance_CharSize( handle->instanceh[idx].instance, points*64 ) ) );
+
+ if ( error ) {
+ mm_log((1, "Could not create and initialize instance: error 0x%x.\n",error ));
+ return -1;
+ }
+
+ /* Now that the instance should the inplace we need to lower all of the
+ ru counts and put `this' one with the highest entry */
+
+ for(i=0;i<TT_CHC;i++) handle->instanceh[i].order--;
+
+ handle->instanceh[idx].order=TT_CHC-1;
+ handle->instanceh[idx].ptsize=points;
+ handle->instanceh[idx].smooth=smooth;
+ TT_Get_Instance_Metrics( handle->instanceh[idx].instance, &(handle->instanceh[idx].imetrics) );
+
+ /* Zero the memory for the glyph storage so they are not thought as cached if they haven't been cached
+ since this new font was loaded */
+
+ for(i=0;i<256;i++) USTRCT(handle->instanceh[idx].glyphs[i])=NULL;
+
+ return idx;
+}
+
+
+/*
+=item i_tt_new(fontname)
+
+Creates a new font handle object, finds a character map and initialise the
+the font handle's cache
+
+ fontname - path to the font to load
+
+=cut
+*/
+
+TT_Fonthandle*
+i_tt_new(char *fontname) {
+ TT_Error error;
+ TT_Fonthandle *handle;
+ unsigned short i,n;
+ unsigned short platform,encoding;
+
+ mm_log((1,"i_tt_new(fontname '%s')\n",fontname));
+
+ /* allocate memory for the structure */
+
+ handle=mymalloc( sizeof(TT_Fonthandle) );
+
+ /* load the typeface */
+ error = TT_Open_Face( engine, fontname, &handle->face );
+ if ( error ) {
+ if ( error == TT_Err_Could_Not_Open_File ) mm_log((1, "Could not find/open %s.\n", fontname ))
+ else mm_log((1, "Error while opening %s, error code = 0x%x.\n",fontname, error ));
+ return NULL;
+ }
+
+ TT_Get_Face_Properties( handle->face, &(handle->properties) );
+ /* First, look for a Unicode charmap */
+
+ n = handle->properties.num_CharMaps;
+ USTRCT( handle->char_map )=NULL; /* Invalidate character map */
+
+ for ( i = 0; i < n; i++ ) {
+ TT_Get_CharMap_ID( handle->face, i, &platform, &encoding );
+ if ( (platform == 3 && encoding == 1 ) || (platform == 0 && encoding == 0 ) ) {
+ TT_Get_CharMap( handle->face, i, &(handle->char_map) );
+ break;
+ }
+ }
+
+ /* Zero the pointsizes - and ordering */
+
+ for(i=0;i<TT_CHC;i++) {
+ USTRCT(handle->instanceh[i].instance)=NULL;
+ handle->instanceh[i].order=i;
+ handle->instanceh[i].ptsize=0;
+ handle->instanceh[i].smooth=-1;
+ }
+
+ mm_log((1,"i_tt_new <- 0x%X\n",handle));
+ return handle;
+}
+
+
+
+/*
+ *Â raster map management
+ */
+
+/*
+=item i_tt_init_raster_map(bit, width, height, smooth)
+
+Allocates internal memory for the bitmap as needed by the parameters (internal)
+
+ bit - bitmap to allocate into
+ width - width of the bitmap
+ height - height of the bitmap
+ smooth - boolean (True: antialias on, False: antialias is off)
+
+=cut
+*/
+
+static
+void
+i_tt_init_raster_map( TT_Raster_Map* bit, int width, int height, int smooth ) {
+
+ mm_log((1,"i_tt_init_raster_map( bit 08x%08X, width %d, height %d, smooth %d)\n", bit, width, height, smooth));
+
+ bit->rows = height;
+ bit->width = ( width + 3 ) & -4;
+ bit->flow = TT_Flow_Down;
+
+ if ( smooth ) {
+ bit->cols = bit->width;
+ bit->size = bit->rows * bit->width;
+ } else {
+ bit->cols = ( bit->width + 7 ) / 8; /* convert to # of bytes */
+ bit->size = bit->rows * bit->cols; /* number of bytes in buffer */
+ }
+
+ mm_log((1,"i_tt_init_raster_map: bit->width %d, bit->cols %d, bit->rows %d, bit->size %d)\n", bit->width, bit->cols, bit->rows, bit->size ));
+
+ bit->bitmap = (void *) mymalloc( bit->size );
+ if ( !bit->bitmap ) m_fatal(0,"Not enough memory to allocate bitmap (%d)!\n",bit->size );
+}
+
+
+/*
+=item i_tt_clear_raster_map(bit)
+
+Frees the bitmap data and sets pointer to NULL (internal)
+
+ bit - bitmap to free
+
+=cut
+*/
+
+static
+void
+i_tt_done_raster_map( TT_Raster_Map *bit ) {
+ myfree( bit->bitmap );
+ bit->bitmap = NULL;
+}
+
+
+/*
+=item i_tt_clear_raster_map(bit)
+
+Clears the specified bitmap (internal)
+
+ bit - bitmap to zero
+
+=cut
+*/
+
+
+static
+void
+i_tt_clear_raster_map( TT_Raster_Map* bit ) {
+ memset( bit->bitmap, 0, bit->size );
+}
+
+
+/*
+=item i_tt_blit_or(dst, src, x_off, y_off)
+
+function that blits one raster map into another (internal)
+
+ dst - destination bitmap
+ src - source bitmap
+ x_off - x offset into the destination bitmap
+ y_off - y offset into the destination bitmap
+
+=cut
+*/
+
+static
+void
+i_tt_blit_or( TT_Raster_Map *dst, TT_Raster_Map *src,int x_off, int y_off ) {
+ int x, y;
+ int x1, x2, y1, y2;
+ char *s, *d;
+
+ x1 = x_off < 0 ? -x_off : 0;
+ y1 = y_off < 0 ? -y_off : 0;
+
+ x2 = (int)dst->cols - x_off;
+ if ( x2 > src->cols ) x2 = src->cols;
+
+ y2 = (int)dst->rows - y_off;
+ if ( y2 > src->rows ) y2 = src->rows;
+
+ if ( x1 >= x2 ) return;
+
+ /* do the real work now */
+
+ for ( y = y1; y < y2; ++y ) {
+ s = ( (char*)src->bitmap ) + y * src->cols + x1;
+ d = ( (char*)dst->bitmap ) + ( y + y_off ) * dst->cols + x1 + x_off;
+
+ for ( x = x1; x < x2; ++x ) *d++ |= *s++;
+ }
+}
+
+
+/*
+=item i_tt_get_glyph(handle, inst, j)
+
+Function to see if a glyph exists and if so cache it (internal)
+
+ handle - pointer to font handle
+ inst - font instance
+ j - charcode of glyph
+
+=cut
+*/
+
+static
+int
+i_tt_get_glyph( TT_Fonthandle *handle, int inst, unsigned char j) { /* FIXME: Check if unsigned char is enough */
+ unsigned short load_flags, code;
+ TT_Error error;
+
+ mm_log((1, "i_tt_get_glyph(handle 0x%X, inst %d, j %d (%c))\n",handle,inst,j,j));
+ mm_log((1, "handle->instanceh[inst].glyphs[j]=0x%08X\n",handle->instanceh[inst].glyphs[j] ));
+
+ if ( TT_VALID(handle->instanceh[inst].glyphs[j]) ) {
+ mm_log((1,"i_tt_get_glyph: %d in cache\n",j));
+ return 1;
+ }
+
+ /* Ok - it wasn't cached - try to get it in */
+ load_flags = TTLOAD_SCALE_GLYPH;
+ if ( LTT_hinted ) load_flags |= TTLOAD_HINT_GLYPH;
+
+ if ( !TT_VALID(handle->char_map) ) {
+ code = (j - ' ' + 1) < 0 ? 0 : (j - ' ' + 1);
+ if ( code >= handle->properties.num_Glyphs ) code = 0;
+ } else code = TT_Char_Index( handle->char_map, j );
+
+ if ( (error = TT_New_Glyph( handle->face, &handle->instanceh[inst].glyphs[j])) )
+ mm_log((1, "Cannot allocate and load glyph: error 0x%x.\n", error ));
+ if ( (error = TT_Load_Glyph( handle->instanceh[inst].instance, handle->instanceh[inst].glyphs[j], code, load_flags)) )
+ mm_log((1, "Cannot allocate and load glyph: error 0x%x.\n", error ));
+
+ /* At this point the glyph should be allocated and loaded */
+ /* Next get the glyph metrics */
+
+ error = TT_Get_Glyph_Metrics( handle->instanceh[inst].glyphs[j], &handle->instanceh[inst].gmetrics[j] );
+ mm_log((1, "TT_Get_Glyph_Metrics: error 0x%x.\n", error ));
+ return 1;
+}
+
+
+/*
+=item i_tt_destroy(handle)
+
+Clears the data taken by a font including all cached data such as
+pixmaps and glyphs
+
+ handle - pointer to font handle
+
+=cut
+*/
+
+void
+i_tt_destroy( TT_Fonthandle *handle) {
+ TT_Close_Face( handle->face );
+
+ /* FIXME: Should these be freed automatically by the library?
+
+ TT_Done_Instance( instance );
+ void
+ i_tt_done_glyphs( void ) {
+ int i;
+
+ if ( !glyphs ) return;
+
+ for ( i = 0; i < 256; ++i ) TT_Done_Glyph( glyphs[i] );
+ free( glyphs );
+
+ glyphs = NULL;
+ }
+ */
+}
+
+
+/*
+ * FreeType Rendering functions
+ */
+
+
+/*
+=item i_tt_render_glyph(handle, gmetrics, bit, smallbit, x_off, y_off, smooth)
+
+Renders a single glyph into the bit rastermap (internal)
+
+ handle - pointer to font handle
+ gmetrics - the metrics for the glyph to be rendered
+ bit - large bitmap that is the destination for the text
+ smallbit - small bitmap that is used only if smooth is true
+ x_off - x offset of glyph
+ y_off - y offset of glyph
+ smooth - boolean (True: antialias on, False: antialias is off)
+
+=cut
+*/
+
+static
+void
+i_tt_render_glyph( TT_Glyph glyph, TT_Glyph_Metrics* gmetrics, TT_Raster_Map *bit, TT_Raster_Map *small_bit, int x_off, int y_off, int smooth ) {
+
+ mm_log((1,"i_tt_render_glyph(glyph 0x0%X, gmetrics 0x0%X, bit 0x%X, small_bit 0x%X, x_off %d, y_off %d, smooth %d)\n",
+ USTRCT(glyph), gmetrics, bit, small_bit, x_off,y_off,smooth));
+
+ if ( !smooth ) TT_Get_Glyph_Bitmap( glyph, bit, x_off * 64, y_off * 64);
+ else {
+ TT_F26Dot6 xmin, ymin, xmax, ymax;
+
+ xmin = gmetrics->bbox.xMin & -64;
+ ymin = gmetrics->bbox.yMin & -64;
+ xmax = (gmetrics->bbox.xMax + 63) & -64;
+ ymax = (gmetrics->bbox.yMax + 63) & -64;
+
+ i_tt_clear_raster_map( small_bit );
+ TT_Get_Glyph_Pixmap( glyph, small_bit, -xmin, -ymin );
+ i_tt_blit_or( bit, small_bit, xmin/64 + x_off, -ymin/64 - y_off );
+ }
+}
+
+
+/*
+=item i_tt_render_all_glyphs(handle, inst, bit, small_bit, cords, txt, len, smooth)
+
+calls i_tt_render_glyph to render each glyph into the bit rastermap (internal)
+
+ handle - pointer to font handle
+ inst - font instance
+ bit - large bitmap that is the destination for the text
+ smallbit - small bitmap that is used only if smooth is true
+ txt - string to render
+ len - length of the string to render
+ smooth - boolean (True: antialias on, False: antialias is off)
+
+=cut
+*/
+
+static
+void
+i_tt_render_all_glyphs( TT_Fonthandle *handle, int inst, TT_Raster_Map *bit, TT_Raster_Map *small_bit, int cords[6], char* txt, int len, int smooth ) {
+ unsigned char j;
+ int i;
+ TT_F26Dot6 x,y;
+
+ mm_log((1,"i_tt_render_all_glyphs( handle 0x%X, inst %d, bit 0x%X, small_bit 0x%X, txt '%.*s', len %d, smooth %d)\n",
+ handle, inst, bit, small_bit, len, txt, len, smooth));
+
+ /*
+ y=-( handle->properties.horizontal->Descender * handle->instanceh[inst].imetrics.y_ppem )/(handle->properties.header->Units_Per_EM);
+ */
+
+ x=cords[0]; /* FIXME: If you font is antialiased this should be expanded by one to allow for aa expansion and the allocation too - do before passing here */
+ y=-cords[1];
+
+ for ( i = 0; i < len; i++ ) {
+ j = txt[i];
+ if ( !i_tt_get_glyph(handle,inst,j) ) continue;
+ i_tt_render_glyph( handle->instanceh[inst].glyphs[j], &handle->instanceh[inst].gmetrics[j], bit, small_bit, x, y, smooth );
+ x += handle->instanceh[inst].gmetrics[j].advance / 64;
+ }
+}
+
+
+/*
+ * Functions to render rasters (single channel images) onto images
+ */
+
+/*
+=item i_tt_dump_raster_map2(im, bit, xb, yb, cl, smooth)
+
+Function to dump a raster onto an image in color used by i_tt_text() (internal).
+
+ im - image to dump raster on
+ bit - bitmap that contains the text to be dumped to im
+ xb, yb - coordinates, left edge and baseline
+ cl - color to use for text
+ smooth - boolean (True: antialias on, False: antialias is off)
+
+=cut
+*/
+
+static
+void
+i_tt_dump_raster_map2( i_img* im, TT_Raster_Map* bit, int xb, int yb, i_color *cl, int smooth ) {
+ char *bmap;
+ i_color val;
+ int c, i, ch, x, y;
+ mm_log((1,"i_tt_dump_raster_map2(im 0x%x, bit 0x%X, xb %d, yb %d, cl 0x%X)\n",im,bit,xb,yb,cl));
+
+ bmap = (char *)bit->bitmap;
+
+ if ( smooth ) {
+
+ for(y=0;y<bit->rows;y++) for(x=0;x<bit->width;x++) {
+ c=(255*bmap[y*(bit->cols)+x])/4;
+ i=255-c;
+ i_gpix(im,x+xb,y+yb,&val);
+ for(ch=0;ch<im->channels;ch++) val.channel[ch]=(c*cl->channel[ch]+i*val.channel[ch])/255;
+ i_ppix(im,x+xb,y+yb,&val);
+ }
+
+ } else {
+
+ for(y=0;y<bit->rows;y++) for(x=0;x<bit->width;x++) {
+ c=( bmap[y*bit->cols+x/8] & (128>>(x%8)) ) ? 255 : 0;
+ i=255-c;
+ i_gpix(im,x+xb,y+yb,&val);
+ for(ch=0;ch<im->channels;ch++) val.channel[ch]=(c*cl->channel[ch]+i*val.channel[ch])/255;
+ i_ppix(im,x+xb,y+yb,&val);
+ }
+
+ }
+}
+
+
+/*
+=item i_tt_dump_raster_map_channel(im, bit, xb, yb, channel, smooth)
+
+Function to dump a raster onto a single channel image in color (internal)
+
+ im - image to dump raster on
+ bit - bitmap that contains the text to be dumped to im
+ xb, yb - coordinates, left edge and baseline
+ channel - channel to copy to
+ smooth - boolean (True: antialias on, False: antialias is off)
+
+=cut
+*/
+
+static
+void
+i_tt_dump_raster_map_channel( i_img* im, TT_Raster_Map* bit, int xb, int yb, int channel, int smooth ) {
+ char *bmap;
+ i_color val;
+ int c,x,y;
+
+ mm_log((1,"i_tt_dump_raster_channel(im 0x%x, bit 0x%X, xb %d, yb %d, channel %d)\n",im,bit,xb,yb,channel));
+
+ bmap = (char *)bit->bitmap;
+
+ if ( smooth ) {
+ for(y=0;y<bit->rows;y++) for(x=0;x<bit->width;x++) {
+ c=(255*bmap[y*(bit->cols)+x])/4;
+ i_gpix(im,x+xb,y+yb,&val);
+ val.channel[channel]=c;
+ i_ppix(im,x+xb,y+yb,&val);
+ }
+ } else {
+ for(y=0;y<bit->rows;y++) for(x=0;x<bit->width;x++) {
+ c=( bmap[y*bit->cols+x/8] & (128>>(x%8)) ) ? 255 : 0;
+ i_gpix(im,x+xb,y+yb,&val);
+ val.channel[channel]=c;
+ i_ppix(im,x+xb,y+yb,&val);
+ }
+ }
+}
+
+
+/*
+=item i_tt_rasterize(handle, bit, cords, points, txt, len, smooth)
+
+interface for generating single channel raster of text (internal)
+
+ handle - pointer to font handle
+ bit - the bitmap that is allocated, rendered into and NOT freed
+ cords - the bounding box (modified in place)
+ points - font size to use
+ txt - string to render
+ len - length of the string to render
+ smooth - boolean (True: antialias on, False: antialias is off)
+
+=cut
+*/
+
+static
+int
+i_tt_rasterize( TT_Fonthandle *handle, TT_Raster_Map *bit, int cords[6], float points, char* txt, int len, int smooth ) {
+ int inst;
+ int width, height;
+ TT_Raster_Map small_bit;
+
+ /* find or install an instance */
+ if ( (inst=i_tt_get_instance(handle,points,smooth)) < 0) {
+ mm_log((1,"i_tt_rasterize: get instance failed\n"));
+ return 0;
+ }
+
+ /* calculate bounding box */
+ i_tt_bbox_inst( handle, inst, txt, len, cords );
+
+ width = cords[2]-cords[0];
+ height = cords[3]-cords[1];
+
+ mm_log((1,"i_tt_rasterize: width=%d, height=%d\n",width, height ));
+
+ i_tt_init_raster_map ( bit, width, height, smooth );
+ i_tt_clear_raster_map( bit );
+ if ( smooth ) i_tt_init_raster_map( &small_bit, handle->instanceh[inst].imetrics.x_ppem + 32, height, smooth );
+
+ i_tt_render_all_glyphs( handle, inst, bit, &small_bit, cords, txt, len, smooth );
+
+ /* ascent = ( handle->properties.horizontal->Ascender * handle->instanceh[inst].imetrics.y_ppem ) / handle->properties.header->Units_Per_EM; */
+
+ if ( smooth ) i_tt_done_raster_map( &small_bit );
+ return 1;
+}
+
+
+
+/*
+ * Exported text rendering interfaces
+ */
+
+
+/*
+=item i_tt_cp(handle, im, xb, yb, channel, points, txt, len, smooth)
+
+Interface to text rendering into a single channel in an image
+
+ handle - pointer to font handle
+ im - image to render text on to
+ xb, yb - coordinates, left edge and baseline
+ channel - channel to render into
+ points - font size to use
+ txt - string to render
+ len - length of the string to render
+ smooth - boolean (True: antialias on, False: antialias is off)
+
+=cut
+*/
+
+undef_int
+i_tt_cp( TT_Fonthandle *handle, i_img *im, int xb, int yb, int channel, float points, char* txt, int len, int smooth ) {
+
+ int cords[6];
+ int ascent, st_offset;
+ TT_Raster_Map bit;
+
+ if (! i_tt_rasterize( handle, &bit, cords, points, txt, len, smooth ) ) return 0;
+
+ ascent=cords[3];
+ st_offset=cords[0];
+
+ i_tt_dump_raster_map_channel( im, &bit, xb-st_offset , yb-ascent, channel, smooth );
+ i_tt_done_raster_map( &bit );
+
+ return 1;
+}
+
+
+/*
+=item i_tt_text(handle, im, xb, yb, cl, points, txt, len, smooth)
+
+Interface to text rendering in a single color onto an image
+
+ handle - pointer to font handle
+ im - image to render text on to
+ xb, yb - coordinates, left edge and baseline
+ cl - color to use for text
+ points - font size to use
+ txt - string to render
+ len - length of the string to render
+ smooth - boolean (True: antialias on, False: antialias is off)
+
+=cut
+*/
+
+undef_int
+i_tt_text( TT_Fonthandle *handle, i_img *im, int xb, int yb, i_color *cl, float points, char* txt, int len, int smooth) {
+ int cords[6];
+ int ascent, st_offset;
+ TT_Raster_Map bit;
+
+ if (! i_tt_rasterize( handle, &bit, cords, points, txt, len, smooth ) ) return 0;
+
+ ascent=cords[3];
+ st_offset=cords[0];
+
+ i_tt_dump_raster_map2( im, &bit, xb-st_offset, yb-ascent, cl, smooth );
+ i_tt_done_raster_map( &bit );
+
+ return 1;
+}
+
+
+/*
+=item i_tt_bbox_inst(handle, inst, txt, len, cords)
+
+Function to get texts bounding boxes given the instance of the font (internal)
+
+ handle - pointer to font handle
+ inst - font instance
+ txt - string to measure
+ len - length of the string to render
+ cords - the bounding box (modified in place)
+
+=cut
+*/
+
+static
+undef_int
+i_tt_bbox_inst( TT_Fonthandle *handle, int inst ,const char *txt, int len, int cords[6] ) {
+ int i, upm, ascent, descent, gascent, gdescent, width, casc, cdesc, first, start;
+ unsigned int j;
+ unsigned char *ustr;
+ ustr=(unsigned char*)txt;
+
+ mm_log((1,"i_tt_box_inst(handle 0x%X,inst %d,txt '%.*s', len %d)\n",handle,inst,len,txt,len));
+
+ upm = handle->properties.header->Units_Per_EM;
+ gascent = ( handle->properties.horizontal->Ascender * handle->instanceh[inst].imetrics.y_ppem ) / upm;
+ gdescent = ( handle->properties.horizontal->Descender * handle->instanceh[inst].imetrics.y_ppem ) / upm;
+
+ width = 0;
+ start = 0;
+
+ mm_log((1, "i_tt_box_inst: glyph='%c' ascent=%d descent=%d\n", j, ascent, descent));
+
+ first=1;
+ for ( i = 0; i < len; ++i ) {
+ j = ustr[i];
+ if ( i_tt_get_glyph(handle,inst,j) ) {
+ width += handle->instanceh[inst].gmetrics[j].advance / 64;
+ casc = handle->instanceh[inst].gmetrics[j].bbox.yMax / 64;
+ cdesc = handle->instanceh[inst].gmetrics[j].bbox.yMin / 64;
+
+ mm_log((1, "i_tt_box_inst: glyph='%c' casc=%d cdesc=%d\n", j, casc, cdesc));
+
+ if (first) {
+ start = handle->instanceh[inst].gmetrics[j].bbox.xMin / 64;
+ ascent = handle->instanceh[inst].gmetrics[j].bbox.yMax / 64;
+ descent = handle->instanceh[inst].gmetrics[j].bbox.yMin / 64;
+ first = 0;
+ }
+
+ ascent = (ascent > casc ? ascent : casc );
+ descent = (descent < cdesc ? descent : cdesc);
+ }
+ }
+
+ cords[0]=start;
+ cords[1]=gdescent;
+ cords[2]=width+start;
+ cords[3]=gascent;
+ cords[4]=descent;
+ cords[5]=ascent;
+ return 1;
+}
+
+
+/*
+=item i_tt_bbox(handle, points, txt, len, cords)
+
+Interface to get a strings bounding box
+
+ handle - pointer to font handle
+ points - font size to use
+ txt - string to render
+ len - length of the string to render
+ cords - the bounding box (modified in place)
+
+=cut
+*/
+
+undef_int
+i_tt_bbox( TT_Fonthandle *handle, float points,char *txt,int len,int cords[6]) {
+ int inst;
+
+ mm_log((1,"i_tt_box(handle 0x%X,points %f,txt '%.*s', len %d)\n",handle,points,len,txt,len));
+
+ if ( (inst=i_tt_get_instance(handle,points,-1)) < 0) {
+ mm_log((1,"i_tt_text: get instance failed\n"));
+ return 0;
+ }
+
+ return i_tt_bbox_inst(handle, inst, txt, len, cords);
+}
+
+
+
+#endif /* HAVE_LIBTT */
--- /dev/null
+StartFontMetrics 2.0
+FontName dcr10
+FullName dcr10
+FamilyName dcr10
+Weight Medium
+ItalicAngle 0.000000
+IsFixedPitch false
+UnderlinePosition -133
+UnderlineThickness 20
+Version 1.0\(Level-B\)
+FontBBox -55, -250, 1054, 913
+Notice Copyright \(C\) 1994, Basil K. Malyshev. All Rights Reserved.\nBaKoMa Fonts Collection, Level-B.
+EncodingScheme FontSpecific
+CapHeight 683
+XHeight 430
+Descender -194
+Ascender 694
+StartCharMetrics 256
+C 0 ; WX 499.89 ; N grave ; B 107 508 294 698 ;
+C 1 ; WX 499.89 ; N acute ; B 205 508 392 698 ;
+C 2 ; WX 499.89 ; N circumflex ; B 115 537 384 694 ;
+C 3 ; WX 499.89 ; N tilde ; B 83 572 416 668 ;
+C 4 ; WX 499.89 ; N dieresis ; B 101 565 398 669 ;
+C 5 ; WX 499.89 ; N hungarumlaut ; B 126 511 420 699 ;
+C 6 ; WX 749.83 ; N ring ; B 263 540 458 716 ;
+C 7 ; WX 499.89 ; N caron ; B 117 515 382 640 ;
+C 8 ; WX 499.89 ; N breve ; B 98 519 401 694 ;
+C 9 ; WX 499.89 ; N macron ; B 69 555 430 590 ;
+C 10 ; WX 277.72 ; N dotaccent ; B 84 559 194 669 ;
+C 11 ; WX 444.33 ; N cedilla ; B 129 -205 369 -22 ;
+C 12 ; WX 277.72 ; N ogonek ; B 9 -194 226 20 ;
+C 13 ; WX 277.72 ; N quotesinglbase ; B 112 -194 233 110 ;
+C 14 ; WX 444.33 ; N guilsinglleft ; B 94 26 330 457 ;
+C 15 ; WX 444.33 ; N guilsinglright ; B 94 26 360 457 ;
+C 16 ; WX 499.89 ; N quotedblleft ; B 148 390 466 694 ;
+C 17 ; WX 499.89 ; N quotedblright ; B 33 390 351 694 ;
+C 18 ; WX 499.89 ; N quotedblbase ; B 138 -194 456 110 ;
+C 19 ; WX 666.5 ; N guillemotleft ; B 94 26 553 457 ;
+C 20 ; WX 666.5 ; N guillemotright ; B 94 26 583 457 ;
+C 21 ; WX 499.89 ; N endash ; B 0 253 499 279 ; L hyphen emdash ;
+C 22 ; WX 999.78 ; N emdash ; B 0 253 999 279 ;
+C 23 ; WX 0 ; N compoundwordmark ; B 0 0 0 0 ;
+C 24 ; WX 388.78 ; N perthousand ; B 55 -56 333 347 ;
+C 25 ; WX 277.72 ; N dotlessi ; B 25 0 243 441 ;
+C 26 ; WX 305.5 ; N dotlessj ; B -55 -205 201 441 ;
+C 27 ; WX 583.17 ; N ff ; B 26 0 632 705 ; L i ffi ; L l ffl ;
+C 28 ; WX 555.44 ; N fi ; B 26 0 528 705 ;
+C 29 ; WX 555.44 ; N fl ; B 26 0 528 705 ;
+C 30 ; WX 833.11 ; N ffi ; B 26 0 807 705 ;
+C 31 ; WX 833.11 ; N ffl ; B 26 0 807 705 ;
+C 32 ; WX 499.89 ; N visiblespace ; B 42 -107 457 252 ;
+C 33 ; WX 277.72 ; N exclam ; B 84 0 194 716 ;
+C 34 ; WX 499.89 ; N quotedbl ; B 117 349 383 711 ;
+C 35 ; WX 833.11 ; N numbersign ; B 56 -194 776 694 ;
+C 36 ; WX 499.89 ; N dollar ; B 57 -56 444 750 ;
+C 37 ; WX 833.11 ; N percent ; B 56 -56 776 750 ;
+C 38 ; WX 777.61 ; N ampersand ; B 42 -22 727 716 ;
+C 39 ; WX 277.72 ; N quoteright ; B 84 390 208 694 ; L quoteright quotedblright ;
+C 40 ; WX 388.78 ; N parenleft ; B 97 -250 332 750 ;
+C 41 ; WX 388.78 ; N parenright ; B 56 -250 291 750 ;
+C 42 ; WX 499.89 ; N asterisk ; B 65 320 434 750 ;
+C 43 ; WX 777.61 ; N plus ; B 56 -83 721 583 ;
+C 44 ; WX 277.72 ; N comma ; B 84 -194 205 110 ; L comma quotedblbase ;
+C 45 ; WX 333.28 ; N hyphen ; B 11 184 276 246 ; L hyphen endash ;
+C 46 ; WX 277.72 ; N period ; B 84 0 194 110 ;
+C 47 ; WX 499.89 ; N slash ; B 56 -250 443 750 ;
+C 48 ; WX 499.89 ; N zero ; B 39 -22 460 666 ;
+C 49 ; WX 499.89 ; N one ; B 87 0 421 666 ;
+C 50 ; WX 499.89 ; N two ; B 50 0 449 666 ;
+C 51 ; WX 499.89 ; N three ; B 42 -22 457 666 ;
+C 52 ; WX 499.89 ; N four ; B 28 0 471 677 ;
+C 53 ; WX 499.89 ; N five ; B 50 -22 449 666 ;
+C 54 ; WX 499.89 ; N six ; B 42 -22 457 666 ;
+C 55 ; WX 499.89 ; N seven ; B 56 -22 485 676 ;
+C 56 ; WX 499.89 ; N eight ; B 42 -22 457 666 ;
+C 57 ; WX 499.89 ; N nine ; B 42 -22 457 666 ;
+C 58 ; WX 277.72 ; N colon ; B 84 0 194 430 ;
+C 59 ; WX 277.72 ; N semicolon ; B 84 -194 197 430 ;
+C 60 ; WX 777.61 ; N less ; B 83 -33 694 533 ; L less guillemotleft ;
+C 61 ; WX 777.61 ; N equal ; B 56 140 721 360 ;
+C 62 ; WX 777.61 ; N greater ; B 83 -33 694 533 ; L greater guillemotright ;
+C 63 ; WX 472.11 ; N question ; B 56 0 415 705 ;
+C 64 ; WX 777.61 ; N at ; B 56 -11 721 705 ;
+C 65 ; WX 749.83 ; N A ; B 18 0 703 716 ;
+C 66 ; WX 708.17 ; N B ; B 20 0 637 683 ;
+C 67 ; WX 722 ; N C ; B 56 -22 665 705 ;
+C 68 ; WX 763.72 ; N D ; B 19 0 693 683 ;
+C 69 ; WX 680.39 ; N E ; B 17 0 637 680 ;
+C 70 ; WX 652.61 ; N F ; B 17 0 596 680 ;
+C 71 ; WX 784.56 ; N G ; B 56 -22 735 705 ;
+C 72 ; WX 749.83 ; N H ; B 17 0 704 683 ;
+C 73 ; WX 361 ; N I ; B 12 0 321 683 ;
+C 74 ; WX 513.78 ; N J ; B 37 -22 465 683 ;
+C 75 ; WX 777.61 ; N K ; B 17 0 722 683 ;
+C 76 ; WX 624.83 ; N L ; B 17 0 568 683 ;
+C 77 ; WX 916.44 ; N M ; B 21 0 866 683 ;
+C 78 ; WX 749.83 ; N N ; B 17 0 704 683 ;
+C 79 ; WX 777.61 ; N O ; B 56 -22 721 705 ;
+C 80 ; WX 680.39 ; N P ; B 19 0 609 683 ;
+C 81 ; WX 777.61 ; N Q ; B 56 -194 727 705 ;
+C 82 ; WX 735.94 ; N R ; B 19 -22 718 683 ;
+C 83 ; WX 555.44 ; N S ; B 56 -22 498 705 ;
+C 84 ; WX 722 ; N T ; B 37 0 686 677 ;
+C 85 ; WX 749.83 ; N U ; B 17 -22 704 683 ;
+C 86 ; WX 749.83 ; N V ; B 5 -22 716 683 ;
+C 87 ; WX 1027.56 ; N W ; B 4 -22 995 683 ;
+C 88 ; WX 749.83 ; N X ; B 9 0 712 683 ;
+C 89 ; WX 749.83 ; N Y ; B -3 0 724 683 ;
+C 90 ; WX 611 ; N Z ; B 56 0 560 683 ;
+C 91 ; WX 277.72 ; N bracketleft ; B 103 -250 255 750 ;
+C 92 ; WX 499.89 ; N backslash ; B 56 -250 443 750 ;
+C 93 ; WX 277.72 ; N bracketright ; B 22 -250 174 750 ;
+C 94 ; WX 611 ; N asciicircum ; B 117 461 493 628 ;
+C 95 ; WX 777.61 ; N underscore ; B 83 -233 694 -193 ;
+C 96 ; WX 277.72 ; N quoteleft ; B 70 390 194 694 ; L quoteleft quotedblleft ;
+C 97 ; WX 499.89 ; N a ; B 40 -11 493 447 ;
+C 98 ; WX 555.44 ; N b ; B 26 -11 521 694 ;
+C 99 ; WX 444.33 ; N c ; B 33 -11 415 447 ;
+C 100 ; WX 555.44 ; N d ; B 33 -11 528 694 ;
+C 101 ; WX 444.33 ; N e ; B 28 -11 415 447 ;
+C 102 ; WX 305.5 ; N f ; B 26 0 354 705 ; L i fi ; L f ff ; L l fl ;
+C 103 ; WX 499.89 ; N g ; B 28 -206 485 452 ;
+C 104 ; WX 555.44 ; N h ; B 24 0 530 694 ;
+C 105 ; WX 277.72 ; N i ; B 25 0 243 669 ;
+C 106 ; WX 305.5 ; N j ; B -55 -205 201 669 ;
+C 107 ; WX 527.67 ; N k ; B 26 0 511 694 ;
+C 108 ; WX 277.72 ; N l ; B 25 0 251 694 ;
+C 109 ; WX 833.11 ; N m ; B 24 0 810 441 ;
+C 110 ; WX 555.44 ; N n ; B 24 0 530 441 ;
+C 111 ; WX 499.89 ; N o ; B 28 -11 471 447 ;
+C 112 ; WX 555.44 ; N p ; B 26 -194 521 441 ;
+C 113 ; WX 527.67 ; N q ; B 33 -194 529 441 ;
+C 114 ; WX 391.56 ; N r ; B 26 0 364 441 ;
+C 115 ; WX 394.33 ; N s ; B 33 -11 360 447 ;
+C 116 ; WX 388.78 ; N t ; B 19 -11 332 615 ;
+C 117 ; WX 555.44 ; N u ; B 24 -11 530 441 ;
+C 118 ; WX 527.67 ; N v ; B 19 -11 508 430 ;
+C 119 ; WX 722 ; N w ; B 18 -11 703 430 ;
+C 120 ; WX 527.67 ; N x ; B 12 0 516 430 ;
+C 121 ; WX 527.67 ; N y ; B 19 -205 508 430 ;
+C 122 ; WX 444.33 ; N z ; B 28 0 401 430 ;
+C 123 ; WX 499.89 ; N braceleft ; B 70 -250 429 750 ;
+C 124 ; WX 277.72 ; N bar ; B 119 -250 159 750 ;
+C 125 ; WX 499.89 ; N braceright ; B 70 -250 429 750 ;
+C 126 ; WX 611 ; N asciitilde ; B 83 572 527 668 ;
+C 127 ; WX 333.28 ; N hyphen ; B 11 184 276 246 ;
+C 128 ; WX 749.83 ; N Abreve ; B 18 0 703 891 ;
+C 129 ; WX 749.83 ; N Aogonek ; B 18 -188 740 716 ;
+C 130 ; WX 722 ; N Cacute ; B 56 -22 665 895 ;
+C 131 ; WX 722 ; N Ccaron ; B 56 -22 665 856 ;
+C 132 ; WX 763.72 ; N Dcaron ; B 19 0 693 856 ;
+C 133 ; WX 680.39 ; N Ecaron ; B 17 0 637 856 ;
+C 134 ; WX 680.39 ; N Eogonek ; B 17 -188 637 680 ;
+C 135 ; WX 784.56 ; N Gbreve ; B 56 -22 735 891 ;
+C 136 ; WX 624.83 ; N Lacute ; B 17 0 568 895 ;
+C 137 ; WX 624.83 ; N Lquoteright ; B 17 0 568 683 ;
+C 138 ; WX 624.83 ; N Lslash ; B 17 0 568 683 ;
+C 139 ; WX 749.83 ; N Nacute ; B 17 0 704 895 ;
+C 140 ; WX 749.83 ; N Ncaron ; B 17 0 704 856 ;
+C 141 ; WX 727.61 ; N Eng ; B 24 -22 676 694 ;
+C 142 ; WX 777.61 ; N Ohungarumlaut ; B 56 -22 721 895 ;
+C 143 ; WX 735.94 ; N Racute ; B 19 -22 718 895 ;
+C 144 ; WX 735.94 ; N Rcaron ; B 19 -22 718 856 ;
+C 145 ; WX 555.44 ; N Sacute ; B 56 -22 498 895 ;
+C 146 ; WX 555.44 ; N Scaron ; B 56 -22 498 856 ;
+C 147 ; WX 555.44 ; N Scedilla ; B 56 -205 498 705 ;
+C 148 ; WX 722 ; N Tcaron ; B 37 0 686 856 ;
+C 149 ; WX 722 ; N Tcedilla ; B 37 -205 686 677 ;
+C 150 ; WX 749.83 ; N Uhungarumlaut ; B 17 -22 704 895 ;
+C 151 ; WX 749.83 ; N Uring ; B 17 -22 704 913 ;
+C 152 ; WX 749.83 ; N Ydieresis ; B -3 0 724 839 ;
+C 153 ; WX 611 ; N Zacute ; B 56 0 560 895 ;
+C 154 ; WX 611 ; N Zcaron ; B 56 0 560 856 ;
+C 155 ; WX 611 ; N Zdotaccent ; B 56 0 560 891 ;
+C 156 ; WX 860.89 ; N IJ ; B 12 -22 798 683 ;
+C 157 ; WX 361 ; N Idotaccent ; B 12 0 321 877 ;
+C 158 ; WX 555.44 ; N dbar ; B 33 -11 528 694 ;
+C 159 ; WX 444.33 ; N section ; B 69 -205 374 705 ;
+C 160 ; WX 499.89 ; N abreve ; B 40 -11 493 694 ;
+C 161 ; WX 499.89 ; N aogonek ; B 40 -194 493 447 ;
+C 162 ; WX 444.33 ; N cacute ; B 33 -11 415 643 ;
+C 163 ; WX 444.33 ; N ccaron ; B 33 -11 415 604 ;
+C 164 ; WX 674.83 ; N dquoteright ; B 33 -11 665 694 ;
+C 165 ; WX 444.33 ; N ecaron ; B 28 -11 415 604 ;
+C 166 ; WX 444.33 ; N eogonek ; B 28 -194 415 447 ;
+C 167 ; WX 499.89 ; N gbreve ; B 28 -206 485 694 ;
+C 168 ; WX 277.72 ; N lacute ; B 25 0 282 907 ;
+C 169 ; WX 402.67 ; N lquoteright ; B 25 0 386 694 ;
+C 170 ; WX 277.72 ; N lslash ; B 18 0 258 694 ;
+C 171 ; WX 555.44 ; N nacute ; B 24 0 530 643 ;
+C 172 ; WX 555.44 ; N ncaron ; B 24 0 530 604 ;
+C 173 ; WX 555.44 ; N eng ; B 24 -205 452 441 ;
+C 174 ; WX 499.89 ; N ohungarumlaut ; B 28 -11 521 643 ;
+C 175 ; WX 391.56 ; N racute ; B 26 0 364 643 ;
+C 176 ; WX 391.56 ; N rcaron ; B 26 0 364 604 ;
+C 177 ; WX 394.33 ; N sacute ; B 33 -11 360 643 ;
+C 178 ; WX 394.33 ; N scaron ; B 33 -11 360 604 ;
+C 179 ; WX 394.33 ; N scedilla ; B 33 -205 360 447 ;
+C 180 ; WX 411 ; N tquoteright ; B 19 -11 401 704 ;
+C 181 ; WX 388.78 ; N tcedilla ; B 19 -205 359 615 ;
+C 182 ; WX 555.44 ; N uhungarumlaut ; B 24 -11 549 643 ;
+C 183 ; WX 555.44 ; N uring ; B 24 -11 530 661 ;
+C 184 ; WX 527.67 ; N ydieresis ; B 19 -205 508 586 ;
+C 185 ; WX 444.33 ; N zacute ; B 28 0 401 643 ;
+C 186 ; WX 444.33 ; N zcaron ; B 28 0 401 604 ;
+C 187 ; WX 444.33 ; N zdotaccent ; B 28 0 402 669 ;
+C 188 ; WX 583.17 ; N ij ; B 33 -205 485 669 ;
+C 189 ; WX 277.72 ; N exclamdown ; B 84 -216 194 500 ;
+C 190 ; WX 472.11 ; N questiondown ; B 56 -205 415 500 ;
+C 191 ; WX 638.72 ; N sterling ; B 56 -11 620 709 ;
+C 192 ; WX 749.83 ; N Agrave ; B 18 0 703 895 ;
+C 193 ; WX 749.83 ; N Aacute ; B 18 0 703 895 ;
+C 194 ; WX 749.83 ; N Acircumflex ; B 18 0 703 891 ;
+C 195 ; WX 749.83 ; N Atilde ; B 18 0 703 891 ;
+C 196 ; WX 749.83 ; N Adieresis ; B 18 0 703 839 ;
+C 197 ; WX 749.83 ; N Aring ; B 18 0 703 872 ;
+C 198 ; WX 902.56 ; N AE ; B 18 0 860 683 ;
+C 199 ; WX 722 ; N Ccedilla ; B 56 -205 665 705 ;
+C 200 ; WX 680.39 ; N Egrave ; B 17 0 637 895 ;
+C 201 ; WX 680.39 ; N Eacute ; B 17 0 637 895 ;
+C 202 ; WX 680.39 ; N Ecircumflex ; B 17 0 637 891 ;
+C 203 ; WX 680.39 ; N Edieresis ; B 17 0 637 839 ;
+C 204 ; WX 361 ; N Igrave ; B 12 0 321 895 ;
+C 205 ; WX 361 ; N Iacute ; B 12 0 321 895 ;
+C 206 ; WX 361 ; N Icircumflex ; B 12 0 321 891 ;
+C 207 ; WX 361 ; N Idieresis ; B 12 0 321 839 ;
+C 208 ; WX 763.72 ; N Eth ; B 19 0 693 683 ;
+C 209 ; WX 749.83 ; N Ntilde ; B 17 0 704 891 ;
+C 210 ; WX 777.61 ; N Ograve ; B 56 -22 721 895 ;
+C 211 ; WX 777.61 ; N Oacute ; B 56 -22 721 895 ;
+C 212 ; WX 777.61 ; N Ocircumflex ; B 56 -22 721 891 ;
+C 213 ; WX 777.61 ; N Otilde ; B 56 -22 721 891 ;
+C 214 ; WX 777.61 ; N Odieresis ; B 56 -22 721 839 ;
+C 215 ; WX 1013.67 ; N OE ; B 56 -22 971 705 ;
+C 216 ; WX 777.61 ; N Oslash ; B 56 -57 721 740 ;
+C 217 ; WX 749.83 ; N Ugrave ; B 17 -22 704 895 ;
+C 218 ; WX 749.83 ; N Uacute ; B 17 -22 704 895 ;
+C 219 ; WX 749.83 ; N Ucircumflex ; B 17 -22 704 891 ;
+C 220 ; WX 749.83 ; N Udieresis ; B 17 -22 704 839 ;
+C 221 ; WX 749.83 ; N Yacute ; B -3 0 724 895 ;
+C 222 ; WX 624.83 ; N Thorn ; B 20 0 554 683 ;
+C 223 ; WX 1110.83 ; N Germandbls ; B 56 -22 1054 705 ;
+C 224 ; WX 499.89 ; N agrave ; B 40 -11 493 643 ;
+C 225 ; WX 499.89 ; N aacute ; B 40 -11 493 643 ;
+C 226 ; WX 499.89 ; N acircumflex ; B 40 -11 493 639 ;
+C 227 ; WX 499.89 ; N atilde ; B 40 -11 493 669 ;
+C 228 ; WX 499.89 ; N adieresis ; B 40 -11 493 586 ;
+C 229 ; WX 499.89 ; N aring ; B 40 -11 493 661 ;
+C 230 ; WX 722 ; N ae ; B 43 -11 693 447 ;
+C 231 ; WX 444.33 ; N ccedilla ; B 33 -205 415 447 ;
+C 232 ; WX 444.33 ; N egrave ; B 28 -11 415 643 ;
+C 233 ; WX 444.33 ; N eacute ; B 28 -11 415 643 ;
+C 234 ; WX 444.33 ; N ecircumflex ; B 28 -11 415 639 ;
+C 235 ; WX 444.33 ; N edieresis ; B 28 -11 415 586 ;
+C 236 ; WX 277.72 ; N igrave ; B -6 0 243 643 ;
+C 237 ; WX 277.72 ; N iacute ; B 25 0 282 643 ;
+C 238 ; WX 277.72 ; N icircumflex ; B 3 0 274 639 ;
+C 239 ; WX 333.28 ; N idieresis ; B -9 0 289 586 ;
+C 240 ; WX 499.89 ; N eth ; B 28 -11 471 694 ;
+C 241 ; WX 555.44 ; N ntilde ; B 24 0 530 669 ;
+C 242 ; WX 499.89 ; N ograve ; B 28 -11 471 643 ;
+C 243 ; WX 499.89 ; N oacute ; B 28 -11 471 643 ;
+C 244 ; WX 499.89 ; N ocircumflex ; B 28 -11 471 639 ;
+C 245 ; WX 499.89 ; N otilde ; B 28 -11 471 669 ;
+C 246 ; WX 499.89 ; N odieresis ; B 28 -11 471 586 ;
+C 247 ; WX 777.61 ; N oe ; B 28 -11 749 447 ;
+C 248 ; WX 499.89 ; N oslash ; B 33 -103 466 534 ;
+C 249 ; WX 555.44 ; N ugrave ; B 24 -11 530 643 ;
+C 250 ; WX 555.44 ; N uacute ; B 24 -11 530 643 ;
+C 251 ; WX 555.44 ; N ucircumflex ; B 24 -11 530 639 ;
+C 252 ; WX 555.44 ; N udieresis ; B 24 -11 530 586 ;
+C 253 ; WX 527.67 ; N yacute ; B 19 -205 508 643 ;
+C 254 ; WX 555.44 ; N thorn ; B 25 -205 521 694 ;
+C 255 ; WX 499.89 ; N germandbls ; B 26 -11 471 705 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 471
+KPX A C -27.77
+KPX A G -27.77
+KPX A O -27.77
+KPX A Q -27.77
+KPX A T -83.31
+KPX A U -27.77
+KPX A V -111.08
+KPX A W -111.08
+KPX A Y -83.31
+KPX A t -27.77
+KPX Aacute C -27.77
+KPX Aacute G -27.77
+KPX Aacute O -27.77
+KPX Aacute Q -27.77
+KPX Aacute T -83.31
+KPX Aacute U -27.77
+KPX Aacute V -111.08
+KPX Aacute W -111.08
+KPX Aacute Y -83.31
+KPX Aacute t -27.77
+KPX Abreve C -27.77
+KPX Abreve G -27.77
+KPX Abreve O -27.77
+KPX Abreve Q -27.77
+KPX Abreve T -83.31
+KPX Abreve U -27.77
+KPX Abreve V -111.08
+KPX Abreve W -111.08
+KPX Abreve Y -83.31
+KPX Abreve t -27.77
+KPX Acircumflex C -27.77
+KPX Acircumflex G -27.77
+KPX Acircumflex O -27.77
+KPX Acircumflex Q -27.77
+KPX Acircumflex T -83.31
+KPX Acircumflex U -27.77
+KPX Acircumflex V -111.08
+KPX Acircumflex W -111.08
+KPX Acircumflex Y -83.31
+KPX Acircumflex t -27.77
+KPX Adieresis C -27.77
+KPX Adieresis G -27.77
+KPX Adieresis O -27.77
+KPX Adieresis Q -27.77
+KPX Adieresis T -83.31
+KPX Adieresis U -27.77
+KPX Adieresis V -111.08
+KPX Adieresis W -111.08
+KPX Adieresis Y -83.31
+KPX Adieresis t -27.77
+KPX Agrave C -27.77
+KPX Agrave G -27.77
+KPX Agrave O -27.77
+KPX Agrave Q -27.77
+KPX Agrave T -83.31
+KPX Agrave U -27.77
+KPX Agrave V -111.08
+KPX Agrave W -111.08
+KPX Agrave Y -83.31
+KPX Agrave t -27.77
+KPX Aogonek C -27.77
+KPX Aogonek G -27.77
+KPX Aogonek O -27.77
+KPX Aogonek Q -27.77
+KPX Aogonek T -83.31
+KPX Aogonek U -27.77
+KPX Aogonek V -111.08
+KPX Aogonek W -111.08
+KPX Aogonek Y -83.31
+KPX Aogonek t -27.77
+KPX Aring C -27.77
+KPX Aring G -27.77
+KPX Aring O -27.77
+KPX Aring Q -27.77
+KPX Aring T -83.31
+KPX Aring U -27.77
+KPX Aring V -111.08
+KPX Aring W -111.08
+KPX Aring Y -83.31
+KPX Aring t -27.77
+KPX Atilde C -27.77
+KPX Atilde G -27.77
+KPX Atilde O -27.77
+KPX Atilde Q -27.77
+KPX Atilde T -83.31
+KPX Atilde U -27.77
+KPX Atilde V -111.08
+KPX Atilde W -111.08
+KPX Atilde Y -83.31
+KPX Atilde t -27.77
+KPX D A -27.77
+KPX D V -27.77
+KPX D W -27.77
+KPX D X -27.77
+KPX D Y -27.77
+KPX F A -111.08
+KPX F C -27.77
+KPX F G -27.77
+KPX F O -27.77
+KPX F Q -27.77
+KPX F a -83.31
+KPX F e -83.31
+KPX F o -83.31
+KPX F r -83.31
+KPX F u -83.31
+KPX I I 27.77
+KPX K C -27.77
+KPX K G -27.77
+KPX K O -27.77
+KPX K Q -27.77
+KPX L T -83.31
+KPX L V -111.08
+KPX L W -111.08
+KPX L Y -83.31
+KPX O A -27.77
+KPX O V -27.77
+KPX O W -27.77
+KPX O X -27.77
+KPX O Y -27.77
+KPX P A -83.31
+KPX P a -27.77
+KPX P aacute -27.77
+KPX P acircumflex -27.77
+KPX P acircumflex -27.77
+KPX P adieresis -27.77
+KPX P ae -27.77
+KPX P agrave -27.77
+KPX P aogonek -27.77
+KPX P aring -27.77
+KPX P atilde -27.77
+KPX P cacute -27.77
+KPX P comma -83.31
+KPX P e -27.77
+KPX P eacute -27.77
+KPX P ecaron -27.77
+KPX P ecircumflex -27.77
+KPX P edieresis -27.77
+KPX P egrave -27.77
+KPX P eogonek -27.77
+KPX P o -27.77
+KPX P oacute -27.77
+KPX P ocircumflex -27.77
+KPX P odieresis -27.77
+KPX P oe -27.77
+KPX P ograve -27.77
+KPX P ohungarumlaut -27.77
+KPX P otilde -27.77
+KPX P period -83.31
+KPX R C -27.77
+KPX R G -27.77
+KPX R O -27.77
+KPX R Q -27.77
+KPX R T -83.31
+KPX R U -27.77
+KPX R V -111.08
+KPX R W -111.08
+KPX R Y -83.31
+KPX R t -27.77
+KPX T A -83.31
+KPX T a -83.31
+KPX T e -83.31
+KPX T o -83.31
+KPX T r -83.31
+KPX T u -83.31
+KPX T y -27.77
+KPX V A -111.08
+KPX V C -27.77
+KPX V G -27.77
+KPX V O -27.77
+KPX V Q -27.77
+KPX V a -83.31
+KPX V e -83.31
+KPX V o -83.31
+KPX V r -83.31
+KPX V u -83.31
+KPX W A -111.08
+KPX W C -27.77
+KPX W G -27.77
+KPX W O -27.77
+KPX W Q -27.77
+KPX W a -83.31
+KPX W e -83.31
+KPX W o -83.31
+KPX W r -83.31
+KPX W u -83.31
+KPX X C -27.77
+KPX X G -27.77
+KPX X O -27.77
+KPX X Q -27.77
+KPX Y A -83.31
+KPX Y a -83.31
+KPX Y e -83.31
+KPX Y o -83.31
+KPX Y r -83.31
+KPX Y u -83.31
+KPX a j 55.54
+KPX a v -27.77
+KPX a w -27.77
+KPX a y -27.77
+KPX b c 27.77
+KPX b cacute 27.77
+KPX b ccaron 27.77
+KPX b ccedilla 27.77
+KPX b d 27.77
+KPX b e 27.77
+KPX b eacute 27.77
+KPX b ecaron 27.77
+KPX b ecircumflex 27.77
+KPX b edieresis 27.77
+KPX b egrave 27.77
+KPX b eogonek 27.77
+KPX b j 55.54
+KPX b o 27.77
+KPX b oacute 27.77
+KPX b ocircumflex 27.77
+KPX b odieresis 27.77
+KPX b oe 27.77
+KPX b ograve 27.77
+KPX b ohungarumlaut 27.77
+KPX b otilde 27.77
+KPX b q 27.77
+KPX b v -27.77
+KPX b w -27.77
+KPX b x -27.77
+KPX b y -27.77
+KPX c h -27.77
+KPX c k -27.77
+KPX f bracketright 77.76
+KPX f exclam 77.76
+KPX f parenright 77.76
+KPX f question 77.76
+KPX f quoteright 77.76
+KPX ff bracketright 77.76
+KPX ff exclam 77.76
+KPX ff parenright 77.76
+KPX ff question 77.76
+KPX ff quoteright 77.76
+KPX g j 27.77
+KPX h b -27.77
+KPX h t -27.77
+KPX h u -27.77
+KPX h uacute -27.77
+KPX h ucircumflex -27.77
+KPX h udieresis -27.77
+KPX h ugrave -27.77
+KPX h uhungarumlaut -27.77
+KPX h uring -27.77
+KPX h v -27.77
+KPX h w -27.77
+KPX h y -27.77
+KPX k a -27.77
+KPX k a -55.54
+KPX k aacute -27.77
+KPX k aacute -55.54
+KPX k acircumflex -55.54
+KPX k acircumflex -55.54
+KPX k acircumflex -27.77
+KPX k acircumflex -27.77
+KPX k adieresis -27.77
+KPX k adieresis -55.54
+KPX k ae -55.54
+KPX k ae -27.77
+KPX k agrave -55.54
+KPX k agrave -27.77
+KPX k aogonek -55.54
+KPX k aogonek -27.77
+KPX k aring -55.54
+KPX k aring -27.77
+KPX k atilde -27.77
+KPX k atilde -55.54
+KPX k c -27.77
+KPX k cacute -27.77
+KPX k cacute -27.77
+KPX k cacute -55.54
+KPX k ccaron -27.77
+KPX k ccedilla -27.77
+KPX k e -27.77
+KPX k eacute -27.77
+KPX k ecaron -27.77
+KPX k ecircumflex -27.77
+KPX k edieresis -27.77
+KPX k egrave -27.77
+KPX k eogonek -27.77
+KPX k o -27.77
+KPX k oacute -27.77
+KPX k ocircumflex -27.77
+KPX k odieresis -27.77
+KPX k oe -27.77
+KPX k ograve -27.77
+KPX k ohungarumlaut -27.77
+KPX k otilde -27.77
+KPX m b -27.77
+KPX m t -27.77
+KPX m u -27.77
+KPX m uacute -27.77
+KPX m ucircumflex -27.77
+KPX m udieresis -27.77
+KPX m ugrave -27.77
+KPX m uhungarumlaut -27.77
+KPX m uring -27.77
+KPX m v -27.77
+KPX m w -27.77
+KPX m y -27.77
+KPX n b -27.77
+KPX n t -27.77
+KPX n u -27.77
+KPX n uacute -27.77
+KPX n ucircumflex -27.77
+KPX n udieresis -27.77
+KPX n ugrave -27.77
+KPX n uhungarumlaut -27.77
+KPX n uring -27.77
+KPX n v -27.77
+KPX n w -27.77
+KPX n y -27.77
+KPX o c 27.77
+KPX o cacute 27.77
+KPX o ccaron 27.77
+KPX o ccedilla 27.77
+KPX o d 27.77
+KPX o e 27.77
+KPX o eacute 27.77
+KPX o ecaron 27.77
+KPX o ecircumflex 27.77
+KPX o edieresis 27.77
+KPX o egrave 27.77
+KPX o eogonek 27.77
+KPX o j 55.54
+KPX o o 27.77
+KPX o oacute 27.77
+KPX o ocircumflex 27.77
+KPX o odieresis 27.77
+KPX o oe 27.77
+KPX o ograve 27.77
+KPX o ohungarumlaut 27.77
+KPX o otilde 27.77
+KPX o q 27.77
+KPX o v -27.77
+KPX o w -27.77
+KPX o x -27.77
+KPX o y -27.77
+KPX p c 27.77
+KPX p cacute 27.77
+KPX p ccaron 27.77
+KPX p ccedilla 27.77
+KPX p d 27.77
+KPX p e 27.77
+KPX p eacute 27.77
+KPX p ecaron 27.77
+KPX p ecircumflex 27.77
+KPX p edieresis 27.77
+KPX p egrave 27.77
+KPX p eogonek 27.77
+KPX p j 55.54
+KPX p o 27.77
+KPX p oacute 27.77
+KPX p ocircumflex 27.77
+KPX p odieresis 27.77
+KPX p oe 27.77
+KPX p ograve 27.77
+KPX p ohungarumlaut 27.77
+KPX p otilde 27.77
+KPX p q 27.77
+KPX p v -27.77
+KPX p w -27.77
+KPX p x -27.77
+KPX p y -27.77
+KPX quoteright exclam 111.08
+KPX quoteright question 111.08
+KPX t w -27.77
+KPX t y -27.77
+KPX u w -27.77
+KPX v a -27.77
+KPX v a -55.54
+KPX v aacute -27.77
+KPX v aacute -55.54
+KPX v acircumflex -55.54
+KPX v acircumflex -27.77
+KPX v acircumflex -27.77
+KPX v acircumflex -55.54
+KPX v adieresis -27.77
+KPX v adieresis -55.54
+KPX v ae -27.77
+KPX v ae -55.54
+KPX v agrave -27.77
+KPX v agrave -55.54
+KPX v aogonek -55.54
+KPX v aogonek -27.77
+KPX v aring -55.54
+KPX v aring -27.77
+KPX v atilde -55.54
+KPX v atilde -27.77
+KPX v c -27.77
+KPX v cacute -55.54
+KPX v cacute -27.77
+KPX v cacute -27.77
+KPX v ccaron -27.77
+KPX v ccedilla -27.77
+KPX v e -27.77
+KPX v eacute -27.77
+KPX v ecaron -27.77
+KPX v ecircumflex -27.77
+KPX v edieresis -27.77
+KPX v egrave -27.77
+KPX v eogonek -27.77
+KPX v o -27.77
+KPX v oacute -27.77
+KPX v ocircumflex -27.77
+KPX v odieresis -27.77
+KPX v oe -27.77
+KPX v ograve -27.77
+KPX v ohungarumlaut -27.77
+KPX v otilde -27.77
+KPX w a -27.77
+KPX w aacute -27.77
+KPX w acircumflex -27.77
+KPX w acircumflex -27.77
+KPX w adieresis -27.77
+KPX w ae -27.77
+KPX w agrave -27.77
+KPX w aogonek -27.77
+KPX w aring -27.77
+KPX w atilde -27.77
+KPX w c -27.77
+KPX w cacute -27.77
+KPX w cacute -27.77
+KPX w ccaron -27.77
+KPX w ccedilla -27.77
+KPX w e -27.77
+KPX w eacute -27.77
+KPX w ecaron -27.77
+KPX w ecircumflex -27.77
+KPX w edieresis -27.77
+KPX w egrave -27.77
+KPX w eogonek -27.77
+KPX w o -27.77
+KPX w oacute -27.77
+KPX w ocircumflex -27.77
+KPX w odieresis -27.77
+KPX w oe -27.77
+KPX w ograve -27.77
+KPX w ohungarumlaut -27.77
+KPX w otilde -27.77
+KPX y a -27.77
+KPX y aacute -27.77
+KPX y acircumflex -27.77
+KPX y acircumflex -27.77
+KPX y adieresis -27.77
+KPX y ae -27.77
+KPX y agrave -27.77
+KPX y aogonek -27.77
+KPX y aring -27.77
+KPX y atilde -27.77
+KPX y cacute -27.77
+KPX y comma -83.31
+KPX y e -27.77
+KPX y eacute -27.77
+KPX y ecaron -27.77
+KPX y ecircumflex -27.77
+KPX y edieresis -27.77
+KPX y egrave -27.77
+KPX y eogonek -27.77
+KPX y o -27.77
+KPX y oacute -27.77
+KPX y ocircumflex -27.77
+KPX y odieresis -27.77
+KPX y oe -27.77
+KPX y ograve -27.77
+KPX y ohungarumlaut -27.77
+KPX y otilde -27.77
+KPX y period -83.31
+EndKernPairs
+EndKernData
+EndFontMetrics
--- /dev/null
+#include "image.h"
+
+float
+gauss(int x,float std) {
+ return 1.0/(sqrt(2.0*PI)*std)*exp(-(float)(x)*(float)(x)/(2*std*std));
+}
+
+/* Counters are as follows
+ l: lines
+ i: columns
+ c: filter coeffs
+ ch: channels
+ pc: coeff equalization
+*/
+
+
+
+void
+i_gaussian(i_img *im,float stdev) {
+ int i,l,c,ch;
+ float pc;
+ float coeff[21];
+ i_color rcolor;
+ float res[11];
+ i_img timg;
+
+ mm_log((1,"i_gaussian(im* 0x%x,stdev %.2f)\n",im,stdev));
+
+ i_img_empty_ch(&timg,im->xsize,im->ysize,im->channels);
+
+ for(i=0;i<11;i++) coeff[10+i]=coeff[10-i]=gauss(i,stdev);
+ pc=0;
+ for(i=0;i<21;i++) pc+=coeff[i];
+ for(i=0;i<21;i++) coeff[i]/=pc;
+
+
+ for(l=0;l<im->ysize;l++) {
+ for(i=0;i<im->xsize;i++) {
+ pc=0.0;
+ for(ch=0;ch<im->channels;ch++) res[ch]=0;
+ for(c=0;c<21;c++)
+ if (i_gpix(im,i+c-10,l,&rcolor)!=-1) {
+ for(ch=0;ch<im->channels;ch++) res[ch]+=(float)(rcolor.channel[ch])*coeff[c];
+ pc+=coeff[c];
+ }
+ for(ch=0;ch<im->channels;ch++) rcolor.channel[ch]=(unsigned char)(((res[ch]/(float)(pc)>255.0)?255.0:res[ch]/(float)(pc)));
+ i_ppix(&timg,i,l,&rcolor);
+ }
+ }
+
+ for(l=0;l<im->xsize;l++) {
+ for(i=0;i<im->ysize;i++) {
+ pc=0.0;
+ for(ch=0;ch<im->channels;ch++) res[ch]=0;
+ for(c=0;c<21;c++)
+ if (i_gpix(&timg,l,i+c-10,&rcolor)!=-1) {
+ for(ch=0;ch<im->channels;ch++) res[ch]+=(float)(rcolor.channel[ch])*coeff[c];
+ pc+=coeff[c];
+ }
+ for(ch=0;ch<im->channels;ch++) rcolor.channel[ch]=(unsigned char)(((res[ch]/(float)(pc)>255.0)?255.0:res[ch]/(float)(pc)));
+ i_ppix(im,l,i,&rcolor);
+ }
+ }
+}
+
+
+
+
+
+
+
--- /dev/null
+#include "image.h"
+#include <gif_lib.h>
+
+
+#if IM_GIFMAJOR >= 4
+
+struct gif_scalar_info {
+ char *data;
+ int length;
+ int cpos;
+};
+
+int
+my_gif_inputfunc(GifFileType* gft, GifByteType *buf,int length) {
+ struct gif_scalar_info *gsi=(struct gif_scalar_info *)gft->UserData;
+ /* fprintf(stderr,"my_gif_inputfunc: length=%d cpos=%d tlength=%d\n",length,gsi->cpos,gsi->length); */
+
+ if (gsi->cpos == gsi->length) return 0;
+ if (gsi->cpos+length > gsi->length) length=gsi->length-gsi->cpos; /* Don't read too much */
+ memcpy(buf,gsi->data+gsi->cpos,length);
+ gsi->cpos+=length;
+ return length;
+}
+
+#endif
+
+/*
+ This file needs a complete rewrite
+
+ This file needs a complete rewrite
+
+ Maybe not anymore, though reading still needs to support reading
+ all those gif properties.
+*/
+
+/* Make some variables global, so we could access them faster: */
+
+static int
+ ImageNum = 0,
+ BackGround = 0,
+ ColorMapSize = 0,
+ InterlacedOffset[] = { 0, 4, 2, 1 }, /* The way Interlaced image should. */
+ InterlacedJumps[] = { 8, 8, 4, 2 }; /* be read - offsets and jumps... */
+static ColorMapObject *ColorMap;
+
+i_img *
+i_readgif_low(GifFileType *GifFile, int **colour_table, int *colours) {
+ i_img *im;
+ int i, j, Size, Row, Col, Width, Height, ExtCode, Count, x;
+ GifRecordType RecordType;
+ GifByteType *Extension;
+
+ GifRowType GifRow;
+ static GifColorType *ColorMapEntry;
+ i_color col;
+
+ /* unsigned char *Buffer, *BufferP; */
+
+ mm_log((1,"i_readgif_low(GifFile %p, colour_table %p, colours %p)\n", GifFile, colour_table, colours));
+
+ BackGround = GifFile->SBackGroundColor;
+ ColorMap = (GifFile->Image.ColorMap ? GifFile->Image.ColorMap : GifFile->SColorMap);
+ ColorMapSize = ColorMap->ColorCount;
+
+ /* **************************************** */
+ if(colour_table != NULL) {
+ int q;
+ *colour_table=mymalloc(sizeof(int *) * ColorMapSize * 3);
+ if(*colour_table == NULL)
+ m_fatal(0,"Failed to allocate memory for GIF colour table, aborted.");
+
+ memset(*colour_table, 0, sizeof(int *) * ColorMapSize * 3);
+
+ for(q=0; q<ColorMapSize; q++) {
+ ColorMapEntry = &ColorMap->Colors[q];
+ (*colour_table)[q*3 + 0]=ColorMapEntry->Red;
+ (*colour_table)[q*3 + 1]=ColorMapEntry->Green;
+ (*colour_table)[q*3 + 2]=ColorMapEntry->Blue;
+ }
+ }
+
+ if(colours != NULL) {
+ *colours = ColorMapSize;
+ }
+
+ /* **************************************** */
+ im=i_img_empty_ch(NULL,GifFile->SWidth,GifFile->SHeight,3);
+
+ Size = GifFile->SWidth * sizeof(GifPixelType);
+
+ if ((GifRow = (GifRowType) mymalloc(Size)) == NULL)
+ m_fatal(0,"Failed to allocate memory required, aborted."); /* First row. */
+
+ for (i = 0; i < GifFile->SWidth; i++) GifRow[i] = GifFile->SBackGroundColor;
+
+ /* Scan the content of the GIF file and load the image(s) in: */
+ do {
+ if (DGifGetRecordType(GifFile, &RecordType) == GIF_ERROR) {
+ PrintGifError();
+ exit(-1);
+ }
+
+ switch (RecordType) {
+ case IMAGE_DESC_RECORD_TYPE:
+ if (DGifGetImageDesc(GifFile) == GIF_ERROR) {
+ PrintGifError();
+ exit(-1);
+ }
+ Row = GifFile->Image.Top; /* Image Position relative to Screen. */
+ Col = GifFile->Image.Left;
+ Width = GifFile->Image.Width;
+ Height = GifFile->Image.Height;
+ ImageNum++;
+ mm_log((1,"i_readgif: Image %d at (%d, %d) [%dx%d]: \n",ImageNum, Col, Row, Width, Height));
+
+ if (GifFile->Image.Left + GifFile->Image.Width > GifFile->SWidth ||
+ GifFile->Image.Top + GifFile->Image.Height > GifFile->SHeight) {
+ fprintf(stderr, "Image %d is not confined to screen dimension, aborted.\n",ImageNum);
+ return(0);
+ }
+ if (GifFile->Image.Interlace) {
+
+ for (Count = i = 0; i < 4; i++) for (j = Row + InterlacedOffset[i]; j < Row + Height; j += InterlacedJumps[i]) {
+ Count++;
+ if (DGifGetLine(GifFile, &GifRow[Col], Width) == GIF_ERROR) {
+ mm_log((1,"fatal"));
+ exit(-1);
+ }
+
+ for (x = 0; x < GifFile->SWidth; x++) {
+ ColorMapEntry = &ColorMap->Colors[GifRow[x]];
+ col.rgb.r = ColorMapEntry->Red;
+ col.rgb.g = ColorMapEntry->Green;
+ col.rgb.b = ColorMapEntry->Blue;
+ i_ppix(im,x,j,&col);
+ }
+
+ }
+ }
+ else {
+ for (i = 0; i < Height; i++) {
+ if (DGifGetLine(GifFile, &GifRow[Col], Width) == GIF_ERROR) {
+ mm_log((1,"fatal\n"));
+ exit(-1);
+ }
+
+ for (x = 0; x < GifFile->SWidth; x++) {
+ ColorMapEntry = &ColorMap->Colors[GifRow[x]];
+ col.rgb.r = ColorMapEntry->Red;
+ col.rgb.g = ColorMapEntry->Green;
+ col.rgb.b = ColorMapEntry->Blue;
+ i_ppix(im,x,Row,&col);
+ }
+ Row++;
+ }
+ }
+ break;
+ case EXTENSION_RECORD_TYPE:
+ /* Skip any extension blocks in file: */
+ if (DGifGetExtension(GifFile, &ExtCode, &Extension) == GIF_ERROR) {
+ mm_log((1,"fatal\n"));
+ exit(-1);
+ }
+ while (Extension != NULL) {
+ if (DGifGetExtensionNext(GifFile, &Extension) == GIF_ERROR) {
+ mm_log((1,"fatal\n"));
+ exit(-1);
+ }
+ }
+ break;
+ case TERMINATE_RECORD_TYPE:
+ break;
+ default: /* Should be traps by DGifGetRecordType. */
+ break;
+ }
+ } while (RecordType != TERMINATE_RECORD_TYPE);
+
+ myfree(GifRow);
+
+ if (DGifCloseFile(GifFile) == GIF_ERROR) {
+ PrintGifError();
+ exit(-1);
+ }
+ return im;
+}
+
+
+i_img *
+i_readgif(int fd, int **colour_table, int *colours) {
+ GifFileType *GifFile;
+
+ mm_log((1,"i_readgif(fd %d, colour_table %p, colours %p)\n", fd, colour_table, colours));
+
+ if ((GifFile = DGifOpenFileHandle(fd)) == NULL) {
+ mm_log((1,"i_readgif: Unable to open file\n"));
+ return NULL;
+ }
+
+ return i_readgif_low(GifFile, colour_table, colours);
+}
+
+
+undef_int
+i_writegif(i_img *im, int fd, int max_colors, int pixdev, int fixedlen, i_color fixed[])
+{
+ i_color colors[256];
+ i_quantize quant;
+ i_gif_opts opts;
+
+ memset(&quant, 0, sizeof(quant));
+ memset(&opts, 0, sizeof(opts));
+ quant.make_colors = mc_addi;
+ quant.mc_colors = colors;
+ quant.mc_size = 1<<max_colors;
+ quant.mc_count = fixedlen;
+ memcpy(colors, fixed, fixedlen * sizeof(i_color));
+ quant.translate = pt_perturb;
+ quant.perturb = pixdev;
+ return i_writegif_gen(&quant, fd, &im, 1, &opts);
+}
+
+undef_int
+i_writegifmc(i_img *im, int fd, int max_colors) {
+ i_color colors[256];
+ i_quantize quant;
+ i_gif_opts opts;
+
+ memset(&quant, 0, sizeof(quant));
+ memset(&opts, 0, sizeof(opts));
+ quant.make_colors = mc_none; /* ignored for pt_giflib */
+ quant.mc_colors = colors;
+ quant.mc_size = 1 << max_colors;
+ quant.mc_count = 0;
+ quant.translate = pt_giflib;
+ return i_writegif_gen(&quant, fd, &im, 1, &opts);
+}
+
+#if 1
+
+undef_int
+i_writegifex(i_img *im, int fd) {
+ return 0;
+}
+
+#else
+
+/* I don't think this works
+ note that RedBuffer is never allocated - TC
+*/
+
+undef_int
+i_writegifex(i_img *im,int fd) {
+ int colors, xsize, ysize, channels;
+ int x,y,ColorMapSize;
+ unsigned long Size;
+
+ struct octt *ct;
+
+ GifByteType *RedBuffer = NULL, *GreenBuffer = NULL, *BlueBuffer = NULL,*OutputBuffer = NULL;
+ ColorMapObject *OutputColorMap = NULL;
+ GifFileType *GifFile;
+ GifByteType *Ptr;
+
+ i_color val;
+
+ mm_log((1,"i_writegif(0x%x,fd %d)\n",im,fd));
+
+ if (!(im->channels==1 || im->channels==3)) { fprintf(stderr,"Unable to write gif, improper colorspace.\n"); exit(3); }
+
+ xsize=im->xsize;
+ ysize=im->ysize;
+ channels=im->channels;
+
+ colors=0;
+ ct=octt_new();
+
+ colors=0;
+ for(x=0;x<xsize;x++) for(y=0;y<ysize;y++) {
+ i_gpix(im,x,y,&val);
+ colors+=octt_add(ct,val.rgb.r,val.rgb.g,val.rgb.b);
+ /* if (colors > maxc) { octt_delete(ct); }
+ We'll just bite the bullet */
+ }
+
+ ColorMapSize = (colors > 256) ? 256 : colors;
+
+ Size = ((long) im->xsize) * im->ysize * sizeof(GifByteType);
+
+ if ((OutputColorMap = MakeMapObject(ColorMapSize, NULL)) == NULL)
+ m_fatal(0,"Failed to allocate memory for Output colormap.");
+ if ((OutputBuffer = (GifByteType *) mymalloc(im->xsize * im->ysize * sizeof(GifByteType))) == NULL)
+ m_fatal(0,"Failed to allocate memory for output buffer.");
+
+ if (QuantizeBuffer(im->xsize, im->ysize, &ColorMapSize, RedBuffer, GreenBuffer, BlueBuffer,
+ OutputBuffer, OutputColorMap->Colors) == GIF_ERROR) {
+ mm_log((1,"Error in QuantizeBuffer, unable to write image.\n"));
+ return(0);
+ }
+
+
+ myfree(RedBuffer);
+ if (im->channels == 3) { myfree(GreenBuffer); myfree(BlueBuffer); }
+
+ if ((GifFile = EGifOpenFileHandle(fd)) == NULL) {
+ mm_log((1,"Error in EGifOpenFileHandle, unable to write image.\n"));
+ return(0);
+ }
+
+ if (EGifPutScreenDesc(GifFile,im->xsize, im->ysize, colors, 0,OutputColorMap) == GIF_ERROR ||
+ EGifPutImageDesc(GifFile,0, 0, im->xsize, im->ysize, FALSE, NULL) == GIF_ERROR) {
+ mm_log((1,"Error in EGifOpenFileHandle, unable to write image.\n"));
+ if (GifFile != NULL) EGifCloseFile(GifFile);
+ return(0);
+ }
+
+ Ptr = OutputBuffer;
+
+ for (y = 0; y < im->ysize; y++) {
+ if (EGifPutLine(GifFile, Ptr, im->xsize) == GIF_ERROR) {
+ mm_log((1,"Error in EGifOpenFileHandle, unable to write image.\n"));
+ if (GifFile != NULL) EGifCloseFile(GifFile);
+ return(0);
+ }
+
+ Ptr += im->xsize;
+ }
+
+ if (EGifCloseFile(GifFile) == GIF_ERROR) {
+ mm_log((1,"Error in EGifCloseFile, unable to write image.\n"));
+ return(0);
+ }
+ return(1);
+}
+
+#endif
+
+i_img*
+i_readgif_scalar(char *data, int length, int **colour_table, int *colours) {
+#if IM_GIFMAJOR >= 4
+ GifFileType *GifFile;
+
+ struct gif_scalar_info gsi;
+
+ gsi.cpos=0;
+ gsi.length=length;
+ gsi.data=data;
+
+ mm_log((1,"i_readgif_scalar(char* data, int length, colour_table %p, colours %p)\n", data, length, colour_table, colours));
+ if ((GifFile = DGifOpen( (void*) &gsi, my_gif_inputfunc )) == NULL) {
+ mm_log((1,"i_readgif_scalar: Unable to open scalar datasource.\n"));
+ return NULL;
+ }
+
+ return i_readgif_low(GifFile, colour_table, colours);
+#else
+ return NULL;
+#endif
+}
+
+#if IM_GIFMAJOR >= 4
+
+static int
+gif_read_callback(GifFileType *gft, GifByteType *buf, int length) {
+ return i_gen_reader((i_gen_read_data *)gft->UserData, buf, length);
+}
+
+#endif
+
+i_img*
+i_readgif_callback(i_read_callback_t cb, char *userdata, int **colour_table, int *colours) {
+#if IM_GIFMAJOR >= 4
+ GifFileType *GifFile;
+ i_img *result;
+
+ i_gen_read_data *gci = i_gen_read_data_new(cb, userdata);
+
+ mm_log((1,"i_readgif_callback(callback %p, userdata %p, colour_table %p, colours %p)\n", cb, userdata, colour_table, colours));
+ if ((GifFile = DGifOpen( (void*) gci, gif_read_callback )) == NULL) {
+ mm_log((1,"i_readgif_callback: Unable to open callback datasource.\n"));
+ myfree(gci);
+ return NULL;
+ }
+
+ result = i_readgif_low(GifFile, colour_table, colours);
+ free_gen_read_data(gci);
+
+ return result;
+#else
+ return NULL;
+#endif
+}
+
+/* low level image write
+ writes in interlace if that's what was requested */
+static undef_int
+do_write(GifFileType *gf, i_gif_opts *opts, i_img *img, i_palidx *data) {
+ if (opts->interlace) {
+ int i, j;
+ for (i = 0; i < 4; ++i) {
+ for (j = InterlacedOffset[i]; j < img->ysize; j += InterlacedJumps[i]) {
+ if (EGifPutLine(gf, data+j*img->xsize, img->xsize) == GIF_ERROR) {
+ mm_log((1, "Error in EGifPutLine\n"));
+ EGifCloseFile(gf);
+ return 0;
+ }
+ }
+ }
+ }
+ else {
+ int y;
+ for (y = 0; y < img->ysize; ++y) {
+ if (EGifPutLine(gf, data, img->xsize) == GIF_ERROR) {
+ mm_log((1, "Error in EGifPutLine\n"));
+ EGifCloseFile(gf);
+ return 0;
+ }
+ data += img->xsize;
+ }
+ }
+
+ return 1;
+}
+
+static int do_gce(GifFileType *gf, int index, i_gif_opts *opts, int want_trans, int trans_index)
+{
+ unsigned char gce[4] = {0};
+ int want_gce = 0;
+ if (want_trans) {
+ gce[0] |= 1;
+ gce[3] = trans_index;
+ ++want_gce;
+ }
+ if (index < opts->delay_count) {
+ gce[1] = opts->delays[index] % 256;
+ gce[2] = opts->delays[index] / 256;
+ ++want_gce;
+ }
+ if (index < opts->user_input_count) {
+ if (opts->user_input_flags[index])
+ gce[0] |= 2;
+ ++want_gce;
+ }
+ if (index < opts->disposal_count) {
+ gce[0] |= (opts->disposal[index] & 3) << 2;
+ ++want_gce;
+ }
+ if (want_gce) {
+ return EGifPutExtension(gf, 0xF9, sizeof(gce), gce) != GIF_ERROR;
+ }
+ return 1;
+}
+
+/* add the Netscape2.0 loop extension block, if requested */
+static int do_ns_loop(GifFileType *gf, i_gif_opts *opts)
+{
+#if 0
+ /* EGifPutExtension() doesn't appear to handle application
+ extension blocks in any way
+ Since giflib wraps the fd with a FILE * (and puts that in its
+ private data), we can't do an end-run and write the data
+ directly to the fd.
+ There's no open interface that takes a FILE * either, so we
+ can't workaround it that way either.
+ If giflib's callback interface wasn't broken by default, I'd
+ force file writes to use callbacks, but it is broken by default.
+ */
+ if (opts->loop_count) {
+ unsigned char nsle[15] = "NETSCAPE2.0";
+ nsle[11] = 3;
+ nsle[12] = 1;
+ nsle[13] = opts->loop_count % 256;
+ nsle[14] = opts->loop_count / 256;
+ return EGifPutExtension(gf, 0xFF, sizeof(nsle), nsle) != GIF_ERROR;
+ }
+#endif
+ return 1;
+}
+
+static ColorMapObject *make_gif_map(i_quantize *quant, i_gif_opts *opts,
+ int want_trans) {
+ GifColorType colors[256];
+ int i;
+ int size = quant->mc_count;
+ int map_size;
+
+ for (i = 0; i < quant->mc_count; ++i) {
+ colors[i].Red = quant->mc_colors[i].rgb.r;
+ colors[i].Green = quant->mc_colors[i].rgb.g;
+ colors[i].Blue = quant->mc_colors[i].rgb.b;
+ }
+ if (want_trans) {
+ colors[size].Red = opts->tran_color.rgb.r;
+ colors[size].Green = opts->tran_color.rgb.g;
+ colors[size].Blue = opts->tran_color.rgb.b;
+ ++size;
+ }
+ map_size = 1;
+ while (map_size < size)
+ map_size <<= 1;
+ return MakeMapObject(map_size, colors);
+}
+
+/* we need to call EGifSetGifVersion() before opening the file - put that
+ common code here
+*/
+static void gif_set_version(i_quantize *quant, i_gif_opts *opts) {
+ /* the following crashed giflib
+ the EGifSetGifVersion() is seriously borked in giflib
+ it's less borked in the ungiflib beta, but we don't have a mechanism
+ to distinguish them
+ if (opts->delay_count
+ || opts->user_input_count
+ || opts->disposal_count
+ || opts->loop_count
+ || quant->transp != tr_none)
+ EGifSetGifVersion("89a");
+ else
+ EGifSetGifVersion("87a");
+ */
+}
+
+static undef_int
+i_writegif_low(i_quantize *quant, GifFileType *gf, i_img **imgs, int count,
+ i_gif_opts *opts) {
+ unsigned char *result;
+ int color_bits;
+ ColorMapObject *map;
+ int scrw = 0, scrh = 0;
+ int imgn, orig_count, orig_size;
+ int posx, posy;
+
+ mm_log((1, "i_writegif_low(quant %p, gf %p, imgs %p, count %d, opts %p)\n",
+ quant, gf, imgs, count, opts));
+
+ /**((char *)0) = 1;*/
+ /* sanity is nice */
+ if (quant->mc_size > 256)
+ quant->mc_size = 256;
+ if (quant->mc_count > quant->mc_size)
+ quant->mc_count = quant->mc_size;
+
+ for (imgn = 0; imgn < count; ++imgn) {
+ if (imgn < opts->position_count) {
+ if (imgs[imgn]->xsize + opts->positions[imgn].x > scrw)
+ scrw = imgs[imgn]->xsize + opts->positions[imgn].x;
+ if (imgs[imgn]->ysize + opts->positions[imgn].y > scrw)
+ scrh = imgs[imgn]->ysize + opts->positions[imgn].y;
+ }
+ else {
+ if (imgs[imgn]->xsize > scrw)
+ scrw = imgs[imgn]->xsize;
+ if (imgs[imgn]->ysize > scrh)
+ scrh = imgs[imgn]->ysize;
+ }
+ }
+
+
+ if (count <= 0)
+ return 0; /* what are you smoking? */
+
+ orig_count = quant->mc_count;
+ orig_size = quant->mc_size;
+
+ if (opts->each_palette) {
+ int want_trans;
+
+ /* we always generate a global palette - this lets systems with a
+ broken giflib work */
+ quant_makemap(quant, imgs, 1);
+ result = quant_translate(quant, imgs[0]);
+
+ want_trans = quant->transp != tr_none
+ && imgs[0]->channels == 4
+ && quant->mc_count < 256;
+ if (want_trans)
+ quant_transparent(quant, result, imgs[0], quant->mc_count);
+
+ if ((map = make_gif_map(quant, opts, want_trans)) == NULL) {
+ myfree(result);
+ EGifCloseFile(gf);
+ mm_log((1, "Error in MakeMapObject."));
+ return 0;
+ }
+
+ color_bits = 1;
+ while (quant->mc_size > (1 << color_bits))
+ ++color_bits;
+
+ if (EGifPutScreenDesc(gf, scrw, scrh, color_bits, 0, map) == GIF_ERROR) {
+ FreeMapObject(map);
+ myfree(result);
+ EGifCloseFile(gf);
+ mm_log((1, "Error in EGifPutScreenDesc."));
+ return 0;
+ }
+ FreeMapObject(map);
+
+ if (!do_ns_loop(gf, opts))
+ return 0;
+
+ if (!do_gce(gf, 0, opts, want_trans, quant->mc_count)) {
+ myfree(result);
+ EGifCloseFile(gf);
+ return 0;
+ }
+ if (opts->position_count) {
+ posx = opts->positions[0].x;
+ posy = opts->positions[0].y;
+ }
+ else
+ posx = posy = 0;
+ if (EGifPutImageDesc(gf, posx, posy, imgs[0]->xsize, imgs[0]->ysize,
+ opts->interlace, NULL) == GIF_ERROR) {
+ EGifCloseFile(gf);
+ mm_log((1, "Error in EGifPutImageDesc."));
+ return 0;
+ }
+ if (!do_write(gf, opts, imgs[0], result)) {
+ EGifCloseFile(gf);
+ myfree(result);
+ return 0;
+ }
+ for (imgn = 1; imgn < count; ++imgn) {
+ quant->mc_count = orig_count;
+ quant->mc_size = orig_size;
+ quant_makemap(quant, imgs+imgn, 1);
+ result = quant_translate(quant, imgs[imgn]);
+ want_trans = quant->transp != tr_none
+ && imgs[imgn]->channels == 4
+ && quant->mc_count < 256;
+ if (want_trans)
+ quant_transparent(quant, result, imgs[imgn], quant->mc_count);
+
+ if (!do_gce(gf, imgn, opts, want_trans, quant->mc_count)) {
+ myfree(result);
+ EGifCloseFile(gf);
+ return 0;
+ }
+ if ((map = make_gif_map(quant, opts, want_trans)) == NULL) {
+ myfree(result);
+ EGifCloseFile(gf);
+ mm_log((1, "Error in MakeMapObject."));
+ return 0;
+ }
+ if (imgn < opts->position_count) {
+ posx = opts->positions[imgn].x;
+ posy = opts->positions[imgn].y;
+ }
+ else
+ posx = posy = 0;
+ if (EGifPutImageDesc(gf, posx, posy, imgs[imgn]->xsize,
+ imgs[imgn]->ysize, opts->interlace,
+ map) == GIF_ERROR) {
+ myfree(result);
+ FreeMapObject(map);
+ EGifCloseFile(gf);
+ mm_log((1, "Error in EGifPutImageDesc."));
+ return 0;
+ }
+ FreeMapObject(map);
+
+ if (!do_write(gf, opts, imgs[imgn], result)) {
+ EGifCloseFile(gf);
+ myfree(result);
+ return 0;
+ }
+ myfree(result);
+ }
+ }
+ else {
+ int want_trans;
+
+ mm_log((1, "i_writegif_low: GOT HERE\n"));
+
+ /* handle the first image separately - since we allow giflib
+ conversion and giflib doesn't give us a separate function to build
+ the colormap. */
+
+ /* produce a colour map */
+ quant_makemap(quant, imgs, count);
+ result = quant_translate(quant, imgs[0]);
+
+ /* get a palette entry for the transparency iff we have an image
+ with an alpha channel */
+ want_trans = 0;
+ for (imgn = 0; imgn < count; ++imgn) {
+ if (imgs[imgn]->channels == 4) {
+ ++want_trans;
+ break;
+ }
+ }
+ want_trans = want_trans && quant->transp != tr_none && quant->mc_count < 256;
+ if ((map = make_gif_map(quant, opts, want_trans)) == NULL) {
+ myfree(result);
+ EGifCloseFile(gf);
+ mm_log((1, "Error in MakeMapObject"));
+ return 0;
+ }
+ color_bits = 1;
+ while (quant->mc_count > (1 << color_bits))
+ ++color_bits;
+
+ if (EGifPutScreenDesc(gf, scrw, scrh, color_bits, 0, map) == GIF_ERROR) {
+ FreeMapObject(map);
+ myfree(result);
+ EGifCloseFile(gf);
+ mm_log((1, "Error in EGifPutScreenDesc."));
+ return 0;
+ }
+ FreeMapObject(map);
+
+ if (!do_ns_loop(gf, opts))
+ return 0;
+
+ if (!do_gce(gf, 0, opts, want_trans, quant->mc_count)) {
+ myfree(result);
+ EGifCloseFile(gf);
+ return 0;
+ }
+ if (opts->position_count) {
+ posx = opts->positions[0].x;
+ posy = opts->positions[0].y;
+ }
+ else
+ posx = posy = 0;
+ if (EGifPutImageDesc(gf, posx, posy, imgs[0]->xsize, imgs[0]->ysize,
+ opts->interlace, NULL) == GIF_ERROR) {
+ EGifCloseFile(gf);
+ mm_log((1, "Error in EGifPutImageDesc."));
+ return 0;
+ }
+ if (want_trans && imgs[0]->channels == 4)
+ quant_transparent(quant, result, imgs[0], quant->mc_count);
+
+ if (!do_write(gf, opts, imgs[0], result)) {
+ EGifCloseFile(gf);
+ myfree(result);
+ return 0;
+ }
+ myfree(result);
+
+ for (imgn = 1; imgn < count; ++imgn) {
+ int local_trans;
+ result = quant_translate(quant, imgs[imgn]);
+ local_trans = want_trans && imgs[imgn]->channels == 4;
+ if (local_trans)
+ quant_transparent(quant, result, imgs[imgn], quant->mc_count);
+ if (!do_gce(gf, imgn, opts, local_trans, quant->mc_count)) {
+ myfree(result);
+ EGifCloseFile(gf);
+ return 0;
+ }
+ if (imgn < opts->position_count) {
+ posx = opts->positions[imgn].x;
+ posy = opts->positions[imgn].y;
+ }
+ else
+ posx = posy = 0;
+ if (EGifPutImageDesc(gf, posx, posy,
+ imgs[imgn]->xsize, imgs[imgn]->ysize,
+ opts->interlace, NULL) == GIF_ERROR) {
+ myfree(result);
+ EGifCloseFile(gf);
+ mm_log((1, "Error in EGifPutImageDesc."));
+ return 0;
+ }
+ if (!do_write(gf, opts, imgs[imgn], result)) {
+ EGifCloseFile(gf);
+ myfree(result);
+ return 0;
+ }
+ myfree(result);
+ }
+ }
+ if (EGifCloseFile(gf) == GIF_ERROR) {
+ mm_log((1, "Error in EGifCloseFile\n"));
+ return 0;
+ }
+
+ return 1;
+}
+
+undef_int
+i_writegif_gen(i_quantize *quant, int fd, i_img **imgs, int count,
+ i_gif_opts *opts) {
+ GifFileType *gf;
+
+ mm_log((1, "i_writegif_gen(quant %p, fd %d, imgs %p, count %d, opts %p)\n",
+ quant, fd, imgs, count, opts));
+
+ gif_set_version(quant, opts);
+
+ mm_log((1, "i_writegif_gen: set ops\n"));
+
+ if ((gf = EGifOpenFileHandle(fd)) == NULL) {
+ mm_log((1, "Error in EGifOpenFileHandle, unable to write image.\n"));
+ return 0;
+ }
+
+ return i_writegif_low(quant, gf, imgs, count, opts);
+}
+
+#if IM_GIFMAJOR >= 4
+
+static int gif_writer_callback(GifFileType *gf, const GifByteType *data, int size)
+{
+ i_gen_write_data *gwd = (i_gen_write_data *)gf->UserData;
+
+ return i_gen_writer(gwd, data, size) ? size : 0;
+}
+
+#endif
+
+undef_int
+i_writegif_callback(i_quantize *quant, i_write_callback_t cb, char *userdata,
+ int maxlength, i_img **imgs, int count, i_gif_opts *opts)
+{
+#if IM_GIFMAJOR >= 4
+ GifFileType *gf;
+ i_gen_write_data *gwd = i_gen_write_data_new(cb, userdata, maxlength);
+ /* giflib declares this incorrectly as EgifOpen */
+ extern GifFileType *EGifOpen(void *userData, OutputFunc writeFunc);
+ int result;
+
+ mm_log((1, "i_writegif_callback(quant %p, i_write_callback_t %p, userdata $p, maxlength %d, imgs %p, count %d, opts %p)\n",
+ quant, cb, userdata, maxlength, imgs, count, opts));
+
+ if ((gf = EGifOpen(gwd, &gif_writer_callback)) == NULL) {
+ mm_log((1, "Error in EGifOpenFileHandle, unable to write image.\n"));
+ free_gen_write_data(gwd, 0);
+ return 0;
+ }
+
+ result = i_writegif_low(quant, gf, imgs, count, opts);
+ return free_gen_write_data(gwd, result);
+#else
+ return 0;
+#endif
+}
--- /dev/null
+#include "image.h"
+#include "io.h"
+
+/*
+=head1 NAME
+
+image.c - implements most of the basic functions of Imager and much of the rest
+
+=head1 SYNOPSIS
+
+ i_img *i;
+ i_color *c;
+ c = i_color_new(red, green, blue, alpha);
+ ICL_DESTROY(c);
+ i = i_img_new();
+ i_img_destroy(i);
+ // and much more
+
+=head1 DESCRIPTION
+
+image.c implements the basic functions to create and destroy image and
+color objects for Imager.
+
+=head1 FUNCTION REFERENCE
+
+Some of these functions are internal.
+
+=over 4
+
+=cut
+*/
+
+#define XAXIS 0
+#define YAXIS 1
+
+#define minmax(a,b,i) ( ((a>=i)?a: ( (b<=i)?b:i )) )
+
+/* Hack around an obscure linker bug on solaris - probably due to builtin gcc thingies */
+void fake() { ceil(1); }
+
+/*
+=item ICL_new_internal(r, g, b, a)
+
+Return a new color object with values passed to it.
+
+ r - red component (range: 0 - 255)
+ g - green component (range: 0 - 255)
+ b - blue component (range: 0 - 255)
+ a - alpha component (range: 0 - 255)
+
+=cut
+*/
+
+i_color *
+ICL_new_internal(unsigned char r,unsigned char g,unsigned char b,unsigned char a) {
+ i_color *cl=NULL;
+
+ mm_log((1,"ICL_new_internal(r %d,g %d,b %d,a %d)\n",cl,r,g,b,a));
+
+ if ( (cl=mymalloc(sizeof(i_color))) == NULL) m_fatal(2,"malloc() error\n");
+ cl->rgba.r=r;
+ cl->rgba.g=g;
+ cl->rgba.b=b;
+ cl->rgba.a=a;
+ mm_log((1,"(0x%x) <- ICL_new_internal\n",cl));
+ return cl;
+}
+
+
+/*
+=item ICL_set_internal(cl, r, g, b, a)
+
+ Overwrite a color with new values.
+
+ cl - pointer to color object
+ r - red component (range: 0 - 255)
+ g - green component (range: 0 - 255)
+ b - blue component (range: 0 - 255)
+ a - alpha component (range: 0 - 255)
+
+=cut
+*/
+
+i_color *
+ICL_set_internal(i_color *cl,unsigned char r,unsigned char g,unsigned char b,unsigned char a) {
+ mm_log((1,"ICL_set_internal(cl* 0x%x,r %d,g %d,b %d,a %d)\n",cl,r,g,b,a));
+ if (cl == NULL)
+ if ( (cl=mymalloc(sizeof(i_color))) == NULL)
+ m_fatal(2,"malloc() error\n");
+ cl->rgba.r=r;
+ cl->rgba.g=g;
+ cl->rgba.b=b;
+ cl->rgba.a=a;
+ mm_log((1,"(0x%x) <- ICL_set_internal\n",cl));
+ return cl;
+}
+
+
+/*
+=item ICL_add(dst, src, ch)
+
+Add src to dst inplace - dst is modified.
+
+ dst - pointer to destination color object
+ src - pointer to color object that is added
+ ch - number of channels
+
+=cut
+*/
+
+void
+ICL_add(i_color *dst,i_color *src,int ch) {
+ int tmp,i;
+ for(i=0;i<ch;i++) {
+ tmp=dst->channel[i]+src->channel[i];
+ dst->channel[i]= tmp>255 ? 255:tmp;
+ }
+}
+
+/*
+=item ICL_info(cl)
+
+Dump color information to log - strictly for debugging.
+
+ cl - pointer to color object
+
+=cut
+*/
+
+void
+ICL_info(i_color *cl) {
+ mm_log((1,"i_color_info(cl* 0x%x)\n",cl));
+ mm_log((1,"i_color_info: (%d,%d,%d,%d)\n",cl->rgba.r,cl->rgba.g,cl->rgba.b,cl->rgba.a));
+}
+
+/*
+=item ICL_DESTROY
+
+Destroy ancillary data for Color object.
+
+ cl - pointer to color object
+
+=cut
+*/
+
+void
+ICL_DESTROY(i_color *cl) {
+ mm_log((1,"ICL_DESTROY(cl* 0x%x)\n",cl));
+ myfree(cl);
+}
+
+/*
+=item IIM_new(x, y, ch)
+
+Creates a new image object I<x> pixels wide, and I<y> pixels high with I<ch> channels.
+
+=cut
+*/
+
+
+i_img *
+IIM_new(int x,int y,int ch) {
+ i_img *im;
+ mm_log((1,"IIM_new(x %d,y %d,ch %d)\n",x,y,ch));
+
+ im=i_img_empty_ch(NULL,x,y,ch);
+
+ mm_log((1,"(0x%x) <- IIM_new\n",im));
+ return im;
+}
+
+
+void
+IIM_DESTROY(i_img *im) {
+ mm_log((1,"IIM_DESTROY(im* 0x%x)\n",im));
+ /* myfree(cl); */
+}
+
+
+
+/*
+=item i_img_new()
+
+Create new image reference - notice that this isn't an object yet and
+this should be fixed asap.
+
+=cut
+*/
+
+
+i_img *
+i_img_new() {
+ i_img *im;
+
+ mm_log((1,"i_img_struct()\n"));
+ if ( (im=mymalloc(sizeof(i_img))) == NULL)
+ m_fatal(2,"malloc() error\n");
+
+ im->xsize=0;
+ im->ysize=0;
+ im->channels=3;
+ im->ch_mask=MAXINT;
+ im->bytes=0;
+ im->data=NULL;
+
+ im->i_f_ppix=i_ppix_d;
+ im->i_f_gpix=i_gpix_d;
+ im->ext_data=NULL;
+
+ mm_log((1,"(0x%x) <- i_img_struct\n",im));
+ return im;
+}
+
+/*
+=item i_img_empty(im, x, y)
+
+Re-new image reference (assumes 3 channels)
+
+ im - Image pointer
+ x - xsize of destination image
+ y - ysize of destination image
+
+=cut
+*/
+
+i_img *
+i_img_empty(i_img *im,int x,int y) {
+ mm_log((1,"i_img_empty(*im 0x%x,x %d,y %d)\n",im,x,y));
+ if (im==NULL)
+ if ( (im=mymalloc(sizeof(i_img))) == NULL)
+ m_fatal(2,"malloc() error\n");
+
+ im->xsize=x;
+ im->ysize=y;
+ im->channels=3;
+ im->ch_mask=MAXINT;
+ im->bytes=x*y*im->channels;
+ if ( (im->data=mymalloc(im->bytes)) == NULL) m_fatal(2,"malloc() error\n");
+ memset(im->data,0,(size_t)im->bytes);
+
+ im->i_f_ppix=i_ppix_d;
+ im->i_f_gpix=i_gpix_d;
+ im->ext_data=NULL;
+
+ mm_log((1,"(0x%x) <- i_img_empty\n",im));
+ return im;
+}
+
+/*
+=item i_img_empty_ch(im, x, y, ch)
+
+Re-new image reference
+
+ im - Image pointer
+ x - xsize of destination image
+ y - ysize of destination image
+ ch - number of channels
+
+=cut
+*/
+
+i_img *
+i_img_empty_ch(i_img *im,int x,int y,int ch) {
+ mm_log((1,"i_img_empty_ch(*im 0x%x,x %d,y %d,ch %d)\n",im,x,y,ch));
+ if (im==NULL)
+ if ( (im=mymalloc(sizeof(i_img))) == NULL)
+ m_fatal(2,"malloc() error\n");
+
+ im->xsize=x;
+ im->ysize=y;
+ im->channels=ch;
+ im->ch_mask=MAXINT;
+ im->bytes=x*y*im->channels;
+ if ( (im->data=mymalloc(im->bytes)) == NULL) m_fatal(2,"malloc() error\n");
+ memset(im->data,0,(size_t)im->bytes);
+
+ im->i_f_ppix=i_ppix_d;
+ im->i_f_gpix=i_gpix_d;
+ im->ext_data=NULL;
+
+ mm_log((1,"(0x%x) <- i_img_empty_ch\n",im));
+ return im;
+}
+
+/*
+=item i_img_exorcise(im)
+
+Free image data.
+
+ im - Image pointer
+
+=cut
+*/
+
+void
+i_img_exorcise(i_img *im) {
+ mm_log((1,"i_img_exorcise(im* 0x%x)\n",im));
+ if (im->data != NULL) { myfree(im->data); }
+ im->data=NULL;
+ im->xsize=0;
+ im->ysize=0;
+ im->channels=0;
+
+ im->i_f_ppix=i_ppix_d;
+ im->i_f_gpix=i_gpix_d;
+ im->ext_data=NULL;
+}
+
+/*
+=item i_img_destroy(im)
+
+Destroy image and free data via exorcise.
+
+ im - Image pointer
+
+=cut
+*/
+
+void
+i_img_destroy(i_img *im) {
+ mm_log((1,"i_img_destroy(im* 0x%x)\n",im));
+ i_img_exorcise(im);
+ if (im) { myfree(im); }
+}
+
+/*
+=item i_img_info(im, info)
+
+Return image information
+
+ im - Image pointer
+ info - pointer to array to return data
+
+info is an array of 4 integers with the following values:
+
+ info[0] - width
+ info[1] - height
+ info[2] - channels
+ info[3] - channel mask
+
+=cut
+*/
+
+
+void
+i_img_info(i_img *im,int *info) {
+ mm_log((1,"i_img_info(im 0x%x)\n",im));
+ if (im != NULL) {
+ mm_log((1,"i_img_info: xsize=%d ysize=%d channels=%d mask=%ud\n",im->xsize,im->ysize,im->channels,im->ch_mask));
+ mm_log((1,"i_img_info: data=0x%d\n",im->data));
+ info[0]=im->xsize;
+ info[1]=im->ysize;
+ info[2]=im->channels;
+ info[3]=im->ch_mask;
+ } else {
+ info[0]=0;
+ info[1]=0;
+ info[2]=0;
+ info[3]=0;
+ }
+}
+
+/*
+=item i_img_setmask(im, ch_mask)
+
+Set the image channel mask for I<im> to I<ch_mask>.
+
+=cut
+*/
+void
+i_img_setmask(i_img *im,int ch_mask) { im->ch_mask=ch_mask; }
+
+
+/*
+=item i_img_getmask(im)
+
+Get the image channel mask for I<im>.
+
+=cut
+*/
+int
+i_img_getmask(i_img *im) { return im->ch_mask; }
+
+/*
+=item i_img_getchannels(im)
+
+Get the number of channels in I<im>.
+
+=cut
+*/
+int
+i_img_getchannels(i_img *im) { return im->channels; }
+
+
+/*
+=item i_ppix(im, x, y, col)
+
+Sets the pixel at (I<x>,I<y>) in I<im> to I<col>.
+
+Returns true if the pixel could be set, false if x or y is out of
+range.
+
+=cut
+*/
+int
+i_ppix(i_img *im,int x,int y,i_color *val) { return im->i_f_ppix(im,x,y,val); }
+
+/*
+=item i_gpix(im, x, y, &col)
+
+Get the pixel at (I<x>,I<y>) in I<im> into I<col>.
+
+Returns true if the pixel could be retrieved, false otherwise.
+
+=cut
+*/
+int
+i_gpix(i_img *im,int x,int y,i_color *val) { return im->i_f_gpix(im,x,y,val); }
+
+/*
+=item i_ppix_d(im, x, y, col)
+
+Internal function.
+
+This is the function kept in the i_f_ppix member of an i_img object.
+It does a normal store of a pixel into the image with range checking.
+
+Returns true if the pixel could be set, false otherwise.
+
+=cut
+*/
+int
+i_ppix_d(i_img *im,int x,int y,i_color *val) {
+ int ch;
+
+ if ( x>-1 && x<im->xsize && y>-1 && y<im->ysize ) {
+ for(ch=0;ch<im->channels;ch++)
+ if (im->ch_mask&(1<<ch))
+ im->data[(x+y*im->xsize)*im->channels+ch]=val->channel[ch];
+ return 0;
+ }
+ return -1; /* error was clipped */
+}
+
+/*
+=item i_gpix_d(im, x, y, &col)
+
+Internal function.
+
+This is the function kept in the i_f_gpix member of an i_img object.
+It does normal retrieval of a pixel from the image with range checking.
+
+Returns true if the pixel could be set, false otherwise.
+
+=cut
+*/
+int
+i_gpix_d(i_img *im,int x,int y,i_color *val) {
+ int ch;
+ if (x>-1 && x<im->xsize && y>-1 && y<im->ysize) {
+ for(ch=0;ch<im->channels;ch++)
+ val->channel[ch]=im->data[(x+y*im->xsize)*im->channels+ch];
+ return 0;
+ }
+ return -1; /* error was cliped */
+}
+
+/*
+=item i_ppix_pch(im, x, y, ch)
+
+Get the value from the channel I<ch> for pixel (I<x>,I<y>) from I<im>
+scaled to [0,1].
+
+Returns zero if x or y is out of range.
+
+Warning: this ignores the vptr interface for images.
+
+=cut
+*/
+float
+i_gpix_pch(i_img *im,int x,int y,int ch) {
+ if (x>-1 && x<im->xsize && y>-1 && y<im->ysize) return ((float)im->data[(x+y*im->xsize)*im->channels+ch]/255);
+ else return 0;
+}
+
+
+/*
+=item i_copyto_trans(im, src, x1, y1, x2, y2, tx, ty, trans)
+
+(x1,y1) (x2,y2) specifies the region to copy (in the source coordinates)
+(tx,ty) specifies the upper left corner for the target image.
+pass NULL in trans for non transparent i_colors.
+
+=cut
+*/
+
+void
+i_copyto_trans(i_img *im,i_img *src,int x1,int y1,int x2,int y2,int tx,int ty,i_color *trans) {
+ i_color pv;
+ int x,y,t,ttx,tty,tt,ch;
+
+ mm_log((1,"i_copyto_trans(im* 0x%x,src 0x%x,x1 %d,y1 %d,x2 %d,y2 %d,tx %d,ty %d,trans* 0x%x)\n",im,src,x1,y1,x2,y2,tx,ty,trans));
+
+ if (x2<x1) { t=x1; x1=x2; x2=t; }
+ if (y2<y1) { t=y1; y1=y2; y2=t; }
+
+ ttx=tx;
+ for(x=x1;x<x2;x++)
+ {
+ tty=ty;
+ for(y=y1;y<y2;y++)
+ {
+ i_gpix(src,x,y,&pv);
+ if ( trans != NULL)
+ {
+ tt=0;
+ for(ch=0;ch<im->channels;ch++) if (trans->channel[ch]!=pv.channel[ch]) tt++;
+ if (tt) i_ppix(im,ttx,tty,&pv);
+ } else i_ppix(im,ttx,tty,&pv);
+ tty++;
+ }
+ ttx++;
+ }
+}
+
+/*
+=item i_copyto(dest, src, x1, y1, x2, y2, tx, ty)
+
+Copies image data from the area (x1,y1)-[x2,y2] in the source image to
+a rectangle the same size with it's top-left corner at (tx,ty) in the
+destination image.
+
+If x1 > x2 or y1 > y2 then the corresponding co-ordinates are swapped.
+
+=cut
+*/
+
+void
+i_copyto(i_img *im,i_img *src,int x1,int y1,int x2,int y2,int tx,int ty) {
+ i_color pv;
+ int x,y,t,ttx,tty;
+
+ if (x2<x1) { t=x1; x1=x2; x2=t; }
+ if (y2<y1) { t=y1; y1=y2; y2=t; }
+
+ mm_log((1,"i_copyto(im* 0x%x,src 0x%x,x1 %d,y1 %d,x2 %d,y2 %d,tx %d,ty %d)\n",im,src,x1,y1,x2,y2,tx,ty));
+
+ tty=ty;
+ for(y=y1;y<y2;y++) {
+ ttx=tx;
+ for(x=x1;x<x2;x++) {
+ i_gpix(src,x,y,&pv);
+ i_ppix(im,ttx,tty,&pv);
+ ttx++;
+ }
+ tty++;
+ }
+}
+
+/*
+=item i_copy(im, src)
+
+Copies the contents of the image I<src> over the image I<im>.
+
+=cut
+*/
+
+void
+i_copy(i_img *im,i_img *src) {
+ i_color pv;
+ int x,y,y1,x1;
+
+ mm_log((1,"i_copy(im* 0x%x,src 0x%x)\n",im,src));
+
+ x1=src->xsize;
+ y1=src->ysize;
+ i_img_empty_ch(im,x1,y1,src->channels);
+
+ for(y=0;y<y1;y++) for(x=0;x<x1;x++) {
+ i_gpix(src,x,y,&pv);
+ i_ppix(im,x,y,&pv);
+ }
+}
+
+
+/*
+=item i_rubthru(im, src, tx, ty)
+
+Takes the image I<src> and applies it at an original (I<tx>,I<ty>) in I<im>.
+
+The alpha channel of each pixel in I<src> is used to control how much
+the existing colour in I<im> is replaced, if it is 255 then the colour
+is completely replaced, if it is 0 then the original colour is left
+unmodified.
+
+=cut
+*/
+void
+i_rubthru(i_img *im,i_img *src,int tx,int ty) {
+ i_color pv,orig,dest;
+ int x,y,ttx,tty;
+
+ mm_log((1,"i_rubthru(im 0x%x,src 0x%x,tx %d,ty %d)\n",im,src,tx,ty));
+
+ if (im->channels != 3) { fprintf(stderr,"Destination is not in rgb mode.\n"); exit(3); }
+ if (src->channels != 4) { fprintf(stderr,"Source is not in rgba mode.\n"); exit(3); }
+
+ ttx=tx;
+ for(x=0;x<src->xsize;x++)
+ {
+ tty=ty;
+ for(y=0;y<src->ysize;y++)
+ {
+ /* fprintf(stderr,"reading (%d,%d) writing (%d,%d).\n",x,y,ttx,tty); */
+ i_gpix(src,x,y,&pv);
+ i_gpix(im,ttx,tty,&orig);
+ dest.rgb.r=(pv.rgba.a*pv.rgba.r+(255-pv.rgba.a)*orig.rgb.r)/255;
+ dest.rgb.g=(pv.rgba.a*pv.rgba.g+(255-pv.rgba.a)*orig.rgb.g)/255;
+ dest.rgb.b=(pv.rgba.a*pv.rgba.b+(255-pv.rgba.a)*orig.rgb.b)/255;
+ i_ppix(im,ttx,tty,&dest);
+ tty++;
+ }
+ ttx++;
+ }
+}
+
+float
+Lanczos(float x) {
+ float PIx, PIx2;
+
+ PIx = PI * x;
+ PIx2 = PIx / 2.0;
+
+ if ((x >= 2.0) || (x <= -2.0)) return (0.0);
+ else if (x == 0.0) return (1.0);
+ else return(sin(PIx) / PIx * sin(PIx2) / PIx2);
+}
+
+/*
+=item i_scaleaxis(im, value, axis)
+
+Returns a new image object which is I<im> scaled by I<value> along
+wither the x-axis (I<axis> == 0) or the y-axis (I<axis> == 1).
+
+=cut
+*/
+
+i_img*
+i_scaleaxis(i_img *im, float Value, int Axis) {
+ int hsize, vsize, i, j, k, l, lMax, iEnd, jEnd;
+ int LanczosWidthFactor;
+ float *l0, *l1, OldLocation;
+ int T, TempJump1, TempJump2;
+ float F, PictureValue[MAXCHANNELS];
+ short psave;
+ i_color val,val1,val2;
+ i_img *new_img;
+
+ mm_log((1,"i_scaleaxis(im 0x%x,Value %.2f,Axis %d)\n",im,Value,Axis));
+
+ if (Axis == XAXIS) {
+ hsize = (int) ((float) im->xsize * Value);
+ vsize = im->ysize;
+
+ jEnd = hsize;
+ iEnd = vsize;
+
+ TempJump1 = (hsize - 1) * 3;
+ TempJump2 = hsize * (vsize - 1) * 3 + TempJump1;
+ } else {
+ hsize = im->xsize;
+ vsize = (int) ((float) im->ysize * Value);
+
+ jEnd = vsize;
+ iEnd = hsize;
+
+ TempJump1 = 0;
+ TempJump2 = 0;
+ }
+
+ new_img=i_img_empty_ch(NULL,hsize,vsize,im->channels);
+
+ if (Value >=1) LanczosWidthFactor = 1;
+ else LanczosWidthFactor = (int) (1.0/Value);
+
+ lMax = LanczosWidthFactor << 1;
+
+ l0 = (float *) mymalloc(lMax * sizeof(float));
+ l1 = (float *) mymalloc(lMax * sizeof(float));
+
+ for (j=0; j<jEnd; j++) {
+ OldLocation = ((float) j) / Value;
+ T = (int) (OldLocation);
+ F = OldLocation - (float) T;
+
+ for (l = 0; l < lMax; l++) {
+ l0[lMax-l-1] = Lanczos(((float) (lMax-l-1) + F) / (float) LanczosWidthFactor);
+ l1[l] = Lanczos(((float) (l + 1) - F) / (float) LanczosWidthFactor);
+ }
+
+ if (Axis== XAXIS) {
+
+ for (i=0; i<iEnd; i++) {
+ for (k=0; k<im->channels; k++) PictureValue[k] = 0.0;
+ for (l=0; l < lMax; l++) {
+ i_gpix(im,T+l+1, i, &val1);
+ i_gpix(im,T-lMax+l+1, i, &val2);
+ for (k=0; k<im->channels; k++) {
+ PictureValue[k] += l1[l] * val1.channel[k];
+ PictureValue[k] += l0[lMax-l-1] * val2.channel[k];
+ }
+ }
+ for(k=0;k<im->channels;k++) {
+ psave = (short)( PictureValue[k] / LanczosWidthFactor);
+ val.channel[k]=minmax(0,255,psave);
+ }
+ i_ppix(new_img,j,i,&val);
+ }
+
+ } else {
+
+ for (i=0; i<iEnd; i++) {
+ for (k=0; k<im->channels; k++) PictureValue[k] = 0.0;
+ for (l=0; l < lMax; l++) {
+ i_gpix(im,i, T+l+1, &val1);
+ i_gpix(im,i, T-lMax+l+1, &val2);
+ for (k=0; k<im->channels; k++) {
+ PictureValue[k] += l1[l] * val1.channel[k];
+ PictureValue[k] += l0[lMax-l-1] * val2.channel[k];
+ }
+ }
+ for (k=0; k<im->channels; k++) {
+ psave = (short)( PictureValue[k] / LanczosWidthFactor);
+ val.channel[k]=minmax(0,255,psave);
+ }
+ i_ppix(new_img,i,j,&val);
+ }
+
+ }
+ }
+ myfree(l0);
+ myfree(l1);
+
+ mm_log((1,"(0x%x) <- i_scaleaxis\n",new_img));
+
+ return new_img;
+}
+
+
+/*
+=item i_scale_nn(im, scx, scy)
+
+Scale by using nearest neighbor
+Both axes scaled at the same time since
+nothing is gained by doing it in two steps
+
+=cut
+*/
+
+
+i_img*
+i_scale_nn(i_img *im, float scx, float scy) {
+
+ int nxsize,nysize,nx,ny;
+ i_img *new_img;
+ i_color val;
+
+ mm_log((1,"i_scale_nn(im 0x%x,scx %.2f,scy %.2f)\n",im,scx,scy));
+
+ nxsize = (int) ((float) im->xsize * scx);
+ nysize = (int) ((float) im->ysize * scy);
+
+ new_img=i_img_empty_ch(NULL,nxsize,nysize,im->channels);
+
+ for(ny=0;ny<nysize;ny++) for(nx=0;nx<nxsize;nx++) {
+ i_gpix(im,((float)nx)/scx,((float)ny)/scy,&val);
+ i_ppix(new_img,nx,ny,&val);
+ }
+
+ mm_log((1,"(0x%x) <- i_scale_nn\n",new_img));
+
+ return new_img;
+}
+
+
+/*
+=item i_transform(im, opx, opxl, opy, opyl, parm, parmlen)
+
+Spatially transforms I<im> returning a new image.
+
+opx for a length of opxl and opy for a length of opy are arrays of
+operators that modify the x and y positions to retreive the pixel data from.
+
+parm and parmlen define extra parameters that the operators may use.
+
+Note that this function is largely superseded by the more flexible
+L<transform.c/i_transform2>.
+
+Returns the new image.
+
+The operators for this function are defined in L<stackmach.c>.
+
+=cut
+*/
+i_img*
+i_transform(i_img *im, int *opx,int opxl,int *opy,int opyl,double parm[],int parmlen) {
+ double rx,ry;
+ int nxsize,nysize,nx,ny;
+ i_img *new_img;
+ i_color val;
+
+ mm_log((1,"i_transform(im 0x%x, opx 0x%x, opxl %d, opy 0x%x, opyl %d, parm 0x%x, parmlen %d)\n",im,opx,opxl,opy,opyl,parm,parmlen));
+
+ nxsize = im->xsize;
+ nysize = im->ysize ;
+
+ new_img=i_img_empty_ch(NULL,nxsize,nysize,im->channels);
+ /* fprintf(stderr,"parm[2]=%f\n",parm[2]); */
+ for(ny=0;ny<nysize;ny++) for(nx=0;nx<nxsize;nx++) {
+ /* parm[parmlen-2]=(double)nx;
+ parm[parmlen-1]=(double)ny; */
+
+ parm[0]=(double)nx;
+ parm[1]=(double)ny;
+
+ /* fprintf(stderr,"(%d,%d) ->",nx,ny); */
+ rx=op_run(opx,opxl,parm,parmlen);
+ ry=op_run(opy,opyl,parm,parmlen);
+ /* fprintf(stderr,"(%f,%f)\n",rx,ry); */
+ i_gpix(im,rx,ry,&val);
+ i_ppix(new_img,nx,ny,&val);
+ }
+
+ mm_log((1,"(0x%x) <- i_transform\n",new_img));
+ return new_img;
+}
+
+/*
+=item i_img_diff(im1, im2)
+
+Calculates the sum of the squares of the differences between
+correspoding channels in two images.
+
+If the images are not the same size then only the common area is
+compared, hence even if images are different sizes this function
+can return zero.
+
+=cut
+*/
+float
+i_img_diff(i_img *im1,i_img *im2) {
+ int x,y,ch,xb,yb,chb;
+ float tdiff;
+ i_color val1,val2;
+
+ mm_log((1,"i_img_diff(im1 0x%x,im2 0x%x)\n",im1,im2));
+
+ xb=(im1->xsize<im2->xsize)?im1->xsize:im2->xsize;
+ yb=(im1->ysize<im2->ysize)?im1->ysize:im2->ysize;
+ chb=(im1->channels<im2->channels)?im1->channels:im2->channels;
+
+ mm_log((1,"i_img_diff: xb=%d xy=%d chb=%d\n",xb,yb,chb));
+
+ tdiff=0;
+ for(y=0;y<yb;y++) for(x=0;x<xb;x++) {
+ i_gpix(im1,x,y,&val1);
+ i_gpix(im2,x,y,&val2);
+
+ for(ch=0;ch<chb;ch++) tdiff+=(val1.channel[ch]-val2.channel[ch])*(val1.channel[ch]-val2.channel[ch]);
+ }
+ mm_log((1,"i_img_diff <- (%.2f)\n",tdiff));
+ return tdiff;
+}
+
+/* just a tiny demo of haar wavelets */
+
+i_img*
+i_haar(i_img *im) {
+ int mx,my;
+ int fx,fy;
+ int x,y;
+ int ch,c;
+ i_img *new_img,*new_img2;
+ i_color val1,val2,dval1,dval2;
+
+ mx=im->xsize;
+ my=im->ysize;
+ fx=(mx+1)/2;
+ fy=(my+1)/2;
+
+
+ /* horizontal pass */
+
+ new_img=i_img_empty_ch(NULL,fx*2,fy*2,im->channels);
+ new_img2=i_img_empty_ch(NULL,fx*2,fy*2,im->channels);
+
+ c=0;
+ for(y=0;y<my;y++) for(x=0;x<fx;x++) {
+ i_gpix(im,x*2,y,&val1);
+ i_gpix(im,x*2+1,y,&val2);
+ for(ch=0;ch<im->channels;ch++) {
+ dval1.channel[ch]=(val1.channel[ch]+val2.channel[ch])/2;
+ dval2.channel[ch]=(255+val1.channel[ch]-val2.channel[ch])/2;
+ }
+ i_ppix(new_img,x,y,&dval1);
+ i_ppix(new_img,x+fx,y,&dval2);
+ }
+
+ for(y=0;y<fy;y++) for(x=0;x<mx;x++) {
+ i_gpix(new_img,x,y*2,&val1);
+ i_gpix(new_img,x,y*2+1,&val2);
+ for(ch=0;ch<im->channels;ch++) {
+ dval1.channel[ch]=(val1.channel[ch]+val2.channel[ch])/2;
+ dval2.channel[ch]=(255+val1.channel[ch]-val2.channel[ch])/2;
+ }
+ i_ppix(new_img2,x,y,&dval1);
+ i_ppix(new_img2,x,y+fy,&dval2);
+ }
+
+ i_img_destroy(new_img);
+ return new_img2;
+}
+
+/*
+=item i_count_colors(im, maxc)
+
+returns number of colors or -1
+to indicate that it was more than max colors
+
+=cut
+*/
+int
+i_count_colors(i_img *im,int maxc) {
+ struct octt *ct;
+ int x,y;
+ int xsize,ysize;
+ i_color val;
+ int colorcnt;
+
+ mm_log((1,"i_count_colors(im 0x%08X,maxc %d)\n"));
+
+ xsize=im->xsize;
+ ysize=im->ysize;
+ ct=octt_new();
+
+ colorcnt=0;
+ for(y=0;y<ysize;y++) for(x=0;x<xsize;x++) {
+ i_gpix(im,x,y,&val);
+ colorcnt+=octt_add(ct,val.rgb.r,val.rgb.g,val.rgb.b);
+ if (colorcnt > maxc) { octt_delete(ct); return -1; }
+ }
+ octt_delete(ct);
+ return colorcnt;
+}
+
+
+symbol_table_t symbol_table={i_has_format,ICL_set_internal,ICL_info,
+ i_img_new,i_img_empty,i_img_empty_ch,i_img_exorcise,
+ i_img_info,i_img_setmask,i_img_getmask,i_ppix,i_gpix,
+ i_box,i_draw,i_arc,i_copyto,i_copyto_trans,i_rubthru};
+
+
+/*
+=item i_gen_reader(i_gen_read_data *info, char *buf, int length)
+
+Performs general read buffering for file readers that permit reading
+to be done through a callback.
+
+The final callback gets two parameters, a I<need> value, and a I<want>
+value, where I<need> is the amount of data that the file library needs
+to read, and I<want> is the amount of space available in the buffer
+maintained by these functions.
+
+This means if you need to read from a stream that you don't know the
+length of, you can return I<need> bytes, taking the performance hit of
+possibly expensive callbacks (eg. back to perl code), or if you are
+reading from a stream where it doesn't matter if some data is lost, or
+if the total length of the stream is known, you can return I<want>
+bytes.
+
+=cut
+*/
+
+int
+i_gen_reader(i_gen_read_data *gci, char *buf, int length) {
+ int total;
+
+ if (length < gci->length - gci->cpos) {
+ /* simplest case */
+ memcpy(buf, gci->buffer+gci->cpos, length);
+ gci->cpos += length;
+ return length;
+ }
+
+ total = 0;
+ memcpy(buf, gci->buffer+gci->cpos, gci->length-gci->cpos);
+ total += gci->length - gci->cpos;
+ length -= gci->length - gci->cpos;
+ buf += gci->length - gci->cpos;
+ if (length < (int)sizeof(gci->buffer)) {
+ int did_read;
+ int copy_size;
+ while (length
+ && (did_read = (gci->cb)(gci->userdata, gci->buffer, length,
+ sizeof(gci->buffer))) > 0) {
+ gci->cpos = 0;
+ gci->length = did_read;
+
+ copy_size = min(length, gci->length);
+ memcpy(buf, gci->buffer, copy_size);
+ gci->cpos += copy_size;
+ buf += copy_size;
+ total += copy_size;
+ length -= copy_size;
+ }
+ }
+ else {
+ /* just read the rest - too big for our buffer*/
+ int did_read;
+ while ((did_read = (gci->cb)(gci->userdata, buf, length, length)) > 0) {
+ length -= did_read;
+ total += did_read;
+ buf += did_read;
+ }
+ }
+ return total;
+}
+
+/*
+=item i_gen_read_data_new(i_read_callback_t cb, char *userdata)
+
+For use by callback file readers to initialize the reader buffer.
+
+Allocates, initializes and returns the reader buffer.
+
+See also L<image.c/free_gen_read_data> and L<image.c/i_gen_reader>.
+
+=cut
+*/
+i_gen_read_data *
+i_gen_read_data_new(i_read_callback_t cb, char *userdata) {
+ i_gen_read_data *self = mymalloc(sizeof(i_gen_read_data));
+ self->cb = cb;
+ self->userdata = userdata;
+ self->length = 0;
+ self->cpos = 0;
+
+ return self;
+}
+
+/*
+=item free_gen_read_data(i_gen_read_data *)
+
+Cleans up.
+
+=cut
+*/
+void free_gen_read_data(i_gen_read_data *self) {
+ myfree(self);
+}
+
+/*
+=item i_gen_writer(i_gen_write_data *info, char const *data, int size)
+
+Performs write buffering for a callback based file writer.
+
+Failures are considered fatal, if a write fails then data will be
+dropped.
+
+=cut
+*/
+int
+i_gen_writer(
+i_gen_write_data *self,
+char const *data,
+int size)
+{
+ if (self->filledto && self->filledto+size > self->maxlength) {
+ if (self->cb(self->userdata, self->buffer, self->filledto)) {
+ self->filledto = 0;
+ }
+ else {
+ self->filledto = 0;
+ return 0;
+ }
+ }
+ if (self->filledto+size <= self->maxlength) {
+ /* just save it */
+ memcpy(self->buffer+self->filledto, data, size);
+ self->filledto += size;
+ return 1;
+ }
+ /* doesn't fit - hand it off */
+ return self->cb(self->userdata, data, size);
+}
+
+/*
+=item i_gen_write_data_new(i_write_callback_t cb, char *userdata, int max_length)
+
+Allocates and initializes the data structure used by i_gen_writer.
+
+This should be released with L<image.c/free_gen_write_data>
+
+=cut
+*/
+i_gen_write_data *i_gen_write_data_new(i_write_callback_t cb,
+ char *userdata, int max_length)
+{
+ i_gen_write_data *self = mymalloc(sizeof(i_gen_write_data));
+ self->cb = cb;
+ self->userdata = userdata;
+ self->maxlength = min(max_length, sizeof(self->buffer));
+ if (self->maxlength < 0)
+ self->maxlength = sizeof(self->buffer);
+ self->filledto = 0;
+
+ return self;
+}
+
+/*
+=item free_gen_write_data(i_gen_write_data *info, int flush)
+
+Cleans up the write buffer.
+
+Will flush any left-over data if I<flush> is non-zero.
+
+Returns non-zero if flush is zero or if info->cb() returns non-zero.
+
+Return zero only if flush is non-zero and info->cb() returns zero.
+ie. if it fails.
+
+=cut
+*/
+
+int free_gen_write_data(i_gen_write_data *info, int flush)
+{
+ int result = !flush ||
+ info->filledto == 0 ||
+ info->cb(info->userdata, info->buffer, info->filledto);
+ myfree(info);
+
+ return result;
+}
+
+/*
+=back
+
+=head1 SEE ALSO
+
+L<Imager>, L<gif.c>
+
+=cut
+*/
--- /dev/null
+#ifndef _IMAGE_H_
+#define _IMAGE_H_
+
+#include "io.h"
+#include "iolayer.h"
+#include "log.h"
+#include "stackmach.h"
+
+
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+
+#ifdef SUNOS
+#include <strings.h>
+#endif
+
+#ifndef PI
+#define PI 3.14159265358979323846
+#endif
+
+#ifndef MAXINT
+#define MAXINT 2147483647
+#endif
+
+#include "datatypes.h"
+
+undef_int i_has_format(char *frmt);
+
+/* constructors and destructors */
+
+i_color *ICL_new_internal( unsigned char r,unsigned char g,unsigned char b,unsigned char a);
+i_color *ICL_set_internal(i_color *cl,unsigned char r,unsigned char g,unsigned char b,unsigned char a);
+void ICL_info (i_color *cl);
+void ICL_DESTROY (i_color *cl);
+void ICL_add (i_color *dst, i_color *src, int ch);
+
+i_img *IIM_new(int x,int y,int ch);
+void IIM_DESTROY(i_img *im);
+i_img *i_img_new( void );
+i_img *i_img_empty(i_img *im,int x,int y);
+i_img *i_img_empty_ch(i_img *im,int x,int y,int ch);
+void i_img_exorcise(i_img *im);
+void i_img_destroy(i_img *im);
+
+void i_img_info(i_img *im,int *info);
+
+/* Image feature settings */
+
+void i_img_setmask (i_img *im,int ch_mask);
+int i_img_getmask (i_img *im);
+int i_img_getchannels(i_img *im);
+
+/* Base functions */
+
+int i_ppix(i_img *im,int x,int y,i_color *val);
+int i_gpix(i_img *im,int x,int y,i_color *val);
+
+int i_ppix_d(i_img *im,int x,int y,i_color *val);
+int i_gpix_d(i_img *im,int x,int y,i_color *val);
+
+float i_gpix_pch(i_img *im,int x,int y,int ch);
+
+/* functions for drawing primitives */
+
+void i_box (i_img *im,int x1,int y1,int x2,int y2,i_color *val);
+void i_box_filled (i_img *im,int x1,int y1,int x2,int y2,i_color *val);
+void i_draw (i_img *im,int x1,int y1,int x2,int y2,i_color *val);
+void i_line_aa (i_img *im,int x1,int y1,int x2,int y2,i_color *val);
+void i_arc (i_img *im,int x,int y,float rad,float d1,float d2,i_color *val);
+void i_copyto (i_img *im,i_img *src,int x1,int y1,int x2,int y2,int tx,int ty);
+void i_copyto_trans(i_img *im,i_img *src,int x1,int y1,int x2,int y2,int tx,int ty,i_color *trans);
+void i_copy (i_img *im,i_img *src);
+void i_rubthru (i_img *im,i_img *src,int tx,int ty);
+
+void i_bezier_multi(i_img *im,int l,double *x,double *y,i_color *val);
+void i_poly_aa (i_img *im,int l,double *x,double *y,i_color *val);
+
+void i_flood_fill (i_img *im,int seedx,int seedy,i_color *dcol);
+
+/* image processing functions */
+
+void i_gaussian (i_img *im,float stdev);
+void i_conv (i_img *im,float *coeff,int len);
+
+float i_img_diff (i_img *im1,i_img *im2);
+
+/* font routines */
+
+undef_int i_init_fonts( void );
+
+#ifdef HAVE_LIBT1
+#include <t1lib.h>
+
+undef_int init_t1( void );
+int i_t1_new( char *pfb, char *afm );
+int i_t1_destroy( int font_id );
+undef_int i_t1_cp( i_img *im, int xb, int yb, int channel, int fontnum, float points, char* str, int len, int align );
+undef_int i_t1_text( i_img *im, int xb, int yb, i_color *cl, int fontnum, float points, char* str, int len, int align );
+void i_t1_bbox( int fontnum, float point, char *str, int len, int cords[6] );
+void i_t1_set_aa( int st );
+void close_t1( void );
+
+#endif
+
+#ifdef HAVE_LIBTT
+
+#include <freetype.h>
+#define TT_CHC 5
+
+struct TT_Instancehandle_ {
+ TT_Instance instance;
+ TT_Instance_Metrics imetrics;
+ TT_Glyph_Metrics gmetrics[256];
+ TT_Glyph glyphs[256];
+ int smooth;
+ int ptsize;
+ int order;
+};
+
+typedef struct TT_Instancehandle_ TT_Instancehandle;
+
+struct TT_Fonthandle_ {
+ TT_Face face;
+ TT_Face_Properties properties;
+ TT_Instancehandle instanceh[TT_CHC];
+ TT_CharMap char_map;
+};
+
+typedef struct TT_Fonthandle_ TT_Fonthandle;
+
+
+
+undef_int init_tt( void );
+TT_Fonthandle* i_tt_new(char *fontname);
+void i_tt_destroy( TT_Fonthandle *handle );
+undef_int i_tt_cp( TT_Fonthandle *handle,i_img *im,int xb,int yb,int channel,float points,char* txt,int len,int smooth);
+undef_int i_tt_text( TT_Fonthandle *handle, i_img *im, int xb, int yb, i_color *cl, float points, char* txt, int len, int smooth);
+undef_int i_tt_bbox( TT_Fonthandle *handle, float points,char *txt,int len,int cords[6]);
+
+
+#endif /* End of freetype headers */
+
+
+
+
+
+
+
+/* functions for reading and writing formats */
+
+/* general reader callback
+ userdata - data the user passed into the reader
+ buffer - the buffer to fill with data
+ need - the amount of data needed
+ want - the amount of space we have to store data
+ fill buffer and return the number of bytes read, 0 for eof, -1 for error
+*/
+
+typedef int (*i_read_callback_t)(char *userdata, char *buffer, int need,
+ int want);
+
+/* i_gen_reader() translates the low-level requests from whatever library
+ into buffered requests.
+ but the called function can always bypass buffering by only ever
+ reading I<need> bytes.
+*/
+#define CBBUFSIZ 4096
+
+typedef struct {
+ i_read_callback_t cb;
+ char *userdata;
+ char buffer[CBBUFSIZ];
+ int length;
+ int cpos;
+} i_gen_read_data;
+
+extern int i_gen_reader(i_gen_read_data *info, char *buffer, int need);
+extern i_gen_read_data *i_gen_read_data_new(i_read_callback_t cb, char *userdata);
+extern void free_gen_read_data(i_gen_read_data *);
+
+/* general writer callback
+ userdata - the data the user passed into the writer
+ data - the data to write
+ data_size - the number of bytes to write
+ write the data, return non-zero on success, zero on failure.
+*/
+typedef int (*i_write_callback_t)(char *userdata, char const *data, int size);
+
+typedef struct {
+ i_write_callback_t cb;
+ char *userdata;
+ char buffer[CBBUFSIZ];
+ int maxlength;
+ int filledto;
+} i_gen_write_data;
+
+extern int i_gen_writer(i_gen_write_data *info, char const *data, int size);
+extern i_gen_write_data *i_gen_write_data_new(i_write_callback_t cb, char *userdata, int maxlength);
+extern int free_gen_write_data(i_gen_write_data *, int flush);
+
+/* transparency handling for quantized output */
+typedef enum i_transp_tag {
+ tr_none, /* ignore any alpha channel */
+ tr_threshold, /* threshold the transparency - uses tr_threshold */
+ tr_errdiff, /* error diffusion */
+ tr_ordered /* an ordered dither */
+} i_transp;
+
+/* controls how we build the colour map */
+typedef enum i_make_colors_tag {
+ mc_none, /* user supplied colour map only */
+ mc_web_map, /* Use the 216 colour web colour map */
+ mc_addi, /* Addi's algorithm */
+ mc_mask = 0xFF /* (mask for generator) */
+} i_make_colors;
+
+/* controls how we translate the colours */
+typedef enum i_translate_tag {
+ pt_giflib, /* get gif lib to do it (ignores make_colours) */
+ pt_closest, /* just use the closest match within the hashbox */
+ pt_perturb, /* randomly perturb the data - uses perturb_size*/
+ pt_errdiff /* error diffusion dither - uses errdiff */
+} i_translate;
+
+/* Which error diffusion map to use */
+typedef enum i_errdiff_tag {
+ ed_floyd, /* floyd-steinberg */
+ ed_jarvis, /* Jarvis, Judice and Ninke */
+ ed_stucki, /* Stucki */
+ ed_custom, /* the map found in ed_map|width|height|orig */
+ ed_mask = 0xFF, /* mask to get the map */
+ ed_bidir = 0x100 /* change direction for each row */
+} i_errdiff;
+
+/* which ordered dither map to use
+ currently only available for transparency
+ I don't know of a way to do ordered dither of an image against some
+ general palette
+ */
+typedef enum i_ord_dith_tag
+{
+ od_random, /* sort of random */
+ od_dot8, /* large dot */
+ od_dot4,
+ od_hline,
+ od_vline,
+ od_slashline, /* / line dither */
+ od_backline, /* \ line dither */
+ od_custom /* custom 8x8 map */
+} i_ord_dith;
+
+typedef struct i_gif_pos_tag {
+ int x, y;
+} i_gif_pos;
+
+/* passed into i_writegif_gen() to control quantization */
+typedef struct i_quantize_tag {
+ /* how to handle transparency */
+ i_transp transp;
+ /* the threshold at which to make pixels opaque */
+ int tr_threshold;
+ i_errdiff tr_errdiff;
+ i_ord_dith tr_orddith;
+ unsigned char tr_custom[64];
+
+ /* how to make the colour map */
+ i_make_colors make_colors;
+
+ /* any existing colours
+ mc_existing is an existing colour table
+ mc_count is the number of existing colours
+ mc_size is the total size of the array that mc_existing points
+ at - this must be at least 256
+ */
+ i_color *mc_colors;
+ int mc_size;
+ int mc_count;
+
+ /* how we translate the colours */
+ i_translate translate;
+
+ /* the error diffusion map to use if translate is mc_errdiff */
+ i_errdiff errdiff;
+ /* the following define the error diffusion values to use if
+ errdiff is ed_custom. ed_orig is the column on the top row that
+ represents the current
+ */
+ int *ed_map;
+ int ed_width, ed_height, ed_orig;
+
+ /* the amount of perturbation to use for translate is mc_perturb */
+ int perturb;
+} i_quantize;
+
+typedef struct i_gif_opts {
+ /* each image has a local color map */
+ int each_palette;
+
+ /* images are interlaced */
+ int interlace;
+
+ /* time for which image is displayed
+ (in 1/100 seconds)
+ default: 0
+ */
+ int delay_count;
+ int *delays;
+
+ /* user input flags
+ default: 0
+ */
+ int user_input_count;
+ char *user_input_flags;
+
+ /* disposal
+ default: 0 */
+ int disposal_count;
+ char *disposal;
+
+ /* this is added to the color table when we make an image transparent */
+ i_color tran_color;
+
+ /* image positions */
+ int position_count;
+ i_gif_pos *positions;
+
+ /* Netscape loop extension - number of loops */
+ int loop_count;
+} i_gif_opts;
+
+extern void quant_makemap(i_quantize *quant, i_img **imgs, int count);
+extern i_palidx *quant_translate(i_quantize *quant, i_img *img);
+extern void quant_transparent(i_quantize *quant, i_palidx *indices, i_img *img, i_palidx trans_index);
+
+#ifdef HAVE_LIBJPEG
+i_img* i_readjpeg(int fd,char** iptc_itext,int *tlength);
+i_img* i_readjpeg_scalar(char *data, int length,char** iptc_itext,int *itlength);
+i_img* i_readjpeg_wiol(io_glue *ig, int length, char** iptc_itext, int *itlength);
+
+i_img* i_readjpeg_extra2(int fd,char** iptc_itext);
+undef_int i_writejpeg(i_img *im,int fd,int qfactor);
+#endif /* HAVE_LIBJPEG */
+
+#ifdef HAVE_LIBTIFF
+i_img* i_readtiff_wiol(io_glue *ig, int length);
+undef_int i_writetiff_wiol(i_img *im, io_glue *ig);
+
+#endif /* HAVE_LIBTIFF */
+
+#ifdef HAVE_LIBPNG
+i_img *i_readpng(int fd);
+i_img *i_readpng_scalar(char *data, int length);
+undef_int i_writepng(i_img *im,int fd);
+#endif /* HAVE_LIBPNG */
+
+#ifdef HAVE_LIBGIF
+i_img *i_readgif(int fd, int **colour_table, int *colours);
+i_img *i_readgif_scalar(char *data, int length, int **colour_table, int *colours);
+i_img *i_readgif_callback(i_read_callback_t callback, char *userdata, int **colour_table, int *colours);
+undef_int i_writegif(i_img *im,int fd,int colors,int pixdev,int fixedlen,i_color fixed[]);
+undef_int i_writegifmc(i_img *im,int fd,int colors);
+undef_int i_writegifex(i_img *im,int fd);
+undef_int i_writegif_gen(i_quantize *quant, int fd, i_img **imgs, int count, i_gif_opts *opts);
+undef_int i_writegif_callback(i_quantize *quant, i_write_callback_t cb, char *userdata, int maxbuffer, i_img **imgs, int count, i_gif_opts *opts);
+
+void i_qdist(i_img *im);
+
+#endif /* HAVE_LIBGIF */
+
+i_img *i_readraw(int fd,int x,int y,int datachannels,int storechannels,int intrl);
+undef_int i_writeraw(i_img* im,int fd);
+
+i_img *i_readpnm_wiol(io_glue *ig, int length);
+undef_int i_writeppm(i_img *im,int fd);
+
+
+i_img* i_scaleaxis(i_img *im, float Value, int Axis);
+i_img* i_scale_nn(i_img *im, float scx, float scy);
+i_img* i_haar(i_img *im);
+int i_count_colors(i_img *im,int maxc);
+
+i_img* i_transform(i_img *im, int *opx,int opxl,int *opy,int opyl,double parm[],int parmlen);
+
+struct rm_op;
+i_img* i_transform2(int width, int height, int channels,
+ struct rm_op *ops, int ops_count,
+ double *n_regs, int n_regs_count,
+ i_color *c_regs, int c_regs_count,
+ i_img **in_imgs, int in_imgs_count);
+/* filters */
+
+void i_contrast(i_img *im, float intensity);
+void i_hardinvert(i_img *im);
+void i_noise(i_img *im, float amount, unsigned char type);
+void i_bumpmap(i_img *im,i_img *bump,int channel,int light_x,int light_y,int strength);
+void i_postlevels(i_img *im,int levels);
+void i_mosaic(i_img *im,int size);
+void i_watermark(i_img *im,i_img *wmark,int tx,int ty,int pixdiff);
+void i_autolevels(i_img *im,float lsat,float usat,float skew);
+void i_radnoise(i_img *im,int xo,int yo,float rscale,float ascale);
+void i_turbnoise(i_img *im,float xo,float yo,float scale);
+void i_gradgen(i_img *im, int num, int *xo, int *yo, i_color *ival, int dmeasure);
+void i_nearest_color(i_img *im, int num, int *xo, int *yo, i_color *ival, int dmeasure);
+
+/* Debug only functions */
+
+void malloc_state( void );
+
+/* this is sort of obsolete now */
+
+typedef struct {
+ undef_int (*i_has_format)(char *frmt);
+ i_color*(*ICL_set)(i_color *cl,unsigned char r,unsigned char g,unsigned char b,unsigned char a);
+ void (*ICL_info)(i_color *cl);
+
+ i_img*(*i_img_new)( void );
+ i_img*(*i_img_empty)(i_img *im,int x,int y);
+ i_img*(*i_img_empty_ch)(i_img *im,int x,int y,int ch);
+ void(*i_img_exorcise)(i_img *im);
+
+ void(*i_img_info)(i_img *im,int *info);
+
+ void(*i_img_setmask)(i_img *im,int ch_mask);
+ int (*i_img_getmask)(i_img *im);
+
+ int (*i_ppix)(i_img *im,int x,int y,i_color *val);
+ int (*i_gpix)(i_img *im,int x,int y,i_color *val);
+
+ void(*i_box)(i_img *im,int x1,int y1,int x2,int y2,i_color *val);
+ void(*i_draw)(i_img *im,int x1,int y1,int x2,int y2,i_color *val);
+ void(*i_arc)(i_img *im,int x,int y,float rad,float d1,float d2,i_color *val);
+ void(*i_copyto)(i_img *im,i_img *src,int x1,int y1,int x2,int y2,int tx,int ty);
+ void(*i_copyto_trans)(i_img *im,i_img *src,int x1,int y1,int x2,int y2,int tx,int ty,i_color *trans);
+ void(*i_rubthru)(i_img *im,i_img *src,int tx,int ty);
+
+} symbol_table_t;
+
+
+
+#endif
--- /dev/null
+#ifndef _IO_H_
+#define _IO_H_
+#include <stdio.h>
+#include <sys/stat.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#include <sys/mman.h>
+#endif
+
+#include "log.h"
+
+
+/* #define MALLOC_DEBUG */
+
+#ifdef IMAGER_DEBUG_MALLOC
+
+#define mymalloc(x) (mymalloc_file_line((x), __FILE__, __LINE__))
+#define myfree(x) (myfree_file_line((x), __FILE__, __LINE__))
+
+void malloc_state();
+void* mymalloc_file_line(int size,char* file,int line);
+void* mymalloc_comm(int size,char *comm);
+
+void myfree_file_line(void *p, char*file, int line);
+
+void bndcheck_all(void);
+
+#else
+
+#define malloc_comm(a,b) (mymalloc(a))
+void malloc_state();
+void* mymalloc(int size);
+void myfree(void *p);
+
+#endif /* IMAGER_MALLOC_DEBUG */
+
+
+#ifdef _MSC_VER
+#undef min
+#undef max
+#endif
+int min(int a,int b);
+int max(int x,int y);
+int myread(int fd,void *buf,int len);
+int mywrite(int fd,void *buf,int len);
+void interleave(unsigned char *inbuffer,unsigned char *outbuffer,int rowsize,int channels);
+
+#endif
--- /dev/null
+#include "io.h"
+#include <stdlib.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+
+
+/* FIXME: make allocation dynamic */
+
+
+#ifdef IMAGER_DEBUG_MALLOC
+
+#define MAXMAL 1024
+#define MAXDESC 65
+
+#define UNDRRNVAL 100
+#define OVERRNVAL 100
+
+#define PADBYTE 0xaa
+
+
+static int malloc_need_init = 1;
+
+typedef struct {
+ void* point;
+ size_t size;
+ char comm[MAXDESC];
+} malloc_entry;
+
+malloc_entry malloc_pointers[MAXMAL];
+
+/*
+#define mymalloc(x) (mymalloc_file_line(x,__FILE__,__LINE__))
+*/
+
+
+void
+malloc_state() {
+ int i, total;
+ total=0;
+ mm_log((0,"malloc_state()\n"));
+ bndcheck_all();
+ for(i=0;i<MAXMAL;i++) if (malloc_pointers[i].point!=NULL) {
+ mm_log((0,"%d: %d (0x%x) : %s\n",i,malloc_pointers[i].size,malloc_pointers[i].point,malloc_pointers[i].comm));
+ total+=malloc_pointers[i].size;
+ }
+ if (total==0 ) mm_log((0,"No memory currently used!\n"))
+ else mm_log((0,"total: %d\n",total));
+}
+
+
+void*
+mymalloc_file_line(int size, char* file, int line) {
+ char *buf;
+ int i;
+ if (malloc_need_init) {
+ for(i=0; i<MAXMAL; i++) malloc_pointers[i].point = NULL;
+ malloc_need_init=0;
+ atexit(malloc_state);
+ }
+
+ /* bndcheck_all(); ACTIVATE FOR LOTS OF THRASHING */
+
+ if ( (buf = malloc(size+UNDRRNVAL+OVERRNVAL)) == NULL ) { mm_log((1,"Unable to allocate %i for %s (%i)\n", size, file, line)); exit(3); }
+ memset( buf, PADBYTE, UNDRRNVAL );
+ memset( &buf[UNDRRNVAL+size], PADBYTE, OVERRNVAL );
+
+ mm_log((1,"mymalloc_file_line: real address %p\n", buf));
+ buf += UNDRRNVAL; /* Do this now so we will see the returned address in the logs. */
+
+ for(i=0;i<MAXMAL;i++) if (malloc_pointers[i].point == NULL) {
+ malloc_pointers[i].size = size;
+ sprintf(malloc_pointers[i].comm,"%s (%d)", file, line);
+ malloc_pointers[i].point = buf;
+ mm_log((1,"mymalloc_file_line: slot <%d> %d bytes allocated at %p for %s (%d)\n", i, size, buf, file, line));
+ return buf;
+ }
+
+ mm_log((0,"more than %d segments allocated at %s (%d)\n", MAXMAL, file, line));
+ exit(255);
+ return NULL;
+}
+
+
+
+
+/* This function not maintained for now */
+
+/*
+void*
+mymalloc_comm(int size,char *comm) {
+ void *buf;
+ int i;
+ if (malloc_need_init) {
+ for(i=0;i<MAXMAL;i++) malloc_pointers[i].point=NULL;
+ malloc_need_init=0;
+ }
+
+ if ((buf=malloc(size))==NULL) { mm_log((1,"Unable to malloc.\n")); exit(3); }
+
+ for(i=0;i<MAXMAL;i++) if (malloc_pointers[i].point==NULL) {
+ malloc_pointers[i].point=buf;
+ malloc_pointers[i].size=size;
+ strncpy(malloc_pointers[i].comm,comm,MAXDESC-1);
+ return buf;
+ }
+ mm_log((0,"more than %d segments malloced\n",MAXMAL));
+ exit(255);
+ return NULL;
+}
+*/
+
+static
+void
+bndcheck(int idx) {
+ int i;
+ size_t s = malloc_pointers[idx].size;
+ unsigned char *pp = malloc_pointers[idx].point;
+ if (!pp) {
+ mm_log((1, "bndcheck: No pointer in slot %d\n", idx));
+ return;
+ }
+
+ for(i=0;i<UNDRRNVAL;i++)
+ if (pp[-(1+i)] != PADBYTE)
+ mm_log((1,"bndcheck: UNDERRUN OF %d bytes detected: slot = %d, point = %p, size = %d\n", i+1, idx, pp, s ));
+
+ for(i=0;i<OVERRNVAL;i++)
+ if (pp[s+i] != PADBYTE)
+ mm_log((1,"bndcheck: OVERRUN OF %d bytes detected: slot = %d, point = %p, size = %d\n", i+1, idx, pp, s ));
+}
+
+void
+bndcheck_all() {
+ int idx;
+ mm_log((1, "bndcheck_all()\n"));
+ for(idx=0; idx<MAXMAL; idx++)
+ if (malloc_pointers[idx].point)
+ bndcheck(idx);
+}
+
+
+
+
+
+void
+myfree_file_line(void *p, char *file, int line) {
+ char *pp = p;
+ int match = 0;
+ int i;
+
+ for(i=0; i<MAXMAL; i++) if (malloc_pointers[i].point == p) {
+ mm_log((1,"myfree_file_line: pointer %i (%s) freed at %s (%i)\n", i, malloc_pointers[i].comm, file, line));
+ bndcheck(i);
+ malloc_pointers[i].point = NULL;
+ match++;
+ }
+
+ if (match != 1) {
+ mm_log((1, "myfree_file_line: inconsistent refcount %d\n", match));
+ }
+
+ mm_log((1, "myfree_file_line: freeing address %p\n", pp-UNDRRNVAL));
+
+ free(pp-UNDRRNVAL);
+}
+
+#else
+
+#define malloc_comm(a,b) (mymalloc(a))
+
+void
+malloc_state() {
+ printf("malloc_state: not in debug mode\n");
+}
+
+void*
+mymalloc(int size) {
+ void *buf;
+
+ mm_log((1, "mymalloc(size %d)\n", size));
+ if ( (buf=malloc(size)) == NULL ) {
+ mm_log((1, "mymalloc: unable to malloc\n", size));
+ fprintf(stderr,"Unable to malloc.\n"); exit(3);
+ }
+ return buf;
+}
+
+void
+myfree(void *p) {
+ free(p);
+}
+
+#endif /* IMAGER_MALLOC_DEBUG */
+
+
+
+
+
+
+
+
+#undef min
+#undef max
+
+int
+min(int a,int b) {
+ if (a<b) return a; else return b;
+}
+
+int
+max(int a,int b) {
+ if (a>b) return a; else return b;
+}
+
+int
+myread(int fd,void *buf,int len) {
+ unsigned char* bufc;
+ int bc,rc;
+ bufc = (unsigned char*)buf;
+ bc=0;
+ while( ((rc=read(fd,bufc+bc,len-bc))>0 ) && (bc!=len) ) bc+=rc;
+ if ( rc < 0 ) return rc;
+ else return bc;
+}
+
+int
+mywrite(int fd,void *buf,int len) {
+ unsigned char* bufc;
+ int bc,rc;
+ bufc=(unsigned char*)buf;
+ bc=0;
+ while(((rc=write(fd,bufc+bc,len-bc))>0) && (bc!=len)) bc+=rc;
+ if (rc<0) return rc;
+ else return bc;
+}
+
+void
+interleave(unsigned char *inbuffer,unsigned char *outbuffer,int rowsize,int channels) {
+ int ch,ind,i;
+ i=0;
+ if ( inbuffer==outbuffer ) return; /* Check if data is already in interleaved format */
+ for( ind=0; ind<rowsize; ind++) for (ch=0; ch<channels; ch++) outbuffer[i++] = inbuffer[rowsize*ch+ind];
+}
+
+
--- /dev/null
+#include "io.h"
+#include "iolayer.h"
+#include "log.h"
+#include <stdlib.h>
+#include <stdio.h>
+#ifdef _MSC_VER
+#include <io.h>
+#endif
+
+#define IOL_DEB(x)
+
+
+char *io_type_names[] = { "FDSEEK", "FDNOSEEK", "BUFFER", "CBSEEK", "CBNOSEEK", "BUFCHAIN" };
+
+
+/*
+=head1 NAME
+
+iolayer.c - encapsulates different source of data into a single framework.
+
+=head1 SYNOPSIS
+
+ io_glue *ig = io_new_fd( fileno(stdin) );
+ method = io_reqmeth( IOL_NOSEEK | IOL_MMAP ); // not implemented yet
+ io_glue_commit_types(ig); // always assume IOL_SEEK for now
+ switch (method) {
+ case IOL_NOSEEK:
+ code that uses ig->readcb()
+ to read data goes here.
+ break;
+ case IOL_MMAP:
+ code that uses ig->readcb()
+ to read data goes here.
+ break;
+ }
+
+ io_glue_DESTROY(ig);
+ // and much more
+
+=head1 DESCRIPTION
+
+iolayer.c implements the basic functions to create and destroy io_glue
+objects for Imager. The typical usage pattern for data sources is:
+
+ 1. Create the source (io_new_fd)
+ 2. Define how you want to get data from it (io_reqmeth)
+ 3. read from it using the interface requested (ig->readdb, ig->mmapcb)
+ 4. Close the source, which
+ shouldn't really close the underlying source. (io_glue DESTROY)
+
+=head1 FUNCTION REFERENCE
+
+Some of these functions are internal.
+
+=over 4
+
+=cut
+*/
+
+
+
+
+/*
+ * Callbacks for sources that cannot seek
+ */
+
+/* fakeseek_read: read method for when emulating a seekable source
+static
+ssize_t
+fakeseek_read(io_glue *ig, void *buf, size_t count) {
+ io_ex_fseek *exdata = ig->exdata;
+ return 0;
+}
+*/
+
+
+
+/*
+ * Callbacks for sources that can seek
+ */
+
+/*
+=item realseek_read(ig, buf, count)
+
+Does the reading from a source that can be seeked on
+
+ ig - io_glue object
+ buf - buffer to return data in
+ count - number of bytes to read into buffer max
+
+=cut
+*/
+
+static
+ssize_t
+realseek_read(io_glue *ig, void *buf, size_t count) {
+ io_ex_rseek *ier = ig->exdata;
+ int fd = (int)ig->source.cb.p;
+ ssize_t rc = 0;
+ size_t bc = 0;
+ char *cbuf = buf;
+
+ IOL_DEB( printf("realseek_read: fd = %d, ier->cpos = %ld, buf = 0x%p, count = %d\n", fd, (long) ier->cpos, buf, count) );
+ /* Is this a good idea? Would it be better to handle differently? skip handling? */
+ while( count!=bc && (rc = ig->source.cb.readcb(fd,cbuf+bc,count-bc))>0 ) bc+=rc;
+
+ ier->cpos += bc;
+ IOL_DEB( printf("realseek_read: rc = %d, bc = %d\n", rc, bc) );
+ return bc;
+}
+
+
+/*
+=item realseek_write(ig, buf, count)
+
+Does the writing to a 'source' that can be seeked on
+
+ ig - io_glue object
+ buf - buffer that contains data
+ count - number of bytes to write
+
+=cut
+*/
+
+static
+ssize_t
+realseek_write(io_glue *ig, const void *buf, size_t count) {
+ io_ex_rseek *ier = ig->exdata;
+ int fd = (int)ig->source.cb.p;
+ ssize_t rc = 0;
+ size_t bc = 0;
+ char *cbuf = (char*)buf;
+
+ IOL_DEB( printf("realseek_write: fd = %d, ier->cpos = %ld, buf = 0x%p, count = %d\n", fd, (long) ier->cpos, buf, count) );
+ /* Is this a good idea? Would it be better to handle differently? skip handling? */
+
+ while( count!=bc && (rc = ig->source.cb.writecb(fd,cbuf+bc,count-bc))>0 ) bc+=rc;
+
+ ier->cpos += bc;
+ IOL_DEB( printf("realseek_write: rc = %d, bc = %d\n", rc, bc) );
+ return bc;
+}
+
+
+/*
+=item realseek_close(ig)
+
+Closes a source that can be seeked on. Not sure if this should be an actual close
+or not. Does nothing for now. Should be fixed.
+
+ ig - data source
+
+=cut
+*/
+
+static
+void
+realseek_close(io_glue *ig) {
+ mm_log((1, "realseek_close(ig %p)\n", ig));
+ /* FIXME: Do stuff here */
+}
+
+
+/* realseek_seek(ig, offset, whence)
+
+Implements seeking for a source that is seekable, the purpose of having this is to be able to
+have an offset into a file that is different from what the underlying library thinks.
+
+ ig - data source
+ offset - offset into stream
+ whence - whence argument a la lseek
+
+=cut
+*/
+
+static
+off_t
+realseek_seek(io_glue *ig, off_t offset, int whence) {
+ /* io_ex_rseek *ier = ig->exdata; Needed later */
+ int fd = (int)ig->source.cb.p;
+ int rc;
+ IOL_DEB( printf("realseek_seek(ig 0x%p, offset %ld, whence %d)\n", ig, (long) offset, whence) );
+ rc = lseek(fd, offset, whence);
+
+ IOL_DEB( printf("realseek_seek: rc %ld\n", (long) rc) );
+ return rc;
+ /* FIXME: How about implementing this offset handling stuff? */
+}
+
+
+
+
+
+
+
+/*
+ * Callbacks for sources that are a chain of variable sized buffers
+ */
+
+
+
+/* Helper functions for buffer chains */
+
+static
+io_blink*
+io_blink_new() {
+ io_blink *ib;
+
+ mm_log((1, "io_blink_new()\n"));
+
+ ib = mymalloc(sizeof(io_blink));
+
+ ib->next = NULL;
+ ib->prev = NULL;
+ ib->len = BBSIZ;
+
+ memset(&ib->buf, 0, ib->len);
+ return ib;
+}
+
+
+
+/*
+=item io_bchain_advance(ieb)
+
+Advances the buffer chain to the next link - extending if
+necessary. Also adjusts the cpos and tfill counters as needed.
+
+ ieb - buffer chain object
+
+=cut
+*/
+
+static
+void
+io_bchain_advance(io_ex_bchain *ieb) {
+ if (ieb->cp->next == NULL) {
+ ieb->tail = io_blink_new();
+ ieb->tail->prev = ieb->cp;
+ ieb->cp->next = ieb->tail;
+
+ ieb->tfill = 0; /* Only set this if we added a new slice */
+ }
+ ieb->cp = ieb->cp->next;
+ ieb->cpos = 0;
+}
+
+
+/*
+
+static
+void
+bufchain_dump(io_ex_bchain *ieb) {
+ mm_log((1, " buf_chain_dump(ieb %p)\n"));
+ mm_log((1, " buf_chain_dump: ieb->offset = %d\n", ieb->offset));
+ mm_log((1, " buf_chain_dump: ieb->length = %d\n", ieb->length));
+ mm_log((1, " buf_chain_dump: ieb->head = %p\n", ieb->head ));
+ mm_log((1, " buf_chain_dump: ieb->tail = %p\n", ieb->tail ));
+ mm_log((1, " buf_chain_dump: ieb->tfill = %d\n", ieb->tfill ));
+ mm_log((1, " buf_chain_dump: ieb->cp = %p\n", ieb->cp ));
+ mm_log((1, " buf_chain_dump: ieb->cpos = %d\n", ieb->cpos ));
+ mm_log((1, " buf_chain_dump: ieb->gpos = %d\n", ieb->gpos ));
+}
+*/
+
+/*
+ * TRUE if lengths are NOT equal
+ */
+
+/*
+static
+void
+chainlencert( io_glue *ig ) {
+ int clen;
+ int cfl = 0;
+ size_t csize = 0;
+ size_t cpos = 0;
+ io_ex_bchain *ieb = ig->exdata;
+ io_blink *cp = ieb->head;
+
+
+ if (ieb->gpos > ieb->length) mm_log((1, "BBAR : ieb->gpos = %d, ieb->length = %d\n", ieb->gpos, ieb->length));
+
+ while(cp) {
+ clen = (cp == ieb->tail) ? ieb->tfill : cp->len;
+ if (ieb->head == cp && cp->prev) mm_log((1, "Head of chain has a non null prev\n"));
+ if (ieb->tail == cp && cp->next) mm_log((1, "Tail of chain has a non null next\n"));
+
+ if (ieb->head != cp && !cp->prev) mm_log((1, "Middle of chain has a null prev\n"));
+ if (ieb->tail != cp && !cp->next) mm_log((1, "Middle of chain has a null next\n"));
+
+ if (cp->prev && cp->prev->next != cp) mm_log((1, "%p = cp->prev->next != cp\n", cp->prev->next));
+ if (cp->next && cp->next->prev != cp) mm_log((1, "%p cp->next->prev != cp\n", cp->next->prev));
+
+ if (cp == ieb->cp) {
+ cfl = 1;
+ cpos += ieb->cpos;
+ }
+
+ if (!cfl) cpos += clen;
+
+ csize += clen;
+ cp = cp->next;
+ }
+ if (( csize != ieb->length )) mm_log((1, "BAR : csize = %d, ieb->length = %d\n", csize, ieb->length));
+ if (( cpos != ieb->gpos )) mm_log((1, "BAR : cpos = %d, ieb->gpos = %d\n", cpos, ieb->gpos ));
+}
+
+
+static
+void
+chaincert( io_glue *ig) {
+ size_t csize = 0;
+ io_ex_bchain *ieb = ig->exdata;
+ io_blink *cp = ieb->head;
+
+ mm_log((1, "Chain verification.\n"));
+
+ mm_log((1, " buf_chain_dump: ieb->offset = %d\n", ieb->offset));
+ mm_log((1, " buf_chain_dump: ieb->length = %d\n", ieb->length));
+ mm_log((1, " buf_chain_dump: ieb->head = %p\n", ieb->head ));
+ mm_log((1, " buf_chain_dump: ieb->tail = %p\n", ieb->tail ));
+ mm_log((1, " buf_chain_dump: ieb->tfill = %d\n", ieb->tfill ));
+ mm_log((1, " buf_chain_dump: ieb->cp = %p\n", ieb->cp ));
+ mm_log((1, " buf_chain_dump: ieb->cpos = %d\n", ieb->cpos ));
+ mm_log((1, " buf_chain_dump: ieb->gpos = %d\n", ieb->gpos ));
+
+ while(cp) {
+ int clen = cp == ieb->tail ? ieb->tfill : cp->len;
+ mm_log((1, "link: %p <- %p -> %p\n", cp->prev, cp, cp->next));
+ if (ieb->head == cp && cp->prev) mm_log((1, "Head of chain has a non null prev\n"));
+ if (ieb->tail == cp && cp->next) mm_log((1, "Tail of chain has a non null next\n"));
+
+ if (ieb->head != cp && !cp->prev) mm_log((1, "Middle of chain has a null prev\n"));
+ if (ieb->tail != cp && !cp->next) mm_log((1, "Middle of chain has a null next\n"));
+
+ if (cp->prev && cp->prev->next != cp) mm_log((1, "%p = cp->prev->next != cp\n", cp->prev->next));
+ if (cp->next && cp->next->prev != cp) mm_log((1, "%p cp->next->prev != cp\n", cp->next->prev));
+
+ csize += clen;
+ cp = cp->next;
+ }
+
+ mm_log((1, "csize = %d %s ieb->length = %d\n", csize, csize == ieb->length ? "==" : "!=", ieb->length));
+}
+*/
+
+
+
+
+
+
+
+
+
+
+
+/*
+=item bufchain_read(ig, buf, count)
+
+Does the reading from a source that can be seeked on
+
+ ig - io_glue object
+ buf - buffer to return data in
+ count - number of bytes to read into buffer max
+
+=cut
+*/
+
+static
+ssize_t
+bufchain_read(io_glue *ig, void *buf, size_t count) {
+ io_ex_bchain *ieb = ig->exdata;
+ size_t scount = count;
+ char *cbuf = buf;
+ size_t sk;
+
+ mm_log((1, "bufchain_read(ig %p, buf %p, count %ld)\n", ig, buf, count));
+ IOL_DEB( printf("bufchain_read: fd = %d, ier->cpos = %ld, buf = 0x%p, count = %d\n", fd, (long) ier->cpos, buf, count) );
+
+ while( scount ) {
+ int clen = (ieb->cp == ieb->tail) ? ieb->tfill : ieb->cp->len;
+ if (clen == ieb->cpos) {
+ if (ieb->cp == ieb->tail) break; /* EOF */
+ ieb->cp = ieb->cp->next;
+ ieb->cpos = 0;
+ clen = (ieb->cp == ieb->tail) ? ieb->tfill : ieb->cp->len;
+ }
+
+ sk = clen - ieb->cpos;
+ sk = sk > scount ? scount : sk;
+
+ memcpy(&cbuf[count-scount], &ieb->cp->buf[ieb->cpos], sk);
+ scount -= sk;
+ ieb->cpos += sk;
+ ieb->gpos += sk;
+ }
+
+ mm_log((1, "bufchain_read: returning %d\n", count-scount));
+ return count-scount;
+}
+
+
+
+
+
+/*
+=item bufchain_write(ig, buf, count)
+
+Does the writing to a 'source' that can be seeked on
+
+ ig - io_glue object
+ buf - buffer that contains data
+ count - number of bytes to write
+
+=cut
+*/
+
+static
+ssize_t
+bufchain_write(io_glue *ig, const void *buf, size_t count) {
+ char *cbuf = (char *)buf;
+ io_ex_bchain *ieb = ig->exdata;
+ size_t ocount = count;
+ size_t sk;
+
+ mm_log((1, "bufchain_write: ig = %p, buf = 0x%p, count = %d\n", ig, buf, count));
+
+ IOL_DEB( printf("bufchain_write: ig = %p, ieb->cpos = %ld, buf = 0x%p, count = %d\n", ig, (long) ieb->cpos, buf, count) );
+
+ while(count) {
+ mm_log((2, "bufchain_write: - looping - count = %d\n", count));
+ if (ieb->cp->len == ieb->cpos) {
+ mm_log((1, "bufchain_write: cp->len == ieb->cpos = %d - advancing chain\n", (long) ieb->cpos));
+ io_bchain_advance(ieb);
+ }
+
+ sk = ieb->cp->len - ieb->cpos;
+ sk = sk > count ? count : sk;
+ memcpy(&ieb->cp->buf[ieb->cpos], &cbuf[ocount-count], sk);
+
+ if (ieb->cp == ieb->tail) {
+ int extend = ieb->cpos + sk - ieb->tfill;
+ mm_log((2, "bufchain_write: extending tail by %d\n", extend));
+ if (extend > 0) {
+ ieb->length += extend;
+ ieb->tfill += extend;
+ }
+ }
+
+ ieb->cpos += sk;
+ ieb->gpos += sk;
+ count -= sk;
+ }
+ return ocount;
+}
+
+/*
+=item bufchain_close(ig)
+
+Closes a source that can be seeked on. Not sure if this should be an actual close
+or not. Does nothing for now. Should be fixed.
+
+ ig - data source
+
+=cut
+*/
+
+static
+void
+bufchain_close(io_glue *ig) {
+ mm_log((1, "bufchain_close(ig %p)\n",ig));
+ IOL_DEB( printf("bufchain_close(ig 0x%p)\n", ig) );
+ /* FIXME: Commit a seek point here */
+
+}
+
+
+/* bufchain_seek(ig, offset, whence)
+
+Implements seeking for a source that is seekable, the purpose of having this is to be able to
+have an offset into a file that is different from what the underlying library thinks.
+
+ ig - data source
+ offset - offset into stream
+ whence - whence argument a la lseek
+
+=cut
+*/
+
+static
+off_t
+bufchain_seek(io_glue *ig, off_t offset, int whence) {
+ io_ex_bchain *ieb = ig->exdata;
+ io_blink *ib = NULL;
+ int wrlen;
+
+ off_t cof = 0;
+ off_t scount = offset;
+ off_t sk;
+
+ mm_log((1, "bufchain_seek(ig %p, offset %ld, whence %d)\n", ig, offset, whence));
+
+ switch (whence) {
+ case SEEK_SET: /* SEEK_SET = 0, From the top */
+ ieb->cp = ieb->head;
+ ieb->cpos = 0;
+ ieb->gpos = 0;
+
+ while( scount ) {
+ int clen = (ieb->cp == ieb->tail) ? ieb->tfill : ieb->cp->len;
+ if (clen == ieb->cpos) {
+ if (ieb->cp == ieb->tail) break; /* EOF */
+ ieb->cp = ieb->cp->next;
+ ieb->cpos = 0;
+ clen = (ieb->cp == ieb->tail) ? ieb->tfill : ieb->cp->len;
+ }
+
+ sk = clen - ieb->cpos;
+ sk = sk > scount ? scount : sk;
+
+ scount -= sk;
+ ieb->cpos += sk;
+ ieb->gpos += sk;
+ }
+
+ wrlen = scount;
+
+ if (wrlen > 0) {
+ /*
+ * extending file - get ieb into consistent state and then
+ * call write which will get it to the correct position
+ */
+ char TB[BBSIZ];
+ memset(TB, 0, BBSIZ);
+ ieb->gpos = ieb->length;
+ ieb->cpos = ieb->tfill;
+
+ while(wrlen > 0) {
+ ssize_t rc, wl = min(wrlen, BBSIZ);
+ mm_log((1, "bufchain_seek: wrlen = %d, wl = %d\n", wrlen, wl));
+ rc = bufchain_write( ig, TB, wl );
+ if (rc != wl) m_fatal(0, "bufchain_seek: Unable to extend file\n");
+ wrlen -= rc;
+ }
+ }
+
+ break;
+
+ case SEEK_CUR:
+ m_fatal(123, "SEEK_CUR IS NOT IMPLEMENTED\n");
+
+ /*
+ case SEEK_CUR:
+ ib = ieb->cp;
+ if (cof < 0) {
+ cof += ib->cpos;
+ cpos = 0;
+ while(cof < 0 && ib->prev) {
+ ib = ib->prev;
+ cof += ib->len;
+ }
+ */
+
+ case SEEK_END: /* SEEK_END = 2 */
+ if (cof>0) m_fatal(0, "bufchain_seek: SEEK_END + %d : Extending files via seek not supported!\n", cof);
+
+ ieb->cp = ieb->tail;
+ ieb->cpos = ieb->tfill;
+
+ if (cof<0) {
+ cof += ieb->cpos;
+ ieb->cpos = 0;
+
+ while(cof<0 && ib->prev) {
+ ib = ib->prev;
+ cof += ib->len;
+ }
+
+ if (cof<0) m_fatal(0, "bufchain_seek: Tried to seek before start of file\n");
+ ieb->gpos = ieb->length+offset;
+ ieb->cpos = cof;
+ }
+ break;
+ default:
+ m_fatal(0, "bufchain_seek: Unhandled seek request: whence = %d\n", whence );
+ }
+
+ mm_log((2, "bufchain_seek: returning ieb->gpos = %d\n", ieb->gpos));
+ return ieb->gpos;
+}
+
+
+
+
+
+
+/*
+ * Methods for setting up data source
+ */
+
+/*
+=item io_obj_setp_buffer(io, p, len)
+
+Sets an io_object for reading from a buffer source
+
+ io - io object that describes a source
+ p - pointer to buffer
+ len - length of buffer
+
+=cut
+*/
+
+void
+io_obj_setp_buffer(io_obj *io, void *p, size_t len) {
+ io->buffer.type = BUFFER;
+ io->buffer.c = (char*) p;
+ io->buffer.len = len;
+}
+
+
+/*
+=item io_obj_setp_cbuf(io, p)
+
+Sets an io_object for reading/writing from a buffer source
+
+ io - io object that describes a source
+ p - pointer to buffer
+ len - length of buffer
+
+=cut
+*/
+
+void
+io_obj_setp_bufchain(io_obj *io) {
+ io->type = BUFCHAIN;
+}
+
+
+/*
+=item io_obj_setp_cb(io, p, readcb, writecb, seekcb)
+
+Sets an io_object for reading from a source that uses callbacks
+
+ io - io object that describes a source
+ p - pointer to data for callbacks
+ readcb - read callback to read from source
+ writecb - write callback to write to source
+ seekcb - seek callback to seek on source
+
+=cut
+*/
+
+void
+io_obj_setp_cb(io_obj *io, void *p, readl readcb, writel writecb, seekl seekcb) {
+ io->cb.type = CBSEEK;
+ io->cb.p = p;
+ io->cb.readcb = readcb;
+ io->cb.writecb = writecb;
+ io->cb.seekcb = seekcb;
+}
+
+/*
+=item io_glue_commit_types(ig)
+
+Creates buffers and initializes structures to read with the chosen interface.
+
+ ig - io_glue object
+
+=cut
+*/
+
+void
+io_glue_commit_types(io_glue *ig) {
+ io_type inn = ig->source.type;
+
+ mm_log((1, "io_glue_commit_types(ig 0x%p)\n", ig));
+ mm_log((1, "io_glue_commit_types: source type %d (%s)\n", inn, io_type_names[inn]));
+
+ switch (inn) {
+ case BUFCHAIN:
+ {
+ io_ex_bchain *ieb = mymalloc(sizeof(io_ex_bchain));
+
+ ieb->offset = 0;
+ ieb->length = 0;
+ ieb->cpos = 0;
+ ieb->gpos = 0;
+ ieb->tfill = 0;
+
+ ieb->head = io_blink_new();
+ ieb->cp = ieb->head;
+ ieb->tail = ieb->head;
+
+ ig->exdata = ieb;
+ ig->readcb = bufchain_read;
+ ig->writecb = bufchain_write;
+ ig->seekcb = bufchain_seek;
+ ig->closecb = bufchain_close;
+ }
+ break;
+ case CBSEEK:
+ default:
+ {
+ io_ex_rseek *ier = mymalloc(sizeof(io_ex_rseek));
+
+ ier->offset = 0;
+ ier->cpos = 0;
+
+ ig->exdata = ier;
+ ig->readcb = realseek_read;
+ ig->writecb = realseek_write;
+ ig->seekcb = realseek_seek;
+ ig->closecb = realseek_close;
+ }
+ }
+}
+
+/*
+=item io_glue_gettypes(ig, reqmeth)
+
+Returns a set of compatible interfaces to read data with.
+
+ ig - io_glue object
+ reqmeth - request mask
+
+The request mask is a bit mask (of something that hasn't been implemented yet)
+of interfaces that it would like to read data from the source which the ig
+describes.
+
+=cut
+*/
+
+void
+io_glue_gettypes(io_glue *ig, int reqmeth) {
+
+ ig = NULL;
+ reqmeth = 0;
+
+ /* FIXME: Implement this function! */
+ /* if (ig->source.type =
+ if (reqmeth & IO_BUFF) */
+
+}
+
+
+/*
+=item io_new_bufchain()
+
+returns a new io_glue object that has the 'empty' source and but can
+be written to and read from later (like a pseudo file).
+
+=cut
+*/
+
+io_glue *
+io_new_bufchain() {
+ io_glue *ig = mymalloc(sizeof(io_glue));
+ io_obj_setp_bufchain(&ig->source);
+ return ig;
+}
+
+
+/*
+=item io_new_fd(fd)
+
+returns a new io_glue object that has the source defined as reading
+from specified filedescriptor. Note that the the interface to recieving
+data from the io_glue callbacks hasn't been done yet.
+
+ fd - file descriptor to read/write from
+
+=cut
+*/
+
+io_glue *
+io_new_fd(int fd) {
+ io_glue *ig = mymalloc(sizeof(io_glue));
+#ifdef _MSC_VER
+ io_obj_setp_cb(&ig->source, (void*)fd, _read, _write, _lseek);
+#else
+ io_obj_setp_cb(&ig->source, (void*)fd, read, write, lseek);
+#endif
+ return ig;
+}
+
+
+
+/*
+=item io_slurp(ig)
+
+Takes the source that the io_glue is bound to and allocates space
+for a return buffer and returns the entire content in a single buffer.
+Note: This only works for io_glue objects that contain a bufchain. It
+is usefull for saving to scalars and such.
+
+ ig - io_glue object
+ c - pointer to a pointer to where data should be copied to
+
+=cut
+*/
+
+size_t
+io_slurp(io_glue *ig, unsigned char **c) {
+ ssize_t rc;
+ off_t orgoff;
+ io_ex_bchain *ieb;
+ unsigned char *cc;
+ io_type inn = ig->source.type;
+
+ if ( inn != BUFCHAIN ) {
+ m_fatal(0, "io_slurp: called on a source that is not from a bufchain\n");
+ }
+
+ ieb = ig->exdata;
+ cc = *c = mymalloc( ieb->length );
+
+ orgoff = ieb->gpos;
+
+ bufchain_seek(ig, 0, SEEK_SET);
+
+ rc = bufchain_read(ig, cc, ieb->length);
+
+ if (rc != ieb->length)
+ m_fatal(1, "io_slurp: bufchain_read returned an incomplete read: rc = %d, request was %d\n", rc, ieb->length);
+
+ return rc;
+}
+
+
+/*
+=item io_glue_DESTROY(ig)
+
+A destructor method for io_glue objects. Should clean up all related buffers.
+Might leave us with a dangling pointer issue on some buffers.
+
+ ig - io_glue object to destroy.
+
+=cut
+*/
+
+void
+io_glue_DESTROY(io_glue *ig) {
+ free(ig);
+ /* FIXME: Handle extradata and such */
+}
--- /dev/null
+#ifndef _IOLAYER_H_
+#define _IOLAYER_H_
+
+
+/* How the IO layer works:
+ *
+ * Start by getting an io_glue object. Then define its
+ * datasource via io_obj_setp_buffer or io_obj_setp_cb. Before
+ * using the io_glue object be sure to call io_glue_commit_types().
+ * After that data can be read via the io_glue->readcb() method.
+ *
+ */
+
+
+#include <stdio.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+
+/* #define BBSIZ 1096 */
+#define BBSIZ 1096
+#define IO_FAKE_SEEK 1<<0L
+#define IO_TEMP_SEEK 1<<1L
+
+
+typedef union { int i; void *p; } iorp;
+
+typedef enum { FDSEEK, FDNOSEEK, BUFFER, CBSEEK, CBNOSEEK, BUFCHAIN } io_type;
+
+#ifdef _MSC_VER
+typedef int ssize_t;
+#endif
+
+struct _io_glue;
+
+/* Callbacks we give out */
+
+typedef ssize_t(*readp) (struct _io_glue *ig, void *buf, size_t count);
+typedef ssize_t(*writep)(struct _io_glue *ig, const void *buf, size_t count);
+typedef off_t (*seekp) (struct _io_glue *ig, off_t offset, int whence);
+typedef void (*closep)(struct _io_glue *ig);
+typedef ssize_t(*sizep) (struct _io_glue *ig);
+
+
+
+/* Callbacks we get */
+
+typedef ssize_t(*readl) (int fd, void *buf, size_t count);
+typedef ssize_t(*writel)(int fd, const void *buf, size_t count);
+typedef off_t (*seekl) (int fd, off_t offset, int whence);
+typedef ssize_t(*sizel) (int fd);
+
+extern char *io_type_names[];
+
+
+typedef struct _io_blink {
+ char buf[BBSIZ];
+ /* size_t cnt; */
+ size_t len; /* How large is this buffer = BBZIS for now */
+ struct _io_blink *next;
+ struct _io_blink *prev;
+} io_blink;
+
+
+/* Structures that describe callback interfaces */
+
+typedef struct {
+ off_t offset;
+ off_t cpos;
+} io_ex_rseek;
+
+
+typedef struct {
+ off_t offset;
+ off_t cpos;
+ io_blink *head;
+ io_blink *tail;
+ io_blink *cp;
+} io_ex_fseek;
+
+
+typedef struct {
+ off_t offset; /* Offset of the source - not used */
+ off_t length; /* Total length of chain in bytes */
+ io_blink *head; /* Start of chain */
+ io_blink *tail; /* End of chain */
+ off_t tfill; /* End of stream in last link */
+ io_blink *cp; /* Current element of list */
+ off_t cpos; /* Offset within the current */
+ off_t gpos; /* Global position in stream */
+} io_ex_bchain;
+
+
+/* Structures to describe data sources */
+
+typedef struct {
+ io_type type;
+ int fd;
+} io_fdseek;
+
+typedef struct {
+ io_type type; /* Must be first parameter */
+ char *name; /* Data source name */
+ char *c;
+ size_t len;
+} io_buffer;
+
+typedef struct {
+ io_type type; /* Must be first parameter */
+ char *name; /* Data source name */
+ void *p; /* Callback data */
+ readl readcb;
+ writel writecb;
+ seekl seekcb;
+} io_cb;
+
+typedef union {
+ io_type type;
+ io_fdseek fdseek;
+ io_buffer buffer;
+ io_cb cb;
+} io_obj;
+
+typedef struct _io_glue {
+ io_obj source;
+ int flags; /* Flags */
+ void *exdata; /* Pair specific data */
+ readp readcb;
+ writep writecb;
+ seekp seekcb;
+ closep closecb;
+ sizep sizecb;
+} io_glue;
+
+void io_obj_setp_buffer (io_obj *io, void *p, size_t len);
+void io_obj_setp_cb (io_obj *io, void *p, readl readcb, writel writecb, seekl seekcb);
+void io_glue_commit_types(io_glue *ig);
+void io_glue_gettypes (io_glue *ig, int reqmeth);
+
+
+/* XS functions */
+io_glue *io_new_fd(int fd);
+io_glue *io_new_bufchain();
+size_t io_slurp(io_glue *ig, unsigned char **c);
+void io_glue_DESTROY(io_glue *ig);
+
+#endif /* _IOLAYER_H_ */
--- /dev/null
+#include <stdio.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <setjmp.h>
+
+#include "iolayer.h"
+#include "image.h"
+#include "jpeglib.h"
+
+
+unsigned char fake_eoi[]={(JOCTET) 0xFF,(JOCTET) JPEG_EOI};
+
+/* Handlers to read from memory */
+
+typedef struct {
+ struct jpeg_source_mgr pub; /* public fields */
+ char *data;
+ int length;
+ JOCTET * buffer; /* start of buffer */
+ boolean start_of_file; /* have we gotten any data yet? */
+} scalar_source_mgr;
+
+typedef scalar_source_mgr *scalar_src_ptr;
+
+
+
+
+
+
+
+
+
+static void
+scalar_init_source (j_decompress_ptr cinfo) {
+ scalar_src_ptr src = (scalar_src_ptr) cinfo->src;
+
+ /* We reset the empty-input-file flag for each image,
+ * but we don't clear the input buffer.
+ * This is correct behavior for reading a series of images from one source.
+ */
+ src->start_of_file = TRUE;
+}
+
+static boolean
+scalar_fill_input_buffer (j_decompress_ptr cinfo) {
+ scalar_src_ptr src = (scalar_src_ptr) cinfo->src;
+ size_t nbytes;
+
+ if (src->start_of_file) {
+ nbytes=src->length;
+ src->buffer=src->data;
+ } else {
+ /* Insert a fake EOI marker */
+ src->buffer = fake_eoi;
+ nbytes = 2;
+ }
+
+ src->pub.next_input_byte = src->buffer;
+ src->pub.bytes_in_buffer = nbytes;
+ src->start_of_file = FALSE;
+ return TRUE;
+}
+
+static void
+scalar_skip_input_data (j_decompress_ptr cinfo, long num_bytes) {
+ scalar_src_ptr src = (scalar_src_ptr) cinfo->src;
+
+ /* Just a dumb implementation for now. Could use fseek() except
+ * it doesn't work on pipes. Not clear that being smart is worth
+ * any trouble anyway --- large skips are infrequent.
+ */
+
+ if (num_bytes > 0) {
+ while (num_bytes > (long) src->pub.bytes_in_buffer) {
+ num_bytes -= (long) src->pub.bytes_in_buffer;
+ (void) scalar_fill_input_buffer(cinfo);
+ /* note we assume that fill_input_buffer will never return FALSE,
+ * so suspension need not be handled.
+ */
+ }
+ src->pub.next_input_byte += (size_t) num_bytes;
+ src->pub.bytes_in_buffer -= (size_t) num_bytes;
+ }
+}
+
+static void
+scalar_term_source (j_decompress_ptr cinfo) { /* no work necessary here */ }
+
+static void
+jpeg_scalar_src(j_decompress_ptr cinfo, char *data, int length) {
+ scalar_src_ptr src;
+
+ if (cinfo->src == NULL) { /* first time for this JPEG object? */
+ cinfo->src = (struct jpeg_source_mgr *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,sizeof(scalar_source_mgr));
+ src = (scalar_src_ptr) cinfo->src;
+ }
+
+ src = (scalar_src_ptr) cinfo->src;
+ src->data = data;
+ src->length = length;
+ src->pub.init_source = scalar_init_source;
+ src->pub.fill_input_buffer = scalar_fill_input_buffer;
+ src->pub.skip_input_data = scalar_skip_input_data;
+ src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
+ src->pub.term_source = scalar_term_source;
+ src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
+ src->pub.next_input_byte = NULL; /* until buffer loaded */
+}
+
+
+
+
+undef_int
+i_writejpeg(i_img *im,int fd,int qfactor) {
+ struct stat stbuf;
+ JSAMPLE *image_buffer;
+ int quality;
+
+ struct jpeg_compress_struct cinfo;
+ struct jpeg_error_mgr jerr;
+
+ FILE *outfile; /* target file */
+ JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */
+ int row_stride; /* physical row width in image buffer */
+
+ mm_log((1,"i_writejpeg(0x%x,fd %d,qfactor %d)\n",im,fd,qfactor));
+
+ if (!(im->channels==1 || im->channels==3)) { fprintf(stderr,"Unable to write JPEG, improper colorspace.\n"); exit(3); }
+ quality = qfactor;
+
+ image_buffer=im->data;
+
+ /* Step 1: allocate and initialize JPEG compression object */
+
+ /* We have to set up the error handler first, in case the initialization
+ * step fails. (Unlikely, but it could happen if you are out of memory.)
+ * This routine fills in the contents of struct jerr, and returns jerr's
+ * address which we place into the link field in cinfo.
+ */
+ cinfo.err = jpeg_std_error(&jerr);
+ /* Now we can initialize the JPEG compression object. */
+ jpeg_create_compress(&cinfo);
+
+ /* Step 2: specify data destination (eg, a file) */
+ /* Note: steps 2 and 3 can be done in either order. */
+
+ /* Here we use the library-supplied code to send compressed data to a
+ * stdio stream. You can also write your own code to do something else.
+ * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that
+ * requires it in order to write binary files.
+ */
+
+ if (fstat(fd,&stbuf)<0) { fprintf(stderr,"Unable to stat fd.\n"); exit(1); }
+
+ if ((outfile = fdopen(fd,"w")) == NULL) {
+ fprintf(stderr, "can't fdopen.\n");
+ exit(1);
+ }
+
+ jpeg_stdio_dest(&cinfo, outfile);
+
+ /* Step 3: set parameters for compression */
+
+ /* First we supply a description of the input image.
+ * Four fields of the cinfo struct must be filled in:
+ */
+ cinfo.image_width = im->xsize; /* image width and height, in pixels */
+ cinfo.image_height = im->ysize;
+
+ if (im->channels==3) {
+ cinfo.input_components = 3; /* # of color components per pixel */
+ cinfo.in_color_space = JCS_RGB; /* colorspace of input image */
+ }
+
+ if (im->channels==1) {
+ cinfo.input_components = 1; /* # of color components per pixel */
+ cinfo.in_color_space = JCS_GRAYSCALE; /* colorspace of input image */
+ }
+
+ /* Now use the library's routine to set default compression parameters.
+ * (You must set at least cinfo.in_color_space before calling this,
+ * since the defaults depend on the source color space.)
+ */
+ jpeg_set_defaults(&cinfo);
+ /* Now you can set any non-default parameters you wish to.
+ * Here we just illustrate the use of quality (quantization table) scaling:
+ */
+
+ jpeg_set_quality(&cinfo, quality, TRUE); /* limit to baseline-JPEG values */
+
+ /* Step 4: Start compressor */
+
+ /* TRUE ensures that we will write a complete interchange-JPEG file.
+ * Pass TRUE unless you are very sure of what you're doing.
+ */
+ jpeg_start_compress(&cinfo, TRUE);
+
+ /* Step 5: while (scan lines remain to be written) */
+ /* jpeg_write_scanlines(...); */
+
+ /* Here we use the library's state variable cinfo.next_scanline as the
+ * loop counter, so that we don't have to keep track ourselves.
+ * To keep things simple, we pass one scanline per call; you can pass
+ * more if you wish, though.
+ */
+ row_stride = im->xsize * im->channels; /* JSAMPLEs per row in image_buffer */
+
+ while (cinfo.next_scanline < cinfo.image_height) {
+ /* jpeg_write_scanlines expects an array of pointers to scanlines.
+ * Here the array is only one element long, but you could pass
+ * more than one scanline at a time if that's more convenient.
+ */
+ row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride];
+ (void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
+ }
+
+ /* Step 6: Finish compression */
+
+ jpeg_finish_compress(&cinfo);
+ /* After finish_compress, we can close the output file. */
+ fclose(outfile);
+
+ /* Step 7: release JPEG compression object */
+
+ /* This is an important step since it will release a good deal of memory. */
+ jpeg_destroy_compress(&cinfo);
+
+ return(1);
+}
+
+
+static int tlength=0;
+static char **iptc_text=NULL;
+
+#define JPEG_APP13 0xED /* APP13 marker code */
+
+LOCAL(unsigned int)
+jpeg_getc (j_decompress_ptr cinfo)
+/* Read next byte */
+{
+ struct jpeg_source_mgr * datasrc = cinfo->src;
+
+ if (datasrc->bytes_in_buffer == 0) {
+ if (! (*datasrc->fill_input_buffer) (cinfo))
+ { fprintf(stderr,"Jpeglib: cant suspend.\n"); exit(3); }
+ /* ERREXIT(cinfo, JERR_CANT_SUSPEND);*/
+ }
+ datasrc->bytes_in_buffer--;
+ return GETJOCTET(*datasrc->next_input_byte++);
+}
+
+METHODDEF(boolean)
+APP13_handler (j_decompress_ptr cinfo) {
+ INT32 length;
+ unsigned int cnt=0;
+
+ length = jpeg_getc(cinfo) << 8;
+ length += jpeg_getc(cinfo);
+ length -= 2; /* discount the length word itself */
+
+ tlength=length;
+
+ if ( ((*iptc_text)=mymalloc(length)) == NULL ) return FALSE;
+ while (--length >= 0) (*iptc_text)[cnt++] = jpeg_getc(cinfo);
+
+ return TRUE;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+METHODDEF(void)
+my_output_message (j_common_ptr cinfo)
+{
+ char buffer[JMSG_LENGTH_MAX];
+
+ /* Create the message */
+ (*cinfo->err->format_message) (cinfo, buffer);
+
+ /* Send it to stderr, adding a newline */
+ mm_log((1, "%s\n", buffer));
+}
+
+
+
+
+
+
+struct my_error_mgr {
+ struct jpeg_error_mgr pub; /* "public" fields */
+ jmp_buf setjmp_buffer; /* for return to caller */
+};
+
+typedef struct my_error_mgr * my_error_ptr;
+
+/* Here's the routine that will replace the standard error_exit method */
+
+METHODDEF(void)
+my_error_exit (j_common_ptr cinfo) {
+ /* cinfo->err really points to a my_error_mgr struct, so coerce pointer */
+ my_error_ptr myerr = (my_error_ptr) cinfo->err;
+
+ /* Always display the message. */
+ /* We could postpone this until after returning, if we chose. */
+ (*cinfo->err->output_message) (cinfo);
+
+ /* Return control to the setjmp point */
+ longjmp(myerr->setjmp_buffer, 1);
+}
+
+
+
+
+
+
+i_img*
+i_readjpeg(int fd,char** iptc_itext,int *itlength) {
+ i_img *im;
+
+ struct jpeg_decompress_struct cinfo;
+ /* We use our private extension JPEG error handler.
+ * Note that this struct must live as long as the main JPEG parameter
+ * struct, to avoid dangling-pointer problems.
+ */
+
+ /* struct jpeg_error_mgr jerr;*/
+ struct my_error_mgr jerr;
+ FILE * infile; /* source file */
+ JSAMPARRAY buffer; /* Output row buffer */
+ int row_stride; /* physical row width in output buffer */
+
+ mm_log((1,"i_readjpeg(fd %d,iptc_itext 0x%x)\n",fd,iptc_itext));
+
+ iptc_text=iptc_itext;
+
+ if ((infile = fdopen(fd,"r")) == NULL) {
+ fprintf(stderr, "can't fdopen.\n");
+ exit(1);
+ }
+
+ /* Step 1: allocate and initialize JPEG decompression object */
+
+ /* We set up the normal JPEG error routines, then override error_exit. */
+ cinfo.err = jpeg_std_error(&jerr.pub);
+ jerr.pub.error_exit = my_error_exit;
+ jerr.pub.output_message = my_output_message;
+ /* Establish the setjmp return context for my_error_exit to use. */
+ if (setjmp(jerr.setjmp_buffer)) {
+ /* If we get here, the JPEG code has signaled an error.
+ * We need to clean up the JPEG object, close the input file, and return.
+ */
+ jpeg_destroy_decompress(&cinfo);
+ fclose(infile);
+ *iptc_itext=NULL;
+ *itlength=0;
+ return NULL;
+ }
+
+ /* Now we can initialize the JPEG decompression object. */
+ jpeg_create_decompress(&cinfo);
+ jpeg_set_marker_processor(&cinfo, JPEG_APP13, APP13_handler);
+ /* Step 2: specify data source (eg, a file) */
+
+ jpeg_stdio_src(&cinfo, infile);
+
+ /* Step 3: read file parameters with jpeg_read_header() */
+
+ (void) jpeg_read_header(&cinfo, TRUE);
+
+ /* We can ignore the return value from jpeg_read_header since
+ * (a) suspension is not possible with the stdio data source, and
+ * (b) we passed TRUE to reject a tables-only JPEG file as an error.
+ * See libjpeg.doc for more info.
+ */
+
+ /* Step 4: set parameters for decompression */
+
+ /* In this example, we don't need to change any of the defaults set by
+ * jpeg_read_header(), so we do nothing here.
+ */
+
+ /* Step 5: Start decompressor */
+
+ (void) jpeg_start_decompress(&cinfo);
+ /* We can ignore the return value since suspension is not possible
+ * with the stdio data source.
+ */
+
+ /* We may need to do some setup of our own at this point before reading
+ * the data. After jpeg_start_decompress() we have the correct scaled
+ * output image dimensions available, as well as the output colormap
+ * if we asked for color quantization.
+ * In this example, we need to make an output work buffer of the right size.
+ */
+
+ im=i_img_empty_ch(NULL,cinfo.output_width,cinfo.output_height,cinfo.output_components);
+
+ /* fprintf(stderr,"JPEG info:\n xsize:%d\n ysize:%d\n channels:%d.\n",xsize,ysize,channels);*/
+
+ /* JSAMPLEs per row in output buffer */
+ row_stride = cinfo.output_width * cinfo.output_components;
+ /* Make a one-row-high sample array that will go away when done with image */
+ buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
+
+ /* Step 6: while (scan lines remain to be read) */
+ /* jpeg_read_scanlines(...); */
+
+ /* Here we use the library's state variable cinfo.output_scanline as the
+ * loop counter, so that we don't have to keep track ourselves.
+ */
+
+ while (cinfo.output_scanline < cinfo.output_height) {
+ /* jpeg_read_scanlines expects an array of pointers to scanlines.
+ * Here the array is only one element long, but you could ask for
+ * more than one scanline at a time if that's more convenient.
+ */
+ (void) jpeg_read_scanlines(&cinfo, buffer, 1);
+ /* Assume put_scanline_someplace wants a pointer and sample count. */
+ memcpy(im->data+im->channels*im->xsize*(cinfo.output_scanline-1),buffer[0],row_stride);
+ }
+
+ /* Step 7: Finish decompression */
+
+ (void) jpeg_finish_decompress(&cinfo);
+ /* We can ignore the return value since suspension is not possible
+ * with the stdio data source.
+ */
+
+ /* Step 8: Release JPEG decompression object */
+
+ /* This is an important step since it will release a good deal of memory. */
+ jpeg_destroy_decompress(&cinfo);
+
+ /* After finish_decompress, we can close the input file.
+ * Here we postpone it until after no more JPEG errors are possible,
+ * so as to simplify the setjmp error logic above. (Actually, I don't
+ * think that jpeg_destroy can do an error exit, but why assume anything...)
+ */
+
+/* fclose(infile); DO NOT fclose() BECAUSE THEN close() WILL FAIL*/
+
+ /* At this point you may want to check to see whether any corrupt-data
+ * warnings occurred (test whether jerr.pub.num_warnings is nonzero).
+ */
+
+ /* And we're done! */
+
+ *itlength=tlength;
+ mm_log((1,"i_readjpeg -> (0x%x)\n",im));
+ return im;
+}
+
+
+
+i_img*
+i_readjpeg_scalar(char *data, int length,char** iptc_itext,int *itlength) {
+ i_img *im;
+
+ struct jpeg_decompress_struct cinfo;
+ struct my_error_mgr jerr;
+ JSAMPARRAY buffer; /* Output row buffer */
+ int row_stride; /* physical row width in output buffer */
+
+ mm_log((1,"i_readjpeg_scalar(data 0x%08x, length %d,iptc_itext 0x%x)\n",data,length,iptc_itext));
+ iptc_text=iptc_itext;
+
+ cinfo.err = jpeg_std_error(&jerr.pub);
+ jerr.pub.error_exit = my_error_exit;
+ jerr.pub.output_message = my_output_message;
+ if (setjmp(jerr.setjmp_buffer)) {
+ jpeg_destroy_decompress(&cinfo);
+ *iptc_itext=NULL;
+ *itlength=0;
+ return NULL;
+ }
+
+ jpeg_create_decompress(&cinfo);
+ jpeg_set_marker_processor(&cinfo, JPEG_APP13, APP13_handler);
+ jpeg_scalar_src(&cinfo, data, length );
+ (void) jpeg_read_header(&cinfo, TRUE);
+ (void) jpeg_start_decompress(&cinfo);
+ im=i_img_empty_ch(NULL,cinfo.output_width,cinfo.output_height,cinfo.output_components);
+ row_stride = cinfo.output_width * cinfo.output_components;
+ buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
+ while (cinfo.output_scanline < cinfo.output_height) {
+ (void) jpeg_read_scanlines(&cinfo, buffer, 1);
+ memcpy(im->data+im->channels*im->xsize*(cinfo.output_scanline-1),buffer[0],row_stride);
+ }
+ (void) jpeg_finish_decompress(&cinfo);
+ jpeg_destroy_decompress(&cinfo);
+ *itlength=tlength;
+ mm_log((1,"i_readjpeg_scalar -> (0x%x)\n",im));
+ return im;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#define JPGS 1024
+
+
+
+typedef struct {
+ struct jpeg_source_mgr pub; /* public fields */
+ io_glue *data;
+ JOCTET *buffer; /* start of buffer */
+ int length; /* Do I need this? */
+ boolean start_of_file; /* have we gotten any data yet? */
+} wiol_source_mgr;
+
+typedef wiol_source_mgr *wiol_src_ptr;
+
+static void
+wiol_init_source (j_decompress_ptr cinfo) {
+ wiol_src_ptr src = (wiol_src_ptr) cinfo->src;
+
+ /* We reset the empty-input-file flag for each image,
+ * but we don't clear the input buffer.
+ * This is correct behavior for reading a series of images from one source.
+ */
+ src->start_of_file = TRUE;
+}
+
+static boolean
+wiol_fill_input_buffer(j_decompress_ptr cinfo) {
+ wiol_src_ptr src = (wiol_src_ptr) cinfo->src;
+ ssize_t nbytes; /* We assume that reads are "small" */
+
+ mm_log((1,"wiol_fill_input_buffer(cinfo 0x%p)\n"));
+
+ nbytes = src->data->readcb(src->data, src->buffer, JPGS);
+
+ if (nbytes <= 0) { /* Insert a fake EOI marker */
+ src->pub.next_input_byte = fake_eoi;
+ src->pub.bytes_in_buffer = 2;
+ } else {
+ src->pub.next_input_byte = src->buffer;
+ src->pub.bytes_in_buffer = nbytes;
+ }
+ src->start_of_file = FALSE;
+ return TRUE;
+}
+
+static void
+wiol_skip_input_data (j_decompress_ptr cinfo, long num_bytes) {
+ wiol_src_ptr src = (wiol_src_ptr) cinfo->src;
+
+ /* Just a dumb implementation for now. Could use fseek() except
+ * it doesn't work on pipes. Not clear that being smart is worth
+ * any trouble anyway --- large skips are infrequent.
+ */
+
+ if (num_bytes > 0) {
+ while (num_bytes > (long) src->pub.bytes_in_buffer) {
+ num_bytes -= (long) src->pub.bytes_in_buffer;
+ (void) wiol_fill_input_buffer(cinfo);
+ /* note we assume that fill_input_buffer will never return FALSE,
+ * so suspension need not be handled.
+ */
+ }
+ src->pub.next_input_byte += (size_t) num_bytes;
+ src->pub.bytes_in_buffer -= (size_t) num_bytes;
+ }
+}
+
+static void
+wiol_term_source (j_decompress_ptr cinfo) {
+ /* no work necessary here */
+ wiol_src_ptr src;
+ if (cinfo->src != NULL) {
+ src = (wiol_src_ptr) cinfo->src;
+ myfree(src->buffer);
+ }
+}
+
+static void
+jpeg_wiol_src(j_decompress_ptr cinfo, io_glue *ig, int length) {
+ wiol_src_ptr src;
+
+ if (cinfo->src == NULL) { /* first time for this JPEG object? */
+ cinfo->src = (struct jpeg_source_mgr *) (*cinfo->mem->alloc_small)
+ ((j_common_ptr) cinfo, JPOOL_PERMANENT,sizeof(wiol_source_mgr));
+ src = (wiol_src_ptr) cinfo->src;
+ }
+
+ /* put the request method call in here later */
+ io_glue_commit_types(ig);
+
+ src = (wiol_src_ptr) cinfo->src;
+ src->data = ig;
+ src->buffer = mymalloc( JPGS );
+ src->length = length;
+
+ src->pub.init_source = wiol_init_source;
+ src->pub.fill_input_buffer = wiol_fill_input_buffer;
+ src->pub.skip_input_data = wiol_skip_input_data;
+ src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
+ src->pub.term_source = wiol_term_source;
+ src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
+ src->pub.next_input_byte = NULL; /* until buffer loaded */
+}
+
+
+
+
+
+
+
+
+
+
+
+
+i_img*
+i_readjpeg_wiol(io_glue *data, int length, char** iptc_itext, int *itlength) {
+ i_img *im;
+
+ struct jpeg_decompress_struct cinfo;
+ struct my_error_mgr jerr;
+ JSAMPARRAY buffer; /* Output row buffer */
+ int row_stride; /* physical row width in output buffer */
+
+ mm_log((1,"i_readjpeg_wiol(data 0x%p, length %d,iptc_itext 0x%p)\n", data, iptc_itext));
+
+ iptc_text = iptc_itext;
+ cinfo.err = jpeg_std_error(&jerr.pub);
+ jerr.pub.error_exit = my_error_exit;
+ jerr.pub.output_message = my_output_message;
+
+ /* Set error handler */
+ if (setjmp(jerr.setjmp_buffer)) {
+ jpeg_destroy_decompress(&cinfo);
+ *iptc_itext=NULL;
+ *itlength=0;
+ return NULL;
+ }
+
+ jpeg_create_decompress(&cinfo);
+ jpeg_set_marker_processor(&cinfo, JPEG_APP13, APP13_handler);
+ jpeg_wiol_src(&cinfo, data, length);
+
+ (void) jpeg_read_header(&cinfo, TRUE);
+ (void) jpeg_start_decompress(&cinfo);
+ im=i_img_empty_ch(NULL,cinfo.output_width,cinfo.output_height,cinfo.output_components);
+ row_stride = cinfo.output_width * cinfo.output_components;
+ buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
+ while (cinfo.output_scanline < cinfo.output_height) {
+ (void) jpeg_read_scanlines(&cinfo, buffer, 1);
+ memcpy(im->data+im->channels*im->xsize*(cinfo.output_scanline-1),buffer[0],row_stride);
+ }
+ (void) jpeg_finish_decompress(&cinfo);
+ jpeg_destroy_decompress(&cinfo);
+ *itlength=tlength;
+ mm_log((1,"i_readjpeg_wiol -> (0x%x)\n",im));
+ return im;
+}
+
+
--- /dev/null
+package Imager::Color;
+
+use Imager;
+use strict;
+use vars qw();
+
+# It's just a front end to the XS creation functions.
+
+
+# Parse color spec into an a set of 4 colors
+
+sub pspec {
+ return (@_,255) if @_ == 3;
+ return (@_ ) if @_ == 4;
+ if ($_[0] =~
+ /^\#?([\da-f][\da-f])([\da-f][\da-f])([\da-f][\da-f])([\da-f][\da-f])/i) {
+ return (hex($1),hex($2),hex($3),hex($4));
+ }
+ if ($_[0] =~ /^\#?([\da-f][\da-f])([\da-f][\da-f])([\da-f][\da-f])/i) {
+ return (hex($1),hex($2),hex($3),255);
+ }
+ return ();
+}
+
+
+
+sub new {
+ shift; # get rid of class name.
+ my @arg = pspec(@_);
+ return @arg ? new_internal($arg[0],$arg[1],$arg[2],$arg[3]) : ();
+}
+
+sub set {
+ my $self = shift;
+ print "set: @_\n";
+ my @arg = pspec(@_);
+ return @arg ? set_internal($self, $arg[0],$arg[1],$arg[2],$arg[3]) : ();
+}
+
+
+
+
+
+1;
+
+__END__
+
+=head1 NAME
+
+Imager::Color - Color handling for Imager.
+
+=head1 SYNOPSIS
+
+ $color = Imager::Color->new($red, $green, $blue);
+ $color = Imager::Color->new($red, $green, $blue, $alpha);
+ $color = Imager::Color->new("#C0C0FF"); # html color specification
+
+ $color->set($red, $green, $blue);
+ $color->set($red, $green, $blue, $alpha);
+ $color->set("#C0C0FF"); # html color specification
+
+ ($red, $green, $blue, $alpha) = $color->rgba();
+ @hsv = $color->hsv(); # not implemented but proposed
+
+ $color->info();
+
+
+=head1 DESCRIPTION
+
+This module handles creating color objects used by imager. The idea is
+that in the future this module will be able to handle colorspace calculations
+as well.
+
+=over 4
+
+=item new
+
+This creates a color object to pass to functions that need a color argument.
+
+=item set
+
+This changes an already defined color. Note that this does not affect any places
+where the color has been used previously.
+
+=item rgba
+
+This returns the rgba code of the color the object contains.
+
+=item info
+
+Calling info merely dumps the relevant colorcode to the log.
+
+=back
+
+=head1 AUTHOR
+
+Arnar M. Hrafnkelsson, addi@umich.edu
+And a great deal of help from others - see the README for a complete
+list.
+
+=head1 SEE ALSO
+
+Imager(3)
+http://www.eecs.umich.edu/~addi/perl/Imager/
+
+=cut
+
--- /dev/null
+package Imager::Expr;
+
+use Imager::Regops;
+use strict;
+
+my %expr_types;
+
+my $error;
+
+sub error {
+ shift if UNIVERSAL::isa($_[0], 'Imager::Expr');
+ if (@_) {
+ $error = "@_";
+ }
+ else {
+ return $error;
+ }
+}
+
+# what else?
+my %default_constants =
+ (
+ # too many digits, better than too few
+ pi=>3.14159265358979323846264338327950288419716939937510582097494
+ );
+
+sub new {
+ my ($class, $opts) = @_;
+
+ # possibly this is a very bad idea
+ my ($type) = grep exists $expr_types{$_}, keys %$opts;
+ die "Imager::Expr: No known expression type"
+ if !defined $type;
+ my $self = bless {}, $expr_types{$type};
+ $self->{variables} = [ @{$opts->{variables}} ];
+ $self->{constants} = { %default_constants, %{$opts->{constants} || {}} };
+ $self->{ops} = $self->compile($opts->{$type}, $opts)
+ or return;
+ $self->optimize()
+ or return;
+ $self->{code} = $self->assemble()
+ or return;
+ $self;
+}
+
+sub register_type {
+ my ($pack, $name) = @_;
+ $expr_types{$name} = $pack;
+}
+
+sub _variables {
+ return @{$_[0]->{variables}};
+}
+
+sub code {
+ return $_[0]->{code};
+}
+
+sub nregs {
+ return $_[0]->{nregs};
+}
+
+sub cregs {
+ return $_[0]->{cregs};
+}
+
+my $numre = '[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?';
+
+sub numre {
+ $numre;
+}
+
+# optimize the code
+sub optimize {
+ my ($self) = @_;
+
+ my @ops = @{$self->{ops}};
+
+ # this function cannot current handle code with jumps
+ return 1 if grep $_->[0] =~ /^jump/, @ops;
+
+ # optimization - common sub-expression elimination
+ # it's possible to fold this into the code generation - but it will wait
+
+ my $max_opr = $Imager::Regops::MaxOperands;
+ my $attr = \%Imager::Regops::Attr;
+ my $foundops = 1;
+ while ($foundops) {
+ $foundops = 0;
+ my %seen;
+ my $index;
+ my @out;
+ while (@ops) {
+ my $op = shift @ops;
+ my $desc = join(",", @{$op}[0..$max_opr]);
+ if ($seen{$desc}) {
+ push(@out, @ops);
+ my $old = $op->[-1];
+ my $new = $seen{$desc};
+ for $op (@out) {
+ for my $reg (@{$op}[1..$max_opr]) {
+ $reg = $new if $reg eq $old;
+ }
+ }
+ $foundops=1;
+ last;
+ }
+ $seen{$desc} = $op->[-1];
+ push(@out, $op);
+ }
+ @ops = @out;
+ }
+ # strength reduction
+ for my $op (@ops) {
+ # reduce division by a constant to multiplication by a constant
+ if ($op->[0] eq 'div' && $op->[2] =~ /^r(\d+)/
+ && defined($self->{"nregs"}[$1])) {
+ my $newreg = @{$self->{"nregs"}};
+ push(@{$self->{"nregs"}}, 1.0/$self->{"nregs"}[$1]);
+ $op->[0] = 'mult';
+ $op->[2] = 'r'.$newreg;
+ }
+ }
+ $self->{ops} = \@ops;
+ 1;
+}
+
+sub assemble {
+ my ($self) = @_;
+ my $attr = \%Imager::Regops::Attr;
+ my $max_opr = $Imager::Regops::MaxOperands;
+ my @ops = @{$self->{ops}};
+ for my $op (@ops) {
+ $op->[0] = $attr->{$op->[0]}{opcode};
+ for (@{$op}[1..$max_opr+1]) { s/^[rpj]// }
+ }
+ my $pack = $Imager::Regops::PackCode x (2+$Imager::Regops::MaxOperands);
+
+ return join("", ,map { pack($pack, @$_, ) } @ops);
+}
+
+# converts stack code to register code
+sub stack_to_reg {
+ my ($self, @st_ops) = @_;
+ my @regstack;
+ my %nregs;
+ my @vars = $self->_variables();
+ my @nregs = (0) x scalar(@vars);
+ my @cregs;
+ my $attr = \%Imager::Regops::Attr;
+ my %vars;
+ my %names;
+ my $max_opr = $Imager::Regops::MaxOperands;
+ @vars{@vars} = map { "r$_" } 0..$#vars;
+
+ my @ops;
+ for (@st_ops) {
+ if (/^$numre$/) {
+ # combining constants makes the optimization below work
+ if (exists $nregs{$_}) {
+ push(@regstack, $nregs{$_});
+ }
+ else {
+ $nregs{$_} = "r".@nregs;
+ push(@regstack,"r".@nregs);
+ push(@nregs, $_);
+ }
+ }
+ elsif (exists $vars{$_}) {
+ push(@regstack, $vars{$_});
+ }
+ elsif (exists $attr->{$_} && length $attr->{$_}{types}) {
+ if (@regstack < $attr->{$_}{parms}) {
+ error("Imager::transform2: stack underflow on $_");
+ return;
+ }
+ my @parms = splice(@regstack, -$attr->{$_}{parms});
+ my $types = join("", map {substr($_,0,1)} @parms);
+ if ($types ne $attr->{$_}{types}) {
+ if (exists $attr->{$_.'p'} && $types eq $attr->{$_.'p'}{types}) {
+ $_ .= 'p';
+ }
+ else {
+ error("Imager::transform2: Call to $_ with incorrect types");
+ return;
+ }
+ }
+ my $result;
+ if ($attr->{$_}{result} eq 'r') {
+ $result = "r".@nregs;
+ push(@nregs, undef);
+ }
+ else {
+ $result = "p".@cregs;
+ push(@cregs, -1);
+ }
+ push(@regstack, $result);
+ push(@parms, "0") while @parms < $max_opr;
+ push(@ops, [ $_, @parms, $result ]);
+ #print "$result <- $_ @parms\n";
+ }
+ elsif (/^!(\w+)$/) {
+ if (!@regstack) {
+ error("Imager::transform2: stack underflow with $_");
+ return;
+ }
+ $names{$1} = pop(@regstack);
+ }
+ elsif (/^\@(\w+)$/) {
+ if (exists $names{$1}) {
+ push(@regstack, $names{$1});
+ }
+ else {
+ error("Imager::Expr: unknown storage \@$1");
+ return;
+ }
+ }
+ else {
+ error("Imager::Expr: unknown operator $_");
+ return;
+ }
+ }
+ if (@regstack != 1) {
+ error("stack must have only one item at end");
+ return;
+ }
+ if ($regstack[0] !~ /^p/) {
+ error("you must have a color value at the top of the stack at end");
+ return;
+ }
+ push(@ops, [ "ret", $regstack[0], (-1) x $max_opr ]);
+
+ $self->{"nregs"} = \@nregs;
+ $self->{"cregs"} = \@cregs;
+
+ return \@ops;
+}
+
+sub dumpops {
+ my $result = '';
+ for my $op (@{$_[0]->{ops}}) {
+ $result .= "@{$op}\n";
+ }
+ $result;
+}
+
+# unassembles the compiled code
+sub dumpcode {
+ my ($self) = @_;
+ my $code = $self->{"code"};
+ my $attr = \%Imager::Regops::Attr;
+ my @code = unpack("${Imager::Regops::PackCode}*", $code);
+ my %names = map { $attr->{$_}{opcode}, $_ } keys %Imager::Regops::Attr;
+ my @vars = $self->_variables();
+ my $result = '';
+ my $index = 0;
+ while (my @op = splice(@code, 0, 2+$Imager::Regops::MaxOperands)) {
+ my $opcode = shift @op;
+ my $name = $names{$opcode};
+ if ($name) {
+ $result .= "j$index: $name($opcode)";
+ my @types = split //, $attr->{$name}{types};
+ for my $parm (@types) {
+ my $reg = shift @op;
+ $result .= " $parm$reg";
+ if ($parm eq 'r') {
+ if ($reg < @vars) {
+ $result.= "($vars[$reg])";
+ }
+ elsif (defined $self->{"nregs"}[$reg]) {
+ $result .= "($self->{\"nregs\"}[$reg])";
+ }
+ }
+ }
+
+ $result .= " -> $attr->{$name}{result}$op[-1]"
+ if $attr->{$name}{result};
+ $result .= "\n";
+ }
+ else {
+ $result .= "unknown($opcode) @op\n";
+ }
+ ++$index;
+ }
+
+ $result;
+}
+
+package Imager::Expr::Postfix;
+use vars qw(@ISA);
+@ISA = qw(Imager::Expr);
+
+Imager::Expr::Postfix->register_type('rpnexpr');
+
+my %op_names = ( '+'=>'add', '-'=>'subtract', '*'=>'mult', '/' => 'div',
+ '%'=>'mod', '**'=>'pow' );
+
+sub compile {
+ my ($self, $expr, $opts) = @_;
+
+ my @st_ops = split ' ', $expr;
+
+ for (@st_ops) {
+ $_ = $op_names{$_} if exists $op_names{$_};
+ $_ = $self->{constants}{$_} if exists $self->{constants}{$_};
+ }
+ return $self->stack_to_reg(@st_ops);
+}
+
+package Imager::Expr::Infix;
+
+use vars qw(@ISA);
+@ISA = qw(Imager::Expr);
+use Imager::Regops qw(%Attr $MaxOperands);
+
+
+eval "use Parse::RecDescent;";
+__PACKAGE__->register_type('expr') if !$@;
+
+# I really prefer bottom-up parsers
+my $grammar = <<'GRAMMAR';
+
+code : assigns 'return' expr
+{ $return = [ @item[1,3] ] }
+
+assigns : assign(s?) { $return = [ @{$item[1]} ] }
+
+assign : identifier '=' expr ';'
+{ $return = [ @item[1,3] ] }
+
+expr : relation
+
+relation : addition (relstuff)(s?)
+{
+ $return = $item[1];
+ for my $op(@{$item[2]}) { $return = [ $op->[0], $return, $op->[1] ] }
+}
+
+relstuff : relop addition { $return = [ @item[1,2] ] }
+
+relop : '<=' { $return = 'le' }
+ | '<' { $return = 'lt' }
+ | '==' { $return = 'eq' }
+ | '>=' { $return = 'ge' }
+ | '>' { $return = 'gt' }
+ | '!=' { $return = 'ne' }
+
+addition : multiply (addstuff)(s?)
+{
+ $return = $item[1];
+# for my $op(@{$item[2]}) { $return .= " @{$op}[1,0]"; }
+ for my $op(@{$item[2]}) { $return = [ $op->[0], $return, $op->[1] ] }
+}
+addstuff : addop multiply { $return = [ @item[1,2] ] }
+addop : '+' { $return = 'add' }
+ | '-' { $return = 'subtract' }
+
+multiply : power mulstuff(s?)
+{ $return = $item[1];
+# for my $op(@{$item[2]}) { $return .= " @{$op}[1,0]"; }
+ for my $op(@{$item[2]}) { $return = [ $op->[0], $return, $op->[1] ] }
+}
+
+mulstuff : mulop power { $return = [ @item[1,2] ] }
+mulop : '*' { $return = 'mult' }
+ | '/' { $return = 'div' }
+ | '%' { $return = 'mod' }
+
+power : powstuff(s?) atom
+{
+ $return = $item[2];
+ for my $op(reverse @{$item[1]}) { $return = [ @{$op}[1,0], $return ] }
+}
+ | atom
+powstuff : atom powop { $return = [ @item[1,2] ] }
+powop : '**' { $return = 'pow' }
+
+atom: '(' expr ')' { $return = $item[2] }
+ | '-' atom { $return = [ uminus=>$item[2] ] }
+ | number
+ | funccall
+ | identifier
+
+number : /[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/
+
+exprlist : expr ',' exprlist { $return = [ $item[1], @{$item[3]} ] }
+ | expr { $return = [ $item[1] ] }
+
+funccall : identifier '(' exprlist ')'
+{ $return = [ $item[1], @{$item[3]} ] }
+
+identifier : /[^\W\d]\w*/ { $return = $item[1] }
+
+GRAMMAR
+
+my $parser;
+
+sub init_parser {
+ if (!$parser) {
+ $parser = Parse::RecDescent->new($grammar);
+ }
+}
+
+sub compile {
+ my ($self, $expr, $opts) = @_;
+ if (!$parser) {
+ $parser = Parse::RecDescent->new($grammar);
+ }
+ my $optree = $parser->code($expr);
+ if (!$optree) {
+ $self->error("Error in $expr\n");
+ return;
+ }
+
+ @{$self->{inputs}}{$self->_variables} = ();
+ $self->{varregs} = {};
+ @{$self->{varregs}}{$self->_variables} = map { "r$_" } 0..$self->_variables-1;
+ $self->{"nregs"} = [ (undef) x $self->_variables ];
+ $self->{"cregs"} = [];
+ $self->{"lits"} = {};
+
+ eval {
+ # generate code for the assignments
+ for my $assign (@{$optree->[0]}) {
+ my ($varname, $tree) = @$assign;
+ if (exists $self->{inputs}{$varname}) {
+ $self->error("$varname is an input - you can't assign to it");
+ return;
+ }
+ $self->{varregs}{$varname} = $self->gencode($tree);
+ }
+
+ # generate the final result
+ my $result = $self->gencode($optree->[1]);
+ if ($result !~ /^p\d+$/) {
+ $self->error("You must return a colour value");
+ return;
+ }
+ push(@{$self->{genops}}, [ 'ret', $result, (0) x $MaxOperands ])
+ };
+ if ($@) {
+ $self->error($@);
+ return;
+ }
+
+ return $self->{genops};
+}
+
+sub gencode {
+ my ($self, $tree) = @_;
+
+ if (ref $tree) {
+ my ($op, @parms) = @$tree;
+
+ if (!exists $Attr{$op}) {
+ die "Unknown operator or function $op";
+ }
+
+ for my $subtree (@parms) {
+ $subtree = $self->gencode($subtree);
+ }
+ my $types = join("", map {substr($_,0,1)} @parms);
+
+ if (length($types) < length($Attr{$op}{types})) {
+ die "Too few parameters in call to $op";
+ }
+ if ($types ne $Attr{$op}{types}) {
+ # some alternate operators have the same name followed by p
+ my $opp = $op."p";
+ if (exists $Attr{$opp} &&
+ $types eq $Attr{$opp}{types}) {
+ $op = $opp;
+ }
+ else {
+ die "Call to $_ with incorrect types";
+ }
+ }
+ my $result;
+ if ($Attr{$op}{result} eq 'r') {
+ $result = "r".@{$self->{nregs}};
+ push(@{$self->{nregs}}, undef);
+ }
+ else {
+ $result = "p".@{$self->{cregs}};
+ push(@{$self->{cregs}}, undef);
+ }
+ push(@parms, "0") while @parms < $MaxOperands;
+ push(@{$self->{genops}}, [ $op, @parms, $result]);
+ return $result;
+ }
+ elsif (exists $self->{varregs}{$tree}) {
+ return $self->{varregs}{$tree};
+ }
+ elsif ($tree =~ /^$numre$/ || exists $self->{constants}{$tree}) {
+ $tree = $self->{constants}{$tree} if exists $self->{constants}{$tree};
+
+ if (exists $self->{lits}{$tree}) {
+ return $self->{lits}{$tree};
+ }
+ my $reg = "r".@{$self->{nregs}};
+ push(@{$self->{nregs}}, $tree);
+ $self->{lits}{$tree} = $reg;
+
+ return $reg;
+ }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Imager::Expr - implements expression parsing and compilation for the
+expression evaluation engine used by Imager::transform2()
+
+=head1 SYNOPSIS
+
+my $code = Imager::Expr->new({rpnexpr=>$someexpr})
+ or die "Cannot compile $someexpr: ",Imager::Expr::error();
+
+=head1 DESCRIPTION
+
+This module is used internally by the Imager::transform2() function.
+You shouldn't have much need to use it directly, but you may want to
+extend it.
+
+To create a new Imager::Expr object, call:
+
+ my %options;
+ my $expr = Imager::Expr->new(\%options)
+ or die Imager::Expr::error();
+
+You will need to set an expression value and you may set any of the
+following:
+
+=over 4
+
+=item constants
+
+A hashref defining extra constants for expression parsing. The names
+of the constants must be valid identifiers (/[^\W\d]\w*/) and the
+values must be valid numeric constants (that Perl recognizes in
+scalars).
+
+Imager::Expr may define it's own constants (currently just pi.)
+
+=item variables
+
+A reference to an array of variable names. These are allocated
+numeric registers starting from register zero.
+
+=back
+
+By default you can define a 'rpnexpr' key (which emulates RPN) or
+'expr' (an infix expression). It's also possible to write other
+expression parsers that will use other keys. Only one expression key
+should be defined.
+
+=head2 Instance methods
+
+The Imager::Expr::error() method is used to retrieve the error if the
+expression object cannot be created.
+
+=head2 Methods
+
+Imager::Expr provides only a few simple methods meant for external use:
+
+=over 4
+
+=item $expr->code()
+
+Returns the compiled code.
+
+=item $expr->nregs()
+
+Returns a reference to the array of numeric registers.
+
+=item $expr->cregs()
+
+Returns a reference to the array of colour registers.
+
+=item $expr->dumpops()
+
+Returns a string with the generated VM "machine code".
+
+=item $expr->dumpcode()
+
+Returns a string with the unassembled VM "machine code".
+
+=back
+
+=head2 Creating a new parser
+
+I'll write this one day.
+
+Methods used by parsers:
+
+=over 4
+
+=item @vars = $self->_variables()
+
+A list (not a reference) of the input variables. This should be used
+to allocate as many registers as there are variable as input
+registers.
+
+=item $self->error($message)
+
+Set the return value of Imager::Expr::error()
+
+=item @ops = $self->stack_to_reg(@stack_ops)
+
+Converts marginally parsed RPN to register code.
+
+=back
+
+=head2 Future compatibility
+
+Try to avoid doing your own optimization beyond literal folding - if
+we add some sort of jump, the existing optimizer will need to be
+rewritten, and any optimization you perform may well be broken too
+(well, your code generation will probably be broken anyway <sigh>).
+
+=cut
--- /dev/null
+package Imager::Expr::Assem;
+use strict;
+use Imager::Expr;
+use Imager::Regops;
+
+use vars qw(@ISA);
+@ISA = qw(Imager::Expr);
+
+__PACKAGE__->register_type('assem');
+
+sub compile {
+ my ($self, $expr, $opts) = @_;
+ my %nregs;
+ my @vars = $self->_variables();
+ my @nregs = (0) x @vars;
+ my @cregs;
+ my %vars;
+ @vars{@vars} = map { "r$_" } 0..$#vars;
+ my %labels;
+ my @ops;
+ my @msgs;
+ my $attr = \%Imager::Regops::Attr;
+
+ # initially produce [ $linenum, $result, $opcode, @parms ]
+ my $lineno = 0;
+ while ($expr =~ s/^([^\n]+)(?:\n|$)//) {
+ ++$lineno;
+ my $line = $1;
+ $line =~ s/#.*//;
+ next if $line =~ /^\s*$/;
+ for my $op (split /;/, $line) {
+ if (my ($name, $type) = $op =~ /^\s*var\s+([^:]+):(\S+)\s*$/) {
+ if (exists $vars{$name}) {
+ push(@msgs, "$lineno: duplicate variable name '$name'");
+ next;
+ }
+ if ($type eq 'num' || $type eq 'n') {
+ $vars{$name} = 'r'.@nregs;
+ push(@nregs, undef);
+ next;
+ }
+ elsif ($type eq 'pixel' || $type eq 'p' || $type eq 'c') {
+ $vars{$name} = 'p'.@cregs;
+ push(@cregs, undef);
+ next;
+ }
+ push(@msgs, "$lineno: unknown variable type $type");
+ next;
+ }
+ # any statement can have a label
+ if ($op =~ s/^\s*(\w+):\s*//) {
+ if ($labels{$1}) {
+ push(@msgs,
+ "$lineno: duplicate label $1 (previous on $labels{$1}[1])");
+ next;
+ }
+ $labels{$1} = [ scalar @ops, $lineno ];
+ }
+ next if $op =~ /^\s*$/;
+ # jumps have special operand handling
+ if ($op =~ /^\s*jump\s+(\w+)\s*$/) {
+ push(@ops, [$lineno, "", "jump", $1]);
+ }
+ elsif (my ($code, $reg, $targ) =
+ ($op =~ /^\s*(jumpz|jumpnz)\s+(\S+)\s+(\S+)\s*$/)) {
+ push(@ops, [$lineno, "", $code, $reg, $targ]);
+ }
+ elsif ($op =~ /^\s*print\s+(\S+)\s*/) {
+ push(@ops, [$lineno, "", 'print', $1 ]);
+ }
+ elsif ($op =~ /^\s*ret\s+(\S+)\s*/) {
+ push(@ops, [$lineno, "", 'ret', $1]);
+ }
+ elsif ($op =~ s/\s*(\S+)\s*=\s*(\S+)\s*$//) {
+ # simple assignment
+ push(@ops, [$lineno, $1, "set", $2]);
+ }
+ elsif ($op =~ s/\s*(\S+)\s*=\s*(\S+)\s*//) {
+ # some normal ops finally
+ my ($result, $opcode) = ($1, $2);
+ unless ($attr->{$opcode}) {
+ push(@msgs, "$lineno: unknown operator $opcode");
+ next;
+ }
+ my @oper;
+ while ($op =~ s/(\S+)\s*//) {
+ push(@oper, $1);
+ }
+ push(@ops, [$lineno, $result, $opcode, @oper]);
+ }
+ else {
+ push(@msgs, "$lineno: invalid statement '$op'");
+ }
+ }
+ }
+
+ my $max_opr = $Imager::Regops::MaxOperands;
+ my $numre = $self->numre;
+ my $trans =
+ sub {
+ # translate a name/number to a <type><digits>
+ my ($name) = @_;
+ $name = $self->{constants}{$name}
+ if exists $self->{constants}{$name};
+ if ($vars{$name}) {
+ return $vars{$name};
+ }
+ elsif ($name =~ /^$numre$/) {
+ $vars{$name} = 'r'.@nregs;
+ push(@nregs, $name);
+ return $vars{$name};
+ }
+ else {
+ push(@msgs, "$lineno: undefined variable $name");
+ return '';
+ }
+ };
+ # now to translate symbols and so on
+ OP: for my $op (@ops) {
+ $lineno = shift @$op;
+ if ($op->[1] eq 'jump') {
+ unless (exists $labels{$op->[2]}) {
+ push(@msgs, "$lineno: unknown label $op->[2]");
+ next;
+ }
+ $op = [ 'jump', "j$labels{$op->[2]}[0]", (0) x $max_opr ];
+ }
+ elsif ($op->[1] =~ /^jump/) {
+ unless (exists $labels{$op->[3]}) {
+ push(@msgs, "$lineno: unknown label $op->[2]");
+ next;
+ }
+ $op = [ $op->[1], $trans->($op->[2]), "j$labels{$op->[3]}[0]",
+ (0) x ($max_opr-1) ];
+ }
+ elsif ($op->[1] eq 'print') {
+ $op = [ $op->[1], $trans->($op->[2]), (0) x $max_opr ];
+ }
+ elsif ($op->[1] eq 'ret') {
+ $op = [ 'ret', $trans->($op->[2]), (0) x $max_opr ];
+ }
+ else {
+ # a normal operator
+ my ($result, $name, @parms) = @$op;
+
+ if ($result =~ /^$numre$/) {
+ push(@msgs, "$lineno: target of operator cannot be a constant");
+ next;
+ }
+ $result = $trans->($result);
+ for my $parm (@parms) {
+ $parm = $trans->($parm);
+ }
+ push(@parms, (0) x ($max_opr-@parms));
+ $op = [ $op->[1], @parms, $result ];
+ }
+ }
+
+ # more validation than a real assembler
+ # not trying to solve the halting problem...
+ if (@ops && $ops[-1][0] ne 'ret' && $ops[-1][0] ne 'jump') {
+ push(@msgs, ": the last instruction must be ret or jump");
+ }
+
+ $self->{nregs} = \@nregs;
+ $self->{cregs} = \@cregs;
+
+ if (@msgs) {
+ $self->error(join("\n", @msgs));
+ return 0;
+ }
+
+ return \@ops;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+ Imager::Expr::Assem - an assembler for producing code for the Imager
+ register machine
+
+=head1 SYNOPSIS
+
+ use Imager::Expr::Assem;
+ my $expr = Imager::Expr->new(assem=>'...', ...)
+
+=head1 DESCRIPTION
+
+This module is a simple Imager::Expr compiler that compiles a
+low-level language that has a nearly 1-to-1 relationship to the
+internal representation used for compiled regmach code.
+
+=head2 Syntax
+
+Each line can contain multiple statements separated by semi-colons.
+
+Anything after '#' in a line is ignored.
+
+Types of statements:
+
+=over 4
+
+=item variable definition
+
+=over 4
+
+C<var> I<name>:I<type>
+
+=back
+
+defines variable I<name> to have I<type>, which can be any of 'n' or
+'num' for a numeric type or 'pixel', 'p' or 'c' for a pixel or color
+type.
+
+Variable names cannot include whitespace.
+
+=item operators
+
+Operators can be split into 3 basic types, those that have a result
+value, those that don't and the null operator, eg. jump has no value.
+
+The format for operators that return a value is typically:
+
+=over 4
+
+I<result> = I<operator> I<operand> ...
+
+=back
+
+and for those that don't return a value:
+
+=over 4
+
+I<operator> I<operand>
+
+=back
+
+where operator is any valid regmach operator, result is any variable
+defined with C<var>, and operands are variables, constants or
+literals, or for jump operators, labels.
+
+The set operator can be simplified to:
+
+=over 4
+
+I<result> = I<operator>
+
+=back
+
+All operators maybe preceded by a label, which is any non-whitespace
+text immediately followed by a colon (':').
+
+=back
+
+=head1 BUGS
+
+Note that the current optimizer may produce incorrect optimization for
+your code, fortunately the optimizer will disable itself if you
+include any jump operator in your code. A single jump to anywhere
+after your final ret operator can be used to disable the optimizer
+without slowing down your code.
+
+There's currently no high-level code generation that can generate code
+with loops or real conditions.
+
+=head1 SEE ALSO
+
+Imager(3), transform.perl, regmach.c
+
+=head1 AUTHOR
+
+Tony Cook <tony@develop-help.com>
+
+=cut
--- /dev/null
+package Imager::Font;
+
+use Imager::Color;
+use strict;
+use vars qw(%T1_Paths %TT_Paths %T1_Cache %TT_Cache $TT_CSize $TT_CSize $T1AA);
+
+# This class is a container
+# and works for both truetype and t1 fonts.
+
+
+# $T1AA is in there because for some reason (probably cache related) antialiasing
+# is a system wide setting in t1 lib.
+
+sub t1_set_aa_level {
+ if (!defined $T1AA or $_[0] != $T1AA) {
+ Imager::i_t1_set_aa($_[0]);
+ $T1AA=$_[0];
+ }
+}
+
+# search method
+# 1. start by checking if file is the parameter
+# 1a. if so qualify path and compare to the cache.
+# 2a. if in cache - take it's id from there and increment count.
+#
+
+sub new {
+ my $class = shift;
+ my $self ={};
+ my ($file,$type,$id);
+ my %hsh=(color=>Imager::Color->new(255,0,0,0),
+ size=>15,
+ @_);
+
+ bless $self,$class;
+
+ if ($hsh{'file'}) {
+ $file=$hsh{'file'};
+ if ( $file !~ m/^\// ) {
+ $file='./'.$file;
+ if (! -e $file) {
+ $Imager::ERRSTR="Font $file not found";
+ return();
+ }
+ }
+
+ $type=$hsh{'type'};
+ if (!defined($type) or $type !~ m/^(t1|tt)/) {
+ $type='tt' if $file =~ m/\.ttf$/i;
+ $type='t1' if $file =~ m/\.pfb$/i;
+ }
+ if (!defined($type)) {
+ $Imager::ERRSTR="Font type not found";
+ return;
+ }
+ } else {
+ $Imager::ERRSTR="No font file specified";
+ return;
+ }
+
+ if (!$Imager::formats{$type}) {
+ $Imager::ERRSTR="`$type' not enabled";
+ return;
+ }
+
+ # here we should have the font type or be dead already.
+
+ if ($type eq 't1') {
+ $id=Imager::i_t1_new($file);
+ }
+
+ if ($type eq 'tt') {
+ $id=Imager::i_tt_new($file);
+ }
+
+ $self->{'aa'}=$hsh{'aa'}||'0';
+ $self->{'file'}=$file;
+ $self->{'id'}=$id;
+ $self->{'type'}=$type;
+ $self->{'size'}=$hsh{'size'};
+ $self->{'color'}=$hsh{'color'};
+ return $self;
+}
+
+
+
+
+
+
+sub bounding_box {
+ my $self=shift;
+ my %input=@_;
+ my @box;
+
+ if (!exists $input{'string'}) { $Imager::ERRSTR='string parameter missing'; return; }
+
+ if ($self->{type} eq 't1') {
+ @box=Imager::i_t1_bbox($self->{id}, defined($input{size}) ? $input{size} :$self->{size},
+ $input{string}, length($input{string}));
+ }
+ if ($self->{type} eq 'tt') {
+ @box=Imager::i_tt_bbox($self->{id}, defined($input{size}) ? $input{size} :$self->{size},
+ $input{string}, length($input{string}));
+ }
+
+ if(exists $input{'x'} and exists $input{'y'}) {
+ my($gdescent, $gascent)=@box[1,3];
+ $box[1]=$input{'y'}-$gascent; # top = base - ascent (Y is down)
+ $box[3]=$input{'y'}-$gdescent; # bottom = base - descent (Y is down, descent is negative)
+ $box[0]+=$input{'x'};
+ $box[2]+=$input{'x'};
+ } elsif (exists $input{'canon'}) {
+ $box[3]-=$box[1]; # make it cannoical (ie (0,0) - (width, height))
+ $box[2]-=$box[0];
+ }
+ return @box;
+}
+
+1;
+
+
+
+__END__
+
+=head1 NAME
+
+Imager::Font - Font handling for Imager.
+
+=head1 SYNOPSIS
+
+ $t1font = Imager::Font->new(file => 'pathtofont.pfb');
+ $ttfont = Imager::Font->new(file => 'pathtofont.ttf');
+
+ $blue = Imager::Color->new("#0000FF");
+ $font = Imager::Font->new(file => 'pathtofont.ttf',
+ color => $blue,
+ size => 30);
+
+ ($neg_width,
+ $global_descent,
+ $pos_width,
+ $global_ascent,
+ $descent,
+ $ascent) = $font->bounding_box(string=>"Foo");
+
+ $logo = $font->logo(text => "Slartibartfast Enterprises",
+ size => 40,
+ border => 5,
+ color => $green);
+ # logo is proposed - doesn't exist yet
+
+
+ $img->string(font => $font,
+ text => "Model-XYZ",
+ x => 15,
+ y => 40,
+ size => 40,
+ color => $red
+ aa => 1);
+
+ # Documentation in Imager.pm
+
+=head1 DESCRIPTION
+
+This module handles creating Font objects used by imager. The module
+also handles querying fonts for sizes and such. If both T1lib and
+freetype were avaliable at the time of compilation then Imager should
+be able to work with both truetype fonts and t1 postscript fonts. To
+check if Imager is t1 or truetype capable you can use something like
+this:
+
+ use Imager;
+ print "Has truetype" if $Imager::formats{tt};
+ print "Has t1 postscript" if $Imager::formats{t1};
+
+
+=over 4
+
+=item new
+
+This creates a font object to pass to functions that take a font argument.
+
+ $font = Imager::Font->new(file => 'denmark.ttf',
+ color => $blue,
+ size => 30,
+ aa => 1);
+
+This creates a font which is the truetype font denmark.ttf. It's
+default color is $blue, default size is 30 pixels and it's rendered
+antialised by default. Imager can see which type of font a file is by
+looking at the suffix of the filename for the font. A suffix of 'ttf'
+is taken to mean a truetype font while a suffix of 'pfb' is taken to
+mean a t1 postscript font. If Imager cannot tell which type a font is
+you can tell it explicitly by using the C<type> parameter:
+
+ $t1font = Imager::Font->new(file => 'fruitcase', type => 't1');
+ $ttfont = Imager::Font->new(file => 'arglebarf', type => 'tt');
+
+If any of the C<color>, C<size> or C<aa> parameters are omitted when
+calling C<Imager::Font->new()> the they take the following values:
+
+
+ color => Imager::Color->new(255, 0, 0, 0); # this default should be changed
+ size => 15
+ aa => 0
+
+=item bounding_box
+Returns the bounding box for the specified string. Example:
+
+ ($neg_width,
+ $global_descent,
+ $pos_width,
+ $global_ascent,
+ $descent,
+ $ascent) = $font->bounding_box(string => "A Fool");
+
+The C<$neg_width> is the relative start of a the string. In some
+cases this can be a negative number, in that case the first letter
+stretches to the left of the starting position that is specified in
+the string method of the Imager class. <$global_descent> is the how
+far down the lowest letter of the entire font reaches below the
+baseline (this is often j). C<$pos_width> is how wide the string from
+from the starting position is. The total width of the string is
+C<$pos_width-$neg_width>. C<$descent> and C<$ascent> are the as
+<$global_descent> and <$global_ascent> except that they are only for
+the characters that appear in the string. Obviously we can stuff all
+the results into an array just as well:
+
+ @metrics = $font->bounding_box(string => "testing 123");
+
+Note that extra values may be added, so $metrics[-1] isn't supported.
+It's possible to translate the output by a passing coordinate to the
+bounding box method:
+
+ @metrics = $font->bounding_box(string => "testing 123", x=>45, y=>34);
+
+This gives the bounding box as if the string had been put down at C<(x,y)>
+By giving bounding_box 'canon' as a true value it's possible to measure
+the space needed for the string:
+
+ @metrics = $font->bounding_box(string=>"testing",size=>15,canon=>1);
+
+This returns tha same values in $metrics[0] and $metrics[1],
+but:
+
+ $bbox[2] - horizontal space taken by glyphs
+ $bbox[3] - vertical space taken by glyphs
+
+
+
+=item string
+
+This is a method of the Imager class but because it's described in
+here since it belongs to the font routines. Example:
+
+ $img=Imager->new();
+ $img=read(file=>"test.jpg");
+ $img->string(font=>$t1font,
+ text=>"Model-XYZ",
+ x=>0,
+ y=>40,
+ size=>40,
+ color=>$red);
+ $img->write(file=>"testout.jpg");
+
+This would put a 40 pixel high text in the top left corner of an
+image. If you measure the actuall pixels it varies since the fonts
+usually do not use their full height. It seems that the color and
+size can be specified twice. When a font is created only the actual
+font specified matters. It his however convenient to store default
+values in a font, such as color and size. If parameters are passed to
+the string function they are used instead of the defaults stored in
+the font.
+
+If string() is called with the C<channel> parameter then the color
+isn't used and the font is drawn in only one channel of the image.
+This can be quite handy to create overlays. See the examples for tips
+about this.
+
+Sometimes it is necessary to know how much space a string takes before
+rendering it. The bounding_box() method described earlier can be used
+for that.
+
+
+=item logo
+
+This method doesn't exist yet but is under consideration. It would mostly
+be helpful for generating small tests and such. Its proposed interface is:
+
+ $img = $font->logo(string=>"Plan XYZ", color=>$blue, border=>7);
+
+This would be nice for writing (admittedly multiline) one liners like:
+
+Imager::Font->new(file=>"arial.ttf", color=>$blue, aa=>1)
+ ->string(text=>"Plan XYZ", border=>5)
+ ->write(file=>"xyz.png");
+
+
+
+=back
+
+=head1 AUTHOR
+
+Arnar M. Hrafnkelsson, addi@umich.edu
+And a great deal of help from others - see the README for a complete
+list.
+
+=head1 SEE ALSO
+
+Imager(3)
+http://www.eecs.umich.edu/~addi/perl/Imager/
+
+=cut
+
+
--- /dev/null
+# AUTOMATICALLY GENERATED BY regops.perl
+package Imager::Regops;
+use strict;
+require Exporter;
+use vars qw(@ISA @EXPORT @EXPORT_OK %Attr $MaxOperands $PackCode);
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(%Attr $MaxOperands $PackCode);
+
+use constant RBC_ADD => 0;
+use constant RBC_SUBTRACT => 1;
+use constant RBC_MULT => 2;
+use constant RBC_DIV => 3;
+use constant RBC_MOD => 4;
+use constant RBC_POW => 5;
+use constant RBC_UMINUS => 6;
+use constant RBC_MULTP => 7;
+use constant RBC_ADDP => 8;
+use constant RBC_SUBTRACTP => 9;
+use constant RBC_SIN => 10;
+use constant RBC_COS => 11;
+use constant RBC_ATAN2 => 12;
+use constant RBC_SQRT => 13;
+use constant RBC_DISTANCE => 14;
+use constant RBC_GETP1 => 15;
+use constant RBC_GETP2 => 16;
+use constant RBC_GETP3 => 17;
+use constant RBC_VALUE => 18;
+use constant RBC_HUE => 19;
+use constant RBC_SAT => 20;
+use constant RBC_HSV => 21;
+use constant RBC_RED => 22;
+use constant RBC_GREEN => 23;
+use constant RBC_BLUE => 24;
+use constant RBC_RGB => 25;
+use constant RBC_INT => 26;
+use constant RBC_IF => 27;
+use constant RBC_IFP => 28;
+use constant RBC_LE => 29;
+use constant RBC_LT => 30;
+use constant RBC_GE => 31;
+use constant RBC_GT => 32;
+use constant RBC_EQ => 33;
+use constant RBC_NE => 34;
+use constant RBC_AND => 35;
+use constant RBC_OR => 36;
+use constant RBC_NOT => 37;
+use constant RBC_ABS => 38;
+use constant RBC_RET => 39;
+use constant RBC_JUMP => 40;
+use constant RBC_JUMPZ => 41;
+use constant RBC_JUMPNZ => 42;
+use constant RBC_SET => 43;
+use constant RBC_SETP => 44;
+use constant RBC_PRINT => 45;
+use constant RBC_OP_COUNT => 46;
+
+@EXPORT = qw(RBC_ADD RBC_SUBTRACT RBC_MULT RBC_DIV RBC_MOD RBC_POW RBC_UMINUS RBC_MULTP RBC_ADDP RBC_SUBTRACTP RBC_SIN RBC_COS RBC_ATAN2 RBC_SQRT RBC_DISTANCE RBC_GETP1 RBC_GETP2 RBC_GETP3 RBC_VALUE RBC_HUE RBC_SAT RBC_HSV RBC_RED RBC_GREEN RBC_BLUE RBC_RGB RBC_INT RBC_IF RBC_IFP RBC_LE RBC_LT RBC_GE RBC_GT RBC_EQ RBC_NE RBC_AND RBC_OR RBC_NOT RBC_ABS RBC_RET RBC_JUMP RBC_JUMPZ RBC_JUMPNZ RBC_SET RBC_SETP RBC_PRINT RBC_OP_COUNT);
+
+%Attr = (
+ 'setp' => {
+ 'result' => 'p',
+ 'parms' => 1,
+ 'opcode' => 44,
+ 'func' => 0,
+ 'types' => 'p'
+ },
+ 'green' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 23,
+ 'func' => 1,
+ 'types' => 'p'
+ },
+ 'abs' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 38,
+ 'func' => 1,
+ 'types' => 'r'
+ },
+ 'le' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 29,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'cos' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 11,
+ 'func' => 1,
+ 'types' => 'r'
+ },
+ 'not' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 37,
+ 'func' => 0,
+ 'types' => 'r'
+ },
+ 'ne' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 34,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'blue' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 24,
+ 'func' => 1,
+ 'types' => 'p'
+ },
+ 'and' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 35,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'mult' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 2,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'pow' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 5,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'lt' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 30,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'mod' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 4,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'getp1' => {
+ 'result' => 'p',
+ 'parms' => 2,
+ 'opcode' => 15,
+ 'func' => 1,
+ 'types' => 'rr'
+ },
+ 'atan2' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 12,
+ 'func' => 1,
+ 'types' => 'rr'
+ },
+ 'getp2' => {
+ 'result' => 'p',
+ 'parms' => 2,
+ 'opcode' => 16,
+ 'func' => 1,
+ 'types' => 'rr'
+ },
+ 'getp3' => {
+ 'result' => 'p',
+ 'parms' => 2,
+ 'opcode' => 17,
+ 'func' => 1,
+ 'types' => 'rr'
+ },
+ 'value' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 18,
+ 'func' => 1,
+ 'types' => 'p'
+ },
+ 'subtractp' => {
+ 'result' => 'p',
+ 'parms' => 2,
+ 'opcode' => 9,
+ 'func' => 0,
+ 'types' => 'pp'
+ },
+ 'ge' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 31,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'sat' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 20,
+ 'func' => 1,
+ 'types' => 'p'
+ },
+ 'jump' => {
+ 'result' => undef,
+ 'parms' => 0,
+ 'opcode' => 40,
+ 'func' => 0,
+ 'types' => ''
+ },
+ 'if' => {
+ 'result' => 'r',
+ 'parms' => 3,
+ 'opcode' => 27,
+ 'func' => 1,
+ 'types' => 'rrr'
+ },
+ 'div' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 3,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'ifp' => {
+ 'result' => 'p',
+ 'parms' => 3,
+ 'opcode' => 28,
+ 'func' => 1,
+ 'types' => 'rpp'
+ },
+ 'set' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 43,
+ 'func' => 0,
+ 'types' => 'r'
+ },
+ 'eq' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 33,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'multp' => {
+ 'result' => 'p',
+ 'parms' => 2,
+ 'opcode' => 7,
+ 'func' => 0,
+ 'types' => 'pr'
+ },
+ 'sin' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 10,
+ 'func' => 1,
+ 'types' => 'r'
+ },
+ 'sqrt' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 13,
+ 'func' => 1,
+ 'types' => 'r'
+ },
+ 'distance' => {
+ 'result' => 'r',
+ 'parms' => 4,
+ 'opcode' => 14,
+ 'func' => 1,
+ 'types' => 'rrrr'
+ },
+ 'gt' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 32,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'red' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 22,
+ 'func' => 1,
+ 'types' => 'p'
+ },
+ 'rgb' => {
+ 'result' => 'p',
+ 'parms' => 3,
+ 'opcode' => 25,
+ 'func' => 1,
+ 'types' => 'rrr'
+ },
+ 'hue' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 19,
+ 'func' => 1,
+ 'types' => 'p'
+ },
+ 'print' => {
+ 'result' => undef,
+ 'parms' => 1,
+ 'opcode' => 45,
+ 'func' => 0,
+ 'types' => 'r'
+ },
+ 'jumpnz' => {
+ 'result' => undef,
+ 'parms' => 1,
+ 'opcode' => 42,
+ 'func' => 0,
+ 'types' => 'r'
+ },
+ 'addp' => {
+ 'result' => 'p',
+ 'parms' => 2,
+ 'opcode' => 8,
+ 'func' => 0,
+ 'types' => 'pp'
+ },
+ 'int' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 26,
+ 'func' => 1,
+ 'types' => 'r'
+ },
+ 'op_count' => {
+ 'result' => undef,
+ 'parms' => 0,
+ 'opcode' => 46,
+ 'func' => 0,
+ 'types' => ''
+ },
+ 'or' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 36,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'jumpz' => {
+ 'result' => undef,
+ 'parms' => 1,
+ 'opcode' => 41,
+ 'func' => 0,
+ 'types' => 'r'
+ },
+ 'add' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 0,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'subtract' => {
+ 'result' => 'r',
+ 'parms' => 2,
+ 'opcode' => 1,
+ 'func' => 0,
+ 'types' => 'rr'
+ },
+ 'ret' => {
+ 'result' => undef,
+ 'parms' => 1,
+ 'opcode' => 39,
+ 'func' => 0,
+ 'types' => 'p'
+ },
+ 'hsv' => {
+ 'result' => 'p',
+ 'parms' => 3,
+ 'opcode' => 21,
+ 'func' => 1,
+ 'types' => 'rrr'
+ },
+ 'uminus' => {
+ 'result' => 'r',
+ 'parms' => 1,
+ 'opcode' => 6,
+ 'func' => 0,
+ 'types' => 'r'
+ }
+ );
+$MaxOperands = 4;
+$PackCode = "i";
+1;
+
+__END__
+
+=head1 NAME
+
+Imager::Regops - generated information about the register based VM
+
+=head1 SYNOPSIS
+
+ use Imager::Regops;
+ $Imager::Regops::Attr{$opname}->{opcode} # opcode for given operator
+ $Imager::Regops::Attr{$opname}->{parms} # number of parameters
+ $Imager::Regops::Attr{$opname}->{types} # types of parameters
+ $Imager::Regops::Attr{$opname}->{func} # operator is a function
+ $Imager::Regops::Attr{$opname}->{result} # r for numeric, p for pixel result
+ $Imager::Regops::MaxOperands; # maximum number of operands
+
+=head1 DESCRIPTION
+
+This module is generated automatically from regmach.h so we don't need to
+maintain the same information in at least one extra place.
+
+At least that's the idea.
+
+=head1 AUTHOR
+
+Tony Cook, tony@develop-help.com
+
+=head1 SEE ALSO
+
+perl(1), Imager(3), http://www.eecs.umich.edu/~addi/perl/Imager/
+
+=cut
+
--- /dev/null
+package Imager::Transform;
+use strict;
+use Imager;
+use Imager::Expr::Assem;
+
+my %funcs =
+ (
+ mandel=>
+ {
+ desc=>"Mandelbrot set",
+ type=>'assem',
+ assem=><<EOS,
+# x treated as in range minx..maxx
+# y treated as in range miny..maxy
+ var nx:n ; var ny:n
+ var diffx:n ; var diffy:n
+# conx/y are x/y adjusted to min..max ranges
+ var conx:n ; var cony:n
+ diffx = subtract maxx minx
+ conx = div x w
+ conx = mult conx diffx
+ conx = add conx minx
+ diffy = subtract maxy miny
+ cony = div y h
+ cony = mult cony diffy
+ cony = add cony miny
+ nx = 0
+ ny = 0
+ var count:n
+ count = 0
+loop:
+# calculate (nx,ny)**2 +(x,y)->
+# (nx*nx-ny*ny+x, 2.nx.ny+y)
+ var wx:n ; var wy:n ; var work:n
+ wx = mult nx nx
+ wy = mult ny ny
+ wx = subtract wx wy
+ ny = mult ny nx
+ ny = mult ny 2
+ nx = wx
+ nx = add nx conx
+ ny = add ny cony
+ work = distance nx ny 0 0
+ work = gt work 2
+ jumpnz work docol
+ count = add count 1
+ work = lt count maxcount
+ jumpnz work loop
+ jumpnz insideangle doinang
+ var workp:p
+ workp = rgb 0 0 0
+ ret workp
+ doinang:
+ var ang:n
+ ang = atan2 ny nx
+ ang = mult ang 360
+ ang = div ang pi
+ workp = hsv ang 255 0.5
+ ret workp
+ docol:
+ var outvalue:n
+ outvalue = mult outsidevaluestep count
+ outvalue = add outvalue outsidevalue
+ outvalue = mod outvalue 1.01
+ jumpnz outsideangle do_outang
+ work = mult count huestep
+ work = add work huebase
+ work = mod work 360
+ workp = hsv work 1 outvalue
+ ret workp
+ do_outang:
+ ang = atan2 ny nx
+ ang = mult ang 360
+ ang = div ang pi
+ ang = add ang outsidebase
+ workp = hsv ang outsidesat outvalue
+ ret workp
+EOS
+ constants=>
+ {
+ minx=>{ default=>-2, desc=>'Left of rendered area', },
+ miny=>{ default=>-1.5, desc=>'Top of rendered area', },
+ maxx=>{ default=>1, desc=>'Right of rendered area', },
+ maxy=>{ default=>1.5, desc=>'Bottom of rendered area', },
+ maxcount=>{ default=>100, desc=>'Maximum iterations', },
+ huestep=>{ default=>21.1, desc=>'Hue step for number of iterations', },
+ huebase=>{ default=>0, desc=>'Base hue for number of iterations', },
+ insideangle=>
+ {
+ default=>0,
+ desc=>'Non-zero to use angle of final as hue for inside',
+ },
+ insidebase=>
+ {
+ default=>0,
+ desc=>'Base angle for inside colours if insideangle is non-zero',
+ },
+ outsideangle=>
+ {
+ default=>0,
+ desc=>'Non-zero to use angle of final as hue for outside',
+ },
+ outsidebase=>
+ {
+ default=>0,
+ desc=>'Base angle if outsideangle is true',
+ },
+ outsidevalue=>
+ {
+ default=>1,
+ desc=>'Brightness for outside pixels',
+ },
+ outsidevaluestep=>
+ {
+ default=>0,
+ desc=>'Brightness step for each count for outside pixels',
+ },
+ outsidesat=>
+ {
+ default=>1,
+ desc=>'Saturation for outside pixels',
+ },
+ },
+ inputs=>[],
+ },
+ julia=>
+ {
+ desc=>"Julia set",
+ type=>'assem',
+ assem=><<EOS,
+# print x
+# x treated as in range minx..maxx
+# y treated as in range miny..maxy
+ var nx:n ; var ny:n
+ var diffx:n ; var diffy:n
+# conx/y are x/y adjusted to min..max ranges
+ var conx:n ; var cony:n
+ diffx = subtract maxx minx
+ conx = div x w
+ conx = mult conx diffx
+ conx = add conx minx
+ diffy = subtract maxy miny
+ cony = div y h
+ cony = mult cony diffy
+ cony = add cony miny
+ nx = conx
+ ny = cony
+ var count:n
+ count = 0
+loop:
+# calculate (nx,ny)**2 +(x,y)->
+# (nx*nx-ny*ny+x, 2.nx.ny+y)
+ var wx:n ; var wy:n ; var work:n
+ wx = mult nx nx
+ wy = mult ny ny
+ wx = subtract wx wy
+ ny = mult ny nx
+ ny = mult ny 2
+ nx = wx
+ nx = add nx zx
+ ny = add ny zy
+ work = distance nx ny 0 0
+ work = gt work 2
+ jumpnz work docol
+ count = add count 1
+ work = lt count maxcount
+ jumpnz work loop
+ jumpnz insideangle doinang
+ var workp:p
+ workp = rgb 0 0 0
+ ret workp
+ doinang:
+ var ang:n
+ ang = atan2 ny nx
+ ang = mult ang 360
+ ang = div ang pi
+ workp = hsv ang 255 0.5
+ ret workp
+ docol:
+ var outvalue:n
+ outvalue = mult outsidevaluestep count
+ outvalue = add outvalue outsidevalue
+ outvalue = mod outvalue 1.01
+ jumpnz outsideangle do_outang
+ work = mult count huestep
+ work = add work huebase
+ work = mod work 360
+ workp = hsv work 1 outvalue
+ ret workp
+ do_outang:
+ ang = atan2 ny nx
+ ang = mult ang 360
+ ang = div ang pi
+ ang = add ang outsidebase
+ workp = hsv ang outsidesat outvalue
+ ret workp
+EOS
+ constants=>
+ {
+ zx=>{default=>0.7, desc=>'Real part of initial Z', },
+ zy=>{default=>0.2, desc=>'Imaginary part of initial Z', },
+ minx=>{ default=>-1.5, desc=>'Left of rendered area', },
+ miny=>{ default=>-1.5, desc=>'Top of rendered area', },
+ maxx=>{ default=>1.5, desc=>'Right of rendered area', },
+ maxy=>{ default=>1.5, desc=>'Bottom of rendered area', },
+ maxcount=>{ default=>100, desc=>'Maximum iterations', },
+ huestep=>{ default=>21.1, desc=>'Hue step for number of iterations', },
+ huebase=>{ default=>0, desc=>'Base hue for number of iterations', },
+ insideangle=>
+ {
+ default=>0,
+ desc=>'Non-zero to use angle of final as hue for inside',
+ },
+ insidebase=>
+ {
+ default=>0,
+ desc=>'Base angle for inside colours if insideangle is non-zero',
+ },
+ outsideangle=>
+ {
+ default=>0,
+ desc=>'Non-zero to use angle of final as hue for outside',
+ },
+ outsidebase=>
+ {
+ default=>0,
+ desc=>'Base angle if outsideangle is true',
+ },
+ outsidevalue=>
+ {
+ default=>1,
+ desc=>'Brightness for outside pixels',
+ },
+ outsidevaluestep=>
+ {
+ default=>0,
+ desc=>'Brightness step for each count for outside pixels',
+ },
+ outsidesat=>
+ {
+ default=>1,
+ desc=>'Saturation for outside pixels',
+ },
+ },
+ inputs=>[],
+ },
+ circleripple=>
+ {
+ type=>'rpnexpr',
+ rpnexpr=><<'EOS',
+x y cx cy distance !dist
+@dist freq / sin !scale
+@scale depth * @dist + !adj
+y cy - x cx - atan2 !ang
+cx @ang cos @adj * + cy @ang sin @adj * + getp1 @scale shadow + shadow 1 + / *
+EOS
+ constants=>
+ {
+ freq=> { desc=>'Frequency of ripples', default=>5 },
+ depth=> { desc=>'Depth of ripples', default=>10 },
+ shadow=> { desc=>'Fraction of shadow', default=>20 },
+ },
+ inputs=>
+ [
+ { desc=>'Image to ripple' }
+ ],
+ },
+ spiral=>
+ {
+ type=>'rpnexpr',
+ rpnexpr=><<'EOS',
+x y cx cy distance !d y cy - x cx - atan2 !a
+@d spacing / @a + pi 2 * % !a2
+@a 180 * pi / 1 @a2 sin 1 + 2 / hsv
+EOS
+ constants=>
+ {
+ spacing=>{ desc=>'Spacing between arms', default=>10 },
+ },
+ inputs=>[],
+ },
+ diagripple=>
+ {
+ type=>'rpnexpr',
+ desc=>'Adds diagonal ripples to an image',
+ rpnexpr=><<'EOS',
+x y + !dist @dist freq / sin !scale
+@scale depth * !adj
+ x @adj + y @adj + getp1 @scale shadow + shadow 1 + / *
+EOS
+ constants=>
+ {
+ freq=>{ desc=>'Frequency of ripples', default=>5, },
+ depth=>{desc=>'Depth of ripples', default=>3,},
+ shadow=>
+ {
+ desc=>'Fraction of brightness to remove for shadows',
+ default=>20,
+ },
+ },
+ inputs=>
+ [
+ { desc=>'Image to add ripples to' }
+ ],
+ },
+ twist=>
+ {
+ type=>'rpnexpr',
+ desc=>'Twist an image',
+ rpnexpr=><<'EOS',
+x y cx cy distance !dist
+ y cy - x cx - atan2 @dist twist / + !ang
+cx @ang cos @dist * + cy @ang sin @dist * + getp1
+EOS
+ constants=>
+ {
+ twist=>{ desc=>'Amount of twist', default=>2.5, },
+ },
+ inputs=>
+ [
+ { desc=>'Image to twist' },
+ ],
+ },
+ # any other functions can wait until Imager::Expr::Infix supports
+ # jumps
+ );
+
+sub new {
+ my ($class, $name) = @_;
+
+ exists $funcs{$name} or return;
+
+ bless { func=>$funcs{$name}, name=>$name }, $class;
+}
+
+sub inputs {
+ my ($self) = @_;
+ return @{$self->{func}{inputs}}
+}
+
+sub constants {
+ my $self = shift;
+ if (@_) {
+ return @{$self->{func}{constants}}{@_};
+ }
+ else {
+ return keys %{$self->{func}{constants}};
+ }
+}
+
+sub transform {
+ my ($self, $opts, $constants, @in) = @_;
+
+ my $func = $self->{func};
+ my %opts = %$opts;
+ $opts{$func->{type}} = $func->{$func->{type}};
+ my %con = %$constants;
+ for my $name (keys %{$func->{constants}}) {
+ unless (exists $con{$name}) {
+ if (exists $func->{constants}{$name}{default}) {
+ $con{$name} = $func->{constants}{$name}{default};
+ }
+ else {
+ $self->{error} = "No value or default for constant $name";
+ return;
+ }
+ }
+ }
+ $opts{constants} = \%con;
+ unless (@in == @{$func->{inputs}}) {
+ $self->{error} = @in." input images given, ".
+ @{$func->{inputs}}." supplied";
+ return;
+ }
+
+ my $out = Imager::transform2(\%opts, @in);
+ unless ($out) {
+ $self->{error} = $Imager::ERRSTR;
+ return;
+ }
+ return $out;
+}
+
+sub errstr {
+ return $_[0]{error};
+}
+
+sub list {
+ return keys %funcs;
+}
+
+sub describe {
+ my ($class, $name) = @_;
+
+ my $func;
+ if (ref $class && !$name) {
+ $func = $class->{func};
+ $name = $class->{name}
+ }
+ else {
+ $func = $funcs{$name}
+ or return undef;
+ }
+ my $desc = <<EOS;
+Function : $name
+Description: $func->{desc}
+EOS
+ if ($func->{inputs} && @{$func->{inputs}}) {
+ $desc .= "Input images:\n";
+ my $i = 1;
+ for my $in (@{$func->{inputs}}) {
+ $desc .= " $i: $in->{desc}\n";
+ }
+ }
+ else {
+ $desc .= "There are no input images\n";
+ }
+ if ($func->{constants} && keys %{$func->{constants}}) {
+ $desc .= "Input constants:\n";
+ for my $key (keys %{$func->{constants}}) {
+ $desc .= " $key: $func->{constants}{$key}{desc}\n";
+ $desc .= " Default: $func->{constants}{$key}{default}\n";
+ }
+ }
+ else {
+ $desc .= "There are no constants\n";
+ }
+
+ return $desc;
+}
+
+
+1;
+
+__END__
+
+=head1 NAME
+
+ Imager::Transform - a library of register machine image transformations
+
+=head1 SYNOPSIS
+
+ # get a list of transformations
+ my @funcs = Imager::Transform->list;
+ # create a transformation object
+ my $tran = Imager::Transform->new($name);
+ # describe it
+ print $tran->describe;
+ # a list of constant names
+ my @constants = $tran->constants;
+ # information about some of the constants
+ my @info = $tran->constants(@constants);
+
+=head1 DESCRIPTION
+
+This module provides a library of transformations that use the Imager
+transform2() function.
+
+The aim is to provide a place to collect these transformations.
+
+At some point there might be an interface to add new functions, but
+there's not a whole lot of point to that.
+
+The interface is a little sparse as yet.
+
+=head1 METHODS
+
+=over 4
+
+=item my @names = Imager::Transform->list
+
+Returns a list of the transformations.
+
+=item my $desc = Imager::Transform->describe($name);
+
+=item my $desc = $tran->describe()
+
+Describes a transformation specified either by name (as a class
+method) or by reference (as an instance method).
+
+The class method returns undef if there is no such transformation.
+
+=item my $tran = Imager::Transform->new($name)
+
+Create a new transformation object. Returns undef if there is no such
+transformation.
+
+=item my @inputs = $tran->inputs;
+
+=item my $inputs = $tran->inputs;
+
+Returns a list of input image descriptions, or the number of them,
+depending on content.
+
+The list contains hashrefs, which current contain only one member,
+desc, a description of the use of the image.
+
+=item my $out = $tran->transform(\%opts, \%constants, @imgs)
+
+Perform the image transformation.
+
+Returns the new image on success, or undef on failure, in which case
+you can use $tran->errstr to get an error message.
+
+=item $tran->errstr
+
+The error message, if any from the last image transformation.
+
+=back
+
+=head1 BUGS
+
+Needs more transformations.
+
+=head1 SEE ALSO
+
+Imager(3), transform.perl
+
+=cut
--- /dev/null
+=head1 NAME
+
+Imager::regmach - documents the register virtual machine used by
+Imager::transform2().
+
+=head1 SYNOPSIS
+
+The register machine is a complete rewrite of the stack machine
+orginally used by Imager::transform(), written for use by
+Imager::transform2().
+
+=head1 DESCRIPTION
+
+(This document might be a little incoherent.)
+
+The register machine is a fast implementation of a small instruction
+set designed for evaluating an arithmetic expression to produce a
+colour for an image.
+
+The machine takes as input:
+
+=over 4
+
+=item instructions
+
+An array of instructions
+
+=item numeric registers
+
+An array of numeric registers. Some registers are initialized as
+literals.
+
+=item colour registers
+
+An array of colour registers. Currently these registers aren't
+initialized.
+
+=item input images
+
+An array of Imager i_img pointers. The getpn operators read pixels
+from these images.
+
+=back
+
+The instructions supplied each take up to 4 input numeric or colour
+registers with a single output numeric or colour register. The
+machine attempts to execute instructions as safely as possible,
+assuming that correct instructions have been provided, eg. the machine
+protects against divide by zero, but doesn't check register numbers
+for validity.
+
+The final instruction must be a 'ret' instruction, which returns the
+result ;)
+
+=head2 Adding new instructions
+
+To add a new instruction:
+
+=over 4
+
+=item 1
+
+Add a new opcode to the enumeration in regmach.h - make sure to add
+comment after the enum name giving the input registers (rX for
+numeric, pX for colour) that the instruction takes. These must be in
+the order that the instruction expects to take the. Put a letter (r
+or p) after -> to indicate the result type.
+
+=item 2
+
+Add a case to regmach.c that executes the instruction.
+
+=item 3
+
+make
+
+=back
+
+The makefile should rebuild the Regops.pm file, and your new
+instruction will be added as a function.
+
+If you want to add a single alternative instruction that might take
+different argument types (it must take the same number of parameters),
+create another instruction with that name followed by a p. The
+current expression parsers explicitly look for such instruction names.
+
+=head2 Future directions
+
+Conditional and non-conditional jumps to implement iteration. This
+will break the current optimizer in L<Imager::Expr> (and the compilers
+for both expression compilers, for that matter.)
+
+Complex arithmetic (Addi suggested this one). This would most likely
+be a separate machine. Otherwise we'll have a very significant
+performance loss.
+
+=head1 WARNINGS
+
+If you feed bad 'machine code' to the register machine, you have a
+good chance of a SIGSEGV.
+
+=cut
+
--- /dev/null
+#include "log.h"
+
+#define DTBUFF 50
+#define DATABUFF DTBUFF+3+10+1+5+1+1
+
+static int log_level = 0;
+static FILE *lg_file = NULL;
+static char *date_format = "%Y/%m/%d %H:%M:%S";
+static char date_buffer[DTBUFF];
+static char data_buffer[DATABUFF];
+
+
+#ifdef IMAGER_LOG
+
+/*
+ * Logging is active
+ */
+
+void
+init_log(const char* name,int level) {
+ log_level = level;
+ if (level < 0) {
+ lg_file = NULL;
+ } else {
+ if (name == NULL) {
+ lg_file = stderr;
+ } else {
+ if (NULL == (lg_file = fopen(name, "w+")) ) {
+ fprintf(stderr,"Cannot open file '%s'\n",name);
+ exit(2);
+ }
+ }
+ }
+ mm_log((0,"Imager - log started (level = %d)\n", level));
+}
+
+void
+m_fatal(int exitcode,const char *fmt, ... ) {
+ va_list ap;
+ time_t timi;
+ struct tm *str_tm;
+
+ if (lg_file != NULL) {
+ timi = time(NULL);
+ str_tm = localtime(&timi);
+ if ( strftime(date_buffer, DTBUFF, date_format, str_tm) )
+ fprintf(lg_file,"[%s] ",date_buffer);
+ va_start(ap,fmt);
+ vfprintf(lg_file,fmt,ap);
+ va_end(ap);
+ }
+ exit(exitcode);
+}
+
+#else
+
+/*
+ * Logging is inactive - insert dummy functions
+
+
+void init_log(const char* name,int onoff) {}
+void m_fatal(int exitcode,const char *fmt, ... ) { return(exitcode); }
+
+*/
+
+#endif
+
+
+void
+m_loog(int level,const char *fmt, ... ) {
+ va_list ap;
+ if (level > log_level) return;
+ if (lg_file != NULL) {
+ fputs(data_buffer, lg_file);
+ fprintf(lg_file, "%3d: ",level);
+ va_start(ap,fmt);
+ vfprintf(lg_file, fmt, ap);
+ fflush(lg_file);
+ va_end(ap);
+ }
+}
+
+
+void
+m_lhead(const char *file, int line) {
+ time_t timi;
+ struct tm *str_tm;
+
+ if (lg_file != NULL) {
+ timi = time(NULL);
+ str_tm = localtime(&timi);
+ strftime(date_buffer, DTBUFF, date_format, str_tm);
+ sprintf(data_buffer, "[%s] %10s:%-5d ", date_buffer, file, line);
+ }
+}
--- /dev/null
+#ifndef _LOG_H_
+#define _LOG_H_
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <time.h>
+/*
+ input: name of file to log too
+ input: onoff, 0 means no logging
+ global: creates a global variable FILE* lg_file
+*/
+
+void m_lhead ( const char *file, int line );
+void init_log( const char *name, int onoff );
+void m_loog(int level,const char *msg, ... );
+void m_fatal ( int exitcode,const char *fmt, ... );
+
+
+#ifdef IMAGER_LOG
+#define mm_log(x) { m_lhead(__FILE__,__LINE__); m_loog x; }
+#else
+#define mm_log(x)
+#endif
+
+
+#endif /* _LOG_H_ */
--- /dev/null
+#include "image.h"
+
+/* structures for passing data between Imager-plugin and the Imager-module */
+
+#include "ext.h"
+
+
+#define getINT(k,s) (util_table->getint(INP,k,s))
+#define getDOUBLE(k,s) (util_table->getdouble(INP,k,s))
+#define getVOID(k,s) (util_table->getvoid(INP,k,(void**)s))
+#define getSTR(k,s) (util_table->getstr(INP,k,(char**)s))
+#define getOBJ(k,t,s) (util_table->getobj(INP,k,t,(void**)s))
+
+#define i_color_set(cl,r,g,b,a) (symbol_table->i_color_set(cl,r,g,b,a))
+#define i_color_info(cl) (symbol_table->i_color_info(cl))
+
+#define i_img_new() (symbol_table->i_img_new())
+#define i_img_empty(im,x,y) ((symbol_table->i_img_empty(im,x,y))
+#define i_img_empty_ch(im,x,y,ch) ((symbol_table->i_img_empty_ch(im,x,y,ch))
+#define i_img_exorcise(im) (symbol_table->i_img_exorcise(im))
+#define i_img_info(im,info) (symbol_table->i_img_info(im,info))
+
+#define i_img_setmask(im,ch_mask) (symbol_table->i_img_setmask(im,ch_mask))
+#define i_img_getmask(im) (symbol_table->i_img_getmask(im))
+
+#define i_ppix(im,x,y,val) (symbol_table->i_ppix(im,x,y,val))
+#define i_gpix(im,x,y,val) (symbol_table->i_gpix(im,x,y,val))
+
+#define i_box(im, x1, y1, x2, y2,val) (symbol_table->i_box(im, x1, y1, x2, y2,val))
+#define i_draw(im, x1, y1, x2, y2,val) (symbol_table->i_draw(im, x1, y1, x2, y2,val))
+#define i_arc(im, x, y, rad, d1, d2,val) (symbol_table->i_arc(im, x, y, rad, d1, d2,val))
+#define i_copyto(im,src, x1, y1, x2, y2, tx, ty,trans) (symbol_table->i_copyto(im,src, x1, y1, x2, y2, tx, ty,trans))
+#define i_rubthru(im,src, tx, ty) (symbol_table->i_rubthru(im,src, tx, ty))
+
+#ifdef WIN32
+extern char __declspec(dllexport) evalstr[];
+extern func_ptr __declspec(dllexport) function_list[];
+#endif
--- /dev/null
+#include "image.h"
+#include "png.h"
+
+/* Check to see if a file is a PNG file using png_sig_cmp(). png_sig_cmp()
+ * returns zero if the image is a PNG and nonzero if it isn't a PNG.
+ *
+ * The function check_if_png() shown here, but not used, returns nonzero (true)
+ * if the file can be opened and is a PNG, 0 (false) otherwise.
+ *
+ * If this call is successful, and you are going to keep the file open,
+ * you should call png_set_sig_bytes(png_ptr, PNG_BYTES_TO_CHECK); once
+ * you have created the png_ptr, so that libpng knows your application
+ * has read that many bytes from the start of the file. Make sure you
+ * don't call png_set_sig_bytes() with more than 8 bytes read or give it
+ * an incorrect number of bytes read, or you will either have read too
+ * many bytes (your fault), or you are telling libpng to read the wrong
+ * number of magic bytes (also your fault).
+ *
+ * Many applications already read the first 2 or 4 bytes from the start
+ * of the image to determine the file type, so it would be easiest just
+ * to pass the bytes to png_sig_cmp() or even skip that if you know
+ * you have a PNG file, and call png_set_sig_bytes().
+ */
+
+/* this is a way to get number of channels from color space
+ * Color code to channel number */
+
+int CC2C[PNG_COLOR_MASK_PALETTE|PNG_COLOR_MASK_COLOR|PNG_COLOR_MASK_ALPHA];
+
+#define PNG_BYTES_TO_CHECK 4
+
+
+
+
+
+
+
+
+
+/*
+png_set_read_fn(png_structp read_ptr, voidp read_io_ptr, png_rw_ptr read_data_fn)
+png_set_write_fn(png_structp write_ptr, voidp write_io_ptr, png_rw_ptr write_data_fn,
+png_flush_ptr output_flush_fn);
+voidp read_io_ptr = png_get_io_ptr(read_ptr);
+voidp write_io_ptr = png_get_io_ptr(write_ptr);
+*/
+
+struct png_scalar_info {
+ char *data;
+ int length;
+ int cpos;
+};
+
+
+struct png_wiol_info {
+ io_glue *cp;
+ int length;
+ int cpos;
+};
+
+static void
+user_read_data(png_structp png_ptr,png_bytep data, png_size_t length) {
+ struct png_scalar_info *sci=(struct png_scalar_info *)png_ptr->io_ptr;
+
+ /* fprintf(stderr,"user_read_data: cpos %d/%d (%d)\n",sci->cpos,sci->length,length); */
+
+ if (sci->cpos+(ssize_t)length > sci->length ) { png_error(png_ptr, "Read overflow error on a scalar."); }
+
+ memcpy(data, sci->data+sci->cpos , length);
+ sci->cpos+=length;
+}
+
+/*
+static void
+user_write_data(png_structp png_ptr, png_bytep data, png_uint_32 length) {
+ FIXME: implement these
+}
+
+static void
+user_flush_data(png_structp png_ptr) {
+ FIXME: implement these
+}
+*/
+
+
+void
+scalar_png_init_io(png_structp png_ptr,struct png_scalar_info *sci) {
+ png_ptr->io_ptr = (png_voidp)sci;
+}
+
+
+
+
+
+
+int
+check_if_png(char *file_name, FILE **fp) {
+ char buf[PNG_BYTES_TO_CHECK];
+
+ /* Open the prospective PNG file. */
+ if ((*fp = fopen(file_name, "rb")) != NULL) return 0;
+
+ /* Read in some of the signature bytes */
+ if (fread(buf, 1, PNG_BYTES_TO_CHECK, *fp) != PNG_BYTES_TO_CHECK) return 0;
+
+ /* Compare the first PNG_BYTES_TO_CHECK bytes of the signature.
+ Return nonzero (true) if they match */
+
+ return(!png_sig_cmp((png_bytep)buf, (png_size_t)0, PNG_BYTES_TO_CHECK));
+}
+
+/* Read a PNG file. You may want to return an error code if the read
+ * fails (depending upon the failure). There are two "prototypes" given
+ * here - one where we are given the filename, and we need to open the
+ * file, and the other where we are given an open file (possibly with
+ * some or all of the magic bytes read - see comments above).
+ */
+
+i_img *
+i_readpng(int fd) {
+ i_img *im;
+ png_structp png_ptr;
+ png_infop info_ptr;
+ png_uint_32 width, height, y;
+ int bit_depth, color_type, interlace_type;
+ int number_passes;
+ int channels, pass;
+
+ FILE *fp;
+ unsigned int sig_read;
+
+ sig_read=0;
+
+ if ((fp = fdopen(fd,"r")) == NULL) {
+ mm_log((1,"can't fdopen.\n"));
+ exit(1);
+ }
+
+ mm_log((1,"i_readpng(fd %d)\n",fd));
+
+ png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
+
+ if (png_ptr == NULL) {
+ fclose(fp);
+ return 0;
+ }
+
+ /* Allocate/initialize the memory for image information. REQUIRED. */
+ info_ptr = png_create_info_struct(png_ptr);
+ if (info_ptr == NULL) {
+ fclose(fp);
+ png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
+ return 0;
+ }
+
+ /* Set error handling if you are using the setjmp/longjmp method (this is
+ * the normal method of doing things with libpng). REQUIRED unless you
+ * set up your own error handlers in the png_create_read_struct() earlier.
+ */
+
+ if (setjmp(png_ptr->jmpbuf)) {
+ /* Free all of the memory associated with the png_ptr and info_ptr */
+ png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
+ fclose(fp);
+ /* If we get here, we had a problem reading the file */
+ return NULL;
+ }
+
+ /* Set up the input control if you are using standard C streams */
+ png_init_io(png_ptr, fp);
+ /* If we have already read some of the signature */
+ png_set_sig_bytes(png_ptr, sig_read);
+
+ /* The call to png_read_info() gives us all of the information from the
+ * PNG file before the first IDAT (image data chunk). REQUIRED
+ */
+
+ png_read_info(png_ptr, info_ptr);
+ png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
+ &interlace_type, NULL, NULL);
+
+ mm_log((1,
+ "png_get_IHDR results: width %d, height %d, bit_depth %d,color_type %d,interlace_type %d\n",
+ width,height,bit_depth,color_type,interlace_type));
+
+ CC2C[PNG_COLOR_TYPE_GRAY]=1;
+ CC2C[PNG_COLOR_TYPE_PALETTE]=3;
+ CC2C[PNG_COLOR_TYPE_RGB]=3;
+ CC2C[PNG_COLOR_TYPE_RGB_ALPHA]=4;
+ CC2C[PNG_COLOR_TYPE_GRAY_ALPHA]=2;
+
+ channels=CC2C[color_type];
+
+ mm_log((1,"channels %d\n",channels));
+
+ im=i_img_empty_ch(NULL,width,height,channels);
+
+ /**** Set up the data transformations you want. Note that these are all
+ **** optional. Only call them if you want/need them. Many of the
+ **** transformations only work on specific types of images, and many
+ **** are mutually exclusive.
+ ****/
+
+ /* tell libpng to strip 16 bit/color files down to 8 bits/color */
+ png_set_strip_16(png_ptr);
+
+ /* Strip alpha bytes from the input data without combining with the
+ * background (not recommended).
+ */
+ /* png_set_strip_alpha(png_ptr); */
+
+ /* Extract multiple pixels with bit depths of 1, 2, and 4 from a single
+ * byte into separate bytes (useful for paletted and grayscale images).
+ */
+
+ png_set_packing(png_ptr);
+
+ /* Expand paletted colors into true RGB triplets */
+ if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_expand(png_ptr);
+
+ /* Expand grayscale images to the full 8 bits from 1, 2, or 4 bits/pixel */
+ if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_expand(png_ptr);
+
+ /* Expand paletted or RGB images with transparency to full alpha channels
+ * so the data will be available as RGBA quartets.
+ */
+ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_expand(png_ptr);
+
+ number_passes = png_set_interlace_handling(png_ptr);
+
+ mm_log((1,"number of passes=%d\n",number_passes));
+
+ png_read_update_info(png_ptr, info_ptr);
+ for (pass = 0; pass < number_passes; pass++)
+ for (y = 0; y < height; y++) { png_read_row(png_ptr,(png_bytep) &(im->data[channels*width*y]), NULL); }
+ /* read rest of file, and get additional chunks in info_ptr - REQUIRED */
+
+ png_read_end(png_ptr, info_ptr);
+ /* clean up after the read, and free any memory allocated - REQUIRED */
+ png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
+
+ fclose(fp);
+ return im;
+}
+
+
+
+
+undef_int
+i_writepng(i_img *im,int fd) {
+ FILE *fp;
+ png_structp png_ptr;
+ png_infop info_ptr;
+ int width,height,y;
+ volatile int cspace,channels;
+
+ mm_log((1,"i_writepng(0x%x,fd %d)\n",im,fd));
+
+ if ((fp = fdopen(fd,"w")) == NULL) {
+ mm_log((1,"can't fdopen.\n"));
+ exit(1);
+ }
+
+ height=im->ysize;
+ width=im->xsize;
+
+ channels=im->channels;
+
+ if (channels>2) { cspace=PNG_COLOR_TYPE_RGB; channels-=3; }
+ else { cspace=PNG_COLOR_TYPE_GRAY; channels--; }
+
+ if (channels) cspace|=PNG_COLOR_MASK_ALPHA;
+ mm_log((1,"cspace=%d\n",cspace));
+
+ channels=im->channels;
+
+ /* Create and initialize the png_struct with the desired error handler
+ * functions. If you want to use the default stderr and longjump method,
+ * you can supply NULL for the last three parameters. We also check that
+ * the library version is compatible with the one used at compile time,
+ * in case we are using dynamically linked libraries. REQUIRED.
+ */
+
+ png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
+
+ if (png_ptr == NULL) {
+ fclose(fp);
+ return 0;
+ }
+
+ /* Allocate/initialize the image information data. REQUIRED */
+ info_ptr = png_create_info_struct(png_ptr);
+
+ if (info_ptr == NULL) {
+ fclose(fp);
+ png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
+ return(0);
+ }
+
+ /* Set error handling. REQUIRED if you aren't supplying your own
+ * error hadnling functions in the png_create_write_struct() call.
+ */
+ if (setjmp(png_ptr->jmpbuf)) {
+ /* If we get here, we had a problem reading the file */
+ fclose(fp);
+ png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
+ return(0);
+ }
+
+ png_init_io(png_ptr, fp);
+
+ /* Set the image information here. Width and height are up to 2^31,
+ * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
+ * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
+ * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB,
+ * or PNG_COLOR_TYPE_RGB_ALPHA. interlace is either PNG_INTERLACE_NONE or
+ * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST
+ * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. REQUIRED
+ */
+
+ png_set_IHDR(png_ptr, info_ptr, width, height, 8, cspace,
+ PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
+
+ png_write_info(png_ptr, info_ptr);
+ for (y = 0; y < height; y++) png_write_row(png_ptr, (png_bytep) &(im->data[channels*width*y]));
+ png_write_end(png_ptr, info_ptr);
+ png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
+
+ fclose(fp);
+ return(1);
+}
+
+
+
+
+i_img*
+i_readpng_scalar(char *data, int length) {
+ i_img *im;
+ png_structp png_ptr;
+ png_infop info_ptr;
+ png_uint_32 width, height, y;
+ int bit_depth, color_type, interlace_type;
+ int number_passes;
+ int channels, pass;
+ unsigned int sig_read;
+
+ struct png_scalar_info sci;
+
+ sci.data=data;
+ sci.length=length;
+ sci.cpos=0;
+
+ sig_read=0;
+ mm_log((1,"i_readpng_scalar(char 0x%08X, length %d)\n",data,length));
+
+ png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
+ png_set_read_fn(png_ptr, (void*) (&sci), user_read_data);
+
+ info_ptr = png_create_info_struct(png_ptr);
+ if (info_ptr == NULL) {
+ png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
+ return NULL;
+ }
+
+ if (setjmp(png_ptr->jmpbuf)) {
+ mm_log((1,"i_readpng_scalar: error.\n"));
+ png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
+ return NULL;
+ }
+
+ scalar_png_init_io(png_ptr, &sci);
+ png_set_sig_bytes(png_ptr, sig_read);
+ png_read_info(png_ptr, info_ptr);
+ png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL);
+
+ mm_log((1,
+ "png_get_IHDR results: width %d, height %d, bit_depth %d,color_type %d,interlace_type %d\n",
+ width,height,bit_depth,color_type,interlace_type));
+
+ CC2C[PNG_COLOR_TYPE_GRAY]=1;
+ CC2C[PNG_COLOR_TYPE_PALETTE]=3;
+ CC2C[PNG_COLOR_TYPE_RGB]=3;
+ CC2C[PNG_COLOR_TYPE_RGB_ALPHA]=4;
+ CC2C[PNG_COLOR_TYPE_GRAY_ALPHA]=2;
+ channels=CC2C[color_type];
+ mm_log((1,"channels %d\n",channels));
+ im=i_img_empty_ch(NULL,width,height,channels);
+ png_set_strip_16(png_ptr);
+ png_set_packing(png_ptr);
+ if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_expand(png_ptr);
+ if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_expand(png_ptr);
+ if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_expand(png_ptr);
+ number_passes = png_set_interlace_handling(png_ptr);
+ mm_log((1,"number of passes=%d\n",number_passes));
+ png_read_update_info(png_ptr, info_ptr);
+ mm_log((1,"made it to here 1\n"));
+ for (pass = 0; pass < number_passes; pass++)
+ for (y = 0; y < height; y++) { png_read_row(png_ptr,(png_bytep) &(im->data[channels*width*y]), NULL); }
+ mm_log((1,"made it to here 2\n"));
+ png_read_end(png_ptr, info_ptr);
+ mm_log((1,"made it to here 3\n"));
+ png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
+ mm_log((1,"made it to here 4\n"));
+ mm_log((1,"(0x%08X) <- i_readpng_scalar\n",im));
+ return im;
+}
+
+
+
+
+/* i_img* */
+/* i_readpng_wiol(io_glue *ig, int length) { */
+/* i_img *im; */
+/* png_structp png_ptr; */
+/* png_infop info_ptr; */
+/* png_uint_32 width, height; */
+/* int bit_depth, color_type, interlace_type; */
+/* int number_passes,y; */
+/* int channels,pass; */
+/* unsigned int sig_read; */
+
+/* struct png_wiol_info wi; */
+
+/* wi.data = ig; */
+/* wi.length = length; */
+/* wi.cpos = 0; */
+
+/* sig_read=0; */
+/* mm_log((1,"i_readpng_wiol(char 0x%p, length %d)\n", data, length)); */
+
+/* png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL); */
+/* png_set_read_fn(png_ptr, (void*) (&wi), user_read_data); */
+
+/* info_ptr = png_create_info_struct(png_ptr); */
+/* if (info_ptr == NULL) { */
+/* png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); */
+/* return NULL; */
+/* } */
+
+/* if (setjmp(png_ptr->jmpbuf)) { */
+/* mm_log((1,"i_readpng_wiol: error.\n")); */
+/* png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); */
+/* return NULL; */
+/* } */
+
+/* scalar_png_init_io(png_ptr, &sci); */
+/* png_set_sig_bytes(png_ptr, sig_read); */
+/* png_read_info(png_ptr, info_ptr); */
+/* png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); */
+
+/* mm_log((1, */
+/* "png_get_IHDR results: width %d, height %d, bit_depth %d,color_type %d,interlace_type %d\n", */
+/* width,height,bit_depth,color_type,interlace_type)); */
+
+/* CC2C[PNG_COLOR_TYPE_GRAY]=1; */
+/* CC2C[PNG_COLOR_TYPE_PALETTE]=3; */
+/* CC2C[PNG_COLOR_TYPE_RGB]=3; */
+/* CC2C[PNG_COLOR_TYPE_RGB_ALPHA]=4; */
+/* CC2C[PNG_COLOR_TYPE_GRAY_ALPHA]=2; */
+/* channels = CC2C[color_type]; */
+
+/* mm_log((1,"i_readpng_wiol: channels %d\n",channels)); */
+
+/* im = i_img_empty_ch(NULL,width,height,channels); */
+/* png_set_strip_16(png_ptr); */
+/* png_set_packing(png_ptr); */
+/* if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_expand(png_ptr); */
+/* if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_expand(png_ptr); */
+/* if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_expand(png_ptr); */
+/* number_passes = png_set_interlace_handling(png_ptr); */
+/* mm_log((1,"number of passes=%d\n",number_passes)); */
+/* png_read_update_info(png_ptr, info_ptr); */
+/* mm_log((1,"made it to here 1\n")); */
+/* for (pass = 0; pass < number_passes; pass++) */
+/* for (y = 0; y < height; y++) { png_read_row(png_ptr,(png_bytep) &(im->data[channels*width*y]), NULL); } */
+/* mm_log((1,"made it to here 2\n")); */
+/* png_read_end(png_ptr, info_ptr); */
+/* mm_log((1,"made it to here 3\n")); */
+/* png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); */
+/* mm_log((1,"made it to here 4\n")); */
+/* mm_log((1,"(0x%08X) <- i_readpng_scalar\n",im)); */
+
+/* return im; */
+/* } */
--- /dev/null
+#include "image.h"
+#include "io.h"
+#include "log.h"
+
+#include <stdlib.h>
+
+
+/*
+=head1 NAME
+
+pnm.c - implements reading and writing ppm/pnm/pbm files, uses io layer.
+
+=head1 SYNOPSIS
+
+ io_glue *ig = io_new_fd( fd );
+ i_img *im = i_readpnm_wiol(ig, -1); // no limit on how much is read
+ // or
+ io_glue *ig = io_new_fd( fd );
+ return_code = i_writepnm_wiol(im, ig);
+
+=head1 DESCRIPTION
+
+pnm.c implements the basic functions to read and write portable
+anymap files. It uses the iolayer and needs either a seekable source
+or an entire memory mapped buffer.
+
+=head1 FUNCTION REFERENCE
+
+Some of these functions are internal.
+
+=over 4
+
+=cut
+*/
+
+
+#define BSIZ 1024
+#define misspace(x) (x==' ' || x=='\n' || x=='\r' || x=='\t' || x=='\f' || x=='\v')
+#define misnumber(x) (x <= '9' && x>='0')
+
+static char *typenames[]={"ascii pbm", "ascii pgm", "ascii ppm", "binary pbm", "binary pgm", "binary ppm"};
+
+/*
+ * Type to encapsulate the local buffer
+ * management skipping over in a file
+ */
+
+typedef struct {
+ io_glue *ig;
+ int len;
+ int cp;
+ char buf[BSIZ];
+} mbuf;
+
+
+static
+void init_buf(mbuf *mb, io_glue *ig) {
+ mb->len = 0;
+ mb->cp = 0;
+ mb->ig = ig;
+}
+
+
+
+/*
+=item gnext(mbuf *mb)
+
+Fetches a character and advances in stream by one character.
+Returns a pointer to the byte or NULL on failure (internal).
+
+ mb - buffer object
+
+=cut
+*/
+
+static
+char *
+gnext(mbuf *mb) {
+ io_glue *ig = mb->ig;
+ if (mb->cp == mb->len) {
+ mb->cp = 0;
+ mb->len = ig->readcb(ig, mb->buf, BSIZ);
+ if (mb->len == -1) {
+ mm_log((1, "i_readpnm: read error\n"));
+ return NULL;
+ }
+ if (mb->len == 0) {
+ mm_log((1, "i_readpnm: end of file\n"));
+ return NULL;
+ }
+ }
+ return &mb->buf[mb->cp++];
+}
+
+
+/*
+=item gnext(mbuf *mb)
+
+Fetches a character but does NOT advance. Returns a pointer to
+the byte or NULL on failure (internal).
+
+ mb - buffer object
+
+=cut
+*/
+
+static
+char *
+gpeek(mbuf *mb) {
+ io_glue *ig = mb->ig;
+ if (mb->cp == mb->len) {
+ mb->cp = 0;
+ mb->len = ig->readcb(ig, mb->buf, BSIZ);
+ if (mb->len == -1) {
+ mm_log((1, "i_readpnm: read error\n"));
+ return NULL;
+ }
+ if (mb->len == 0) {
+ mm_log((1, "i_readpnm: end of file\n"));
+ return NULL;
+ }
+ }
+ return &mb->buf[mb->cp];
+}
+
+
+
+
+/*
+=item skip_spaces(mb)
+
+Advances in stream until it is positioned at a
+non white space character. (internal)
+
+ mb - buffer object
+
+=cut
+*/
+
+static
+int
+skip_spaces(mbuf *mb) {
+ char *cp;
+ while( (cp = gpeek(mb)) && misspace(*cp) ) if ( !gnext(mb) ) break;
+ if (!cp) return 0;
+ return 1;
+}
+
+
+/*
+=item skip_spaces(mb)
+
+Advances in stream over whitespace and a comment if one is found. (internal)
+
+ mb - buffer object
+
+=cut
+*/
+
+static
+int
+skip_comment(mbuf *mb) {
+ char *cp;
+
+ if (!skip_spaces(mb)) return 0;
+
+ if (!(cp = gpeek(mb))) return 0;
+ if (*cp == '#') {
+ while( (cp = gpeek(mb)) && (*cp != '\n' && *cp != '\r') ) {
+ if ( !gnext(mb) ) break;
+ }
+ }
+ if (!cp) return 0;
+
+ return 1;
+}
+
+
+/*
+=item gnum(mb, i)
+
+Fetches the next number from stream and stores in i, returns true
+on success else false.
+
+ mb - buffer object
+ i - integer to store result in
+
+=cut
+*/
+
+static
+int
+gnum(mbuf *mb, int *i) {
+ char *cp;
+ *i = 0;
+
+ if (!skip_spaces(mb)) return 0;
+
+ while( (cp = gpeek(mb)) && misnumber(*cp) ) {
+ *i = *i*10+(*cp-'0');
+ cp = gnext(mb);
+ }
+ return 1;
+}
+
+
+/*
+=item i_readpnm_wiol(ig, length)
+
+Retrieve an image and stores in the iolayer object. Returns NULL on fatal error.
+
+ ig - io_glue object
+ length - maximum length to read from data source, before closing it -1
+ signifies no limit.
+
+=cut
+*/
+
+
+i_img *
+i_readpnm_wiol(io_glue *ig, int length) {
+ i_img* im;
+ int type;
+ int x, y, ch;
+ int width, height, maxval, channels, pcount;
+ char *cp;
+ unsigned char *uc;
+ mbuf buf;
+ i_color val;
+ int mult;
+
+ /* char *pp; */
+
+ mm_log((1,"i_readpnm(ig %p, length %d)\n", ig, length));
+
+ /*
+ pp = mymalloc(20);
+
+ pp[-1]= 'c';
+ pp[-2]= 'c';
+
+ bndcheck_all();
+
+ myfree(pp);
+
+ mm_log((1, "Hack is exiting\n"));
+
+*/
+
+ io_glue_commit_types(ig);
+ init_buf(&buf, ig);
+
+ cp = gnext(&buf);
+
+ if (!cp || *cp != 'P') {
+ mm_log((1, "i_readpnm: Could not read header of file\n"));
+ return NULL;
+ }
+
+ if ( !(cp = gnext(&buf)) ) {
+ mm_log((1, "i_readpnm: Could not read header of file\n"));
+ return NULL;
+ }
+
+ type = *cp-'0';
+
+ if (type < 1 || type > 6) {
+ mm_log((1, "i_readpnm: Not a pnm file\n"));
+ return NULL;
+ }
+
+ if ( !(cp = gnext(&buf)) ) {
+ mm_log((1, "i_readpnm: Could not read header of file\n"));
+ return NULL;
+ }
+
+ if ( !misspace(*cp) ) {
+ mm_log((1, "i_readpnm: Not a pnm file\n"));
+ return NULL;
+ }
+
+ mm_log((1, "i_readpnm: image is a %s\n", typenames[type-1] ));
+
+
+ /* Read sizes and such */
+
+ if (!skip_comment(&buf)) {
+ mm_log((1, "i_readpnm: error reading before width\n"));
+ return NULL;
+ }
+
+ if (!gnum(&buf, &width)) {
+ mm_log((1, "i_readpnm: error reading width\n"));
+ return NULL;
+ }
+
+ if (!skip_comment(&buf)) {
+ mm_log((1, "i_readpnm: error reading before height\n"));
+ return NULL;
+ }
+
+ if (!gnum(&buf, &height)) {
+ mm_log((1, "i_readpnm: error reading height\n"));
+ return NULL;
+ }
+
+ if (!(type == 1 || type == 4)) {
+ if (!skip_comment(&buf)) {
+ mm_log((1, "i_readpnm: error reading before maxval\n"));
+ return NULL;
+ }
+
+ if (!gnum(&buf, &maxval)) {
+ mm_log((1, "i_readpnm: error reading maxval\n"));
+ return NULL;
+ }
+ } else maxval=1;
+
+ if (!(cp = gnext(&buf)) || !misspace(*cp)) {
+ mm_log((1, "i_readpnm: garbage in header\n"));
+ return NULL;
+ }
+
+ channels = (type == 3 || type == 6) ? 3:1;
+ pcount = width*height*channels;
+
+ mm_log((1, "i_readpnm: (%d x %d), channels = %d, maxval = %d\n", width, height, channels, maxval));
+
+ im = i_img_empty_ch(NULL, width, height, channels);
+
+ switch (type) {
+ case 1: /* Ascii types */
+ case 2:
+ case 3:
+ mult = type == 1 ? 255 : 1;
+ for(y=0;y<height;y++) for(x=0; x<width; x++) {
+ for(ch=0; ch<channels; ch++) {
+ int t;
+ if (gnum(&buf, &t)) val.channel[ch] = t;
+ else {
+ mm_log((1,"i_readpnm: gnum() returned false in data\n"));
+ return im;
+ }
+ }
+ i_ppix(im, x, y, &val);
+ }
+ break;
+
+ case 4: /* binary pbm */
+ for(y=0;y<height;y++) for(x=0; x<width; x+=8) {
+ if ( (uc = gnext(&buf)) ) {
+ int xt;
+ int pc = width-x < 8 ? width-x : 8;
+ /* mm_log((1,"i_readpnm: y=%d x=%d pc=%d\n", y, x, pc)); */
+ for(xt = 0; xt<pc; xt++) {
+ val.channel[0] = (*uc & (128>>xt)) ? 0 : 255;
+ i_ppix(im, x+xt, y, &val);
+ }
+ } else {
+ mm_log((1,"i_readpnm: gnext() returned false in data\n"));
+ return im;
+ }
+ }
+ break;
+
+ case 5: /* binary pgm */
+ case 6: /* binary ppm */
+ for(y=0;y<height;y++) for(x=0; x<width; x++) {
+ for(ch=0; ch<channels; ch++) {
+ if ( (uc = gnext(&buf)) ) val.channel[ch] = *uc;
+ else {
+ mm_log((1,"i_readpnm: gnext() returned false in data\n"));
+ return im;
+ }
+ }
+ i_ppix(im, x, y, &val);
+ }
+ break;
+ default:
+ mm_log((1, "type %s [P%d] unsupported\n", typenames[type-1], type));
+ return NULL;
+ }
+ return im;
+}
+
+undef_int
+i_writeppm(i_img *im,int fd) {
+ char header[255];
+ int rc;
+
+ mm_log((1,"i_writeppm(im* 0x%x,fd %d)\n",im,fd));
+ if (im->channels!=3) {
+ mm_log((1,"i_writeppm: ppm is 3 channel only (current image is %d)\n",im->channels));
+ return(0);
+ }
+
+ sprintf(header,"P6\n#CREATOR: Imager\n%d %d\n255\n",im->xsize,im->ysize);
+
+ if (mywrite(fd,header,strlen(header))<0) {
+ mm_log((1,"i_writeppm: unable to write ppm header.\n"));
+ return(0);
+ }
+
+ rc=mywrite(fd,im->data,im->bytes);
+ if (rc<0) {
+ mm_log((1,"i_writeppm: unable to write ppm data.\n"));
+ return(0);
+ }
+ return(1);
+}
+
+
+
+
+
+
+
--- /dev/null
+
+#ifndef _P_P_PORTABILITY_H_
+#define _P_P_PORTABILITY_H_
+
+/* Perl/Pollution/Portability Version 1.0007 */
+
+/* Copyright (C) 1999, Kenneth Albanowski. This code may be used and
+ distributed under the same license as any version of Perl. */
+
+/* For the latest version of this code, please retreive the Devel::PPPort
+ module from CPAN, contact the author at <kjahds@kjahds.com>, or check
+ with the Perl maintainers. */
+
+/* If you needed to customize this file for your project, please mention
+ your changes, and visible alter the version number. */
+
+
+/*
+ In order for a Perl extension module to be as portable as possible
+ across differing versions of Perl itself, certain steps need to be taken.
+ Including this header is the first major one, then using dTHR is all the
+ appropriate places and using a PL_ prefix to refer to global Perl
+ variables is the second.
+*/
+
+
+/* If you use one of a few functions that were not present in earlier
+ versions of Perl, please add a define before the inclusion of ppport.h
+ for a static include, or use the GLOBAL request in a single module to
+ produce a global definition that can be referenced from the other
+ modules.
+
+ Function: Static define: Extern define:
+ newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL
+
+*/
+
+
+/* To verify whether ppport.h is needed for your module, and whether any
+ special defines should be used, ppport.h can be run through Perl to check
+ your source code. Simply say:
+
+ perl -x ppport.h *.c *.h *.xs foo / *.c [etc]
+
+ The result will be a list of patches suggesting changes that should at
+ least be acceptable, if not necessarily the most efficient solution, or a
+ fix for all possible problems. It won't catch where dTHR is needed, and
+ doesn't attempt to account for global macro or function definitions,
+ nested includes, typemaps, etc.
+
+ In order to test for the need of dTHR, please try your module under a
+ recent version of Perl that has threading compiled-in.
+
+*/
+
+
+/*
+#!/usr/bin/perl
+@ARGV = ("*.xs") if !@ARGV;
+%badmacros = %funcs = %macros = (); $replace = 0;
+foreach (<DATA>) {
+ $funcs{$1} = 1 if /Provide:\s+(\S+)/;
+ $macros{$1} = 1 if /^#\s*define\s+([a-zA-Z0-9_]+)/;
+ $replace = $1 if /Replace:\s+(\d+)/;
+ $badmacros{$2}=$1 if $replace and /^#\s*define\s+([a-zA-Z0-9_]+).*?\s+([a-zA-Z0-9_]+)/;
+ $badmacros{$1}=$2 if /Replace (\S+) with (\S+)/;
+}
+foreach $filename (map(glob($_),@ARGV)) {
+ unless (open(IN, "<$filename")) {
+ warn "Unable to read from $file: $!\n";
+ next;
+ }
+ print "Scanning $filename...\n";
+ $c = ""; while (<IN>) { $c .= $_; } close(IN);
+ $need_include = 0; %add_func = (); $changes = 0;
+ $has_include = ($c =~ /#.*include.*ppport/m);
+
+ foreach $func (keys %funcs) {
+ if ($c =~ /#.*define.*\bNEED_$func(_GLOBAL)?\b/m) {
+ if ($c !~ /\b$func\b/m) {
+ print "If $func isn't needed, you don't need to request it.\n" if
+ $changes += ($c =~ s/^.*#.*define.*\bNEED_$func\b.*\n//m);
+ } else {
+ print "Uses $func\n";
+ $need_include = 1;
+ }
+ } else {
+ if ($c =~ /\b$func\b/m) {
+ $add_func{$func} =1 ;
+ print "Uses $func\n";
+ $need_include = 1;
+ }
+ }
+ }
+
+ if (not $need_include) {
+ foreach $macro (keys %macros) {
+ if ($c =~ /\b$macro\b/m) {
+ print "Uses $macro\n";
+ $need_include = 1;
+ }
+ }
+ }
+
+ foreach $badmacro (keys %badmacros) {
+ if ($c =~ /\b$badmacro\b/m) {
+ $changes += ($c =~ s/\b$badmacro\b/$badmacros{$badmacro}/gm);
+ print "Uses $badmacros{$badmacro} (instead of $badmacro)\n";
+ $need_include = 1;
+ }
+ }
+
+ if (scalar(keys %add_func) or $need_include != $has_include) {
+ if (!$has_include) {
+ $inc = join('',map("#define NEED_$_\n", sort keys %add_func)).
+ "#include \"ppport.h\"\n";
+ $c = "$inc$c" unless $c =~ s/#.*include.*XSUB.*\n/$&$inc/m;
+ } elsif (keys %add_func) {
+ $inc = join('',map("#define NEED_$_\n", sort keys %add_func));
+ $c = "$inc$c" unless $c =~ s/^.*#.*include.*ppport.*$/$inc$&/m;
+ }
+ if (!$need_include) {
+ print "Doesn't seem to need ppport.h.\n";
+ $c =~ s/^.*#.*include.*ppport.*\n//m;
+ }
+ $changes++;
+ }
+
+ if ($changes) {
+ open(OUT,">/tmp/ppport.h.$$");
+ print OUT $c;
+ close(OUT);
+ open(DIFF, "diff -u $filename /tmp/ppport.h.$$|");
+ while (<DIFF>) { s!/tmp/ppport\.h\.$$!$filename.patched!; print STDOUT; }
+ close(DIFF);
+ unlink("/tmp/ppport.h.$$");
+ } else {
+ print "Looks OK\n";
+ }
+}
+__DATA__
+*/
+
+#ifndef PERL_REVISION
+# ifndef __PATCHLEVEL_H_INCLUDED__
+# include "patchlevel.h"
+# endif
+# ifndef PERL_REVISION
+# define PERL_REVISION (5)
+ /* Replace: 1 */
+# define PERL_VERSION PATCHLEVEL
+# define PERL_SUBVERSION SUBVERSION
+ /* Replace PERL_PATCHLEVEL with PERL_VERSION */
+ /* Replace: 0 */
+# endif
+#endif
+
+#define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION)
+
+#ifndef ERRSV
+# define ERRSV perl_get_sv("@",FALSE)
+#endif
+
+#if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5))
+/* Replace: 1 */
+# define PL_sv_undef sv_undef
+# define PL_sv_yes sv_yes
+# define PL_sv_no sv_no
+# define PL_na na
+# define PL_stdingv stdingv
+# define PL_hints hints
+# define PL_curcop curcop
+# define PL_curstash curstash
+# define PL_copline copline
+# define PL_Sv Sv
+/* Replace: 0 */
+#endif
+
+#ifndef dTHR
+# ifdef WIN32
+# define dTHR extern int Perl___notused
+# else
+# define dTHR extern int errno
+# endif
+#endif
+
+#ifndef boolSV
+# define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
+#endif
+
+#ifndef gv_stashpvn
+# define gv_stashpvn(str,len,flags) gv_stashpv(str,flags)
+#endif
+
+#ifndef newSVpvn
+# define newSVpvn(data,len) ((len) ? newSVpv ((data), (len)) : newSVpv ("", 0))
+#endif
+
+#ifndef newRV_inc
+/* Replace: 1 */
+# define newRV_inc(sv) newRV(sv)
+/* Replace: 0 */
+#endif
+
+#ifndef newRV_noinc
+# ifdef __GNUC__
+# define newRV_noinc(sv) \
+ ({ \
+ SV *nsv = (SV*)newRV(sv); \
+ SvREFCNT_dec(sv); \
+ nsv; \
+ })
+# else
+# if defined(CRIPPLED_CC) || defined(USE_THREADS)
+static SV * newRV_noinc (SV * sv)
+{
+ SV *nsv = (SV*)newRV(sv);
+ SvREFCNT_dec(sv);
+ return nsv;
+}
+# else
+# define newRV_noinc(sv) \
+ ((PL_Sv=(SV*)newRV(sv), SvREFCNT_dec(sv), (SV*)PL_Sv)
+# endif
+# endif
+#endif
+
+/* Provide: newCONSTSUB */
+
+/* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */
+#if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 63))
+
+#if defined(NEED_newCONSTSUB)
+static
+#else
+extern void newCONSTSUB _((HV * stash, char * name, SV *sv));
+#endif
+
+#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL)
+void
+newCONSTSUB(stash,name,sv)
+HV *stash;
+char *name;
+SV *sv;
+{
+ U32 oldhints = PL_hints;
+ HV *old_cop_stash = PL_curcop->cop_stash;
+ HV *old_curstash = PL_curstash;
+ line_t oldline = PL_curcop->cop_line;
+ PL_curcop->cop_line = PL_copline;
+
+ PL_hints &= ~HINT_BLOCK_SCOPE;
+ if (stash)
+ PL_curstash = PL_curcop->cop_stash = stash;
+
+ newSUB(
+
+#if (PERL_VERSION < 3) || ((PERL_VERSION == 3) && (PERL_SUBVERSION < 22))
+ /* before 5.003_22 */
+ start_subparse(),
+#else
+# if (PERL_VERSION == 3) && (PERL_SUBVERSION == 22)
+ /* 5.003_22 */
+ start_subparse(0),
+# else
+ /* 5.003_23 onwards */
+ start_subparse(FALSE, 0),
+# endif
+#endif
+
+ newSVOP(OP_CONST, 0, newSVpv(name,0)),
+ newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */
+ newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
+ );
+
+ PL_hints = oldhints;
+ PL_curcop->cop_stash = old_cop_stash;
+ PL_curstash = old_curstash;
+ PL_curcop->cop_line = oldline;
+}
+#endif
+
+#endif /* newCONSTSUB */
+
+
+#endif /* _P_P_PORTABILITY_H_ */
--- /dev/null
+/* quant.c - provides general image quantization
+ currently only used by gif.c, but maybe we'll support producing
+ 8-bit (or bigger indexed) png files at some point
+*/
+#include "image.h"
+
+static void makemap_addi(i_quantize *, i_img **imgs, int count);
+
+static
+void
+setcol(i_color *cl,unsigned char r,unsigned char g,unsigned char b,unsigned char a) {
+ cl->rgba.r=r;
+ cl->rgba.g=g;
+ cl->rgba.b=b;
+ cl->rgba.a=a;
+}
+
+
+
+/* make a colour map overwrites mc_existing/mc_count in quant Note
+ that i_makemap will be called once for each image if mc_perimage is
+ set and the format support multiple colour maps per image.
+
+ This means we don't need any special processing at this level to
+ handle multiple colour maps.
+*/
+
+void
+quant_makemap(i_quantize *quant, i_img **imgs, int count) {
+ i_color temp;
+#ifdef HAVE_LIBGIF
+ /* giflib does it's own color table generation */
+ if (quant->translate == pt_giflib)
+ return;
+#endif
+ switch (quant->make_colors & mc_mask) {
+ case mc_none:
+ /* use user's specified map */
+ break;
+ case mc_web_map:
+ {
+ int r, g, b;
+ int i = 0;
+ for (r = 0; r < 256; r+=0x33)
+ for (g = 0; g < 256; g+=0x33)
+ for (b = 0; b < 256; b += 0x33)
+ setcol(quant->mc_colors+i++, r, g, b, 0);
+ quant->mc_count = i;
+ }
+ break;
+
+ case mc_addi:
+ default:
+ makemap_addi(quant, imgs, count);
+ break;
+ }
+}
+
+#ifdef HAVE_LIBGIF
+static void translate_giflib(i_quantize *, i_img *, i_palidx *);
+#endif
+static void translate_closest(i_quantize *, i_img *, i_palidx *);
+static void translate_errdiff(i_quantize *, i_img *, i_palidx *);
+static void translate_addi(i_quantize *, i_img *, i_palidx *);
+
+/* Quantize the image given the palette in quant.
+
+ The giflib quantizer ignores the palette.
+*/
+i_palidx *quant_translate(i_quantize *quant, i_img *img) {
+ i_palidx *result = mymalloc(img->xsize * img->ysize);
+ switch (quant->translate) {
+#ifdef HAVE_LIBGIF
+ case pt_giflib:
+ translate_giflib(quant, img, result);
+ break;
+#endif
+
+ case pt_closest:
+ translate_closest(quant, img, result);
+ break;
+
+ case pt_errdiff:
+ translate_errdiff(quant, img, result);
+ break;
+
+ case pt_perturb:
+ default:
+ translate_addi(quant, img, result);
+ break;
+ }
+
+ return result;
+}
+
+#ifdef HAVE_LIBGIF
+#include "gif_lib.h"
+
+#define GET_RGB(im, x, y, ri, gi, bi, col) \
+ i_gpix((im),(x),(y),&(col)); (ri)=(col).rgb.r; \
+ if((im)->channels==3) { (bi)=(col).rgb.b; (gi)=(col).rgb.g; }
+
+static int
+quant_replicate(i_img *im, i_palidx *output, i_quantize *quant);
+
+/* Use the gif_lib quantization functions to quantize the image */
+static void translate_giflib(i_quantize *quant, i_img *img, i_palidx *out) {
+ int x,y,ColorMapSize,colours_in;
+ unsigned long Size;
+ int i;
+
+ GifByteType *RedBuffer = NULL, *GreenBuffer = NULL, *BlueBuffer = NULL;
+ GifByteType *RedP, *GreenP, *BlueP;
+ ColorMapObject *OutputColorMap = NULL;
+
+ i_color col;
+
+ /*mm_log((1,"i_writegif(0x%x, fd %d, colors %dbpp)\n",im,fd,colors));*/
+
+ /*if (!(im->channels==1 || im->channels==3)) { fprintf(stderr,"Unable to write gif, improper colorspace.\n"); exit(3); }*/
+
+ ColorMapSize = quant->mc_size;
+
+ Size = ((long) img->xsize) * img->ysize * sizeof(GifByteType);
+
+
+ if ((OutputColorMap = MakeMapObject(ColorMapSize, NULL)) == NULL)
+ m_fatal(0,"Failed to allocate memory for Output colormap.");
+ /* if ((OutputBuffer = (GifByteType *) mymalloc(im->xsize * im->ysize * sizeof(GifByteType))) == NULL)
+ m_fatal(0,"Failed to allocate memory for output buffer.");*/
+
+ /* ******************************************************* */
+ /* count the number of colours in the image */
+ colours_in=i_count_colors(img, OutputColorMap->ColorCount);
+
+ if(colours_in != -1) { /* less then the number wanted */
+ /* so we copy them over as-is */
+ mm_log((2,"image has %d colours, which fits in %d. Copying\n",
+ colours_in,ColorMapSize));
+ quant_replicate(img, out, quant);
+ /* saves the colors, so don't fall through */
+ return;
+ } else {
+
+ mm_log((2,"image has %d colours, more then %d. Quantizing\n",colours_in,ColorMapSize));
+
+ if (img->channels >= 3) {
+ if ((RedBuffer = (GifByteType *) mymalloc((unsigned int) Size)) == NULL) {
+ m_fatal(0,"Failed to allocate memory required, aborted.");
+ return;
+ }
+ if ((GreenBuffer = (GifByteType *) mymalloc((unsigned int) Size)) == NULL) {
+ m_fatal(0,"Failed to allocate memory required, aborted.");
+ free(RedBuffer);
+ return;
+ }
+
+ if ((BlueBuffer = (GifByteType *) mymalloc((unsigned int) Size)) == NULL) {
+ m_fatal(0,"Failed to allocate memory required, aborted.");
+ free(RedBuffer);
+ free(GreenBuffer);
+ return;
+ }
+
+ RedP = RedBuffer;
+ GreenP = GreenBuffer;
+ BlueP = BlueBuffer;
+
+ for (y=0; y< img->ysize; y++) for (x=0; x < img->xsize; x++) {
+ i_gpix(img,x,y,&col);
+ *RedP++ = col.rgb.r;
+ *GreenP++ = col.rgb.g;
+ *BlueP++ = col.rgb.b;
+ }
+
+ } else {
+
+ if ((RedBuffer = (GifByteType *) mymalloc((unsigned int) Size))==NULL) {
+ m_fatal(0,"Failed to allocate memory required, aborted.");
+ return;
+ }
+
+ GreenBuffer=BlueBuffer=RedBuffer;
+ RedP = RedBuffer;
+ for (y=0; y< img->ysize; y++) for (x=0; x < img->xsize; x++) {
+ i_gpix(img,x,y,&col);
+ *RedP++ = col.rgb.r;
+ }
+ }
+
+ if (QuantizeBuffer(img->xsize, img->ysize, &ColorMapSize, RedBuffer, GreenBuffer, BlueBuffer,
+ out, OutputColorMap->Colors) == GIF_ERROR) {
+ mm_log((1,"Error in QuantizeBuffer, unable to write image.\n"));
+ }
+ }
+
+ free(RedBuffer);
+ if (img->channels == 3) { free(GreenBuffer); free(BlueBuffer); }
+
+ /* copy over the color map */
+ for (i = 0; i < ColorMapSize; ++i) {
+ quant->mc_colors[i].rgb.r = OutputColorMap->Colors[i].Red;
+ quant->mc_colors[i].rgb.g = OutputColorMap->Colors[i].Green;
+ quant->mc_colors[i].rgb.b = OutputColorMap->Colors[i].Blue;
+ }
+ quant->mc_count = ColorMapSize;
+}
+
+static
+int
+quant_replicate(i_img *im, GifByteType *output, i_quantize *quant) {
+ int x, y, alloced, r, g=0, b=0, idx ;
+ i_color col;
+
+ alloced=0;
+ for(y=0; y<im->ysize; y++) {
+ for(x=0; x<im->xsize; x++) {
+
+ GET_RGB(im, x,y, r,g,b, col);
+
+ for(idx=0; idx<alloced; idx++) { /* linear search for an index */
+ if(quant->mc_colors[idx].rgb.r==r &&
+ quant->mc_colors[idx].rgb.g==g &&
+ quant->mc_colors[idx].rgb.b==b) {
+ break;
+ }
+ }
+
+ if(idx >= alloced) { /* if we haven't already, we */
+ idx=alloced++; /* add the colour to the map */
+ if(quant->mc_size < alloced) {
+ mm_log((1,"Tried to allocate more then %d colours.\n",
+ quant->mc_size));
+ return 0;
+ }
+ quant->mc_colors[idx].rgb.r=r;
+ quant->mc_colors[idx].rgb.g=g;
+ quant->mc_colors[idx].rgb.b=b;
+ }
+ *output=idx; /* fill output buffer */
+ output++; /* with colour indexes */
+ }
+ }
+ quant->mc_count = alloced;
+ return 1;
+}
+
+#endif
+
+static void translate_closest(i_quantize *quant, i_img *img, i_palidx *out) {
+ quant->perturb = 0;
+ translate_addi(quant, img, out);
+}
+
+#define PWR2(x) ((x)*(x))
+
+typedef int (*cmpfunc)(const void*, const void*);
+
+typedef struct {
+ unsigned char r,g,b;
+ char state;
+ int dr,dg,db;
+ int cdist;
+ int mcount;
+} cvec;
+
+typedef struct {
+ int cnt;
+ int vec[256];
+} hashbox;
+
+typedef struct {
+ int boxnum;
+ int pixcnt;
+ int cand;
+ int pdc;
+} pbox;
+
+static void prescan(i_img **im,int count, int cnum, cvec *clr);
+static void reorder(pbox prescan[512]);
+static int pboxcmp(const pbox *a,const pbox *b);
+static void boxcenter(int box,cvec *cv);
+static float frandn(void);
+static void boxrand(int box,cvec *cv);
+static void bbox(int box,int *r0,int *r1,int *g0,int *g1,int *b0,int *b1);
+static void cr_hashindex(cvec clr[256],int cnum,hashbox hb[512]);
+static int mindist(int boxnum,cvec *cv);
+static int maxdist(int boxnum,cvec *cv);
+
+/* Some of the simpler functions are kept here to aid the compiler -
+ maybe some of them will be inlined. */
+
+static int
+pixbox(i_color *ic) { return ((ic->channel[0] & 224)<<1)+ ((ic->channel[1]&224)>>2) + ((ic->channel[2] &224) >> 5); }
+
+static unsigned char
+g_sat(int in) {
+ if (in>255) { return 255; }
+ else if (in>0) return in;
+ return 0;
+}
+
+static
+float
+frand(void) {
+ return rand()/(RAND_MAX+1.0);
+}
+
+static
+int
+eucl_d(cvec* cv,i_color *cl) { return PWR2(cv->r-cl->channel[0])+PWR2(cv->g-cl->channel[1])+PWR2(cv->b-cl->channel[2]); }
+
+static
+int
+ceucl_d(i_color *c1, i_color *c2) { return PWR2(c1->channel[0]-c2->channel[0])+PWR2(c1->channel[1]-c2->channel[1])+PWR2(c1->channel[2]-c2->channel[2]); }
+
+/*
+
+This quantization algorithm and implementation routines are by Arnar
+M. Hrafnkelson. In case any new ideas are here they are mine since
+this was written from scratch.
+
+The algorithm uses local means in the following way:
+
+ For each point in the colormap we find which image points
+ have that point as it's closest point. We calculate the mean
+ of those points and in the next iteration it will be the new
+ entry in the colormap.
+
+In order to speed this process up (i.e. nearest neighbor problem) We
+divied the r,g,b space up in equally large 512 boxes. The boxes are
+numbered from 0 to 511. Their numbering is so that for a given vector
+it is known that it belongs to the box who is formed by concatenating the
+3 most significant bits from each component of the RGB triplet.
+
+For each box we find the list of points from the colormap who might be
+closest to any given point within the box. The exact solution
+involves finding the Voronoi map (or the dual the Delauny
+triangulation) and has many issues including numerical stability.
+
+So we use this approximation:
+
+1. Find which point has the shortest maximum distance to the box.
+2. Find all points that have a shorter minimum distance than that to the box
+
+This is a very simple task and is not computationally heavy if one
+takes into account that the minimum distances from a pixel to a box is
+always found by checking if it's inside the box or is closest to some
+side or a corner. Finding the maximum distance is also either a side
+or a corner.
+
+This approach results 2-3 times more than the actual points needed but
+is still a good gain over the complete space. Usually when one has a
+256 Colorcolor map a search over 30 is often obtained.
+
+A bit of an enhancement to this approach is to keep a seperate list
+for each side of the cube, but this will require even more memory.
+
+ Arnar M. Hrafnkelsson (addi@umich.edu);
+
+*/
+/*
+ Extracted from gifquant.c, removed dependencies on gif_lib,
+ and added support for multiple images.
+ starting from 1nov2000 by TonyC <tony@develop-help.com>.
+
+*/
+
+static void
+makemap_addi(i_quantize *quant, i_img **imgs, int count) {
+ cvec *clr;
+ int cnum, i, x, y, bst_idx=0, ld, cd, iter, currhb;
+ i_color val;
+ float dlt, accerr;
+ hashbox hb[512];
+
+ clr = (cvec *)mymalloc(sizeof(cvec) * quant->mc_size);
+ for (i=0; i < quant->mc_count; ++i) {
+ clr[i].r = quant->mc_colors[i].rgb.r;
+ clr[i].g = quant->mc_colors[i].rgb.g;
+ clr[i].b = quant->mc_colors[i].rgb.b;
+ clr[i].state = 1;
+ }
+ /* mymalloc doesn't clear memory, so I think we need this */
+ for (; i < quant->mc_size; ++i) {
+ clr[i].state = 0;
+ }
+ cnum = quant->mc_size;
+ dlt = 1;
+
+ prescan(imgs, count, cnum, clr);
+ cr_hashindex(clr, cnum, hb);
+
+ for(iter=0;iter<3;iter++) {
+ accerr=0.0;
+
+ for (i = 0; i < count; ++i) {
+ i_img *im = imgs[i];
+ for(y=0;y<im->ysize;y++) for(x=0;x<im->xsize;x++) {
+ ld=196608;
+ i_gpix(im,x,y,&val);
+ currhb=pixbox(&val);
+ /* printf("box = %d \n",currhb); */
+ for(i=0;i<hb[currhb].cnt;i++) {
+ /* printf("comparing: pix (%d,%d,%d) vec (%d,%d,%d)\n",val.channel[0],val.channel[1],val.channel[2],clr[hb[currhb].vec[i]].r,clr[hb[currhb].vec[i]].g,clr[hb[currhb].vec[i]].b); */
+
+ cd=eucl_d(&clr[hb[currhb].vec[i]],&val);
+ if (cd<ld) {
+ ld=cd; /* shortest distance yet */
+ bst_idx=hb[currhb].vec[i]; /* index of closest vector yet */
+ }
+ }
+
+ clr[bst_idx].mcount++;
+ accerr+=(ld);
+ clr[bst_idx].dr+=val.channel[0];
+ clr[bst_idx].dg+=val.channel[1];
+ clr[bst_idx].db+=val.channel[2];
+ }
+ }
+ for(i=0;i<cnum;i++) if (clr[i].mcount) { clr[i].dr/=clr[i].mcount; clr[i].dg/=clr[i].mcount; clr[i].db/=clr[i].mcount; }
+
+ /* for(i=0;i<cnum;i++) printf("vec(%d)=(%d,%d,%d) dest=(%d,%d,%d) matchcount=%d\n",
+ i,clr[i].r,clr[i].g,clr[i].b,clr[i].dr,clr[i].dg,clr[i].db,clr[i].mcount); */
+
+ /* printf("total error: %.2f\n",sqrt(accerr)); */
+
+ for(i=0;i<cnum;i++) {
+ if (clr[i].state) continue; /* skip reserved colors */
+
+ if (clr[i].mcount) {
+ clr[i].r=clr[i].r*(1-dlt)+dlt*clr[i].dr;
+ clr[i].g=clr[i].g*(1-dlt)+dlt*clr[i].dg;
+ clr[i].b=clr[i].b*(1-dlt)+dlt*clr[i].db;
+ } else {
+ /* I don't know why - TC */
+ clr[i].r=rand();
+ clr[i].g=rand();
+ clr[i].b=rand();
+ }
+
+ clr[i].dr=0;
+ clr[i].dg=0;
+ clr[i].db=0;
+ clr[i].mcount=0;
+ }
+ cr_hashindex(clr,cnum,hb);
+ }
+
+
+#ifdef NOTEF
+ for(i=0;i<cnum;i++) {
+ cd=eucl_d(&clr[i],&val);
+ if (cd<ld) {
+ ld=cd;
+ bst_idx=i;
+ }
+ }
+#endif
+
+ /* transfer the colors back */
+ for (i = 0; i < cnum; ++i) {
+ quant->mc_colors[i].rgb.r = clr[i].r;
+ quant->mc_colors[i].rgb.g = clr[i].g;
+ quant->mc_colors[i].rgb.b = clr[i].b;
+ }
+ quant->mc_count = cnum;
+
+ /* don't want to keep this */
+ myfree(clr);
+}
+
+#define pboxjump 32
+
+/* Define one of the following 4 symbols to choose a colour search method
+ The idea is to try these out, including benchmarking, to see which
+ is fastest in a good spread of circumstances.
+ I'd expect IM_CFLINSEARCH to be fastest for very small palettes, and
+ IM_CFHASHBOX for large images with large palettes.
+
+ Some other possibilities include:
+ - search over entries sorted by luminance
+
+ Initially I was planning on testing using the macros and then
+ integrating the code directly into each function, but this means if
+ we find a bug at a late stage we will need to update N copies of
+ the same code. Also, keeping the code in the macros means that the
+ code in the translation functions is much more to the point,
+ there's no distracting colour search code to remove attention from
+ what makes _this_ translation function different. It may be
+ advisable to move the setup code into functions at some point, but
+ it should be possible to do this fairly transparently.
+
+ If IM_CF_COPTS is defined then CFLAGS must have an appropriate
+ definition.
+
+ Each option needs to define 4 macros:
+ CF_VARS - variables to define in the function
+ CF_SETUP - code to setup for the colour search, eg. allocating and
+ initializing lookup tables
+ CF_FIND - code that looks for the color in val and puts the best
+ matching index in bst_idx
+ CF_CLEANUP - code to clean up, eg. releasing memory
+*/
+#ifndef IM_CF_COPTS
+/*#define IM_CFLINSEARCH*/
+#define IM_CFHASHBOX
+/*#define IM_CFSORTCHAN*/
+/*#define IM_CFRAND2DIST*/
+#endif
+
+#ifdef IM_CFHASHBOX
+
+/* The original version I wrote for this used the sort.
+ If this is defined then we use a sort to extract the indices for
+ the hashbox */
+#define HB_SORT
+
+/* assume i is available */
+#define CF_VARS hashbox hb[512]; \
+ int currhb; \
+ long ld, cd
+
+#ifdef HB_SORT
+
+static long *gdists; /* qsort is annoying */
+/* int might be smaller than long, so we need to do a real compare
+ rather than a subtraction*/
+static int distcomp(void const *a, void const *b) {
+ long ra = gdists[*(int const *)a];
+ long rb = gdists[*(int const *)b];
+ if (ra < rb)
+ return -1;
+ else if (ra > rb)
+ return 1;
+ else
+ return 0;
+}
+
+#endif
+
+/* for each hashbox build a list of colours that are in the hb or is closer
+ than other colours
+ This is pretty involved. The original gifquant generated the hashbox
+ as part of it's normal processing, but since the map generation is now
+ separated from the translation we need to do this on the spot.
+ Any optimizations, even if they don't produce perfect results would be
+ welcome.
+ */
+static void hbsetup(i_quantize *quant, hashbox *hb) {
+ long *dists, mind, maxd, cd;
+ int cr, cb, cg, hbnum, i;
+ i_color cenc;
+#ifdef HB_SORT
+ int *indices = mymalloc(quant->mc_count * sizeof(int));
+#endif
+
+ dists = mymalloc(quant->mc_count * sizeof(long));
+ for (cr = 0; cr < 8; ++cr) {
+ for (cg = 0; cg < 8; ++cg) {
+ for (cb = 0; cb < 8; ++cb) {
+ /* centre of the hashbox */
+ cenc.channel[0] = cr*pboxjump+pboxjump/2;
+ cenc.channel[1] = cg*pboxjump+pboxjump/2;
+ cenc.channel[2] = cb*pboxjump+pboxjump/2;
+ hbnum = pixbox(&cenc);
+ hb[hbnum].cnt = 0;
+ /* order indices in the order of distance from the hashbox */
+ for (i = 0; i < quant->mc_count; ++i) {
+#ifdef HB_SORT
+ indices[i] = i;
+#endif
+ dists[i] = ceucl_d(&cenc, quant->mc_colors+i);
+ }
+#ifdef HB_SORT
+ /* it should be possible to do this without a sort
+ but so far I'm too lazy */
+ gdists = dists;
+ qsort(indices, quant->mc_count, sizeof(int), distcomp);
+ /* any colors that can match are within mind+diagonal size of
+ a hashbox */
+ mind = dists[indices[0]];
+ i = 0;
+ maxd = (sqrt(mind)+pboxjump)*(sqrt(mind)+pboxjump);
+ while (i < quant->mc_count && dists[indices[i]] < maxd) {
+ hb[hbnum].vec[hb[hbnum].cnt++] = indices[i++];
+ }
+#else
+ /* work out the minimum */
+ mind = 256*256*3;
+ for (i = 0; i < quant->mc_count; ++i) {
+ if (dists[i] < mind) mind = dists[i];
+ }
+ /* transfer any colours that might be closest to a colour in
+ this hashbox */
+ maxd = (sqrt(mind)+pboxjump)*(sqrt(mind)+pboxjump);
+ for (i = 0; i < quant->mc_count; ++i) {
+ if (dists[i] < maxd)
+ hb[hbnum].vec[hb[hbnum].cnt++] = i;
+ }
+#endif
+ }
+ }
+ }
+#ifdef HB_SORT
+ myfree(indices);
+#endif
+ myfree(dists) ;
+}
+#define CF_SETUP hbsetup(quant, hb)
+
+#define CF_FIND \
+ currhb = pixbox(&val); \
+ ld = 196608; \
+ for (i = 0; i < hb[currhb].cnt; ++i) { \
+ cd = ceucl_d(quant->mc_colors+hb[currhb].vec[i], &val); \
+ if (cd < ld) { ld = cd; bst_idx = hb[currhb].vec[i]; } \
+ }
+
+#define CF_CLEANUP
+
+#endif
+
+#ifdef IM_CFLINSEARCH
+/* as simple as it gets */
+#define CF_VARS long ld, cd
+#define CF_SETUP /* none needed */
+#define CF_FIND \
+ ld = 196608; \
+ for (i = 0; i < quant->mc_count; ++i) { \
+ cd = ceucl_d(quant->mc_colors+i, &val); \
+ if (cd < ld) { ld = cd; bst_idx = i; } \
+ }
+#define CF_CLEANUP
+#endif
+
+#ifdef IM_CFSORTCHAN
+static int gsortchan;
+static i_quantize *gquant;
+static int chansort(void const *a, void const *b) {
+ return gquant->mc_colors[*(int const *)a].channel[gsortchan] -
+ gquant->mc_colors[*(int const *)b].channel[gsortchan];
+}
+#define CF_VARS int *indices, sortchan, diff; \
+ long ld, cd; \
+ int vindex[256] /* where to find value i of chan */
+
+static void chansetup(i_img *img, i_quantize *quant, int *csortchan,
+ int *vindex, int **cindices) {
+ int *indices, sortchan, chan, i, chval;
+ int chanmins[MAXCHANNELS], chanmaxs[MAXCHANNELS], maxrange;
+
+ /* find the channel with the maximum range */
+ /* the maximum stddev would probably be better */
+ for (chan = 0; chan < img->channels; ++chan) {
+ chanmins[chan] = 256; chanmaxs[chan] = 0;
+ for (i = 0; i < quant->mc_count; ++i) {
+ if (quant->mc_colors[i].channel[chan] < chanmins[chan])
+ chanmins[chan] = quant->mc_colors[i].channel[chan];
+ if (quant->mc_colors[i].channel[chan] > chanmaxs[chan])
+ chanmaxs[chan] = quant->mc_colors[i].channel[chan];
+ }
+ }
+ maxrange = -1;
+ for (chan = 0; chan < img->channels; ++chan) {
+ if (chanmaxs[chan]-chanmins[chan] > maxrange) {
+ maxrange = chanmaxs[chan]-chanmins[chan];
+ sortchan = chan;
+ }
+ }
+ indices = mymalloc(quant->mc_count * sizeof(int)) ;
+ for (i = 0; i < quant->mc_count; ++i) {
+ indices[i] = i;
+ }
+ gsortchan = sortchan;
+ gquant = quant;
+ qsort(indices, quant->mc_count, sizeof(int), chansort) ;
+ /* now a lookup table to find entries faster */
+ for (chval=0, i=0; i < quant->mc_count; ++i) {
+ while (chval < 256 &&
+ chval < quant->mc_colors[indices[i]].channel[sortchan]) {
+ vindex[chval++] = i;
+ }
+ }
+ while (chval < 256) {
+ vindex[chval++] = quant->mc_count-1;
+ }
+ *csortchan = sortchan;
+ *cindices = indices;
+}
+
+#define CF_SETUP \
+ chansetup(img, quant, &sortchan, vindex, &indices)
+
+int chanfind(i_color val, i_quantize *quant, int *indices, int *vindex,
+ int sortchan) {
+ int i, bst_idx, diff, maxdiff;
+ long ld, cd;
+
+ i = vindex[val.channel[sortchan]];
+ bst_idx = indices[i];
+ ld = 196608;
+ diff = 0;
+ maxdiff = quant->mc_count;
+ while (diff < maxdiff) {
+ if (i+diff < quant->mc_count) {
+ cd = ceucl_d(&val, quant->mc_colors+indices[i+diff]);
+ if (cd < ld) {
+ bst_idx = indices[i+diff];
+ ld = cd;
+ maxdiff = sqrt(ld);
+ }
+ }
+ if (i-diff >= 0) {
+ cd = ceucl_d(&val, quant->mc_colors+indices[i-diff]);
+ if (cd < ld) {
+ bst_idx = indices[i-diff];
+ ld = cd;
+ maxdiff = sqrt(ld);
+ }
+ }
+ ++diff;
+ }
+
+ return bst_idx;
+}
+
+#define CF_FIND \
+ bst_idx = chanfind(val, quant, indices, vindex, sortchan)
+
+
+#define CF_CLEANUP myfree(indices)
+
+#endif
+
+#ifdef IM_CFRAND2DIST
+
+/* This is based on a method described by Addi in the #imager channel
+ on the 28/2/2001. I was about 1am Sydney time at the time, so I
+ wasn't at my most cogent. Well, that's my excuse :)
+
+<TonyC> what I have at the moment is: hashboxes, with optimum hash box
+filling; simple linear search; and a lookup in the widest channel
+(currently the channel with the maximum range)
+<Addi> There is one more way that might be simple to implement.
+<Addi> You want to hear?
+<TonyC> what's that?
+<purl> somebody said that was not true
+<Addi> For each of the colors in the palette start by creating a
+sorted list of the form:
+<Addi> [distance, color]
+<Addi> Where they are sorted by distance.
+<TonyC> distance to where?
+<Addi> Where the elements in the lists are the distances and colors of
+the other colors in the palette
+<TonyC> ok
+<Addi> So if you are at color 0
+<Addi> ok - now to search for the closest color when you are creating
+the final image is done like this:
+<Addi> a) pick a random color from the palette
+<Addi> b) calculate the distance to it
+<Addi> c) only check the vectors that are within double the distance
+in the list of the color you picked from the palette.
+<Addi> Does that seem logical?
+<Addi> Lets imagine that we only have grayscale to make an example:
+<Addi> Our palette has 1 4 10 20 as colors.
+<Addi> And we want to quantize the color 11
+<Addi> lets say we picked 10 randomly
+<Addi> the double distance is 2
+<Addi> since abs(10-11)*2 is 2
+<Addi> And the list at vector 10 is this:
+<Addi> [0, 10], [6 4], [9, 1], [10, 20]
+<Addi> so we look at the first one (but not the second one since 6 is
+at a greater distance than 2.
+<Addi> Any of that make sense?
+<TonyC> yes, though are you suggesting another random jump to one of
+the colours with the possible choices? or an exhaustive search?
+<Addi> TonyC: It's possible to come up with a recursive/iterative
+enhancement but this is the 'basic' version.
+<Addi> Which would do an iterative search.
+<Addi> You can come up with conditions where it pays to switch to a new one.
+<Addi> And the 'random' start can be switched over to a small tree.
+<Addi> So you would have a little index at the start.
+<Addi> to get you into the general direction
+<Addi> Perhaps just an 8 split.
+<Addi> that is - split each dimension in half.
+<TonyC> yep
+<TonyC> I get the idea
+<Addi> But this would seem to be a good approach in our case since we
+usually have few codevectors.
+<Addi> So we only need 256*256 entries in a table.
+<Addi> We could even only index some of them that were deemed as good
+candidates.
+<TonyC> I was considering adding paletted output support for PNG and
+TIFF at some point, which support 16-bit palettes
+<Addi> ohh.
+<Addi> 'darn' ;)
+
+
+*/
+
+
+typedef struct i_dists {
+ int index;
+ long dist;
+} i_dists;
+
+#define CF_VARS \
+ i_dists *dists;
+
+static int dists_sort(void const *a, void const *b) {
+ return ((i_dists *)a)->dist - ((i_dists *)b)->dist;
+}
+
+static void rand2dist_setup(i_quantize *quant, i_dists **cdists) {
+ i_dists *dists =
+ mymalloc(sizeof(i_dists)*quant->mc_count*quant->mc_count);
+ int i, j;
+ long cd;
+ for (i = 0; i < quant->mc_count; ++i) {
+ i_dists *ldists = dists + quant->mc_count * i;
+ i_color val = quant->mc_colors[i];
+ for (j = 0; j < quant->mc_count; ++j) {
+ ldists[j].index = j;
+ ldists[j].dist = ceucl_d(&val, quant->mc_colors+j);
+ }
+ qsort(ldists, quant->mc_count, sizeof(i_dists), dists_sort);
+ }
+ *cdists = dists;
+}
+
+#define CF_SETUP \
+ bst_idx = rand() % quant->mc_count; \
+ rand2dist_setup(quant, &dists)
+
+static int rand2dist_find(i_color val, i_quantize *quant, i_dists *dists, int index) {
+ i_dists *cdists;
+ long cd, ld;
+ long maxld;
+ int i;
+ int bst_idx;
+
+ cdists = dists + index * quant->mc_count;
+ ld = 3 * 256 * 256;
+ maxld = 8 * ceucl_d(&val, quant->mc_colors+index);
+ for (i = 0; i < quant->mc_count && cdists[i].dist <= maxld; ++i) {
+ cd = ceucl_d(&val, quant->mc_colors+cdists[i].index);
+ if (cd < ld) {
+ bst_idx = cdists[i].index;
+ ld = cd;
+ }
+ }
+ return bst_idx;
+}
+
+#define CF_FIND bst_idx = rand2dist_find(val, quant, dists, bst_idx)
+
+#define CF_CLEANUP myfree(dists)
+
+
+#endif
+
+static void translate_addi(i_quantize *quant, i_img *img, i_palidx *out) {
+ int x, y, i, k, bst_idx;
+ i_color val;
+ int pixdev = quant->perturb;
+ CF_VARS;
+
+ CF_SETUP;
+
+ if (pixdev) {
+ k=0;
+ for(y=0;y<img->ysize;y++) for(x=0;x<img->xsize;x++) {
+ i_gpix(img,x,y,&val);
+ val.channel[0]=g_sat(val.channel[0]+(int)(pixdev*frandn()));
+ val.channel[1]=g_sat(val.channel[1]+(int)(pixdev*frandn()));
+ val.channel[2]=g_sat(val.channel[2]+(int)(pixdev*frandn()));
+ CF_FIND;
+ out[k++]=bst_idx;
+ }
+ } else {
+ k=0;
+ for(y=0;y<img->ysize;y++) for(x=0;x<img->xsize;x++) {
+ i_gpix(img,x,y,&val);
+ CF_FIND;
+ out[k++]=bst_idx;
+ }
+ }
+ CF_CLEANUP;
+}
+
+static int floyd_map[] =
+{
+ 0, 0, 7,
+ 3, 5, 1
+};
+
+static int jarvis_map[] =
+{
+ 0, 0, 0, 7, 5,
+ 3, 5, 7, 5, 3,
+ 1, 3, 5, 3, 1
+};
+
+static int stucki_map[] =
+{
+ 0, 0, 0, 8, 4,
+ 2, 4, 8, 4, 2,
+ 1, 2, 4, 2, 1
+};
+
+struct errdiff_map {
+ int *map;
+ int width, height, orig;
+};
+
+static struct errdiff_map maps[] =
+{
+ { floyd_map, 3, 2, 1 },
+ { jarvis_map, 5, 3, 2 },
+ { stucki_map, 5, 3, 2 },
+};
+
+typedef struct errdiff_tag {
+ int r, g, b;
+} errdiff_t;
+
+/* perform an error diffusion dither */
+static
+void
+translate_errdiff(i_quantize *quant, i_img *img, i_palidx *out) {
+ int *map;
+ int mapw, maph, mapo;
+ int i;
+ errdiff_t *err;
+ int errw;
+ int difftotal;
+ int x, y, dx, dy;
+ int minr, maxr, ming, maxg, minb, maxb, cr, cg, cb;
+ i_color find;
+ int bst_idx;
+ CF_VARS;
+
+ if ((quant->errdiff & ed_mask) == ed_custom) {
+ map = quant->ed_map;
+ mapw = quant->ed_width;
+ maph = quant->ed_height;
+ mapo = quant->ed_orig;
+ }
+ else {
+ int index = quant->errdiff & ed_mask;
+ if (index >= ed_custom) index = ed_floyd;
+ map = maps[index].map;
+ mapw = maps[index].width;
+ maph = maps[index].height;
+ mapo = maps[index].orig;
+ }
+
+ errw = img->xsize+mapw;
+ err = mymalloc(sizeof(*err) * maph * errw);
+ /*errp = err+mapo;*/
+ memset(err, 0, sizeof(*err) * maph * errw);
+
+ difftotal = 0;
+ for (i = 0; i < maph * mapw; ++i)
+ difftotal += map[i];
+ /*printf("map:\n");
+ for (dy = 0; dy < maph; ++dy) {
+ for (dx = 0; dx < mapw; ++dx) {
+ printf("%2d", map[dx+dy*mapw]);
+ }
+ putchar('\n');
+ }*/
+
+ CF_SETUP;
+
+ for (y = 0; y < img->ysize; ++y) {
+ for (x = 0; x < img->xsize; ++x) {
+ i_color val;
+ long ld, cd;
+ errdiff_t perr;
+ i_gpix(img, x, y, &val);
+ perr = err[x+mapo];
+ perr.r = perr.r < 0 ? -((-perr.r)/difftotal) : perr.r/difftotal;
+ perr.g = perr.g < 0 ? -((-perr.g)/difftotal) : perr.g/difftotal;
+ perr.b = perr.b < 0 ? -((-perr.b)/difftotal) : perr.b/difftotal;
+ /*printf("x %3d y %3d in(%3d, %3d, %3d) di(%4d,%4d,%4d)\n", x, y, val.channel[0], val.channel[1], val.channel[2], perr.r, perr.g, perr.b);*/
+ val.channel[0] = g_sat(val.channel[0]-perr.r);
+ val.channel[1] = g_sat(val.channel[1]-perr.g);
+ val.channel[2] = g_sat(val.channel[2]-perr.b);
+ CF_FIND;
+ /* save error */
+ perr.r = quant->mc_colors[bst_idx].channel[0] - val.channel[0];
+ perr.g = quant->mc_colors[bst_idx].channel[1] - val.channel[1];
+ perr.b = quant->mc_colors[bst_idx].channel[2] - val.channel[2];
+ /*printf(" out(%3d, %3d, %3d) er(%4d, %4d, %4d)\n", quant->mc_colors[bst_idx].channel[0], quant->mc_colors[bst_idx].channel[1], quant->mc_colors[bst_idx].channel[2], perr.r, perr.g, perr.b);*/
+ for (dx = 0; dx < mapw; ++dx) {
+ for (dy = 0; dy < maph; ++dy) {
+ err[x+dx+dy*errw].r += perr.r * map[dx+mapw*dy];
+ err[x+dx+dy*errw].g += perr.g * map[dx+mapw*dy];
+ err[x+dx+dy*errw].b += perr.b * map[dx+mapw*dy];
+ }
+ }
+ *out++ = bst_idx;
+ }
+ /* shift up the error matrix */
+ for (dy = 0; dy < maph-1; ++dy) {
+ memcpy(err+dy*errw, err+(dy+1)*errw, sizeof(*err)*errw);
+ }
+ memset(err+(maph-1)*errw, 0, sizeof(*err)*errw);
+ }
+ CF_CLEANUP;
+}
+/* Prescan finds the boxes in the image that have the highest number of colors
+ and that result is used as the initial value for the vectores */
+
+
+static void prescan(i_img **imgs,int count, int cnum, cvec *clr) {
+ int i,k,j,x,y;
+ i_color val;
+
+ pbox prebox[512];
+ for(i=0;i<512;i++) {
+ prebox[i].boxnum=i;
+ prebox[i].pixcnt=0;
+ prebox[i].cand=1;
+ }
+
+ /* process each image */
+ for (i = 0; i < count; ++i) {
+ i_img *im = imgs[i];
+ for(y=0;y<im->ysize;y++) for(x=0;x<im->xsize;x++) {
+ i_gpix(im,x,y,&val);
+ prebox[pixbox(&val)].pixcnt++;
+ }
+ }
+
+ for(i=0;i<512;i++) prebox[i].pdc=prebox[i].pixcnt;
+ qsort(prebox,512,sizeof(pbox),(cmpfunc)pboxcmp);
+
+ for(i=0;i<cnum;i++) {
+ /* printf("Color %d\n",i);
+ for(k=0;k<10;k++) { printf("box=%03d %04d %d %04d \n",prebox[k].boxnum,prebox[k].pixcnt,prebox[k].cand,prebox[k].pdc); }
+ printf("\n\n"); */
+ reorder(prebox);
+ }
+
+ /* for(k=0;k<cnum;k++) { printf("box=%03d %04d %d %04d \n",prebox[k].boxnum,prebox[k].pixcnt,prebox[k].cand,prebox[k].pdc); } */
+
+ k=0;
+ j=1;
+ i=0;
+ while(i<cnum) {
+ /* printf("prebox[%d].cand=%d\n",k,prebox[k].cand); */
+ if (clr[i].state) { i++; continue; } /* reserved go to next */
+ if (j>=prebox[k].cand) { k++; j=1; } else {
+ if (prebox[k].cand == 2) boxcenter(prebox[k].boxnum,&(clr[i]));
+ else boxrand(prebox[k].boxnum,&(clr[i]));
+ /* printf("(%d,%d) %d %d -> (%d,%d,%d)\n",k,j,prebox[k].boxnum,prebox[k].pixcnt,clr[i].r,clr[i].g,clr[i].b); */
+ j++;
+ i++;
+ }
+ }
+}
+
+
+static void reorder(pbox prescan[512]) {
+ int nidx;
+ pbox c;
+
+ nidx=0;
+ c=prescan[0];
+
+ c.cand++;
+ c.pdc=c.pixcnt/(c.cand*c.cand);
+ /* c.pdc=c.pixcnt/c.cand; */
+ while(c.pdc < prescan[nidx+1].pdc && nidx < 511) {
+ prescan[nidx]=prescan[nidx+1];
+ nidx++;
+ }
+ prescan[nidx]=c;
+}
+
+static int
+pboxcmp(const pbox *a,const pbox *b) {
+ if (a->pixcnt > b->pixcnt) return -1;
+ if (a->pixcnt < b->pixcnt) return 1;
+ return 0;
+}
+
+static void
+boxcenter(int box,cvec *cv) {
+ cv->r=15+((box&448)>>1);
+ cv->g=15+((box&56)<<2);
+ cv->b=15+((box&7)<<5);
+}
+
+static void
+bbox(int box,int *r0,int *r1,int *g0,int *g1,int *b0,int *b1) {
+ *r0=(box&448)>>1;
+ *r1=(*r0)|31;
+ *g0=(box&56)<<2;
+ *g1=(*g0)|31;
+ *b0=(box&7)<<5;
+ *b1=(*b0)|31;
+}
+
+static void
+boxrand(int box,cvec *cv) {
+ cv->r=6+(rand()%25)+((box&448)>>1);
+ cv->g=6+(rand()%25)+((box&56)<<2);
+ cv->b=6+(rand()%25)+((box&7)<<5);
+}
+
+static float
+frandn(void) {
+
+ float u1,u2,w;
+
+ w=1;
+
+ while (w >= 1 || w == 0) {
+ u1 = 2 * frand() - 1;
+ u2 = 2 * frand() - 1;
+ w = u1*u1 + u2*u2;
+ }
+
+ w = sqrt((-2*log(w))/w);
+ return u1*w;
+}
+
+/* Create hash index */
+static
+void
+cr_hashindex(cvec clr[256],int cnum,hashbox hb[512]) {
+
+ int bx,mind,cd,cumcnt,bst_idx,i;
+/* printf("indexing... \n");*/
+
+ cumcnt=0;
+ for(bx=0; bx<512; bx++) {
+ mind=196608;
+ for(i=0; i<cnum; i++) {
+ cd = maxdist(bx,&clr[i]);
+ if (cd < mind) { mind=cd; bst_idx=i; }
+ }
+
+ hb[bx].cnt=0;
+ for(i=0;i<cnum;i++) if (mindist(bx,&clr[i])<mind) hb[bx].vec[hb[bx].cnt++]=i;
+ /*printf("box %d -> approx -> %d\n",bx,hb[bx].cnt); */
+ /* statbox(bx,cnum,clr); */
+ cumcnt+=hb[bx].cnt;
+ }
+
+/* printf("Average search space: %d\n",cumcnt/512); */
+}
+
+static int
+maxdist(int boxnum,cvec *cv) {
+ int r0,r1,g0,g1,b0,b1;
+ int r,g,b,mr,mg,mb;
+
+ r=cv->r;
+ g=cv->g;
+ b=cv->b;
+
+ bbox(boxnum,&r0,&r1,&g0,&g1,&b0,&b1);
+
+ mr=max(abs(b-b0),abs(b-b1));
+ mg=max(abs(g-g0),abs(g-g1));
+ mb=max(abs(r-r0),abs(r-r1));
+
+ return PWR2(mr)+PWR2(mg)+PWR2(mb);
+}
+
+static int
+mindist(int boxnum,cvec *cv) {
+ int r0,r1,g0,g1,b0,b1;
+ int r,g,b,mr,mg,mb;
+
+ r=cv->r;
+ g=cv->g;
+ b=cv->b;
+
+ bbox(boxnum,&r0,&r1,&g0,&g1,&b0,&b1);
+
+ /* printf("box %d, (%d,%d,%d)-(%d,%d,%d) vec (%d,%d,%d) ",boxnum,r0,g0,b0,r1,g1,b1,r,g,b); */
+
+ if (r0<=r && r<=r1 && g0<=g && g<=g1 && b0<=b && b<=b1) return 0;
+
+ mr=min(abs(b-b0),abs(b-b1));
+ mg=min(abs(g-g0),abs(g-g1));
+ mb=min(abs(r-r0),abs(r-r1));
+
+ mr=PWR2(mr);
+ mg=PWR2(mg);
+ mb=PWR2(mb);
+
+ if (r0<=r && r<=r1 && g0<=g && g<=g1) return mb;
+ if (r0<=r && r<=r1 && b0<=b && b<=b1) return mg;
+ if (b0<=b && b<=b1 && g0<=g && g<=g1) return mr;
+
+ if (r0<=r && r<=r1) return mg+mb;
+ if (g0<=g && g<=g1) return mr+mb;
+ if (b0<=b && b<=b1) return mg+mr;
+
+ return mr+mg+mb;
+}
+
+static void transparent_threshold(i_quantize *, i_palidx *, i_img *, i_palidx);
+static void transparent_errdiff(i_quantize *, i_palidx *, i_img *, i_palidx);
+static void transparent_ordered(i_quantize *, i_palidx *, i_img *, i_palidx);
+
+void quant_transparent(i_quantize *quant, i_palidx *data, i_img *img,
+ i_palidx trans_index)
+{
+ switch (quant->transp) {
+ case tr_none:
+ break;
+
+ default:
+ quant->tr_threshold = 128;
+ /* fall through */
+ case tr_threshold:
+ transparent_threshold(quant, data, img, trans_index);
+ break;
+
+ case tr_errdiff:
+ transparent_errdiff(quant, data, img, trans_index);
+ break;
+
+ case tr_ordered:
+ transparent_ordered(quant, data, img, trans_index);
+ break;
+ }
+}
+
+static void
+transparent_threshold(i_quantize *quant, i_palidx *data, i_img *img,
+ i_palidx trans_index)
+{
+ int x, y;
+
+ for (y = 0; y < img->ysize; ++y) {
+ for (x = 0; x < img->xsize; ++x) {
+ i_color val;
+ i_gpix(img, x, y, &val);
+ if (val.rgba.a < quant->tr_threshold)
+ data[y*img->xsize+x] = trans_index;
+ }
+ }
+}
+
+static void
+transparent_errdiff(i_quantize *quant, i_palidx *data, i_img *img,
+ i_palidx trans_index)
+{
+ int *map;
+ int index;
+ int mapw, maph, mapo;
+ int errw, *err, *errp;
+ int difftotal, out, error;
+ int x, y, dx, dy, i;
+
+ /* no custom map for transparency (yet) */
+ index = quant->tr_errdiff & ed_mask;
+ if (index >= ed_custom) index = ed_floyd;
+ map = maps[index].map;
+ mapw = maps[index].width;
+ maph = maps[index].height;
+ mapo = maps[index].orig;
+
+ errw = img->xsize+mapw-1;
+ err = mymalloc(sizeof(*err) * maph * errw);
+ errp = err+mapo;
+ memset(err, 0, sizeof(*err) * maph * errw);
+
+ difftotal = 0;
+ for (i = 0; i < maph * mapw; ++i)
+ difftotal += map[i];
+ for (y = 0; y < img->ysize; ++y) {
+ for (x = 0; x < img->xsize; ++x) {
+ i_color val;
+ i_gpix(img, x, y, &val);
+ val.rgba.a = g_sat(val.rgba.a-errp[x]/difftotal);
+ if (val.rgba.a < 128) {
+ out = 0;
+ data[y*img->xsize+x] = trans_index;
+ }
+ else {
+ out = 255;
+ }
+ error = out - val.rgba.a;
+ for (dx = 0; dx < mapw; ++dx) {
+ for (dy = 0; dy < maph; ++dy) {
+ errp[x+dx-mapo+dy*errw] += error * map[dx+mapw*dy];
+ }
+ }
+ }
+ /* shift up the error matrix */
+ for (dy = 0; dy < maph-1; ++dy)
+ memcpy(err+dy*errw, err+(dy+1)*errw, sizeof(*err)*errw);
+ memset(err+(maph-1)*errw, 0, sizeof(*err)*errw);
+ }
+}
+
+/* builtin ordered dither maps */
+unsigned char orddith_maps[][64] =
+{
+ { /* random
+ this is purely random - it's pretty awful
+ */
+ 48, 72, 196, 252, 180, 92, 108, 52,
+ 228, 176, 64, 8, 236, 40, 20, 164,
+ 120, 128, 84, 116, 24, 28, 172, 220,
+ 68, 0, 188, 124, 184, 224, 192, 104,
+ 132, 100, 240, 200, 152, 160, 244, 44,
+ 96, 204, 144, 16, 140, 56, 232, 216,
+ 208, 4, 76, 212, 136, 248, 80, 168,
+ 156, 88, 32, 112, 148, 12, 36, 60,
+ },
+ {
+ /* dot8
+ perl spot.perl '($x-3.5)*($x-3.5)+($y-3.5)*($y-3.5)'
+ */
+ 240, 232, 200, 136, 140, 192, 228, 248,
+ 220, 148, 100, 76, 80, 104, 152, 212,
+ 180, 116, 56, 32, 36, 60, 120, 176,
+ 156, 64, 28, 0, 8, 44, 88, 160,
+ 128, 92, 24, 12, 4, 40, 68, 132,
+ 184, 96, 48, 20, 16, 52, 108, 188,
+ 216, 144, 112, 72, 84, 124, 164, 224,
+ 244, 236, 196, 168, 172, 204, 208, 252,
+ },
+ { /* dot4
+ perl spot.perl \
+ 'min(dist(1.5, 1.5),dist(5.5,1.5),dist(1.5,5.5),dist(5.5,5.5))'
+ */
+ 196, 72, 104, 220, 200, 80, 112, 224,
+ 76, 4, 24, 136, 84, 8, 32, 144,
+ 108, 28, 52, 168, 116, 36, 56, 176,
+ 216, 140, 172, 244, 228, 148, 180, 248,
+ 204, 92, 124, 236, 192, 68, 96, 208,
+ 88, 12, 44, 156, 64, 0, 16, 128,
+ 120, 40, 60, 188, 100, 20, 48, 160,
+ 232, 152, 184, 252, 212, 132, 164, 240,
+ },
+ { /* hline
+ perl spot.perl '$y-3'
+ */
+ 160, 164, 168, 172, 176, 180, 184, 188,
+ 128, 132, 136, 140, 144, 148, 152, 156,
+ 32, 36, 40, 44, 48, 52, 56, 60,
+ 0, 4, 8, 12, 16, 20, 24, 28,
+ 64, 68, 72, 76, 80, 84, 88, 92,
+ 96, 100, 104, 108, 112, 116, 120, 124,
+ 192, 196, 200, 204, 208, 212, 216, 220,
+ 224, 228, 232, 236, 240, 244, 248, 252,
+ },
+ { /* vline
+ perl spot.perl '$x-3'
+ */
+ 180, 100, 40, 12, 44, 104, 184, 232,
+ 204, 148, 60, 16, 64, 128, 208, 224,
+ 212, 144, 76, 8, 80, 132, 216, 244,
+ 160, 112, 68, 20, 84, 108, 172, 236,
+ 176, 96, 72, 28, 88, 152, 188, 228,
+ 200, 124, 92, 0, 32, 116, 164, 240,
+ 168, 120, 36, 24, 48, 136, 192, 248,
+ 196, 140, 52, 4, 56, 156, 220, 252,
+ },
+ { /* slashline
+ perl spot.perl '$y+$x-7'
+ */
+ 248, 232, 224, 192, 140, 92, 52, 28,
+ 240, 220, 196, 144, 108, 60, 12, 64,
+ 216, 180, 148, 116, 76, 20, 80, 128,
+ 204, 152, 104, 44, 16, 72, 100, 160,
+ 164, 96, 68, 24, 56, 112, 168, 176,
+ 124, 40, 8, 36, 88, 136, 184, 212,
+ 84, 4, 32, 120, 156, 188, 228, 236,
+ 0, 48, 132, 172, 200, 208, 244, 252,
+ },
+ { /* backline
+ perl spot.perl '$y-$x'
+ */
+ 0, 32, 116, 172, 184, 216, 236, 252,
+ 56, 8, 72, 132, 136, 200, 228, 240,
+ 100, 36, 12, 40, 92, 144, 204, 220,
+ 168, 120, 60, 16, 44, 96, 156, 176,
+ 180, 164, 112, 48, 28, 52, 128, 148,
+ 208, 192, 152, 88, 84, 20, 64, 104,
+ 232, 224, 196, 140, 108, 68, 24, 76,
+ 248, 244, 212, 188, 160, 124, 80, 4,
+ },
+};
+
+static void
+transparent_ordered(i_quantize *quant, i_palidx *data, i_img *img,
+ i_palidx trans_index)
+{
+ unsigned char *spot;
+ int x, y;
+ if (quant->tr_orddith == od_custom)
+ spot = quant->tr_custom;
+ else
+ spot = orddith_maps[quant->tr_orddith];
+ for (y = 0; y < img->ysize; ++y) {
+ for (x = 0; x < img->xsize; ++x) {
+ i_color val;
+ i_gpix(img, x, y, &val);
+ if (val.rgba.a < spot[(x&7)+(y&7)*8])
+ data[x+y*img->xsize] = trans_index;
+ }
+ }
+}
--- /dev/null
+#include "image.h"
+#include <stdio.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#endif
+#include <string.h>
+
+#define TRUE 1
+#define FALSE 0
+
+#define BSIZ 100*BUFSIZ
+
+/*
+
+ Image loader for raw files.
+
+ This is a barebones raw loader...
+
+ fd: filedescriptor
+ x: xsize
+ y: ysize
+ datachannels: the number of channels the file contains
+ storechannels: the bitmap of channels we will read
+ intrl: interlace flag,
+ 0 = sample interleaving
+ 1 = line interleaving
+ 2 = image interleaving
+
+*/
+
+void
+expandchannels(unsigned char *inbuffer,unsigned char *outbuffer,int chunks,int datachannels,int storechannels) {
+ int ch,i;
+ if (inbuffer==outbuffer) return; /* Check if data is already in expanded format */
+ for(ch=0;ch<chunks;ch++) for (i=0;i<storechannels;i++) outbuffer[ch*storechannels+i]=inbuffer[ch*datachannels+i];
+}
+
+i_img *
+i_readraw(int fd,int x,int y,int datachannels,int storechannels,int intrl) {
+ i_img* im;
+ int rc,k;
+
+ unsigned char *inbuffer;
+ unsigned char *ilbuffer;
+ unsigned char *exbuffer;
+
+ int inbuflen,ilbuflen,exbuflen;
+
+ mm_log((1,"readraw(fd %d,x %d,y %d,datachannels %d,storechannels %d,intrl %d)\n",fd,x,y,datachannels,storechannels,intrl));
+
+ im=i_img_empty_ch(NULL,x,y,storechannels);
+
+ inbuflen=im->xsize*datachannels;
+ ilbuflen=inbuflen;
+ exbuflen=im->xsize*storechannels;
+ inbuffer=(unsigned char*)mymalloc(inbuflen);
+ mm_log((1,"inbuflen: %d, ilbuflen: %d, exbuflen: %d.\n",inbuflen,ilbuflen,exbuflen));
+
+ if (intrl==0) ilbuffer=inbuffer; else ilbuffer=(unsigned char*)mymalloc(inbuflen);
+ if (datachannels==storechannels) exbuffer=ilbuffer; else exbuffer=(unsigned char*)mymalloc(exbuflen);
+
+ k=0;
+ while(k<im->ysize) {
+ rc=myread(fd,inbuffer,inbuflen);
+ if (rc!=inbuflen) { fprintf(stderr,"Premature end of file.\n"); exit(2); }
+ interleave(inbuffer,ilbuffer,im->xsize,datachannels);
+ expandchannels(ilbuffer,exbuffer,im->xsize,datachannels,storechannels);
+ memcpy(&(im->data[im->xsize*storechannels*k]),exbuffer,exbuflen);
+ k++;
+ }
+
+ myfree(inbuffer);
+ if (intrl!=0) myfree(ilbuffer);
+ if (datachannels!=storechannels) myfree(exbuffer);
+ return im;
+}
+
+
+
+undef_int
+i_writeraw(i_img* im,int fd) {
+ int rc;
+ mm_log((1,"writeraw(im 0x%x,fd %d)\n",im,fd));
+
+ if (im == NULL) { mm_log((1,"Image is empty\n")); return(0); }
+ rc=mywrite(fd,im->data,im->bytes);
+ if (rc!=im->bytes) { mm_log((1,"i_writeraw: Couldn't write to file\n")); return(0); }
+ return(1);
+}
+
+
+
+
+
+
+
+
+
--- /dev/null
+#include "regmach.h"
+
+/*#define DEBUG*/
+#ifdef DEBUG
+#define DBG(x) printf x
+#else
+#define DBG(x)
+#endif
+
+/* these functions currently assume RGB images - there seems to be some
+ support for other color spaces, but I can't tell how you find what
+ space an image is using.
+
+ HSV conversions from pages 401-403 "Procedural Elements for Computer
+ Graphics", 1985, ISBN 0-07-053534-5. The algorithm presents to produce
+ an HSV color calculates all components at once - I don't, so I've
+ simiplified the algorithm to avoid unnecessary calculation (any errors
+ (of which I had a few ;) are mine).
+*/
+
+/* returns the value (brightness) of color from 0 to 1 */
+double hsv_value(i_color color) {
+ return max(max(color.rgb.r, color.rgb.g), color.rgb.b) / 255.0;
+}
+
+/* returns the hue (color) of color from 0 to 360 */
+double hsv_hue(i_color color) {
+ int val;
+ int temp;
+ temp = min(min(color.rgb.r, color.rgb.g), color.rgb.b);
+ val = max(color.rgb.r, max(color.rgb.g, color.rgb.b));
+ if (val == 0 || val==temp) {
+ return 0;
+ }
+ else {
+ double cr = (val - color.rgb.r) / (double)(val - temp);
+ double cg = (val - color.rgb.g) / (double)(val - temp);
+ double cb = (val - color.rgb.b) / (double)(val - temp);
+ double hue;
+ if (color.rgb.r == val) {
+ hue = cb-cg;
+ }
+ else if (color.rgb.g == val) {
+ hue = 2.0 + cr-cb;
+ }
+ else { /* if (blue == val) */
+ hue = 4.0 + cg - cr;
+ }
+ hue *= 60.0; /* to degrees */
+ if (hue < 0)
+ hue += 360;
+
+ return hue;
+ }
+}
+
+/* return the saturation of color from 0 to 1 */
+double hsv_sat(i_color color) {
+ int value = max(max(color.rgb.r, color.rgb.g), color.rgb.b);
+ if (value == 0) {
+ return 0;
+ }
+ else {
+ int temp = min(max(color.rgb.r, color.rgb.g), color.rgb.b);
+ return (value - temp) / (double)value;
+ }
+}
+
+i_color make_hsv(double hue, double sat, double val) {
+ int i;
+ i_color c;
+ for( i=0; i< MAXCHANNELS; i++) c.channel[i]=0;
+ DBG(("hsv=%f %f %f\n", hue, sat, val));
+ if (sat <= 0) { /* handle -ve in case someone supplies a bad value */
+ /* should this be * 256? */
+ c.rgb.r = c.rgb.g = c.rgb.b = 255 * val;
+ }
+ else {
+ int i, m, n, k, v;
+ double f;
+
+ if (val < 0) val = 0;
+ if (val > 1) val = 1;
+ if (sat > 1) sat = 1;
+
+ /* I want to handle -360 <= hue < 720 so that the caller can
+ fiddle with colour
+ */
+ if (hue >= 360)
+ hue -= 360;
+ else if (hue < 0)
+ hue += 360;
+ hue /= 60;
+ i = hue; /* floor */
+ f = hue - i;
+ val *= 255;
+ m = val * (1.0 - sat);
+ n = val * (1.0 - sat * f);
+ k = val * (1.0 - sat * (1 - f));
+ v = val;
+ switch (i) {
+ case 0:
+ c.rgb.r = v; c.rgb.g = k; c.rgb.b = m;
+ break;
+ case 1:
+ c.rgb.r = n; c.rgb.g = v; c.rgb.b = m;
+ break;
+ case 2:
+ c.rgb.r = m; c.rgb.g = v; c.rgb.b = k;
+ break;
+ case 3:
+ c.rgb.r = m; c.rgb.g = n; c.rgb.b = v;
+ break;
+ case 4:
+ c.rgb.r = k; c.rgb.g = m; c.rgb.b = v;
+ break;
+ case 5:
+ c.rgb.r = v; c.rgb.g = m; c.rgb.b = n;
+ break;
+ }
+ }
+
+ return c;
+}
+
+i_color make_rgb(int r, int g, int b) {
+ i_color c;
+ if (r < 0)
+ r = 0;
+ if (r > 255)
+ r = 255;
+ c.rgb.r = r;
+ if (g < 0)
+ g = 0;
+ if (g > 255)
+ g = 255;
+ c.rgb.g = g;
+ if (b < 0)
+ b = 0;
+ if (b > 255)
+ b = 255;
+ c.rgb.b = b;
+
+ return c;
+}
+
+/* greatly simplifies the code */
+#define nout n_regs[codes->rout]
+#define na n_regs[codes->ra]
+#define nb n_regs[codes->rb]
+#define nc n_regs[codes->rc]
+#define nd n_regs[codes->rd]
+#define cout c_regs[codes->rout]
+#define ca c_regs[codes->ra]
+#define cb c_regs[codes->rb]
+#define cc c_regs[codes->rc]
+#define cd c_regs[codes->rd]
+
+/* this is a pretty poor epsilon used for loosening up equality comparisons
+ It isn't currently used for inequalities
+*/
+
+#define n_epsilon(x, y) (abs(x)+abs(y))*0.001
+static i_color bcol = {{ 0 }};
+
+i_color rm_run(struct rm_op codes[], size_t code_count,
+ double n_regs[], size_t n_regs_count,
+ i_color c_regs[], size_t c_regs_count,
+ i_img *images[], size_t image_count) {
+ double dx, dy;
+ struct rm_op *codes_base = codes;
+ size_t count_base = code_count;
+ DBG(("rm_run(%p, %d)\n", codes, code_count));
+ while (code_count) {
+ DBG((" rm_code %d\n", codes->code));
+ switch (codes->code) {
+ case rbc_add:
+ nout = na + nb;
+ break;
+
+ case rbc_subtract:
+ nout = na - nb;
+ break;
+
+ case rbc_mult:
+ nout = na * nb;
+ break;
+
+ case rbc_div:
+ if (abs(nb) < 1e-10)
+ nout = 1e10;
+ else
+ nout = na / nb;
+ break;
+
+ case rbc_mod:
+ if (abs(nb) > 1e-10) {
+ nout = fmod(na, nb);
+ }
+ else {
+ nout = 0; /* close enough ;) */
+ }
+ break;
+
+ case rbc_pow:
+ nout = pow(na, nb);
+ break;
+
+ case rbc_uminus:
+ nout = -na;
+
+ case rbc_multp:
+ cout = make_rgb(ca.rgb.r * nb, ca.rgb.g * nb, ca.rgb.b * nb);
+ break;
+
+ case rbc_addp:
+ cout = make_rgb(ca.rgb.r + cb.rgb.r, ca.rgb.g + cb.rgb.g,
+ ca.rgb.b + cb.rgb.b);
+ break;
+
+ case rbc_subtractp:
+ cout = make_rgb(ca.rgb.r - cb.rgb.r, ca.rgb.g - cb.rgb.g,
+ ca.rgb.b - cb.rgb.b);
+ break;
+
+ case rbc_sin:
+ nout = sin(na);
+ break;
+
+ case rbc_cos:
+ nout = cos(na);
+ break;
+
+ case rbc_atan2:
+ nout = atan2(na, nb);
+ break;
+
+ case rbc_sqrt:
+ nout = sqrt(na);
+ break;
+
+ case rbc_distance:
+ dx = na-nc;
+ dy = nb-nd;
+ nout = sqrt(dx*dx+dy*dy);
+ break;
+
+ case rbc_getp1:
+ i_gpix(images[0], na, nb, c_regs+codes->rout);
+ break;
+
+ case rbc_getp2:
+ i_gpix(images[1], na, nb, c_regs+codes->rout);
+ break;
+
+ case rbc_getp3:
+ i_gpix(images[2], na, nb, c_regs+codes->rout);
+ break;
+
+ case rbc_value:
+ nout = hsv_value(ca);
+ break;
+
+ case rbc_hue:
+ nout = hsv_hue(ca);
+ break;
+
+ case rbc_sat:
+ nout = hsv_sat(ca);
+ break;
+
+ case rbc_hsv:
+ cout = make_hsv(na, nb, nc);
+ break;
+
+ case rbc_red:
+ nout = ca.rgb.r;
+ break;
+
+ case rbc_green:
+ nout = ca.rgb.g;
+ break;
+
+ case rbc_blue:
+ nout = ca.rgb.b;
+ break;
+
+ case rbc_rgb:
+ cout = make_rgb(na, nb, nc);
+ break;
+
+ case rbc_int:
+ nout = (int)(na);
+ break;
+
+ case rbc_if:
+ nout = na ? nb : nc;
+ break;
+
+ case rbc_ifp:
+ cout = na ? cb : cc;
+ break;
+
+ case rbc_le:
+ nout = na <= nb + n_epsilon(na,nb);
+ break;
+
+ case rbc_lt:
+ nout = na < nb;
+ break;
+
+ case rbc_ge:
+ nout = na >= nb - n_epsilon(na,nb);
+ break;
+
+ case rbc_gt:
+ nout = na > nb;
+ break;
+
+ case rbc_eq:
+ nout = abs(na-nb) <= n_epsilon(na,nb);
+ break;
+
+ case rbc_ne:
+ nout = abs(na-nb) > n_epsilon(na,nb);
+ break;
+
+ case rbc_and:
+ nout = na && nb;
+ break;
+
+ case rbc_or:
+ nout = na || nb;
+ break;
+
+ case rbc_not:
+ nout = !na;
+ break;
+
+ case rbc_abs:
+ nout = abs(na);
+ break;
+
+ case rbc_ret:
+ return ca;
+ break;
+
+ case rbc_jump:
+ /* yes, order is important here */
+ code_count = count_base - codes->ra;
+ codes = codes_base + codes->ra;
+ continue;
+
+ case rbc_jumpz:
+ if (!na) {
+ /* yes, order is important here */
+ code_count = count_base - codes->rb;
+ codes = codes_base + codes->rb;
+ continue;
+ }
+ break;
+
+ case rbc_jumpnz:
+ if (na) {
+ /* yes, order is important here */
+ code_count = count_base - codes->rb;
+ codes = codes_base + codes->rb;
+ continue;
+ }
+ break;
+
+ case rbc_set:
+ nout = na;
+ break;
+
+ case rbc_setp:
+ cout = ca;
+ break;
+
+ case rbc_print:
+ printf("r%d is %g\n", codes->ra, na);
+ break;
+
+ default:
+ /*croak("bad opcode"); */
+ printf("bad op %d\n", codes->code);
+ return bcol;
+ }
+ --code_count;
+ ++codes;
+ }
+ return bcol;
+ /* croak("no return opcode"); */
+}
--- /dev/null
+#ifndef _REGMACH_H_
+#define _REGMACH_H_
+
+#include <stdio.h>
+#include <math.h>
+#include "image.h"
+
+enum rm_byte_codes {
+ rbc_add, /* ra + rb -> r*/
+ rbc_subtract, /* ra - rb -> r */
+ rbc_mult, /* ra * rb -> r */
+ rbc_div, /* ra / rb -> r */
+ rbc_mod, /* ra % rb -> r */
+ rbc_pow, /* ra ** rb -> r */
+ rbc_uminus, /* -ra -> r */
+ rbc_multp, /* pa ** rb -> p */
+ rbc_addp, /* pa + pb -> p */
+ rbc_subtractp, /* pa - pb -> p */
+ /* rbcParm, we just preload a register */
+ rbc_sin, /* sin(ra) -> r */
+ rbc_cos, /* cos(ra) -> r */
+ rbc_atan2, /* atan2(ra,rb) -> r */
+ rbc_sqrt, /* sqrt(ra) -> r */
+ rbc_distance, /* distance(rx, ry, rx, ry) -> r */
+ /* getp? codes must be in order */
+ rbc_getp1, /* getp1(ra, rb) -> p */
+ rbc_getp2, /* getp2(ra, rb) -> p */
+ rbc_getp3, /* getp3(ra, rb) -> p */
+ rbc_value, /* value(pa) -> r */
+ rbc_hue, /* hue(pa) -> r */
+ rbc_sat, /* sat(pa) -> r */
+ rbc_hsv, /* hsv(rh, rs, rv) -> p */
+ rbc_red, /* red(pa) -> r */
+ rbc_green, /* green(pa) -> r */
+ rbc_blue, /* blue(pa) -> r */
+ rbc_rgb, /* rgb(rr, rg, rb) -> p */
+ rbc_int, /* int(ra) -> r */
+ rbc_if, /* if(rc, rt, rf) -> r */
+ rbc_ifp, /* if(rc, pt, pf) -> p */
+ rbc_le, /* ra <= rb -> r */
+ rbc_lt, /* ra < rb -> r */
+ rbc_ge, /* ra >= rb -> r */
+ rbc_gt, /* ra > rb -> r */
+ rbc_eq, /* ra == rb -> r -- does approx equal */
+ rbc_ne, /* ra != rb -> r -- does approx equal */
+ rbc_and, /* ra && rb -> r */
+ rbc_or, /* ra || rb -> r */
+ rbc_not, /* !ra -> r */
+ rbc_abs, /* abs(ra) -> r */
+ rbc_ret, /* returns pa */
+ rbc_jump, /* jump to ja */
+ rbc_jumpz, /* jump if ra == 0 to jb */
+ rbc_jumpnz, /* jump if ra != 0 to jb */
+ rbc_set, /* ra -> r */
+ rbc_setp, /* pa -> p*/
+ rbc_print, /* prints ra */
+ rbc_op_count
+};
+
+/* rm_word was originally char, but even for some simpler expressions
+ I was getting close to running out of register numbers.
+ It should also simplify structure alignment issues. (I hope.)
+*/
+typedef int rm_word;
+#define RM_WORD_PACK "i"
+
+struct rm_op {
+ rm_word code; /* op code */
+ rm_word ra; /* first operand */
+ rm_word rb; /* possible second operand */
+ rm_word rc; /* possible third operand */
+ rm_word rd; /* possible fourth operand */
+ rm_word rout; /* output register */
+};
+
+i_color rm_run(struct rm_op codes[], size_t code_count,
+ double n_regs[], size_t n_regs_count,
+ i_color c_regs[], size_t c_regs_count,
+ i_img *images[], size_t image_count);
+
+/* op_run(fx, sizeof(fx), parms, 2)) */
+
+#endif /* _REGMACH_H_ */
--- /dev/null
+#!perl -w
+use strict;
+use Data::Dumper;
+my $in = shift or die "No input name";
+my $out = shift or die "No output name";
+open(IN, $in) or die "Cannot open input $in: $!";
+open(OUT, "> $out") or die "Cannot create $out: $!";
+print OUT <<'EOS';
+# AUTOMATICALLY GENERATED BY regops.perl
+package Imager::Regops;
+use strict;
+require Exporter;
+use vars qw(@ISA @EXPORT @EXPORT_OK %Attr $MaxOperands $PackCode);
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(%Attr $MaxOperands $PackCode);
+
+EOS
+my @ops;
+my %attr;
+my $opcode = 0;
+my $max_opr = 0;
+my $reg_pack;
+while (<IN>) {
+ if (/^\s*rbc_(\w+)/) {
+ my $op = $1;
+ push(@ops, uc "RBC_$op");
+ # each line has a comment with the registers used - find the maximum
+ # I could probably do this as one line, but let's not
+ my @parms = /\b([rp][a-z])\b/g;
+ $max_opr = @parms if @parms > $max_opr;
+ my $types = join("", map {substr($_,0,1)} @parms);
+ my ($result) = /->\s*([rp])/;
+ $attr{$op} = { parms=>scalar @parms,
+ types=>$types,
+ func=>/\w+\(/?1:0,
+ opcode=>$opcode,
+ result=>$result
+ };
+ print OUT "use constant RBC_\U$op\E => $opcode;\n";
+ ++$opcode;
+ }
+ if (/^\#define RM_WORD_PACK \"(.)\"/) {
+ $reg_pack = $1;
+ }
+}
+print OUT "\n\@EXPORT = qw(@ops);\n\n";
+print OUT Data::Dumper->Dump([\%attr],["*Attr"]);
+print OUT "\$MaxOperands = $max_opr;\n";
+print OUT qq/\$PackCode = "$reg_pack";\n/;
+print OUT <<'EOS';
+1;
+
+__END__
+
+=head1 NAME
+
+Imager::Regops - generated information about the register based VM
+
+=head1 SYNOPSIS
+
+ use Imager::Regops;
+ $Imager::Regops::Attr{$opname}->{opcode} # opcode for given operator
+ $Imager::Regops::Attr{$opname}->{parms} # number of parameters
+ $Imager::Regops::Attr{$opname}->{types} # types of parameters
+ $Imager::Regops::Attr{$opname}->{func} # operator is a function
+ $Imager::Regops::Attr{$opname}->{result} # r for numeric, p for pixel result
+ $Imager::Regops::MaxOperands; # maximum number of operands
+
+=head1 DESCRIPTION
+
+This module is generated automatically from regmach.h so we don't need to
+maintain the same information in at least one extra place.
+
+At least that's the idea.
+
+=head1 AUTHOR
+
+Tony Cook, tony@develop-help.com
+
+=head1 SEE ALSO
+
+perl(1), Imager(3), http://www.eecs.umich.edu/~addi/perl/Imager/
+
+=cut
+
+EOS
+close(OUT) or die "Cannot close $out: $!";
+close IN;
--- /dev/null
+#!perl -w
+# takes spot function and builds an ordered dither 8x8 matrix
+use strict;
+my $func = shift or die "Usage: $0 function [width height expandx expandy]\n";
+my $width = shift || 8;
+my $height = shift || 8;
+my @spot;
+use vars qw($x $y);
+for $y (0..$height-1) {
+ for $x (0..$width-1) {
+ my $res = eval $func;
+ $spot[$x+$y*$width] = $res * $res;
+ }
+}
+my @sp;
+@sp[sort { $spot[$a] <=> $spot[$b] } (0.. $#spot)] = 0..$#spot;
+
+while (@sp) {
+ print " ",map(sprintf("%4d,", 4*$_), splice(@sp, 0, $width)),"\n";
+}
+
+sub min {
+ my (@data) = @_;
+ my $min = shift @data;
+ for (@data) {
+ $min = $_ if $_ < $min;
+ }
+ $min;
+}
+
+sub dist {
+ my ($x1, $y1) = @_;
+ return ($x1-$x)*($x1-$x) + ($y1-$y)*($y1-$y);
+}
+
+sub theta {
+ my ($x1, $y1) = @_;
+
+ return atan2($y1-$y, $x1-$x);
+}
+
+sub dt {
+ my ($x1, $y1) = @_;
+ dist($x1, $y1)+theta($x1,$y1)/20;
+}
--- /dev/null
+#include "stackmach.h"
+
+double
+op_run(int codes[], size_t code_size, double parms[], size_t parm_size) {
+ double stack[100];
+ double *sp = stack;
+
+ while (code_size) {
+ switch (*codes++) {
+ case bcAdd:
+ sp[-2] += sp[-1];
+ --sp;
+ break;
+
+ case bcSubtract:
+ sp[-2] -= sp[-1];
+ --sp;
+ break;
+
+ case bcDiv:
+ sp[-2] /= sp[-1];
+ --sp;
+ break;
+
+ case bcMult:
+ sp[-2] *= sp[-1];
+ --sp;
+ break;
+
+ case bcParm:
+ *sp++ = parms[*codes++];
+ --code_size;
+ break;
+
+ case bcSin:
+ sp[-1] = sin(sp[-1]);
+ break;
+
+ case bcCos:
+ sp[-1] = cos(sp[-1]);
+ break;
+
+ }
+ --code_size;
+ }
+
+ return sp[-1];
+}
+
--- /dev/null
+#ifndef _STACKMACH_H_
+#define _STACKMACH_H_
+
+#include <stdio.h>
+#include <math.h>
+
+enum ByteCodes {
+ bcAdd,
+ bcSubtract,
+ bcMult,
+ bcDiv,
+ bcParm,
+ bcSin,
+ bcCos
+};
+
+double op_run(int codes[], size_t code_size, double parms[], size_t parm_size);
+
+/* op_run(fx, sizeof(fx), parms, 2)) */
+
+
+
+
+
+#endif /* _STACKMACH_H_ */
--- /dev/null
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+
+BEGIN { $| = 1; print "1..2\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager;
+#use Data::Dumper;
+$loaded = 1;
+print "ok 1\n";
+
+init_log("testout/t00basic.log",1);
+
+#list_formats();
+
+#%hsh=%Imager::formats;
+#print Dumper(\%hsh);
+
+i_has_format("jpeg") && print "# has jpeg\n";
+i_has_format("png") && print "# has png\n";
+
+print "ok 2\n";
+
+malloc_state();
\ No newline at end of file
--- /dev/null
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+use lib qw(blib/lib blib/arch);
+
+BEGIN { $| = 1; print "1..26\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager qw(:all);
+
+$loaded = 1;
+print "ok 1\n";
+
+
+
+init_log("testout/t10formats.log",1);
+
+i_has_format("jpeg") && print "# has jpeg\n";
+i_has_format("tiff") && print "# has tiff\n";
+i_has_format("png") && print "# has png\n";
+i_has_format("gif") && print "# has gif\n";
+
+$green=i_color_new(0,255,0,255);
+$blue=i_color_new(0,0,255,255);
+$red=i_color_new(255,0,0,255);
+
+$img=Imager::ImgRaw::new(150,150,3);
+$cmpimg=Imager::ImgRaw::new(150,150,3);
+
+i_box_filled($img,70,25,130,125,$green);
+i_box_filled($img,20,25,80,125,$blue);
+i_arc($img,75,75,30,0,361,$red);
+i_conv($img,[0.1, 0.2, 0.4, 0.2, 0.1]);
+
+if (!i_has_format("jpeg")) {
+ print "ok 2 # skip\n";
+ print "ok 3 # skip\n";
+} else {
+ open(FH,">testout/t10.jpg") || die "cannot open testout/t10.jpg for writing\n";
+ binmode(FH);
+ i_writejpeg($img,fileno(FH),30);
+ close(FH);
+
+ print "ok 2\n";
+
+ open(FH,"testout/t10.jpg") || die "cannot open testout/t10.jpg\n";
+ binmode(FH);
+
+ ($cmpimg,undef)=i_readjpeg(fileno(FH));
+ close(FH);
+
+ print "# jpeg average mean square pixel difference: ",sqrt(i_img_diff($img,$cmpimg))/150*150,"\n";
+ print "ok 3\n";
+}
+
+if (!i_has_format("png")) {
+ print "ok 4 # skip\n";
+ print "ok 5 # skip\n";
+} else {
+ open(FH,">testout/t10.png") || die "cannot open testout/t10.png for writing\n";
+ binmode(FH);
+ i_writepng($img,fileno(FH)) || die "Cannot write testout/t10.png\n";
+ close(FH);
+
+ print "ok 4\n";
+
+ open(FH,"testout/t10.png") || die "cannot open testout/t10.png\n";
+ binmode(FH);
+ $cmpimg=i_readpng(fileno(FH)) || die "Cannot read testout/t10.pmg\n";
+ close(FH);
+
+ print "# png average mean square pixel difference: ",sqrt(i_img_diff($img,$cmpimg))/150*150,"\n";
+ print "ok 5\n";
+}
+
+open(FH,">testout/t10.raw") || die "Cannot open testout/t10.raw for writing\n";
+binmode(FH);
+i_writeraw($img,fileno(FH)) || die "Cannot write testout/t10.raw\n";
+close(FH);
+
+print "ok 6\n";
+
+open(FH,"testout/t10.raw") || die "Cannot open testout/t15.raw\n";
+binmode(FH);
+$cmpimg=i_readraw(fileno(FH),150,150,3,3,0) || die "Cannot read testout/t10.raw\n";
+close(FH);
+
+print "# raw average mean square pixel difference: ",sqrt(i_img_diff($img,$cmpimg))/150*150,"\n";
+print "ok 7\n";
+
+open(FH,">testout/t10.ppm") || die "Cannot open testout/t10.ppm\n";
+binmode(FH);
+i_writeppm($img,fileno(FH)) || die "Cannot write testout/t10.ppm\n";
+close(FH);
+
+print "ok 8\n";
+
+open(FH,"testout/t10.ppm") || die "Cannot open testout/t10.ppm\n";
+binmode(FH);
+
+my $IO = Imager::io_new_fd(fileno(FH));
+$cmpimg=i_readpnm_wiol($IO,-1) || die "Cannot read testout/t10.ppm\n";
+close(FH);
+
+print "ok 9\n";
+
+if (!i_has_format("gif")) {
+ for (10..23) { print "ok $_ # skip\n"; }
+} else {
+ open(FH,">testout/t10.gif") || die "Cannot open testout/t10.gif\n";
+ binmode(FH);
+ i_writegifmc($img,fileno(FH),7) || die "Cannot write testout/t10.gif\n";
+ close(FH);
+
+ print "ok 10\n";
+
+ open(FH,"testout/t10.gif") || die "Cannot open testout/t10.gif\n";
+ binmode(FH);
+ $img=i_readgif(fileno(FH)) || die "Cannot read testout/t10.gif\n";
+ close(FH);
+
+ print "ok 11\n";
+
+ open(FH,"testout/t10.gif") || die "Cannot open testout/t10.gif\n";
+ binmode(FH);
+ ($img, $palette)=i_readgif(fileno(FH));
+ $img || die "Cannot read testout/t10.gif\n";
+ close(FH);
+
+ $palette=''; # just to skip a warning.
+
+ print "ok 12\n";
+
+ # check that reading interlaced/non-interlaced versions of
+ # the same GIF produce the same image
+ open(FH, "<testimg/scalei.gif") || die "Cannot open testimg/scalei.gif";
+ binmode FH;
+ ($imgi) = i_readgif(fileno(FH));
+ $imgi || die "Cannot read testimg/scalei.gif";
+ close FH;
+ print "ok 13\n";
+ open FH, "<testimg/scale.gif" or die "Cannot open testimg/scale.gif";
+ binmode FH;
+ ($imgni) = i_readgif(fileno(FH));
+ $imgni or die "Cannot read testimg/scale.gif";
+ close FH;
+ print "ok 14\n";
+
+ open FH, ">testout/t10i.ppm" or die "Cannot create testout/t10i.ppm";
+ binmode FH;
+ i_writeppm($imgi, fileno(FH)) or die "Cannot write testout/t10i.ppm";
+ close FH;
+
+ open FH, ">testout/t10ni.ppm" or die "Cannot create testout/t10ni.ppm";
+ binmode FH;
+ i_writeppm($imgni, fileno(FH)) or die "Cannot write testout/t10ni.ppm";
+ close FH;
+
+ # compare them
+ open FH, "<testout/t10i.ppm" or die "Cannot open testout/t10i.ppm";
+ $datai = do { local $/; <FH> };
+ close FH;
+ open FH, "<testout/t10ni.ppm" or die "Cannot open testout/t10ni.ppm";
+ $datani = do { local $/; <FH> };
+ close FH;
+ if ($datai eq $datani) {
+ print "ok 15\n";
+ }
+ else {
+ print "not ok 15\n";
+ }
+
+ # reading with a callback
+ # various sizes to make sure the buffering works
+ # requested size
+ open FH, "<testimg/scale.gif" or die "Cannot open testimg/scale.gif";
+ binmode FH;
+ $img = i_readgif_callback(sub { my $tmp; read(FH, $tmp, $_[0]) and $tmp });
+ close FH;
+ print $img ? "ok 16\n" : "not ok 16\n";
+
+ print test_readgif_cb(1) ? "ok 17\n" : "not ok 17\n";
+ print test_readgif_cb(512) ? "ok 18\n" : "not ok 18\n";
+ print test_readgif_cb(1024) ? "ok 19\n" : "not ok 19\n";
+
+ open FH, ">testout/t10_mc.gif" or die "Cannot open testout/t10_mc.gif";
+ binmode FH;
+ i_writegifmc($img, fileno(FH), 7) or die "Cannot write testout/t10_mc.gif";
+ close(FH);
+
+ # new writegif_gen
+ # test webmap, custom errdiff map
+ # (looks fairly awful)
+ open FH, ">testout/t10_gen.gif" or die $!;
+ binmode FH;
+ i_writegif_gen(fileno(FH), { make_colors=>'webmap',
+ translate=>'errdiff',
+ errdiff=>'custom',
+ errdiff_width=>2,
+ errdiff_height=>2,
+ errdiff_map=>[0, 1, 1, 0]}, $img)
+ or die "Cannot writegif_gen";
+ close FH;
+ print "ok 20\n";
+
+ print "# the following tests are fairly slow\n";
+
+ # test animation, mc_addi, error diffusion, ordered transparency
+ my @imgs;
+ my $sortagreen = i_color_new(0, 255, 0, 63);
+ for my $i (0..4) {
+ my $im = Imager::ImgRaw::new(200, 200, 4);
+ for my $j (0..$i-1) {
+ my $fill = i_color_new(0, 128, 0, 255 * ($i-$j)/$i);
+ i_box_filled($im, 0, $j*40, 199, $j*40+40, $fill);
+ }
+ i_box_filled($im, 0, $i*40, 199, 199, $blue);
+ push(@imgs, $im);
+ }
+ my @gif_delays = (50) x 5;
+ my @gif_disposal = (2) x 5;
+ open FH, ">testout/t10_anim.gif" or die $!;
+ binmode FH;
+ i_writegif_gen(fileno(FH), { make_colors=>'addi',
+ translate=>'closest',
+ gif_delays=>\@gif_delays,
+ gif_disposal=>\@gif_disposal,
+ transp=>'ordered',
+ tr_orddith=>'dot8'}, @imgs)
+ or die "Cannot write anim gif";
+ close FH;
+ print "ok 21\n";
+
+ unless (fork) {
+ # this can SIGSEGV with some versions of giflib
+ open FH, ">testout/t10_anim_cb.gif" or die $!;
+ i_writegif_callback(sub {
+ print FH $_[0]
+ },
+ -1, # max buffering
+ { make_colors=>'webmap',
+ translate=>'closest',
+ gif_delays=>\@gif_delays,
+ gif_disposal=>\@gif_disposal,
+ #transp=>'ordered',
+ tr_orddith=>'dot8'}, @imgs)
+ or die "Cannot write anim gif";
+ close FH;
+ print "ok 22\n";
+ exit;
+ }
+ if (wait > 0 && $?) {
+ print "not ok 22 # you probably need to patch giflib\n";
+ print <<EOS;
+#--- egif_lib.c 2000/12/11 07:33:12 1.1
+#+++ egif_lib.c 2000/12/11 07:33:48
+#@@ -167,6 +167,12 @@
+# _GifError = E_GIF_ERR_NOT_ENOUGH_MEM;
+# return NULL;
+# }
+#+ if ((Private->HashTable = _InitHashTable()) == NULL) {
+#+ free(GifFile);
+#+ free(Private);
+#+ _GifError = E_GIF_ERR_NOT_ENOUGH_MEM;
+#+ return NULL;
+#+ }
+#
+# GifFile->Private = (VoidPtr) Private;
+# Private->FileHandle = 0;
+EOS
+ }
+ @imgs = ();
+ for $g (0..3) {
+ my $im = Imager::ImgRaw::new(200, 200, 3);
+ for my $x (0 .. 39) {
+ for my $y (0 .. 39) {
+ my $c = i_color_new($x * 6, $y * 6, 32*$g+$x+$y, 255);
+ i_box_filled($im, $x*5, $y*5, $x*5+4, $y*5+4, $c);
+ }
+ }
+ push(@imgs, $im);
+ }
+ # test giflib with multiple palettes
+ # (it was meant to test the NS loop extension too, but that's broken)
+ # this looks better with make_colors=>'addi', translate=>'errdiff'
+ # this test aims to overload the palette for each image, so the
+ # output looks moderately horrible
+ open FH, ">testout/t10_mult_pall.gif" or die "Cannot create file: $!";
+ binmode FH;
+ i_writegif_gen(fileno(FH), { make_colors=>'webmap',
+ translate=>'giflib',
+ gif_delays=>[ 50, 50, 50, 50 ],
+ #gif_loop_count => 50,
+ gif_each_palette => 1,
+ }, @imgs);
+ close FH;
+ print "ok 23\n";
+
+}
+
+
+
+if (!i_has_format("tiff")) {
+ print "ok 24 # skip\n";
+ print "ok 25 # skip\n";
+ print "ok 26 # skip\n";
+} else {
+ open(FH,">testout/t10.tiff") || die "cannot open testout/t10.tiff for writing\n";
+ binmode(FH);
+ my $IO = Imager::io_new_fd(fileno(FH));
+ i_writetiff_wiol($img, $IO);
+ close(FH);
+
+ print "ok 24\n";
+
+ open(FH,"testout/t10.tiff") or die "cannot open testout/t10.tiff\n";
+ binmode(FH);
+ $IO = Imager::io_new_fd(fileno(FH));
+ $cmpimg = i_readtiff_wiol($IO, -1);
+
+ close(FH);
+
+ print "# tiff average mean square pixel difference: ",sqrt(i_img_diff($img,$cmpimg))/150*150,"\n";
+ print "ok 25\n";
+
+ $IO = Imager::io_new_bufchain();
+
+ Imager::i_writetiff_wiol($img, $IO) or die "Cannot write to bufferchain\n";
+ my $tiffdata = Imager::io_slurp($IO);
+
+ open(FH,"testout/t10.tiff");
+ my $odata;
+ { local $/;
+ $odata = <FH>;
+ }
+
+ if ($odata eq $tiffdata) {
+ print "ok 26\n";
+ } else {
+ print "not ok 26\n";
+ }
+
+
+
+}
+
+
+
+sub test_readgif_cb {
+ my ($size) = @_;
+
+ open FH, "<testimg/scale.gif" or die "Cannot open testimg/scale.gif";
+ binmode FH;
+ my $img = i_readgif_callback(sub { my $tmp; read(FH, $tmp, $size) and $tmp });
+ close FH;
+ return $img;
+}
+
+# malloc_state();
--- /dev/null
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+
+BEGIN { $| = 1; print "1..4\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager;
+$loaded = 1;
+print "ok 1\n";
+
+init_log("testout/t15color.log",1);
+
+my $c1 = Imager::Color->new(100, 150, 200, 250);
+print test_col($c1, 100, 150, 200, 250) ? "ok 2\n" : "not ok 2\n";
+my $c2 = Imager::Color->new(100, 150, 200);
+print test_col($c2, 100, 150, 200, 255) ? "ok 3\n" : "not ok 3\n";
+my $c3 = Imager::Color->new("#6496C8");
+print test_col($c3, 100, 150, 200, 255) ? "ok 4\n" : "not ok 4\n";
+
+sub test_col {
+ my ($c, $r, $g, $b, $a) = @_;
+ my ($cr, $cg, $cb, $ca) = $c->rgba;
+ return $r == $cr && $g == $cg && $b == $cb && $a == $ca;
+}
+
+
--- /dev/null
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+
+BEGIN { $| = 1; print "1..4\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager qw(:all);
+use Imager::Color;
+
+$loaded = 1;
+print "ok 1\n";
+
+#$Imager::DEBUG=1;
+
+init_log("testout/t30t1font.log",1);
+
+if (!(i_has_format("t1")) ) {
+ print "ok 2 # skip\n";
+ print "ok 3 # skip\n";
+ print "ok 4 # skip\n";
+} else {
+
+ print "# has t1\n";
+
+ $fontname_pfb=$ENV{'T1FONTTESTPFB'}||'./fontfiles/dcr10.pfb';
+ $fontname_afm=$ENV{'T1FONTTESTAFM'}||'./fontfiles/dcr10.afm';
+
+ if (! -f $fontname_pfb) {
+ print "# cannot find fontfile for truetype test $fontname_pfb\n";
+ skip();
+ }
+
+ if (! -f $fontname_afm) {
+ print "# cannot find fontfile for truetype test $fontname_afm\n";
+ skip();
+ }
+
+ i_init_fonts();
+ i_t1_set_aa(1);
+
+ $fnum=Imager::i_t1_new($fontname_pfb,$fontname_afm); # this will load the pfb font
+ if ($fnum<0) { die "Couldn't load font $fontname_pfb"; }
+
+ $bgcolor=Imager::Color->new(255,0,0,0);
+ $overlay=Imager::ImgRaw::new(200,70,3);
+
+ i_t1_cp($overlay,5,50,1,$fnum,50.0,'XMCLH',5,1);
+ i_draw($overlay,0,50,100,50,$bgcolor);
+
+ @bbox=i_t1_bbox(0,50.0,'XMCLH',5);
+ print "bbox: ($bbox[0], $bbox[1]) - ($bbox[2], $bbox[3])\n";
+
+ open(FH,">testout/t30t1font.ppm") || die "cannot open testout/t35t1font.ppm\n";
+ binmode(FH); # for os2
+ i_writeppm($overlay,fileno(FH));
+ close(FH);
+
+ print "ok 2\n";
+
+ $bgcolor=Imager::Color::set($bgcolor,200,200,200,0);
+ $backgr=Imager::ImgRaw::new(280,150,3);
+
+ i_t1_set_aa(2);
+ i_t1_text($backgr,10,100,$bgcolor,$fnum,150.0,'test',4,1);
+
+ open(FH,">testout/t30t1font2.ppm") || die "cannot open testout/t35t1font.ppm\n";
+ binmode(FH);
+ i_writeppm($backgr,fileno(FH));
+ close(FH);
+
+ print "ok 3\n";
+
+ $rc=i_t1_destroy($fnum);
+ if ($fnum <0) { die "i_t1_destroy failed: rc=$rc\n"; }
+
+ print "ok 4\n";
+
+ print "# debug: ",join(" x ",i_t1_bbox(0,50,"eses",4) ),"\n";
+ print "# debug: ",join(" x ",i_t1_bbox(0,50,"llll",4) ),"\n";
+}
+
+#malloc_state();
--- /dev/null
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+
+BEGIN { $| = 1; print "1..3\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager qw(:all);
+$loaded = 1;
+print "ok 1\n";
+
+init_log("testout/t35ttfont.log",1);
+
+sub skip {
+ print "ok 2 # skip\n";
+ print "ok 3 # skip\n";
+ malloc_state();
+ exit(0);
+}
+
+if (!(i_has_format("tt")) ) { skip(); }
+print "# has tt\n";
+
+$fontname=$ENV{'TTFONTTEST'}||'./fontfiles/dodge.ttf';
+
+if (! -f $fontname) {
+ print "# cannot find fontfile for truetype test $fontname\n";
+ skip();
+}
+
+i_init_fonts();
+# i_tt_set_aa(1);
+
+$bgcolor=i_color_new(255,0,0,0);
+$overlay=Imager::ImgRaw::new(200,70,3);
+
+$ttraw=Imager::i_tt_new($fontname);
+
+#use Data::Dumper;
+#warn Dumper($ttraw);
+
+@bbox=i_tt_bbox($ttraw,50.0,'XMCLH',5);
+print "#bbox: ($bbox[0], $bbox[1]) - ($bbox[2], $bbox[3])\n";
+
+i_tt_cp($ttraw,$overlay,5,50,1,50.0,'XMCLH',5,1);
+i_draw($overlay,0,50,100,50,$bgcolor);
+
+open(FH,">testout/t35ttfont.ppm") || die "cannot open testout/t35ttfont.ppm\n";
+binmode(FH);
+i_writeppm($overlay,fileno(FH));
+close(FH);
+
+print "ok 2\n";
+
+$bgcolor=i_color_set($bgcolor,200,200,200,0);
+$backgr=Imager::ImgRaw::new(500,300,3);
+
+# i_tt_set_aa(2);
+
+i_tt_text($ttraw,$backgr,100,100,$bgcolor,50.0,'test',4,1);
+
+open(FH,">testout/t35ttfont2.ppm") || die "cannot open testout/t35ttfont.ppm\n";
+binmode(FH);
+i_writeppm($backgr,fileno(FH));
+close(FH);
+
+print "ok 3\n";
+
--- /dev/null
+#!/usr/bin/perl -w
+use strict;
+
+#use lib qw(blib/lib blib/arch);
+
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+
+BEGIN { $| = 1; print "1..7\n"; }
+END {print "not ok 1\n" unless $::loaded;}
+use Imager;
+$::loaded=1;
+print "ok 1\n";
+
+init_log("testout/t36oofont.log", 1);
+
+my $fontname_tt=$ENV{'TTFONTTEST'}||'./fontfiles/dodge.ttf';
+my $fontname_pfb=$ENV{'T1FONTTESTPFB'}||'./fontfiles/dcr10.pfb';
+
+
+my $green=Imager::Color->new(92,205,92,128);
+die $Imager::ERRSTR unless $green;
+my $red=Imager::Color->new(205, 92, 92, 255);
+die $Imager::ERRSTR unless $red;
+
+
+
+if (i_has_format("t1") and -f $fontname_pfb) {
+
+ my $img=Imager->new(xsize=>300, ysize=>100) or die "$Imager::ERRSTR\n";
+
+ my $font=Imager::Font->new(file=>$fontname_pfb,size=>25)
+ or die $img->{ERRSTR};
+
+ print "ok 2\n";
+
+ $img->string(font=>$font, text=>"XMCLH", 'x'=>100, 'y'=>100)
+ or die $img->{ERRSTR};
+
+ print "ok 3\n";
+
+ $img->line(x1=>0, x2=>300, y1=>50, y2=>50, color=>$green);
+
+ my $text="LLySja";
+ my @bbox=$font->bounding_box(string=>$text, 'x'=>0, 'y'=>50);
+
+ print @bbox ? '' : 'not ', "ok 4\n";
+
+ $img->box(box=>\@bbox, color=>$green);
+
+ $img->write(file=>"testout/t36oofont1.ppm", type=>'pnm')
+ or die "cannot write to testout/t36oofont1.ppm: $img->{ERRSTR}\n";
+
+} else {
+ print "ok 2 # skip\n";
+ print "ok 3 # skip\n";
+ print "ok 4 # skip\n";
+}
+
+if (i_has_format("tt") and -f $fontname_tt) {
+
+ my $img=Imager->new(xsize=>300, ysize=>100) or die "$Imager::ERRSTR\n";
+
+ my $font=Imager::Font->new(file=>$fontname_tt,size=>25)
+ or die $img->{ERRSTR};
+
+ print "ok 5\n";
+
+ $img->string(font=>$font, text=>"XMCLH", 'x'=>100, 'y'=>100)
+ or die $img->{ERRSTR};
+
+ print "ok 6\n";
+
+ $img->line(x1=>0, x2=>300, y1=>50, y2=>50, color=>$green);
+
+ my $text="LLySja";
+ my @bbox=$font->bounding_box(string=>$text, 'x'=>0, 'y'=>50);
+
+ print @bbox ? '' : 'not ', "ok 7\n";
+
+ $img->box(box=>\@bbox, color=>$green);
+
+ $img->write(file=>"testout/t36oofont2.ppm", type=>'pnm')
+ or die "cannot write to testout/t36oofont2.ppm: $img->{ERRSTR}\n";
+
+} else {
+ print "ok 5 # skip\n";
+ print "ok 6 # skip\n";
+ print "ok 7 # skip\n";
+}
+
--- /dev/null
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+
+BEGIN { $| = 1; print "1..6\n"; }
+END {print "not ok 1\n" unless $loaded;}
+
+use Imager qw(:all);
+
+$loaded = 1;
+
+Imager::init('log'=>'testout/t40scale.log');
+print "ok 1\n";
+
+$img=Imager->new();
+
+$img->open(file=>'testimg/scale.ppm',type=>'pnm') or print "failed: ",$scaleimg->{ERRSTR},"\n";
+print "ok 2\n";
+
+$scaleimg=$img->scale(scalefactor=>0.25) or print "failed: ",$scaleimg->{ERRSTR},"\n";
+print "ok 3\n";
+
+$scaleimg->write(file=>'testout/t40scale1.ppm',type=>'pnm') or print "failed: ",$scaleimg->{ERRSTR},"\n";
+print "ok 4\n";
+
+$scaleimg=$img->scale(scalefactor=>0.25,qtype=>'preview') or print "failed: ",$scaleimg->{ERRSTR},"\n";
+print "ok 5\n";
+
+$scaleimg->write(file=>'testout/t40scale2.ppm',type=>'pnm') or print "failed: ",$scaleimg->{ERRSTR},"\n";
+print "ok 6\n";
+
+
--- /dev/null
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+
+BEGIN { $| = 1; print "1..2\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager;
+#use Data::Dumper;
+$loaded = 1;
+
+print "ok 1\n";
+
+init_log("testout/t00basicoo.log",1);
+
+#list_formats();
+
+%hsh=%Imager::formats;
+
+print "# avaliable formats:\n";
+for(keys %hsh) { print "# $_\n"; }
+
+#print Dumper(\%hsh);
+
+$img = Imager->new();
+
+@all=qw(tiff gif jpg png ppm raw);
+
+for(@all) {
+ if (!$hsh{$_}) { next; }
+ print "#opening Format: $_\n";
+ if ($_ eq "raw") {
+ $img->read(file=>"testout/t10.$_",type=>'raw', xsize=>150,ysize=>150) or die "failed: ",$img->{ERRSTR},"\n";
+ } else {
+ $img->read(file=>"testout/t10.$_") or die "failed: ",$img->{ERRSTR},"\n";
+ }
+}
+
+$img2=$img->crop(width=>50,height=>50);
+$img2->write(file=>'testout/t50.ppm',type=>'pnm');
+
+undef($img);
+
+malloc_state();
+
+
+print "ok 2\n";
--- /dev/null
+BEGIN { $| = 1; print "1..5\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager;
+
+$loaded = 1;
+
+#$Imager::DEBUG=1;
+
+Imager::init('log'=>'testout/t55trans.log');
+
+$img=Imager->new() || die "unable to create image object\n";
+
+print "ok 1\n";
+
+$img->open(file=>'testimg/scale.ppm',type=>'pnm');
+
+sub skip {
+ print "ok 2 # skip $_[0]\n";
+ print "ok 3 # skip $_[0]\n";
+ print "ok 4 # skip $_[0]\n";
+ print "ok 5 # skip $_[0]\n";
+ exit(0);
+}
+
+
+$nimg=$img->transform(xexpr=>'x',yexpr=>'y+10*sin((x+y)/10)') || skip ( "\# warning ".$img->{'ERRSTR'} );
+
+# xopcodes=>[qw( x y Add)],yopcodes=>[qw( x y Sub)],parm=>[]
+
+print "ok 2\n";
+$nimg->write(type=>'pnm',file=>'testout/t55.ppm') || die "error in write()\n";
+
+print "ok 3\n";
+
+# the original test didn't produce many parameters - this one
+# produces more parameters, which revealed a memory allocation bug
+# (sizeof(double) vs sizeof(int))
+sub skip2 {
+ print "ok 4 # skip $_[0]\n";
+ print "ok 5 # skip $_[0]\n";
+ exit(0);
+}
+$nimg=$img->transform(xexpr=>'x+0.1*y+5*sin(y/10.0+1.57)',
+ yexpr=>'y+10*sin((x+y-0.785)/10)')
+ || skip2 ( "\# warning ".$img->{'ERRSTR'} );
+
+print "ok 4\n";
+$nimg->write(type=>'pnm',file=>'testout/t55b.ppm')
+ || die "error in write()\n";
+
+print "ok 5\n";
+
+
--- /dev/null
+BEGIN { $| = 1; print "1..6\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager::Expr;
+
+$loaded = 1;
+print "ok 1\n";
+
+#$Imager::DEBUG=1;
+
+my $expr = Imager::Expr->new({rpnexpr=>'x two * y one + getp1', variables=>[ qw(x y) ], constants=>{one=>1, two=>2}});
+if ($expr) {
+ print "ok 2\n";
+
+ # perform some basic validation on the code
+ my $code = $expr->dumpcode();
+ my @code = split /\n/, $code;
+ print $code[-1] =~ /:\s+ret/ ? "ok 3\n" : "not ok 3\n";
+ print grep(/:\s+mult.*x/, @code) ? "ok 4\n" : "not ok 4\n";
+ print grep(/:\s+add.*y/, @code) ? "ok 5\n" : "not ok 5\n";
+ print grep(/:\s+getp1/, @code) ? "ok 6\n" : "not ok 6\n";
+}
+else {
+ print "not ok 2 ",Imager::Expr::error(),"\n";
+ print "not ok 3 # skip\n";
+ print "not ok 4 # skip\n";
+ print "not ok 5 # skip\n";
+ print "not ok 6 # skip\n";
+}
--- /dev/null
+BEGIN { $| = 1; print "1..7\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager::Expr;
+
+$loaded = 1;
+print "ok 1\n";
+
+# only test this if Parse::RecDescent was loaded successfully
+eval "use Parse::RecDescent";
+if (!$@) {
+ my $opts = {expr=>'z=0.8;return hsv(x/w*360,y/h,z)', variables=>[ qw(x y) ], constants=>{h=>100,w=>100}};
+ my $expr = Imager::Expr->new($opts);
+ if ($expr) {
+ print "ok 2\n";
+ my $code = $expr->dumpcode();
+ my @code = split /\n/,$code;
+ #print $code;
+ print $code[-1] =~ /:\s+ret/ ? "ok 3\n" : "not ok 3\n";
+ print grep(/:\s+mult.*360/, @code) ? "ok 4\n" : "not ok 4\n";
+ # strength reduction converts these to mults
+ #print grep(/:\s+div.*x/, @code) ? "ok 5\n" : "not ok 5\n";
+ #print grep(/:\s+div.*y/, @code) ? "ok 6\n" : "not ok 6\n";
+ print grep(/:\s+mult.*x/, @code) ? "ok 5\n" : "not ok 5\n";
+ print grep(/:\s+mult.*y/, @code) ? "ok 6\n" : "not ok 6\n";
+ print grep(/:\s+hsv.*0\.8/, @code) ? "ok 7\n" : "not ok 7\n";
+ }
+ else {
+ print "not ok 2 # ",Imager::Expr::error(),"\n";
+ print "not ok 3 # skipped\n";
+ print "not ok 4 # skipped\n";
+ print "not ok 5 # skipped\n";
+ print "not ok 6 # skipped\n";
+ print "not ok 7 # skipped\n";
+ }
+}
+else {
+ print "ok 2 # skipped - no Parse::RecDescent\n";
+ print "ok 3 # skipped - no Parse::RecDescent\n";
+ print "ok 4 # skipped - no Parse::RecDescent\n";
+ print "ok 5 # skipped - no Parse::RecDescent\n";
+ print "ok 6 # skipped - no Parse::RecDescent\n";
+ print "ok 7 # skipped - no Parse::RecDescent\n";
+}
--- /dev/null
+BEGIN { $| = 1; print "1..6\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager;
+
+$loaded = 1;
+print "ok 1\n";
+
+#$Imager::DEBUG=1;
+
+Imager::init('log'=>'testout/t56trans2.log');
+
+my $im1 = Imager->new();
+$im1->open(file=>'testimg/penguin-base.ppm', type=>'pnm')
+ || die "Cannot read image";
+my $im2 = Imager->new();
+$im2->open(file=>'testimg/scale.ppm',type=>'pnm')
+ || die "Cannot read testimg/scale.ppm";
+
+# error handling
+my $opts = { rpnexpr=>'x x 10 / sin 10 * y + get1' };
+my $im3 = Imager::transform2($opts);
+print $im3 ? "not ok 2\n" : "ok 2\n";
+print defined($Imager::ERRSTR) ? "ok 3\n" : "not ok 3\n";
+
+# image synthesis
+my $im4 = Imager::transform2({
+ width=>300, height=>300,
+ rpnexpr=>'x y cx cy distance !d y cy - x cx - atan2 !a @d 10 / @a + 3.1416 2 * % !a2 @a2 cy * 3.1416 / 1 @a2 sin 1 + 2 / hsv'});
+print $im4 ? "ok 4\n" : "not ok 4\n";
+
+if ($im4) {
+ $im4->write(type=>'pnm', file=>'testout/t56a.ppm')
+ || die "Cannot write testout/t56a.ppm";
+}
+
+# image distortion
+my $im5 = Imager::transform2({
+ rpnexpr=>'x x 10 / sin 10 * y + getp1'
+}, $im1);
+print $im5 ? "ok 5\n" : "not ok 5\n";
+if ($im5) {
+ $im5->write(type=>'pnm', file=>'testout/t56b.ppm')
+ || die "Cannot write testout/t56b.ppm";
+}
+
+# image combination
+$opts = {
+rpnexpr=>'x h / !rat x w2 % y h2 % getp2 !pat x y getp1 @rat * @pat 1 @rat - * +'
+};
+my $im6 = Imager::transform2($opts,$im1,$im2);
+print $im6 ? "ok 6\n" : "not ok 6 # $opts->{error}\n";
+if ($im6) {
+ $im6->write(type=>'pnm', file=>'testout/t56c.ppm')
+ || die "Cannot write testout/t56c.ppm";
+}
--- /dev/null
+BEGIN { $| = 1; print "1..6\n"; }
+END { print "not ok 1\n" unless $loaded;}
+use Imager::Expr::Assem;
+
+$loaded = 1;
+print "ok 1\n";
+
+my $expr = Imager::Expr->new
+ ({assem=><<EOS,
+ var count:n ; var p:p
+ count = 0
+ p = getp1 x y
+loop:
+# this is just a delay
+ count = add count 1
+ var temp:n
+ temp = lt count totalcount
+ jumpnz temp loop
+ ret p
+EOS
+ variables=>[qw(x y)],
+ constants=>{totalcount=>5}
+ });
+if ($expr) {
+ print "ok 2\n";
+ my $code = $expr->dumpcode();
+ my @code = split /\n/, $code;
+ print $code[-1] =~ /:\s+ret/ ? "ok\n" : "not ok # missing ret\n";
+ print $code[0] =~ /:\s+set/ ? "ok\n" : "not ok # missing set\n";
+ print $code[1] =~ /:\s+getp1/ ? "ok\n" : "not ok # missing getp1\n";
+ print $code[3] =~ /:\s+lt/ ? "ok\n" : "not ok # missing lt\n";
+}
+else {
+ print "not ok 2 #",Imager::Expr->error(),"\n";
+ for (3..6) {
+ print "not ok $_\n";
+ }
+}
--- /dev/null
+BEGIN { $| = 1; print "1..3\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager qw(:default);
+use Config;
+$loaded = 1;
+
+#$Imager::DEBUG=1;
+
+Imager::init('log'=>'testout/t60dyntest.log');
+
+$img=Imager->new() || die "unable to create image object\n";
+
+$img->open(file=>'testout/t10.ppm',type=>'pnm') || die "failed: ",$img->{ERRSTR},"\n";
+
+$plug='dynfilt/dyntest.'.$Config{'so'};
+load_plugin($plug) || die "unable to load plugin:\n$Imager::ERRSTR\n";
+
+print "ok\nok\n"; # exit;
+
+%hsh=(a=>35,b=>200,type=>lin_stretch);
+$img->filter(%hsh);
+
+$img->write(type=>'pnm',file=>'testout/t60.ppm') || die "error in write()\n";
+
+unload_plugin($plug) || die "unable to unload plugin: $Imager::ERRSTR\n";
+
+print "ok\n";
+
+
--- /dev/null
+BEGIN { $| = 1; print "1..3\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager;
+
+$loaded = 1;
+
+#$Imager::DEBUG=1;
+
+Imager::init('log'=>'testout/t65crop.log');
+
+$img=Imager->new() || die "unable to create image object\n";
+
+print "ok 1\n";
+
+$img->open(file=>'testimg/scale.ppm',type=>'pnm');
+
+sub skip {
+ print $_[0];
+ print "ok 2 # skip\n";
+ print "ok 3 # skip\n";
+ exit(0);
+}
+
+
+$nimg=$img->crop(top=>10, left=>10, bottom=>25, right=>25)
+ or skip ( "\# warning ".$img->{'ERRSTR'}."\n" );
+
+# xopcodes=>[qw( x y Add)],yopcodes=>[qw( x y Sub)],parm=>[]
+
+print "ok 2\n";
+$nimg->write(type=>'pnm',file=>'testout/t65.ppm') || die "error in write()\n";
+
+print "ok 3\n";
--- /dev/null
+BEGIN { $| = 1; print "1..4\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager;
+
+$loaded = 1;
+
+#$Imager::DEBUG=1;
+
+Imager::init('log'=>'testout/t66paste.log');
+
+$img=Imager->new() || die "unable to create image object\n";
+
+print "ok 1\n";
+
+$img->open(file=>'testimg/scale.ppm',type=>'pnm');
+
+$nimg=Imager->new() or die "Unable to create image object\n";
+$nimg->open(file=>'testimg/scale.ppm',type=>'pnm');
+print "ok 2\n";
+
+$img->paste(img=>$nimg, top=>30, left=>30) or die $img->{ERRSTR};
+print "ok 3\n";
+
+
+$img->write(type=>'pnm',file=>'testout/t66.ppm') || die "error in write()\n";
+print "ok 4\n";
+
+
--- /dev/null
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+
+
+BEGIN { $| = 1; print "1..3\n"; }
+END {print "not ok 1\n" unless $loaded;}
+
+use Imager;
+$loaded=1;
+
+print "ok 1\n";
+
+Imager::init('log'=>'testout/t70newgif.log');
+
+$green=i_color_new(0,255,0,0);
+$blue=i_color_new(0,0,255,0);
+
+$img=Imager->new();
+$img->open(file=>'testimg/scale.ppm',type=>'pnm') || print "failed: ",$img->{ERRSTR},"\n";
+print "ok 2\n";
+
+
+$img->write(file=>'testout/t70newgif.gif',type=>'gif',gifplanes=>1,gifquant=>'lm',lmfixed=>[$green,$blue]) || print "failed: ",$img->{ERRSTR},"\n";
+print "ok 3\n";
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+
+BEGIN { $| = 1; print "1..3\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Imager qw(:all);
+
+
+$Imager::DEBUG=1;
+$loaded = 1;
+print "ok 1\n";
+
+init_log("testout/t75aapolyaa.log",1);
+
+$green=i_color_new(0,255,0,0);
+
+
+$img=Imager->new(xsize=>10,ysize=>10);
+
+#$nums=10;
+#$rn=10;
+
+#@rand=map { rand($rn) } 0..$nums-1;
+#@angle=sort { $a<=>$b } map { rand(360) } 0..$nums-1;
+
+#@x=map { 25+(10+$rand[$_])*cos($angle[$_]/180*3.1415) } 0..$nums-1;
+#@y=map { 25+(10+$rand[$_])*sin($angle[$_]/180*3.1415) } 0..$nums-1;
+
+#i_poly_aa($img,[50,300,290,200],[50,60,190,220],$green);
+
+$x1=16;
+$y1=10;
+
+@x=(1, $x1, $x1);
+@y=(1, 1, $y1);
+
+@x=map { $_+0.5 } (0, 8, 8);
+@y=map { $_+0.5 } (0, 4, 0);
+
+i_poly_aa($img->{IMG},\@x,\@y,$green);
+
+push(@x,$x[0]);
+push(@y,$y[0]);
+
+#$red=i_color_new(255,0,0,0);
+#$img->polyline(color=>$red,'x'=>\@x,'y'=>\@y,antialias=>0);
+print "ok 2\n";
+
+open(FH,">testout/t75.ppm") || die "Cannot open testout/t75.ppm\n";
+i_writeppm($img->{IMG},fileno(FH)) || die "Cannot write testout/t75.ppm\n";
+close(FH);
+
+print "ok 3\n";
+
+#malloc_state();
--- /dev/null
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+
+
+BEGIN { $| = 1; print "1..3\n"; }
+END {print "not ok 1\n" unless $loaded;}
+
+use Imager;
+$loaded=1;
+
+print "ok 1\n";
+
+Imager::init('log'=>'testout/t90cc.log');
+
+$img=Imager->new();
+$img->open(file=>'testimg/scale.ppm') || print "failed: ",$img->{ERRSTR},"\n";
+print "ok 2\n";
+
+print "# Less than 10K colors in image\n" if !defined($img->getcolorcount(maxcolors=>10000));
+print "# color count: ".$img->getcolorcount()."\n";
+
+print "ok 3\n";
--- /dev/null
+P6
+327 360
+255
+þþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýýýûÿÿýÿÿýûûùÿÿýÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýûûùþþüüüúÿÿýýýûÿÿýþþüýýûÿÿýþþüÿÿýÿÿýûûùÿÿýþÿúÿÿûûü÷ÿÿûýþùÿÿûÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüúúøÿÿýýýûüüúþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýÿÿýýýûÿÿýþþüýýûÿÿýÿÿýþþüüüúÿÿýüüúÿÿýýýûÿÿûûü÷ÿÿûüýøýþùüýøýýûüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýüüúÿÿýúúøÿÿýÿÿýøøöùù÷þþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿý÷÷õÿÿýÿÿý÷÷õÿÿýýýûüüúýýûÿÿýýýûûûùÿÿýÿÿýüüúûûùÿÿýùù÷ÿÿýüüúÿÿýþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýÿÿýÿÿýûûùýýûÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýþþüüüúÿÿýÿÿýüüúÿÿýýýûýýûÿÿýýýûþþüüüúþþüÿÿýûûùþþüûûùÿÿýüüúÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿûûûûûûþþþÿÿÿüüüþþþúúúþþþþþþþþþþþþþþþþþþþþþþþþÿÿÿýýý\ 4\ 4\ 4\0\0\0\ 6\ 6\ 6ÿÿÿúúúþþþýýýýýýÿÿÿøøøÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿþþþùùùÿÿÿüüüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿ\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 1\0\0\0\ 3\ 3\ 3\ 4\ 4\ 4\0\0\0\ 3\ 3\ 3\a\a\a\ 5\ 5\ 5\0\0\0\ 1\ 1\ 1\ 1\ 1\ 1
+
+
+\0\0\0üüüÿÿÿùùùýýýöööÿÿÿÿÿÿûûûÿÿÿÿÿýþþüþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþÿÿÿúúüüüþÿÿÿûûý\0\0\ 2\ 6\ 6\b\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\a\a \0\0\ 2\0\0\ 2 \v\ 4\ 4\ 6\0\0\ 2\ 6\ 6\b\0\0\ 2\v\v\r\ 1\ 1\ 3\0\0\ 2\0\0\ 2\ 3\ 3\ 5\ 4\ 4\ 6\ 1\ 1\ 3\ 4\ 4\ 6\ 5\ 5\a\0\0\ 2ÿÿÿýýÿûûûÿÿÿûûûÿÿÿþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþûûýÿÿÿýýÿ\ 1\ 1\ 3\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 6\ 6\b\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 6\ 6\b\0\0\ 2\ 6\ 6\b\0\0\ 2\a\a \ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 3\0\0\ 2\b\b
+\0\0\ 2\0\0\ 2ÿÿÿúúúÿÿÿþþþþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýúúøÿÿýÿÿýüüúþþüûûùÿÿýýýûüüúÿÿÿüüüþþþþþþÿÿÿûûû\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 1\ 1\ 3\ 3\ 3\ 5\ 1\ 1\ 3\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 4ÿÿÿþþþüüüÿÿýÿÿýúúøÿÿýÿÿûûü÷ÿÿýüüúÿÿýýýûÿÿýüüúÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüööôÿÿýüüúÿÿýúúøÿÿýÿÿýýýûÿÿýÿÿýùùùÿÿÿÿÿÿúúú\0\0\0\a\a\a\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 3\ 5\ 5\a\ 4\ 4\ 6\ 4\ 4\ 6\0\0\0\ 3\ 3\ 3\ 2\ 2\ 2ýýýÿÿýûûùÿÿýüüúûü÷ÿÿûÿÿýüüúþþüÿÿýüüúÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýööôÿÿýÿÿýûûùûûùþþüýýûþþþûûûþþþüüüüüü\ 4\ 4\ 4\ 3\ 3\ 3\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2 \v\ 1\ 1\ 3\0\0\ 2\ 5\ 5\a\0\0\ 2
+
+
+\0\0\0\ 2\ 2\ 2\ 1\ 1\ 1\b\b\büüüþþüÿÿýüüúüüúÿÿýüüúÿÿýÿÿýþþüüüúúúøÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýÿÿýùù÷ÿÿýÿÿýúúøÿÿýþþþÿÿÿÿÿÿ\b\b\b\ 2\ 2\ 2\0\0\0\a\a\a\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 5\a\0\0\ 2\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 3\ 3\ 3\ 5\0\0\0\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 2\0\0\0\ 2\ 2\ 2\ 2\ 2\0þþüÿÿýýýûýýûþþüÿÿýôôòÿÿýÿÿýüüúÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüúúøþþüþþüÿÿýþþüüüúüüúÿÿýýýýýýý\0\0\0\ 4\ 4\ 4\0\0\ 2\f\f\ e\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5 \v\0\0\ 2\ 4\ 4\ 6\a\a \ 1\ 1\ 3\ 3\ 3\ 3\ 5\ 5\ 5\b\b\b\ 3\ 3\ 3\ 3\ 3\ 3\0\0\0\ 1\ 1\ 1ÿÿÿÿÿýÿÿýøøöÿÿýÿÿý÷÷õÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýúúøÿÿýÿÿýÿÿýÿÿýüüúÿÿÿ\ 2\ 2\ 2\ 6\ 6\ 6\0\0\0\a\a \0\0\ 2\0\0\ 2\a\a \ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\0\0\ 2\a\a \ 3\ 3\ 5\0\0\ 2\0\0\ 2\0\0\0\0\0\0\0\0\0\ 6\ 6\ 6\ 4\ 4\ 4\0\0\0\ 2\ 2\ 2\0\0\0üüúúúøÿÿýþþüþþüÿÿýÿÿýùù÷þþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýÿÿýýýûúúøÿÿÿ\ 1\ 1\ 1\0\0\0\ 2\ 2\ 2\ 1\ 1\ 1\ 4\ 4\ 4\ 3\ 3\ 5\0\0\ 2\ 5\ 5\a\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 1\0\0\0\b\b\b\ 2\ 2\ 2\0\0\0\ 5\ 5\ 5\ 4\ 4\ 6\a\a \ 1\ 1\ 3\ 4\ 4\ 6\ 4\ 4\ 6\ 6\ 6\b\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 3\ 3\ 3\ 3\a\a\ 5\0\0\0ÿÿýüüúýýûûûùÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüýýûÿÿýÿÿý\0\0\0\ 2\ 2\ 2\ 3\ 3\ 3\ 2\ 2\ 2\ 3\ 3\ 3\0\0\0\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 3\ 5\ 5\ 5\0\0\0\ 5\ 5\ 5\ 5\ 5\ 5\ 6\ 6\ 6\ 5\ 5\a\ 1\ 1\ 3\0\0\ 2\ 5\ 5\a\0\0\ 2\0\0\ 2\ 5\ 5\a\ 1\ 1\ 3\0\0\ 2\ 3\ 3\ 3\0\0\0\ 5\ 5\ 5\0\0\0þþþÿÿÿûûûþþþþþþþþþþþüþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýÿÿýüüü\0\0\0\ 5\ 5\ 5\0\0\0\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\0\0\0\ 3\ 3\ 3\f\f\f\11\11\11\1d\1d\1d\e\e\e\15\15\15
+
+
+\f\f\f\ 4\ 4\ 4\0\0\0\ 1\ 1\ 1\ 2\ 2\ 2\ 3\ 3\ 3\ 3\ 3\ 3\0\0\0\ 3\ 3\ 5\0\0\ 2\ 5\ 5\a\ 4\ 4\ 6ýýÿüüþÿÿÿþþÿÿÿÿÿÿÿýýÿûûûÿÿÿýýýþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýûûùúúøÿÿÿ\0\0\0\0\0\0\ 4\ 4\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 4\ 4\ 4\v\v\v\17\17\17\e\e\e&&&(((+++'''\e\e\e\13\13\13\ e\ e\ e \ 2\ 2\ 2\0\0\0\ 3\ 3\ 3\ 3\ 3\ 3\ 1\ 1\ 3\ 2\ 1\ 6\ 3\ 2\a\0\0\ 4\0\0\ 4
+ \ eÿþÿÿþÿýýÿþþÿÿÿÿÿÿÿûûûýýýÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüúúøÿÿýþþüþþü\0\0\0\0\0\0\ 3\ 3\ 3\ 4\ 4\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 6\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 6\ 6\ 6\ f\ f\ f\1d\1d\1d!!!---555===;;;555---###\18\18\18\v\v\v\ 3\ 3\ 3\ 2\ 2\ 2\ 1\ 1\ 1\ 4\ 4\ 6\ 3\ 3\ 5\ 6\ 6\b\ 1\ 1\ 3
+ \ e\ 2\ 1\ 6\ 3\ 2\aþýÿþþÿùùûÿÿÿüüüûûûÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýùù÷\ 3\ 3\ 1\b\b\b\ 2\ 2\ 2\ 1\ 1\ 1\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 6\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 6\v\v\v\15\15\15###)));;;FFFOOOLLLMMMBBB666***\e\e\e\10\10\10\b\b\b\0\0\0\0\0\ 2\0\0\ 2\0\0\ 2\0\0\ 2\ 1\0\ 5\ 1\0\ 5\ 5\ 4 \ 3\ 2\aýýÿÿÿÿÿÿÿúúúÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýýþþþ\ 3\ 3\ 3\0\0\0\ 1\ 1\ 1\0\0\0\ 4\ 4\ 4\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 4\ 4\ 6\a\a \f\f\f\16\16\16&&&///CCCRRR___```\\\SSSHHH;;;+++\1f\1f\1f\14\14\14
+
+
+\ 1\ 1\ 1\b\b\b\ 1\ 1\ 3\b\b
+\0\0\ 2\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4ÿÿÿøøúþþþÿÿÿþþüööôÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿúúú\ 4\ 4\ 4\ 3\ 3\ 3\0\0\0\ 6\ 6\ 6\0\0\0\ 4\ 4\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 5\ 5\a\a\a \v\v\v\16\16\16(((111CCCRRRfffnnnllleeeZZZIII555&&&\1d\1d\1d\15\15\15\v\v\v\0\0\0\0\0\ 2\0\0\ 2\ 6\ 6\b\b\b
+\0\0\ 2\ 5\ 5\a\0\0\ 2ÿÿÿÿÿÿúúúýýûÿÿýýýûüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüúúú\ 3\ 3\ 3\ 2\ 2\ 2\ 5\ 5\ 5\ 2\ 2\ 2\0\0\0\a\a \0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\ e\ e\ e\18\18\18***888KKKZZZooozzzyyyqqqdddRRR===///$$$\e\e\e\r\r\r\ 6\ 6\ 6\ 2\ 2\ 2\ 3\ 3\ 3\ 1\ 1\ 1\0\0\0\ 6\ 6\b\0\0\ 2\ 4\ 4\ 4\0\0\0þþþþþþÿÿýúúøüýøÿÿûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿ\0\0\0\ 3\ 3\ 3\0\0\0\ 4\ 4\ 4\0\0\0\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\v\v\v\12\12\12%%%999SSScccuuu}}}}}}rrrdddUUUFFF999+++\1e\1e\1e\e\e\e\16\16\16\a\a\a\ 4\ 4\ 4\ 1\ 1\ 1\0\0\0\ 5\ 5\a\0\0\ 2\ 1\ 1\ 1\ 3\ 3\ 3\ 2\ 2\ 2ÿÿÿûûùþþüÿÿûþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýûûùÿÿýÿÿýÿÿýööôÿÿýýýû\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\f\f\f\18\18\18''';;;NNNcccxxx||||||uuueeeZZZGGG???000&&&\1e\1e\1c\14\14\12\v\v\v\ 4\ 4\ 4\0\0\0\ 1\ 1\ 1\ 4\ 4\ 4\ 2\ 2\ 2\0\0\0\ 1\ 1\ 1\ 2\ 2\ 2üüüÿÿýýýûýýûÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýøøöûûùÿÿýûûùÿÿý\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ e\ e\ e\1d\1d\1d,,,>>>PPPdddsssqqqooohhh^^^NNNCCC;;;555+++##!\e\e\19\12\12\12 \ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 2\ 5\ 5\ 5\ 2\ 2\ 2\ 6\ 6\ 6ùù÷þþüÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýüüúÿÿýüüúùù÷\0\0\0\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\v\v\v\1c\1c\1c--->>>QQQfffsssmmmccc[[[UUUCCC<<<444555---&&&\1f\1f\1f\17\17\17\r\r\r\ 4\ 4\ 4\ 1\ 1\ 1\ 2\ 2\ 4\0\0\ 2\ 5\ 5\a\0\0\ 2\ 4\ 4\ 4\0\0\0\ 1\ 1\ 1ÿÿÿüüúýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýýýûÿÿýøøöýýûÿÿý\ 5\ 5\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 5\ 5\a\12\12\12\1f\1f\1f---===LLL[[[ddd]]]WWWMMMGGG;;;333+++---+++###\e\e\e\14\14\14\f\f\f\ 4\ 4\ 4\ 2\ 2\ 2\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 6\ 6\b\0\0\0\b\b\b\0\0\0ÿÿÿýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýúúøþþüýýûûûùÿÿý\ 4\ 4\ 2\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 4\ 4\ 6
+
+\f\14\14\14\1d\1d\1d))):::FFFMMMQQQKKKEEE;;;222222&&& \1e\1e\1e###\1c\1c\1c\14\14\14\r\r\r\a\a\a\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 6\ 6\b\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 1\ 3\ 3\ 3üüüÿÿÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýþþüþþüþþü\0\0\0 \a\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\0\0\ 2\ 5\ 5\a\v\v\r\10\10\10\18\18\18%%%777???@@@@@@999555+++"""%%%\18\18\18\13\13\13\ f\ f\ f\15\15\15\14\14\14\r\r\r\a\a\a\ 4\ 4\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\ 1\ 1\ 3\0\0\ 2\ 5\ 5\a\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 3\0\0\0þþþÿÿÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýùù÷ÿÿýÿÿýþþüÿÿý\ 3\ 3\ 1\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\b\b
+\12\12\12\e\e\e$$$///222///+++!!!$$$\1c\1c\1c\15\15\15\13\13\13\v\v\v\ 6\ 6\ 6\ 6\ 6\ 6\a\a\a
+
+
+\ 6\ 6\ 6\ 4\ 4\ 6\ 3\ 3\ 5\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 2\a\ 1\0\ 5\ 4\ 3\b\ 1\0\ 5\0\0\ 2\ 6\ 6\b\ 4\ 4\ 6\0\0\ 2\ 5\ 5\aøøøþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýýýûþþüþþü\ 3\ 3\ 1\ 1\ 1\ 1\ 4\ 4\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\0\0\ 2\ 3\ 3\ 5\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\v\v\v\15\15\15\1c\1c\1c###$$$$$$"""\16\16\16\14\14\14\r\r\r\v\v\v\ 2\ 2\ 2\ 2\ 2\ 2\0\0\0\ 3\ 3\ 3\0\0\0\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 2\a\ 2\ 1\ 6\ 1\0\ 5\ 2\ 1\ 6\ 4\ 4\ 6\ 4\ 4\ 6\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4ÿÿÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýýýûÿÿÿúúúÿÿÿ\ 5\ 5\ 5\0\0\ 2\ 6\ 6\b\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5
+
+
+\r\r\r\11\11\11\15\15\15\17\17\17\14\14\14\ f\ f\ f
+
+
+\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5ýýýÿÿÿýýûþþüþþüÿÿýúúøÿÿýþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùþþüüüüÿÿÿýýÿ\0\0\ 2\ 6\ 6\b\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\v\v\v\r\r\r\10\10\10\12\12\12\11\11\11\f\f\f\ 4\ 4\ 4\0\0\0\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5ÿÿÿõõõÿÿýþþüüüúÿÿýþþüüüúþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýÿÿÿõõõ\ 6\ 6\b \v\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4
+
+
+ \b\b\b\a\a\a\ 6\ 6\ 6\ 4\ 4\ 4\ 2\ 2\ 2\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 1þþþýýûÿÿýüüúùù÷úúøÿÿýþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüøøøþþþ\0\0\ 2\ 3\ 3\ 5\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 5\ 5\ 3\ 3\ 3\ 1\ 1\ 1\0\0\0\ 1\ 1\ 1\ 3\ 3\ 3\ 4\ 4\ 4\ 5\ 5\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 5\ 5ÿÿÿüüúþþüûûùÿÿýÿÿýûûùþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùùù÷ÿÿÿÿÿÿ\ 5\ 5\a\ 1\ 1\ 3\a\a \ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\0\0\0ûûûÿÿÿùùùÿÿýþþüýýûþþüþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýýýýúúú\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\a\a\a\ 5\ 5\ 5ûûûÿÿÿûûùÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýøøöþþþÿÿÿ\ 6\ 6\b\0\0\ 2\ 1\ 1\ 3\ 5\ 5\a\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\0\0\0\0\0\0ÿÿÿûûûüüúÿÿýþþüüüúþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýþþþúúú\ 5\ 5\a\0\0\ 2\ 5\ 5\a\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\a\a\aúúúÿÿÿÿÿýüüúýýûÿÿýþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ\ 1\ 1\ 1\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 4\ 4\ 6\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6\ 5\ 5\a\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\b\b
+\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6\ 5\ 4 \ 4\ 3\b\0\0\ 4\0\0\ 4\ 4\ 3\b\ 2\ 1\ 6\0\0\ 4\ 4\ 3\b\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 4üüüÿÿýþþüúúøÿÿýþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ\ 1\ 1\ 1\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 5\ 5\a\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 5\0\0\ 2\0\0\ 2\ 4\ 4\ 6\ 4\ 4\ 6\ 1\ 1\ 3\ 1\ 1\ 3\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 5\a\ 4\ 4\ 6\ 3\ 3\ 5\ 3\ 3\ 5\ 4\ 4\ 6\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\0\0\ 2\ 5\ 5\a \v\ 4\ 4\ 6\0\0\ 2\0\0\ 2\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 4\0\0\ 4\ 5\ 4 \ 4\ 3\b\0\0\ 4\ 4\ 3\b\b\a\f\0\0\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6\ 4\ 4\ 4ûûûúúøþþüÿÿýýýûþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ\ 1\ 1\ 1\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 3\ 3\ 3\ 4\ 4\ 4\ 3\ 3\ 3\ 2\ 2\ 2\ 1\ 1\ 1\ 1\ 1\ 1\ 2\ 2\ 2\0\0\0\ 3\ 3\ 3\ 6\ 6\ 6
+
+
+\ e\ e\ e\f\f\f\a\a\a\ 6\ 6\ 6\ 5\ 5\a\ 5\ 5\a\ 3\ 3\ 5\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\0\0\ 2\0\0\ 2\0\0\ 2\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 4\ 4\ 6\ 6\ 6\b\ 4\ 4\ 6\a\a \10\10\12\12\12\14\10\10\12\17\17\19\18\18\1a
+
+\f\ f\ f\11\ 1\ 1\ 3\ 1\ 1\ 3\ 6\ 6\b\ 1\ 1\ 3\ 1\ 1\ 3\ 5\ 4 \ 1\0\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 3\ 3\ 3ÿÿÿÿÿýÿÿýýýûûûùþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ\ 1\ 1\ 1\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 3\ 3\ 4\ 4\ 4\ 5\ 5\ 5\11\11\11\r\r\r\a\a\a\a\a\a\ e\ e\ e\13\13\13\14\14\14\15\15\15\b\b
+\a\a \ 4\ 4\ 6\0\0\ 2\ 1\ 1\ 3\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 5\a\ 4\ 4\ 6\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\ 5\ 5\a\ e\ e\10\15\15\17!!#//1446::<$$&
+
+\f\ 1\ 1\ 3\ 4\ 4\ 6\0\0\ 2\0\0\ 4\ 6\ 5
+\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 3üüüûûù÷÷õÿÿýÿÿýþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ\ 1\ 1\ 1\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 4\ 1\ 1\ 1\0\0\0\0\0\0\ 3\ 3\ 3\b\b\b\f\f\f\ e\ e\ e \ e\ e\ e\19\19\19"""(((---\1f\1f!\r\r\ f\ 2\ 2\ 4\ 5\ 5\a\a\a \ 1\ 1\ 3\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\0\0\ 2\0\0\ 2\ 4\ 4\ 6\ 5\ 5\a\ 3\ 3\ 5\0\0\ 2\0\0\0\ 1\ 1\ 1\ 2\ 2\ 2\ 4\ 4\ 4\ 5\ 5\ 5\b\b\b\1a\1a\1a444RRTQQS779\13\13\15\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 5\ 5\a\ 1\ 1\ 1ÿÿÿýýýÿÿÿþþüûûùþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ\ 1\ 1\ 1\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 1\ 1\ 1\ 1\ 1\ 1\ 5\ 5\ 5 \f\f\f\v\v\v \ 3\ 3\ 3\ 4\ 4\ 4\ 2\ 2\ 2\ 2\ 2\ 2\f\f\f\1c\1c\1c222CCC@@B,,.\15\15\17\a\a \ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 5\ 5\a\ 4\ 4\ 6\0\0\ 2\0\0\ 2\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 2\a\a\a\ 2\ 2\ 2\0\0\0\ 2\ 2\ 2\ 2\ 2\ 2\ 6\ 6\ 6\14\14\14446OOQbbdFFH\14\14\16\ 1\ 1\ 3\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\a\a \0\0\0ûûûÿÿÿùùùûûùÿÿýþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ\ 1\ 1\ 1\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 1\ 2\ 2\ 2\ 5\ 5\ 5\b\b\b
+
+
+\b\b\b\ 3\ 3\ 3\0\0\0\0\0\0\ 1\ 1\ 1\ 2\ 2\ 2\ 1\ 1\ 1\ 3\ 3\ 3 \12\12\12\1c\1c\1c446;;=224\18\18\1a\ 6\ 6\b\ 4\ 4\ 6\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 5\0\0\ 2\0\0\ 2\ 1\ 1\ 3\v\v\r\14\14\16\1d\1d\1d\18\18\18\ f\ f\ f\ 6\ 6\ 6\ 2\ 2\ 2\0\0\0\0\0\0\ 2\ 2\ 2\f\f\f%%%PPP\\\335
+
+\f\ 1\ 1\ 3\ 5\ 5\a\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\a\a \ 4\ 4\ 6øøøÿÿÿýýûÿÿýþÿúþÿúþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ\ 1\ 1\ 1\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 1\ 3\ 3\ 3\ 4\ 4\ 4\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 2\a\a ((*@@B446\19\19\e\b\b
+\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\0\0\0\0\0\ 2\ e\ e\ e))+FFF^^`jjjsssppplllTTT&&&\a\a\a\ 2\ 2\ 2\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\ 5\1d\1d\1dBBBFFH\1e\1e \0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2 \v\0\0\ 2\ 2\ 2\ 4ÿÿÿýýýÿÿýþþüþÿúþÿúþÿúþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþüþþü\ 1\ 1\0\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 6\ 6\b\0\0\ 2\ 4\ 4\ 6\ 6\ 6\b\1f\1f!%%%\1e\1e\1e\11\11\11\ 3\ 3\ 3\ 2\ 2\ 2\ 3\ 3\ 3\0\0\0\ e\ e\ e***AAA224\18\18\1a\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 1\ 6\ 1\0\ 5\ 5\ 5\a\0\0\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 6\ 6\ 6\ 1\ 1\ 1\ 6\ 6\ 6$$"===[[Ylllxxvyyy\85\85\85\92\92\92\98\98\98\8f\8f\8f\96\96\96\7f\7f\7fZZZ000
+
+
+\ 1\ 1\ 1\ 2\ 2\ 2\ 1\ 1\ 1\1c\1c\1cDDD555\14\14\14\ 2\ 2\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 6\ 6\b\ 1\ 1\ 3\0\0\ 2ÿÿÿûûûýýûÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþüþþü\ 1\ 1\0\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\0\0\ 2\0\0\ 2\1a\1a\1c,,.VVXssu\83\83\83~~~qqqNNN\1d\1d\1d\ 2\ 2\ 2\ 6\ 6\ 6\0\0\0###111FFH$$&\ e\ e\10\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 1\ 6\v
+\ f\0\0\ 2\a\a \ 3\ 3\ 3\0\0\0\0\0\0\f\f\f//-QQOhhfttrzzx\89\89\87\8e\8e\8c\95\95\93\9c\9c\9c\9a\9a\9a\9f\9f\9f§§§°°°ÂÂÂ\91\91\91GGG\ e\ e\ e\0\0\0\ 3\ 3\ 3\r\r\r))):::###\10\10\10\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\a\a \0\0\ 2\ 4\ 4\ 6\0\0\ 2üüüÿÿÿûûùýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþüþþü\ 1\ 1\0\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\0\0\ 2\ 3\ 3\ 5\1f\1f!OOOnnn\8f\8f\8f   §§§®®®\9e\9e\9e\86\86\86iii444\ e\ e\ e\0\0\0\ 1\ 1\ 1\v\v\v!!#%%'\f\f\ e\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 4\ 6\ 5
+\ 3\ 3\ 5\ 4\ 4\ 6\ 4\ 4\ 4\0\0\0\e\e\e<<<ccattr~~|\84\84\82\8b\8b\89\9a\9a\98\9c\9c\9c\99\99\99¥¥¥ªªª¯¯¯±±±ººº¿¿¿¿¿¿\9e\9e\9eOOO\b\b\b\ 6\ 6\ 6\0\0\0\r\r\r\13\13\13 \ e\ e\ e\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\ 5\ 5\a\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5 \v\0\0\ 2ÿÿÿýýýÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþüþþü\ 1\ 1\0\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\0\0\ 2\1d\1d\1f[[]zzz\99\99\99\98\98\98ÂÂÂÃÃÃÃÃÃÃÃý½½\95\95\95uuuFFF\14\14\14\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 5\a\14\14\16\19\19\e\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 6\ 5
+\0\0\ 4\a\a \0\0\ 2\ 2\ 2\ 2\15\15\15FFFcccvvt}}{\8a\8a\88\94\94\92\96\96\94\9b\9b\99¤¤¤«««µµµªªª²²²ÃÃÿ¿¿Ã
Ã
Ã
ÃÃÿ¿¿\97\97\97LLL\ e\ e\ e\f\f\f\0\0\0\0\0\0
+
+
+\13\13\13\r\r\ f\ 5\ 5\a\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 5\ 5\aüüüÿÿÿûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþü\ 1\ 1\0\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 3\0\0\0\ 3\ 3\ 3\ e\ e\ eJJJ~~~\8c\8c\8c\9d\9d\9d¬¬¬¹¹¹ÃÿÃÃý½»ºº¸¸¸¶\8a\8a\88zzzNNN\13\13\13\0\0\0\b\b\b\ 6\ 6\ 6\b\b
+\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4 \b\r\ 1\0\ 5\ 2\ 2\ 4\ 4\ 4\ 6\11\11\11IIIcccxxx\8c\8c\8a\8f\8f\8d\9b\9b\99¦¦¤¨¨¦¦¦¤Âµµµ½½½ÃÃúººÃÃÃÃÃÃÃÃþ¾¾»»»§§§\88\88\88888\ e\ e\ e\ 1\ 1\ 1\ 3\ 3\ 3\ 1\ 1\ 1\16\16\16\11\11\13\ 6\ 6\b\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 4\ 4\ 6\b\b
+\ 2\ 2\ 4ûûûÿÿÿýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþü\ 1\ 1\0\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 4\0\0\0\ 3\ 3\ 3&&&ppp\81\81\81\99\99\99   ¾¾¾ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
²²°\9e\9e\9c\8f\8f\8f{{{BBB\13\13\13\ 3\ 3\ 3\ 6\ 6\ 6\ e\ e\10\b\b
+\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 1\ 6\ 3\ 2\a\0\0\ 2\ 3\ 3\ 5///dddsss\8a\8a\8a¢¢ §§¥±±¯··µÃþÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃø¸¸\9f\9f\9f\8a\8a\8ajjj\1f\1f\1f\ 6\ 6\ 6\ 1\ 1\ 1\ 4\ 4\ 4\a\a\a\v\v\r\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 6\ 6\b\ 1\ 1\ 3\0\0\ 2\ 4\ 4\ 6ÿÿÿøøøÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ\ 1\ 1\ 1\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 4\ 1\ 1\ 1\r\r\rIII\7f\7f\7f\89\89\89¤¤¢®®¬¼¼ºÃÃÃÃÃÃÃÃÃ
¾¾¼»»¹¾¾¼¥¥£\91\91\91\95\95\95|||%%%\ f\ f\ f\0\0\0\ 3\ 3\ 3\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\ 3\ 3\ 5\14\14\16QQQlll\86\86\84\9f\9f\9d²²°Ã
Ã
ÃÃÃÃÃÃÃÃÃÃà à à çççëëëêêêêêêëëëäääçççÃÃÿ¿¿´´´©©©\8c\8c\8c|||RRR\f\f\f\ 4\ 4\ 4\ 1\ 1\ 1\ 1\ 1\ 1\ 4\ 4\ 6\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 5\ 5\a\ 3\ 3\ 5\ 3\ 3\ 5þþþÿÿÿúúøûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþ\ 1\ 1\ 1\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\0\ 2\ 2\ 2\e\e\eiii\82\82\82\9a\9a\9a¦¦¤³³±Ã
Ã
ÃÃÃÃÃÃÃääâääâããáà à ÃÃÃÃÃÃﯯ\9c\9c\9cUUU\b\b\b\ 3\ 3\ 3\ 1\ 1\ 1\ 4\ 4\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3>>@ttt\8f\8f\8f¬¬ªÃÃÃÃÃÃëëéõõóôôòÿÿÿýýýýýýÿÿÿþþþýýýþþþýýýôôôþþþðððÃÃó³³\9b\9b\9b~~~ccc%%%\ 2\ 2\ 2\0\0\0\ 5\ 5\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\ 1\ 1\ 3\ 4\ 4\ 6\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 2\ 2\ 2ýýýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿÿ\ 3\ 3\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 2\a\ 1\ 1\ 3\ 2\ 2\ 2\b\b\b:::vvv\94\94\94³³³ÃÃÃÃÃÃëëéÿÿýùù÷ÿÿýüüúýýûÿÿýööôÿÿÿñññÃÃﯯ\1c\1c\1c\ 3\ 3\ 3\0\0\0\ 4\ 4\ 4\ 3\ 3\ 3\0\0\0\ 1\ 1\ 3\ 3\ 3\ 5\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 6\ 2\ 2\ 4\0\0\ 2\ 5\ 5\a\ 5\ 5\a^^`\9a\9a\9a³³³ÃÃÃõõóÿÿýýýûþþþüüüÿÿÿÿÿÿüüüüüüûûûÿÿÿýýýþþþÿÿÿÿÿÿñññÿÿÿëëëÃ
Ã
Ã
\91\91\91zzzLLL\v\v\v\0\0\0\ 1\ 1\ 1\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûþþþ\ 2\ 2\ 2\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 2\a\ 1\ 1\ 3\0\0\ 2\ e\ e\ eTTT\8c\8c\8c¿¿¿ÃÃÃõõóúúøüüúööôÿÿýóóñüüúÿÿýüüúüüúüüüÿÿÿýýýÃÃÃSSS\ 1\ 1\ 1\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\19\19\e\86\86\88ÃÃÃÃÃÃööôýýûþþüÿÿýþþþÿÿÿþþþüüüâââ¹¹¹\94\94\94   ÃÃÃöööüüüÿÿÿýýýøøøÿÿÿùùùÃÃë««kkk\1a\1a\1a\ 3\ 3\ 3\ 3\ 3\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýþþþ\ 2\ 2\ 2\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 2\a\ 1\ 1\ 3\ 1\ 1\ 3\r\r\rggg«««æææüüüûûûùùùñññÃÃÃÃÃÃÃÃÃññïððîÿÿýþþüúúúþþþÿÿÿ÷÷÷\9a\9a\9a\ 6\ 6\ 6\ 6\ 6\ 6\ 1\ 1\ 1\ 4\ 4\ 4\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\0\0\ 2///¡¡¡ÃÃÃéééúúøýýûûûùþþüúúúÿÿÿêêê\98\98\98224\12\12\14\v\v\v\f\f\f'''___ÃÃÃùùùÿÿÿüüüûûûÿÿÿþþþÃÃ䤤555\0\0\0\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿýýýþþþ\ 1\ 1\ 1\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 2\a\ 2\ 1\ 6\ 5\ 5\a\17\17\17\87\87\87ÃÃÃðððùùùÿÿÿÃÃÃVVV'''\13\13\11"" ;;9¤¤¢îîìýýûÿÿÿúúúüüüÿÿÿÃÃÃ!!!\ 3\ 3\ 3\0\0\0\0\0\0\ 1\ 1\ 1\ 1\ 1\ 1\ 2\ 2\ 2\ 4\ 4\ 6\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 3\ 3\ 5AAA©©©ÃÃÃéééööôþþüÿÿýüüúÿÿÿêêêttt\13\13\13\0\0\ 2\ 6\ 6\b\a\a\a\1a\1a\1a###\1f\1f\1f>>>´´´ÿÿÿýýýÿÿÿýýýÿÿÿôôôÃÃÃ___\ 6\ 6\ 6\ 4\ 4\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿýýýþþÿ\ 2\ 2\ 4\ 1\0\ 5\ 1\0\ 5\ 3\ 2\a\ 2\ 1\ 6\ 3\ 3\ 5$$&  ¢ììîÿÿÿÿÿÿããã@@@\ 6\ 6\ 6\0\0\0\r\r\r"""###\14\14\14~~~ëëëÿÿýüüúÿÿýþþüèèèOOO\ 2\ 2\ 2\ 3\ 3\ 3\ 2\ 2\ 2\ 3\ 3\ 3\ 3\ 3\ 3\ 6\ 6\ 6\f\f\f\v\v\v\ 4\ 4\ 4\ 1\ 1\ 1\0\0\ 2\ 4\ 4\ 6III©©©ÃÃÃ÷÷÷úúøÿÿýÿÿýøøöððð\88\88\88\a\a\a\ 6\ 6\ 6\0\0\ 2\ 2\ 2\ 4666\7f\7f\7foooGGG%%%---°°°ðððÿÿÿþþþÿÿÿüüüóóó\90\90\90\14\14\14\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 3\ 3\ 5\ 2\ 1\ 6\ 2\ 1\ 6\ 3\ 2\a\ 1\0\ 5\0\0\ 2AACÃÃÃòòôôôöóóõ~~~\0\0\0\0\0\0\r\r\r777tttggg:::!!!\9a\9a\9a÷÷õÿÿýüüúüüúöööyyy\ 2\ 2\ 2\ e\ e\ e
+
+
+\a\a\a\0\0\0\ 1\ 1\ 1\f\f\f\f\f\f\ 5\ 5\ 5\ 2\ 2\ 2\0\0\ 2\ 6\ 6\bQQQ¨¨¨ÃÃÃúúúúúøþþüúúø÷÷õ¾¾¾\11\11\11\0\0\0\ 5\ 5\ 5\ 1\ 1\ 3\ 5\ 5\a***rrr\94\94\94\90\90\90ddd\1f\1f\1f333ÃÃÃöööúúúýýýÿÿÿÿÿÿ²²²\1c\1c\1c\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 4\ 4\ 6\ 3\ 2\a\ 2\ 1\ 6\ 3\ 2\b\ 1\0\ 5\ 2\ 2\ 4MMOÃÃÃ÷÷ùÿÿÿèèê((*\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3888\8f\8f\8f\85\85\85fff&&&\1d\1d\1dÃÃÃÿÿýÿÿýÿÿýûûû\95\95\95\ 6\ 6\ 6\f\f\f\ e\ e\ e
+
+
+\ 1\ 1\ 1\ 4\ 4\ 4\13\13\13\13\13\13\a\a\a\ 2\ 2\ 2\ 3\ 3\ 3 ]]]®®®ÃÃÃóóóüüúÿÿýþþüððîIII \0\0\0\0\0\0\ 3\ 3\ 5\0\0\ 2\f\f\f>>>vvv\87\87\87\8f\8f\8fVVV
+
+
+fffóóóÿÿÿýýýþþþýýýÃÃÃ///\ f\ f\ f\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 4\ 4\ 6\ 4\ 3\b\ 3\ 2\a\ 3\ 2\a\ 1\0\ 5\ 2\ 3\ 5IKJÃÃÃîîðûûý±°µ\ e\f\11\ 5\ 3\b\ 5\ 3\ 6\ 1\0\ 2\1d\1d\1d[[Yvvt\7f\7f}??=\0\0\0monîðÃþÿýüüúòòò¥¥¥\13\13\13\ 5\ 5\ 5\14\14\14\15\15\15\13\13\15\1d\1d\1d///***\15\13\14\b\a\ 5\ 2\0\ 1\ 2\0\ 1]]_²²´ÃÃÃñóòþÿýüþûÿÿÿ¹¹¹\ e\ e\ e\0\0\0\ 1\ 1\0\ 2\ 2\0\ 2\ 2\ 2\ 2\ 2\ 2\ 6\ 6\ 6\0\0\0000\83\83\83\81\81\81kkk )))ÃÃÃÿÿÿþÿÿúüûþÿýöøõJLI\13\15\12\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýúúú\ 4\ 4\ 4\0\0\ 2\ 3\ 3\ 5\0\0\ 2\ 3\ 4\ 6\0\ 2\0RXTÃÃÃêëÃùøýjgn \ 4\v\ 3\0\ 5\ 4\0\ 5\ 4\0\ 1\ 1\0\0762xytqrmXZU\v\r
+598Ãâáüÿÿüþýôôò¢¢ \16\16\16\12\12\12\1d\1e \19\1a\1c !%224FFFUSTTPOC?<\1d\17\17\f\b VTY¬²ÃÃÃðôõüÿÿûÿþòóõnoq\ 2\ 2\ 2\0\ 1\0\ 5\ 5\0\ 5\ 5\0\ 2\ 3\0\0\0\0\ 4\ 3\ 1\ 4\ 3\ 1\1d\1c\1aYXVomnxvw\13\13\15\13\13\15ª«Âúûýüÿÿúÿûûÿûïöînxm \10\b\ 1\ 3\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùüüúÿÿÿ\0\0\0\ 4\ 4\ 6\ 4\ 4\ 6\ 4\ 4\ 6\0\0\ 2\ 2\ 6\ 5TXWÃÃÃö÷ù÷õøMKP\ 3\0\ 4\ 6\ 1\a \ 4\b\ 5\ 3\ 4\ 2\ 2\0 !\1cHID`a\klg\19\19\17\13\15\14ÃÃ
Ãûýüüþûöõñ¯®ª\16\15\13\14\14\12\14\14\14\12\13\15\18\19\e$%'000:89B>=C?<IEB,+)QPU¬²ÃÃÃòö÷úþý÷ûúêëï;<@\0\0\ 2\ 1\ 1\0\ 5\ 4\0\ 1\0\0\ 2\ 1\0 \a\b\ 4\ 3\ 1\14\13\11\17\16\14653CABZXY.,/\r\r\ f\85\85\87õöøûüþüÿÿüÿýïôî\8d\94\8c\v\10 \ 1\ 3\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýýýý\ 1\ 1\ 1\0\0\ 2\0\0\ 2\0\0\ 2\ 1\0\ 5\ 5\ 4
+RQWÃÃÃùøöõôð984\ 3\ 3\ 1\ 4\ 4\ 4\0\ 1\0\0\ 4\ 3\0\ 2\0\f\ e\v00.TSQnjk0,-\b\ 6\a\8b\8b\89ÿÿûýü÷ðëå\9e\99\93\v\b\ 1\11\ e \r\f\b\v\v \v\b\v\r\f\f\ e\r\f\f\f\15\15\13"#\1e\1e#\1d\b\ e
+%),\86\89\8eÃÃÃëìîøúùþÿÿåæë\1f %\ 2\ 3\a\ 5\ 5\a\ 6\ 4\ 5\ 1\0\ 2\ 6\ 3
+\ f\f\13\v \f\15\15\13 \a \a\r\f
+.,-536\r\v\ ekinòïöþûÿÿýÿÿýÿñïò¥£¦\v \f\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûúúøÿÿÿÿÿÿ\0\0\ 2\ 4\ 4\ 6\ 5\ 5\a\ 5\ 4 \ 3\0\aPKRÃÃÃðìéöõðCD>\r\ f
+\ 1\ 6\ 2\0\ 4\ 3\ 5 \b\0\ 2\ 1\ 3\b\ 4\1e\1e\1c=;<OJN\16\11\15\ 1\0\ 2jjjÿÿýÿü÷òÃç}vn\15\ e\ 6\ 4\0\0\a\ 2\0\ 6\ 3\0\ 1\0\0\0\ 1\0\ 2\ 3\0\0\ 1\0\ 3\ 2\0\ e\ f \1c!\1a\a\ e\a \r\ e67;®¬¯ÃÃÃõôòþüýà Ãä$%*\ 1\ 2\ 6\0\ 1\ 5\0\0\ 2\ 1\0\ 5\ 4\0\ e\ 6\ 2\10\ 6\ 5\v\0\0\ 2\ 2\ 4\ 3\ 2\ 4\ 1\0\ 1\0\12\13\ e\18\17\15\ 4\ 3\ 1ecdðëïÿýÿÿúÿÿûÿóìó§ §\f\a\v\ 3\ 1\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýÿÿÿøøø\b\b
+\0\0\ 2\0\0\ 2\ 3\ 1\ 4 \ 2
+WPWÃÃÃïîéýþöcf_\14\16\13\b\f\r\0\ 2\ 5\0\0\ 4\ 4\ 5\a\a \b\10\10\10999QQS\15\16\1a\0\0\ 5ilqôõ÷ÿÿýÃý2+#\r\ 4\0 \0\0\a\0\0
+\ 3\0
+\ 3\0\a\ 3\0
+\ 6\0\b\ 4\0\ 6\0\0\ 6\ 2\0\10\10\ 6\0\ 1\0\ 6\ 2\ 3"\1c \92\89\8cÃÃÃúõòÿüùâáÃ%'&\0\ 2\ 1\0\ 2\ 1\0\ 1\0\ 1\ 2\ 6\ 1\0\f\0\0\f\0\ 2\ e\0\0\a\0\ 3\ 6\ 4 \ 5\ 1\ 4\0\a
+\0\0\ 2\0\0\ 2\0de]ðïëÿÿýýùøÿþýðì뤠\9f\13\ f\ e\ 3\ 1\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýùùùÿÿÿ\ 3\ 3\ 5\0\0\ 2 \v\ 1\0\ 2\ 4\0\ 2HBDÃÃÃèéäñóî|\81{\ 3\ 5\ 4\ 2\ 3\ 5\ 1\0\ 5\ 1\0\ 4\ 1\0\ 4\ 2\0\ 3\ 3\ 3\ 5\17\18\1a$()\ 6\v\ e\ 2\a\vcgjñòÃðîâvpZ!\16\0\e\r\0)\1a\08'\0B1\ 3E5\ 4@0\0?-\0=+\07$\01\1e\0/!\0\1f\11\0\18
+\0/"\11cWKÃúðìãûøñëêè"" \ 1\ 3\0\ 2\ 4\ 1\ 5\a\ 4\0\ 1\ 3\ 1\ 1 \ 1\ 3\ f\0\ 2\v\ 4\a\ e\0\ 1\ 4\0\ 2\ 3\0\ 2\0\0\ 5\0\0\ 2\0\ 2\ 5\0svmøùñÿÿúüý÷ÿÿúèçâ\9f\9e\99\13\12\ e\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýùù÷ÿÿÿùùù\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 5\ 3\ 4\ 6\ 2\ 3732»»»éëêðôó±µ´\v\r\f\ 5\ 5\a\a\ 1\ 5\r\ 3\v\ 6\0\ 4\ 5\0\ 5\b\ 6\v\ 1\ 5\b\0\a\ 6\0
+ \0\ 1\ 4lljóðî¨\86D7\ 2ZH\0{f\v \88\1e©\8b\19°\92\1a·\94\1c´\90\18²\8a\18¶\8c\1c·\8b ±\85\1a§}\r\8fj\ 2bF\0F2\0E:\r\9c\99zÃÃÃüýõððî@@@\ 2\ 1\0\ 1\0\0\ 4\ 3\0\0\ 1\0\0\ 1\ 2\0\ 3\ 6\0\ 1\0\a\a\a\0\ 1\ 5\ 1\ 1 \ 2\ 2\f\ 2\ 2\f\0\ 2 \0\ 3\ 6\9d¢\9eùüõþÿöþÿöþÿöãæÃ\8d\8e\89\ e\ e\f\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýýýýÿÿÿ\0\0\ 2\ 1\ 1\ 3\ 4\ 4\ 6\0\0\0\ 1\0\0\1f\1f\1d©ª¬à äçïóöÃáâ\19\19\19\ 4\ 3\ 1\ 5\0\ 1
+\0\ 5 \0\a\b\0\a\ 3\0\ 5\ 1\ 2\ 4\0 \ 1\0\ 4\0\b\ 3\0qcFñ\85\87t2\9b\81*»\9d/ç%ö$õ\18ó\11ò\ eî\rê\10ã¯\eç³"â®\1dè¶#ï%ê1Â\90*\87s\1dg]\18©¡pøóÃþøèzuo
+\ 5\ 2\ 3\0\0\ 3\ 2\0\ 4\ 5\0\ 4\ 4\ 4\ 1\ 1\ 1\ 6\ 5\ 3\ 1\0\0\ 4\ 2\a\ 1\0\b\ 3\ 1\ e\0\0\f\ 1\ 1\v
+\r\12ÃÃÃñöðûÿ÷þÿöûþõåèá{{y\f\f\f\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþ\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 3\ 2 \r\ e\92\95\9aÃâçòõúýþÿxyt\ 5\ 4\0\a\ 2\0 \0\ 3 \0
+\ 6\0\a\ 5\0\ 5\ 5\ 1\0\ 1\ 2\0\f\ 6\0.\15\0xT\bÂ¥}&»\92)Ã\9b"î$ê¸!ñÃ\1dð½\14ä´\bä´
+å¶\ eñ\ eà ²\14ãµ\1añ\1aä»%ð\1dõ'ô+ô0ç.«\8e*²\9bOòá³Ãû\10 \ 1\ 6\ 2\ 1\ 3\ 1\ 2\ 2\ 1\0\ 5\0\ 1\ 6\0\ 2\ 5\0\ 3\ 6\0\ 6\b\ 3 \ 1\0\ 4\ 6\ 4 \ 5\ 4 \0\0\ 2egfþÿýûýøýÿúýþùøøöÃÃÃQOR\ 2\0\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\0\0\ 2\ 3\ 3\ 5\ 4\ 4\ 4úúúÿÿýûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþ\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 2\ 4\0\ 2\ 1\0\ 4\ 2gjoÃÃÃ÷öûîîîÃÃÃ872\1c\e\19\b\ 3\a\ 5\0\ 6\b\0\ 6\b\0\0\10\ 3\0\18\v\0?+\0\91k\16´\85\1d¾\8c\e¶\83\ 4Ã\92\aä\fîµ\10ì´ ë¶\ 6é¶\ 3è¹ ä¶ Ã´
+õ\ fè\ 6·\90\0ª\86\0£~\0Â¥|\0½\91\0ð\19æº&ó+ô?³\95;øucU(\v\0\0 \ 1\0\v\ 3\0\v\ 1\0
+\ 1\ 4\b\0\ 6\ 4\0\ 4\ 3\0\ 4 \a
+\0\0\0\0\0\0"$!ÃÃÃøýùüÿýþÿÿÿÿÿééëÃÃÃ
+).\16\14\19\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\b\b
+\0\0\ 2\0\0\0ÿÿÿûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþ\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 3\ 2\0\ 3\0\0\ 5\ 1<=?ÃÃÃÃèìøó÷ÿÿýªªª\10\11\15\ 3\ 4\b\ 3\0\ 4
+\ 1\0\16\ 6\02\e\0lO\r\9f{%°\86"¬|\r£q\0®y\0Ã\9c\vå¯\11ñ»\13ð»\rú\aü\bë¾\vä¹\bà ¸ à º\ fì\ 3¶\92\0\9b{\0\92p\0\80Y\0\97o\0Ã\99\fò\eì¾ ã·\1aéÃ*ì$±\92\1diQ\0)\16\0\11\ 3\0\f\0\0\ 6\0\ 2\ 5\0\ 4\ 3\ 1\ 4\ 1\ 1\ 1\0\ 2\0\0\ 5\ 1"'#´º¶öüøûÿÿúÿÿüÿÿøüÿÃÃâ\91\90\95 \a\f\ 1\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 5\a\0\0\ 2\ 3\ 3\ 5\ 5\ 5\a\ 2\ 2\ 2ÿÿÿüüúûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþ\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 3\ 2\0\ 3\0\0\ 5\0&&$ \9e\9fåà äùôøûùüþþÿ\95\96\98\ e\ e\f\a\0\0\ e\0\0B*\0\8ci%\9ft\16¶\86\18¹\88\ f²\81\0Ây\0Ã\96\ 6å®\15ð¹\18îµ\fî¹\vð½\fëº\bè»
+å¼
+à ¸\bø\bô\aî
+ë\16à\15¨\83\0¯\89\0ã\ eõ\15ïÃ\16é¿ æ¼\ 6é¿\11ø\19ó(¯\93%s\\f0\1c\0\13\ 4\0 \ 2\0\a\ 5\0\ 4\ 3\0\b \0%& ³µ²ëïðûÿÿûÿÿùÿÿùÿÿéÃîÃÃÃJKM\b\a\f\ 4\ 3\b\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\0\0\ 2\0\0\ 2\ 2\ 2\ 2\0\0\0ÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþ\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\0\ 1\0\ 4\ 5\0 \b\ 4srpÃÃÃïÃòýúÿÿþÿùõò\8b\83v*\1d\0L5\ 1\91p#¤x\15·\83\rÃ\88\ 1Ã\98\ 3æ\ 6à ©\bô\ fî³\ró¶\ eïµ\vî´
+ðº\ fë·\fêº\ eëÃ\12ç¾\ eà »
+à »
+â¾\10â¼\19ø\1añ\15ó\13þ\15Ã¥Ã\13êÃ\11ëÃ\ féÃ\ eæÃ\11ã¿\13à ½\eú"ç\1c¼\99!\8dr\vQB\05,\00&\0tkLÃÃÃÿýÿÿûÿúøÿýýÿüÿÿêïëà å鮪\12\16\15\0\0\ 4\0\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3 \v\0\0\0\ 4\ 4\ 4þþüüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþ\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 5\ 1\0\b\ 4\ 3\ 1\0\0HHHÃÃÃÃÃãúøýü÷ôÿüÃÿõâ\8aN\90p\1dª\7f\17¸\84\fÃ\8e Ã\99\aä\ 3ãÂ\ 3õ
+î´
+ó·\vì²\ 6ôº\ eòº\ fñ»\10î¼\ fë½\10êÃ\11ìÃ
\12êÃ\10éÃ
\rçÃ\10éÃ
\19Ã¥Ã\eìÃ#ÃÃ$ïÃ!ôÃ!ñÃ\1aóÃ\1cëÃ\19èÃ\16ëÃ\17ëÃ\16ñÃ\eëÃ\16ëÃ\1cô\1dî-©\93&\90x £\8eKÃÃ\9fúèÃÿüóÿü÷þùóýúóêêà ÃÃÃSTN\a \ 6\0\ 1\ 3\ 1\ 2\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 6\ 6\b\ 2\ 2\ 4\0\0\ 2\b\b\b\0\0\0ÿÿýûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþ\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 1\ 6 \ 2
+\ 4\0\ 5\b\ 6\v\15\16\18\93\98\9bÃÃÃ
ææäýõèúêý£f\9e{!¯\84\13²\81\ 1Ã\88\ 1Ã\8f
+â\16ç²\18ã¯\ eç²\ eë¶\ eñ»\11è³\ 5ø\bè·\ 5ê» è¾\bå¼\bå¾\aèÃ\fìÃ\10ÃÃ\ fëÃ\12îÃ\1eìÃ"ñÃ,ñÃ+òÃ)÷Ã,ôÃ'óÃ&ôÃ*øÃ.÷Ã%ôÃ\1cóÃ\14öÃ\14êà ëÃ\ fã¶\13ä¶"é!Ã\9f(Ã\9e=¶\96IèkÃÃ\95òäÃèÃÃÃÃÃ\9e\98\8a\ f\v\ 2\ 3\0\0\ 4\ 3\ 1\ 6\ 4\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 4\ 4\ 6\ 1\ 1\ 3\0\0\ 2\ 4\ 4\ 4\ 3\ 3\ 3üüúÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþ\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 1\ 6\ 3\0\ 4\b\ 3
+\ 2\ 1\ 6\0\0\ 4EIJµ¶°ÃÃÃøèñ\97^\9bw#±\83\14¸\83\ 1Ã\8d\0Ã\92\ 2Ã\9f\13ä\15á«\13êµ\17ê¶\14ïº\14éµ îº\fî½\vç¹\ 4ê½\bé¿ çà éÃ\fîÃ\11ÃÃ\ fîÃ\10òÃ\18ïà ðÃ(òÃ-óÃ0ôÃ3ûÃ9üÃ:öÃ2úÃ6õÃ,úÃ(ùÃ\1døÃ\11ùÃ\ eùÃ\ fõÃ\vöÃ\10ùÃ
\1aéµ\13ÃÂ\12ÃÂ¥\18á"½\99+«\8c/£\889\8fx5\8bv?C1 \1c\f\0\r\ 4\0\ 4\0\0\ 2\ 2\0\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 5\ 5\a\ 3\ 3\ 5\0\0\0\0\0\0ÿÿÿûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüÿÿýÿÿýúúúûûû\f\f\ e\ 1\ 1\ 3\ 1\0\ 5\ 1\ 1\ 1\ 1\ 3\0\0\ 5\0\0\ 1\ 2\ 3\ 3\ 5\ f
+\a\9d\91\81ÃÃ¥«\8cU¡x(®}\17º\82\vÃ\89\ 3Ã\93\ 4Ã\9c\aã\fáª\ fè°\11ìµ\12ê´\fê¶
+ì¸
+ú ï¾
+ê¼\aë¾ å»\aêÃ\rå¾ ëÃ\11ÃÃ\11ïÃ\11ÃÃ\13ðÃ\1fñÃ'óÃ-óÃ3õÃ>÷ÃCøÃDøÃ?øÃ7÷Ã)õÃ\1côÃ\11öÃ
+øÃ\böÃ\fôÃ\11ôÃ\18ñÃ\18ðÃ\14ðÃ\14ÃÃ\13è¾\14à ³\18ì\1câ\1cÃ\9e!®\8a\18\8dj\ eX8\0 \0\ 4\ 1\0\0\ 5\0\ 1\ 3\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 5\ 5\a\0\0\ 2\ 4\ 4\ 4üüüÿÿÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüùù÷ýýûÿÿÿÿÿÿ\ 5\ 5\a\ 2\ 2\ 4\ 1\0\ 5\ 3\ 4\ 6\0\ 4\0\0\ 2\0\ 3\ 5\ 2\a\ 2\0\14 \0^J'\81c'\9bu$Â}\19º\83\ fÃ\87\bÃ\8d\ 6Ã\97 Ã\9e ÃÂ¥\aà ª å® ì³\fëµ\vî¹\vî»
+ì» Ã¼
+è¹\aïÃ\ fé¿\vîÃ
\11êÃ\ eîÃ\14ïÃ\14ñÃ\13ðÃ\17ñÃ!ñÃ)òÃ0óÃ6óÃ?õÃGöÃHõÃAôÃ4ôÃ&ôÃ\18õÃ\ e÷Ã\v÷à ÷Ã\föÃ\10õÃ\18õÃ\19õÃ\14óÃ\fóÃ
+÷Ã\ eøÃ\15òÃ\16æ»\14ã¸\eè\14á&£w Y:\ 1\14\ e\0\ 2\ 6\0\ 2\ 2\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5\0\0\ 2ûûûÿÿÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüÿÿýÿÿýûûûúúú\ 2\ 2\ 4\0\0\ 2\0\0\ 4\ 2\ 1\a\ 5\ 5\r\0\0\ 4 \ 4\0\v\0\0-\1c\0yb\1e\94u\e z\ f³\82\v¾\87\ 6Ã\8b\ 6Ã\90\bÃ\9a\ eá\ fé\vå°\fç± ë² ç±\ 6ëµ
+ê¶\bçµ\ 6ìº\vê» îÃ\ eêÃ\fïÃ\10ìÃ\rïÃ\12ðÃ\12ñÃ\13ñÃ\19óÃ'óÃ2ôÃ;õÃ?öÃ@øÃBøÃB÷Ã>óÃ0ôÃ&õÃ\eöÃ\13÷Ã\13÷Ã\11ùÃ\røÃ\fôÃ\röÃ\13ûÃ\14ûÃ\14ûÃ\16üÃ\17øÃ\11ðÃ\ fõÃ\1dõÃ&æ¹ ê»1à*\96q\18@1\0\12\ e\0\ 3\ 3\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\0\0\ 2\a\a \ 2\ 2\ 4\ 2\ 2\ 4ÿÿÿþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüúúøúúøÿÿÿýýý\ 3\ 3\ 5\ 3\ 3\ 5 \b\r\0\0\ 5\0\0\v
+\ 3
+\r\0\06#\0pX\12\97x\e£\7f\11¨~\ 5·\86\ 5Ã\8a\ 3Ã\8d\ 4Ã\93\bÃ\9b\10ã\11â¬\véµ
+÷\fï·\fê´ Ã·\fù\rê¸\vî¿\11ðÃ\12é¿\vèà îÃ\ fëÃ\fÃÃ\ fîÃ\12ïÃ\13òÃ\1eòÃ-õÃ;öÃB÷ÃEøÃBøÃ?÷Ã:öÃ3óÃ'õà öÃ\e÷Ã\17öÃ\16øÃ\14ùÃ\ fùÃ\ eûá\12øÃ\ føÃ\10õÃ\ fðÃ\rðÃ\r÷Ã\12üÃ\1aöÃ\1dýÃ.ùÃ0õÃ1ç´'Ã\9d)u]\15"\19\0\ 6\ 2\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\ 3\ 3\ 5\ 3\ 3\ 5\ 4\ 4\ 6ûûûùùùþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüûûûÿÿÿ\0\0\ 2\0\0\ 2\0\0\ 4\ 4\ 2\a\b\ 3
+\v\0\0&\11\0~`$¤\7f$¡w ª{\ 5³\81\ 4¼\87\ 5Ã\8e\aÃ\92\vÃ\97\rÃ\9d\13á¥\ fáÂ\ 1æµ\0êµ\ 5î¶ ëµ
+ñ»\10ð¼\11ì¹\ eì¾\10ëÃ\ fêÃ\vêÃ\vÃÃ\ eÃÃ\ fëÃ\ fîÃ\13îÃ\16òÃ$òÃ6ôÃB÷ÃGøÃHùÃFøÃ>õÃ/õÃ"õÃ\19öÃ\17õÃ\18õÃ\17öÃ\14öÃ\14øÃ\14õÃ\12ïÃ\aõÃ\fûÃ\12úÃ\13ôÃ\10òÃ\ fóÃ\11ôÃ\17ñÃ\1eõÃ)ÿÃ:ûÃ3ñ¼"ë$\98z$6%\0\b\ 2\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 4\ 4\ 6\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2ÿÿÿÿÿÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýüüúÿÿÿúúú\b\b
+\ 4\ 4\ 6\0\0\ 4\b\ 6 \a\0\ 1\r\0\0N2\ 2\96o ¢q
+®z\ 2½\87\vº\83\ 2½\87\ 1Ã\8f\aÃ\96\ eÃ\9d\13æ¤\18æ©\12ã¯\ 3æµ\0êµ\ 3ë¶\bé³\bì¸\rú\11êº\ eì¾\10éÃ\fìÃ\rëÃ\fÃÃ\rìÃ\ eêÃ\11ïÃ\1aÃÃ\1cðÃ*õÃ?÷ÃIùÃIùÃGùÃBúÃ9÷Ã&õÃ\16öÃ\12õÃ\ fôÃ\12ôÃ\14õÃ\13õÃ\13ôÃ\12óÃ\10øÃ\11ùÃ\10øÃ\10óÃ\ fòÃ\13òÃ\1aäÃ
\13ñ\ 6ò\vî\rñÃ(ûÃ,ô¿\eã\15\99z @.\0\b\ 2\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 5\ 5\a\ 6\ 6\b\0\0\0ûûûþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúþþüüüüÿÿÿûûý\ 2\ 2\ 4
+
+\f\ 3\0\0\b\0\06"\a\82` ¢s\17³y\v¹x\0¶y\0Ã\8b Ã\8a\0Ã\93\ 4Ã\9a\rã \13é¦\17è«\14æ± é·\bî»
+ð»\rì¶\vì¸\rî»\12ÿ\12ðÃ
\14ÃÃ
\ eêà êÃ\bêÃ
+ìÃ\11êÃ\14ñÃ!ïÃ'óÃ4øÃDùÃIúÃGøÃ@ùÃ6øÃ*÷Ã\1eöÃ\13öÃ\röÃ\föÃ\rõÃ\10óÃ\11óÃ\11óÃ\ fôÃ\røÃ\røÃ\ eùÃ\11÷Ã\18ðÃ\eù\16»\94 \9fw\0Â\86\0½\94\0á³\15ôà óÃ\17Ã\9e\14\88h\e3 \0\b\ 1\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 4\ 4\ 6\0\0\0ÿÿÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýûûùÿÿÿýýýþþÿ\ 4\ 4\ 6\0\0\ 2\b\ 4\ 1\13
+\0G1
+\93n\1e¤q\b»y\bÃ|\ 3Ã\81\ 6Ã\84\ 1Ã\91\ 2Ã\98\ 6Ã\9c\fã \11ç¥\11æª\ eå°\fé¶\vè´\ 6ì· éµ ë¸\rý\11ÿ\11ìÃ\ eå¿\ 6êÃ\aèÃ\ 6éÃ
+ìÃ\14ëÃ\1aõÃ-ñÃ2÷Ã=øÃBøÃB÷Ã=ôÃ1ôÃ$õÃ\1cõÃ\15ôÃ\ föÃ\ f÷Ã\ eøÃ\ f÷Ã\ eôÃ\ fóÃ\ fôÃ\f÷Ã\ e÷Ã\10óÃ\12öÃ\eñÃ\1fï\11´\8b\0¡r\0\9eo\0©{\0Ã\96\ 2é\và ¬
+é\a¿\94\11uX\14!\11\0\ 6\ 2\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\a\a \0\0\ 2\0\0\ 2 ùùùþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 2\0\13\b\0ZF\13\9au\1aÂy ºw\ 4½u\0Ã\84 Ã\89\ 5Ã\93\ 3Ã\9d\ 6Ã\9b\bå¥\10è©\fä©\aì·\13ê·\ eì¸\fï¹\ eï»\10î»\10ì½\ fé¾\rëÃ\vêà èÃ\ 4éÃ\ 6êÃ\ròÃ\eïÃ#ðÃ1îÃ7òÃ=ñÃ5÷Ã6øÃ.öÃ#óÃ\14ñÃ\ f÷Ã\14øÃ\13ôÃ\ f÷Ã\12ùÃ\10òÃ\vòÃ\võÃ\ eñÃ\bóÃ\rñÃ\15ôÃ#çº!¸\89\0ªz\0·\86\ 5µ\81\a½\8a
+ã\10Ã\9c\0è\ eä\ fÃ\9d\vº\90\1agN\ e\18\f\0\a\ 2\0\ 1\ 1\ 3\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 4\ 4\ 6\ 2\ 2\ 4\ 5\ 5\a\0\0\ 2\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 3\ 5\ 5\a\0\0\ 2\ 5\ 5\a\ 1\ 1\ 3\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6\0\0\ 2\ 5\ 5\ 5ÿÿÿÿÿÿúúúþþüÿÿýüüúÿÿýûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 2\0\1c\13\0eR\18\95s\11«z\ 4¶u\ 1¾w\ 1Ã}\ 2Ã\8d\bÃ\97\ 5Ã\9f\aÃÂ
+è©\10ëÂ
+è¯\ 6ë¶\ eå² ë·\fë·\vë¸\réº\fé¼\vêÃ
+ÃÃ
\vÃÃ
+ìÃ\aêà ëÃ\ eïÃ\1cîÃ(òÃ6õÃBøÃCøÃ9øÃ,òÃ\1dòÃ\15óÃ\ fôÃ\røÃ\11õÃ\ eûÃ\16øÃ\13öÃ\ fóÃ
+÷Ã\10öÃ\13ñÃ\ fõÃ\eðÃ%¿\9a\ 1¨z\0®|\0¹\87\ 2Ã\92\rÃ\97\13Ã\9b\10à\ 6à\ 2Ã\9d\ 6Ã\9f\ fã\15²\89\17YA\ 5\19\ f\0\ 6\ 1\0\ 1\ 1\ 3\ 1\ 1\ 3\ 4\ 4\ 6\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\ 4\ 4\ 6\ 4\ 4\ 6\0\0\0\ 3\ 3\ 3þþþÿÿÿÿÿýüüúüüúÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 2\ 2\ 2\ 4\ 5\ 2\0\10 \0iY\1e\9a|\1c¦{\b´x\ 6Ã\82\fÃ\87\vÃ\93\ eÃ\99\ 6Ã\9d\ 4ã\vå©\væ¬\ 2ö\ 4ñ¾\rù\vù\rì¸\rë¹\féº\fê½
+éà ëÃ
\bêÃ\aîÃ
+ëÃ\fîÃ\13ÃÃ\1añÃ+õÃ7ùÃDùÃBöÃ/÷Ã#óÃ\14ôÃ\11ôÃ\11òÃ\røÃ\ fùÃ\ eõÃ
+ðÃ\ 5øÃ\ fûÃ\14öÃ\12öÃ\1aÃÃ\1dû\1dª\87\0\95o\0®\82\0Ã\91\bÃ\98\ 6Ã\9a\ 6Ã\92\0Ã\9f\bÃ\9f\ 5ã Ã\97\ 4Ã\9d\væ\12¶\8c\14YA\ 5\1a\ f\0\a\ 2\0\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\ 5\ 5\a\ 1\ 1\ 3\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\0\0\ 2\0\0\ 2 \v\0\0\ 2\0\0\ 2\ 4\ 4\ 6\0\0\ 2 \0\0\0ýýýÿÿÿþþüüüúÿÿýûûùüüúüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 2\ 2\ 2\ 4\ 5\ 2\0\10
+\0XJ\19\90w%\9fy\14³\80\13¸\7f\vÃ\8c\ fÃ\97\10à\fÃ\9f\ 5à ¨\vä«\ 6ã«\0é²\0ø\bîº\fù\rîº\ eî¼\ fþ\ eîÃ\fëÃ\vêÃ\açÃ\ 5ÃÃ\vëÃ\ eñÃ\18îÃ\eôÃ,ôÃ3÷Ã=õÃ5ñÃ"öÃ\1cõÃ\13øÃ\13õÃ\12ðÃ\röÃ\ føÃ\ fúÃ\11öÃ\rõÃ\11ïÃ\ eðÃ\18ôÃ#ÃÂ¥\10¡x\0\99s\0´\8c\bÃ\94\vÃ\96 Ã\9a\ 5Ã\98\0Ã\9f\aá¦\fÃ\9f\bÃ\9d
+Ã\99\bÃ\9a\vÃ\9f\ e¼\93\1d]G\r\14 \0\ 5\ 2\0\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 6\ 6\b\ 5\ 5\a\ 5\ 5\a\0\0\ 2\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 3\ 3\ 3\ 5\0\0\0\ 2\ 2\ 2\ 2\ 2\ 2ýýýÿÿýÿÿýþþüüüúÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 2\ 2\ 2\ 4\ 3\ 2\0\a\0\0?1\16r]&\89i\1c¡w\15³\83\14Ã\97\1cÃ\99\11ä\10á\ 3ê\ 4æ°\ 6é±\ 6ì´ Ã´\r÷\ fì¸\fù\vî¼\rÃÃ\rÃÃ\rîÃ\ eÃÃ\fêÃ\fÃÃ\ fìÃ\13ñÃ\19îÃ\eöÃ(õÃ+öÃ/ñÃ%õÃ\1cøÃ\18õÃ\15øÃ\16öÃ\11òÃ\ròÃ\ fîÃ\fóÃ\11ôÃ\14òÃ\16ñÃ\1cç¼ ·\88\0\96e\0¬}\0¸\8e\0Ã\96\ 2á\10Ã\98
+Ô\ fÜ£\14Ó\aÝ\ eÛ\ fÖ
+Ã\9b\rÃ\98\fÃ\9c\15´\8b!M:\ 2 \ 3\0\ 3\0\0\ 2\ 2\ 4\ 6\ 6\b\ 3\ 3\ 5\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\ 1\ 1\ 3
+
+\f\0\0\ 2\0\0\ 2\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5 \v\0\0\ 2\ 3\ 3\ 5\a\a\a\ 2\ 2\ 2\ 2\ 2\ 2ÿÿÿÿÿýúúøýýûÿÿýûûùúúøþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 2\ 2\ 2\ 4\ 3\ 1\ 2\ 4\0\0\e\ f\ 33 \0M4\0_<\0\87]\0³\85\15Ã\9e!è\1eé\ fë\ 2æ²\ 6÷\rð·\10ñ¸\13ò¹\12ï»\ fî½\vì½\vì¿
+ëÃ\vìÃ\rÃÃ\10îÃ\12ÃÃ\14îÃ\15ðÃ\1aïÃ\1aóà ôÃ!õÃ"ôÃ\1eöÃ\16ùÃ\15öÃ\14÷Ã\13óÃ\fñÃ\fòÃ\12îÃ\15óÃ\1fëÃ\1féÃ!à\v¢r\0\9fl\0³\80\ 1Ã\8c\bÃ\99\bÃ\9a\ 3Ã\95\ 5Ã\9c\ eÃ\98\fÃ\96
+à\13Ã\9a\vÃ\9f\10Ã\9c\rÃ\9b\ fÃ\97\14Ã\97'\90j\15.\1d\0\ 6\ 3\0\ 4\ 3\0\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\11\11\13\1d\1d\1f""$\19\19\e\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 6\ 6\b\ 4\ 4\ 6\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\0\0\ 2\a\a \ 2\ 2\ 4\0\0\0\0\0\0\ 5\ 5\ 5ûûûÿÿýüüúÿÿýÿÿýüüúÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 2\ 2\ 2\ 4\ 3\ 1\ 2\b\ 2\ 2\a\0\0\17\a\0I2\12^B\ 1hD\0\83V\0ªy\10Ã\97\1dê\1cà ¯
+æ´\aö\11ô\ fñ¶\10ð·\ eñ½\ fð¿\vïÃ\fÃÃ\vìÃ\fÃÃ\ fïÃ\15ñÃ\18îÃ\19ïÃ\1aïÃ\eóÃ\1dòÃ\19ôÃ\17óÃ\14÷Ã\15óÃ\ eúÃ\14øÃ\ eõÃ
+ïÃ\ 6ìÃ\aëÃ\10Ã¥Ã\16éÃ+ã\e¤v\0\91_\0£p\0º\86\fÃ\8e\aÃ\97\fÃ\99\vÃ\93\ 5Ã\99\10Ã\9a\ fÃ\9a\rã¢\12à\rÃ\98\ 4Ã\9d\ 5Ã\9a\ 6Ã\96\bÃ\92\1c°},Y3\ 2\17\b\0\ 5\ 4\0\ 5\ 5\ 5\ 1\ 1\ 3\ 3\ 3\ 5\0\0\ 2\ 1\ 1\ 3\ 4\ 4\ 6\ 5\ 5\a\1e\1e ggiwwy[[]((*\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\0\0\ 2\ 1\ 1\ 3\0\0\ 2\b\b
+\ 1\ 1\ 3\0\0\ 2\ 3\ 3\ 5\ 3\ 3\ 3\ 6\ 6\ 6\0\0\0\ 5\ 5\ 5ÿÿýüüúÿÿýüüúûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 1\0\ 6\ 1\0\f\ 1\0(\16\ 2[@\11jI\ 6tH\0xF\0\9dj\ 1Ã\97\17ì\13ä·\13ì»\18ë´\11ö¹\13õ»\11ú ì¾ îÃ\fîÃ\ eïÃ\12ñÃ\17òÃ\1dóÃ!ïÃ\1cïÃ\eïÃ\19öÃ\1dòÃ\15óÃ\12ðÃ\ eõÃ\12õÃ\11øÃ\13ñÃ\rÃÃ\ fëÃ\13çÃ\19þ\eë\15\99q\0xK\0\91^\0¹\83\17½\86\12Ã\8d\ eÃ\99\ eÃ\97\aÃ\95\ 6à \9d\11Ã\96\rÃ\95
+Ü\v×\ 6Ø
+Ã\9f\fÃ\93\ 2¾\8d\ 2»\8b\r´\88%\87]#' \0\v\ 2\0\0\ 1\ 3\ 2\ 2\ 4\0\0\ 2\ 6\ 6\b\ 3\ 3\ 5\ 4\ 4\ 6\ 1\ 1\ 3\0\0\ 2\18\18\1a[[]~~\80{{}iik557\1d\1d\1f\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 2\ 5\ 5\ 5\0\0\0\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 3\0\0\0\ 3\ 3\ 3\0\0\0ÿÿÿÿÿýûûùþþüÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 3\ 2\0\ 4\0\ 2\ 3\0\ 5\0\0\1a
+\0H-\ foK\etG\ 6zK\0\7fP\0\91g\0¾\97\16ñ\1eä¸\19îº\16ö¹\13ö¹\11òÃ\11ÃÃ\ fè¿\vêÃ\10òÃ\1dõÃ#óÃ%óÃ%óÃ#òÃ\1eòÃ\19ðÃ\12îÃ\ eÃÃ\fðÃ\11óÃ\16ÃÃ\ fñÃ\19æÃ\18ÃÃ\1cõ#ã \96s\0sK\0\87\\0\9eo\0³\7f\ 5Ã\89\bÃ\93\vÃ\97\vÃ\98 Ã\99
+Ã\9d\vÃ\99\aÃ\9a\vÃ\9f\11à\11Ã\9f\10Ã\9c\ fÃ\95\ e¸\85\b°\82\12®\85)\9e}8`G\1e \13\0
+\v\ 6\0\ 3\ 6\ 1\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\0\0\ 2\15\15\17DDD\80\80\80xxx~~~ttt^^^,,,\11\11\11\ e\ e\f\ 3\ 3\ 1\ 5\ 5\ 3\0\0\0\ 2\ 2\ 2\ 2\ 2\ 2\ 5\ 5\a\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 1ýýýÿÿÿüüúþþüþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 3\ 2\0\ 3\0\ 3\b\ 4\ 3\ 2\0\15
+\ 4.\19\b^?"|V'|S\13~U\ 6wP\0\80\\0¹\93\14ÃÂ¥\18à ®\19ï´\1còº\eê»\13ðÃ\19óÃ\1eòÃ\1fñÃ!ñÃ'òÃ)òÃ*õÃ(õÃ$ðÃ\19ÃÃ\15ïÃ\18óÃ\1fïÃ"èÃ\1eâÃ\16÷\13ã\r«\87\0\84`\0oI\0|R\0\9co
+¯|\ f»\87\11Ã\90\rÃ\95
+Ã\97\aÃ\99\aÃ\9a\vÃ\9e\ fÃ\9a\bÃ\9b ÃÂ¥\14ä\16Ã\97\10Ã\95\15Ã\90\1a¯\80\14³\88,²\8cA°\91Z«\95lª\9e\84;7+\1a\1c\17\0\ 4\ 4\ 1\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 3\ 3\ 5\16\16\18,,,bbb}}}\7f\7f\7f\81\81\81}}}iii___IIG#$\1f\v\v \ 2\ 2\0\ 4\ 4\ 4\ 1\ 1\ 1\ 3\ 3\ 5\ 1\ 1\ 3\0\0\ 2\ 5\ 5\a\ 2\ 2\ 2ýýýÿÿýÿÿýúûöÿÿûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 2\ 4\0\ 1\ 4\0\ 1\ 2\0\ 2\ 1\ f\v\b\1f\16\11VF9\90x^\88l<~`\17wU\0|U\0oE\0\96h\0¼\8b\15Ã\9a\1aç\19á¹\19çÃ\19êÃ\1eèÃ\1eçÃ\1fîÃ)ðÃ-êÃ'Ã¥Ã\1eçÃ\1dêÃ\1féà æÃ%ö#â\1e¼\91\11§x\0\95e\0\87X\0\8b[\0\9ai\ 2¢o\ 6«w ¸\81\fÃ
\8a\fÃ\8b\bÃ\91\rÃ\94\fÃ\94\bÃ\96\aÃ\99\aÃ\9b\bÃ\9c\fÃ\9d\ eÃ\98
+Æ
+Ã\8e\11º\8b\1f¹\8f;Ã\9b\ì\83ì\92ø¦Ã¸¬¾·Â\95\92\8b !\e
+\v\ 6\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 3\ f\ f\ f%%%GGG~~~}}}\7f\7f\7f\82\82\82\85\85\85\83\83\83||zUUS!!\1f\ 1\ 1\0\ 5\ 5\ 5\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6\ 4\ 4\ 6\ 3\ 3\ 5\ 3\ 3\ 5ûûûþþüüüúÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 2\ 6\0\ 2\a\0\ 1\ 4 \v
+\ 5\ 5\ 3\ e\f\rTOL¨\9f\90¸©\88|f*\7fb\12\89a \85X\0{J\0yI\0\80U\0\97n\0²\8c\0¶\93\0¿\9c\ 2á\aæ\vî\15ÃÂ\17¿Â
+¾\9c\ 5¹\96\0³\90\0¯\8a\0£z\0\90e\0\83T\0\83Q\0\9ei\0§o\0±x\ f³z\11Ã\86\eÃ\89\18Ã\8e\13Ã\8d\vÃ\93\fÃ\90\bÃ\93\ eÃ\94\ eÃ\91\rÃ\93\fÃ\96
+Ã\92\ 5Ã\97\11Ã\8a »\87\rµ\87\18±\89*Ã\9eTô\82÷\98û¯Ã½ºÃ¿Ãþ¿¶µ³¹¸¶bc^\17\18\13\ 3\ 3\ 3\ 4\ 4\ 6\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\ 1\ 1\ 3\0\0\0\ 5\ 5\ 5\ f\ f\ f###fff\81\81\81\82\82\82\80\80\80\7f\7f\7fzzz\85\85\83wwu442\0\0\0\ 1\ 1\ 3\ 5\ 5\a\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\a\a þþþýýûýýûÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 1\ 6\ 3\ 4 \ 1\ 2\ 6\a \b\0\ 2\0\ f\13\12v{w³´¬Ãî·ª~{f'\89e\19\94h\11\9bl\12\88Z\0}S\0\81[\0\89`\0\8df\0\96o\0\97r\0\91l\0\90k\0\92l\0\90j\0\8ef\0\8bd\0\91f\0\99m\0 q\0¤s\0®{\0¼\85\ e½\84\11¼\80\ e¾\81\ e¾\82
+È\ eÅ\ 5Ë\bÏ
+Ñ
+Ï
+Ã\94\ fÃ\91\ eÃ\8e\rÃ\91\13Ã\91\13Ã\89\r»\83
+·\84\17¯\83,º\94Sñ\86ù Ãº¬Ãþ¿º¶Ã½º¹µ´¿¾¼Ã¿Ãºº¼¦§«'+.\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 2\ 1\ 1\ 1\0\0\0\f\f\fAAA}}}\83\83\83\84\84\84\80\80\80~~~\81\81\7f||zKKK\1d\1d\1d\v\v\r\ 5\ 5\a\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4ùùùÿÿÿÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\0\ 5\ 2\ 2\ 4\0\0\0\ 6\b\ 5$)%¯µ±¹¾¸¸ºÂü¢½¬\81\81c%\8eg\1a\91e\f¢v\15¦|\1a¦|\18Â¥z\11¬\81\10·\8f\15½\96\13¸\92\v²\8c\ 5µ\8e\v¹\92\13´\8b\ f¸\8c\11¼\8c\10½\8c\fÃ\8c\fÃ\8f\rÃ
\8e\rÃ
\8b\rÃ\92\17Ã\8e\14Ã\8d\10Ã\8e\fÃ\93\fÃ\90\aÃ\93\ 5Ã\99
+Ã\90\ 1Ã\91\ 6Ã\92\vÃ\8e\ eÃ
\89\rÃ\85\11Ã\80\10¶{\13°\82$²\8b>ák÷\95ÿ°ÃÃÃÃÃÃÃÃÃÃÃÃÃÃþ¿º¾¿º¾¾¾Ã
Ã
ñ²·<=B\0\0\ 4\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 5\ 5\ 5\ 1\ 1\ 1\ 3\ 3\ 3\ e\ e\ e***hhh~~~\83\83\83\7f\7f\7f\82\82\82\84\84\82||zqqq```&&(\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 5\ 5\ 5ýýýýýûüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\0\ 5\ 3\ 4 \ 5\ 6\14\10\r..&½¾¶¿Ã»Ãûºµ¯Ã·¦¥\8ed\85f#\90k\10\9cq \95h\ 1\9bl\ 4\9em\ 4¬} Ã\96\11ÃÂ\eá»\1cú\14ó\10ó\14ê\14è\17à\15Ã\98\10Ã\94\ fÃ\97\12Ã\94\12Ã\91\fÃ\91\vÃ\98\ fÃ\95\10Ã\92\rÃ\8f
+Ë\vÉ\ 5Ê\ 4Ì\ 4Ë\ 6Ç
+Ã\8e\ e½\86\11²|\10±z\16¯\80.°\92^ö\95Ãçö¤Ã½³ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÿý¸»´½¾¹¾½»¼º½TRU\ 4\ 4\ 6\ 4\ 4\ 6\0\0\0\ 2\ 2\ 2\ 2\ 2\ 2\0\0\0\ 5\ 5\ 5\ 1\ 1\ 1\0\0\0
+
+
+\19\19\19BBBwww\82\82\82}}}|||\83\83\81||zzzzsss224\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 6\ 6\b\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 3þþþûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýýýÿÿÿ\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 3\ 4\ 3\0\0\10\f\r\1f\19\19>;4¹¶¯¾½¹¼»¹½¸¼½³±Ã¼£\9f\87W\89h\e\8de\ 6\97g\ 3\9ej\ 4\9fj\ 4«w º\89\bÃ\9d\fï\ fó\vò
+à µ\10ë\rÃÂ¥\ eà\ eÃ\9a\rÃ\96\fÃ\94\rÃ\96\11Ã\99\12Ã\99\fÃ\98
+Ã\8f\ 4Ã\92\vÃ\90\vÃ\91\ eÃ\8a\ 5Ã\8b\ 6Ã\8e\ 6Ã\8a\ 4»\84\ 3µ\82\f®\82\19§~$°\8a?ânü¥Ã¼²¿»°Ã÷ÃþÃ
ÃÃÃ
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
Ãú»µÃü¿»ºvrs\ e\f\ f
+
+\f\ 2\ 2\ 2\ 5\ 5\ 5\ 2\ 2\ 2\0\0\0\ 5\ 5\ 5\ 1\ 1\ 1\ 3\ 3\ 3\b\b\b\a\a\a\11\11\11ccc}}}\83\83\83\83\83\83{{{wwu]]]MMM&&(\a\a \ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\0\0\0\ 3\ 3\ 3ÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿý÷÷õÿÿÿÿÿÿþþÿ\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 1\0\0\ 6\ 2\ 3\r\b\f*%)>8:³ÂÂü»¿»¼Ã¿Ã·³´Ã½¶Ã· ¢\86W\8bd\1f\95f\f\9eh\ 4\98`\ 1¡j\ 6²}\v¾\8b\fÃ\9f\17â\11è\15è\16ÃÂ¥\13à\ fÃ\9d\fÃ\9b\vÃ\98 Ã\94\aÃ\91 Ã\91 Ã\90\ 6Ã\94\ 6Ã
\90\ 4Ã\90\ 6½\87\ 1Ã\87\ 6Ã\82 Ã\83\ eÃ|\ 5Ã\7f ¹\80\rÂ~\16«\886ª\92V»«\89ý«½½µ¹»¸½¾¸¶¹²º½´¹¼µÃÿÃÃÃ
ÃÃÃÃÃÃÃÃÃÃÃ
ÿ¾ºÃþ¾º¹¨¤£ \1e\1f\ 2\ 2\ 2\b\b\b\0\0\0\ 3\ 3\ 3\ 4\ 4\ 4\ 3\ 3\ 3\ 1\ 1\ 1\ 3\ 3\ 3\ 2\ 2\ 2\0\0\0\f\f\fNNN\80\80\80}}\7f\81\81\81{{{kkkJJJ###
+
+\f\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 4\ 4\ 6\0\0\ 2\a\a \ 5\ 5\ 5\ 1\ 1\ 1\0\0\0ÿÿÿÿÿýüüúÿÿýýýûÿÿýýýûúúøÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýÿÿÿÿÿÿ\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 6\ 2\ 3\a\ 3\ 4
+\b\v#!$425ª¨©Ã¼½ÃÃúº¼½½¿»¹ºÃº±Ã³\9a¬\8c]\90f\1e\90^ \99b\ f\9fh\ e£l\a²}\v¿\89\rÃ\96\12Ã\94\ eÃ\94\rÃ\96\ eÃ\95
+Ã\92\ 6Ã\92\ 6Ã\92\ 6Ã\90\aÃ\8d\aÃ\8d\bÃ\8c\bÃ\8a\ 5¾\85\0Ã\88\ 5¾\84\ 6¾\82\b·x\ 6¶t\ 6½z\11¸z\15¸\83'±\8a;½¤kû\98þ¯º¿»µ·¶¸º¹¾Ã½¸½·º¿¹º¿¸ÃÃÃ
ÃÃÃÃÃÃÃÃÃÃÃà ÃÃÃÃÃüº»ÃÃùºµkkk\ f\ f\ f\ 2\ 2\ 2\b\b\b\ 4\ 4\ 4\0\0\0\0\0\0\ 6\ 6\ 6\ 2\ 2\ 2\ 4\ 4\ 4\ 4\ 4\ 4\v\v\v666XXX]]_qqskkkWWW555\13\13\13\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2 \v\0\0\ 2\ 2\ 2\ 2\ 6\ 6\ 6\0\0\0üüüüüúüüúþþüþþüûûùÿÿýüüúÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüúúúúúú\ 3\ 3\ 5\ 5\ 5\a\0\0\ 2\ 4\ 4\ 6\ 3\0\0\ 3\ 1\ 2
+\f #($6:9§«ª»»»¼¼º»¼·»½ºº¼»¾º·Ã¼³Ã±\99Â\8c_\8fg*\8d\\17\94a\ e\97e\ 6Â¥r\ 5ªw\ 1¸\85\ 6¿\88 Ã\90\ fÃ\8b\vÃ\8c\fÃ\8c
+Ã\8d\vÃ\8d\vÃ\8c\rÃ\89\ eÃ\86\rÃ\84\r½~
+¶w\ 6¸v\ 6²p\0³q\ 1³t\ 3¶|\11°z\1a²\833°\8aLé|ý Ã
ÿõ¹¿µÃ½º¿¹¹½»¼»½¼ÃÃÃ
ÃÃÃÃÃÃÃÃÃâà ãìçÃðèóøòüÃêñÃÃÃÃÃÃÃÃ쮫 \b\b\b\0\0\0\ 1\ 1\ 1\ 3\ 3\ 3\0\0\0\ 4\ 4\ 4\0\0\0\ 2\ 2\ 2\ 2\ 2\ 4\ 1\ 1\ 3\12\12\14\1d\1d\1f##%AACFFH224\17\17\19\ 4\ 4\ 6\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 4\ 4\ 6\ 5\ 5\a\0\0\ 2\a\a \0\0\ 2\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 2ûûùÿÿýÿÿýÿÿýÿÿýÿÿýûûùûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýÿÿÿÿÿÿ\ 1\ 1\ 3\ 4\ 4\ 6\ 2\ 2\ 4\0\0\ 2\ 6\ 4\ 5\ 2\ 2\0\ 4 \ 3\e"\e1;3¦Â¦¼¾»»½¸¾Ãº·¹´½¿¼»»¹·¯¬Ã»°Ã·\9f®\90j\8ei4\87_\19\8ba\r\90f\ 2\9es\ 3¡r\0¬z\ 1±z\ 3´|\ 5·|\b¸}\a¸}\a¹~
+·~\v´{
+°v\bÂp\ 5ªk\ 2Â¥d\0«j\ 6«j\ 4®p\v¬w\11®\7f#²\8b>³\94[ì\8aü©Ã¼²¾¾¶¯²§¿Ã¸º²°Ã¶ºÃ
¿ÃÃ
ÃÃÃÃÃÃÃÃáåäÃïîððòøöûõð÷ÿüÿüûÿþÿÿæëåÃÃÃÃÃÃTTT
+
+
+\0\0\0\ 1\ 1\ 1\ 5\ 5\ 5\ 1\ 1\ 1\ 1\ 1\ 1\ 2\ 2\ 2\ 3\ 3\ 3\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 3\ 1\ 1\ 3\16\16\18\1a\1a\1c\ f\ f\11\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\0\0\ 2\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 4\ 4\ 4ÿÿÿýýûýýûûûùþþüøøöÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýööö\ 3\ 3\ 3\ 5\ 5\a\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 5\ 5\ 5\ 1\ 3\0\ 3\b\ 1\15\1d\12-5*¢ª\9fº¿¸¼¾¹Ãý¼½¸½¾¸¾¿·¾»²Ã¹¯Ã
»²Ãºª¹¡\7f\91vA}`\1c\81a\f\8cj\b\88b\0\96j\0¤t\b£n\ 6¦o\b§p ¦o\b¦o\b¤o ¢n  l\a\9be\ 3\9cd\ 3\9ba\0\9de\ 4\97b\ 2\9cm\13£},¬\8fK¹¥sû\9eûÂÃý¼º»¼º»Ã¾¹½¸µÃ¼¾Ã¼ÃþÃÃÃÃâÃáñïôõôúôóùûüÿüþýüÿûò÷ðûÿúüþûøùûÃÃáÃÃ⢢\16\16\16\b\b\b\ 4\ 4\ 4\ 3\ 3\ 3\ 2\ 2\ 2\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 5\ 5\a\ 2\ 2\ 4\0\0\ 2\ 6\ 6\b\ 3\ 3\ 5\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 4\ 4\ 6\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 5\ 5\a\a\a \ 3\ 3\ 5\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\ 1\ 1\ 1\ 6\ 6\ 6ûûùþþüÿÿýÿÿýÿÿý÷÷õÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùûûù\b\b\b\ 4\ 4\ 4\0\0\ 2\a\a \ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\0\ 2\ 1\ 5
+\ 6\15\18\11.1(¤§\9eÃýÃþÃÃÃÃÃ
ÿ¿·¿¿µÃ÷»»³¸¶·Ã¼¸Ã
¸§Ã²\91©\97g\8au6uY\ f\84d\11\8cg\ f\8a^\ 5\91b
+\94a\b\95b\a\95b\ 6\94a\ 5\93b\ 6\93d
+\96g\ f\91a\f\94d\10\94e\13\98m\1e\97s)¤\87E³\9egò\89Ã
¾¤Ã¿°Ãý¸¸¸¶¶¸Ã¾¿½··Ã¼¼ÃÃÃÃÃÃÃÃÃåãäëéìöôùú÷þüûÿþþÿýÿúþÿøùÿóûþõüþùýýÿõôùââäÃÃÃYYY\ 4\ 4\ 4\ 1\ 1\ 1\ 4\ 4\ 4\0\0\0\ 2\ 2\ 2\0\0\0\ 1\ 1\ 1\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 6\ 1\ 1\ 3\0\0\ 2\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\16\16\16\ 1\ 1\ 1ÿÿýÿÿýùù÷ýýû÷÷õÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿý\0\0\0\0\0\0\ 5\ 5\a\0\0\ 2\ 4\ 4\ 6\ 1\ 2\ 4\ 1\ 4 \0\ 3\b\a\ 6\v\15\10\145/1¶°°ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃþ»½ºµ¾½¹½¿¾´¶µÃûý±Ã
º¤Ã²\91¡\8ca\8er@\87d,\8ab$\8c_\e\8d]\11\8e_\r\8fa\v\8d_
+\8b^\v\90e\16\97m#\98p+\9at5\9b|C©\93b·¨\81ý ÃîÃóý´Ã½´»·®½¹°¾»´µ´°½½½ÃÃ
ÃÃÃÃÃÃÃÃà ÃêîÃòö÷üÿÿÿÿÿÿþüÿüùÿûõÿúôÿÿøþýùÿÿýüþýûÿÿñññââ⯯¯!!!\ 4\ 4\ 4\ 4\ 4\ 4\0\0\0\0\0\0\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\ 4\ 4\ 6\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 6 \v\ 3\ 3\ 5\ 4\ 4\ 6\ 2\ 2\ 4\b\b\b\12\12\12\0\0\0üüúÿÿýÿÿýýýûüüúýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüú\ 2\ 2\0\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\0\ 1\ 5\0\ 2\a\0\ 2\a
+\b\r\1e\17\1eI@EÃÃÃèãçÃÃÃÃÃà ÃÃÃÃÃÃÃÃÃý¼¾½»¾Ã¿º¾¿¼½¿º¸¹Ã
úü°Ãº§Ã
±\98¼£\84¤\86`\9c|M\9ayD\9by<\9d{<\9ax9\97w:\9f\80Gª\8cX±\95f½¤|Ã
²\91þ£¿¼Â¿Ã¸»½¼»½¼¹¸¶»¸³Ã½´¼¸¯ÃùÃýÃÃÃÃÃÃÃÃÃÃä̾̾ðöôïõõøüýûýüÿÿûÿÿúÿúôÿýúÿû÷ÿýúüüúþÿÿúþýýÿþøøøÃÃÃbbb\ f\ f\ f\0\0\0\ 5\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 5\ 1\ 1\ 3\0\0\ 2\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 4\ 4\ 6\0\0\ 2\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\0\0\ 2\ 6\ 6\b\ 5\ 5\ 5 \aÿÿÿþþüýýûûûùÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýÿÿýþþüþÿúþÿúÿÿûþÿúüüú\ 2\ 2\0\ 4\ 4\ 4\ 6\ 6\ 6\0\0\ 2\a\a \0\0\ 4\ 4\ 3\b\0\ 1\ 3\ 2\ 3\ 5\ 6\ 6\b-+.ÃÃ
ÃîìÃëéêãããäääÃÃÃÃÃÃÃÃÿ½¾¾¾¾ººº½½½¼¼¼¾¼½Ã½¼Ã½¹Ã½µÃ
¼³Ã
»¯Ãºª½² ½±\9b½®\97»Â\93»Â\93¹Â\93»¯\97¼°\9aýÂøªÃ¼±Ã½³Ã¾¹½¼¸¸¸¶»»¹´³±½¼ºÃü¿¾º¼»¹ÃÃÃÃÃÃÃÃÃâäÃæèãðòïýÿüþÿÿüþýüüúÿÿýÿþúÿþúÿþúÿþúÿþüþþüþþüýÿüþþüýýûÿÿÿ»»»\1c\1c\1c\ 3\ 3\ 3\ 2\ 2\ 2\ 3\ 3\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\f\f\f\ 4\ 4\ 6ýýýÿÿÿüüüýýûÿÿýþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüÿÿýýýûûü÷ÿÿûõöñÿÿû\ 3\ 3\ 1\0\0\0\ 1\ 1\ 1\0\0\0\a\a \0\0\ 2\ 4\ 3\b\0\0\ 2\ 6\ 6\b\ 1\ 1\ 1\10\10\10\91\91\91þþþïïïøøøìììåååÃÃÃÃÃÃÃÃü¼¼¾¾¾½½½¼¼¼¾¼½¿½¾¿½¾¿½¾¿¾¼¾½»¾½¹½¼¸¿¾¹¾½¸Ã½¸¿¼·¿¼µÃ½¶Ã½¶Ã¾¹Ã¾»Ã¾½Ãÿ¾º¹¾º¹Ã¿¾¿¾¼¾½»ÃþÃþÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃææäÃÃë÷÷õþþüÿÿýþþüþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýýýýëëëaaa \v\v\v\ 3\ 3\ 3\ 4\ 4\ 6\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 1\ 6\ 1\0\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 6\ 6\b\11\11\13\16\16\18\0\0\ 2ýýýýýýÿÿýøøöþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýùù÷ùù÷ÿÿýùù÷ÿÿýÿÿý\0\0\0\ 4\ 4\ 2\ 5\ 5\ 3\ 5\ 5\ 5\0\0\0\ 1\ 1\ 3\b\b
+\0\0\ 4\ 6\ 6\b\ 2\ 2\ 4\0\0\0HHHãããÿÿÿÿÿÿóóóÃÃÃéééãããÃÃÃÃÃý½½¼¼¼¿¿¿¼¼¼Ã¾¿¿½¾¿¾¼¿¾¼¾½»¾½»¾½¹¾½¹¾½¹¾½¹Ã¾¹Ã¿ºÃ¿ºÃ¿ºÃ¿¸Ã¾¹Ã¼¹Ã½¼Ã¾½¼¸·¹¸¶¿¾¼¾½»¿¾¼ÃÿÃ
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃãããÃÃÃììêööôþþüýýûüüúÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüùùùþþþ¼¼¼"""\ f\ f\ f\ 1\ 1\ 1\ 6\ 6\b\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\10\10\12\12\12\14\11\11\13ûûûÿÿÿÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýûûùÿÿýÿÿý÷÷õþþü\a\a\ 5\ 1\ 1\0\a\a\ 5\ 2\ 2\ 2\ 4\ 4\ 4\ 1\ 1\ 3\ 2\ 2\ 4\0\0\ 4\ 5\ 5\a\0\0\0\19\19\19®®®òòòúúúÿÿÿüüüñññïïïîîîÃÃÃÃÃÃÃÃü¼¼¿¿¿½½½Ã¾¿¿½¾¿¾¼¾½»¾½»¾½»¿¾º¿¾º¼»·½¼¸Ã½¸Ã¾¹Ã¾¹Ã¾¹Ã½¸Ã½¸Ã¼¹¼¸·¿»º¿»º¼»¹½¼º½¼ºÃ
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃãããæææìììîîîõõóüüúÿÿýþþüüüúÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúýýýþþþùùùiii\11\11\11\ 2\ 2\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 5\a\0\0\ 2\12\12\14\15\15\17\ 6\ 6\ 6÷÷÷þþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýüüúùù÷øøöÿÿý\ 3\ 3\ 1\16\16\14\f\f
+\e\e\19\ 4\ 4\ 4\0\0\0\ 1\ 1\ 3\ 5\ 5\a\b\b
+\0\0\ 2\a\a\aoooâââùùùÿÿÿùùùÿÿÿûûûõõõöööèèèÃÃÃÃÃý½½¼¼¼½½½¿¾¼¿¾¼¾½»¾½»¾½»¿¾¼Ã¿»Ã¿»¿¾º¾½¹¾½¹¾½¹¾½¹¾½¹¿¾º¿¾ºÃ¿¾¾º¹¿¾¼¿¾¼Ã¿½ÃÿÃ
ÃÃÃÃÃÃÃÃÃÃÃååãååãêêêêêêõõõúúúýýûþþüþþüþþüþþüþþüþþüýýûþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýýýûÿÿýýýýÃÃÃ444\ e\ e\ e\ 1\ 1\ 1\ 1\ 1\ 1\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\b\b
+\a\a \13\13\15\0\0\0ÿÿÿúúøÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüþþüÿÿýÿÿý\b\b\ 6\f\f
+\14\14\12\1c\1c\1a\11\11\ f\13\13\13\r\r\r\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 1<<<ÃÃÃèèèûûûÿÿÿüüüûûûÿÿÿùùùûûûóóóéééÃÃÃÃ
Ã
Ã
»»»¼¼º¾½»¾½»¾½»¾½»¾½»¿¾¼Ã¿»Ã¿»¿¾º¾½¹¾½¹½¼¸½¼¸½¼¸¾½¹¾½¹Ã¼»Ã¼»Ã¿½¼»¹¿¾¼ÃÃÃÃÃÃÃÃÃà à Ãà à Ãççåèèæùùùüüüþþþõõõÿÿýþþüüüúþþüÿÿýýýûýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýüüúþþüúúúôôô~~~\19\19\19\ 4\ 4\ 4\ 2\ 2\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\b\b
+\r\r\r\0\0\0ÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿùùùÿÿÿýýý\0\0\0\r\r\r\13\13\13 \1f\1f\1f\1d\1d\1d\v\v\v\a\a\a\ 5\ 5\ 5\ 1\ 1\ 1\0\0\0\18\18\18\9b\9b\9bîîìúúøññïÿÿýýýûýýûÿÿýûûùÿÿýüüúððîååãÃÃþ¾¼½½»¾½»¾½¹¾½¹¾½¹¾½»¿¾¼¿¾¼¿¾¼Ã¿½Ã¿½¿¾¼¿¾¼¿¾¼¿¾¼¿¾¼¿¾¼¼»¹½¼ºÃþÃþÃÃÃÃÃÃÃÃÃà ÃÃççåêêèõõóóóñýýûøøöþþüüüúÿÿýþþüýýûþþüÿÿýýýûýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüøøöÿÿýÿÿýÿÿÿþþþÃÃÃ???\f\f\f\ 6\ 6\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 6\ 6\b\ 4\ 4\ 6\0\0\ 2 \0\0\0\ 2\ 2\ 2ýýýþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûûÿÿÿýýýþþþ\ 5\ 5\ 5\a\a\a\15\15\15\1c\1c\1c\1a\1a\1a\16\16\16\ e\ e\ e
+
+
+\ 2\ 2\ 2\ 3\ 3\ 3\a\a\aPPPÃÃÃêêèýýûüüúÿÿýþþüÿÿýüüúüüúÿÿýÿÿýóóñììêÃÃÃÃÃþ¾¼¾½¹¾½¹¾½¹¾½¹¾½»¾½»¾½»¾½»½¼º½¼º¾½»¾½»¾½»¾½»¾½»½¼ºÃ¿½¾½»Ã
ÃÃÃÃÃÃÃÃÃÃÃãâà ëêèóóñòòðþþüüüúÿÿýùù÷ÿÿýÿÿýýýûþþüÿÿýþþüýýûþþüþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüÿÿýýýûòòòøøøýýý\8a\8a\8a\14\14\14
+
+
+\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\ 1\ 1\ 3\0\0\0\a\a\a\0\0\0ÿÿÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüýýûÿÿýûûùýýûÿÿýÿÿýûûûÿÿÿüüü\ 6\ 6\ 6\ 1\ 1\ 1\ 3\ 3\ 3\ 1\ 1\ 1\v\v\v\r\r\r\v\v\v\ 3\ 3\ 3\ 2\ 2\ 2\ 1\ 1\ 1\0\0\0111ªªªÃÃëôôòýýûÿÿýÿÿýýýûþþüÿÿýþþüýýûýýûüüúõõóææäÃÃÃÃÃûº¸Ã¿½Ãþ¾½»½¼º¿¾¼¿¾¼»º¸½¼º½¼º¿¾¼Ãÿ¿½¾¼º»¼º»Ã¾¿½¼ºÃÃÃÃÃÃÃÃÃâáÃéèæììêòòðúúøùù÷ùù÷ùù÷ûûùüüúýýûýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýÿÿýûûùÿÿýûûûÃÃÃ***\ f\ f\ f\ 1\ 1\ 1\ 4\ 4\ 4\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2ûûûÿÿÿûûûÿÿÿþþüÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýýýûûûùÿÿýÿÿýþþüýýûÿÿÿýýý\ 1\ 1\ 1\ 2\ 2\ 2\ 2\ 2\ 2\0\0\0\b\b\b\ 3\ 3\ 3\f\f\f\ 2\ 2\ 2\f\f\f\ 2\ 2\ 2\0\0\0\18\18\18rrrëëëüüúþþüÿÿýÿÿýþþüýýûýýûþþüþþüþþüþþüýýû÷÷õëëéÃÃÃÃÃÿ¾¼½¼º¼»¹½¼º¿¾¼Ã¿½Ã¿½Ã¿½Ãþ½¼º»º¸¼»¹½»¼½»¼¿½¾ÃÃÃÃÃÃÃÃÃãâà ëêèìëéõôòüüúøøöþþüýýûýýûýýûþþüÿÿýÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýûûùþþüÿÿýûûùÿÿýþþþïïïsss\b\b\b\ 5\ 5\ 5\ 1\ 1\ 1\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2ÿÿÿÿÿÿÿÿÿüüüúúøþþüûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýûûùÿÿýûûùüüúÿÿýùù÷þþüûûû\ 6\ 6\b\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\a\a \ 4\ 4\ 6\ 1\ 1\ 3\ 2\ 2\ 4\0\0\ 2\b\b\b\0\0\0
+
+\b::8¾¾¼ùù÷ÿÿýÿÿýþþüýýûþþüþþüþþüþþüÿÿýþþüþþüþþüûûùòòðææäÃÃÃÃÃÃÃÿ¼»¹¿¾¼Ã¿½½¼º»º¸½¼º¼¼¼½½½ÃÃþ¾¾»»»¼¼¼ÃÃÃÃÃÃÃÃÃãããÃÃÃóóóööôüüúÿÿýûûùÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýüüúýýûÿÿýýýûýýûÿÿÿþþþÃÃÃ\15\15\15\ 4\ 4\ 4\0\0\0\ 1\ 1\ 3\ 5\ 5\a\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6ûûýÿÿÿÿÿÿûûùÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýûûùÿÿýúúøÿÿýÿÿýýýûþþÿ\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\0\0\ 2\ 2\ 2\ 4\ 4\ 4\ 6\ 3\ 3\ 5\ 1\ 1\ 1\0\0\0\e\e\19\84\84\82øøöýýûýýûýýûüüúýýûþþüÿÿýþþüýýûÿÿýþþüþþüÿÿýþþüùù÷òòðììêãâà ÃÃÃÃÃÃÃÃÃÃÃÃÃþ¾½»¿¾¼ÃÃû»»ººº¼¼¼ÃÃÃÃÃÃÃÃÃÃÃÃåååöööõõõóóóÿÿýýýûööôýýûÿÿýþþüþþüýýûýýûýýûýýûýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûþþüþþüÿÿýÿÿýüüúüüüÿÿÿôôôSSS\ 4\ 4\ 4\ 3\ 3\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2üüüÿÿÿÿÿý÷÷õÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýööôþþüÿÿýþþüøøöÿÿý\ 1\ 1\ 3\ 6\ 6\b\ 4\ 4\ 6\0\0\ 2\ 6\ 6\b\ 3\ 3\ 5\ 5\ 5\a\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\0\0\0\ 6\ 6\ 6HHFÃÃÃ÷øóýþùþþüÿÿýÿÿýÿÿýÿÿýþþüýýûýýûþþüþþüþþüÿÿýÿÿýþþüúúø÷÷õöôõîìÃåãäÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃëëéóóñòòòÿÿÿþþþùùùÿÿÿþþþøøöÿÿýþþüþþüþþüþþüþþüþþüÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýÿÿýýýûÿÿýýýûüüúþþüÿÿÿ®®®\ e\ e\ e\ 4\ 4\ 4\ 2\ 2\ 2\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\a\a ÿÿÿüüüþþüÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúýýûÿÿýýýûúúøÿÿýÿÿý\0\0\0\ 2\ 2\ 4\0\0\ 2\0\0\ 2\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\ 6\ 6\b\0\0\ 2\ 3\ 3\ 5\ 4\ 4\ 6\ 3\ 3\ 3%%%¨¨¦÷÷õùúõýþùþþüÿÿýÿÿýþþüýýûýýûþþüÿÿýþþüýýûýýûþþüÿÿýÿÿýþþüýýûþüýýûü÷õöÃëìãáâÃÃÃÃÃÃÃÃÃæææâââæææçççööô÷÷õûûù÷÷õüüüþþþÿÿÿÿÿÿüüüýýýÿÿýÿÿýýýûþþüþþüþþüþþüþþüÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüüüúþþüÿÿýþþüÿÿýýýýîîî...\0\0\0\ 3\ 3\ 3\ 1\ 1\ 1\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\0\0\0ÿÿÿÿÿýüüúÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýüüúúúøÿÿýþþüþþü\0\0\0\ 4\ 4\ 2\ 4\ 4\ 6\ 5\ 5\a\0\0\ 2\ 6\ 6\b\ 6\ 5
+\0\0\ 4\ 1\0\ 5\ 3\ 2\a\0\0\ 2\0\0\ 2\0\0\0bbbççå÷÷õÿÿûÿÿûýýûýýûýýûýýûýýûýýûÿÿýÿÿýþþüþþüþþüþþüÿÿýÿÿýþþüþþüÿýþÿþÿþüýöôõÃëìçåæååååååìììîîîùùùõõõüüúõõóüþûûýúþþþûûûÿÿÿÿÿÿûûûýýýÿÿýýýûýýûýýûþþüþþüýýûýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿûþÿúþþüþþüþþüþþüÿÿýÿÿýúúúÿÿÿiii\ 2\ 2\ 2\ 5\ 5\ 5\ 4\ 4\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 1\ 6\ 2\ 1\ 6\ 4\ 4\ 6\ 6\ 6\b\0\0\0
+
+
+üüúÿÿýÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüûûùÿÿý\ 2\ 2\0\ 3\ 3\ 3\ 1\ 1\ 1\0\0\ 2\ 3\ 3\ 5\ 3\ 3\ 5\0\0\ 2\ 3\ 2\a\b\a\f\0\0\ 4\ 4\ 4\ 6\ 3\ 3\ 5\a\a\a\e\e\e½½½üüúÿÿýüýøüýøþþüÿÿýÿÿýÿÿýÿÿýþþüýýûýýûþþüþþüþþüþþüþþüþþüþþüþþüþüýÿýþÿþÿþüý÷õöñïðïïïòòòõõõõõõþþþùùùÿÿýûûùþÿýüþûþþþÿÿÿþþþüüüÿÿÿÿÿÿýýûþþüþþüÿÿýÿÿýÿÿýþþüýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúüýøþþüÿÿýÿÿýýýûýýûýýûÿÿÿÿÿÿ\9f\9f\9f\v\v\v \ 6\ 6\ 6\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 1\ 6\ 2\ 1\ 6\0\0\ 2\ 3\ 3\ 5\ 5\ 5\ 5\0\0\0\ 3\ 3\ 3þþüþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýýýûþþüýýûýþùÿÿûÿÿýþþüùùùÿÿÿþþþ\0\0\0\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\ 5\ 5\a\0\0\ 2\0\0\ 2\ 4\ 4\ 6\0\0\ 2\0\0\ 2\ 2\ 2\ 2\ 1\ 1\ 1\ 5\ 5\ 5bbbêêèÿÿýüüúÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûýýûüüúýýûøøö÷÷õïïÃööôþþüþþüþþüÿÿýÿÿýÿÿýþþüýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿûþÿúþþüþþüþþüþþüþþüÿÿýþþþüüüÃÃÃ\15\15\15\b\b
+\a\a \ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 3ÿÿÿùùùýýûÿÿýûûùüüúþþüÿÿýÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýøøöÿÿýÿÿýýýûýþùúûöõõóÿÿýÿÿÿþþþ\ 5\ 5\a\0\0\ 2\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 3\ 3\ 3\ 1\ 1\ 1!!!Ãÿððîýýûýýûúúøÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýÿÿýÿÿýúúøüüúööôýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýÿÿýÿÿýþþüýýûüüúÿÿÿôôôêêê444\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 5\ 5\a\ 4\ 4\ 6\ 4\ 4\ 6\ 3\ 3\ 5\ 2\ 2\ 4ÿÿÿÿÿÿõõóÿÿýÿÿýýýûÿÿýööôÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúýýûÿÿýÿÿýùù÷þþüÿÿýÿÿýÿÿýüüúüüü\ 1\ 1\ 1\0\0\ 2\ 1\ 1\ 3\a\a \0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 3\ 2\ 2\ 2\r\r\rnnnããáòòðööôÿÿýýýûüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúþþüüüúúúøööôüüúøøöýýûýýûþþüþþüþþüþþüþþüÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþüþþüþþüþþüýýûþþþûûûÿÿÿmmm\ 5\ 5\a\ 6\ 6\b\ 4\ 4\ 6\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\0\0\ 2\0\0\ 2\ 5\ 5\a\0\0\ 2\ 5\ 5\aýýýÿÿÿýýûÿÿýûûùüüúÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüýýû÷÷õÿÿýýýûùù÷þþüýýûÿÿý\ 4\ 4\ 4\ 4\ 4\ 4\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 1\ 1\ 3\ 4\ 4\ 6\ 1\ 1\ 1\0\0\0"""»»»ççåììêýýûóóñÿÿýúúøþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýþþüûûùøøöÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿûþÿúýýûüüúýýûÿÿýÿÿýÿÿýóóóÿÿÿôôô£££\ 5\ 5\a \v\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\f\f\ e\ 6\ 6\b\0\0\ 2\ 5\ 5\a\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 4üüüÿÿýþþüþþüÿÿýþþüÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýÿÿýüüúÿÿýýýûÿÿýþþüÿÿý\0\0\0\0\0\0\0\0\0
+
+\f\0\0\ 2 \v\ 1\ 1\ 3\ 3\ 3\ 5\ 1\ 1\ 3\ 4\ 4\ 6\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\0\0\0\a\a\aWWWÃÃÃêêèîîìþþü÷÷õûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýýýûûûùÿÿýüüúÿÿýÿÿýÿÿýÿÿýÿÿýþþüýýûþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüýýûþþüÿÿýÿÿýýýûõõõÿÿÿìììÃÃÃ\v\v\v\b\b\b\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 4\ 4\ 6\ 1\ 1\ 1\ 5\ 5\ 5üüúÿÿýööôÿÿýûûùýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿý÷÷õÿÿýÿÿýüüúÿÿý÷÷õÿÿýÿÿý\ 2\ 2\0\ 2\ 2\ 2\a\a\a\0\0\ 2\ 6\ 6\b\0\0\ 2\0\0\ 2\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\a\a\a \9a\9a\9aÃÃÃââà ððîõõóÿÿýùù÷ÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùþþüýýûýýûúúøþþü÷÷õúúøýýûÿÿýÿÿýÿÿýþþüýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýÿÿýþþüþþüúúøööôþþþóóóöööååå+++\ 3\ 3\ 3\b\b
+\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 6\ 6\b\ 2\ 2\ 4\ 6\ 6\b\ 2\ 2\ 4\0\0\ 2\0\0\ 2\ 4\ 4\ 6\0\0\ 2\ 1\ 1\ 1\0\0\0ýýûÿÿýúúøÿÿýÿÿýûûùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýýýûÿÿýüüúüüúüüúÿÿÿýýý\ 3\ 3\ 3\0\0\0\ 3\ 3\ 3\ 4\ 4\ 4\0\0\ 2\ 6\ 6\b\0\0\ 2\a\a \ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 3\ 6\ 6\ 6\16\16\16FFF¸¸¸ÃÃÃçççìììôôòññïÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüÿÿýýýûÿÿý÷÷õûûùûûùýýûÿÿýÿÿýþþüýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüüüúûûùûûù÷÷õòòðöööîîî÷÷÷ìììeee\ 1\ 1\ 1\ 6\ 6\ 6\ 1\ 1\ 1\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\v\v\r\0\0\ 2\ 5\ 5\a\ 2\ 2\ 2\a\a\a\0\0\0ûûûÿÿÿýýýöööÿÿÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿýþþüÿÿýüüúÿÿýûûû\ 1\ 1\ 1\0\0\0\a\a\a\ 1\ 1\ 1\0\0\0\b\b
+\ 1\ 1\ 3\0\0\ 2\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 4\ 4\ 6\ 1\ 1\ 3\ 6\ 6\ 6 ###ddd¼¼¼ÃÃÃâââ÷÷÷ôôòÿÿýÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûýýûÿÿýýýûþþüööôûûùùù÷ûûùþþüÿÿýþþüýýûþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüûûù÷÷õööôøøö÷÷õóóñêêêøøøòòòòòò\9e\9e\9e\b\b\b\b\b\b\ 3\ 3\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 4\ 4\ 6\0\0\ 2\ 3\ 3\ 5\ 5\ 5\a\0\0\ 2\ 5\ 5\a\ 1\ 1\ 3\ 1\ 1\ 1\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 1ÿÿÿýýýÿÿÿýýýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýùù÷ýýûÿÿýþþþþþþ\ 4\ 4\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\0\ 5\ 5\ 5\ 1\ 1\ 1\ 2\ 2\ 2\ 2\ 2\ 2 \e\e\e\82\82\82µµµÃÃÃÃÃÃéééñññöööûûûÿÿÿþþüýýûüüúýýûþþüÿÿýþþüýýûýýûþþüþþüýýûÿÿýùù÷ÿÿýÿÿýýýûÿÿýýýûþþüÿÿýüüúôôòôôòööôùù÷þþüÿÿýÿÿýýýûüüúüüúýýûþþüüüúÿÿýýýûþþüÿÿýûûùýýûþþüûûùÿÿýýýûÿÿýýýûüüúÿÿýþþüþþüýýûþþüþþüþþüþþüþþüüüúÿÿýÿÿýÿÿýÿÿýüüúÿÿýûûùööôôôòëëéÃÃëòòðîîîòòòÃÃÃéééÃÃÃÃÃû»»\10\10\10\0\0\0
+
+
+\ 4\ 4\ 6\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\0\ 2\ 2\ 2\ 5\ 5\ 5\0\0\0\ 5\ 5\ 5üüüÿÿÿýýýþþþÿÿÿÿÿýýýûÿÿýÿÿýúúøÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿýýýûùù÷ÿÿÿ\ 1\ 1\ 1\ 3\ 3\ 3\0\0\0\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 3\ 3\0\0\0\f\f\f"""\8c\8c\8cµµµÃÃÃÃÃÃïïïùùùùùùùùùÿÿÿÿÿýÿÿýÿÿýþþüýýûýýûþþüþþüþþüùù÷ÿÿýýýûýýûÿÿýùù÷ýýûýýûþþüüüúûûùøøöôôòòòðõõóôôòööôøøöùù÷úúøþþüÿÿýÿÿýÿÿýÿÿýþþüüüúýýûÿÿýþþüþþüþþüÿÿýþþüÿÿýûûùùù÷ÿÿýÿÿýýýûþþüýýûÿÿýýýûÿÿýþþüÿÿýùù÷ùù÷ýýûùù÷øøöúúøööôööôõõóóóñÃÃëèèæææäææäéééçççèèèñññêêêêêêâââ\1e\1e\1e\13\13\13\ e\ e\ e\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 4\a\a\a\0\0\0\ 5\ 5\ 5\0\0\0\ 1\ 1\ 1ÿÿÿþþþÿÿÿÿÿÿùù÷ÿÿýùù÷ÿÿýþþüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýúúøüüú\ 5\ 5\ 5\0\0\0\0\0\ 2\b\b
+\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 4\0\0\0\ 3\ 3\ 3\ 4\ 4\ 4\0\0\0\ f\ f\ f333\99\99\99£££»»»ÃÃÃÃÃÃìììøøøøøøòòòüüüþþþÿÿÿÿÿÿþþþþþþÿÿÿÿÿÿýýýÿÿÿÿÿÿüüüÿÿÿýýýþþþöööýýýøøøööö÷÷÷õõõòòòÃÃÃçççìììñññõõõöööùùùýýýýýýüüüýýûþþüÿÿýúúøþþüÿÿýûûùÿÿýüüúúúøýýûÿÿýÿÿýÿÿýýýûýýûýýýÿÿÿýýýÿÿÿüüüÿÿÿýýýÿÿÿûûûýýýÿÿÿøøøöööùùùõõõòòòÃÃëììêåååäääÃÃÃÃÃÃãããÃÃÃæææããããããëëëããã666\0\0\0\17\17\17 \v\ 6\ 6\b\ 4\ 4\ 6\ 2\ 2\ 4\0\0\ 2\0\0\ 2\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\0\0\0\0\0\0 ùùùûûûüüüÿÿýÿÿýûûùþþüÿÿý÷÷õþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýúúøÿÿýÿÿý\ 4\ 4\ 4\ 3\ 3\ 3\ 5\ 5\a\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 3\0\0\0\ 4\ 4\ 4\ 1\ 1\ 1\ 1\ 1\ 1\ e\ e\ eNNN\9e\9e\9e§§§²²²ÃÃÃÃÃÃìììòòòøøøÿÿÿôôôöööúúúüüüýýýýýýýýýýýýþþþÿÿÿýýýùùùÿÿÿòòòÿÿÿóóóöööîîîÃÃÃïïïîîîîîîéééÃÃÃäääçççìììðððôôôõõõõõõõõõ÷÷õùù÷ÿÿýööôýýûþþüôôòüüúÿÿýôôòûûùôôòûûùÿÿýúúøÿÿýöööùùùõõõüüüòòò÷÷÷ñññõõõóóóóóóôôôîîîëëëìììçççæææããáááÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃãããåååìììYYY
+
+
+\v\v\v\ 5\ 5\a\0\0\ 2\0\0\ 2\ 3\ 3\ 5\ 4\ 4\ 6\ 4\ 4\ 6\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 5\a\ 1\ 1\ 3\0\0\ 2\0\0\ 2\b\b\b\ 5\ 5\ 5\0\0\0ÿÿÿþþþÿÿÿÿÿýÿÿýÿÿýûûùÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿý\ 1\ 1\0\0\0\0\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 1\ 2\ 2\ 2\ 4\ 4\ 4\0\0\0\ 6\ 6\ 6\r\r\rlll\9c\9c\9c\9b\9b\9bºººÃÃÃÃÃÃæææñññòòòõõõööö÷÷÷úúúýýýÿÿÿÿÿÿþþþýýýöööýýý÷÷÷ûûûôôôòòòôôôéééääääääãããÃÃÃãããèèèæææà à à ÃÃÃÃÃÃãããçççêêêðððöööôôòõõóþþüòòðúúøùù÷ññïøøöýýûøøöüüúööôøøöóóñôôò÷÷õìììîîîéééðððåååéééãããççççççäääåååâââà à à ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃáááçççèèè\8d\8d\8d\1d\1d\1d\12\12\12
+
+\f\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 6\ 6\b\0\0\ 2\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\0\0\0\ 1\ 1\ 1þþþÿÿÿúúøüüúþþüÿÿý÷÷õþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿý\ 2\ 2\0\ 2\ 2\0\ 1\ 1\ 1\ 2\ 2\ 2\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\0\ 4\ 4\ 4\ 3\ 3\ 3\ 4\ 4\ 4\f\f\f\13\13\13\84\84\84\9a\9a\9a£££¥¥¥¯¯¯¾¾¾ÃÃÃÃÃÃÃÃÃëëëìììêêêêêêëëëïïïóóóõõõööööööúúúôôôþþþ÷÷÷õõõññññññçççäääáááÃÃÃÃÃÃÃÃÃââââââà à à ÃÃÃÃÃÃÃÃÃâââæææÃÃÃôôôúúøøøöþþüòòðûûùùù÷÷÷õûûùôôòýýûõõóýýûþþüññïööôèèæâââáááÃÃÃà à à ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃîîîÃÃÃ<<<\16\16\16\v\v\r\ 4\ 4\ 6\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 6\ 6\b\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 4\ 4\ 6\ 1\ 1\ 3\ 4\ 4\ 4\ 5\ 5\ 5\ 3\ 3\ 3øøøÿÿýÿÿýûûùÿÿýÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýûûù\0\0\0\0\0\0\ 6\ 6\ 6\ 1\ 1\ 1\ 6\ 6\b\ 1\ 1\ 3\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\r\r\r\11\11\11 \90\90\90\9c\9c\9c\9d\9d\9d¤¤¤ªªª±±±»»»Ã
Ã
Ã
ÃÃÃÃÃÃåååæææçççêêêïïïôôôøøøûûûôôôÿÿÿóóóýýýüüüóóóþþþïïïóóóñññéééâââÃÃÃÃÃÃÃÃÃÃÃÃâââçççëëëêêêëëëïïïóóóôôôÿÿýüüúÿÿý÷÷õÿÿýûûùÿÿýýýûýýûÿÿýóóñ÷÷õùù÷øøö÷÷õëëéÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÿ¿¿ÃÃÃÃÃÃÃÃÃÃÃþ¾¾ÃÃÃÃÃÃééçóóñ¿¿½111\ 5\ 5\a\0\0\ 2\0\0\ 2\ 5\ 5\a\ 6\ 6\b\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 6\ 6\b\0\0\ 2\0\0\ 2\b\b
+\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 4\0\0\0\ 2\ 2\ 2\ 5\ 5\ 5úúøÿÿýÿÿýþþüööôÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýû\ 4\ 4\ 2\ 4\ 4\ 4\0\0\0\ 5\ 5\ 5\ 2\ 2\ 2\0\0\ 2\ 4\ 4\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 4\0\0\0\ 2\ 2\ 2\15\15\15\14\14\14***\94\94\94\9e\9e\9e\9d\9d\9d\9c\9c\9c¡¡¡Â¸¸¸»»»ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃåååëëëðððöööùùùüüüýýýÿÿÿòòòÿÿÿúúúÿÿÿóóóýýýÿÿÿõõõæææÃÃÃÃÃÃÃÃÃæææåååñññöööòòòóóóüüüÿÿÿýýýÿÿýüüúÿÿýúúøÿÿýúúøÿÿýûûùÿÿýüüúÿÿýúúøôôòÿÿýÃÃëïïÃìììåååÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃþ¾¾¾¾¾ÃÃÿ¿¿¼¼¼½½½ÃÃþ¾¾ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃããáõõó¾¾¾(((\12\12\14\ 1\ 1\ 3\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\a\a \0\0\ 2\ 1\ 1\ 3\ 5\ 5\a\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 2ÿÿýúúøÿÿýþþüÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýÿÿýÿÿýýýûÿÿÿýýýÿÿÿþþþÿÿÿ\ 5\ 5\ 5\0\0\ 2\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\ 1\ 1\ 3\ 5\ 5\a\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 5\ 5\a\ 6\ 6\b\0\0\ 2\ 2\ 2\ 4\1a\1a\1c\1d\1d\1d999\9e\9e\9e\9d\9d\9d¡¡¡\9e\9e\9e···¼¼¼ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃëëéïïÃõõóþþüôôòÿÿýüüúÿÿýþþüÿÿýûûùþþüÿÿýÿÿÿûûûõõõïïïäääÃÃÃÃÃÃïïïôôôøøøûûûüüüýýýÿÿÿÿÿÿýýýþþüüüúÿÿýüüúÿÿýýýûÿÿýüüúýýûÿÿýýýûýýûÿÿýýýûþþüôôòêêêñññâââååååååÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃü¼¼¿¿¿»»»ÃÃû»»½½½ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃôôôµµµ%%%\ 5\ 5\ 5\0\0\0\ 5\ 5\ 5\0\0\0\ 4\ 4\ 6\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\1d\1d\1f--/\19\19\19\18\18\18\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\a\a\a\ 1\ 1\ 1\0\0\0\ 5\ 5\a\ 4\ 4\ 6\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 3\ 3\ 3\ 3\ 3\0\0\0ÿÿÿýýûýýûûûùýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúýýûþþüýýûÿÿýüüüÿÿÿ÷÷÷ÿÿÿ\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\ 4\ 4\ 6\ 4\ 4\ 6\0\0\ 2\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 6\ 6\b\ e\ e\10##%\1c\1c\1c333\9a\9a\9a¥¥¥\9e\9e\9eªªªÂ¹¹¹ÃÃÃÃÃÃÃÃÃà à à ååãééçîîì÷÷õööôööôÿÿýüüúýýûÿÿýÿÿýûûùýýûÿÿýÿÿýüüúüüüÿÿÿþþþêêêãããäääîîîêêêþþþþþþÿÿÿÿÿÿÿÿÿþþþþþþÿÿÿþþüþþüþþüüüúþþüýýûÿÿýþþüûûùÿÿýýýûþþüÿÿýþþüÿÿýýýûÿÿÿúúúôôôðððéééåååæææÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÿ¿¿ÃÃÃÃÃÃæææòòòûûù\96\96\94\12\12\12\ 2\ 2\ 2\ 4\ 4\ 4\ 4\ 4\ 4\ 3\ 3\ 5\0\0\ 2\0\0\ 2\r\r\ f;;=PPRSSS222"""\10\10\10\0\0\0\0\0\0\ 2\ 2\ 2\ 3\ 3\ 3\0\0\ 2\ 1\ 1\ 3\ 5\ 5\a\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\0\0\0\ 5\ 5\ 5\0\0\0ûûûÿÿýüüúÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýúúøÿÿýýýûýýýþþþÿÿÿÿÿÿ\0\0\ 2 \v\0\0\ 2\ 4\ 4\ 6\0\0\ 2\0\0\ 2 \v\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 4\ 4\ 6\ 3\ 3\ 5\a\a \1d\1d\1f\17\17\17III\9e\9e\9e¢¢¢«««¼¼¼»»»ÃÃÃÃÃÃåååäääïïïòòðúúøýýûÿÿýþþüúúøÿÿýÿÿýÿÿýþþüüüúÿÿýþþüÿÿýþþüþþüÿÿÿþþþùùùïïïæææåååùùùñññÿÿÿýýýýýýÿÿÿÿÿÿüüüüüüÿÿÿÿÿýÿÿýýýûþþüüüúþþüþþüÿÿýýýûÿÿýþþüþþüüüúúúøÿÿýÿÿýõõõÿÿÿþþþõõõÿÿÿ÷÷÷ðððÃÃÃìììæææááááááÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
ÃÃÃÃÃÿ¿¿¾¾¾½½½¿¿¿¼¼¼ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃæææÿÿýòòðeee\v\v\v\0\0\0\a\a\a\0\0\ 2\ 6\ 6\b\ 1\ 1\ 3\ 3\ 3\ 5\ f\ f\11::<YYYNNN@@@&&&\10\10\10\ 5\ 5\ 5\ 2\ 2\ 2\ 5\ 5\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 1\0\0\0\a\a\a\0\0\0þþüÿÿýõõóýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúûûùÿÿýýýûÿÿýþþþùùùÿÿÿ\0\0\0\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\ 1\ 1\ 3\ 4\ 4\ 6\0\0\ 2\0\0\ 2\ 5\ 5\a\ 1\ 1\ 3\ 2\ 2\ 4\ 4\ 4\ 6\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 4\ 4\ 6\ 4\ 4\ 6\0\0\ 2\15\15\17\19\19\e\13\13\13ggg§§§«««½½½ÃÃÃÃÃÃÃÃÃâââÃÃÃöööñññûûùþþüýýûýýûþþüûûùùù÷úúøýýûûûùøøöÿÿýüüúýýûúúøþþüÿÿÿûûûòòòôôôæææèèèõõõþþþÿÿÿþþþÿÿÿÿÿÿÿÿÿþþþþþþÿÿÿþþüþþüúúøþþüúúøþþüûûùþþüÿÿýÿÿýþþüþþüüüúùù÷ûûùþþüûûûûûûþþþüüüýýýýýýÿÿÿüüüýýýûûûôôôôôôîîîääääääÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
ÃÃü¼¼ÃÃý½½ÃÃÃÃ
Ã
Ã
ÃÃÃåååèèæÿÿýÃÃÃ@@@\ 1\ 1\ 1\0\0\0\0\0\ 2\ 2\ 2\ 4\a\a \0\0\ 2\0\0\ 2\r\r\ f555000GGGFFF)))\e\e\e\r\r\r\ 6\ 6\ 6\ 1\ 1\ 3\0\0\ 2\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 3\0\0\0\0\0\0\ 2\ 2\ 2ÿÿýÿÿýÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýÿÿýþþüûûùÿÿÿÿÿÿÿÿÿ\ 4\ 4\ 4\ 2\ 2\ 4\a\a \ 3\ 3\ 5\0\0\ 2 \v\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 1\ 1\ 1\ 3\ 3\ 3***\13\13\13333\8d\8d\8d²²²½½½ÃÃÃÃÃÃÃÃÃéééòòðôôòÿÿýööôÿÿýÿÿýþþüüüúþþüþþüûûùüüú÷÷õÿÿýüüúûûùööôÿÿýüüúúúøüüüÿÿÿùùùìììäääïïïòòòÿÿÿüüüÿÿÿÿÿÿýýýüüüþþþüüüøøøýýûüüúøøöýýûûûùþþüùù÷úúøþþüûûùýýûþþüþþüýýûýýûÿÿýÿÿÿþþþÿÿÿÿÿÿûûûýýýýýýþþþÿÿÿÿÿÿûûûÿÿÿûûûõõõøøøòòòìììéééÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
ÃÃþ¾¾ÃÃþ¾¾ÃÃÃÃÃÃÃÃÃÃÃÃããáööôýýý»»»\e\e\e\ 6\ 6\ 6\ 1\ 1\ 3\0\0\ 2\0\0\ 2\0\0\ 2\ 5\ 5\a\0\0\ 2\b\b
+\0\0\ 2\18\18\18///FFF333%%%\16\16\16\ 6\ 6\ 6\ 6\ 6\ 6\b\b
+\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\0\ 5\ 5\ 5\ 4\ 4\ 4\0\0\0\0\0\0öööÿÿÿùùùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúýýûþþüÿÿýþþüüüüÿÿÿ\0\0\0\ 1\ 1\ 1\0\0\ 2\0\0\ 2\ 2\ 2\ 4\a\a \0\0\ 2\0\0\ 2\ 3\ 3\ 5\ 4\ 4\ 6\ 1\ 1\ 3\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 5\ 5\ 5\f\f\f&&&\11\11\11mmm®®®½½½ÃÃÃÃÃÃäääÃÃÃîîîÿÿýûûùþþüÿÿýþþüýýûÿÿýþþüüüúÿÿýÿÿýÿÿýüüúÿÿýÿÿýþþüûûùÿÿýÿÿýýýûýýýÿÿÿÿÿÿéééìììðððòòòýýý÷÷÷üüüýýýùùùùùùýýýüüüöööÿÿýýýûûûùÿÿýÿÿýþþüüüúüüúýýûúúøüüúýýûþþüÿÿýüüúþþüûûûþþþüüüÿÿÿÿÿÿþþþòòòýýýûûûûûûüüüÿÿÿýýýýýýÿÿÿþþþòòòóóóììììììåååÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÿ¿¿ÃÃÃÃÃÃÃÃÃååãöööûûû\8c\8c\8c\ 2\ 2\ 2\ 6\ 6\b\ 4\ 4\ 6\ 3\ 3\ 5\ 5\ 5\a\ 2\ 2\ 4\ 6\ 6\b\0\0\ 2\ 5\ 5\a\0\0\0\ e\ e\ e,,,LLLCCC***(((\14\14\14\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4 \0\0\0\ 1\ 1\ 1\ 4\ 4\ 4\ 5\ 5\ 5ÿÿÿýýýýýýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýûûùùù÷þþüÿÿÿýýý
+
+
+\ 4\ 4\ 4\ 6\ 6\b\ 3\ 3\ 5\ 3\ 3\ 5\0\0\ 2\ 1\ 1\ 3\b\b
+\0\0\ 2\ 1\ 1\ 3\ 1\ 1\ 3\v\v\r\ f\ f\11
+
+\f\ 4\ 4\ 6\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 2\18\18\18\1e\1e\1e???   ¼¼¼ÃÃÃà à à ãããìììõõóóóñÿÿýûûùøøöÿÿýúúøööôýýûûûù÷÷õûûùüüúþþüÿÿýýýûýýûÿÿýÿÿýþþüþþüþþüÿÿýýýûýýûôôòõõóððîõõóüüúûûùþþüþþüýýûþþüÿÿýÿÿýþþüÿÿýþþüÿÿýÿÿýÿÿýüüúýýûÿÿýÿÿýûûùþþüûûùüüúþþüùù÷üüúÿÿýòòðûûùþþüóóñûûùÿÿýþþüÿÿýÿÿýÿÿýÿÿýüüúþþüýýûýýûþþþÿÿÿüüüøøøôôôéééäääÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃü¼¼ÃÃÃÃ
Ã
Ã
ÃÃÃãããîîîÿÿÿæææFFF\0\0\0\ 2\ 2\ 2\ 1\ 1\ 3\0\0\ 2\ 5\ 5\a\0\0\ 2\a\a \ 1\ 1\ 3\ 2\ 2\ 4\ 4\ 4\ 6 \1d\1d\1dBBBLLL000\1a\1a\1a\10\10\10\ 1\ 1\ 1\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 6\ 6\b\ 6\ 6\ 6\0\0\0\ 4\ 4\ 4üüüúúúÿÿÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüÿÿýÿÿýýýûüüüýýý\0\0\0\ 1\ 1\ 1\0\0\ 2\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 5\ 5\a\ 2\ 2\ 4 \v\1f\1f!((*\19\19\e\ 5\ 5\a\0\0\ 2\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 2\1f\1f\1f\17\17\17|||ÃÃÃÃÃÃÃÃÃãããõõõòòòÿÿýÿÿýüüúüüúúúøýýûÿÿýùù÷ÿÿýÿÿýûûùÿÿýÿÿýüüúýýûýýûýýûõõóýýûÿÿýÿÿýõõóþþüüüúööôÿÿýõõóööôüüúøøöÿÿýÿÿýþþüýýûþþüþþüþþüýýûþþüüüúÿÿýüüúýýûööôüüúÿÿýÿÿýüüúÿÿýüüúüüúÿÿýüüúÿÿýÿÿýûûùÿÿýüüúÿÿýÿÿýýýûýýûúúøööôýýûúúøøøöþþüýýûÿÿýýýýÿÿÿÿÿÿüüüþþþööööööÃÃÃà à à ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃìììóóóÿÿÿ³³³\ e\ e\ e\0\0\0\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 5\ 5\ 5\0\0\0\10\10\10<<<UUUDDD"""\f\f\f\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 2\ 6\ 6\ 6\0\0\0\0\0\0ÿÿÿüüüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýþþüÿÿýúúøÿÿÿÿÿÿ\ 4\ 4\ 4\0\0\0\ 4\ 4\ 6\ 4\ 4\ 6\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 6\ 6\b\0\0\ 2\13\13\15557??A**,\12\12\14\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\ 5\ 5\a
+
+
+\19\19\19MMMÃÃÃÃÃÃÃÃÃåååëëëýýûþþüüüúÿÿýýýûÿÿýýýûþþüýýûýýûüüúÿÿýýýûüüúùù÷üüúýýûÿÿýüüúÿÿýýýûøøöÿÿýþþüÿÿýùù÷ÿÿýýýûýýûôôòÿÿýÿÿýþþü÷÷õúúøÿÿýþþüûûùýýûþþüôôòþþüÿÿýôôòüüúÿÿýþþüööôþþüÿÿýûûùÿÿýÿÿýûûùÿÿýÿÿýüüúÿÿýûûùýýûþþüûûùÿÿýüüúÿÿýþþüþþüüüúÿÿýúúøúúøÿÿýÿÿÿüüüüüüÿÿÿþþþýýýûûû÷÷÷õõõìììâââÃÃÃÃÃÃÃÃÃÃÃþ¾¾ÃÃÃÃ
Ã
Ã
ÃÃÃÃÃÃüüüôôôYYY\0\0\0\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\0\0\ 2\ 6\ 6\b\0\0\ 2\0\0\0\ 5\ 5\ 5\0\0\0\ e\ e\ e222QQQGGG\1a\1a\1a\ 6\ 6\ 6\ 4\ 4\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5ÿÿÿùùùÿÿýÿÿýùù÷ÿÿýþþüüüúÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúýýûÿÿýÿÿýÿÿýýýý\0\0\0\ 6\ 6\ 6\ 2\ 2\ 2\ 1\ 1\ 3\0\0\ 2\ 2\ 2\ 4\ 5\ 5\a\ 2\ 2\ 4\0\0\ 2\e\e\1dGGIDDF$$&\12\12\14\b\b
+\0\0\ 2\ 2\ 2\ 4\ 4\ 4\ 6\ 1\ 1\ 3\1e\1e\1e$$$¡¡¡ÃÃÃääääääôôôÿÿÿööôýýûÿÿýÿÿýûûùýýûýýûÿÿýõõóþþüÿÿýÿÿýûûùÿÿýüüúõõóþþüÿÿýÿÿýÿÿýÿÿýûûùýýûýýûüüú÷÷õýýû÷÷õÿÿýúúøÿÿýúúøüüúøøöùù÷ýýûüüúûûùüüúþþüüüúþþüþþüûûùÿÿýþþüýýûüüúúúøýýûøøöûûùýýûøøöûûùüüúööôþþüþþüÿÿýüüú÷÷õþþüÿÿýþþüÿÿýþþüýýûÿÿýûûùùù÷ýýûýýýüüüýýýýýýýýýÿÿÿÿÿÿúúúûûûõõõÃÃÃäääÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
ÃÃÃäääöööýýýÃÃÃ\10\10\10\ 5\ 5\ 5\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 1\ 3\ 3\ 3\ 5\ 5\ 5\ 1\ 1\ 1\b\b\b...HHH999\12\12\12\a\a\a\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\ 1\ 1\ 3\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 5\ 5\a\ 4\ 4\ 6\ 4\ 4\ 6\ 3\ 3\ 5\ 2\ 2\ 2ÿÿÿùù÷ÿÿýÿÿýÿÿýùù÷ÿÿýÿÿýüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüýýû÷÷õÿÿýþþþ\ 4\ 4\ 4\0\0\0\ 5\ 5\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3
+
+\f<<>TTV,,.\ 1\ 1\ 3\0\0\ 2\ 4\ 4\ 6\0\0\ 2\ 4\ 4\ 6\ 3\ 3\ 5\ 1\ 1\ 3\e\e\eRRRÃÃÃà à à ÃÃÃôôôööôÿÿýýýûûûù÷÷õüüúýýûÿÿýþþüýýûþþüúúø÷÷õÿÿýþþüýýûùù÷ÿÿýýýûûûùþþüÿÿýÿÿýÿÿýþþüÿÿýþþüýýûþþü÷÷õÿÿýÿÿýÿÿýýýûþþüþþüýýûýýûþþüýýûýýûÿÿýÿÿýÿÿýþþüÿÿýþþüÿÿýÿÿýÿÿýÿÿýÿÿýýýûÿÿýÿÿýþþüÿÿýÿÿýþþüúúø÷÷õýýûþþüýýûÿÿýûûùúúøþþüüüúþþüÿÿýÿÿýüüúþþüûûùüüúüüúúúøùù÷þþüýýûööôÿÿýýýûøøöððîççåÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃêêêöööóóó[[[\0\0\0\ 5\ 5\ 5\ 2\ 2\ 2\0\0\0\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\ 1\ 1\ 3\a\a\a\0\0\0\ 4\ 4\ 4\ 2\ 2\ 2\0\0\0\10\10\10222JJJ,,,
+
+
+\ 1\ 1\ 1\ 4\ 4\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\0\0\ 2\0\0\ 2\ 5\ 5\a\0\0\ 2\ 5\ 5\aýýýÿÿýÿÿýûûùýýûýýûÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüÿÿýÿÿýûûùÿÿÿ\ 3\ 3\ 3\ 2\ 2\ 2\ 1\ 1\ 1\ 1\ 1\ 3\ 5\ 5\a\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6%%'OOQ668\r\r\ f\0\0\ 2\ 3\ 3\ 5\ 5\ 5\a\ 4\ 4\ 6\0\0\ 2\0\0\ 2\ 4\ 4\ 6\e\e\e§§§à à à òòòóóóÿÿÿúúøýýûýýûÿÿýüüúýýûøøöûûùûûùÿÿýÿÿýÿÿýûûùüüúúúøÿÿýÿÿýþþüþþüøøöüüúûûùüüúÿÿýüüúÿÿýüüúÿÿýÿÿý÷÷õýýûúúøýýûÿÿýþþüÿÿýÿÿýüüúÿÿýþþüüüúÿÿýþþüþþüýýûÿÿýøøöÿÿýÿÿýúúøüüúþþüüüúüüúþþüýýûüüúþþüÿÿýüüúýýûÿÿýúúøøøöþþüÿÿýùù÷ýýûúúøýýûûûùÿÿýýýûýýûÿÿýÿÿýÿÿýþþüýýûÿÿýÿÿýúúøýýûÿÿýýýû÷÷õòòðëëéÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃáááïïïþþþÃÃÃ
+
+
+\a\a\a\ 2\ 2\ 2\ 1\ 1\ 1\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\0\0\0\0\0\0\ 2\ 2\ 2\ 4\ 4\ 4\a\a\a\ 2\ 2\ 2
+
+
+000EEE\e\e\e\ 4\ 4\ 4\ 5\ 5\ 5\0\0\ 2\0\0\ 2\ 6\ 6\b\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\f\f\ e\ 6\ 6\b\0\0\ 2\ 5\ 5\a\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 4úúúûûùþþüÿÿýÿÿýþþüüüúýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýüüúüüúüüúÿÿÿ\0\0\0\0\0\0\ 1\ 1\ 1\ 1\ 1\ 3\ 2\ 2\ 4\0\0\ 2\ 5\ 5\a \v<<>UUW\1d\1d\1f\ 1\ 1\ 3\ 5\ 5\a\ 5\ 5\a\0\0\ 2\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4 \vNNNéééõõõùùùýýûüüúÿÿýþþüÿÿýÿÿýþþüÿÿýùù÷ûûùúúøüüúýýûÿÿýýýûÿÿýýýûÿÿýýýûúúøÿÿýûûùýýûûûùûûùýýûøøöûûùüüúÿÿýÿÿýûûùþþüøøöúúøÿÿýùù÷þþüýýûúúøýýûüüúùù÷ûûùûûùûûùûûùþþüööôþþüýýûøøöþþüÿÿýÿÿýþþüÿÿýÿÿýþþüÿÿýÿÿýýýûÿÿýÿÿýýýûüüúýýûÿÿýýýûÿÿýûûùüüúøøöþþüûûùùù÷ÿÿýûûùüüúÿÿýþþüþþüÿÿýÿÿýüüúþþüþþüüüúûûùööôêêèÃÃÃÃÃÃÃÃÿ¿¿ÃÃÃÃÃÃÃÃÃÿÿýõõóQQQ\0\0\0\ 1\ 1\ 1\ 4\ 4\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 5\ 4 \ 2\ 2\ 4\ 3\ 3\ 3
+
+\b
+
+\b\0\0\0\0\0\0\0\0\0\ 1\ 1\ 1\1c\1c\1cBBB:::\16\16\16\ 4\ 4\ 4\ 1\ 1\ 1\0\0\0\a\a\a\ 1\ 1\ 1\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 4\ 4\ 6\ 1\ 1\ 1ÿÿÿÿÿýÿÿýüüúýýûþþüÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýýýûÿÿýÿÿý\0\0\0\0\0\0\b\b\b\0\0\0\ 1\ 1\ 3\ 3\ 3\ 5\0\0\ 2\ 1\ 1\ 3\11\11\13MMOKKM\f\f\ e\0\0\ 2\ 1\ 1\ 3\ 1\ 1\ 3\0\0\ 2\0\0\ 2\ 5\ 5\a\ 1\ 1\ 3\13\13\15¦¦¦ûûûÿÿÿúúúýýûýýûùù÷ýýûÿÿýýýûùù÷ÿÿýÿÿýÿÿýûûù÷÷õÿÿýûûù÷÷õÿÿýýýûûûùøøöþþüþþüûûùþþüþþüþþüþþüùù÷úúøþþüýýûþþüÿÿýÿÿýýýûüüúÿÿýøøöüüúýýûüüúýýûýýûüüúýýûÿÿýûûùûûùÿÿýýýûýýûüüúýýûùù÷úúøûûùøøöúúøüüúøøöúúøþþüüüúüüúüüúÿÿýÿÿýüüúüüúÿÿýÿÿýþþüþþüûûùÿÿýÿÿýûûùþþüøøöøøöýýûüüúùù÷úúøûûùÿÿýÿÿýþþüÿÿýÿÿýþþüôôòêêèååçÃÃÃÃÃÃÃ
Ã
Ã
ÃÃÃÃÃÃóóñÿÿýµµµ\v\v\v\0\0\0\ 3\ 3\ 3\ 4\ 4\ 6\0\0\ 2\ 3\ 2\a\ 1\ 1\ 3\ 2\ 2\ 2\b\b\ 6\15\15\13\18\18\16\14\14\14\ f\ f\ f\b\b\b\ 4\ 4\ 4%%%JJJ///
+
+
+\ 5\ 5\ 5\0\0\0\ 2\ 2\ 2\ 3\ 3\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 6\ 6\b\ 2\ 2\ 4\ 6\ 6\b\ 2\ 2\ 4\0\0\ 2\0\0\ 2\ 4\ 4\ 6\0\0\0þþþôôòýýûÿÿýûûùÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúûûùÿÿýøøöýýû\ 2\ 2\ 2\0\0\0\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 4\ 4\ 6\ 2\ 2\ 4'')NNP--/\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 6\ 3\ 3\ 5\ 6\ 6\b\ 2\ 2\ 4PPRæææýýýüüüÿÿÿüüúÿÿýùù÷ýýû÷÷õýýûþþüÿÿýüüúýýûûûùþþüýýûÿÿýýýûùù÷õõóÿÿýþþüüüúûûùüüúüüúÿÿýÿÿýþþüÿÿýýýûüüúúúøúúøýýûüüúýýûýýûûûùýýûýýûÿÿýÿÿýþþüýýûÿÿýÿÿýÿÿýþþüþþüýýûÿÿýþþüþþüÿÿýýýûþþüÿÿýüüúþþüÿÿýüüúÿÿýööôÿÿýÿÿýûûùþþüþþüøøöÿÿýþþüûûùþþüÿÿýÿÿýÿÿýÿÿýüüúÿÿýþþüþþüÿÿýþþüüüúüüúûûùÿÿýýýûüüúýýûÿÿýÿÿýûûùööôççéÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÿÿýòòòUUU\0\0\0\ 3\ 3\ 3\ 2\ 2\ 4\ 1\ 1\ 3\ 1\0\ 5\ 4\ 4\ 6\11\11\11\10\10\ e\13\13\11\e\e\19\1a\1a\1a\17\17\17\15\15\15\v\v\v\ e\ e\ e555BBB&&&\v\v\v\ 3\ 3\ 3\ 1\ 1\ 1\ 1\ 1\ 1\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\v\v\r\0\0\ 2\ 5\ 5\ 5\ 3\ 3\ 3ÿÿýÿÿýüüúÿÿýøøöÿÿýøøöþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿÿýýýûþþüþþü\ 2\ 2\ 2\ 5\ 5\ 5\0\0\0\ 5\ 5\ 5\ 4\ 4\ 6\0\0\ 2 \v\12\12\14AAC@@B\v\v\r\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\v\v\r\18\18\1a¶¶¶óóóþþþõõõÿÿÿÿÿýüüúÿÿýÿÿýýýûüüúøøöüüúüüúÿÿýþþüýýûþþüþþüüüúÿÿýþþüþþüûûùÿÿýýýûÿÿýûûùÿÿýÿÿýûûùÿÿýÿÿýÿÿýþþüÿÿýýýû÷÷õýýûÿÿýÿÿýÿÿýüüúþþüÿÿýúúøúúøþþüþþüûûùÿÿýÿÿýôôòüüúþþüÿÿýüüúýýûýýûÿÿýüüúýýûÿÿýûûùþþüûûùÿÿýüüúòòðüüúÿÿýööôþþüýýû÷÷õýýûýýûÿÿýúúøýýûõõóþþüýýûÿÿýÿÿýýýûþþüÿÿýüüúþþüûûùùù÷ûûùýýûþþüÿÿýÿÿýöööîîîÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃòòðÿÿÿªªª\ 6\ 6\ 6\ 5\ 5\ 5\0\0\ 2\ 5\ 5\a\ 2\ 2\ 4\v\v\r !!\1f##!$$"+++'''\1d\1d\1d\r\r\r\v\v\v\14\14\14JJJEEE\12\12\12\a\a\a\ 6\ 6\ 6\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 4\ 4\ 6\0\0\ 2\ 3\ 3\ 5\ 5\ 5\a\0\0\ 2\ 5\ 5\a\ 1\ 1\ 3\ 1\ 1\ 1ýýûÿÿýýýûùù÷ÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüùù÷ÿÿýÿÿÿ\0\0\0\ 2\ 2\ 4\ 6\ 6\b\0\0\ 2\ 3\ 3\ 5\ 5\ 5\ 5\0\0\0
+
+
+(((RRR&&&\0\0\ 2\ 2\ 2\ 4\ 4\ 4\ 6\ 4\ 4\ 6\ 2\ 2\ 2\0\0\0\ 2\ 2\ 2\ 6\ 6\ 6uuuìììÿÿÿþþüÿÿýÿÿýúúøÿÿýþþüþþüþþüÿÿýûûùýýûÿÿýüüúÿÿýÿÿýõõóýýûýýûÿÿýýýûüüúÿÿýôôòþþüýýûþþüÿÿýþþüýýûýýûÿÿýüüúüüúÿÿýýýûûûùþþüÿÿýÿÿýþþüôôòþþüÿÿýûûùÿÿýþþüõõóÿÿýþþüþþüýýûÿÿýÿÿýúúøÿÿýüüúøøöúúøûûùùù÷üüúÿÿýýýûÿÿýþþüÿÿýýýûÿÿýÿÿýûûùýýûþþüýýûÿÿýôôòÿÿýûûùÿÿýýýûþþüýýûýýûúúøùù÷ýýûÿÿýýýûýýûþþüÿÿýüüúööôÿÿýúúøÿÿýÿÿýòòðÃÃëããáÃÃÃÃÃÃÃÃÃÃÃÃÿÿýããá%%#\ 1\ 1\0\0\0\0\ 6\ 6\ 6\ 2\ 2\ 2\r\r\r\14\14\14 ---666:::777***\1c\1c\1c\13\13\13\ e\ e\ e)))RRR,,,\r\r\r\ 2\ 2\ 2\ 1\ 1\ 1\ 4\ 4\ 4\ 1\ 1\ 1\ 2\ 2\ 2\ 3\ 3\ 3\ 1\ 1\ 1\0\0\0\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2üüüÿÿÿøøøÿÿýÿÿýûûùÿÿýþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýýýûþþþ\ 6\ 6\ 6\ 1\ 1\ 3\0\0\ 2 \b\r\ 2\ 2\ 4\0\0\0\ 3\ 3\ 1\16\16\16MMMDDD\ f\ f\ f\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\0\0\0\ 5\ 5\ 5\0\0\0 ÃÃÃÿÿÿÿÿýýýûþþüþþüøøöþþüúúøüüúüüúüüúùù÷üüúþþüúúøûûùþþüþþüÿÿýýýûÿÿýÿÿýýýûÿÿýýýûüüúúúøúúøûûùüüúüüúûûùûûùÿÿýüüúÿÿýþþüÿÿýþþüóóñýýûÿÿýüüúþþüýýûþþüÿÿýýýûþþüÿÿýüüúüüúúúøûûùüüúùù÷ýýûÿÿýýýûþþüþþüüüúýýûþþüýýûÿÿýùù÷ÿÿýÿÿýýýûÿÿýÿÿýþþüÿÿýÿÿýþþüýýûÿÿýÿÿýþþüÿÿýþþüþþüþþüýýûüüúÿÿýÿÿýýýûÿÿýþþüÿÿýÿÿýýýûÿÿýûûùþþüþþüÿÿýùù÷îîìêêèääâáâÃðñìôôòúúøuus\ 2\ 2\0\ 2\ 2\ 2\ 4\ 4\ 4\0\0\0\v\v\v\17\17\17&&&444===CCC???111%%%\1f\1f\1f
+
+
+\ e\ e\ e===FFF\12\12\12\ 1\ 1\ 1\ 2\ 2\ 2\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 2\ 2\ 2\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 6\ 6\ 6\0\0\0þþþÿÿÿÿÿýúúøúúøÿÿýþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúýýûÿÿÿ\ 1\ 1\ 1\0\0\ 2\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\0\0\0
+
+\b111ggg,,,\0\0\0\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 4\ 6\ 6\ 6 pppóóñýýûÿÿýýýûÿÿýÿÿýùù÷þþüûûùþþüÿÿýüüúüüúÿÿýÿÿýüüúùù÷ÿÿýþþüûûù÷÷õûûùûûù÷÷õûûùþþüÿÿýþþüüüúýýûþþüýýûûûùùù÷üüúûûùúúøüüúÿÿýÿÿýùù÷ÿÿýüüúÿÿýüüú÷÷õþþüþþü÷÷õÿÿýÿÿýýýûÿÿýýýûúúøþþüýýûþþüüüúþþüþþüþþüþþüüüúûûùýýûÿÿýøøöÿÿýÿÿýööôúúøûûùõõóüüúýýû÷÷õÿÿýüüúþþü÷÷õüüúÿÿýþþüþþüüüúúúøûûùúúøõõóÿÿýüüúþþüýýûÿÿýþþüúúøúúøþþüÿÿýÿÿýûûùúúøõõóòóîÿÿûÿÿý÷÷õºº¸\11\11\ f\ 3\ 3\ 3\0\0\0\ 1\ 1\ 1\ f\ f\ f\19\19\19***777@@@GGGCCC666...!!!\ e\ e\ e\ 2\ 2\ 2\1d\1d\1dKKK222\r\r\r\ 2\ 2\ 2\ 1\ 1\ 1\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 4\ 4\ 3\ 3\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\0\ 4\ 4\ 4ÿÿÿ÷÷÷ÿÿýÿÿýÿÿýúúøþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûûùÿÿý\ 1\ 1\ 1\0\0\0
+
+\f\ 5\ 5\a\ 3\ 3\ 5\ 1\ 1\ 1\ 5\ 5\ 5\e\e\19PPPWWW\12\12\12\ 1\ 1\ 1\0\0\ 2\ 4\ 4\ 6\ 3\ 3\ 5\ 4\ 4\ 6\0\0\0\0\0\0$$$ÃÃÃôôòÿÿýÿÿýûûùýýûÿÿýûûùÿÿýüüúÿÿýÿÿýýýûÿÿýÿÿýÿÿýÿÿýùù÷ÿÿýÿÿýþþüüüúÿÿýÿÿýýýûýýûÿÿýÿÿýÿÿýþþüÿÿýÿÿýÿÿýþþüýýûþþüÿÿýùù÷ûûùüüúüüúÿÿýüüúøøöþþüýýûùù÷ÿÿýýýûööôþþüýýûüüúÿÿýÿÿýüüúÿÿýÿÿýþþüøøöýýûüüúûûùþþüýýûûûùÿÿýþþüøøöþþüþþüûûùÿÿýÿÿýýýûþþüÿÿýøøöÿÿýýýûÿÿýøøöûûùýýûýýûÿÿýþþüýýûÿÿýÿÿýüüúÿÿýüüúýýûøøöýýûûûùüüúùù÷ÿÿýøøöÿÿýÿÿýûûùþþüÿÿûýþùüüúÿÿýææä&&$\ 5\ 5\ 5\ 4\ 4\ 4\ 2\ 2\ 2\14\14\14\1f\1f\1f000<<<DDDKKKFFF:::555\1e\1e\1e\13\13\13\ 6\ 6\ 6 222VVV"""\b\b\b\ 2\ 2\ 2\ 5\ 5\ 5\ 3\ 3\ 3\ 1\ 1\ 1\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\b\b\b\0\0\0\ 5\ 5\ 5ÿÿÿúúøøøöÿÿýûûùþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿý\0\0\0\ 5\ 5\ 5\0\0\ 2\0\0\ 2\ 5\ 5\a\ 4\ 4\ 4\b\b\b664]]]---\ 2\ 2\ 2\ 5\ 5\ 5\ 1\ 1\ 3\ 3\ 3\ 5\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 3
+
+
+iiiõõõüüúÿÿýýýûúúøúúøþþüúúøÿÿýûûùýýûüüúüüúÿÿýûûùüüúþþüùù÷ýýûüüúþþüýýûüüúÿÿýþþüûûùþþüúúøûûùüüúýýûþþüþþüÿÿýÿÿýÿÿýúúøþþüþþü÷÷õýýûÿÿýüüúüüúüüúÿÿýÿÿýÿÿýÿÿýüüúþþüøøöøøöÿÿýþþüúúøþþüÿÿýýýûûûùÿÿýþþüüüúÿÿýýýûüüúÿÿýüüúþþüýýûûûùÿÿýÿÿýûûùÿÿýÿÿýÿÿýûûùûûùþþüÿÿýüüúúúøÿÿýÿÿýÿÿýþþüüüúÿÿýÿÿýûûùþþüÿÿýÿÿýúúøþþüýýûÿÿýüüúÿÿýõõóýýûÿÿýúúøÿÿýÿÿûüýøÿÿýüüúÿÿýmmk\0\0\0 \11\11\11\14\14\14"""111===DDDGGG@@@333---\1f\1f\1f\10\10\10\a\a\a\ 6\ 6\ 6\1a\1a\1aUUU:::\14\14\14\ 1\ 1\ 1\ 3\ 3\ 3\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 1\ 1\ 1\ 3\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 3\ 3\ 3÷÷÷ÿÿýÿÿýûûùÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûüüú \0\0\0\ 4\ 4\ 6\f\f\ e\0\0\ 2\0\0\ 2\10\10\10NNLIII\r\r\r\0\0\0\ 1\ 1\ 1\ 5\ 5\a\0\0\ 2\ 1\ 1\ 3\0\0\ 2\11\11\11'''ÃÃÃþþþùù÷ûûùÿÿýýýûþþüÿÿýúúøÿÿýýýûýýûøøöüüúþþüúúøûûùþþüüüúþþüþþüÿÿýÿÿýûûùÿÿýÿÿýýýûÿÿýùù÷ûûùüüúûûùûûùûûùûûùúúøÿÿýÃÃëÿÿýÿÿýùù÷ÿÿýùù÷ÿÿýþþüùù÷ÿÿýÿÿýúúøþþüÿÿýþþüúúøùù÷þþüûûùùù÷ýýûþþüÿÿýÿÿýÿÿýÿÿýýýûþþüüüúûûùüüúþþüÿÿýýýû÷÷õþþüüüúóóñûûùüüúþþüýýû÷÷õþþüþþüþþüúúøþþüýýûýýûûûùùù÷ûûùûûùööôüüúÿÿýÿÿýÿÿýÿÿýþþüÿÿýýýûüüúýýûÿÿýþþüþþüÿÿýýþùÿÿûýýûÿÿýûûù§§¥\r\r\r\f\f\f\ e\ e\ e\1c\1c\1c$$$...:::@@@<<<444'''\1d\1d\1d\1a\1a\1a\ e\ e\ e\ 4\ 4\ 4\ 2\ 2\ 2\v\v\v999RRR###\ 4\ 4\ 4\0\0\0\ 1\ 1\ 1\ 5\ 5\ 5\ 3\ 3\ 3\ 1\ 1\ 1\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\b\b
+\0\0\0ÿÿÿÿÿÿÿÿýøøöüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿ\0\0\0\ 3\ 3\ 3\ 6\ 6\ 6\0\0\ 2\ 1\ 1\ 3\0\0\ 2\ 6\ 6\b(((UUU"""\ 2\ 2\ 2\ 1\ 1\ 1\0\0\0\ 4\ 4\ 6\0\0\ 2\ 4\ 4\ 6\0\0\ 2\18\18\18kkkóóñÿÿýùù÷ÿÿýýýûÿÿýÿÿýÿÿýúúøÿÿýÿÿýÿÿýûûùÿÿýþþüýýûþþüýýûÿÿýÿÿýùù÷üüúüüúööôûûùýýûööôüüúþþüÿÿýþþüýýûüüúüüúûûùøøöÿÿýõõóþþüüüúýýûÿÿýóóñüüúýýûùù÷ýýûûûùùù÷üüúýýûþþüÿÿýþþüÿÿýýýûýýûþþüûûùÿÿýÿÿýýýûýýûþþüýýûýýûüüúùù÷ýýûÿÿýþþüûûùÿÿýÿÿýüüúÿÿýüüúÿÿýÿÿýüüúÿÿýýýûÿÿýÿÿýùù÷úúøýýûþþüþþüÿÿýÿÿýýýûüüúÿÿýûûùÿÿýþþüûûùþþüþþüýýûýýûÿÿýýýûýýûþþüüýøþÿúýýûýýûüüúÃÃÃ\18\18\18\11\11\11\19\19\19\11\11\11%%%&&&000444,,,&&&\1f\1f\1f\13\13\13\ f\ f\ f\v\v\v\ 3\ 3\ 3\0\0\0\ 4\ 4\ 4\1d\1d\1dYYY@@@\11\11\11\ 1\ 1\ 1\0\0\0\ 5\ 5\ 5\ 2\ 2\ 2\ 1\ 1\ 1\ 4\ 4\ 6\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2 \v\0\0\0ýýýüüüÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýý\ 6\ 6\ 6\0\0\0\0\0\0\ 4\ 4\ 6\ 4\ 4\ 6\ 2\ 2\ 4\f\f\ eCCCPPP\ 4\ 4\ 4\ 2\ 2\ 2\ 3\ 3\ 3\ 5\ 5\ 5\0\0\ 2\ 3\ 3\ 5\ 3\ 3\ 5
+
+\f"""ÃÃÃýýûÿÿýÿÿýûûùõõóûûùÿÿýýýûôôòþþüýýûýýûýýûÿÿýûûùþþüþþü÷÷õüüúþþüüüúþþüÿÿýüüúÿÿýÿÿýøøöÿÿýýýûþþüýýûýýûÿÿýÿÿýÿÿýüüúòòðÿÿýññïôôòÿÿýýýûÿÿýþþüþþüýýûþþüüüúþþüÿÿýýýûÿÿýþþüþþüÿÿýþþüÿÿýüüúööôüüúüüúøøöûûùÿÿýÿÿýÿÿýÿÿýúúøÿÿýüüúÿÿýýýûüüúÿÿýýýûýýû÷÷õûûùýýûþþüüüúøøöùù÷ÿÿýüüúýýûÿÿýÿÿýüüúýýûûûùõõóÿÿýýýûôôòÿÿýûûù÷÷õúúøÿÿýÿÿýóóñûûùþþüööôýýûÿÿûôõðÿÿýûûùÿÿýúúø888
+
+
+\v\v\v\15\15\15\1d\1d\1d\18\18\18\1e\1e\1e \16\16\16\15\15\15\15\15\15
+
+
+ \ 4\ 4\ 4\ 3\ 3\ 3\ 2\ 2\ 2\ 3\ 3\ 3\r\r\rQQQaaa \ 6\ 6\ 6\0\0\0\ 5\ 5\ 5\0\0\0\0\0\0\ 6\ 6\b\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5ÿÿÿýýýýýûýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúûü÷ÿÿýüüúÿÿýþþüúúúÿÿÿþþþ\ 6\ 6\ 6\0\0\0\0\0\0\ 4\ 4\ 4\ 3\ 3\ 3\0\0\ 2\1e\1e UUU---\ 2\ 2\ 2\ 1\ 1\ 1\ 1\ 1\ 3\ 3\ 3\ 5\ 1\ 1\ 3\ 3\ 3\ 5\f\f\ e\11\11\13iiióóóýýûÿÿýüüúþþüüüúÿÿýûûùÿÿýÿÿýþþüõõóûûùüüúøøöþþüÿÿýÿÿýýýûÿÿýýýûÿÿýýýûÿÿýÿÿýûûùýýûÿÿýýýûÿÿýóóñÿÿýùù÷ùù÷ûûùõõóÃÃëîîìððîÿÿýÿÿýüüúÿÿýÿÿýüüúüüúÿÿýýýûÿÿýüüúÿÿýÿÿýÿÿýýýûýýûööôüüúÿÿýûûùÿÿýÿÿýþþüÿÿýúúø÷÷õÿÿýýýûùù÷ÿÿýÿÿýøøöÿÿýÿÿýúúøþþüÿÿýÿÿýÿÿýüüúüüúÿÿýúúøþþüýýûþþüóóñÿÿýþþüþþüÿÿýüüúÿÿýþþüÿÿýûûùÿÿýþþüÿÿýüüúþþüõõóÿÿýÿÿýþþüÿÿýüüúýýûÿÿûüýøþþüÿÿýÿÿýüüúmmm\f\f\f\ e\ e\ e\v\v\v\ e\ e\ e\ f\ f\ f\ f\ f\ f\f\f\f \a\a\a\ 4\ 4\ 4\ 1\ 1\ 1\ 2\ 2\ 2\0\0\0\ 1\ 1\ 1\ 1\ 1\ 1\ 2\ 2\ 2\ 4\ 4\ 4\1c\1c\1cooo999\b\b\b\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 3\b\0\0\ 4\0\0\ 2\ 6\ 6\bûûûÿÿÿÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýþùÿÿûÿÿýüüúüüúÿÿýÿÿÿþþþ\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 2\ 2\ 2\ 5\ 5\ 5\0\0\0\ e\ e\10224VVV\14\14\14\0\0\0\ 4\ 4\ 4\ 5\ 5\a\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\v\v\r\1e\1e ®®®úúúÿÿýþþüüüúþþüööôþþüýýûÿÿýþþüþþüüüúÿÿýÿÿýýýûþþüûûùÿÿýþþüþþüööôþþüüüúÿÿýÿÿýýýûþþüÿÿýûûùþþüûûùþþüÿÿýûûùÿÿýøøöóóñááÃèèæõõóÿÿýüüúûûùÿÿýþþüõõóÿÿýúúøùù÷õõóýýûýýûôôòÿÿýýýûýýûÿÿýýýûÿÿýÿÿýüüúüüúÿÿýýýûüüúÿÿýýýûùù÷ýýûüüúùù÷ýýûüüúûûùüüúûûùýýûÿÿýûûùùù÷ýýûýýûÿÿýÿÿýþþüýýûûûùööôýýûÿÿýûûùýýûþþüþþüþþüûûùÿÿýûûùÿÿýýýûúúøýýûýýûüüúÿÿýÿÿýþþüþÿúö÷òÿÿýøøö÷÷õþþü¤¤¤\r\r\r\ 6\ 6\ 6\0\0\0\ 5\ 5\ 5\ 6\ 6\ 6\ 6\ 6\ 6\ 5\ 5\ 5\ 4\ 4\ 4\ 4\ 4\ 4\ 2\ 2\ 2\0\0\0\ 2\ 2\ 2\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 2\ 2\ 2\ 2\ 2\ 2\11\11\11WWW@@@ \ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 4\ 4\ 3\b\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 4üüüÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüýøüýøûûùÿÿýüüúþþüÿÿÿýýý\ 6\ 6\ 6\0\0\0\ 1\ 1\ 1\ 5\ 5\ 5\0\0\0\ 6\ 6\ 6\17\17\17YYY>>>\ 5\ 5\ 5\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\f\f\fGGGêêêûûûÿÿýøøöþÿúþÿúþþüÿÿýýýûÿÿýüüúÿÿýüüúýýûüüúþþüÿÿýøøöÿÿýÿÿýÿÿýúúøúúøúúøüüúüüúúúøûûùüüúøøöþþüÿÿýýýûÿÿýüüúÿÿýööôÃÃëááÃèèæïïÃÿÿýÿÿý÷÷õÿÿýþþüýýûûûù÷÷õÿÿýÿÿýýýûüüúÿÿýþþü÷÷õþþüýýûööôýýûÿÿýööôÿÿýÿÿýÿÿýþþüþþüþþüþþüÿÿýûûùýýûþþüüüúÿÿýþþüøøöþþüÿÿýþþüýýûûûùÿÿýýýûýýûþþüÿÿýýýûøøöÿÿýÿÿýûûùûûùúúøþþüÿÿýùù÷ûûùûûùÿÿýýýûþþüÿÿýÿÿýùù÷úúøÿÿýÿÿýÿÿûúûöÿÿýýýûüüúÿÿýÃÃÃ\10\10\10\ 2\ 2\ 2\ 2\ 2\ 2\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\ 6\ 6\b::<MMM\ e\ e\ e\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 1\ 3\ 3\ 3\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\0\ 5\ 3\ 2\a\ 4\ 4\ 6\ 5\ 5\a\0\0\0ÿÿÿ÷÷÷ÿÿÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿÿûüüúþþüÿÿýÿÿýýýý\ 2\ 2\ 2\ 1\ 1\ 1\ 1\ 1\ 1\b\b\b\ 3\ 3\ 3\0\0\0\b\b\b333\\\\1a\1a\1a\ 6\ 6\ 6\0\0\ 2\ 2\ 2\ 4\0\0\ 2\ 6\ 6\b\0\0\ 2 \v\17\17\17\8d\8d\8dýýýþþþúúøùù÷ÿÿûýþùþþüýýûùù÷ýýûúúøÿÿýÿÿýýýû÷÷õýýûÿÿýùù÷þþüüüúþþüÿÿýþþüþþüþþüüüúüüúÿÿýÿÿýýýûýýûÿÿýýýû÷÷õþþüøøöóóñååãèèæëëéññïþþüÿÿýûûùþþüýýûýýûÿÿýüüúþþüÿÿýÿÿýÿÿýþþüÿÿýùù÷ÿÿýýýûúúøÿÿýþþüüüúþþüüüúþþüÿÿýýýûÿÿýÿÿýüüúÿÿýÿÿýÿÿýÿÿýÿÿýÿÿýûûùÿÿýûûùÿÿýÿÿýûûùÿÿýøøöûûùÿÿýüüúÿÿýÿÿýÿÿýúúøüüúýýûööôýýûþþüýýû÷÷õÿÿýûûùýýûÿÿýüüúÿÿýùù÷ùù÷þþüþþüÿÿûÿÿûúúøÿÿýÿÿýûûùððð(((\ 1\ 1\ 1\ 4\ 4\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4%%'XXX\19\19\19\ 5\ 5\ 5\ 3\ 3\ 3\ 1\ 1\ 1\ 3\ 3\ 3\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 1\ 6\ 4\ 3\b\0\0\ 2\0\0\ 2\ 6\ 6\bþþþÿÿÿüüüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüúûöûü÷ÿÿûýþùúúøÿÿýÿÿÿ\ 2\ 2\ 2\ 3\ 3\ 5\ 5\ 5\a\0\0\ 2\0\0\ 2\ 5\ 5\ 5\ 6\ 6\ 6IIIAAA\a\a\a\ 4\ 4\ 4\0\0\ 2\ 6\ 6\b\ 2\ 2\ 4\ 1\ 1\ 3\ 4\ 4\ 6\12\12\14;;;ÃÃÃÿÿÿÿÿÿÿÿýÿÿýþÿúÿÿûüüúþþüýýûÿÿýøøöýýûÿÿýÿÿýüüúþþüÿÿýüüúÿÿýøøöûûùÿÿýýýûÿÿýþþüüüúþþüÿÿýÿÿýýýûüüúÿÿýýýûøøöÿÿýùù÷óóñååãääâêêèøøöüüúþþüÿÿýûûùþþüþþüÿÿýÿÿýýýûýýûûûùÿÿýüüúÿÿýþþüÿÿýûûùÿÿýÿÿýúúøÿÿýûûùøøöýýûÿÿýýýûÿÿýþþüõõóÿÿýùù÷ÿÿýÿÿýúúøþþüÿÿýÿÿýööôûûùÿÿýúúøÿÿýùù÷üüúÿÿýõõóúúøÿÿýýýû÷÷õþþüÿÿýúúøýýûÿÿýÿÿýùù÷ÿÿýúúøüüúÿÿýööôÿÿýýýûýýûÿÿýüüúýþùþÿúøøöüüúÿÿýþþüüüübbb\ 4\ 4\ 4\ 1\ 1\ 1\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\19\19\e[[['''
+
+
+\ 3\ 3\ 3\ 1\ 1\ 1\ 3\ 3\ 3\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\0\ 5\ 2\ 1\ 6\ 3\ 2\a\ 5\ 5\a\ 3\ 3\ 5\0\0\ 2þþþÿÿÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿûüýøÿÿûÿÿûüüúÿÿýûûû\ 5\ 5\ 5\ 3\ 3\ 5\0\0\ 2\v\v\r\ 6\ 6\b\0\0\0'''___+++\ 3\ 3\ 3\ 1\ 1\ 1\ 4\ 4\ 6\ 3\ 3\ 5\ 1\ 1\ 3\0\0\ 2\16\16\18\e\e\1d|||÷÷÷ÿÿÿúúúýýûÿÿýøùôÿÿûÿÿýÿÿýüüúÿÿýûûùýýûûûùþþüÿÿýüüúüüúüüúÿÿýûûùûûùþþü÷÷õüüúüüúúúøýýûþþüûûùøøöÿÿýÿÿýýýûÿÿýûûùüüúîîìååãÃÃÃììêÿÿýþþüýýûÿÿýøøöþþüÿÿýüüúûûùÿÿýÿÿý÷÷õýýûÿÿýýýûÿÿýúúøøøöÿÿýûûùôôòÿÿýÿÿýüüúýýûýýûúúøþþüÿÿýùù÷þþüõõóýýûÿÿýøøöýýûÿÿýþþüûûùýýûýýûûûùÿÿýþþüÿÿýþþüýýûúúøýýûüüúüüúÿÿýÿÿýÿÿýýýûÿÿýþþüÿÿýýýûþþüûûùÿÿýúúøÿÿýÿÿýÿÿýýýûúúøýþùþÿúÿÿýûûùüüúÿÿýûûû\99\99\99\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5\ 1\ 1\ 3\ f\ f\11VVV777\10\10\10\ 3\ 3\ 3\ 1\ 1\ 1\ 2\ 2\ 2\ 1\ 1\ 3\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\0\ 5\ 4\ 3\b\0\0\ 4\ 1\0\ 5\ 1\ 1\ 3\ 3\ 3\ 5üüüúúúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúûü÷üýøÿÿûüüúÿÿý\ 5\ 5\ 5\0\0\0\ 3\ 3\ 5\ 4\ 4\ 6\0\0\ 2\0\0\ 2
+
+
+<<<PPP\r\r\r\ 2\ 2\ 4\ 2\ 2\ 4\a\a \0\0\ 2\0\0\ 2\ 3\ 3\ 5\1d\1d\1f779ÃÃÃÿÿÿþþþöööúúøûûùùúõüýøþþüýýûööôýýûÿÿýÿÿýüüúÿÿýÿÿýúúøýýûýýûÿÿýýýûÿÿýýýûûûùÿÿýýýûúúøÿÿýÿÿýýýûüüúÿÿýûûùÿÿýÿÿýùù÷úúøêêèããáââà òòðþþüÿÿýÿÿýýýûúúøþþüõõóýýûþþüööôúúøüüúÿÿýøøöþþüÿÿýýýûüüúÿÿýüüúüüúÿÿýÿÿýÿÿýÿÿýüüúùù÷ýýûÿÿýÿÿýþþüùù÷þþüÿÿýûûùýýûýýûþþüÿÿýÿÿýþþüþþüûûùÿÿýÿÿýýýûÿÿýýýûþþüýýûÿÿýÿÿýúúøÿÿýýýûýýûüüúÿÿýýýûÿÿýýýûþþüÿÿýÿÿýþþüþþüüüúûûùÿÿûüýøÿÿýüüúùù÷üüúõõõ½½½\0\0\0\ 2\ 2\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5\0\0\ 2\a\a PPPHHH\19\19\19\ 5\ 5\ 5\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 4\ 5\ 4
+\0\0\ 4\ 6\ 5
+\ 2\ 2\ 4\0\0\ 2ÿÿÿÿÿÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúÿÿûþþüûûùÿÿýÿÿý\0\0\0\ 3\ 3\ 3\ 1\ 1\ 3\ 3\ 3\ 5\b\b
+\ 6\ 6\b\12\12\12PPPFFF\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\13\13\15[[[ÃÃÃþþþûûûÿÿÿÿÿýüüúÿÿûòóîÿÿýÿÿýûûùÿÿýÿÿýúúøóóñþþüýýûûûùÿÿýÿÿýýýûûûùÿÿýýýûýýûÿÿýûûùööôûûùÿÿýþþüÿÿýþþüòòðÿÿýýýûûûù÷÷õÃÃëååãççåôôòôôòûûùÿÿýýýûÿÿýþþüþþüÿÿýÿÿýýýûÿÿýûûùþþü÷÷õûûùÿÿýýýûÿÿýþþüýýûÿÿýüüúóóñûûùÿÿýÿÿýþþüÿÿýÿÿýýýûÿÿýÿÿýÿÿýýýûÿÿýýýû÷÷õüüúþþüþþüýýûþþüõõóüüúÿÿýÿÿýýýûüüúÿÿýýýûÿÿýþþüööôþþüþþü÷÷õüüúüüúÿÿýýýûÿÿýüüúþþüüüúüüúÿÿýÿÿýÿÿýÿÿûôõðþþüÿÿýüüúüüúÿÿÿÃÃÃ
+
+
+\ 5\ 5\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4OOOTTT \b\b\b\ 3\ 3\ 3\ 1\ 1\ 1\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 1\ 6\ 3\ 2\a\ 3\ 2\a\ 2\ 1\ 6\ 1\ 1\ 3\ 5\ 5\aûûûýýýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýúúúÿÿÿüüü\0\0\0\ 6\ 6\ 6\0\0\0\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3002cce$$&\ 1\ 1\ 3\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 3\11\11\11\1e\1e\1e¦¦¤ýýûÿÿýÿÿýýýûýýûÿÿýþþüüüúÿÿýüüúÿÿýûûùööôÿÿýÿÿýþþüüüúÿÿýýýûööôÿÿýûûùúúøüüúþþüÿÿýþþüÿÿýýýûûûùÿÿýÿÿýÿÿýýýûûûùýýûþþüööôêêèååãìììúúúøøøÿÿÿúúúÿÿÿþþüÿÿýþþüþþüþþüþþüþþüÿÿýþþüüüúÿÿýûûùÿÿýþþüûûùÿÿýÿÿýþþüüüúÿÿýõõóüüúýýûööôÿÿýûûùÿÿýúúøõõóÿÿýÿÿýÿÿýûûùþþü÷÷õûûùþþüþþüþþüÿÿýÿÿýþþüÿÿýýýûýýûÿÿýÿÿýþþüýýûþþüÿÿýýýûüüúúúøúúøÿÿýÿÿýüüúýýûýýû÷÷õüüúüüú÷÷õýýûþþüýýûûûùÿÿÿÿÿÿÿÿÿêêê\12\12\12\ 6\ 6\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4NNNMMM\1e\1e\1e\ 1\ 1\ 1\0\0\0\ 3\ 3\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\ 5\ 5\a\ 3\ 3\ 3ÿÿÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýýúúúÿÿÿþþþÿÿÿ\b\b\b\ 1\ 1\ 1\ 3\ 3\ 3\ 4\ 4\ 6\ 5\ 5\a\ 4\ 4\ 6\b\b
+CCEWWY\11\11\13\0\0\ 2\0\0\ 2\a\a \0\0\ 2\ 3\ 3\ 5 \15\15\15886ââà ýýûÿÿýüüúÿÿýÿÿýûûùÿÿýÿÿýúúøüüúÿÿýþþüûûùÿÿýþþüýýûøøöýýûþþüûûùÿÿýüüúüüúþþüùù÷üüúûûùÿÿýþþüùù÷ûûùúúøýýûÿÿýÿÿýÿÿýýýûññïææäääâäääúúú÷÷÷ÿÿÿøøøúúúýýûýýûÿÿýÿÿýÿÿýþþüþþüÿÿýþþüüüúûûùööôûûùúúøúúøþþüûûùüüúÿÿýÿÿýþþüÿÿýÿÿýüüúúúøùù÷þþüüüúÿÿýúúøýýûùù÷ÿÿýÿÿýüüúþþüÿÿýÿÿýüüúùù÷ùù÷ûûùýýûûûùûûùüüúþþüþþüÿÿýÿÿýþþüþþüýýûùù÷øøöüüúüüúööôÿÿýÿÿýüüúÿÿýþþüûûùýýûþþüÿÿýÿÿýýýýùùùÿÿÿÿÿÿ000\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4IIINNN\e\e\e\ 4\ 4\ 4\ 2\ 2\ 2\ 3\ 3\ 3\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 4\ 4\ 6\0\0\ 2\0\0\ 2\b\b
+\0\0\ 2\ 3\ 3\ 3÷÷÷þþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿÿÿÿüüüýýý\ 1\ 1\ 1\0\0\0\0\0\0\ 3\ 3\ 3\ 2\ 2\ 2\ 6\ 6\ 6\ 4\ 4\ 6\ e\ e\10UUWDDF\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 5\a\ 1\ 1\ 3\ 2\ 2\ 4\0\0\0\ f\ f\ f||zÿÿýüüúõõóþþüÿÿýÿÿýþþüøøöÿÿýùù÷þþüýýûÿÿýÿÿýþþüÿÿýÿÿýüüúÿÿýþþüÿÿýþþüÿÿýÿÿýÿÿýøøöÿÿýþþüþþüþþüþþüþþüøøöÿÿýûûù÷÷õûûùÿÿýõõóååãÃÃÃãããóóóýýýÿÿÿøøøÿÿÿøøöÿÿýÿÿýóóñüüúÿÿýóóñùù÷ÿÿýôôòÿÿýÿÿýÿÿýÿÿýýýûûûùøøöþþüþþüùù÷ÿÿýþþüÿÿýÿÿýùù÷þþüþþüÿÿýÿÿýøøöüüúþþüÿÿýþþüûûùùù÷ûûùÿÿýÿÿýþþüÿÿýÿÿýþþüþþüüüúúúøúúøýýûþþüýýûýýûÿÿýÿÿýýýûûûùÿÿýÿÿýúúøþþüûûùþþüÿÿýÿÿýÿÿýýýûÿÿýóóñüüúÿÿÿÿÿÿøøøôôôJJJ\ 5\ 5\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5JJJPPP\14\14\14\ 4\ 4\ 4\ 3\ 3\ 3\ 3\ 3\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\0\0\ 2\r\r\ f\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\0\0\0ÿÿÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþÿÿÿÿÿÿ\ 3\ 3\ 3\ 2\ 2\ 2\ 3\ 3\ 3\ 2\ 2\ 2\0\0\0\ 6\ 6\ 6\ 2\ 2\ 4\18\18\1aYY[**,\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\ 5\ 5\a\ 1\ 1\ 1\12\12\12ÃÃÃùù÷ÿÿýþþüõõóüüúüüúööôÿÿýÿÿýüüúÿÿýùù÷ýýûÿÿýúúøýýûÿÿýÿÿýýýûøøöûûùøøöÿÿýþþüüüúýýûÿÿýüüúþþüþþüýýûÿÿýýýûýýûýýûüüúûûùøøöÃÃëââà ÃÃÃâââøøøôôôÿÿÿÿÿÿüüüÿÿýýýûýýûÿÿýþþüüüúÿÿýÿÿýýýûþþüýýûþþüüüúýýûÿÿýýýûúúøÿÿýýýû÷÷õÿÿýûûùüüúÿÿýûûùÿÿýúúøÿÿýüüúüüúúúøÿÿýÿÿýüüúÿÿýýýûúúøýýûÿÿýÿÿýýýûûûùþþüÿÿýþþüûûùúúøýýûýýûùù÷þþüþþüÿÿýÿÿýýýûÿÿýÿÿýÿÿýüüúøøöýýûüüúýýûÿÿýûûùÿÿýÿÿýûûùõõõÿÿÿÿÿÿÿÿÿppp\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4QQQRRR\v\v\v\ 1\ 1\ 1\ 3\ 3\ 3\ 4\ 4\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\0\0\ 2\ 4\ 4\ 6\ 4\ 4\ 6\0\0\0þþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþúúúüüü\0\0\0\ 5\ 5\ 5\ 4\ 4\ 4\0\0\0\ 4\ 4\ 4\ 2\ 2\ 2\ 3\ 3\ 3\ 4\ 4\ 6--/OOQ\ f\ f\11\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 5\ 5\a\1d\1d\1d888ããáýýûÿÿýúúøÿÿýüüúþþüÿÿýúúøýýûýýûÿÿýøøöüüúþþü÷÷õúúøþþüÿÿýÿÿýûûùýýûøøöÿÿýþþüýýûÿÿýúúøööôÿÿýÿÿý÷÷õúúøÿÿýÿÿýÿÿýÿÿýþþü÷÷õêêèà à ÃÃÃÃæææðððûûûýýýüüüÿÿÿúúøÿÿýÿÿýþþüÿÿýÿÿýþþüÿÿýÿÿýÿÿýþþüüüúööôøøöÿÿýÿÿýýýûÿÿýÿÿýýýûüüúûûùûûùüüúüüúÿÿý÷÷õþþüþþüÿÿý÷÷õûûùûûùÿÿýÿÿýÿÿýýýûùù÷ûûùýýûûûùööôûûùÿÿýÿÿýýýûýýûÿÿýþþüùù÷ÿÿýûûùüüúþþüûûùùù÷ûûùþþüÿÿýûûùþþüûûùúúøýýûøøöüüúøøöÿÿýýýýþþþôôôööö\88\88\88\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3PPPNNN \ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\a\a\aýýýþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿþþþÿÿÿ\0\0\0\ 4\ 4\ 4\0\0\0 \ 1\ 1\ 1\ 2\ 2\ 2\0\0\0\f\f\ eEEG==?\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\1c\1c\1csssððîÿÿýúúøÿÿýýýûÿÿýÿÿýþþüÿÿýõõóÿÿýþþüûûùÿÿýÿÿýúúøúúøýýûûûùÿÿýÿÿýÿÿýüüúýýûþþüÿÿýüüúþþüüüúþþüþþüüüúÿÿýýýûüüúýýûüüúýýûûûùïïÃááÃÃÃÃããã÷÷÷øøøÿÿÿýýýöööÿÿýþþüõõóÿÿýúúøôôòÿÿýýýûõõóÿÿýþþüÿÿýþþüþþüþþüûûùþþüÿÿýþþüÿÿýüüúÿÿýþþüúúøþþüýýûþþüýýûÿÿýûûùýýûøøöýýûÿÿýõõóüüúÿÿýúúøùù÷þþüÿÿýþþüýýûÿÿýÿÿýþþüþþüÿÿýýýûùù÷ÿÿýûûùûûùþþüüüúûûùýýûÿÿýÿÿýþþüÿÿýüüúüüúýýûüüúþþüÿÿýÿÿýþþþÿÿÿûûû÷÷÷\9c\9c\9c\ 3\ 3\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5GGGCCC\v\v\v\ 5\ 5\ 5\ 3\ 3\ 3\0\0\0\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 3\ 4\ 4\ 6\0\0\0\ 2\ 2\ 2þþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüüþþþ\0\0\0\ 3\ 3\ 3\ 2\ 2\ 2\ 5\ 5\ 5\ 1\ 1\ 1\0\0\0\ 1\ 1\ 1\0\0\0\1e\1e\1eRRR$$$\0\0\0\ 3\ 3\ 5\ 5\ 5\a\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\1a\1a\1a¨¨¨üüúþþüÿÿýýýûþþü÷÷õ÷÷õþþüýýûÿÿýÿÿýûûùþþüÿÿýÿÿýÿÿýýýûÿÿýööôüüúýýûúúøýýûúúøúúøýýûùù÷ÿÿýÿÿýþþüýýûÿÿýÿÿýüüúôôòûûùÿÿýÿÿýööôèèæÃÃÃà à Ãåååñññýýýþþþþþþüüüûûùÿÿýüüúþþüþþüüüúüüúýýûýýûþþüôôòüüúþþüþþüùù÷øøöÿÿýÿÿýýýûÿÿýüüúÿÿýÿÿýüüúÿÿýÿÿýÿÿýýýûÿÿýûûùÿÿýþþüÿÿýýýûûûùÿÿýÿÿýþþüüüúýýûþþüüüúÿÿýÿÿýÿÿýýýûýýûþþüýýûûûùÿÿýüüúýýûþþüýýûÿÿýÿÿýþþüýýûÿÿýýýûÿÿýÿÿýþþüÿÿýÿÿýýýûüüúøøøÿÿÿþþþõõõ£££\ 3\ 3\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 5\ 5\aDDD777 \ 4\ 4\ 4\ 3\ 3\ 3\ 1\ 1\ 1\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\b\b
+\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 3\0\0\0\ 4\ 4\ 4þþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿþþþ\ 6\ 6\ 6\0\0\0\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 3\ 3\ 1\ 1\ 1\ 3\ 3\ 3\v\v\v222SSS\ e\ e\ e\ 3\ 3\ 3\ 1\ 1\ 3\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 3\15\15\17888ÃÃÃÿÿýýýûõõóûûùÿÿýÿÿýÿÿýþþüþþüüüúþþüööôþþüþþüüüúÿÿýþþüÿÿýþþüÿÿýüüúööôÿÿýÿÿýýýûýýûýýûùù÷÷÷õÿÿýÿÿýõõóùù÷ÿÿýÿÿýÿÿýýýûûûù÷÷õêêèÃÃÃÃÃÃãããïïïôôôüüüÿÿÿýýýÿÿýýýûþþüÿÿýÿÿýþþüýýûþþüþþüþþüþþüÿÿýüüúþþüýýûþþüÿÿýòòðÿÿýþþüþþüþþüýýûýýûþþüÿÿýõõóýýûÿÿýÿÿýûûùÿÿýþþüþþüÿÿýþþüýýûýýûÿÿýÿÿýüüúøøöþþüýýûûûùúúøûûùþþüÿÿýÿÿýýýûþþüþþüûûùùù÷ýýûüüúõõóüüúÿÿýüüúÿÿýÿÿýüüúÿÿýüüúôôòÿÿýÿÿÿýýýÿÿÿþþþ³³³\ 6\ 6\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 5\ 5\a\a\a HHH000\ 5\ 5\ 5\0\0\0\ 3\ 3\ 3\ 4\ 4\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5\ 6\ 6\b\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 2\ 1\ 1\ 1þþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýýýûÿÿýûûùýýûÿÿýùù÷ÿÿÿ\ 5\ 5\a\0\0\0\ 4\ 4\ 4\0\0\0\ 2\ 2\ 2\ 1\ 1\ 1\ 5\ 5\ 5\ 3\ 3\ 3\ 6\ 6\ 6333HHH
+
+
+\ 2\ 2\ 2\0\0\0\ 4\ 4\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 5\b\b
+EEEìììÿÿýþþüÿÿýþþüýýûþþüÿÿýôôòþþüÿÿýüüúüüúýýûÿÿýÿÿýþþüþþüÿÿýþþüüüúþþüûûùÿÿýýýûÿÿýýýûþþüýýûûûù÷÷õüüúÿÿýûûùÿÿýüüúþþüÿÿýüüúööôññïÃÃÃÃÃÃìììøøøýýýýýýÿÿÿýýýûûùþþüþþüýýûþþüüüúþþüÿÿýýýûþþüüüúÿÿýÿÿýûûùÿÿýýýûýýûýýûÿÿýóóñüüúÿÿýüüúÿÿýþþüýýûýýûýýûÿÿýüüúüüúÿÿýþþüÿÿýýýûÿÿýýýûøøöüüúÿÿýþþüüüúÿÿýõõóþþüÿÿýûûùþþüþþüÿÿýôôòýýûýýûÿÿýÿÿýýýûÿÿýüüúûûùõõóÿÿýúúø÷÷õÿÿýüüúýýûþþüûûùÿÿÿþþþýýýþþþÃÃÃ\ 6\ 6\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5\ 1\ 1\ 3\ 3\ 3\ 5\ 1\ 1\ 3\ 3\ 3\ 5\12\12\14OOO+++\ 3\ 3\ 3\ 4\ 4\ 4\0\0\0\0\0\0\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2ÿÿÿþþþÿÿýÿÿýúúøýýûÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýüüúþþüýýûÿÿýþþüÿÿý\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 4\ 4\ 4\ 4\ 4\ 4\ 4\0\0\0\ 3\ 3\ 3\0\0\0\ 3\ 3\ 3\f\f\f777LLL \ 3\ 3\ 3\ 2\ 2\ 2\ 4\ 4\ 4\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\ e\ e\10oooùùùýýûÿÿýýýûûûùüüúþþüÿÿýùù÷þþüþþüýýûýýûÿÿýööôööôÿÿýýýûýýûÿÿýýýûÿÿýÿÿýÿÿý÷÷õùù÷ýýûÿÿýþþüÿÿýýýûþþüÿÿýúúøýýûøøöþþüÿÿýÿÿýùù÷ïïÃÃÃÃÃÃÃãããïïïóóóõõõþþþÿÿÿûûùýýûþþüóóñýýûÿÿýööôûûùÿÿýúúøøøöúúøüüú÷÷õýýûýýûÿÿýÿÿýÿÿýûûùÿÿýÿÿý÷÷õúúøÿÿýÿÿýÿÿýõõóÿÿýÿÿýõõóüüúÿÿýööôþþüÿÿýýýûüüúÿÿýÿÿýÿÿýÿÿýÿÿýúúøþþüÿÿýüüúüüúýýûþþüÿÿýÿÿýüüúÿÿýþþüûûùÿÿýþþüÿÿýüüúÿÿýýýûûûùÿÿýýýûýýûùù÷ûûùüüüþþþþþþÿÿÿÃÃÃ\ e\ e\ e\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\17\17\19GGG\1c\1c\1c\0\0\0\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2üüüÿÿÿÿÿýüüúÿÿýýýûøøöÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúùù÷ÿÿýþþüûûùýýûÿÿý\0\0\ 2 \v\0\0\ 2\ 4\ 4\ 6\0\0\ 2\0\0\ 2 \0\0\0\ 1\ 1\ 1\ f\ f\ f999QQQ\a\a\a\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\1a\1a\1c¥¥¥ÿÿÿøøöÿÿýýýûúúøþþüýýûÿÿýÿÿýþþüþþüÿÿýõõóþþüþþüþþüýýûôôòÿÿýúúøùù÷þþüýýûÿÿýûûùýýûÿÿýÿÿýüüúÿÿýÿÿýýýûþþüûûùûûùööôÿÿýýýûÿÿýøøöééçÃÃÃÃÃÃåååùùùÿÿÿüüüÿÿÿüüüúúøÿÿýþþüÿÿýÿÿýüüúÿÿýýýû÷÷õÿÿýÿÿýþþüÿÿýûûùûûùùù÷ýýûûûùýýûÿÿýýýûýýûýýûþþüÿÿýûûùýýûûûùÿÿýþþüüüúÿÿýüüúûûùþþüýýûûûùýýûÿÿýÿÿýýýûÿÿýÿÿýÿÿýýýûÿÿýÿÿýüüúþþüÿÿýÿÿýÿÿýúúøýýûþþüúúøýýûþþüüüúýýûýýûüüúþþüÿÿýþþüÿÿýûûùÿÿýøøøÿÿÿýýýüüüááá\12\12\12\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5""$KKK\11\11\11\ 1\ 1\ 1\ 3\ 3\ 3\ 3\ 3\ 3\ 1\ 1\ 1\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2þþþÿÿÿüüúÿÿýüüúÿÿýÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýûûùÿÿýüüúýýûÿÿý\0\0\0\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\ 1\ 1\ 3\ 4\ 4\ 6\0\0\ 2\0\0\0\ 5\ 5\ 5\ 2\ 2\ 2\11\11\11666YYY\b\b\b\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 3\ 3\ 3\ 5\f\f\ e..0ÃÃÃÿÿÿööôÿÿýÿÿýûûùÿÿýûûùüüúÿÿýüüúþþüÿÿýüüúÿÿýÿÿýþþüÿÿýûûùýýûýýûþþüÿÿýøøöþþüÿÿýÿÿýööôþþüúúøÿÿýýýûùù÷üüúþþüþþüøøöÿÿýùù÷ýýûôôòááÃÃÃÃÃÃÃáááñññòòòóóóÿÿÿÿÿÿýýûþþüÿÿýøøöÿÿýÿÿýûûùüüúýýûýýûþþüüüúÿÿýÿÿýýýûýýûÿÿýüüúòòðÿÿýÿÿýÿÿýýýûööôüüúÿÿýýýûþþüÿÿýþþüÿÿýÿÿýýýûÿÿýõõóþþüÿÿýÿÿýúúøõõóøøöÿÿýüüúÿÿýúúøþþüÿÿýúúøÿÿýÿÿýûûùûûùúúøýýûþþüýýûþþüÿÿý÷÷õýýûúúøúúøþþüüüúýýûÿÿýÿÿýÿÿýúúúÿÿÿûûûûûûççç\13\13\13\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\ 2\ 2\ 4\ 4\ 4\ 6..0PPP\v\v\v\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 1\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 3\ 3ùùùÿÿýüüúþþüüüúþþüüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüüúüüúÿÿýýýûÿÿýýýûüüú\ 5\ 5\ 3\ 2\ 2\ 4\a\a \ 3\ 3\ 5\0\0\ 2 \v\ 3\ 3\ 5\ 2\ 2\ 2\ 1\ 1\ 1\ 4\ 4\ 4\12\12\12222ccc\f\f\f\ 3\ 3\ 3\ 1\ 1\ 1\ 3\ 3\ 3\ 1\ 1\ 3\ 3\ 3\ 5\14\14\16GGIÃÃÃÿÿÿüüúÿÿýýýûûûùÿÿýûûùùù÷þþüùù÷üüúÿÿýÿÿýûûùýýûüüúûûùÿÿýþþüÿÿýÿÿýÿÿý÷÷õýýûÿÿýÿÿýøøöþþüùù÷þþüüüúøøöüüúÿÿýÿÿýûûùÿÿýùù÷üüúòòðÃÃÃÃÃÃÃÃÃåååùùùÿÿÿüüüüüüùùù÷÷õþþüþþüõõóûûùþþüüüúÿÿýÿÿýþþüúúøùù÷üüúÿÿýüüúþþüÿÿýÿÿýþþüÿÿýôôòùù÷ÿÿýüüúýýûþþüÿÿýõõóþþüÿÿý÷÷õýýûÿÿýüüúýýûüüú÷÷õ÷÷õÿÿýÿÿýüüúôôòúúøÿÿýùù÷üüúþþüùù÷þþüþþüùù÷üüúÿÿýýýûýýûÿÿýÿÿýÿÿýûûùÿÿýþþüýýûýýûùù÷úúøþþüÿÿýüüúüüüþþþûûûÿÿÿëëë\e\e\e\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 6\ 2\ 2\ 4\ 3\ 3\ 588:GGG\ 4\ 4\ 4\ 2\ 2\ 2\0\0\0\ 1\ 1\ 1\ 1\ 1\ 1\ 5\ 5\a\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2ÿÿÿüüúüüúÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýþþüúúøÿÿýþþüÿÿý\ 3\ 3\ 1\0\0\0\0\0\ 2\0\0\ 2\ 2\ 2\ 4\a\a \0\0\ 2\0\0\ 2\ 3\ 3\ 3\ 4\ 4\ 4\ 4\ 4\ 4\13\13\13...jjj\r\r\r\ 2\ 2\ 2\ 1\ 1\ 1\ 3\ 3\ 3\ 2\ 2\ 4\ 1\ 1\ 3\13\13\15\\^äääÿÿÿÿÿýüüúúúøüüúþþüÿÿýüüúÿÿýûûùýýûûûùüüúôôòÿÿýÿÿýõõóýýûüüúýýûûûùþþüüüúÿÿýûûùÿÿýÿÿýþþüûûùÿÿýþþüüüúþþüýýûþþüþþüÿÿýüüúÿÿýôôòÃÃÃÃÃÃÃÃÃâââìììòòòöööþþþÿÿÿýýûýýûýýûþþüüüúùù÷ÿÿýÿÿýùù÷þþüÿÿýÿÿýýýûÿÿýúúøüüúüüúýýûüüúÿÿýýýûÿÿýÿÿýøøöùù÷ÿÿýÿÿýùù÷þþüþþüùù÷ýýûÿÿýýýû÷÷õÿÿýÿÿýüüúüüúþþüþþüýýûþþüÿÿýýýûþþüýýûüüúÿÿýþþüüüúþþüÿÿýüüúùù÷ýýûüüúýýûþþüÿÿýÿÿýÿÿýýýûúúøùù÷þþüýýûøøöþþþýýýüüüÿÿÿÃÃÃ###\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5DDF999\ 3\ 3\ 3\ 3\ 3\ 3\0\0\0\ 4\ 4\ 4\ 2\ 2\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\0\0\0ÿÿÿýýûÿÿýÿÿýóóñÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüùù÷ýýûÿÿýûûùûûù\ 5\ 5\ 3\0\0\0\ 4\ 4\ 2\ 6\ 6\b\ 3\ 3\ 5\ 3\ 3\ 5\0\0\ 2\ 1\ 1\ 3\b\b
+\0\0\ 2\ 1\ 1\ 3\ 1\ 1\ 1\16\16\16///ooo\v\v\v\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 2\ 1\ 1\ 3\ 2\ 2\ 4\10\10\12ooqãããþþþÿÿýûûùüüúÿÿýûûùÿÿýþþüÿÿýÿÿýÿÿýóóñÿÿýþþüüüúüüúþþüÿÿýôôòÿÿýþþüÿÿýÿÿýÿÿý÷÷õûûùÿÿýþþüýýûÿÿýýýûÿÿýÿÿýûûùþþüÿÿýýýûþþüÿÿýööôÃÃÃÃÃÃÃÃÃèèèòòòþþþÿÿÿýýýûûûþþüÿÿýÿÿý÷÷õþþüýýûõõóüüúþþüóóñþþüÿÿýûûùþþüûûùþþüüüúÿÿýÿÿýüüúýýûÿÿýÿÿýÿÿýúúøúúøÿÿýÿÿýþþüüüúÿÿýÿÿýûûùÿÿýûûùÿÿýþþüýýûÿÿýÿÿýÿÿýþþüÿÿýüüúÿÿýÿÿýûûùþþüÿÿýþþüÿÿýýýûÿÿýûûùúúøýýûúúøýýûþþüùù÷ÿÿýþþüüüúÿÿýûûùÿÿýÿÿýüüúÿÿÿþþþþþþþþþÃÃÃ'''\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\a\a UUW,,,\a\a\a\ 5\ 5\ 5\ 1\ 1\ 1\ 5\ 5\ 5\ 2\ 2\ 2\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2 ýýýÿÿýøøöÿÿýÿÿýüüúüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýüüúýýûÿÿý\0\0\0\ 3\ 3\ 3\ 1\ 1\ 1\0\0\ 2\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 5\ 5\a\ 2\ 2\ 4\ 1\ 1\ 1\e\e\e333sss\v\v\v\ 3\ 3\ 3\ 4\ 4\ 4\ 2\ 2\ 2\ 1\ 1\ 3\a\a \11\11\13}}}ãããýýýþþüÿÿýÿÿýÿÿýõõóþþüüüúýýûÿÿýþþüýýûþþüÿÿýþþüþþüÿÿýþþüýýûýýûüüúÿÿýûûùÿÿýþþüÿÿýýýûþþüþþüýýûûûùÿÿýÿÿýûûùÿÿýÿÿýûûùþþüþþüõõóÃÃÃÃÃÃÃÃÃæææéééöööþþþûûûúúúýýûüüúýýûÿÿýÿÿýüüúýýûÿÿýþþüþþüýýûÿÿýüüúÿÿýýýûýýû÷÷õýýûþþüýýûÿÿýüüúüüúÿÿýýýûÿÿýÿÿýõõóþþüÿÿýúúøþþüÿÿýýýûþþüþþüýýûþþüÿÿýþþüüüúþþüýýûõõóþþüüüú÷÷õýýûþþüýýûÿÿýûûùÿÿýÿÿýÿÿýÿÿýúúøÿÿýÿÿýõõóþþüýýûüüúÿÿýüüúþþüÿÿýÿÿýþþþþþþÿÿÿûûûððð***\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\r\r\ fddf"""\b\b\b\ 3\ 3\ 3\0\0\0\ 4\ 4\ 4\ 2\ 2\ 2\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 1ýýýûûùÿÿýýýûüüúÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûÿÿýýýýþþþ\v\v\v\0\0\0\0\0\ 2\ 5\ 5\a\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 4\ 4\ 6\19\19\e222|||\17\17\17\ 2\ 2\ 2\0\0\0\ 4\ 4\ 4\0\0\0\ 4\ 4\ 4\1f\1f\1f\91\91\91ëëëÿÿýùù÷ÿÿýýþùÿÿûþþüþþüôôòüüúÿÿýþþüþþüÿÿýýýû÷÷õüüúÿÿýüüúÿÿýþþüòòðþþüÿÿýûûùÿÿýþþüòòðÿÿýûûùÿÿýÿÿýùù÷þþüÿÿýõõóùù÷ÿÿýÿÿýÿÿýòòðÃÃÃÃÃÃÃÃÃäääöööüüüÿÿÿÿÿÿûûûÿÿýÿÿýþþüýýûÿÿýÿÿýÿÿýþþüþþüÿÿýÿÿýþþüÿÿýüüúÿÿýÿÿýûûùýýûööôýýûþþüõõóýýûþþüÿÿýýýûþþüÿÿýýýûýýûøøöýýûüüúþþüýýûõõóüüúÿÿýõõóûûùÿÿýôôòüüúþþüÿÿýÿÿýþþüúúø÷÷õþþüþþüööôúúøüüúÿÿýýýûÿÿýúúøþþüûûùÿÿýÿÿýüüúÿÿýþþüôôòÿÿýûûù÷÷÷ûûûÿÿÿþþþôôô333\ 2\ 2\ 4\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 6\ 6\b\0\0\ 2\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\ 5\ 5\a\1e\1e ZZ\\11\11\13\a\a \ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿýÿÿÿÿÿÿ\0\0\ 2\a\a \ 6\ 6\b\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\f\f\ e\e\e\1d(((kkk\10\10\10\ 2\ 2\ 2\ 2\ 2\ 2\ 5\ 5\ 5\a\a\a\0\0\0\19\19\19\9b\9b\9bððîüüúôôòþþüûü÷ÿÿûÿÿýÿÿýúúøÿÿýþþüýýûÿÿýüüúýýûþþüÿÿýüüúööôüüúÿÿýûûùÿÿýþþüôôòøøöÿÿýþþüûûùùù÷ýýûýýûúúøþþüÿÿýúúøùù÷þþüúúøýýûññïÃÃÃÃÃÃÃÃÃâââòòò÷÷÷üüüüüüøøøüüúüüúôôòÿÿýýýûýýûýýûþþüÿÿýùù÷ôôòÿÿýÿÿý÷÷õùù÷ÿÿýÿÿýÿÿýûûùüüúÿÿýþþüþþüõõóùù÷ÿÿýÿÿýþþüûûùÿÿýûûùýýûúúøýýûÿÿýÿÿýÿÿýÿÿýýýûÿÿýÿÿýûûùÿÿýýýûúúøüüúÿÿýþþüýýûÿÿýÿÿýûûùúúøÿÿýûûùÿÿýÿÿýÿÿýÿÿýüüúüüúûûùùù÷üüúÿÿýüüúüüúÿÿýþþþþþþÿÿÿüüüõõõ;;;\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 5\ 5\a\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4557GGI\v\v\r\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüúúøûûû\a\a\a\ 1\ 1\ 3\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 3\ 3\ 5\f\f\ e""$222qqq\1d\1d\1d\ 3\ 3\ 3\ 1\ 1\ 1\0\0\0\0\0\0\ 1\ 1\ 1###¬¬¬óóñÿÿýûûùÿÿý÷øóüýøûûùýýûûûùýýûúúøûûùüüúööôüüúÿÿýÿÿýÿÿýüüúÿÿýÿÿýýýûûûùýýûýýûÿÿýÿÿýýýûýýûýýûþþüþþüýýûýýûÿÿýÿÿýüüúüüúøøöûûùððîÃÃÃÃÃÃÃÃÃèèèõõõûûûÿÿÿÿÿÿþþþÿÿýÿÿýýýûüüúôôòÿÿýÿÿýôôòþþüÿÿýþþüþþüýýûûûùþþüúúøôôòÿÿýÿÿýÿÿýÿÿýøøöýýûÿÿýÿÿýôôòþþüûûùøøöÿÿýþþüÿÿýûûùÿÿýúúøÿÿýýýûúúøÿÿýÿÿýüüúÿÿýÿÿýÿÿý÷÷õüüúÿÿýüüúÿÿýþþüþþüýýûúúøþþüööôúúøûûùýýûþþüýýûþþüþþüýýûüüúþþüÿÿýüüúÿÿýþþþûûûÿÿÿþþþõõõ===\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 5\ 5\a\0\0\ 2\ 4\ 4\ 6\0\0\ 2IIK**,\ 5\ 5\a\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýýýý\ 3\ 3\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 5\ 5\a\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\0\0\ 2\ 3\ 3\ 5 \v\19\19\e--/888qqq,,,\ 2\ 2\ 2\ 3\ 3\ 3\ 2\ 2\ 2\ 1\ 1\ 1\ 5\ 5\ 5,,,¹¹¹òòðÿÿýþþüýýûüýøÿÿûüüúûûùþþüþþüüüúÿÿýÿÿýüüúÿÿýþþüúúøÿÿýÿÿýüüúõõóþþüþþüÿÿýÿÿýûûùÿÿýþþüÿÿýÿÿýþþüþþüÿÿýýýûüüúÿÿýÿÿýþþüûûùýýûññïÃÃÃÃÃÃââà éééôôôúúúüüüýýýýýýýýûýýûÿÿýÿÿýûûùýýûýýûúúøÿÿýÿÿýüüúÿÿýýýû÷÷õÿÿýÿÿýüüúþþüÿÿýúúøÿÿýÿÿýÿÿýüüúÿÿýýýûÿÿýýýûúúøÿÿýþþüÿÿýýýûÿÿý÷÷õýýûúúøøøöýýûüüúûûùÿÿýúúøÿÿýúúøÿÿýÿÿý÷÷õýýûýýûÿÿýþþüÿÿýüüúýýûùù÷þþüþþüþþüÿÿýþþüÿÿýÿÿýýýûûûùÿÿýúúøÿÿýüüü÷÷÷þþþýýýòòò>>>\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 4\ 4\ 6\v\v\rQQS\14\14\16\ 5\ 5\a\ 1\ 1\ 3\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûþþüüüü\ 2\ 2\ 2\0\0\ 2\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\v\v\r\17\17\19&&(224555lllCCC\ 3\ 3\ 3\ 4\ 4\ 4\ 3\ 3\ 3\ 6\ 6\ 6\0\0\0)))¼¼¼òòðýýûþþüÿÿýÿÿûÿÿûýýûûûùÿÿýýýûüüúÿÿýÿÿýüüúÿÿýýýûùù÷þþüÿÿýýýûûûùÿÿýüüúýýûþþüøøöüüúýýûýýûýýûùù÷úúøÿÿýýýûûûùÿÿýþþüþþüþþüþþüððîÃÃÃÃÃÃääâîîî÷÷÷þþþþþþÿÿÿÿÿÿþþüÿÿýþþüûûùÿÿýÿÿýÿÿýÿÿýúúøüüúþþüÿÿýþþüøøöÿÿýÿÿýüüúþþüþþüøøöþþüþþüþþüûûùÿÿýýýûÿÿýÿÿýþþüÿÿýúúøþþüýýûÿÿýþþüýýûþþüþþüûûùûûùýýûýýûööôÿÿýûûùÿÿýþþüööôÿÿýÿÿýúúøüüúÿÿýüüúÿÿýþþüÿÿýýýûÿÿýþþüûûùûûùýýûüüúûûùÿÿý÷÷õÿÿýÿÿÿùùùûûûúúúðððDDD\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4++-NNP\f\f\ e\ 5\ 5\a\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿý÷÷õÿÿÿ\ 1\ 1\ 1\ 2\ 2\ 4\b\b
+\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 6\a\a \13\13\15##%**,::<CCCvvvccc\ 3\ 3\ 3\0\0\0\0\0\0\0\0\0\ 3\ 3\ 3@@@ÃÃÃôôòÿÿýÿÿýýýûýþùýþùýýûüüúþþüúúøûûùýýûüüú÷÷õûûùÿÿýþþüýýûüüúÿÿýÿÿýþþü÷÷õúúøÿÿýþþüüüúùù÷þþüýýûùù÷ùù÷ÿÿýýýûùù÷ýýûûûùûûùýýûûûùÃÃëÃÃÃÃÃÃååãêêêòòòûûûùùùúúúûûûøøöûûùÿÿýóóñüüúÿÿýÿÿýþþüôôòÿÿýÿÿýüüúÿÿýÿÿýýýûøøöõõóÿÿýÿÿýýýûýýûööôüüúÿÿýÿÿýóóñüüúÿÿýýýûýýûøøöþþüþþüÿÿýÿÿýúúøþþüÿÿýúúøüüúÿÿýüüúûûùÿÿýûûùþþüþþüúúøÿÿýÿÿýøøöÿÿýüüúþþüýýûÿÿýúúøùù÷þþüüüúûûùýýûþþüþþüþþüþþüýýûýýûÿÿÿüüüÿÿÿþþþóóóGGG\ 2\ 2\ 4\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 6\ 6\b\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4EEG99;\ 5\ 5\a\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýûüüúüüü\ 3\ 3\ 3\ 2\ 2\ 4\0\0\ 2\ 5\ 5\a\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\a\a \14\14\16&&(335IIKRRRxxxvvv\ 1\ 1\ 1\ 1\ 1\ 1\ 5\ 5\ 5\0\0\0\15\15\15bbbÃÃÃòòðÿÿýûûùôôòÿÿûûü÷ÿÿýÿÿýÿÿýúúøþþüÿÿýÿÿýüüúÿÿýÿÿýÿÿýûûùööôýýûúúøûûùÿÿýÿÿýýýûüüúüüúÿÿýÿÿýÿÿýýýûüüúþþüýýûûûùüüúüüúûûùýýû÷÷õêêèÃÃÃÃÃÃääâÃÃÃõõõÿÿÿþþþþþþÿÿÿüüúÿÿýýýûüüúÿÿýööô÷÷õÿÿýþþüýýûôôòùù÷ÿÿýüüú÷÷õþþüÿÿýþþüÿÿýüüúÿÿýþþüÿÿýôôòøøöÿÿýüüúýýûúúøþþüúúøþþüýýûÿÿýýýûøøöûûùÿÿýüüúýýûÿÿýýýûýýûÿÿýþþüýýûþþüýýûýýûþþüúúøÿÿýÿÿýÿÿýýýûÿÿýûûùüüúýýûüüúÿÿýÿÿýýýûþþüÿÿýüüúÿÿýùù÷ýýýýýýÿÿÿÿÿÿõõõEEE\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 5\ 5\a\ 4\ 4\ 6\0\0\ 2\ e\ e\ eKKK\1d\1d\1d\ 4\ 4\ 4\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿýÿÿý\0\0\0\0\0\0\ 4\ 4\ 6\ 2\ 2\ 4\0\0\ 2\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ f\ f\11""$557KKMRRRttt\84\84\84\ 5\ 5\ 5\ 3\ 3\ 3\ 2\ 2\ 2\ 4\ 4\ 4\12\12\12cccÃÃÃòòðÿÿýýýûþþüýþù÷øóþþüýýûüüúööôþþüþþüûûùÿÿýÿÿýüüúÿÿýÿÿýüüúÿÿýÿÿýûûùÿÿýýýûýýûÿÿýüüúÿÿýýýûþþüÿÿýþþüþþüÿÿýÿÿýÿÿýÿÿýþþüþþüööôééçÃÃÃÃÃÃããáëëëôôôÿÿÿýýýýýýÿÿÿûûùÿÿýÿÿýÿÿýýýûÿÿýÿÿýþþüþþüþþüýýûõõóþþüÿÿýüüúýýûþþüýýûþþüÿÿýþþüøøöÿÿýÿÿýÿÿýÿÿýÿÿýþþüúúøÿÿýýýûüüúøøöûûùÿÿýýýûýýûÿÿýÿÿýÿÿýþþüþþüööôûûùÿÿýÿÿýÿÿýÿÿýüüúÿÿýõõóüüúþþüõõóþþüýýûÿÿýÿÿýÿÿýþþüÿÿýýýûõõóúúøÿÿýþþüþþüõõóþþþþþþýýýüüüòòòFFF\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5\ 2\ 2\ 4\1e\1e\1eJJJ\f\f\f\v\v\v\ 3\ 3\ 5\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2þþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþü\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 5\ 5\a\v\v\r\15\15\17335FFFfff\8c\8c\8c\17\17\17\0\0\0\ 3\ 3\ 3\ 4\ 4\ 4\12\12\12eeeÃÃÃÿÿýÿÿýûûùýýûÿÿûüýøýýûÿÿýÿÿýþþüýýûüüúüüúÿÿýõõóýýûÿÿýþþüüüúÿÿýõõóýýûþþüõõóþþüýýûþþüÿÿýÿÿýûûùÿÿýÿÿýûûùÿÿýÿÿýûûùýýûÿÿýþþüööôëëéÃÃÃÃÃÃÃÃÃÃÃÃñññÿÿÿøøøúúúÿÿÿ÷÷õûûùÿÿýûûùÿÿýýýûûûùÿÿýüüúÿÿýþþüÿÿýÿÿýþþüÿÿýÿÿýýýûóóñÿÿýþþüþþüüüúÿÿýÿÿýûûùÿÿýóóñÿÿýýýûýýûÿÿýüüúþþüûûùÿÿýýýûûûùööôúúøÿÿýüüúþþüÿÿýúúø÷÷õþþüûûùÿÿýÿÿýüüúþþüÿÿýüüúÿÿýüüúõõóýýûþþüööôýýûýýûþþüÿÿýûûùööôûûùÿÿýùù÷üüüÿÿÿùùùÿÿÿìììDDD\0\0\ 2\ 5\ 5\a\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 2\r\r\r;;;,,,\ e\ e\ e\ 2\ 2\ 2\ 5\ 5\a\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 1ýýýûûùÿÿýýýûüüúÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþü\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 5\ 5\a\a\a \13\13\15000HHH|||%%%\0\0\0\ 5\ 5\ 5\ 1\ 1\ 1\14\14\14gggÃÃÃïïÃýýûÿÿýÿÿýýþùþÿúÿÿýûûùûûùÿÿýÿÿý÷÷õþþüÿÿýûûùÿÿýþþüÿÿýþþüýýûýýûÿÿýÿÿýüüúÿÿýüüúúúøüüúûûùøøöüüúýýûøøöúúøýýûööôýýûÿÿýþþüøøöììêÃÃÃÃÃÃããáîîîôôôþþþúúúüüüÿÿÿøøöúúøÿÿýúúøÿÿýýýûûûùÿÿýýýûþþüûûùüüúúúøýýûÿÿýþþüÿÿýýýûþþüööôýýûÿÿýûûùÿÿýÿÿýþþüüüúÿÿýÿÿýûûùþþüÿÿýþþüÿÿýÿÿýøøöÿÿýÿÿý÷÷õþþüÿÿýûûùýýûýýûýýûÿÿýúúøüüúþþüÿÿýÿÿýýýûýýûÿÿýþþüüüúÿÿýÿÿýþþüÿÿýüüúûûùþþüýýûüüúÿÿýûûùüüúýýýÿÿÿýýýüüüäää===\ 1\ 1\ 3\ 3\ 3\ 5\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\ 2\ 2\ 4\0\0\ 2\ 6\ 6\ 6\1a\1a\1aGGG\14\14\14\ 3\ 3\ 3\ 2\ 2\ 2\ 1\ 1\ 3\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\0\0\ 2\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2 ýýýÿÿýøøöÿÿýÿÿýüüúüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþü\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\0\0\ 2\14\14\16\1f\1f\1f(((___===\ 4\ 4\ 4\ 1\ 1\ 1\ 2\ 2\ 2\16\16\16lllÃÃÃøøöÿÿýýýûññïþÿúûü÷üüúþþüþþüþþüÿÿýýýûÿÿýüüúýýûýýûôôòýýûÿÿýþþüÿÿýýýûüüúÿÿýÿÿýýýûûûùÿÿýÿÿýýýûÿÿýÿÿýýýûÿÿýÿÿýúúøÿÿýþþüþþüúúøììêÃÃÃÃÃÃççåñññøøøþþþÿÿÿÿÿÿÿÿÿýýûýýûüüúûûùþþüüüúúúøþþüýýûüüúÿÿýþþüúúøýýûüüúøøöûûùþþüúúøÿÿýûûùööôÿÿýÿÿýôôòÿÿýÿÿýüüúþþü÷÷õúúøþþü÷÷õýýûúúøúúøýýûüüúýýûþþüüüúÿÿýýýûÿÿýüüúþþüúúøüüúùù÷þþüþþüúúøüüúýýûýýûÿÿýþþüýýûþþüüüúûûùüüúþþüþþüþþüÿÿýüüúÿÿý÷÷÷þþþÿÿÿýýýÃÃÃ(((\0\0\ 2\ 3\ 3\ 5\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\0\0\ 2\ 6\ 6\ 6\ 3\ 3\ 3\f\f\f===;;;\ e\ e\ e\0\0\0\ 6\ 6\ 6\ 5\ 5\ 5\ 4\ 4\ 4\ 4\ 4\ 4\ 3\ 3\ 3\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 1\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 3\ 3\ 3\ 3\ 3\ 4\ 4\ 4\ 4\ 4\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\0\0\0ÿÿÿýýûÿÿýÿÿýóóñÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþü\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\f\f\ e \e\e\eKKKTTT\ 1\ 1\ 1\ 4\ 4\ 4\ 4\ 4\ 4\19\19\19jjjÃÃÃööôýýûÿÿýÿÿýÿÿûûü÷ûûùÿÿýÿÿýüüúýýûÿÿýûûùøøöÿÿýþþüûûùÿÿýûûù÷÷õÿÿýûûùøøöÿÿýûûùþþüþþüÿÿýÿÿýüüúýýûþþüþþüÿÿýþþüúúøÿÿýüüúýýûûûùëëéÃÃÃÃÃÃééçéééóóóõõõûûûÿÿÿüüüÿÿýÿÿýýýûýýûÿÿýüüúúúøýýûüüúùù÷ÿÿýþþüúúøþþüþþüûûùþþüÿÿýÿÿýþþüÿÿýýýûþþüÿÿýûûùýýûÿÿýûûùþþüýýûÿÿýÿÿýúúøþþüþþüÿÿýÿÿýûûùÿÿýüüúôôòþþüûûùÿÿýúúøýýûýýûþþüøøöüüúþþüùù÷þþüûûùúúøÿÿýúúøùù÷ýýûûûùýýûþþüýýûýýûÿÿýýýûÿÿýÿÿýöööûûûÿÿÿþþþÃÃÃ\15\15\15\ 3\ 3\ 5\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\ 1\ 1\ 3\ 6\ 6\b\ 4\ 4\ 6\ 5\ 5\a\0\0\0\ 2\ 2\ 2\12\12\12HHH\1f\1f\1f\10\10\10\0\0\0\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 2\ 1\ 1\ 1\0\0\0\ 1\ 1\ 1\ 2\ 2\ 2\ 4\ 4\ 4\ 6\ 6\ 6\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 1\ 1\ 1\ 1\ 1\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2ÿÿÿüüúüüúÿÿýÿÿýýýûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþü\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\a\a \0\0\ 2\ 5\ 5\ 5\ e\ e\ e+++[[[\ f\ f\ f\0\0\0\ 1\ 1\ 1\1d\1d\1dkkkÃÃÃÿÿýÿÿýþþüÿÿýÿÿûÿÿûÿÿýûûùùù÷ýýûýýû÷÷õûûùüüúÿÿýûûùÿÿýÿÿýúúøûûùþþüþþüûûùþþüùù÷ÿÿýüüúúúøÿÿýúúøøøöúúøüüúþþüýýûùù÷ýýûøøöüüúüüúëëéÃÃÃà à Ãëëé÷÷÷ÿÿÿýýýÿÿÿÿÿÿûûûþþüüüúþþüÿÿýÿÿýÿÿýüüúýýûÿÿýúúøþþüÿÿýýýûÿÿýÿÿýÿÿýÿÿýüüúÿÿýýýûÿÿýþþüÿÿýÿÿýÿÿýÿÿýúúøûûùûûùÿÿýÿÿýüüúÿÿýÿÿýÿÿýûûùÿÿýÿÿýýýûþþüýýûýýûööôÿÿýþþüÿÿýÿÿýÿÿýûûùÿÿýÿÿýüüúÿÿýþþüüüúÿÿýüüúüüúÿÿýþþüþþüýýûúúøüüúÿÿýÿÿýýýûÿÿýþþþýýýüüüýýýÃ
Ã
Ã
\ f\ f\ f\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\0\0\0\ 3\ 3\ 3\ 6\ 6\ 6\ f\ f\ f+++666\1e\1e\1e\11\11\11\ 4\ 4\ 4\ 5\ 5\ 5 \ e\ e\ e\r\r\r \b\b\b\ 4\ 4\ 4\0\0\0\0\0\0\ 1\ 1\ 1\ 2\ 2\ 2\ 3\ 3\ 3\ 4\ 4\ 4\ 5\ 5\ 5\ 4\ 4\ 4\ 1\ 1\ 1\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 3\ 3ùùùÿÿýüüúþþüüüúþþüüüúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþü\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\a\a\a\ 6\ 6\ 6 888;;;\11\11\11\ 1\ 1\ 1\1f\1f\1ffffÃÃÃÿÿýüüúüüúþþüþÿúýþùþþüþþüüüúýýûþþüûûùÿÿýÿÿýüüúôôòÿÿýÿÿýýýûÿÿýúúøÿÿýÿÿýýýûüüúÿÿýüüúøøöÿÿýþþüûûùüüúþþüÿÿýÿÿýÿÿýÿÿýúúøÿÿýþþüëëéÃÃÃÃÃÃææäêêêõõõõõõúúúýýýûûûÿÿýÿÿýÿÿýÿÿýþþüÿÿýÿÿýþþüÿÿýþþüüüúÿÿýþþüýýûþþüþþüþþüõõóûûùÿÿýýýûøøöÿÿýÿÿýøøöþþüüüúþþüúúøÿÿýüüúööôýýûùù÷ýýûüüúüüúûûùÿÿýÿÿýüüúÿÿýûûùÿÿýüüúÿÿýþþüÿÿýûûùüüúÿÿýþþüÿÿýÿÿýýýûÿÿýÿÿýÿÿýüüúþþüÿÿýýýûûûùûûùýýûþþüýýûÿÿýÿÿÿüüüüüüÿÿÿÂÂÂ\v\v\v\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4 """333999@@@((($$$\14\14\14\ 5\ 5\ 5\15\15\15\1d\1d\1d%%%%%%""""""\e\e\e\ f\ f\ f\v\v\v\ 5\ 5\ 5\ 3\ 3\ 3\ 1\ 1\ 1\0\0\0\ 1\ 1\ 1\ 2\ 2\ 2\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2þþþÿÿÿüüúÿÿýüüúÿÿýÿÿýÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþü\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 4\ 4\ 6\ 4\ 4\ 6\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\0\0\0 \ 3\ 3\ 3\f\f\f>>>AAA\f\f\f\e\e\e]]]ÃÃÃÿÿýøøö÷÷õýýûþÿúùúõûûùÿÿýÿÿýýýûÿÿýÿÿýüüúýýûþþüýýûÿÿýúúøýýûüüú÷÷õÿÿýÿÿýúúøÿÿýÿÿýþþüýýûþþüþþüýýûýýûýýûüüúüüúÿÿýÿÿýûûùÿÿýÿÿýëëéÃÃÃÃÃÃááÃõõõþþþÿÿÿþþþýýýûûûùù÷ööôÿÿýþþüûûùÿÿýþþüûûùÿÿýÿÿýõõóüüúûûùûûùüüúÿÿýÿÿýüüúÿÿýõõóÿÿýÿÿýôôòûûùÿÿýõõóÿÿýÿÿýÿÿýÿÿýýýûüüúþþüùù÷ûûùÿÿýÿÿýööôÿÿýýýûññïýýûÿÿýþþüúúøýýûúúøÿÿýûûùööôÿÿýýýûûûùÿÿýýýûûûùÿÿýþþü÷÷õýýûþþüüüúÿÿýýýûúúøûûùüüúþþüýýýùùùÿÿÿÿÿÿ\89\89\89\ 4\ 4\ 4\ 6\ 6\b\0\0\ 2\ 4\ 4\ 6\0\0\ 2\f\f\ e""$000DDD777888,,,\19\19\19\11\11\11\v\v\v\0\0\0\13\13\13\1a\1a\1a!!! ###...111)))'''\17\17\17\12\12\12\f\f\f\a\a\a\ 5\ 5\ 5\ 3\ 3\ 3\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\ 2üüüÿÿÿÿÿýüüúÿÿýýýûøøöÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþÿýþÿýþþÿúþÿúýÿüýÿþþþþþþþ\ 1\ 3\ 2\ 1\ 3\ 2\ 2\ 2\ 2\ 3\ 1\ 2\ 5\ 1\0\b\ 1\0 \ 2\0
+\ 2\0
+\0\0\f\0\0\12\ 4\0\13\b\0\10\a\0\v\ 4\0
+\ 4\0\ 4\ 1\0\ 5\ 4\0\0\0\0\0\0\0\ 3\ 3\ 5\12\10\13GEH_]`222FFFÃÿýýûþÿýýÿþþÿÿûýøýþùÿÿûþÿúüüüþþþÿÿÿúúúÿÿýüüúÿÿýÿÿýýýûôôòÿÿýýýûúúøÿÿýþþüööôþþüüüúýýûÿÿýüüúÿÿýÿÿýþþüýýûùù÷úúøÿÿýûûù÷÷õþþüþþüëëéÃÃÃááÃããáììì÷÷÷ýýýüüüÿÿÿÿÿÿÿÿýýýûÿÿýüüúøøöþþüüüú÷÷õýýûüüúüüúÿÿýÿÿýþþüüüúüüúÿÿýþþüÿÿýúúøÿÿýþþüûûùÿÿýÿÿýýýûüüúõõóýýûýýûýýûÿÿýþþüûûùööôúúøÿÿýûûùüüúÿÿýýýûÿÿýýýûýýûýýûÿÿýööôüüúÿÿýþþüÿÿýüüú÷÷õýýûüüúøøöþþüüüúúüûÿÿÿûûùùøöÿþúÿÿûüýøþÿûõ÷òþÿýÿÿýøøøÿÿÿõõõjlk\ 1\ 3\ 2\0\0\0\ 1\ 1\ 1\ 6\ 6\b\b\b
+'')GGI444\1d\1d\1d\ f\ f\ f\v\v\v
+
+
+\b\b\b\0\0\0\0\0\0\ 3\ 3\ 3\ 4\ 4\ 4\r\r\r\ f\ f\ f\b\b\b\v\v\v\1e\1e\1e***))))))666333---&&&\1d\1d\1d\12\12\12\b\b\b\ 1\ 1\ 1\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 2\ 6\ 1\ 2\ 6\ 2\ 1\ 6\ 3\ 1\ 4\ 3\ 2\0\ 3\ 2\0ÿÿýþþüÿÿÿÿÿÿûúøþýùÿÿûýþùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþÿýÿÿüÿÿüÿÿþùýÿùûÿþûÿÿþÿÿþÿÿôøù\ 2\ 6\ 5\ 4\ 6\ 3\ 3\0\0\r\0\0\10\0\0\1f \0?$\0fF\0\81^
+\8ch\b\8ah\ 4qT\0M8\0$\17\0\13\f\0\a\ 5\0\0\0\0\ 4\ 5\a\ 2\ 1\a\b\ 2\f\16\10\1aFAH^\_DDB«¬§þÿýùýüúþÿûÿÿüÿýûþ÷ÿÿø÷øòýûþþüÿÿýÿÿýÿöööúúøýýûÿÿýþþüýýûýýûýýûýýûÿÿýÿÿýýýûýýûùù÷÷÷õÿÿýÿÿýûûùÿÿýÿÿýÿÿýûûùÿÿýÿÿýþþüýýûÿÿÿõõõëëëÃÃÃÃÃÃâââôôòýýûóóñýýûýýûýýûÿÿýýýûþþüÿÿýýýûÿÿýÿÿýýýûÿÿýþþüýýûÿÿýÿÿýøøöÿÿýÿÿýþþüÿÿýÿÿýÿÿýÿÿýýýûÿÿýûûùÿÿýþþüþþüþþüÿÿýõõóþþüþþüýýûÿÿýûûùÿÿýúúøÿÿýÿÿýÿÿýýýûÿÿýööôýýûþþüüüúÿÿýÿÿýýýûÿÿýýýûÿÿýýýûÿÿýÿÿýþþüÿÿýüþýûÿÿþÿÿûùúÿþýÿýöÿÿöüÿöüÿø÷þöüÿûùûöýÿüýÿþñòôBFE\ 1\ 5\ 4\ 1\ 1\ 1\ 3\ 2\0\v
+'%&201" !\13\13\15\a\a \ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 5\ 5\a\v\v\r\12\12\14\17\17\19++-==?<<<DDDCCCDDD///\v\v\v\ 1\0\0\ 4\ 4\ 6\ 1\ 4\v\0\0\a\ 6\ 5\v\ 4\0\ 1\ 5\0\0\ 3\0\0þÿ÷ýÿúþýÿÿýÿÿýúÿþ÷þÿ÷ýÿùþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþÿýÿÿýþþÿùýÿùûÿþûÿÿùúþþÿÿþÿÿ\0\ 1\0\b\ 6\0
+\0\0#\f\0]? \9cz#³\8d"à+ê*â³'éº,â¸.î3©\8f0\I\ 5\13\a\0\v\ 4\0\ 6\ 1\0\ 4\ 2\a\ 5\ 2 \ 3\0\a\15\13\18MMO\83\83\81\9a\9a\98öø÷ïðòüÿÿüÿÿóøôýÿùÿÿøûü÷ÿýÿú÷þþýÿþþÿûûûúúøÿÿýýýûýýûÿÿýûûùÿÿýÿÿýýýûÿÿýþþüýýûûûùøøöþþüýýûøøöüüúûûùýýûøøöýýûýýûÿÿýÿÿýþþþúúúëëëà à à ÃÃÃåååîîìÿÿýþþüûûùûûùúúøÿÿýüüúþþüÿÿýüüúüüúþþüÿÿýýýûõõóÿÿýùù÷üüúùù÷þþüùù÷÷÷õúúøüüúýýûööôýýûýýûÿÿýÿÿýüüúþþüþþüÿÿýúúøÿÿýÿÿýüüúþþüüüúþþüùù÷þþüúúøýýûþþüþþüþþüÿÿýÿÿýÿÿýÿÿýüüúùù÷ûûùþþüÿÿýýýûüüúýýûýýûüüúôöóùýþûÿÿÿþÿÿûüÿýúÿÿøýÿ÷úÿ÷ùÿúøÿøþÿûÿÿýþþÿÃÃÃ%'&\ 1\ 3\ 2\ 2\ 2\0\v
+\b%$""!\1f\12\10\11 \a\b\a\a \ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 5\ 5\a\ f\ f\11\v\v\r\1f\1f\1f444JJJgggiiiNNN \1f\1d\ 1\ 1\ 1\ 4 \r\0\ 1\a\0\0\ 5 \ 5\ 6\ 4\0\0\v\b\ 1þÿùýÿþÿüÿÿüÿÿýùÿþõýÿúûÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýÿúûÿõûÿõûÿúýÿüÿþúÿþùÿÿúöõñÿþÿÿÿö\r\0\0L7\ 2\9az'«\85\18Ã\95\16é\1dê¸!ì¼\1eï½\1eñ¿\1eð¾\1dê¼ äº(ç,\8al\16-\18\0\ e\0\0\ 6\0\0\ 1\ 3\ 2\0\ 3\ 1\0\ 4\0\13\18\14STV¢¡¦æãêùøýþÿÿõùø÷üöþÿúÿÿûýüúÿþÿùùûýÿüüþùþþü÷÷õÿÿýùù÷ùù÷ÿÿý÷÷õþþüÿÿýûûùþþüÿÿýþþüþþüûûùüüúÿÿýúúøþþüþþüÿÿýüüúÿÿýýýûþþüÿÿýüüüýýýëëëáááÃÃÃæææïïÃÿÿýÿÿýûûùýýû÷÷õÿÿýûûù÷÷õýýûúúøúúøýýûÿÿýÿÿýúúøÿÿýùù÷þþüþþüÿÿýþþüýýûÿÿýôôòÿÿýýýûÿÿýøøöúúøýýûÿÿýÿÿýýýûÿÿýüüúÿÿýþþüûûùýýûÿÿýúúøýýûÿÿý÷÷õþþüÿÿýþþüÿÿýýýûýýûÿÿýÿÿýýýûýýûþþü÷÷õýýûûûùúúøýýûÿÿýÿÿýûýøûÿúüÿûþüÿÿýÿöñ÷ÿýÿöøõûÿûöÿøñøñþÿýûùúþùý«¦ª\14\10\11\ 4\ 3\ 1\v
+\b\1d\1c\1a'&$\11\10\ e\ 2\0\ 1\ 1\0\0\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\0\0\ 2\0\0\ 2\0\0\ 2\ 1\ 1\ 3\ 1\ 1\ 1\ e\ e\ e444RRRsssxxvONI()#\ 5\ e\r\0\ 4\ 6\ 3\ 4\b\ 3\ 1\ 4\ e\b\býùøþýÿþýÿÿûÿÿüÿÿý÷ÿÿ÷úÿÿúÿÿýþÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýÿúøÿóøÿóûÿúþþþÿýúÿýùÿþùÿþøÿûóÿþægP\1c\98x#µ\8d\14Ã\9c\ fá«\13òº\e÷Ã\18ó¿\11ó¿\13ó½\12ó»\10ö¾\13ö½\14ë¶\1cï2¡~"5\1e\0\10\ 5\0\ 4\ 5\0\0\a\0\0\ 4\0\0\ 5\ 1\11\12\14SQVª¥¬æãêÿÿÿüþûþÿûûýøÿÿýÿþÿÿþÿÿÿÿþÿúüÿúþÿûüüúÿÿýüüúýýûÿÿýüüúÿÿýÿÿýøøöþþüÿÿýþþüÿÿýÿÿýþþüýýûùù÷þþüþþüÿÿýüüúýýûùù÷ýýûüüúûûûüüüìììÃÃÃÃÃÃåååôôòùù÷ûûùüüúÿÿýúúøþþüýýûüüúÿÿýÿÿýýýûúúøûûùÿÿýþþüüüúúúøÿÿýüüúûûùÿÿýÿÿýýýûýýûÿÿýÿÿýûûùÿÿýûûùÿÿýøøöÿÿýûûùüüúûûùüüúüüúúúøþþüÿÿýûûùÿÿýÿÿýúúøÿÿýýýûþþüÿÿýùù÷ûûùþþüýýûÿÿýÿÿýÿÿýúúøÿÿýÿÿýþþüüüúûûùÿÿýýÿúüÿúòõìÿüùÿøöÿüúÿþöû÷ìûùìýþîÿÿðÿýïÿþóúïénc_\a\0\0\b\0\0\19\15\14-,*\10\ f\r\ 1\0\0\ 6\ 4\ 5\ 5\ 3\ 4\ 6\ 6\b\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 4\ 4\ 6\ 1\ 1\ 3\ 6\ 6\ 6\0\0\0\15\15\15:::PPPvwrmmcDF;\15\e\17\ 2\v
+\ 3\a
+\0\0\ 4\ 3\0\0ÿþÿþýÿþýÿÿýÿÿýþÿþ÷ÿþùúÿÿøÿÿýÿþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüýÿúøÿ÷øÿ÷ûÿúÿýþÿûÿÿúÿÿúüÿýõÿýêÿþá}'¶\89\12Ã\9d\ eè°\13ð²\13ø»\15õ½\10ð» ò¾
+ô½\vøº\ fþ»\15ýµ\13ý¹\1aê¯\15ì$®\8f%8%\0\b\ 1\0\ 5\ 6\0\ 3 \a\ 1
+\a\f\ e \ f\ e\fVQW¯ª±ãáäþÿýüÿøòôïþþÿÿþÿùù÷üþùûÿùûÿùýÿúÿÿýûûùÿÿýÿÿýüüúÿÿýþþüþþüøøöýýûþþüûûùþþüÿÿýÿÿýþþüúúøþþüýýûÿÿýüüúþþüúúøýýûúúøýýýøøøîîîÃÃÃÃÃÃäääôôòøøöööôýýûÿÿýÿÿýþþüÿÿýÿÿýÿÿýþþüÿÿýüüúùù÷þþüÿÿýþþüüüúÿÿýüüú÷÷õýýûþþüüüúÿÿýÿÿýÿÿýüüúÿÿýýýûÿÿýøøöÿÿýúúøüüúýýûûûùýýûûûùÿÿýüüúüüúÿÿýúúøþþüþþüøøöþþüþþüýýûýýûûûùùù÷ýýûÿÿýøøöÿÿýÿÿýýýûÿÿýýýûøøöûûùüüúûýøüþóÿýÃÿþæýîÃÿýÃÿõÃÿþÃÿùÃÿüÃÿóÃÿúÃóà ÃQ?)\r\0\0\10\ 5\0'"\1f)(&\ 3\ 2\0\ 1\0\0\ 3\ 1\ 2\ 4\ 2\ 3\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 2\ 2\ 4\0\0\0\a\a\a\ e\ e\ e+++GGGNOJXXLEE;11/\12\16\19\0\ 1\ 5\ 3\ 6\v\b\a\fþüýþÿùýÿõûÿõýÿ÷ÿý÷ÿþùûÿúúÿúýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþúþÿúûÿúûÿüþþüÿýþÿûÿÿûÿÿýÿÿùïÿûÃ\9c{4Â\82\12Ã\98\vã
+å« ñ²\rö¸\ fô¼\rôÃ\föÃ\føÃ\ fù»\12ý¸\15ÿ¶\15þµ\10ÿ¾\10ïº\14ë\1c£\88\1d:%\0
+\0\0\ 1\ 1\0\0\ 1\0\a\b\ 2\17\16\12$"%[Y\  \9eâãÃÿÿúüýøÿýÿþüÿööôýÿùøý÷óøòùûøÿÿýööôþþüþþüööôÿÿýûûùþþüûûùþþüüüúúúøüüúüüúþþüÿÿýýýûÿÿýûûùýýûüüúÿÿýÿÿýþþüûûùÿÿÿ÷÷÷îîîÃÃÃÃÃÃäääóóñþþüýýûýýûøøöÿÿýüüúýýûüüúûûùøøöþþüÿÿýýýûýýûüüúÿÿýüüúþþüÿÿýüüúýýûûûùÿÿýúúøÿÿýüüúÿÿýûûùýýûþþüÿÿýþþüûûùÿÿýÿÿýüüúÿÿýýýûÿÿýøøöýýûþþüùù÷ÿÿýýýûùù÷ÿÿýþþüÿÿýÿÿýüüúúúøþþüþþü÷÷õþþüùù÷õõóýýûÿÿýýýûÿÿýÿÿúÿüòÿõÃÿóÃëÃ\99ÃÃ{ÿqýpúmûnülýlþnôkrV\17;#\0#\12\06.#\11\10\ e\ 3\ 2\0\a\ 6\ 4\ 1\0\0\ 5\ 3\ 4\0\0\ 2\ 5\ 5\a\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 4\ 4\ 6\0\0\ 2\ 3\ 3\ 3\ 3\ 3\ 3\v\v\v...444==;;;385.40/\15\13\16\0\ 3\ 6\0\ 1\ 4\ 1\0\ 6ýýÿýÿõúÿòøÿóûÿ÷ÿþùÿýúþÿ÷ûÿùþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿÿ÷ÿþùÿüÿÿüÿÿüÿÿüÿþÿúþÿùÿûüÿýìÿû¼³\8b)Ã\8e\10ä\13æ¯\14㬠ñ¸\11ð¸\rð» ï¾ î½ ð¼\ eõ¼\15ùº\17ÿ¼\16þ¼\ eø»\ 1öÃ\bé½\16ÃÂ"«\88$B&\0\r\0\0\v\ 4\0\ 5\ 2\0\a\ 6\ 2\11\11\ f\11\13\ eGJA\94\95\8dÃÃÃÿýþþüÿÿýÿÿÿýþÿûþÿýùûøþþüÿÿýûûùÿÿýÿÿýùù÷ÿÿýÿÿýþþüþþüÿÿýüüúüüúýýûúúøýýûÿÿýûûùþþüúúøûûùùù÷þþüýýûþþüþþüÿÿÿøøøìììÃÃÃÃÃÃäääõõóþþüÿÿýýýûúúøüüúúúøûûùÿÿýÿÿýûûùþþüÿÿýüüúûûùõõóýýûúúøùù÷ýýûüüúÿÿý÷÷õýýûÿÿýýýûõõóþþüþþüÿÿýþþüýýûþþüýýûÿÿýÿÿýúúøÿÿýþþüþþüûûùþþüÿÿýüüúÿÿýúúøÿÿýþþüûûùÿÿýÿÿýþþüÿÿýÿÿýþþüýýûÿÿýþþüúúøþþüÿÿýüüúþþüÿýóÿüãöæîZç8á\1eà µ(ä·*å¸+á´'á´'çº)õ#ä»/ê+Â\8b\1f\7fe\1a>4\19\ 2\ 1\0\ 3\ 2\0\ 5\ 4\ 2\ 1\0\0\ 6\ 4\ 5\ 1\ 1\ 3\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4 \v\0\0\0\a\a\a\e\e\e---<<<=;<956& \14\ e\ e \1a\1a\ 3\0\0\f\b \ 5\0 ÿþÿúÿùøÿõ÷ÿüøÿþþþüÿýúÿýúÿþúÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿ÷ÿþùÿüÿÿúÿÿüÿÿýÿûÿ÷ýÿòÿýñÿýÃÂ\895¼\8b\15Ã\96\10à\fà ª\fî¹\15ì¶\ eì¶\vò¿\fõÃ\ fñÃ\fð¾\ fó¿\14ô»\12ø¿\ eò·\ 1úÃ\ 2ùÃ\ 5ð½\fñÃ#æ ¯\85!G-\0\10\0\0 \0\0\ 4\0\0\ 1\ 6\ 2\a\ e\ 6 \ f\ 126(\8b\8a\88äâåóñöýýÿþÿÿøú÷ÿÿÿÿÿÿÿÿýýýûýýûþþüüüúùù÷ûûùÿÿýýýûÿÿýÿÿýüüúÿÿýÿÿýúúøþþüÿÿýýýûÿÿýÿÿýÿÿýüüúÿÿýýýûþþüÿÿýþþþúúúèèèáááÃÃÃäääôôòôôòýýûýýûÿÿýýýûüüúÿÿýüüúÿÿýþþüþþüþþüþþüÿÿýýýûýýûÿÿýüüúüüúýýûÿÿý÷÷õööôÿÿýýýûþþüýýûþþüôôòüüúÿÿýÿÿýýýûþþüýýûôôòþþüýýûþþüÿÿýýýûÿÿýÿÿýüüúööôÿÿýúúø÷÷õüüúýýûýýûÿÿýþþüüüúÿÿýüüúÿÿýÿÿýÿÿýûûù÷÷õýýûÿÿìÿç¸á¹dá(ã· ñÃ\18òÃ\ eôÃ\ eõÃ\12ùÃ\17õÃ\15÷Ã\14òÃ
\10è½\ eëÃ\1dâ¹)¶\993;1\ e\ 6\ 5\ 3\ 1\0\0\ 1\0\0\b\ 6\a\ 1\0\0\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 5\a\0\0\ 2\ 5\ 5\ 5\16\16\16(((444???*()&!%#\1d\1f\ f\a\ 4\e\12\ 3\18\r\0\ f\ 4\0ÿû÷ÿüþýÿùøÿùøÿüøÿþûÿüþþüÿüþÿüþÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýüúÿýýÿùùÿýþûÿü÷ÿòÿÿìÿÿÃ\94{;µ\8a"Ã\90\11Ã\96\fÃÂ
+é³\13è³\vðº\12ð»\rð¾ ñÃ\añÃ\vð¿\vð¿\vòÃ
+óÃ\ 3òÃ\0ô¿\ 1ô¾\ 6õ¼\13ó¼\eð¸\1dè´-ª\82 P3\0\ e\0\0\ 4\0\ 2\ 2\b\ 6\0\ 6\0\a\ f\0\14\18
+764\83~\82ÃÃÃÿÿÿôõùüýÿÿýþþýûÿÿýþþüûûùÿÿýÿÿýýýûÿÿýþþüÿÿýÿÿýûûùÿÿýýýûÿÿýýýûÿÿýõõóüüúûûùùù÷ûûùþþüýýûõõóüüúýýûúúúøøøæææÃÃÃÃÃÃæææ÷÷õýýûùù÷ÿÿýþþüýýûþþüþþüýýûÿÿýýýûøøöþþüýýûÿÿýúúøÿÿýþþüûûùÿÿýýýûÿÿýüüúÿÿýÿÿýùù÷ÿÿýÿÿýÿÿýüüúÿÿýôôòÿÿýûûùôôòþþüÿÿýýýû÷÷õýýûýýûùù÷ûûùþþüüüúýýûÿÿýÿÿýþþüüüúööôýýûÿÿýúúøÿÿýÿÿýýýûÿÿýÿÿýôôòýýûÿÿýþþüÿôÃðÃ~î3âµ\1aêÃ\f÷Ã\füÃ\r÷Ã
+ôÃ\vñÃ\ eóÃ\13÷Ã\18óÃ\14òÃ\14ìÃ\17ÃÃ*¸\9a,7+\ 5\ 6\ 5\ 3\ 3\ 2\0\ 2\ 1\0\ 2\0\ 1\ 4\ 2\ 3\ 5\ 5\a\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 5\ 5\a\0\0\0
+
+
+444444$$$###\e\19\1a\ e
+\a\14\f\ 10$\0\85s\1f\8ez$ÿùÃÿüïÿþøýþùþÿ÷üÿø÷ÿúõþûÿúÿÿûÿÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûýüÿÿÿþú÷ÿþûûýøùÿùüÿøûúÃÿýð\8c4´\81\fÃ\93\ eÃ\9f\10â\b᪠ê±\fò·\11ò¸\ eó¼
+ó¿ óÃ\fñ¿
+ð¿
+òÃ\bñÃ\ 2ñÃ\ 1ò¿\ 4õ¾\v÷½\13ø½\17ø»\15ò¹!é(£|!>%\0\v\ 1\0\0\ 2\0\0\b\ 3\0\ 4\0
+\ 2\1d\19\1a2-1rpqÃÃÃüýÿòóõÿþÿÿþýöõóúúøÿÿýÿÿýûûùûûùþþüóóñüüúüüúùù÷üüúúúøÿÿýþþüÿÿýüüúÿÿýÿÿýúúøÿÿýÿÿýûûùüüúÿÿýÿÿýûûûùùùèèèÃÃÃÃÃÃåååüüúÿÿýúúøýýûùù÷ùù÷þþüþþü÷÷õÿÿýýýûýýûúúøüüúÿÿýüüúÿÿýþþüúúøÿÿýýýûÿÿýýýûÿÿýüüúøøöýýûûûùýýûýýûÿÿýùù÷üüúÿÿýýýûûûùýýûÿÿýþþüýýûþþüüüúþþüÿÿýÿÿýýýûýýûüüúÿÿýÿÿýüüúþþüýýûùù÷ûûùýýûòòðùù÷ÿÿýüüúþþüüüúûûùþñÃáº[â\15ä´\fï¿\ 5öÃ\aùà öà öÃ\ e÷Ã\12ôÃ\13÷Ã\17÷Ã\16üÃ\19øÃ\1eñÃ'«\8b\1a-!\0\ 2\ 1\0\ 3\ 2\0\ 4\ 3\ 1\ 3\ 1\ 2\ 4\ 2\ 3\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 5\ 5\ 5\16\16\16%%%%%%\1c\1c\1c\1d\1d\1d\14\14\12\13\11\ 5\r\ 3\0bP\10³\99 ÷5úcÿüÃÿþÃÿÿãú÷èþÿøõÿøøÿÿþûÿÿúÿÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþûÿÿüÿÿûýúþÿûøÿøúÿùüøõÿþá¢\831®\80\10Ã\8d\12Ã\98\11Ã\9c\ 2ã©\aî°\11ô²\15ö²\13÷³\10÷¹\10ø¼\ eö½\fõ¾\vò¾
+ó¾\fô¼\rõ¾\fö½\fö½\v÷¾\r÷¿\12÷¾\17õ½\1eñ¹$Ã\9f#\8dn\e+\e\0\ 6\ 3\0\ 2\ 4\ 3\ 3\ 4\b\ 3\ 2\a\ f\v\f\19\18\16220kmjÃÃÃùùùþúûÿýÿÿÿýþþüööôúúøÿÿýþþüýýûüüúþþüÿÿýüüúüüúúúøþþüýýûüüúÿÿýûûùÿÿýþþüûûùÿÿýþþüýýûþþüþþüûûûùùùëëëáááÃÃÃåååõõóûûùþþüþþüÿÿýüüúÿÿýýýûøøöÿÿýüüúÿÿýùù÷ýýûüüúúúøþþüýýûùù÷ýýûüüúÿÿýýýûÿÿýýýûüüúýýûùù÷ýýûþþüÿÿýþþüýýûÿÿýÿÿýþþüÿÿýüüúýýûÿÿýþþüþþüþþüþþüÿÿýüüúúúøüüúÿÿýýýûÿÿýþþüýýûýýûüüúÿÿýÿÿýþþüÿÿýýýûýýûÿÿýÿÿýÿõÃîQÃ\98\13è¬\rð¶
+ô¼\rôÃ\ eïÃ
\ eñÃ\ eöÃ\14òÃ\ e÷Ã\ föÃ\rüÃ\12ùÃ\19é½\1e\93q\ 3&\1a\0\ 1\0\0\ 4\ 3\ 1\ 4\ 3\ 1\ 3\ 1\ 2\ 2\0\ 1\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 5\a\ 4\ 4\ 6\14\14\14---!!!\1a\1a\1a\16\16\16\15\17\14\ 5\a\ 2\ 4\ 2\0'\17\0\97~"ì\1aù\14ôÃ:æÃAúHÿÿµÿÿæÿÿÿõûù÷ÿûúÿùûýøþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüúþýùÿýûÿþûÿüöûõÿÿöÿüÃÿúð\86"Ã\91\11Ã\8e\fÃ\95 â\ 5èÂ\vî¬\10ó¬\12ö°\12ø³\10ú·\11ù»\10ø¼\ eö½\fö½\ eö¼\10ö¼\12ù¼\13ù½\ fö½\vô½\bò¾
+ò¾\12ô¾\16ô»\16æ³\1câ'}h\ f"\14\0\a\0\0\b\ 1 \ 1\0\a\ 3\ 1\ 4\b \ 4\12\14\ f!#\1eX[T¾¿ºñìðýøüúøùÿÿýýýûúúøüüúÿÿýÿÿýýýûýýûÿÿýÿÿýþþüüüúþþüüüúøøöüüúüüúýýûööôÿÿýÿÿýôôòÿÿýýýûþþüýýýùùùìììà à à ÃÃÃãããÃÃëõõóÿÿýþþüÿÿýÿÿýÿÿýüüúûûùÿÿýúúøþþüýýûÿÿýýýûùù÷þþüýýûùù÷üüúúúøÿÿýûûùüüúÿÿýÿÿýþþüûûùýýûüüúýýûÿÿýýýûüüúÿÿýüüúÿÿýøøöúúøþþüþþüÿÿýüüúûûùþþüýýûûûùÿÿýûûùùù÷ÿÿýüüúüüúÿÿýüüúÿÿýÿÿýúúøýýûþþüüüúþþüýýûÿðÃîSÃ\95\11ä¥
+ìÂ\ 6ôµ\10ö»\15ñ¿\12ðÃ\10óÃ\ fñà øÃ\fõà õÃ\vñÃ\14ó\1d\81_\0'\1a\0\ 2\ 1\0\ 5\ 4\ 2\ 3\ 2\0\ 2\0\ 1\ 2\0\ 1\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\14\14\14'''\17\17\17\f\f\f
+
+
+\v\v \0\ 1\0\19\12\0^F\0¼\9b'û\18÷Ã\18ùÃ\15ôÃ\1aðÃ-÷@ÿüÃÿÿöýÿüüÿÿûÿú÷ÿôýÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúùÿõüÿúûýüÿÿÿÿýûÿúêÿ÷ê\806·\83\15Ã\8a\ 5Ã\95\rÃ\9e\ eç\fà ¤\ 6æ¤\bö°\14÷²\rùµ\fú·\ eù»\10ø¼\ eø¼\ eø¼\10ø¼\10ø»\12ù½\11ù½\rö¾ ô¾\ 6ñ¾\ 3òÃ\aóÃ\f÷¿\12øÃ\1dø\15ã\1fhN\ 4\18\ 3\0\f\0\0\a\0
+\ 3\ 3\ 5\ 2\ 4\ 1\0\ 2\0\15\18\11#&\eRSK©§ªÃëðÿÿÿüüúûûùþþüùù÷øøöÿÿýûûùøøöüüúþþüüüúýýûÿÿýÿÿýûûùÿÿýôôòþþüþþüúúøÿÿýûûùþþüÿÿýÿÿýÿÿÿùùùìììÃÃÃÃÃÃÃÃÃÃÃëóóñüüú÷÷õüüúüüúÿÿýþþüüüúüüúûûùûûùÿÿýþþüÿÿýýýûÿÿýÿÿýûûùýýûúúøþþüûûùúúøÿÿýýýûûûùþþüýýûúúøùù÷ÿÿý÷÷õþþüÿÿýõõóûûùüüúýýû÷÷õþþüÿÿýüüúüüúÿÿýþþüüüúÿÿýþþüùù÷ýýûúúøûûùþþüùù÷ûûùùù÷÷÷õýýûÿÿýøøöúúøýýûÿøÃó[Ã\99\15æ\vêÂ\aó´\11ù»\18õ¼\13ò¿\ eòÃ
+òÃ\aøÃ
+òÃ\bïÃ\fÃ¥Ã\17æ!lQ\0&\e\0\ 4\ 3\ 1\ 4\ 3\ 1\ 1\0\0\ 3\ 1\ 2\ 3\ 1\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3 \v\v\v\b\b\b\0\0\0\ 3\ 3\ 3 \ 5\ 2\ f\ 6\0$\11\0\9d{\1aæ\17ñÃ\1fìÃ\ 6öÃ\ 4ÿÃ\ føÃ\17ÃÃ?ÿÿ³ÿÿà ÿþøùøý÷ýûùÿýýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúýÿõúýòýü÷ÿúðÿûìÿúò\88@µ\81\1cÃ\8c\14Ã\91 Ã\9e\ eÃ\9b\ 4æ\vê®\10ò²\14õ´\12ö¶\ e÷¹\fù¼\fø¼\fø¼\ eö½\ eö¼\10ö¼\10ö¼\10÷¾\ f÷¾\rõ¾\võ¿\aóÃ\ 5ôÃ\ 6õÃ\aôÃ\fò¿\fîÃ\vë\ f³\8e$S5\0\11\0\0\v\0\ 4\ 2\ 1\ 6\ 1\a\a\0\ 2\0\ 3\ 6\0\17\19\ e\ f\10
+<<>\8d\8c\91âââýýûÿÿýýýûÿÿýûûùùù÷ÿÿýûûùüüúþþüúúøýýûþþüÿÿýÿÿýýýûþþüþþüúúøÿÿýÿÿýõõóÿÿýûûùüüúþþþøøøÃÃÃÃÃÃÃÃÃÃÃÃììêððîúúøøøöúúøýýûþþüÿÿýþþüþþüÿÿýüüúÿÿýøøöÿÿýÿÿýÿÿýÿÿýýýûÿÿýüüúÿÿýüüúûûùýýûûûùúúøÿÿýýýûýýûûûùÿÿýúúøþþüþþüúúøÿÿýÿÿýÿÿýüüúüüúýýûýýûþþüÿÿýýýûúúøüüúÿÿýýýûýýûýýûþþüþþüûûùýýûÿÿýþþüýýûÿÿýúúøÿÿýÿÿýÿýÃô[Ã\9c\17à ©\ eé®\bñ±\11÷¸\15ôº\10ô½
+óÃ\ 6ïÃ\ 3òà îÃ
\vìÃ
\12ø\1a»\97\1d\A\0"\18\0\ 3\ 2\0\ 3\ 2\0\ 1\0\0\ 5\ 3\ 4\ 4\ 2\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\ 4\ 4\ 4\0\0\0\a\a\a\ 1\ 1\ 1\ 3\ 3\ 3\ f\b\0 \f\0qT\12á"ëÃ\1cöÃ\19îÃ\ 4øÃ\aüà ýÃ\13òÃ.¾¨BÿÿÃÿùîÿýÿüÿÿúÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿÿúÿÿôÿÿìÿþÃÿùÃ
²\86;·\82\1aÃ
\8a\12Ã\8e\10Ã\94 à\ 5ÃÂ¥\ 4å«\væ¬\fó\11ò¹\12ñ»\10ó¾\ eôÃ\fõ¾ ô½\bõ¾\vô¿\ fó¾\10ò¾\10ò¾\10ò¿\ eó¾\fö¿\f÷¿
+ù¾
+øà òÃ\aðÃ\bò½\vëµ\14ä\1c¡{\1a2\1a\0
+\ 1\0\ 3\ 4 \0\ 1 \ 5\v \0\ 2\0\ 4\ 5\0\v\v \15\16\18,-1kkkÃÃÃ÷÷õûûùþþüÿÿýþþüýýûÿÿýÿÿýÿÿýûûùþþüûûùÿÿýÿÿýÿÿýüüúþþüÿÿýýýûüüúýýûýýûùù÷øøöýýýøøøõõõèèèæææåååêêèïïÃûûùÿÿýþþüÿÿýûûùÿÿýÿÿýÿÿýþþüþþüýýûøøöýýûþþüüüúÿÿýþþüÿÿýüüúÿÿýýýûýýûþþüüüúüüúÿÿýúúøÿÿýÿÿýüüúÿÿýþþüüüúÿÿýÿÿýþþüûûùÿÿýüüúûûùýýûÿÿýþþüüüúûûùùù÷ÿÿýþþüûûùÿÿýÿÿýüüúÿÿýÿÿýüüúÿÿýüüúÿÿýþþüÿÿýúúøÿóÃñSÃ\98\11ÃÂ¥
+åª\ 6ð²\11ø»\15ö¿\röÃ\bóÃ\ 4ðÃ\ 6ïÃ\11ê¾\15é¿\eî\eµ\8d\e\>\0!\15\0\ 3\ 2\0\ 4\ 3\ 1\ 1\0\0\ 5\ 3\ 4\ 4\ 2\ 3\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\ 1\ 1\ 1\0\0\0\ 5\ 5\ 5\ 2\ 2\ 2\ 3\ 3\ 3\16\v\0T6\0µ\8f éÃ$ñÃ\12éÃ\ 6öÃ\ fñÃ
+ÃÃ\bïÃ\ eïÃ)ýEÿÿ¸ÿÿìÿÿÿø÷óÿþùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþþþþþýÿþýÿüÿþüÿþüÿþúþÿúýÿüýÿþÿþüÿþüÿþüÿýúÿý÷ÿþòÿþìÿþçÿþãÿþà ÿþÃÿþÃÿýÃÿþÃÿþÃÿýà ÿþâÿýâÿúÃÿþÃÿûç\89K¬\820³\7f\19¿\83\aÃ\8b\ 6Ã\95\10á\12ã\ 3ê\ 4çÂ\vé¯\rî¸\10ù\ eñ½\11óÃ\ fôÃ\ró¿ ò¾\bó¿ ô¿\rò¿\ eñÃ\ eñÃ\ eò¿\ eò¿\ eõ¾\fö½\fø½\vö¾ ðÃ\ 6òÃ\b÷¿\10÷¾\17è±\16Ã\9a\19\88l\19\1a\v\0\ 4\ 1\0\ 2\ 5\f\0\ 1\0\ 6\a\ 2\ 2\ 2\0\ 3\ 3\ 3\v\f\10\10\14\17\17\17\17OOM°°®ññïôôòùù÷ÿÿýññïÿÿýýýûÿÿýüüúÿÿýùù÷üüúüüúüüúÿÿýüüúýýûÿÿýýýûþþüÿÿýþþüüüúÿÿÿýýýþþþòòòïïïëëëîîìòòðüüúÿÿýüüúþþüööôûûùüüúüüúööôþþüýýûÿÿýþþüþþüøøöýýûýýûÿÿýüüúÿÿýþþüþþüÿÿýÿÿýþþüÿÿýõõóþþüþþüõõóüüúÿÿýþþüÿÿýúúøþþüùù÷úúøÿÿýüüúþþüÿÿýþþüþþüÿÿýýýûýýûýýûøøöþþüýýûööôüüúÿÿýýýûÿÿýýýûúúøööôþþüýýûÿÿÃà ¼^Ã\9e\17æ\rã©\aï±\10ù¼\14õ¾\vñÃ\ 4ïÃ\ 1ì¾\ 6ì¼\10æ¶\14ãµ\19à\16²\84\14b@\0%\17\0\b\ 5\0\b\ 4\ 3\ 1\0\0\ 4\ 2\ 5\ 3\ 1\ 4\ 1\0\ 2\ 4\ 4\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 1\ 3\ 2\ 1\ 3\ 2\ 1\ 3\ 2\ 1\ 2\ 4\ 1\ 2\ 4\ 1\ 2\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 3\ 1\ 4\ 3\ 1\ 6\ 3\ 1\ 6\ 2\ 2\ 4\ 2\ 2\ 2\ 1\ 1\0\ 4\ 6\ 3\0\0\ 2\ 3\ 3\ 5\ 2\0\ 3\ 6\ 2\0 \ 5\0$\16\0\99u\14è\19ëÃ\11ìÃ
\ 4ñÃ
+ìÃ\aéÃ
+êÃ\fðÃ\11õÃ(áº7¢\883ÿÿäøúùÿþýÿþûÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþúÿþùýÿ÷ýÿúþýÿýþÿûÿÿûÿþÿüýÿùùÿþ÷ÿÿøùÿÿøÿÿÿüûÿüúÿù÷ÿýöÿùèÿûÃÿþÃÿþ¿\9f\7f2«\871©\82%¨\80 ª\7f!«\82&¨\80(£}(£~.§\821§}'©~"«}\1f±\80\1aº\85\15Ã\8b\12Ã\92\rÃ\96\fÃ\98
+Ã\9e à ¨\vâ«\bæÂ\bë²\vï¶\rô¾\13ñ¼\fò½\vò½\võ¾\võ¾\võ¾\võ¾\fó¾\fó¾\fó¾\fó¾\fó¾\fõ¾\fõ¾\fö½\fõ¾\vñ¿\bòÃ\fñ»\10øÃ\1aó½\15ÃÂ\16´\8e\13lS\0
+\ 1\0\ 5\ 5\0
+\ 5\ 1\ 4\0\0\ 3\ 2\0\0\ 1\ 3\ 2\ 5\f\a
+\11
+
+\f\v\v\vFFD¬¬ªëêèÿÿýüûùÿÿýþýùöõñþÿúþÿúûýøþÿûüþûõ÷ôýýûþþüööôüüúüüúÿÿýÿÿýüüúÿÿýþþüÿÿÿþþþúúúÿÿÿõõõöööööôôôòóóñþþüþþüÿÿýüüúÿÿýööôüüúÿÿýþþüüüúþþüÿÿýÿÿýÿÿýþþüúúøÿÿýÿÿýûûùÿÿýÿÿýüüúÿÿýÿÿýùù÷ýýûÿÿýúúøÿÿýÿÿýõõóþþüüüúõõóþþüÿÿýýýûûûùýýûÿÿýùù÷ÿÿýÿÿýüüúÿÿýÿÿýûûùÿÿýþþüÿÿýýýûþþüööôþþüùù÷ÿÿÿþþþþþþúúúõõõÿñÃá¼aá\1eâ\rçÂ\rô¶\13ð¶\fô½\vôÃ\vòÃ
+ð¿
+ì¸\fï»\17á¯\12Ã\9e\11¶\83\10vP\0)\19\0\r \0\ 6\ 1\0\ 5\0\ 4\a\ 2\b\ 1\0\ 4\ 6\ 4\ 5\ 2\ 1\0\ 2\ 3\0\ 2\ 3\0\ 1\ 3\0\0\ 4\0\0\ 4\0\0\ 4\0\0\ 5\ 2\0\ 5\ 4\0\ 4\b\ 3\ 3\v\ 4\ 2\a\ 3\0\ 4\ 4\0\ 5\ 6\ 1\b\ 5\ 3\ 6\ 1\ 2\0\ 4\a\0\0\ 2\0\ 1\ 4 \ 2\ 1 \a\0\a\b\0\0\15 \0q\\rÃ\9e æ¶\16òÃ\14ïÃ\bÃÃ\ 4ïÃ\bîÃ\rïÃ
\ eðÃ\fñÃ\19å¸+ \82"ÿÿÃùÿÿÿþÿÿûÿÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿþùÿÿ÷ýÿ÷ýÿùþþÿýþÿúÿþûÿþÿýÿÿýÿÿþøùúòôÿûùÿÿÿùóÿüÃÿýãÿüÃ\95{J\9e\80@§\83/°\86"¶\87\15¸\85\bÃ\8c\vÃ\8a\ 5Ã\89\ 6Ã\89\v¿\89\ f¸\84\ eµ\81\11µ\81\11¸\81\fº\82 ¾\84 Ã\88
+Ã\8d\vÃ\93\rÃ\97\rÃ\9b\fâ\ eä\fæ¬\rè®\fë²\vð·\ eñ¹\ eõ½\10ô¼\rô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fó¿\vòà óÃ\rðº\10õ¿\17÷¿\12ñ¾\17ð\1eÂ¥\87\17@0\0\f\ 2\0\a\0\0\10\a\b\ 1\0\0\0\0\ 2\ 5\ 5\r\0\0\a\a\b
+\ e\ e\ e\13\13\11442\90\8f\8dãâà þýûþýûÿÿûûúöýþùÿÿûþÿûýÿúúÿûüþûýýûÿÿýùù÷ýýûùù÷ûûùûûùùù÷þþüùù÷ÿÿÿÿÿÿÿÿÿýýýüüüúúúúúøÿÿýþþüÿÿýúúøþþüüüúýýûüüúþþüÿÿýýýûûûùüüúþþüÿÿýüüúûûùùù÷üüúüüúùù÷ûûùüüú÷÷õúúøüüúüüúÿÿýÿÿýùù÷þþüÿÿýúúøÿÿýÿÿýûûùþþüÿÿýüüúùù÷üüúýýûøøöýýûûûùÿÿýþþüÿÿýþþüÿÿýýýûÿÿýþþüÿÿýüüú÷÷õýýûùùùÿÿÿüüüþþþÿÿÿÿýà úaÃ\9f\1fÃ\9d
+ã©
+ñ³\10õ»\11ö¾\ fñ½ ï¼ ð½\fì¶\vìµ\10à ©\ eÃ\9a\ eº\86\10\88^\b2\1c\0\15\v\0 \ 1\0\ 4\0\0\ 6\ 1\a\ 1\0\ 4\0\0\0\ 5\ 5\ 3\ 2\ 3\0\ 2\ 3\0\ 2\ 3\0\ 1\ 3\0\0\ 3\ 4\0\ 4\ 4\0\ 5\ 4\0\ 4\ 6\0\ 1\a\0\ 1\ 6\ 4\ 4\ 6\a\ 2\ 6\ 6\0\a\ 4\0\ 4\ 1\0\0\0\ 1\0\0\ 4\0\ 5\ f\ 6\0\0\ 5\ 5\ 2
+\0\0\17\ 3\0O8\0¦\85\1aê\19ì¹\10ðÃ\ eëÃ\bìÃ\aÃÃ
+ÿ
+ü\bò¾\bõ¿\15ë¹&Â¥\84\1dÿÿÃùÿÿÿþÿÿüÿÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿÿ÷þÿ÷ýÿ÷ýÿùþÿùþÿúûÿúýÿþüùÿþùÿÿþûýü÷úÿüüý÷ÿùéÿüá}3Â¥}\1eµ\8a"µ\87\17¾\8c\13Ã\92\10Ã\98\ fà\11Ã\99
+Õ
+Ô\vÑ\ eÏ\ fË\10Å\ e\88\v\88
+Ä
+É\fÍ\ eÒ\ fÕ\ eÙ\rÚ
+â§\ fâ§\vè®\ eë²\rï¶\rõ½\12ó»\ eõ½\ eô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fó¿\vñ¿\bôÃ\fó»\ eõ½\12ñ¼\ eï¿\15å½ Ã¡ \91v\1f"\ e\0\v\ 2\0\ 3\0\0\b\ 4\ 3\ 5\ 3\ 4\ 3\ 2\a\ 2\ 3\a\ 3\ 4\ 6\0\ 2\ 1 \b\b\b)))oooÃ
ÃÃöõóüûùÿÿýüüúøøöùûøþÿýþÿýýÿüÿÿýÿÿýûûùþþüýýûÿÿýþþüûûùþþü÷÷õúúúýýýþþþøøøÿÿÿþþþýýûÿÿýÿÿýÿÿýúúøþþüýýûÿÿýÿÿýÿÿýþþüýýûüüúûûùüüúþþüÿÿýÿÿýÿÿýýýûÿÿýÿÿýüüúÿÿýþþüýýûúúøÿÿýÿÿýýýûÿÿýÿÿýÿÿýþþüýýûÿÿýÿÿýüüúþþüþþüýýûÿÿýûûùýýûýýû÷÷õÿÿýûûùýýûþþüÿÿýúúøÿÿýýýûÿÿýþþüýýûÿÿýøøøþþþöööóóóïïïðâÃ
õZâ\1fà\rå«\fï\fּ\12õ½\10ó¾\fî»
+îº\fç±\aæ¯\fç\fÃ\99\vÃ\89\12\9bo\18E)\ 2\1c\f\0\ e\ 3\0\ 5\0\0\ 6\ 6\b\ 6\a \0\ 3\ 2\0\ 1\0\ 2\ 2\ 2\ 3\ 1\ 2\ 5\0\ 6\ 5\0\a\ 5\0\v\ 3\0\v\ 2\ 1 \0\ 2\a\0\ 6 \0\ 3\ 3\0\0\0\ 5\ 1\0\a\ 1\ 3\ 6\ 2\ 3\ 3\ 5\ 4\ 1\a\ 3\0
+\ 1\0\ 5\0\0\ 1\ 4\ 4\0\0\19\ 4\0<\1e\0¡z\1dÃ\9b\1aâ±\16ê»\rë¾\rç½ ê½\fì½\ fû\fî»
+ô½\b÷¿\12ðº$©\86\1eÿÿÃúÿþÿýüÿüüÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿùþÿùýÿúýÿúÿþùÿþùýÿùýÿüÿýÿÿýÿÿûúÿÿûýýýÿýñÿýÃ\96u0°\80\14Ã\8a Ã\8d\bÃ\93\bÃ\9e\ fá\fÃ\9b\ 5Ã\9f\bÃÂ
+Þ \rÝ\ eÙ\rØ\r×\ eÕ\fÏ
+Ï\rÐ\ eÓ\ fÕ\ fÙ\10Û¡\ fÞ¢\fߤ
+åª\ eäª
+ê±\fô\vòº\ fö¾\11ô¼\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\vð¼\ 4õ¾ ö½\ eø¾\12ó¾\ eðÃ\14ìÃ
\1fô ¹\94"kN\ 2\ f\ 1\0\ 4\0\0\ 6\ 1\0\ 4\0\ 1\0\0\0\ 2\ 4\ 3\0\ 1\0\0\ 1\0\ 6\ 6\ 6\ 6\ 6\ 6\b\b\b\r\r\rPNO¬«©çæäþýûÿÿýÿÿýþÿýúüùýÿüýÿüüüúÿÿýýýûÿÿýþþüýýûÿÿýÿÿýýýûûûùõõõÿÿÿùùùúúúÿÿÿûûûÿÿýûûù÷÷õþþüýýûþþüûûùÿÿýÿÿýýýûýýûÿÿýÿÿýýýûûûùüüúûûùþþüÿÿýúúøþþüÿÿýøøöÿÿýÿÿýÿÿýùù÷ýýûüüúøøöþþüúúøþþüÿÿýùù÷ýýûÿÿýúúøþþüÿÿýÿÿýýýûþþüÿÿýþþüûûùÿÿýüüúùù÷ýýûþþüùù÷ÿÿýüüúýýûþþüÿÿýööôúúúêêêäääÃÃÃÃÃÃÃÃÂòWá\1fá\ eéÂ\ fëÂ
+õ¸\10ñ¹\fò½\rï»\rì¸
+â¬\ 2à ©\ 6ç\fÃ\9c\ eÃ\8b\11¦w\ehG\12*\12\0\18 \0\v\ 2\0\0\ 1\0\0\ 1\ 2\0\ 4\ 4\0\ 6\ 6\ 1\ 2\ 6\ 3\ 1\ 6\ 6\0\a\b\0 \ 6\0\v\ 5\0\v\ 3\0 \ 2\ 1\a\0\ 5\ 5\0\ 4\0\ 2\ 4\0\ 3\ 4\0\ 5\ 3\ 4\ 2\ 2\ 4\0\ 1\ 2\0\ 2\ 2\0\ 5\ 4\ 3 \a\ 4\0\0\ f\0\02\15\0\86\\10Ã\99"ÃÂ¥\11ä³\ eéº\fê½\fèº\fé¹\ fê·\ eù\rô¼\rø½\v÷½\13ï·"«\84\eÿÿÃûÿüÿþüÿýúÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþýþÿþýÿÿüÿÿýüþÿúþÿùÿÿøüûöýùöÿýÿÿøýÿøå\9c\81:²\89\1f¾\82\ 6Ã\8c\ 2Ã\92\ 6á \12Ã\99\ 6Ã\9c\ 6ä©\11ã\vã\rá¥\ fà ¤\ eá Ã\9f\aà\ 6á\aà\bâ\rá\ fâ\10ÃÂ¥\10â¦\10ä©\ fæ«\ fçÂ\rò\10ò\fò¸\ fó¹\ró»\fõ¾\fó¼
+ô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\vöÃ\bøà ù½\rö½\ eñ¾\ròÃ
\12óÃ\17êÃ\eæ\16ª\85\eF2\0\v\ 3\0\a\ 2\0\ 5\ 1\ 2\ 1\0\0\ 2\ 2\0\ 1\ 3\ 2\ 2\ 3\ 5\0\0\ 2\ 2\ 2\ 4\0\0\ 2\0\0\0\12\10\11B@A¤¢£âà áÿÿýþþüøøö÷÷õþþüýýû÷÷õýýûÿÿýþþüúúøööôüüúþþüüüúÿÿýúúøÿÿýþþþÿÿÿÿÿÿöööÿÿýüüú÷÷õÿÿýýýûýýûùù÷ûûùýýûúúøúúøþþüÿÿýþþüüüúýýûøøöûûùýýû÷÷õüüúþþüööôþþüüüúÿÿýüüúÿÿýþþüûûùþþüõõóýýûÿÿý÷÷õûûùÿÿýùù÷ûûùÿÿýþþüøøöþþüÿÿýúúøÿÿýþþüÿÿýûûùþþüþþüøøöÿÿýýýûþþüÿÿýÿÿýòòðîîîÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
ÃéóXÃ\9d\eÃ\9b\béÂ\ fï±\ eö¹\11ð¶\fø
+ù\rê¶
+á«\ 3ç\ 4æ Ã\9a Ã\89\vÂ|\15\93l\1fK.\0$\11\0\11\a\0\v\v\ 3\ 3 \0\ 4\a\0\a\r\0\ 2\a\ 3\ 1\ 6\ 6\0\ 6\b\0\ 6\ 6\0\ 6\ 5\0\ 6\ 3\ 1\ 6\ 2\ 2\ 4\0\ 1\0\ 3\ 5\0\ 4\ 6\ 3\0\ 3\ 2\0\ 1\ 4\0\ 2 \0\ 4\r\ 1\ 4\v\ 1\0\ 5\ e\ 4\ 5\18\ 4\0,\ e\0\8de ¶\85\1cÃ\95\ 4ç± ç´\vç¹\féº\fè¹\vê¶\12é´\ eõ
+ò¹
+÷¹\ eõ·\14ê²\1f©\80\16ÿÿÃþÿúÿþüÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýþÿýýÿþüÿÿüÿÿýþÿþúþÿ÷ûýòÿÿöÿÿûÿüúÿûøÿúà}!·\87 Ã\94\rã\9e\12Ã\9a\vÃ\96\ 4ä§\11ä\fç\fÃ¥Â\12â«\10äÂ\12ä¬\11à ¨\vÃÂ¥\ 6à ¦\ 6ã¨\ 6ã¨\ 6á¦
+à ¨\rã¨\fåª\ eçÂ\ eê°\10ì²\10îµ\ eðµ\ fð¶\fõ»\ fõ¼\rô½\võ¾\fó¼ ö¿\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\vøÃ\aö¾\aø¼\fô¼\rï¾\fïÃ\fðà ïÃ
\ eé½\16Ã\9a\17\93y,%\16\0
+\ 2\0\ 5\ 1\0\ 4\0\0\ 5\ 4\ 2\ 3\ 3\ 3\0\0\ 2\ 4\ 4\ 6\b\b
+\0\0\ 2\ 4\ 4\ 6\a\ 5\ 6\ e\f\r<:;\90\8e\8fÃÃÃøøöÿÿýÿÿýÿÿýÿÿýüüúûûùúúøûûùÿÿýûûùÿÿýüüúþþüÿÿýÿÿýùù÷ÿÿÿþþþÿÿÿúúúüüúÿÿýþþüÿÿýûûùÿÿýüüúüüúýýûûûùùù÷ûûùýýûþþüþþüþþüýýûÿÿýÿÿýýýûÿÿýÿÿýüüúÿÿýûûùÿÿýþþüþþüÿÿýÿÿýÿÿýüüúüüúÿÿýüüúýýûÿÿýûûùùù÷üüúÿÿýûûùÿÿýüüú÷÷õÿÿýúúøÿÿýÿÿýÿÿýþþüøøöýýûüüúÿÿýÿÿýýýûîîìÃÃÃÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
ÃâñVÃ\9b\17Ã\9e\vê®\10ð²\ fô·\11ð¶\rðº\10é³ é³ æÂ\bá§\aá\ 5Ã\96\ 3½\86\ 5²~\ e¤x\17}Z I/\0\16\ 6\0\14\r\0\10\10\ e\0\ 4\b\0\ 1\a\ 1\ 2\a\ 2\ 1\ 6\ 5\0\ 4\ 6\0\ 4\ 5\0\ 4\ 3\ 1\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 5\ 4\0\ 3\ 2\0\0\0\0\0\0\ 4\0\ 1\ 6\ 3\ 4 \ 5\ 5\a\a\ 2\0\12\ 3\0\17\0\0D"\0\93g(¶\84%Ã\98\18ä æ\0å²\vä´
+ã´\ 6çµ\bì·\11î·\12ïµ ò¶\bô¶\rò´\15çÂ\e¦}\11ÿþÃÿÿúþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþûÿÿûþÿýýÿþüÿÿüÿÿüüÿþùÿÿ÷ÿÿúõöñÿÿûÿûðÿùÃ\9a{B³\87\1c½\87\ 1Ã\95\vÃ\96\aà\ eà §\10Ã\9f\ 6ø\1aáÂ\fé¸\15ç³\11è´\13è²\12è°\11è®\ eçÂ\ræ« åª\bä©\aäª\bè ë°\fî³\ fï´\ eð¶\rð¶\fñ·\rñ·\vô¼\rô½\vô½\vö¿\rô½
+÷Ã\rõ¾\fõ¾\fõ¾\fô½\vô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\vô¼\ 5ó»\ 4õ½\ eô¿\11óÃ\10õÃ
\röÃ\ 3÷Ã\bëÃ\ró\1d¯\8d!jQ\ f\ e\ 4\0\ 3\0\0\ 6\ 2\ 1\ 3\0\0\0\0\ 2\ 2\ 2\ 4\0\0\ 2\0\0\ 2\a\a \ 3\ 3\ 5\0\0\ 2\ 5\ 5\a\ 2\0\ 3.,-{yzÃÃÃùøöÿþüúù÷ÿÿýÿÿýüüúúúøûûùÿÿýÿÿýÿÿýýýûüüúþþüþþüôôòýýûüüúüüúÿÿýûûùÿÿýýýûÿÿýûûùÿÿýÿÿýÿÿýþþüýýûüüúûûùüüúýýûýýûüüúþþüÿÿýýýûÿÿýþþüúúøýýûÿÿýúúøüüúûûù÷÷õûûùýýûûûùÿÿýþþüþþüÿÿýþþüÿÿýÿÿýúúøýýûýýûÿÿýÿÿýþþüúúøþþüùù÷úúøÿÿýýýûþþüúúøüüúûûùþþüúúøììêÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃâÃÂRÃ\9c\18ã\10è¬\ eï\ eï²\fñ¶\10ðº\12è²
+æ¯
+æ¬
+à ¦\ 6Ã\9e\ 2Ã\97\ 2Ã\89\ 6µ\81 ¦t\ 5¡u\16\7fZ\13>#\0\17\ 5\0\a\0\0\ 6\ 2\ 3\ 4\ 3\b\ 2\ 1\ 6\ 3\ 1\ 4\ 3\ 1\ 4\ 3\ 1\ 4\ 2\ 2\ 4\ 1\ 2\ 4\0\ 3\ 2\ 1\ 3\0\ 6\ 3\0\ 4\0\0\ 3\0\ 4\ 5\ 2 \b\ 3 \b\0\0\ e\ 2\0\1a\ 6\06\19\0gA\ 3\9ak\19¹\84\1cÃ\94\16Ã\98
+ã\ eè\rà ¯\fã³\væ´\aéµ Ã¹\ eñ¹\ eô¸
+÷¹\fõ·\ eñ¶\14è°\e©\80\16ÿþÃÿÿÿýÿþûÿþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüûÿþûÿÿýýÿþýÿÿüÿÿýúÿþ÷ÿÿ÷þÿÿþÿÿüüúÿÿÃÿûÃ\9f{1µ\81\13Ã\96\10Ã\9a\ eà\râ
+ç\fã¯\ eè´\10ì¹\12æ³
+é¶\ré´\ eê³\10î´\12ó\11ë°\ eç¬
+ä©\ 5æ«\ 5é¯\ 6ó ñ·\ró¹\ fó¹\ fò¸\ eñ·\v÷¾\ fõ¼\rö¿\rõ¾\fõ¾\fö¿\ró¼
+ô½\võ¾\fõ¾\fõ¾\fô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\vøÃ\võ½\bò½\ fð¼\10ï»\rñ¿\bôÃ\0ùÃ\ 4ìà à ¹\13ÃÂ¥!¡\80#,\1e\0\v\ 5\0\ 5\0\0\ 5\0\ 4\ 6\ 4\a\0\0\ 2\a\a \ 1\ 1\ 3\0\0\ 2\ 2\ 2\ 4\ 6\ 6\b\0\0\ 2\ 6\ 4\a \a
+$"#YWX¬ª«ïîìÿþüýüúýýûÿÿýÿÿýþþüüüúóóñüüúÿÿýõõóýýûþþüþþüþþüÿÿýòòðÿÿýÿÿýûûùööôþþüþþüÿÿýüüúþþüþþüÿÿýÿÿýýýûýýûýýûûûùøøöÿÿýÿÿýûûùÿÿýýýûööôþþüýýûüüúýýûÿÿýýýûÿÿýþþüõõóÿÿýÿÿýüüúÿÿýüüúüüúÿÿýýýûÿÿýóóñÿÿýûûùÿÿýÿÿýÿÿýûûùøøöÿÿýûûùÿÿýÿÿýÿÿýýýûýýûôôòääâÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
ÃÃÃÃÃÃÃÃ
¨Ã®SÃ\9b\19Ã\9f\fã\ 5ê¬\vï±\ eðµ\11è±\fë´\ få®\väª
+ã\ 4à\ 1Ã\9d\ 6Ã\8f\b¹\81\ 6·\83\vÂ¥u ¢v\1f\87a I,\0\19\ 4\0\14\ 5\0\b\0\0 \ 1\0\b\ 1\0\b\0\0\ 6\ 1\0\ 5\ 1\0\ 3\ 2\0\ 2\ 3\0\ 3\ 3\0
+\ 2\0\v\0\0\v\0\0\ e\ 1\0\r\0\0\15\ 1\09!\0bB\a\91g\1d¤s\17¶\81\11Ã\8d
+Ë\0Ù¢ Ö
+å°\16ã¯\rë¸\ fï»\ fø
+ì· î¶ ó·\vù»\10÷»\ fö»\15ø\1c®\86\17ÿýÃÿüÿúþÿûÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúûÿ÷ûÿ÷ýÿþþþÿÿýüÿþùÿþõÿþùüýÿúýÿþþþÿÿì\91xB®\842¸~\13Ã\93\15Ã\9c\rÃÂ¥\fâ¬\ eëµ\14ö\11é³ Ã·\fï·
+ò¸\fïµ\vð³\vòµ\ fóµ\12óµ\14ò´\13ñ³\10ð¶\fñ·\vó¹\rôº\ eôº\ eõ»\ fõ»\ fö½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\vô½\vð¼\10ð¼\11ò½\ fó¿\vöÃ\ 3óÃ\ 2ðÃ\ eìÃ\17ñ\15¼\98\1e{e\1c\10\ 3\0
+\ 3\0\ 5\0\ 6\ 2\0\ 3\ 3\ 3\ 5\0\0\ 2\ 3\ 3\ 5\ 4\ 4\ 6\ 5\ 5\a\0\0\ 4\ 6\ 5
+\ 4\ 4\ 6\0\0\ 2\f
+\r\15\13\140./ \9e\9fëêèÿÿýýýûÿÿýÿÿýïïÃÿÿýýýûúúøÿÿýýýûþþüüüúÿÿýýýûÿÿýýýûýýûööôüüúÿÿýûûùøøöûûùþþüþþüüüúÿÿýÿÿýûûùþþüÿÿýÿÿýþþüýýûõõóûûùþþüÿÿýýýûÿÿýýýûþþüýýûþþüþþüÿÿýÿÿýÿÿýÿÿýõõóüüúýýûÿÿýûûùÿÿýþþüÿÿýÿÿýýýû÷÷õùù÷ÿÿýþþüúúøÿÿýÿÿýýýûÿÿýÿÿýûûùþþüýýûööôÃÃÃÃ
Ã
ÃÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
Ã
Ã
Ã
ÃÃ
¨Ã®UÃ\9b\eã\10æª\ eð²\13ì®\vê¯\vè±\fë´\11â«
+äª
+ã§\bÃ\9f\0Ã\9a\ 2Ã\93\v¾\87\b¸\82\ 6°}\b§v\ f s\18\92k\1cuT\ fI,\0$\f\0!\r\0\1e\r\0\1c\r\0\18\f\0\13
+\0\10\a\0\r\ 5\0\r\ 3\0\15\ 5\0\18\ 4\0\1f
+\06\1d\0Y<\ 4{[\12\95o\1a¦z\e¬{\15µ\80\10Ã\8a\vÃ\96\aà\0ÃÂ¥\0è\ 6ê\ 6â¯\ 4éµ ë³\bòº\rô¼\rò¸\fּ\12òµ\fõ¼
+ñ¼
+ú\13à+ÿúÃÿúÿøüûûÿûýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿùýÿóýÿóþÿùþþüÿþüÿýúÿý÷ÿþùþÿÿüÿÿýýÿÿþêÿø¼«}%Ã\89\1fÃ\90\13Ã\9d\ræ\vâª\rê³\10îµ\ eì²\bò¶
+ó· ÷¹\fõ·\fô¶\rõ·\ eö¹\11õ¸\10ô·\ fò¸\ fñ·\vò¹
+ô»\fõ¼\rõ¼\rõ¼\rö½\ eö½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fó¾\ eñ½\11ð¼\11ó»\ eó¼
+ô¾\ 6ñÃ\ 5òÃ\ fìÃ
\10âº\rÃÂ\1c£\86 N:\0
+\0\0\b\ 2\ 4\ 3\ 1\ 2\ 5\ 5\a\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\ 1\0\ 5\ 3\ 2\a\ 3\ 3\ 5\ 4\ 4\ 6\ 2\0\ 3\v \f\ f\r\ e)'(jigÃÃÃôôòÿÿýûûùÿÿýýýûÿÿýýýûüüúþþüþþüúúøüüúùù÷þþüýýûÿÿýûûùÿÿýÿÿýýýûúúøüüúýýûþþüôôòÿÿýùù÷ôôòÿÿýÿÿýùù÷ÿÿýÿÿýþþüÿÿýüüúþþüûûùüüúööôÿÿýûûùòòðÿÿýýýûÿÿýùù÷ÿÿýúúøýýûüüúþþüùù÷ýýûýýûÿÿýûûùÿÿýþþüüüúÿÿýÿÿýÿÿýûûùüüú÷÷õÿÿýúúøÿÿýÿÿýþþüììêÃÃÃÃÃÃ
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ¥éQÃ\9e á\10á¥ æ¨ ï±\10ò\ eæ¯
+ê´\13ã¬\vå«\vä¨ Ã¡\ 2Ã\9d\ 3Ã\97\fÃ\8a\a¼\86\b·\83\v³~\f±|\12¬{\15¤v\18\93i\13\84_\11qR\ fbH\ fP8
+G1\bG1\bI4\aH4\ 1H1\0]D\ elN\18\7f_&\91n*¡y"§|\16ªz\v¬y\ 4·~
+¾\84\aÃ\8e\ 6Ã\9b\ 3ÃÂ¥\0ê\0á¬\ 4ä°\ 5è´\ 6ì·\að¶
+ôº\ eô¼\ró»\ eּ\14õ¸\ fö¿\fî¼\ 5ñ¿\10ÃÂ¥$ÿýÃÿúöÿÿú÷üöþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿùþÿóþÿòþÿ÷þþüþþÿÿýÿÿýùÿþ÷ýÿúûÿüÿÿÿÿüéÿý½«z\1dÃ\83\12Ã\98\16Ã\9d\ eÃÂ¥\rä©\ fì°\11ð²\ fï° õµ\rö¶\fù¹\ f÷¹\ e÷¹\ e÷»\rõ¼\ró¼
+ñ¼
+ò½\vò» ô»
+õ¼\vö½\fõ¾\fõ¾\fõ¾\fö¿\rõ½\ eõ½\ eõ½\ eõ½\ eö½\ eõ¼\rõ¼\rõ¼\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fó¾\ eó¿\11ò¾\12ñ½\11ó»\ eó»\fò½\rñÃ\fòÃ\fïÃ\ fêÃ
\12ü\1aÃ\9d\19\8cm\13\1d\r\0\v\ 2\0\ 4\0\0\ 3\ 1\ 2\ 3\ 1\ 2\ 6\ 4\ 5\ 1\0\ 2\ 4\ 2\ 5\ 5\ 4 \0\0\ 4\0\0\ 4\ 6\ 5
+\ 4\ 4\ 6\ 6\ 6\b\ 5\ 5\ 5 \18\16\17RPQÃ
Ã
Ã
îîîÿÿÿüüü÷÷õýýûõõóþþüþþüÿÿýûûùýýûùù÷þþüýýûÿÿýÿÿýÿÿýÿÿýÿÿýýýûýýûþþüÿÿýÿÿýúúøÿÿýÿÿýúúøüüúÿÿýýýûüüúÿÿýÿÿýúúøÿÿýÿÿýÿÿýüüúøøöÿÿýÿÿýþþüóóñÿÿýþþüÿÿýþþüþþüüüúÿÿýûûùýýûüüúÿÿýÿÿýÿÿýúúøþþüÿÿýûûùÿÿýþþüÿÿýúúøýýûôôòýýûýýûÿÿýÃÃëÃÃÃÃ
Ã
ÃÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
ÃÃÃÃéêUÃ\9a Ã\98\vá¤\vã¥\ 6ê¯\rè¯
+ë´\ fé³\12äÂ\fäª
+å©
+ã\ 1Ã\9f\ 5Ã\98 Ã\8e ¿\89\v¼\85\ e¹\80\f·{\vµy\v²x\f°w\fªv\10¤x\17\9cu\18\95q\e\94q\1f\96s\1f\98u\e\97s\13\97q\ e\9ev\16¡y\1aÂ¥z\1eÂ¥y\1a¦w\r«y\b³\7f\a¼\84 Ã\89\ eÃ\8c\rÃ\96
+á á«\ 3ä°\ 4ç²
+ê¶\vïº\bð¹\ 6öº
+õ¹\vó»\ eõ½\12ö¹\13ö¼\13ó¾\fìº\ 5õÃ\12á¹&±\97BÿûÃÿþñÿþÿÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿõþÿõþÿúþþþýþÿþþÿÿýúÿþùýÿüùþúýýûÿýã¢\81:¹\88"Ã\8a\15Ã\94\10Ã\9f\râ§\ræª\fò\10ò³\10ñ²\v÷·\ f÷·\røº\ f÷»\rø¼\ eõ¾\fó¿\vð¾\aðÃ\ 6óÃ
+ô½
+ö½\fö½\fö½\fõ¾\fõ¾\fõ¾\fö¿\rõ½\ eõ½\ eõ½\ eõ½\ eõ¼\rõ¼\rõ¼\rõ¼\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fò½\ró¿\11ô¿\11ó¾\10ó»\fó»\fó½\12ôÃ\12ð¾ öÃ\11îÃ\11áÃ\11é\ f±\8c\19`H\f\r\0\0
+\ 1\0\ 5\ 1\0\ 3\0\0\ 6\ 4\ 5\ 4\ 2\ 3\ 2\0\ 3\ 3\ 2\a\0\0\ 4\ 6\ 5
+\0\0\ 4\0\0\ 2\ 1\ 1\ 3\0\0\ 2\r\r\r\13\11\12\e\19\1aGGG¶¶¶ðððûûûÿÿýûûùÿÿýÿÿýûûùþþüýýûÿÿýüüúÿÿýüüúþþüÿÿýýýûýýûÿÿýÿÿýþþüþþüÿÿýÿÿýÿÿýÿÿýþþüþþüúúøúúøþþüõõóüüúýýûööôýýûýýûÿÿýÿÿýÿÿýÿÿýþþüüüúþþüÿÿýÿÿýþþüÿÿýþþüüüúÿÿýþþüÿÿýûûùþþüþþüüüú÷÷õÿÿýüüúõõóýýûýýûýýûÿÿýÿÿýþþüüüúÿÿýúúøêêèÃÃÃÃ
Ã
ÃÃÃÃÃÃÃÃÃÃÃÃÃÃ
Ã
Ã
ÃéêYÃ\96\1fÃ\96\vä\fâ¦\bç¬
+æÂ\bë¶\10é´\10æ¯\ eå«\vç¬
+à ¥\ 3â\ 6Ã\9a
+Ë
+È\fÄ\f\86
+Ã\82\vÃ\81\vÃ\7f º{\aµz\ 4®y\ 5¬z ©y\r§x\ e©y\rªz\vÂ|\ 6®|\ 3¯{\ 5®{\ 6¯{\v°}
+²\80\a·\84\ 5½\88\ 6Ã\8a\aÃ\93\11Ã\96\11Ã\9e\ fâ§\rè¯
+é³ ëµ\rî¸\ eó¼
+ñ¸\ 6ù¼\võ¹ òº\rô¾\13ó¹\10ö¼\12ð»\rõÃ\11ð»\vç¹\eï6ÿÿ³ÿøÃÿ÷ñÿýúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýþþýÿýþÿûÿþýÿúÿýúÿýüýþÿüÿÿÿÿúÿþÃ\99y&¸\88\19Ã\90\17Ã\96\ eà\bã©\aç®\aî´\vñ·\rò¶
+öº\fõ¹\võ¼\rô½\võ¾\fô¿\ròÃ\vï¿\aðÃ\ 6òÃ\bõ¾\vö½\fö¿\rõ¾\fõ¾\fô½\vó¾\fô¿\ró¾\fó¾\fõ¾\fõ¾\fõ¼\võ¼\võ¼\võ¼\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fò½\ró¾\ eö¾\ fõ½\ eô»\fó»\fò¼\11ô¾\13ñº\bøÃ\10ÃÃ\fëÃ\12ãº\10â\17\99w\1e)\13\0\r\ 2\0\a\ 3\0\ 5\ 1\0\ 3\0\0\ 3\ 1\ 2\ 1\0\0\ 2\ 2\ 4\ 5\ 5\a\0\0\ 4\0\0\ 4\ 2\ 1\ 6\a\a \ 5\ 5\a\ 3\ 3\ 5\ 3\ 3\ 3\13\13\13
+
+
+222¤¤¤øøøúúúÿÿÿÿÿýüüúùù÷üüúýýûÿÿýüüúþþüûûùüüúþþüûûùúúøýýûþþüýýûýýûÿÿýýýûýýûüüúþþüÿÿýüüúüüúÿÿýýýûÿÿýÿÿýúúøÿÿýúúøúúøýýûþþüþþüþþüýýûþþüÿÿýþþüüüúÿÿýþþüûûùÿÿýþþüÿÿýûûùþþüõõóýýûþþüÿÿýýýûýýûÿÿýõõóýýûÿÿýÿÿýþþüüüúÿÿýùù÷èèæÃÃÃÃÃÃ
Ã
Ã
Ã
ÃÃÃÃÃÃÃ
Ã
Ã
ÃÃÃÃæãTÃ\96"Ã\9a\12Ã\9d\aâ¦\bé®\fé²\rå°
+êµ\11è³\ fæ¬
+é®\fâ§\ 3á§\bÃ\9c
+Ã\98 Ã\95\ 1Ã\8f\0Ã\88\0Ã\84\ 3Ã\82\bÃ
\83\vÃ\82\f¿\81
+Ã\86\ e¼\81\vµ| ´{
+·{\v¹}\rº}
+¹|\a¿\81
+½\81\aº\7f\a¹\82\ 4»\86\ 2Ã\8d\ 5Ã\92\ 4Ã\96\ 6Ã\9b\ fÃ\9d\ fá£\12çª\13ì°\11ô\ fö\11ï¹\ fòº\vñ¸\aù¼\föº\fñ¼\ eôÃ\12òº\rõ½\10ðº\ fëµ
+úÃ\16é´\10÷\1eâ*ÿýÃÿýãÿýóþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýþÿüÿþýÿûÿÿúÿúûÿùÿýúÿýþüýÿüÿÿþÿùÿÿá\801¬~\ f¿\89\rÃ\9d\12á\ 6ã©\aç®\aô\vð¸\rð¸ õ¼\rò» õ¾\fõ¾\fó¾\fô¿\ró¿\vñ¿
+òà ôÃ
+õ¾\vö½\fõ¾\fõ¾\fô½\vô½\vó¾\fó¾\fó¾\fó¾\fõ¾\fõ¾\fö½\fõ¼\võ¼\võ¼\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö½\ eõ¼\róº óº òº\ fó»\10ò¹
+÷Ã\ fîÃ
õÃ\12ëÃ\11î\13²\89\17oO\ 6\10\0\0\ 4\0\0 \ 4\ 1\ 3\0\0\ 5\ 1\0\ 3\ 1\ 2\ 2\ 2\ 4\ 4\ 4\ 6\ 3\ 2\a \b\r\ 3\ 2\a\0\0\ 4\0\0\ 2\ 3\ 3\ 5\0\0\0\0\0\0\ 3\ 3\ 3\v\v\v555\92\92\92îîîþþþúúøÿÿýûûùþþüüüúÿÿýüüúþþüüüúþþüþþüüüúûûùüüúýýûüüúûûùüüúÿÿýøøöýýûÿÿýûûùýýûÿÿýþþüÿÿýÿÿýÿÿýþþüÿÿýûûùýýûÿÿýóóñÿÿýÿÿýþþüóóñÿÿýüüúúúøÿÿýþþüúúøýýûúúøþþüüüúÿÿýûûùþþüÿÿýÿÿýÿÿýÿÿýþþüüüúÿÿýúúøýýûôôòþþüüüúüüúèèæÃÃÃÃÃÃ
Ã
Ã
Ã
ÃÃÃÃÃÃÃ
Ã
Ã
ÃÃÃÃæáTÃ\91\1fÃ\99\12Ã\9c\bä¨\fæ« ç°\vå°
+ç³\ fè³\ fäª\bé®
+â§\ 3â¨\bÃ\9c
+Ó
+Ã\99\ 2Ã\97\ 2Ã\91\ 5Ã\8d\bÃ\88\fÃ\86\vÃ\87\vÃ\8a\v¾\81\ 2¿\82\ 3Ã\83\bÃ\84\rÃ\83\ fÃ\82\ eÃ\82\ eÃ\82
+Ã\87\vÃ\89\vÃ\8e\ fÃ\91\ fÃ\94\vÃ\97\aÃ\9a\ 4Ã\9c\ 4ã\fà ¤\ eæ«\13ñ\15ñ¶\14ó¸\12ôº\10ö¼\10óº õ¹\vù»\12ø»\12ó¾\10óÃ\ fô½\võ¾\føÃ\13÷¿\12ï®\bù»\18ì»\18é\1d·\954ÿûÃÿþëþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿüüÿýþþþÿûÿþøÿùúÿ÷ÿþüÿýüüþûûÿú÷øóÿþæ\9cx<®} Ã\8f\12Ã\99\bà\vä§\ eæ¬\rë±\ fîµ\ e÷\fô¼\ròº\vö¾\ fõ½\ eõ½\ e÷¾\ f÷¾\ fø¼\ eø¼\ eù½\rö½\fõ¾\fõ¾\fõ¾\fò½\vò½\vó¾\fó¾\fó¿\vó¿\võ¾\võ¾\vö½\vö½\vö½\vö½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¾\vö½\vö½\fõ¼\vó¼ ô» öº
+öº\fó¹\ fô¿\ föÃ
\aóÃ
+èÃ\11û\17Ã\9d\13«\83$8%\ 4\ 4\0\0\b\ 3\0\ 6\ 2\0\ 5\ 1\0\ 5\ 3\ 4\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 4\0\0\ 4\ 2\ 3\a\ 3\ 4\b\ 2\ 3\ 5\ 3\ 4\ 6\ 5\ 5\a\0\0\ 2\ 1\ 1\ 1\ 4\ 4\ 4\13\13\13+++£££úúúÿÿýýýûþþüÿÿýüüúÿÿýüüúÿÿýþþüÿÿýÿÿýþþüýýûýýûýýûýýûüüúüüúúúøÿÿýùù÷õõóÿÿýýýûõõóþþüûûù÷÷õûûùüüúÿÿýúúøÿÿýÿÿýÿÿýûûùòòðÿÿýýýûÿÿýùù÷ûûùþþüÿÿýûûùüüúùù÷þþüýýûÿÿýÿÿýüüúþþüúúøþþüÿÿýøøöÿÿýüüúööôþþüûûùÿÿýýýûùù÷ääâÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃæáVÃ\8b\1eÃ\8f
+Ã\9d ᥠâ¨\ 6ã¬\aé´\få²\vè³\räª\bê¯\vâ§\ 3äª
+× ×\ eÓ\aÒ\bÐ\rÍ\rÉ\ eÅ Ä\ 5Æ\ 3Ã\0Æ\ 4Ç\bÅ
+Ã\85 Ã\84\bÃ\88
+Ã\8c\fÃ\8d\bÃ\8e\aÃ\8d Ã\8e Ã\8f\aÃ\96\aÃ\9c\ 5à\ 4á«
+ä¯\vé´\10ïº\12õ½\12ö½\fú¾\bû¿\aö»\aø¼\ eø¸\18÷¼\18óÃ\ fð¿
+ô¿\rô½
+ó¿\aõ¼
+û¶\11óÂ\11õ¸\1féµ#ê$´\9c:ÿÿÃþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿüüÿýþþþþûÿþúÿùûÿùÿþüÿýüûýøüÿûÿÿýÿùéÿúèz%¹\87\ eÃ\9b\rà\ eã¦\ fä©\ré¯\ fê´\fì¶\vò½\ fð»\vö¾\ fô¼\rõ»\ fö¼\10ù½\11ø¼\10ù»\10ø¼\ eö½\fö¿\rö¿\rõ¾\fò½\vò½\vó¾\fô¿\ró¿\vó¿\võ¾\võ¾\vö½\vö½\vö½\vö½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\vö¾ ö¾ õ¼\vö½\fõ¾\v÷¾\fø½\vø¼\ eö¾\13ñ¼\f÷à ïÃ\ 3ðÃ\15ñÃ#ç·\19¾\90\18z`#\19\v\0\b\0\0\b\ 3\0\ 4\0\0\ 4\0\ 3\ 2\ 2\ 4\ 2\ 3\a\ 1\0\ 5\ 5\ 4 \ 1\ 2\ 6\0\ 1\ 3\ 1\ 2\ 4\0\0\ 2\ 2\ 2\ 2\ 4\ 4\ 4\ 5\ 5\ 5\0\0\0\ 4\ 4\ 4\16\16\16EEE¹¹¹ññïÿÿýýýûþþüûûùþþüüüúÿÿýýýûýýûÿÿýÿÿýÿÿýþþüþþüþþüÿÿýþþüÿÿýÿÿýýýûüüúÿÿýÿÿýþþüþþüÿÿýûûùÿÿýÿÿýÿÿýüüúÿÿýüüúþþüÿÿýÿÿýüüúþþüÿÿýÿÿýÿÿýýýûÿÿýþþüÿÿýûûùÿÿýþþüþþüüüúýýûÿÿýôôòùù÷ÿÿýõõóüüúÿÿýýýûÿÿýÿÿýüüúüüü÷÷÷ìììÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃý£Ã\9bPÃ\8f"Ã\8d\fÃ\98 Ã\9c\ 4å«\vå®\vç²\fç²\fë¶\10æÂ\bì±\råª\ 4è®\fâ
+Ü¢\10Ü\ fØ\ eÔ\ fÑ\11Ð\11Í\fÉ\ 6É\ 4Í\ 6Ì\ 4Ê\ 6Ë\vÍ\ eÍ\10É\vÆ\ 5Ï\fÍ\bÎ Ô
+Ã\9b\rà \9f\râ£\bã\ 4å® æ± ê·\fð¼\ eó¾\fö¾ ø¼\ 2ù½\ 3÷¼\bùÃ\11ö¸\15÷¼\18óÃ\ fï½\ 6õÃ\ eô½
+õÃ\aë³\0øµ\ fÿº\1eò±\17ê±\19à ²\16ä%ÿÿÃÿÿçÿÿóÿþúýÿþýÿþþþüþþüÿýþÿýþþþþþþüýÿüýÿüýÿüýÿüþþüþÿúþþüþþüþþüýÿüýÿüýÿüýÿüþþüÿþüÿþüÿþüþþüþþüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýþÿýþþþþûÿþûÿüýÿüÿýüÿüüüüúþÿýüþýÿþñÿùë\815¾\8a\1aÃ\93\vÃ\9d\vâ\bçÂ\ eçÂ\vï¶\ fî¶\vòº\rñ¹
+õ½\ eõ½\ eõ½\ eõ½\ eö½\ eö½\ eö½\ eõ¼\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¿\fö¿\fö½\fö½\fö½\fõ¼\võ¼\võ¼\vñ¹
+ò½\vñ¿
+îÃ\bðÃ\10òÃ\17ê¼\ fé\14²\8c!M0\0\r\0\0 \ 1\0\a\0\ 3\ 3\0\ 5\ 5\ 6\v\0\ 3\b\ 1\ 2\a\ 2\ 1\a\ 1\ 2\ 4\ 1\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 3\0\ 1\ 3\0\0\0\0\ 2\ 2\ 4\ 2\ 2\ 4\b\b
+\1c\1c\1cYYYÃÃÃÿÿÿóóñþþüÿÿýûûùùù÷ÿÿýÿÿýòòðÿÿýúúøÿÿýýýûøøöüüúüüúööôüüúÿÿýüüúúúøÿÿýÿÿýúúøÿÿýþþüûûùúúø÷÷õþþüþþüõõóýýûÿÿýþþüÿÿýüüúüüú÷÷õûûùþþüööôüüúþþüúúøÿÿýþþü÷÷õüüúüüúööôüüúþþüÿÿýûûùÿÿýÿÿýþÿúþÿúþþüýýûúøùÿýÿýûþåãæÃÃÃÃÃÃÃþÃ
Ã
ÃÃ
Ã
ÃÃÃÃÃÃÃÃêÃ\9cP¼\89\1cÃ\8a\ fÃ\93\vÃ\9e\fã å®\r㬠è±\fæ¯
+ï´\ eî±\vé¬\ 6åª\ 6ã\ 4ç\fá Ã\9e
+Ó\aÔ
+Ð\bÓ\vÐ\bÐ\bÐ\bÏ Î\bÎ
+Î
+Ã\94 Ã\95\bÃ\96\aÃ\96\ 6Ã\9b Ã\9a\ 6Ã\9b\aÃ\9d\ 6à\aä¨
+â¨\ 6æÂ\bé³ ï¹\ eó¾\10õ¾\fô½
+õ½\bö¾ ö½\fõ½\ eö¼\10õ½\10ó¾\fó¿\võ¾\fõ¾\fö¿\fô½\võ¹\rõ¸\10ó¸\14ð¶\14é´\10ñ\1f¹¡5ÿÿ»ÿÿà þûôûÿÿûÿÿüþýüüüÿüÿÿüÿÿýÿýÿþúÿüúÿúûÿüûÿüýÿúýÿùþÿúþÿúþþüûÿþúÿþúÿþûÿþþþþÿýüÿûüÿüüÿþüýÿüûÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýþÿýþýÿþûÿþûÿþþþüÿýüÿüüÿÿýüüüþÿÿÿÿñÿýÃ\9bu,¸\84\17Ã\95\ fÃ\9d\vã ã©
+è®\fê±
+ï·\fñ¹\fòº\vô¼\rõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö½\fö½\fö½\fõ¼\võ¼\võ¼\vô½\vô¿\róÃ\rñÃ\fôÃ\11öÃ\14ïÃ\rá¶\ fÃ\9c\12\9av\15,\15\0\10\ 4\0\a\0\ 1\ 3\0 \0\0\ 5\0\ 2\ 5\ 2\ 1\ 6\ 2\ 2\ 4\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 2\ 2\ 4\ 1\ 3\0\ 1\ 3\0\ 5\ 5\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 4&&&\8e\8e\8eéééþþüÿÿýÿÿýÿÿýúúø÷÷õþþüÿÿýýýûùù÷þþüýýûûûùÿÿýÿÿýýýûþþüþþüüüúüüúýýûþþüþþüþþü÷÷õÿÿýÿÿýûûùýýûÿÿýüüúþþüýýûýýûÿÿýýýûÿÿýüüúÿÿýÿÿýüüúþþüþþüùù÷ûûùþþüûûùÿÿýÿÿýüüúÿÿýÿÿýÿÿýýýûÿÿýüüúÿÿûþÿúýýûþþüüúûÿþÿÿþÿêèëÃÃÃÃÃÃÃ
Ã
ÃÃ
Ã
ÃÃÃÃÃÃÃÃÃÃÿ¥·\96I·\87\19Ã\8b\14Ã\93\ eÃ\99
+Ã\9c\ 4ã©
+㬠é²\ fì³\fã©\0ð\bð³\ræ«\ 5çÂ\vä\ 3á¦
+ߤ
+×\ 6Ø\bÓ\ 5×\vÔ
+Ã\9b\vÃ\96\aÃ\95\ 6Ã\96\aÃ\97\bÃ\99\bÃ\99\bÃ\9a Ã\9a\bÃ\98\ 2Ã\9d\ 5Ã\9e\ 6ã à ¥ à ¦\aæ¬\fçÂ\vé° Ã´\vòº\ fõ½\ eõ½\ eô½\vô½
+õ¾\võ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¾\ fô¼\ròº\rñ¹\fñ¹\ eñ¸\ fîµ\ eæ´\17ç!±\96/ÿÿÃÿÿåÿÿû÷üÿùýþþÿÿÿýþÿüÿÿüÿÿýÿýÿþûÿüûÿúûÿùûÿúýÿúÿþúÿþúþþüýÿþúÿüøÿüúÿüþþþÿüþÿûþÿûüÿýúûÿúúÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýüÿýüýÿüûÿüýÿüþþüÿýúÿýúÿÿýúúøþÿÿÿüîÿ÷ë\86?µ\82\15Ã\9a\14Ã\9c
+ã\và ¥ è®\fç®\að¸\rð¸\vó»\ eô¼\rõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö½\fö½\fö½\fö½\fõ¾\fó¾\fò¿\fð¿\vñÃ\ eôÃ\12òÃ
\10ÃÃ\16ç\ fÃ\9d&oN\a\14\0\0\f\ 5\0\0\0\a\ 5\ 4
+\ 2\ 2\ 4\ 2\ 3\0\ 2\ 3\0\ 3\0\a\ 3\0 \ 3\0\a\ 2\ 1\ 6\ 1\ 2\ 6\ 1\ 2\ 6\0\0\ 2\0\0\ 2\ 4\ 4\ 6\ 3\ 3\ 5\ 4\ 4\ 4\1a\1a\1a___ÃÃÃÿÿýûûùõõóýýûÿÿýþþüÿÿýþþüþþüüüúþþüüüúüüúÿÿýýýûýýûÿÿýúúøûûùüüúùù÷ûûùÿÿýüüúúúøüüúýýûÿÿýþþüùù÷ýýûÿÿýùù÷úúøýýûúúøþþüüüúþþüúúøÿÿýÿÿýÿÿýþþüýýûÿÿýýýûÿÿýþþüÿÿýþþüýýûùù÷ÿÿýþþüøøöþÿúûü÷úúøýýûüüüÿÿÿÿÿÿïïïäääÃÃÃÃÃý½»ÃÃÃÃÃÃÃÃÃÃè·\96I´\84\16¼\85\ eÃ\8f
+Ã\9a\vÃ\9f\a⨠áª\aå®\vè¯\bî´\vï² Ã°\bé®\bå« å®\rã©
+ã¨\fã\aä
+Ú\aÝ¡\vØ
+Ù \v×\vÖ
+Ö
+Ã\9d\vÃ\9e\fÃ\9e Ã\9e Ã\9f\bÃ\9f\aá\aá\aä©\ræ«\ fã©
+è®\fë²\rô\rð·\ eô¼\11õ½\ eõ½\ eô½\vô½
+õ¾\võ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\võ¾\võ¾\fô½\vòº\vñ¹\fñ¹\ eñ¹\ eð·\ eð¶\16ê° Ã§,«\8a)ÿþÃÿûåþÿÿûÿÿ÷ýûýÿúÿþüÿüÿÿúÿÿúÿÿýþýÿ÷ûÿõûÿüþþÿÿýþÿýþÿýüþÿúûÿ÷úÿ÷ûÿúýÿüÿüÿÿüÿÿýúÿþùûÿùúÿúýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýüÿýüýÿüûÿüýÿüþÿúÿþùÿþùþýùÿÿýúüûÿÿñÿýÃ\9d{4µ\82\15Ã\95\ fÃ\9b\vá ä
+æ¬\fç® ï¶\rð¸\ròº\rô¼\rô¼\rõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\võ¾\fõ¾\fö½\fö½\fö½\fö½\fô½\vó¼
+ñ¼
+ð½
+ð¿\vðÃ\róÃ
\10óÃ\19à ¶\12ã\17±\8a#C'\0\v\ 3\0\0\ 1\ 5\ 4\ 4\ 6\ 1\0\0\ 2\ 3\0\ 3\ 2\0\ 5\0\ 6\ 5\0\a\ 3\0\a\ 2\ 1\a\ 2\ 1 \ 1\ 2\a\ 3\ 2\a\ 2\ 2\ 4\ 3\ 3\ 5\0\0\ 2\0\0\0\a\a\a"""\93\93\93ôôòüüúüüúýýûþþüýýûÿÿýýýûÿÿýþþüÿÿýûûùüüúýýûùù÷ûûùÿÿýþþüÿÿýÿÿýþþüÿÿýÿÿýÿÿýÿÿýûûùööôÿÿýþþü÷÷õýýûÿÿýþþüþþüÿÿýûûùÿÿýþþüÿÿýøøöÿÿýýýûÿÿýÿÿýýýûÿÿýüüúúúøýýûÿÿýüüúüüúøøöÿÿýþþüúúøþÿúüýøûûùþþüüüüýýýþþþñññçççÃÃÃÃÃÃÃÃÃÃÃÃ
ÃÃÃ
ÃÃÃÿ¥¹\98K´\84\18·\80 Ã
\8b\ 6Ã\9b\fá ã©
+â«
+é²\ få¬\ 5î´\vð\að³
+ò¸\ fç® ç°\râ¨\bã© á§\bã©
+ä\bà ¥\vâ
+ܣ\vޥ\ eܣ\fۢ\vܣ\fܣ\fۢ\vۢ
+ä\fà ¥\vá¦
+ä\bã©
+å«\fäª
+ê±\fì³\fï¶\rñ¹\ eô¼\ fõ½\ eõ¾\fô½\võ¾\vö¿\rõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\võ¾\võ¾\fõ¾\fô¼\ròº\vñ¹\fñ¹\ eòº\ fó¸\14ó²\1að³'Ã\9a\1e\9dz\1cÿÿÃÿÿì÷úóùÿýøÿ÷ýÿ÷ÿüüÿúÿÿùÿÿûþþÿ÷ûÿõûÿüþþÿÿüÿÿüÿÿüþÿýúþÿõýÿóûÿùýÿüÿýÿÿüÿÿýúþÿ÷ûÿùúÿúýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýúÿþúýÿúûÿúýÿúþÿúÿÿ÷ÿþ÷ÿþúÿÿûüüúÿÿñÿýë\8aE°\80\12Ã\8f Ã\9a\vÃ\9d\aá¦\ eã©
+ê°\ eô\rñ¹\ eñ¹\fô¼\rô¼\rõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fò½\vò½\vô½\võ¾\fõ¾\fõ¾\fö½\fö½\fõ¾\fô½\vò½\vñ¾\vð¿\vïÃ\fòÃ\ föÃ\16ìÃ\14ì\fÃ\9e\17\95r\14 \12\0\a\ 4\0\ 1\0\0\ 4\ 5\0\ 3\ 2\0\ 3\ 2\0\ 6\0\0\ 6\0\ 2\ 3\ 1\ 6\ 2\ 1\a\ 2\ 1 \ 2\ 1 \ 3\ 2\a\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 4\ 4\ 4\ 1\ 1\ 1\r\r\r\85\85\85ôôòÿÿýÿÿýûûùúúøûûùþþüüüúþþüýýûþþüûûùýýûþþüûûùÿÿýûûùÿÿýýýûûûùÿÿýþþüúúøÿÿýÿÿýÿÿýüüúýýûüüúýýûÿÿýûûùÿÿýÿÿýÿÿýúúøÿÿýÿÿýÿÿýúúøÿÿýüüúþþüúúøøøöüüúüüúûûùþþüýýûûûùÿÿýúúøÿÿýÿÿýþþüÿÿýÿÿýÿÿýÿÿýüüúúúøüüúôôòììêÃÃÃÃÃÃÃÃÃÃÃÃ
ÃÃÃÃÃ
ÃÃê´\93Fµ\85\19º\83\fÃ\89\aÃ\97\bÃ\9c\ 4à ¥ ã¬\vå®\vô\ré¯\ 5ò¶
+ó·\vì²\bð·\10ç°\væÂ\bç® äª\bå« à ¦\ 6ã©
+à ¥ â§\vá¦
+ä\bã\aä\bä\bà ¥ â§\vä©\r⨠å«\vã© äª\bå« ç® ì³\ eë²\vð·\ eòº\ fô¼\ fô¼\rô½\vô½\võ¾\fö¿\rõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\võ¾\võ¾\võ¾\võ¾\fô¼\ró»\fòº\ròº\rò¹\12ï°\13î®\19ê©\eÃ\9d"Â\83-ÿøÃÿÿìòþôöÿóøÿóÿÿ÷ÿûüÿúÿÿüÿþÿùûÿ÷ûÿúýÿüÿýþÿüÿÿúÿÿüþÿÿõþÿóýÿùýÿþþýÿÿüÿÿþúþÿ÷ûÿúûÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýúÿþúýÿúûÿúýÿúþÿúÿÿ÷ÿÿ÷ýþøÿÿûÿÿýÿûïÿúÃ\9f\81A®~\12Ã\95\ fÃ\98\fÃ\9c\bà ¤\ eá¦
+ë±\11ì³\fñ¹\ eð¸\vô¼\ fô¼\rõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fò½\vò½\vô½\võ¾\fõ¾\fõ¾\fö½\fö½\fô½\vô½\vò½\vó¾\fñ¾\vð¿\vóÃ\ eõÃ\12óÃ\15á·\væ ¼\98\1efN\10\v\0\0\a\ 3\0\ 3\ 3\ 1\ 3\ 1\ 2\ 5\ 1\ 2\ 6\ 1\0\ 5\ 1\0\ 3\ 1\ 2\ 2\ 1\ 6\ 2\ 1 \ 2\ 1\a\ 1\0\ 5\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 1\0\0\0\ 4\ 4\ 4hhhõõóþþüüüúüüúÿÿýÿÿýüüúùù÷ÿÿýüüúÿÿýþþüýýûÿÿýþþüÿÿýööôþþüúúø÷÷õÿÿýûûùööôýýûúúøÿÿýÿÿýÿÿýþþüýýûÿÿýþþüüüúüüúýýûøøöüüúüüúÿÿýþþüüüúüüúþþüüüúýýûÿÿýýýûýýûÿÿýüüúüüúÿÿýüüúýýûþþüÿÿýúúøþþüþþüþþüüüúüýøþþüøøöððîÃÃÃÃÃÃÃ
ÃÃÃÃÃÃÃÃÃÃÃö\9c°\8c@´\83\1a»\84\ fÃ\89\aÃ\98
+Ã\9d\ 5ä\b᪠â«\bì³\fò¸\ eô¸\fð´\bë±\aîµ\ eî¸\10îµ\ eô\rç®\aç® á¨\ 3äª\bã© å«\vå«\vã© á§\aá§\aâ¨\bâ¨\bäª
+æ¬\fá§\açÂ\væ¬
+ç® é°\vë²\vï¶\ fë² ð¸\ròº\ró»\fô¼\rô½\võ¾\fõ¾\fö¿\rõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\võ¾\võ¾\võ¾\vö¿\rö¿\rõ½\ eó»\fòº\vò¹\10ó¹\19ñ²\15ö´\18ê©\19Ã\9b\1fº\968ÿüÃÿÿäûÿîøÿõýÿ÷þÿúÿýþÿýþþÿúýÿùûÿ÷ýÿùÿþúÿüþÿúÿÿúÿÿþùÿÿõþÿùýÿþýýÿþýÿþÿúþÿùýÿþýÿþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýúÿþúýÿúûÿúýÿüþÿúþÿ÷þÿ÷üýøÿÿýÿÿýÿýòÿþã\9a}C°\81\19Ã\94\ fÃ\98\ eÃ\9c
+á\rá¦\fçÂ\rì³\ eð·\ eð¸\vô¼\ fô¼\ fô¼\rõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fó¾\fó¾\fó¾\fó¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vò½\vò½\vò½\vñ¾\vóÃ\rôÃ\ fûÃ\1aïÃ\15â¹\11Ã\9f\12¦\84#7 \0
+\ 3\0\0\0\ 4\ 3\ 1\ 4\ 3\ 1\ 2\ 5\ 1\0\ 3\ 2\0\ 2\ 3\0\ 2\ 2\0\ 2\ 1\ 6\ 3\ 1\ 6\0\0\ 2\ 4\ 4\ 6\ 4\ 4\ 6\0\0\ 2\ 4\ 4\ 4\b\b\b\ e\ e\ eTTTëëéýýûÿÿýÿÿýÿÿýûûùüüúÿÿýÿÿýúúøÿÿýÿÿýûûùýýûþþüÿÿýüüúÿÿýÿÿýþþüÿÿýÿÿýýýûÿÿýúúøûûùýýûýýûÿÿýüüú÷÷õýýûþþüþþüÿÿýüüúÿÿýüüúÿÿýÿÿýûûùþþüÿÿýýýûÿÿýÿÿýûûùýýûþþüüüúÿÿýþþüýýûúúøýýûýýû÷÷÷üüüûûùûûùüýøÿÿúÿÿûùúõêëæáâÃÃÃÃÃÃÃÃÃÃÃÃÃ
¹µ´ykQ¡}1®}\14º\83\ eÃ
\8a\bÃ\9b\rÃ\9f à ¥ è\aé²\ fæÂ\ 6ð¶\fî²\ 6ò¶\bø¾\12ì³
+ëµ\vò¹\10ñ·\ eë±\bë°
+ç¬\ 6é®
+æ«\aæ« é®\fç¬
+å« å« å« ã©\aã©\aå¬\aæÂ\bé° è¯\bë²\vô\rô\vð·\ eî¶\vòº\ fó»\ eô¼\rõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¾\võ¾\võ¾\võ¾\võ¾\võ¾\fõ¾\fô½\vó»\10ö\13ð¹\18ö\11ì·\13ç²\14è\1eÃ
\9e9ÿÿ¿ÿýéþþüøÿü÷ÿüúÿüûÿüýÿüýÿùúÿõûÿóþÿõÿýúÿûÿÿúÿÿüÿÿþüþþüýþÿýþÿýþÿþÿúþÿúþþÿþýÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýúÿþúýÿúýÿüþþþþþüþÿùþÿ÷ÿÿûüüúÿÿýÿÿöÿùãÿþõ\85\1fÃ\89\aÃ\97\ fÃ\9c\rÃ\9d á¦\ eã©
+ô\ fï¶\rñ¹\ eô¼\ fô¼\ fô¼\rõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fó¾\fó¾\fó¾\fó¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¿\rõ¾\fó¾\fò½\vò½\vó¾\fõÃ\ eôÃ\ eóÃ\12öÃ\1aèÃ\11ë\ e·\8e\10\8aj\15\ f\0\0\b\ 4\ 1\ 3\ 1\ 2\ 2\ 2\ 4\ 2\ 2\ 2\ 2\ 2\0\ 2\ 3\0\ 2\ 3\0\ 3\ 1\ 2\ 3\ 1\ 4\ 4\ 4\ 6\ 1\ 1\ 3\0\0\ 2\ 3\ 3\ 5\ 3\ 3\ 3\0\0\0\f\f\fPPPõõóÿÿýûûùõõóüüúÿÿýÿÿýýýûüüúõõóüüúýýûøøöüüúÿÿýÿÿýÿÿýüüúÿÿýÿÿýûûùýýûÿÿýÿÿýûûùÿÿýþþüôôòüüúÿÿýøøöööôþþüþþüÿÿýýýûýýû÷÷õûûùýýûÿÿýÿÿýüüúööôûûùýýû÷÷õýýûþþüýýûÿÿýþþüþþüûûùÿÿýþþüýýýÿÿÿþþüüýøþÿùÿÿúþÿùôõïðñìçèãÃÃÃÃÿÃÃ
ÃÃÿ\9b\97\96,\1e\ 3\8ch\1c¦u\f½\86\11Ã\8c\fÃ\98
+Ã\9b\ 5ä\bâ«
+㬠ì³\fì²\bó· ó· ï¶\aó»\10ì¶\fñ·\rñ·\ró
+ïµ\fë°
+ò\fæ«\ 5åª\ 4åª\ 6åª\ 4ä«\ 6æÂ\ 6æÂ\bå¬\ 5ä«\ 6å¬\ 5ì³\fë² è¯\ 6ì´ Ã´\vë³\bï·\fñ¹\fó»\ eô¼\ fõ½\ eö¾\ fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¾\võ¾\vô½
+ô½
+ô½
+õ¾\fõ¾\fõ¾\fò½\ fë¶\ eò¿\18è¸\fç¸\böÃ\12ë·\13é!¿\94.ÿûÃÿýãÿÿîøÿ÷øÿùúÿüýÿþýÿüúÿùúÿõûÿóþÿùÿüÿÿûÿÿüÿÿýÿþþþýþÿûÿÿûÿÿþÿúþÿúÿýÿÿýÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýüÿþüýÿüýÿþÿýÿÿýÿýÿùýÿùÿÿýýýýþüýÿþùÿþïÿüð\82 Ã\8b
+Ã\96\11Ã\9c\ eÃ\9d\vá¦\ eã©
+î´\12îµ\fð¸\ró»\ eó»\ eô¼\rô¼\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô¿\ró¾\fò½\vò½\võ¾\fõ¾\fõ¾\fõ¾\fô½\võ¾\fõ¾\fô½\vó¼
+ó¼
+õ¾\fóÃ\rðÃ\ fÃÃ\11ôÃ\1cãº\12Ã\9f\ 6·\8f\1dJ4\0\f\ 1\0\a\ 4\0\0\ 1\ 4\ 1\ 5\b\ 1\ 5\b\ 2\ 2\ 2\ 4\ 3\ 1\ 2\ 1\0\ 4\ 3\ 1\0\0\0\ 4\ 4\ 6\ 3\ 3\ 5\0\0\ 2\a\a\a\ 5\ 5\ 5\a\a\aWWWììêýýûþþüþþüþþü÷÷õúúøÿÿýÿÿýýýûþþüûûùÿÿýýýûõõóýýûüüú÷÷õûûùÿÿý÷÷õÿÿýûûùÿÿýÿÿýþþüÿÿýüüúûûùÿÿýýýûýýûÿÿýþþüýýûüüúÿÿýúúøÿÿýõõóÿÿýûûùÿÿýÿÿýüüúÿÿýüüúÿÿýõõóÿÿýûûùôôòÿÿýÿÿýûûùþþüúúúÿÿÿÿÿýúûöþÿùÿÿúþÿùýþøÃîéååãÃÃÃÃÃÃý¼Ã¾»A<8\1f\10\0\8af\1a©x\ f¹\82\rÃ
\8a
+Ã\95\aÃ\9c\ 6á¦
+ã¬\váª\aë²\vò¸\fõ¹\v÷»\rô»\fñ¹\ eñ»\10ò¸\ eò¸\ eñ·\rð¶\fïµ\fïµ\fî´\vî´\vò\fó
+ò\fó
+ò\fó
+ò\fó
+ì´ î¶\vî¶\võ\bï·\fòº\ròº\rï·\bòº\vó»\fô¼\rõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¾\võ¾\võ¾\võ¾\võ¾\võ¾\fõ¾\fõ¾\fó¾\fñ¾\rü
+ì» ì½\vÿ
+ìº\rë·\15ë·&Ã\9e*¸\94>ÿüÃÿÿéþÿööüøþÿÿýüÿûÿÿõþùúÿ÷÷ýóÿþÿúùÿÿþÿÿþÿýÿþýÿþûÿÿûÿþþÿúÿþúÿýþÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿþüýÿþýþÿÿüÿÿýÿýÿúûÿùÿÿÿýýÿÿýÿÿýúÿþôÿüï\83$Ã\89\vÃ\8f
+Ó
+à\11ä¨\12ê¯\13ó\11îµ\fî¶\vô¼\ fô¼\ fõ½\ eö¾\ fö¿\rö¿\rö¿\rö¿\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fó¾\fó¾\fò½\vó¾\fõ¾\fõ¾\fõ¾\fô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fò¿\fîÃ\ eÃÃ\10ïÃ\10ïÃ\13á²
+Ã\99\ f\9f\7f(.\1c\0\ 6\ 1\0\ 3\a\ 6\0\ 1\ 5\0\0\a\0\0\a\ 4\ 2\a\ 2\ 1\0\ 3\ 4\0\ 2\ 2\ 2\0\0\ 2\a\a \0\0\ 2\0\0\0\ 3\ 3\ 3\ f\ f\ f\83\83\83ÿÿýÿÿýýýûþþüþþüÿÿýÿÿýüüúÿÿýýýûýýûþþüÿÿýÿÿýýýûÿÿýÿÿýýýûÿÿýÿÿýûûùÿÿýüüúÿÿýýýûúúøÿÿýÿÿýþþüþþüþþüÿÿýùù÷øøöÿÿýýýûÿÿýÿÿýÿÿýúúøþþüûûùÿÿýþþüüüúÿÿýþþüÿÿýûûùüüúÿÿýÿÿýüüúþþüþþüööôÿÿÿýýýþþüÿÿûýþøüý÷ùúôö÷òëëéÃÃÃÃÃÃÃÃÃþ»\YT\e\16\103$\ 5\87c\15©x\ f»\84\ fÃ\8d\rÃ\97 Ã\9c\ 6ã\aà ©\b㬠ë²\vïµ ó· öº
+ô»\fòº\rðº\ fô¼\11ôº\10ó¹\ fò¸\ eñ·\rð¶\rïµ\fî´\vó
+ó
+ó
+ó
+ó
+ó
+ó
+ó î¶ ð¸\vð¸\vï·\bð¸\vó»\fó»\fñ¹
+ó»\fó»\fô¼\rõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¾\võ¾\võ¾\võ¾\võ¾\võ¾\fõ¾\fõ¾\fõ¾\fô¿\rð½
+ï¼ ð¿\vð¿\rï¼\vñ¹
+óº\11òº\1fç'¼\97>ÿù»ÿÿÃÿÿêÿüöÿûÿúûÿüÿÿûÿûûÿúöúùþÿÿþÿÿøùûýÿþýÿüýÿüýÿüþÿúÿþùÿýúÿýüÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüþþüýÿþýþÿÿüÿÿýÿûÿúûÿùÿÿÿþüÿÿüÿÿýþÿþúÿüÃÂ\82$Ã\88\vÃ\91\rÃ\95 à\11à ¤\ eé®\12è®\fð·\ eòº\ fó»\ eô¼\rô¼\rõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vó¼
+ö¿\rô½\vô½\vô½\vö¿\r÷Ã\ eö¿\rò¿\fëÃ\vêÃ
+òÃ\vóÃ
\rõÃ\1aç\ eã)\83g\13\1c\13\0\ 2\ 4\0\0\ 2\ 3\0\ 2\v\ 5\0\10\a\ 1\ f\ 2\ 2\ 2\ 2\ 3\0\a\a\a\ 4\ 4\ 6\ 2\ 2\ 4 \v\0\0\0\ 4\ 4\ 4...ÃÃÃÿÿýùù÷þþüÿÿýûûùþþüþþü÷÷õýýûúúøùù÷ýýûüüúûûùþþüýýûýýûýýûüüúûûùúúøþþüùù÷üüúÿÿýùù÷ùù÷ÿÿýüüúøøöÿÿýÿÿýÿÿýúúøþþüööôúúøýýûûûùÿÿýüüúúúøþþüüüúûûùÿÿýýýûûûùþþüÿÿýÿÿýýýûüüúüüúûûùýýûýýÿ÷÷÷úúøýþù÷úóúýöþÿûþÿû÷÷÷ÃÃÃÃÃü¸·e`\\18\13\r\16\ f\ 5@0\ e\87c\15ªy\10½\86\11Ã\8f\ fÃ\98
+Ù\aߤ
+á©
+å®\vë²\vî´\bñµ\aõ¹ ô»\fòº\rðº\ fõ½\10õ½\10ô¼\ fó»\ eòº\rñ¹\ eñ¹\ eð¸\rñ·\rñ·\rñ·\rñ·\rñ·\rñ·\rñ·\rñ·\rð¸\vó»\fó»\fò» òº\vô½\vô½\vó¼
+ô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\f÷¾\ fô¼\rò½\vò¿\fö¾\11õ¼\r÷¼
+ø¼\fõº\14ðº\1cû(ë+§\85#ÿý½ÿøÃÿýøÿúÿþûÿùúüöüøûÿûóúóúÿûþÿýýÿúýÿúýÿúýÿúþÿùÿþùÿþ÷ÿþ÷ÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüþþüýÿþýþÿÿüÿÿýÿûÿúúÿùÿÿÿÿýÿÿýÿÿýþÿÿýÿüÃÂ\82&Ã\87
+Ã\95\11Ã\96\rÃ\9d\ eá\vä©\rçÂ\vð·\ eô¼\ fó»\ eó»\fô¼\rô¼\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¿\rõ¾\fó¼
+ò» õ¾\fô½\vó¼
+ó¼
+ô½\võ¾\fõ¾\fòÃ\vêà éÃ\ 5÷Ã\vöÃ\fûÃ\eà µ\ eá
+¼\99%YG\ 5\a\ 2\0\ 2\ 1\0\ 3\ 2
+\a\0\11\ 3\0\f\ 1\ 1\ 1\0\ 1\0\0\0\0\ 4\ 4\ 6\0\0\ 2\0\0\ 2\ 6\ 6\ 6$$$ÂÂÂóóóüüú÷÷õÿÿýÿÿýüüúÿÿýýýûüüúÿÿýþþüûûùÿÿýýýûùù÷ÿÿýúúøýýûÿÿýýýûûûùþþüÿÿýûûùþþüÿÿýúúøøøöÿÿýüüú÷÷õþþüûûùÿÿýþþüþþüûûùÿÿýýýû÷÷õþþüýýûüüúþþüüüúûûùþþüýýûøøöýýûÿÿýüüúúúøþþüýýûüüúÿÿýÿÿÿÿÿÿÿÿýÿÿûúýöüÿøþÿûôöóëëÃééëýÃea`\14\ f\v\12\ e\ 3\15\ f\ 1A1\r\87d\13©y\r¼\85\10Ã\8f\ fÃ\98
+Ã\9d\aá¦\fÃ¥Â\ eäÂ
+ë²\vî´\bñµ\aõ¹ ô»\fòº\rðº\ fô¼\ fô¼\ fô¼\ fô¼\ fô¼\ fô¼\ fô¼\ fô¼\ fõ»\ fõ»\ fõ»\ fõ»\ fõ»\ fõ»\ fõ»\ fõ»\ fòº\võ½\ eõ¾\fô½\vó¼
+ô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\f÷¾\ fõ¼\rô½\võ½\ e÷¾\ f÷»\rø»\vù»\ eõ·\fò¶
+úÃ\10ì¹\12ç¹0ã:\99|8ÿüÃÿüìÿûùÿþÿüþýûÿúùÿøúÿöúýöþÿúþÿúþÿùþÿùþÿùþÿùÿþõÿþ÷ÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþúþÿúýÿüýþÿÿüÿÿýÿúÿùúÿ÷þþþÿýÿÿýÿÿýþÿÿÿÿüì\83'Ã\87 Ã\91\rÃ\95\fÃ\9a\vá¥\ fåª\ eì²\10ô\vð¸\vô¼\ fõ½\ eõ¾\fö¿\rö¿\rö¿\rö¿\rö¿\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö½\fö½\fö½\fö½\f÷¾\rö½\fó¼
+ò» õ¾\fõ¾\fô½\vó¼
+ó¼
+ó¼
+õ¾\fôÃ\rëÃ\ 6ÃÃ\bòÃ
+úÃ\14óÃ\12ëÃ\10äµ\r¾\95\a\95|\185%\0
+\0\0 \0\ 5\a\0\f\ 4\0
+\ 3\ 3\ 3\ 1\ 3\0\ 2\ 2\ 2\ 1\ 1\ 3\b\b
+\ 4\ 4\ 6)))¤¤¤÷÷÷ýýýÿÿýüüúüüú÷÷õýýûÿÿýûûùÿÿýþþüþþüüüúÿÿýþþüúúøÿÿýùù÷ýýûÿÿýýýûûûùÿÿýþþüýýûþþüüüúýýûûûùÿÿýÿÿýüüúþþüõõóýýûÿÿýøøöþþüÿÿýþþüüüúýýûÿÿýÿÿýþþüþþüýýûÿÿýÿÿýúúøþþüööôüüúÿÿýüüúþþüÿÿýûûùúúúþþþûûùþÿúþÿúþÿûûýúðòñäãè¾½Ã^Y]"\1e\1d\10\v\ 5\ 6\0\0\1d\16\ 4=.\ 5\85b\10§w\vº\83\ eÃ\8e\fÃ\97 Ã\9b\ 5ä
+ä¬\r㬠ë²\vð¶\fó· õ¹ óº\vñ¹\fñ»\10õ½\10õ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eö½\ eö½\ eö½\ eö½\ eö½\ eö½\ eô½\võ¾\fö¿\rõ¾\fô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fö½\vö½\vø¼\10ø¼\10ö½\fø¼\fø»\13ú»\16ÿ¿\17û¼\ fï¶\ 4ôÃ\12é¹\19ã·#ï,Ã
\9e7\9f\83Dÿ÷Ãÿûõÿþÿøýöùÿöüÿöüÿöÿþüÿþüÿþúþÿùþÿúþÿúþÿùÿþùþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿþùþÿùýÿúýÿþÿüÿÿýÿúÿ÷øÿõýÿüÿýþÿþÿþüýþÿÿÿþâÂ\84(Ã\89\vÃ\8f\vÃ\95 Ã\99\aà ¥\rã©
+îµ\10îµ\fð¸\vô¼\rô¼\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö½\fö½\fö½\fö½\fö½\fö½\fô½\vó¼
+õ¾\fö¿\rö¿\rõ¾\fó¼
+ó¼
+õ¾\fõÃ\rðÃ\bë¿\ 4ð¿\vñÃ\ eòÃ\ fôÃ\13øÃ\16æ\ 4¯\8c\ euY\ 6\1a\ 6\0\v\0\0\ 6\0\ 2\ 5\ 3\b\0\0\0\0\ 2\0\ 2\ 2\ 2\ 2\ 2\ 4\1c\1c\1errtÃÃÃîîîÿÿÿÿÿÿþþüÿÿýþþüùù÷þþüüüú÷÷õÿÿýúúøûûùúúøþþüþþüýýûþþüûûùýýûÿÿýýýûüüúÿÿýùù÷üüúüüúýýûÿÿýýýûüüúþþüÿÿýÿÿýûûùÿÿýÿÿýõõóüüúþþüýýûÿÿýþþüþþüýýûüüúÿÿýþþüýýûÿÿýýýûþþüüüúüüúýýûþþüþþüýýûûûùÿÿÿÿÿýýýûþÿúüÿøûýøþÿÿõöøº¹¿CBH
+\ 5\v\10\f\v\a\0\0\v\ 5\0\13\f\0D5
+\86a\10¦v
+»\84\rÃ\90\ eÃ\9a\fÃ\9c\ 6ã á©
+㬠ì³\fñ·\rô¸
+õ¹\vóº\vòº\rò½\ fö¾\ fö¿\rõ½\ eõ¾\fõ¾\fõ¾\fô½\vô½
+õ¾\fõ¾\vö½\fö½\vö½\fö½\vö½\fö½\fõ¾\fõ¾\fö¿\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\vö½\vù½\ fù½\rö½\vö½\f÷½\14ù¼\14÷¹\fø»
+ô» öÃ\ fñ½\11ñ¼\16ð¹\16ä´$Ã
¢:ÿÿ¿ÿüìÿ÷úþÿýøÿ÷üÿöýÿ÷ÿýÿÿüÿÿýüÿþúýÿüýÿþýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿþùþÿùýÿúýÿüÿüÿÿýÿúÿ÷øÿõýÿüÿýþÿýüþüýýþÿÿþä¯\86*Ã\8b
+Ì\vÓ
+Ã\9b à\bá§\bë²\rñ¸\ fñ¹\fó»\fô½\vô½\vô½\vô½\vô½\vô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö½\fö½\fõ¼\vö½\fö½\fö½\fö½\fõ¼\võ¾\fö¿\rö¿\rö¿\rõ¾\fõ¾\fõ¾\fó¿\vóÃ\fü\bïÃ\12è¹\võÃ\10øÃ\12ôÃ\ fÃÃ
\16Ã\9e\ f¯\86\1dO2\0\13\ 1\0\ 6\ 2\0\f\ e\v\v\f\a\15\16\11CCC\8d\8d\8fÃÃÃÿÿÿüüüÿÿÿúúúõõõýýûÿÿýÿÿýÿÿýÿÿýüüúýýûÿÿýþþüýýûþþüýýûÿÿýÿÿýþþüÿÿýÿÿýþþüþþüÿÿýÿÿý÷÷õÿÿýÿÿýüüúÿÿýýýû÷÷õûûùÿÿýüüúÿÿýüüúþþüüüúÿÿýýýûÿÿýûûù÷÷õýýûüüúùù÷ÿÿýýýûùù÷ÿÿýþþüûûùÿÿýûûùööôÿÿýþþü÷÷õÿÿýùùùøøöøøöÿÿûýÿúþÿû÷ùøÃÃÃ<;A
+ \ f\ 6\ 1\a\ 5\ 1\0\a\0\0\a\ 1\0\1c\16\0G9\f\88d\10§w\vº\83\fÃ\90\ eÃ\9b\rÃ\9d\aä
+âª\vå®\rô\ fñ·\ró· öº\fô»\fó»\ eó¾\10ô¿\rôÃ\fó¾\fó¿\vó¿\vó¿\vô½
+ô½\bö¿\fö¿
+ö¿\fö¿
+ö¿\fö¿
+÷¾\f÷¾\fõ¾\fõ¾\fô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eó¾\ eó¾\10ô¿\ fö¿
+÷¿\bö¾ õ¾\võ¾\vôÃ\fõÃ\vôÃ
+ö¿\ró»\f÷½\11ö¹\10ô·\ fë¶\18ò#¾¢>ÿüÃÿùûüüþûÿÿùþ÷ÿÿûÿûÿÿúÿÿýþÿþüýþÿûÿÿûþÿýþÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿþùþÿùþÿúþþþÿýÿþþþúÿ÷úÿ÷þþüÿýþÿýúÿûøýþÿÿÿá°\88)Ã\8d\fÃ\8e Ã\96
+Ã\9f\10Ã\9f\a⨠è¯
+ð¸\rî¶ õ½\ eõ¾\fõ¾\fõ¾\fö¿\rõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\f÷¾\rö½\fõ¼\võ¼\vö½\fö½\fö½\fö½\fõ¾\fô½\võ¾\fö¿\rö¿\rö¿\ró¼
+ñº\aò¾\bôÃ\ eð½\12ï¿\15ôÃ\13õÃ\11ñÃ
+èÃ
\vï\fÃ\99\18\97q\1eH,\0RF,{ym\98\99\93º¼¹à âÃÿÿÿýýýüüüÿÿÿýýÿþþÿýýýÿÿýùúõôôòüüúýýýýýûÿÿûûü÷ÿÿýþþüþþü÷÷õúúøýýûööôüüúûûù÷÷õúúøþþüýýûóóñÿÿýþþüôôòüüúÿÿýúúøÿÿýþþüôôòýýûÿÿýüüúþþüýýûôôòÿÿýûûùüüúÿÿýýýûúúøÿÿýýýû÷÷õÿÿýÿÿýööôüüúþþüýýûþþüþþüýýûýýûÿÿýùù÷ùù÷ÿÿýúûöñó𯱰124\ 1\0\ 6\ 3\ 2\b\ 1\0\ 4\ 3\ 1\ 2 \ 4\0\a\ 1\0'\1d\ 2VB\10\89c\10Â¥u ·\80 Ã\8e\vÃ\98
+Ã\9e\ 6à ¥\vä¬\rê°\ eîµ\10ïµ\vð·\böº\fö½\ eô¼\ fô¿\11ò½\vò¾
+ó¿\vó¿\vó¿\vó¿\vö¿\fö¿
+õ¾\võ¾ õ¾\võ¾ õ¾\võ¾ ö½\vö½\vö¿\rô½\vô½\võ¾\fö¿\rö¿\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eó¾\10ð½\12ñ¿\10ôÃ\ 6ö¿\ 3÷¼\b÷¼
+ô½\bó¿ î¾\ 4óÃ\vð¾ ÷¿\10ù½\11ú¼\13ô¶\rë°
+æ¶\14ä,ÿùÃÿúüÿÿÿüÿÿúýöþÿúÿüÿÿûÿÿüÿÿýþþþÿûÿÿûþÿûÿÿýÿþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþúÿþúÿýþþþÿýÿþûÿüûÿúýÿúÿúþÿýÿÿýûÿúôþÿúÿÿì\82 Ã\8b Ã\8f
+Ã\94\bÃ\9d\ eÃ\9d\aã§ è ó¹\ fôº\ eô»\fóº\vóº\võ¼\rö¾\ fö¾\11õ½\10ô¼\ fõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\vñ»\ 1ô½\bò¼\12î¹\15ë»\13ìÃ\11ÃÃ\vÃÃ\réÃ\vç\f½\8b\18\9ep"\93tHüëÃùúòùÿÿüÿûýÿúùûöþÿÿõôúÿþÿÿüÿÿýÿÿÿûüûöÿÿûÿþüøøúÿÿÿþÿúûþõþÿúþþüÿÿýÿÿýþþüýýûýýûþþüþþüþþüþþüþþüÿÿýþþüþþüýýûÿÿýþþüþþüÿÿýÿÿýþþüþþüÿÿýüüúÿÿýýýûúúøÿÿýÿÿýúúøÿÿýÿÿûüýøÿÿûüýøÿÿûüýøÿÿûþÿúüüúÿÿýÿÿýüüúýýûýýûþþüþþüýÿüþþüÿýþþüýêêè\9c\9c\9a%%%\0\0\ 2\ 2\0\ 3\ 2\ 1\ 6\ 1\ 2\a\ 2\ 3\a\ 3\ 1\ 2\f\ 4\0.\1e\0^A \8dc\ f§t\v¶\82\fÃ\93\ fÃ\98\bâ\bä\bæ¬\fç¬
+ì³\fó òº\vô»\fð¸ õ»\ fñ¹\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¾\fõ¾\võ¾\fõ¾\võ¾\fõ¾\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¾\võ¾\võ¾\võ¾\võ¾\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fò¾\10ï¿\13ÃÃ\ fò¿\ 4ö¿\ 2û½\bû¼\fú¼\11ö¼\10ôÃ\fì¼\ 4öÃ
\10ôÃ\ eð¸\rּ\12öµ\ fñ°\fé«
+á+ÿûÃÿûÿþÿûúÿöÿÿúýþøþþüþþþÿüþÿýþÿþüýÿüúÿþúÿþýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþúÿþüÿýþþþÿûÿþúÿüýÿüÿþüÿýÿÿùýÿ÷õÿÿöøùéÿÿð\85\1fÃ\88\ 6Ã\8e Ã\93
+Û\ fÜ
+æª\fê¯\vò¸\ eò¸\fð·\bô»\f÷¾\ f÷¾\ fó»\ eñ¹\fó»\10ö¾\11õ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\vó½\ 5ô½\bõ»\11ð¹\14ë»\13èÃ\10æÃ
+èÃ\bëÃ
+à ¶\fÃ\9a\10²}\17\87^\1e¼¤\80ÿüÃûÿýûÿúïôîþÿûúüûüûÿÿþÿüùÿýûþÿýøþûôÿÿûýüú÷÷ùúúúùüõõøïýþùýýûþþüþþüþþüþþüþþüýýûÿÿýÿÿýüüúüüúÿÿýÿÿýþþüþþüþþüüüúþþüÿÿýÿÿýÿÿýüüúþþüóóñýýûÿÿýÿÿýÿÿýúúø÷÷õþþüüýøùúõüýøúûöÿÿûûü÷þÿúþÿúþþüúúøüüúÿÿýþþüööôÿÿýþþüýÿúüüúüúýÃÃÃ\81\80~\1a\e\16\0\0\0\ 6\ 6\ 6\ 3\ 1\ 4\ 2\ 1\ 6\0\ 2\a\0\ 2\a\ 2\ 2\ 4\ e\ 6\04 \0bB\ 5\91d\ f§t\v¹\85\ fÃ\90
+Ó
+á\ 6à ¤\ 6åª\bé®\fî³\rõ
+ó»\fô¼\rò» ö¼\10ô»\fõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¾\võ¾\võ¾\võ¾\võ¾\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fó¾\ eï¿\13ñ¿\12ò¾\ 6ö¿\ 3ú¼\ 5ú»\vù»\12÷º\12ö¾\11ïº
+óÃ\rñ¾\rï¹\ fõº\14ó¶\10ð±\ eêª
+Ã\9f*ÿúÃÿþÿ÷úóüÿøüýøÿÿýýÿúýÿúÿýþÿüþÿþüýÿúúÿüúÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿþüþþþûÿüûÿüýÿúÿþüÿûÿÿúþÿþÿûøïÿÿêÿÿì\7f\18Ã\91\ fÃ\8e Ã\93
+Ú\ eÝ¢
+æª\fì±\rò¸\ eò¸\fö½\ eóº ñ¸ óº\vö¾\11÷¿\12ô¼\ fð¸\võ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ»\ fô¼\ fî¼\rè¾
+æÃ
+çÃ
\véÃ\váµ
+é\15Ã\9b"\9ds\1dmS\1aÃãÃ÷÷Ãøú÷þÿÿ÷ùöûýúÿÿÿÿÿÿÿÿÿõõóþýøÿÿúÿþúÿÿýÿÿÿýýýþÿûýÿùÿÿûóóñüüúÿÿýôôòûûùÿÿýôôòýýûþþüùù÷ùù÷ÿÿýÿÿýüüúýýûüüúùù÷þþüüüúýýûÿÿýüüúÿÿýÿÿýýýûøøöøøöüüúÿÿýÿÿýþþüþÿúûü÷üýøûü÷þÿúûü÷üüúûûùÿÿýõõóÿÿýøøöýýûÿÿýüüúÿÿýþÿýÿÿý¾¼¿QOR\10\ f\r\ 1\ 2\0\0\0\0\ 4\ 4\ 4\ 3\ 1\ 4\ 2\ 1\ 6\ 1\ 2\a\ 1\ 2\ 6\ 3\ 1\ 2\12 \09%\0eE\b\92e\10¦s
+»\87\11Ã\8e\bÃ\9e\rà\ 5â¦\båª\bé®\fî³\rî¶\vó»\fô¼\ró¼
+÷½\11õ¼\rõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\12õ½\10ö¾ ö¿\ 3ø¾\ 3ö¾\aõ¼\róº\11÷¼\16ò·\11ó¹\10ó¹\10óº\13ðº\12è³\ fæ°\ fá©
+Ã\9e(ÿÿÃûúøþÿýüþýÿþÿýûÿýÿþýÿüÿýþÿýþÿþüýÿüûÿþûÿþýÿþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúÿþúþþüýÿüýÿüþÿúþÿúþüýÿþÿþþÿÿÿöÿÿÃ\98\80@¼\8b"Ã\88\ 6Ã\8f
+Ã\94\bÃ\9b à\bå©\vò\ eôº\10õ¼\rò¹
+ô»
+ö½\ eõ¼\ró»\ eó»\ eô¼\ fõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô¼\rõ½\12ô¼\11÷»\vö½\vò¾
+ì¾ è¿\rèÃ\10êÃ\10ìÃ\13ÃÂ\fÃ\9f\12»\91#\7f_\12\90}Rÿúçÿüùÿþÿûûûÿÿýôõðÿÿûùúõÿÿúùøôþýùúù÷ÿýþÿÿÿûûûþÿýþÿûüüúÿÿýþþüüüúÿÿýÿÿýýýûüüúýýûþþüúúøøøöþþüþþüúúøýýûÿÿýúúøÿÿýûûùûûùþþüúúøÿÿýüüúüüúÿÿýÿÿýþþüþþüÿÿýþþüÿÿûþÿúþÿúýþùþÿúýþùýýûüüúûûùþþüúúøÿÿýÿÿýïïÃÿÿýýýûõ÷ô°°°97<\b\ 6 \ 1\0\0\ 6\ 6\ 4\ 4\ 4\ 4\ 1\ 1\ 1\ 3\ 1\ 4\ 2\ 2\ 4\ 1\ 2\ 6\ 1\ 2\ 4\ 3\ 2\0\16\r\0@*\ 1iJ
+\90c\ eÂ¥r ¹\85\ fÃ
\8f Ã\9d\fâ\aã§ æ« ê¯\rì±\vî¶\vòº\vô¼\rô½\vö¼\10õ¼\rõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ¾\fõ¾\fõ¾\fõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö½\fø¼\ eù¼\fø½ ö¾\aõ¿\ 5ó¿ ò½\ró»\10õº\14õ¸\12ô·\11ó¸\12óº\13ìµ\10â Ã¬\ fç\13â6ÿÿÃýþùøúùýþÿÿüÿþûÿýÿþýÿüþþÿÿýÿþþüþþþýþÿýþÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþþüþþüþÿúþÿúýýýüüþöúýÿÿóÿÿÃ\9f\7f4º\86\19Ã\8c
+Í
+Ò × Ý¢
+ä¨
+î³\ fò¸\ eóº\vò¹
+ô»
+õ¼\rö½\ eô¼\ró»\fõ½\ eö¾\ fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô¼\ fò¼\14óº\11ö» ø½\aö¾ ï½\bé¾\ fèÃ\11ðÃ\17òÃ\18äµ\aç\aâ\1c©\86 nS\10ø\97ÿýöþùÿôòõÿÿýùúôøûòþÿöýÿõúûöýýûù÷øþüýþþþ÷÷÷úüûúüûüüúýýûÿÿýÿÿýüüúþþüÿÿýüüúþþüÿÿýþþüüüúþþüýýûüüúÿÿýÿÿýýýûÿÿýýýûûûùüüúùù÷ýýûÿÿýýýûýýûüüúööôùù÷ÿÿýÿÿýýýûýýûüüúýýûþþüÿÿýÿÿýÿÿýÿÿýÿÿýÿÿýýýûÿÿýþþüÿÿÿôôô\92\94\93\1a\1a\1a\ 4\ 2\a\b\ 6\v\ 2\0\ 1\0\0\0\ 3\ 3\ 3\0\0\ 2\ 4\ 2\ 3\ 3\ 1\ 4\ 2\ 3\a\ 1\ 2\ 4\ 5\ 1\0\19\11\0F1\ 6mK\v\8eb\vÂ¥r µ\81\vÃ\90
+Ò Ý¥
+ã§ ç¬
+ë°\ eì±\vï·\fñ¹
+ô¼\rõ¾\fõ»\ fõ¼\rõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\ eõ½\10õ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö½\vú¼\ 5ú½\ 3ö¾\aó¿\vóÃ\rò¿\fô¼\rôº\ eö¹\10ó¹\ fî¶\v÷\r÷\ fè¯
+ã§\bç\14ÃÂ¥(´\9bAÿÿÃýÿúþÿÿüûÿÿüÿÿúÿýÿþûÿüýþÿþþÿþþüþþüþþÿþþÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿùþÿùÿþüÿþüþÿúþÿúÿÿýþÿÿúÿÿÿÿïÿ÷ÃÂ¥}&½\88\18Ã\84\ 5Ã\8d\ 6Ã\96\bÃ\9d á¦\få©
+î³\ fð¶\fð·\bö½\ eóº ñ¸ óº\vö¾\ føÃ\11ö¾\ fó»\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\10ò¼\14óº\11ö» ø¼\ 6÷¼\bò» ë»\ fç»\10è¿\ fëÃ\rîÃ
+ë½\10ã\ e½\95\1c\9bw\1fpU æÃÃÿüýýøüÿýþÿÿúþÿöýÿóûÿñÿÿúÿÿÿÿýÿÿþÿÿÿÿüüüýþÿýÿþóóñÿÿýúúøõõóÿÿýüüúôôòÿÿýþþüþþüÿÿýþþüüüúüüúþþüÿÿýùù÷ûûùýýûÿÿýÿÿýýýûýýûþþüüüúøøöûûùÿÿýÿÿýÿÿýüüúòòðüüúýýûûûùýýûûûùÿÿýþþüþþüòòðÿÿýùù÷ýýûúúøÿÿýÃÃÃ[[[\r\ f\ e\ 3\ 3\ 5\ 2\0\ 5\ 1\0\ 4\ 3\ 1\ 2\ 4\ 4\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 5\ 1\ 2\ 3\ 1\ 2\ 2\ 3\ 5\ 1\ 3\ 2\ 5\ 2\0\1f\14\0L5 oN \8c` Â¥r ´\80
+Æ
+Ã\98\aæ\vâ¦\bæ« Ã²\10ì±\vð¸\ròº\vô¼\r÷Ã\ eõ¼\rö½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\10õ½\10õ½\10õ½\10õ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¾ ú½\ 3ù½\ 3õ¾ ó¾\fò¿\ eò¾\10ó»\ eòº\ró¹\ fñ·\rç±\aæ°\b㬠â¦\bå£\ eá\1eÃ\9a9ÿÿÃÿýäüÿûüþýýýÿÿüÿÿýÿýÿúûÿúûÿÿýþÿþþüþÿúþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþýÿüýÿùþÿùÿýüÿýüÿþüþþüùûú÷ûúùÿÿÿÿêÿþ¼¯\7f\1dÃ\88\15Ã\83\ 4Ã\8c\ 5Ã\96\aÃ\9d ã¨\ eå©
+ï´\ eð¶\fò¹
+ñ¸ ô»
+÷¾\rö½\fò» ñº\bô½\vøÃ\ fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fó¾\ eñ½\11ò¼\11÷»\vּ ּ
+ô»\fî¼\ fèº\fäº\ 6ïÃ
\ eðÃ\vì¿\ eà\ 2è!¬\82\16tR\b\8bwVÿ÷Ãÿüýÿþÿÿÿýøûôûÿóüÿôýÿùúúúÿýÿÿýÿûûûþþüþÿÿþÿÿüüúüüúýýûÿÿýÿÿýýýûüüúþþüýýûùù÷ýýûÿÿýúúøüüúÿÿýüüú÷÷õüüúùù÷ÿÿýÿÿýûûùÿÿýÿÿýýýûþþüÿÿýÿÿýûûùúúøþþüÿÿýþþüÿÿýüüúýýûúúøÿÿýüüúüüúýýýüüü÷÷÷ÿÿÿñññ¢¢¢111\0\0\0\ 4\ 6\ 5\0\0\ 2\ 6\ 4 \f
+\ f\ 1\0\ 2\a\a\a\ 1\ 1\ 3\ 3\ 3\ 5\ 5\ 1\ 2\ 2\0\ 1\ 3\ 3\ 5\ 2\ 2\ 2\ 6\ 1\0"\16\0P8\bqO\b\8b]\ 5¢o\ 6³\7f Ã\8d\aÃ\99\bÃÂ¥
+ä¨
+æ« î³\11ì±\vñ¹\ eñ¹
+ó»\f÷Ã\ eô»\fõ¼\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\10õ½\10õ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\fõ¾\võ¾\võ¾\võ¾\võ¾\võ¾\vö½\vø½ ö¾ õ¾\fó¾\ eò¿\ eð¼\ eï¹\ eî¸\ eï¶\ fë²\räª\bâ¨\bâ\bÃ\9c\và \9c\17Ã\92)ÿü¿ÿþáýýñüÿýüþûÿÿýÿùýþúûýÿ÷ûÿ÷ûÿÿûÿÿþÿúÿþùÿþùÿþùþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýÿþýÿúþÿùÿýüÿýþÿýþþþþþÿÿûÿüüÿûÿüÃÂ¥\802³}\13½\82\fÃ\8a\vÃ\8b\ 2Ã\97\ 5Ã\9c\ 6á¦
+ä©\aðµ\ fó¹\ f÷¾\ fõ¼\rô»
+óº óº ô½\võ¾\fô½\vó¼
+õ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fó¾\fï½\ eñ¾\rõ¼\v÷º
+øº\r÷½\11ñ½\11ê½\få»\ 5ëà ÃÃ\bìÃ\ eäµ\11Ã\9e\fÃ
\95\19\9ew\1a[D\ e° \87ÿüôúñòýûüþÿýóùÃùÿóýÿùöø÷ÿþÿýûÿ÷÷÷þþüýÿüüþûÿÿýüüúûûùÿÿýÿÿýüüúùù÷ûûùþþü÷÷õüüúÿÿýûûùþþüÿÿýüüúþþüÿÿýùù÷þþüüüúôôòÿÿýüüúÿÿýþþüüüúýýûÿÿýÿÿýÿÿýýýûþþüÿÿýüüúþþüûûùÿÿýþþüÿÿýÿÿÿþþþÿÿÿÃÃÃJJJ\ e\ e\ e\0\0\0\ 4\ 4\ 4\0\ 2\ 1\ 6\ 6\b\ 2\0\ 5\ 1\0\ 4\b\ 6 \ 1\ 1\ 1\ 3\ 3\ 5\0\0\ 2\ 5\ 1\ 2\ 2\0\ 1\ 4\ 4\ 4\ 2\ 2\0\a\ 3\0#\17\0Q:\bsN\a\89[\ 3\9ek\ 2´\80
+¿\89\ 3Ã\9c\vä ç«\rç¬
+î³\11ë°
+ñ¹\ eð¸ òº\vö¿\rò¹
+ô»\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\ eõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\võ¾\võ¾\võ¾\võ¾\võ¾\võ¾\võ¾\võ¾\fö¾\ fö¾\11õ½\12õ½\12ò½\ fï»\rù\ eë¶\10ê²\13ç¬\10ᥠá¤\ eÃ\9b\rÃ\96\18Ã\94,³\83;ÿöÃÿýøýýûûÿþþÿýûúöÿüþÿþûþÿõûÿõúÿþûÿÿþÿúÿÿ÷ÿþõÿÿ÷ÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýÿþýÿúþÿúÿýþÿüÿþþÿýþÿþÿÿýÿùÿÿôÿùì\80)¿\83\11Ã\85\rÃ\89
+Ã\91\ 5Ã\98\ 4á¦\ eçÂ\ eò\10ò¸\ fñ·\vóº\võ¼\rô»\fõ¼\rö½\ eö¿\rõ¾\fõ¾\vö¿\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¿\rö¿\rõ¾\fõ¾\fô½\vñ¼
+óÃ\ eð¿\vò» öº\fø¼\10ö¼\10ð¼\10ë¼
+æ¾\ 6ìÃ
+èÃ\ 6é¿\vá²\ eè\11Ã
\91
+²\86\19\82f\1cVD\16Ãïÿúøÿýÿÿþÿùþøûÿ÷úü÷þÿýÿþÿÿýÿüüþÿÿýùûöþÿûÿÿýüüúÿÿýÿÿýÿÿýûûùýýûýýûûûùÿÿýÿÿýúúøÿÿýÿÿýôôòýýûþþüýýûÿÿýÿÿýüüúÿÿýÿÿýüüúúúøÿÿýóóñüüúÿÿýôôòþþüüüúþþüýýûÿÿýýýûÿÿÿûûûüüüûûûûûûÃÃÃttt\18\18\18\ 3\ 3\ 3\ 5\ 5\ 5\ 1\ 1\ 1\ 3\ 3\ 3\ 1\ 3\ 2\ 2\ 2\ 4\ 3\0\a\ 3\0\a\ 3\ 1\ 4\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 1\ 2\ 4\ 2\ 3\ 1\ 1\ 1\ 3\ 2\0\ 6\0\0*\1c\ 2V=\avR\b\8a\\ 4£o ³\7f Ã\8d\aÃ\9a ã\bç«\rê¯\rèÂ\vðµ\ fó»\10òº\vòº\vò» ô»\fø¿\10õ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¿\rö¿\rö¿\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\vô½
+ô½\bõ¾ ô½\bô½
+ô½
+ô½
+õ¾\võ¾\fö¾\ fõ½\12ð·\10ó¸\16ü¾\1dïµ\vó½\12è³\v÷\16á\ fç¥\19Ã\97\bÃ\94\vÃ\98\1cÃ\8c'Â¥|<ÿùÃÿú÷ÿüÿýþÿûÿþýÿüÿþúÿüþÿýúþÿõûÿõúÿþúÿÿþÿúÿÿ÷ÿþõÿÿõÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýþÿýÿúþÿúÿýþÿüÿþýÿýþÿûýúþþòÿüäÿÿèv\17Ã\83\r¾\80\aÃ\8a\bÃ\96\bÃ\9e\ 6æ«\ fë±\11ñ¶\12ö¼\13ôº\ eõ¼\rõ¼\rô»\fõ¼\rö½\ eõ¾\fô½\vô½
+õ¾\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¿\rõ¾\fõ¾\fô½\vñ¼
+ðÃ\fñÃ\fñ¼
+õ¼\r÷»\ fõ»\11ð¼\10ì½\râ¸\ 2ã»\ 3êÃ
+æ»
+æ·\11ÃÂ¥\fÃ\95 ´\83\f\92q\14hP\10bK,Ã¥ÃÃÿ÷üÿýÿúþýüÿûþÿûüþûþüÿÿþÿýýÿýýûøúõúýöüýøõõóÿÿýøøöüüúÿÿýûûùÿÿýÿÿýþþüÿÿýóóñÿÿýûûùüüúÿÿýúúøøøöúúøÿÿýÿÿýþþüûûùøøöÿÿýýýûúúøÿÿýýýûûûùÿÿýüüú÷÷õÿÿýýýûõõóþþþÿÿÿ÷÷÷ÃÃÃ~~~(((\0\0\0\ 6\ 6\ 6\ 5\ 5\ 5\0\0\0\0\0\0\0\0\0\ 1\ 3\ 2\ 2\ 2\ 4\ 3\0\a\ 3\0\a\ 3\ 1\ 4\ 2\ 2\ 2\ 2\ 1\ 6\ 2\ 2\ 4\ 3\ 1\ 4\ 4\ 2\ 3\ 2\ 1\0\ 3\ 2\0 \ 3\0. \ 5Y>\awQ\ 6\89[\ 3¢n\b²~\bÃ\8d Ã\99\bâ\aæª\fé®\fò\10ï´\ eî¶\vð¸ õ¾\f÷Ã\ eõ¼\rô»\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¿\fö¿\fõ¾\võ¾ õ¾ õ¾ õ¾ ö¿\f÷Ã\r÷Ã\ eö¿\rõ½\ eõ½\10îµ\ eûÃ\1dù»\1aî°\ fö¹\11î´\vïµ\13ã â£\16Ã\97\13Ã\95\15Ã\94\1eÃ\942¦\81:ÿüÃÿùðÿûÿþüÿýþÿýÿüþþüÿýþÿüÿÿüüþÿ÷ûÿ÷úÿþúÿÿþþüÿþùÿþ÷ÿÿ÷þÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýþÿþþüÿþúÿýþÿüÿþýÿýþÿÿÿûÿûèÿÿÃ\99{5¼\86\1cÃ\81\ 6Ã\89\rÃ\8e Ã\99\aá\aè®\ fë±\ fðµ\ fõ»\11ó¹\rò¹
+õ¼\rô»\fõ¼\rö½\ eõ¾\fô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vò½\vð¿\vñÃ\fó¾\fô½\võ¼\ró»\ eðº\10î»\10âµ\ 4õ\ 1è¾
+åº\väµ\ fÃÂ¥\vÃ\98
+¸\85\b¦\80\15\83d\12D)\0_J7âÃÃÿýÿûüþüÿýýÿüþÿýüúýýûþüüüþþüùüõýÿùÿÿûùù÷ÿÿýööôýýûÿÿýýýûüüúýýûúúøÿÿýùù÷ÿÿýüüúýýûüüúÿÿýÿÿýýýûþþüÿÿýÿÿýþþüýýûýýûþþüÿÿýüüúþþüÿÿýøøöÿÿýüüüûûûüüüýýý÷÷÷ÃÃÃ\9c\9c\9c,,,\b\b\b\0\0\0\ 5\ 5\a\ 5\ 5\a\0\0\ 2\ 2\ 2\ 4\f\f\ e\ 4\ 4\ 6\ 1\ 3\ 2\ 2\ 2\ 4\ 3\0\a\ 3\0\a\ 3\ 1\ 4\ 2\ 2\ 2\ 1\ 2\ 6\ 2\ 2\ 4\ 3\ 1\ 4\ 4\ 2\ 3\ 3\ 2\0\ 3\ 2\0\ e\b\03$\a]@\buO\ 4\88Z\ 2¢n\b²} Ã\8c\bÃ\99\bá å©\vç¬
+ë°\ eðµ\ fð¸\rñ¹
+ô½\võ¾\fõ¼\rö½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¿\rö¿\rõ¾\võ¾\võ¾\võ¾ ö¿
+ö¿
+õ¾\võ¾\võ¾\fõ¾\fõ½\ eô¼\ró»\ eó»\10ò¹\14ðµ\11ê°\ 6ôº\10î± ã£\ 3è§\rÃ\98\ 4Ã\97 Ã\96\14Ã\94!±\8a/\8fv6ÿþÃÿûéÿÿûýÿþýÿþþÿúþÿùþþþþýÿÿüÿÿüÿÿþüýÿúúÿþúÿÿþþþÿýüÿþúÿþùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýÿþþþüÿþúÿýüÿüÿþýÿýþÿûûóÿÿäÿþÃ\9ct\1f¶}
+Ã\82\0Ã\84\ 3Ã\97\ fÃ\9f äª\vð¶\16ð·\12ò¸\ fö¼\10ô»\fô»\fõ¼\rô»\fõ¼\rö½\ eö¾\ fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vò½\vñ¾\vò¿\fó¿\vô½
+õ¼\vó»\ eðº\10ù\ eåµ â´\ 6ã¶\ 5èº\fì\aè\ eÃ\99\fÃ\8c\f«~\v\88d\ 6kK\10-\16\0QC:ÃÃÃòòôðôóüþûüþûõóôþüýÿÿÿüþûøûôüÿúþÿúÿÿýþþüüüúÿÿýúúøÿÿý÷÷õÿÿýÿÿýýýûÿÿýùù÷ÿÿýÿÿýÿÿýûûùÿÿýüüú÷÷õûûùÿÿýþþüþþüýýûððîýýûýýûõõóÿÿýÿÿýûûùýýýÿÿÿÿÿÿÃÃﯯCCC \0\0\0\0\0\0\a\a\a\ 3\ 3\ 5\0\0\ 2\ 6\ 6\b\ 3\ 3\ 5\0\0\ 2\0\0\ 2\ 1\ 3\ 2\ 2\ 2\ 4\ 3\0\a\ 3\0\a\ 2\ 2\ 4\ 2\ 2\ 2\ 1\ 2\ 6\ 2\ 2\ 4\ 2\0\ 3\ 6\ 2\ 3\ 3\ 2\0\ 5\ 2\0\14\f\08)
+^A uN\ 1\89Z\ 2¢n\b²} Ã\8d Ã\98 à\bå©\væ« é®\fðµ\ fòº\ fòº\vó¼
+ó¼ õ¼\rø¿\10õ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¾\võ¾\võ¾ õ¾\võ¾\võ¾\võ¾\fô¼\ròº\vñ¹\ eòº\ fò¹\10ñ¸\11ò\10ô¹\17ñ¸\ fà §\0ä©\aæ§\fÃ\9b Ã\98\13Ã\95\19¾\8e"«\8b4ÿý¾ÿÿÃÿÿÃÿÿøüÿûûÿúýÿùÿÿ÷ÿþùýÿþýþÿÿûÿÿüÿÿýþýÿüúÿþûÿÿÿýÿÿüÿÿþüþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþýÿüþÿúÿþúÿþúÿýþýþÿýþÿÿÿöÿøÃ\9by1®}\17Ã\86\fÃ\93\ fÃ\91
+Ã\98 ä\fè®\ eó¹\17óº\13ò¸\ eõ»\ fóº\võ¼\rõ¼\rõ¼\rõ»\ f÷¾\ fö¾\ fõ½\ eõ¾\fö¿\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vò½\ró¾\ eô½\vó¼ õ¼\vö½\ eó»\10÷\rê¶\vä²\ 5á²\ 4åµ Ã©\ 6è\ fÃ\9d\10Ã\91\10®{\ 6\97k\bzV\fK1\0!\11\0-&\1e\90\8f\8dìÃïýÿþþÿýýüúþýûõõõþÿýþÿûèÃçúúøÿÿýþþüÿÿýþþüóóñþþüýýûÿÿýýýûúúøÿÿýööôþþüþþüúúøýýûÿÿýÿÿýýýûýýûûûùùù÷þþüÿÿýÿÿýûûùÿÿýÿÿýööôõõóÿÿýöööÃÃÃ\9a\9a\9a:::
+
+
+\0\0\0\0\0\0\a\a\a\ 1\ 1\ 3\ 6\ 6\b\ 5\ 5\a\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 4\ 4\ 6\ 1\ 3\ 2\ 2\ 2\ 2\ 3\ 1\ 6\ 3\ 1\ 6\ 2\ 2\ 4\ 1\ 3\ 2\ 1\ 2\ 6\ 2\ 2\ 4\ 2\0\ 3\ 5\ 1\ 2\ 2\ 1\0\ 5\ 2\0\1a\12\ 5;+
+`A\bsL\0\8b\\ 4£o ³~
+Ã\8d Ã\98 à\bä¨
+æ« ë°\ eï´\ eï·\fð¸ ô½\vö¿\fõ¼\rõ¼\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¾\fõ¾\fõ½\ eö¾\11õ½\12òº\ fñ¸\11ñ¸\11ð·\12î´\12ð´\15ä¨
+ä å°\16Ã\9c\ 3Ã\97\ 4Ã\98\12Ã
\8e\1aµ\86.¡\7f?ÿûÃþýÃúÿëúÿòýÿôøùñýÿ÷ýÿ÷ÿþ÷ÿþùýÿüûÿÿÿüÿÿýÿÿýÿþþüûÿþûÿþÿýÿÿüÿþþüþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúþÿúÿþúÿþúÿþùþþüýþÿýþÿÿÿóÿÿè\7f'¿\88\13Ã
\89\aÃ\84\0Ã\97\vÃ\9e\fà ¥ æ¬
+ð·\12ñ¸\ fñ·\róº\vñ¸ ô»\fõ¼\rô»\fõ»\ fö¼\10ö¾\ fõ½\ eõ¾\fö¿\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô¼\ fõ½\ eô½\vó¼
+õ¼\vö½\ eõ»\11ñ·\rê´ â®\ 3ã°\ 5ÃÂ\ 5ì\vã\vÃ\9e\11Ã\92\11»\84\ f¢q\v\84\\a`B\ 22 \0\13
+\0\v
+\ 6;<>\9b\9d\9cææäÿÿûþýùûûùùûúùþúüÿýþÿýüüúÿÿýüüúÿÿýüüúýýûÿÿýùù÷úúøýýûÿÿýþþüüüúþþüóóñþþüûûùûûùþþüþþüúúøüüúÿÿýõõóþþüýýûýýûúúøùù÷ââà ««©kkk$$$\10\10\10 \ 2\ 2\ 2\ 3\ 3\ 3\ 3\ 3\ 3\ 1\ 1\ 1\ 6\ 6\b\0\0\ 2\0\0\ 2\ 3\ 3\ 5\ 4\ 4\ 6\ 1\ 1\ 3\0\0\ 2\ 2\ 2\ 2\ 1\ 3\ 2\ 2\ 2\ 2\ 3\ 1\ 6\ 3\ 1\ 6\ 2\ 2\ 4\ 1\ 3\ 2\ 1\ 2\ 6\ 2\ 2\ 4\ 2\0\ 3\ 4\0\0\ 2\ 1\0\ 6\ 1\0\1f\16\a<,\v_@\atM\0\8d^\ 6Â¥q\vµ\80\fÃ\8e
+Ã\98 à\bä¨
+æ« é®\fï´\ eñ¹\ eñ¹
+ó¼
+ô½
+õ¼\v÷¾\ fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\võ¾\fõ¾\fõ¾\fö¿\rö¿\rõ¾\fõ¾\fõ½\ eñ¹\fó»\10óº\11ð·\10ô\ fë±\ fè®\ eäª\vâ¦
+Ý Õ
+Ã\97\vÃ\9a\15Ã\8f\18¼\8f*¢{,ÿöÃÿúÃÿÿÃüÿööÿõûÿúÿÿøÿþùýÿùþÿùÿýúÿýúýÿúûÿüþþþÿýþÿýþþþüûÿüýÿþÿüÿÿüÿþÿúýÿùþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúýÿùþÿùÿþùÿþùÿÿ÷ýÿúûÿÿýÿþþûêÿþì|\18Ã\86\aÃ\8d\bÃ\87\0Ã\9f\10ä\ fäª\vå¬\aô\rð¸\rôº\ eö½\ eóº\vö½\fô»\fô»\fôº\ eö¼\10õ½\ eô¼\rô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fôº\ eö¼\10ö½\ eô»\föº\fø¼\10÷»\ fõ¹\rïµ è°\ 5ã®\ 6è\ 6ê\ eá\vÃ\9c\rÃ\92\10·{ ²}\17\86[\0oR\ 6P>\f!\17\0\12\ f\b\ 1\ 1\ 3
+
+
+997\86\85\80ÃÃÃëëéòôóüÿÿöúùúüûøøöûûùúúøÿÿýÿÿýÿÿýýýûÿÿýÿÿýüüúýýûýýûþþüÿÿýüüúþþüûûùüüúþþüþþüýýûúúøööô÷÷õõõóÃÃÃÃÃÃ\9b\9b\99SSQ"" \v\v \b\b\b\0\0\0\ 2\ 2\ 2\0\0\0\ 5\ 5\ 5\ 1\ 1\ 1\0\0\ 2\ 5\ 5\a\0\0\ 2\ 5\ 5\a\ 6\ 6\b\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 4\ 4\ 4\ 1\ 3\ 2\ 2\ 2\ 2\ 3\ 1\ 6\ 3\ 1\ 6\ 2\ 2\ 4\ 1\ 3\ 2\ 1\ 2\ 6\ 2\ 2\ 4\ 3\ 1\ 4\ 4\0\0\ 2\ 1\0\a\ 2\0#\1a\v?,\f`@\awN\0\90a §s\rµ\80\fÃ\8d Ã\97\bà\bä¨
+æ« ç¬
+ï´\ eó»\ eó»\fò» ò»\bõ¼\vùÃ\ fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vô½\vó¼
+ó¼
+ó»\fô¼\rõ½\ eõ½\ eõ½\ eõ½\ eô¼\ró»\ eî¶\vï¶\rì³\ eçÂ\vâ¨\bá§\bâ\ 6Ã\9e\ 4Ã\98\ 2á\10Ã\99\vÃ\8f\10½\8b(¬\84<ÿùÃÿùâÿÿïÿÿôö÷ïÿÿúÿþüüøùÿüÿÿþÿþýÿÿýÿÿúÿÿûüýÿùúÿ÷ýÿ÷þÿùÿþúÿþúýÿúýÿþÿüÿÿüÿþÿ÷ýÿõþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúýÿùýÿùÿþúÿþùÿþùþÿúûÿÿþÿúÿÿè\8cv<´\84\16Ã\8b\ 4Ã\88\0Ã\90\ 4Ã\97\ 5ä\râ§\và ¤\ 5æ«\aì² ò¸\fô»\fð·\ 6ò¹\bô»\fóº\vôº\ eõ»\ fô¼\ fó»\ eó»\ eô¼\rö½\ eõ¾\fö½\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö½\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¾\fõ¾\võ¾\fõ¾\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vó¼
+õ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fóº\v÷¾\ f÷½\11ôº\ eó¹\r÷»\ fø¼\ e÷»\rôº\ eï·\fáª\ 5é\bä â\rÃ\98\aÃ\94\ e¾\81\f§n\ 5\98j
+\80]\v[E\v5'\ 4\15\r\0\ 6\ 2\ 1\0\0\0\10\10\10\v\v ''%RRR\81\83\82¬Â¯ÃÃ
ÃÃÃÃññïõõóúúøûûùññïÿÿýûûùôôòýýûóóñþþü÷÷õþþüúúøõõóõõóøøö÷÷õîîìääâÃÃÃÃÃé©§\81\81\7f__]//-\16\16\14\r\r\v\ 4\ 4\ 2\ 3\ 3\ 1\ 4\ 4\ 2\ 1\ 1\ 1\ 2\ 2\ 2\ 5\ 5\ 5\ 1\ 1\ 1\ 4\ 4\ 4\ 1\ 1\ 1\ 4\ 4\ 6\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\ 1\ 3\ 2\ 2\ 2\ 2\ 3\ 1\ 6\ 3\ 1\ 6\ 2\ 2\ 4\ 1\ 2\ 4\ 1\ 2\ 4\ 1\ 2\ 4\ 3\ 3\ 3\ 2\ 1\0\ 2\ 1\0
+\ 3\0)\1c\vA*\b`@\ 5xO\0\93b\ 6©t\fµ\81\vÃ\8c\vÃ\97\bÃ\9f\aã¨\fæ« ì±\rïµ\fî¶ ð¸ õ¾\f÷Ã\ eö½\fõ¼\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ¾\fõ¾\fö½\vö½\vö½\vö½\fõ¾\fõ¾\fõ¾\fô½\vô½\vó»\fô»\fó¹\ró¹\rò¹
+óº\vó»\ eô¼\ fò½\ fñ¼\ eð»\rï¹\ e÷\rëµ\rå®\rä\aÃ\9e\aÃ\9c
+Ã\9b\vÃ\98\ fÃ\97\1d»\8c\1a»\8b\1d¢u\18\9at3ÿ÷Ãÿüóÿüÿúþÿöüüþÿûÿþúÿûýÿüÿÿýÿûøÿþýÿÿüÿÿúÿÿüþýÿùûÿ÷ýÿõþÿ÷ÿþúÿþúýÿúþþüÿüÿÿýþþÿ÷ýÿõþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúúÿùúÿúþþüÿþüÿþüÿþüþýÿÿý÷ÿþÃ\93y/·\88\16Ã\8b\ 3Ã\91 Ã\8c\0Ã\99\ 5Ã\9d\ 5â¥\ eæ§\fê¬\rò\ eñ·\ eó¹\rò¹
+ñ¸\aö¾\ fó»\ eò¸\ eó¹\10÷½\14ø½\17õº\14ò¸\ fõ¹\rò¹
+öº
+ö½\f÷¾\fõ¼
+ó¼
+ó¼
+ö¾\ fõ½\ eö½\ eõ¼\võ¼\vö½\vù¾\f÷¾\fô½\vò½\vó¿\vó¿\vó¿\vó¿ õ¾\võ¾ ô½
+õ¾ õ¾\võ¾\võ¾\võ¾\vö½\vö½\võ¾\võ¾\võ¾\võ¾\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fó¼
+ô½\võ¾\fó¼
+ô½\vö¿\rõ¾\fò» ó¼
+ô¼\rõ½\ eö¾\ fõ¼\róº\vñ¸ ï·
+ì´ å¬\ 5ç\ 6æ â
+Ã\9a\aÃ\93\v¾\84\a±y\f\99g\b\82Y kK\ eI2\ 6"\12\0\a\0\0\ 1\0\0\ 2\ 3\b\0\ 1\ 6\0\ 3\b\ 2\ 3\ 5\v\v\v%%%312III^^^}}}\98\98\98«««ºººÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ÷··«««¢¢¢\9c\9c\9c\8f\8f\8f\8b\8b\8b\7f\7f\7fdddBBB$$$\12\12\12\v\v\v
+
+
+\a\a\a\ 4\ 4\ 4\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 2\ 4\ 2\ 2\ 4\ 3\ 1\ 6\ 3\ 1\ 6\ 3\ 1\ 6\ 2\ 2\ 4\ 1\ 2\ 4\0\ 3\ 2\0\ 3\ 2\ 2\ 4\ 1\ 1\ 1\0\15\ e\04# J2\ 6gC\a}R\ 3\98f\ 5Âw
+¸\81
+Ã\8c\vÃ\97\fÃ\9d\bæ å« é° Ã´\vò¸\fô»\fòº\vòº\vó»\fõ¾\fõ¾\fõ¾\võ¾\vô½
+ô½
+õ¾\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\10õ½\ eö½\vø½ ÷¼\bø½ ø¼\f÷¾\ f÷¾\ fö½\ eö½\ e÷¾\ fôº\ eó¶\ eóµ\12ּ\14õ·\fù½\11ñ·\ eî¸\10ð»\13ø\10ï»\ fè´\báÂ\ 2é\ 3Ã\9d\0Ã\9e\vÃ\96\ eÃ\94\12Ã\92\16»\88\1d\9e\813\8dz?ÿÿÃÿÿÃÿ÷ÃÿýïÿûøýûþýÿþýÿüþÿúþÿúÿþüÿýþÿýÿÿýÿþþÿþþþÿýþÿþüþÿúýÿúþÿúþÿúþþüþþüþþüþþüÿýþÿþüþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüúÿúûÿüÿýÿÿýþÿýúÿýúÿýþÿþòÿþÃ\9d\804´\85\13Ã\8c\aÃ\7f\0Ã\8b\ 6Ã\98 Ã\9f
+à £\rã¤\vã§ ç¬
+ì±\vï·\fò¸\fòº\rï·
+òº\ fõ»\12ôº\11ò·\11ñ¶\10ô·\11ö¹\11÷º\11ù½\11ù½\ fö½\fõ¼\vö½\fô½\vñº\bó»\fô¼\rö½\ eö½\ eù½\rù¾\fø½\võ¼
+õ¾\fó¾\fó¾\fó¿\vó¿\vó¿ õ¾\võ¾ õ¾\võ¾ õ¾\võ¾\võ¾\võ¾\vö½\v÷¾\fõ¾\võ¾\võ¾\võ¾\võ¾\fõ¾\fõ¾\fõ¾\fö¿\rô½\võ¾\fö¿\rô½\võ¾\f÷Ã\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¾\ fõ½\ eó»\fòº\vòº\rï·\fê±
+å«\vç
+Û¢\vÕ
+Ã\96\v½\83\ 5°x \9ei \8a[\vsM\ eT8\b0\e\0\11\ 5\0\ 6\ 2\ 1\ 4\ 4\f\0\ 1
+\0\ 3 \0\ 2\ 3\0\0\0\ 5\ 3\ 4\ 5\ 3\ 4\b\b\b\v\v\v\ e\ e\ e\11\11\11\14\14\14\1c\1c\1c'''///222---%%%\1c\1c\1c\15\15\15\10\10\10\ e\ e\ e\ e\ e\ e\ f\ f\ f\11\11\11\10\10\10\f\f\f\ 6\ 6\ 6\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 4\ 4\ 4\ 4\ 4\ 3\ 3\ 3\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 2\ 4\ 1\ 2\ 4\ 3\ 1\ 6\ 3\ 1\ 6\ 3\ 1\ 6\ 2\ 1\ 6\ 1\ 2\ 4\0\ 3\ 2\0\ 4\ 2\ 2\ 4\ 1\ 4\ 1\0\19\10\09&\ 6P4\ 5iE\a\7fU\ 3\9bg\ 4®y\a¸\81
+\8b\fÏ\ eÕ
+æ\väÂ
+é° ì´ ò¸\ eõ»\ fõ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\võ¾\vô½
+ô½
+ô½
+õ¾\fõ¾\fö¿\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ½\ eõ½\ eö½\vø½ ø½ ø½ ø¼\fö½\ eõ¼\ró»\ eôº\ eôº\10ò¸\ fñ´\ eñ³\12ö¶\16ó´\ fìÂ\ 6ú¿\19ö\11î¹\15éµ\11ë\ 4á¬\bé\bÃ\9f\ 6Ã\99
+Ã\96\12Ã\8c\1a»\8a#Â| \9au.ÿÿÃþûÃÿÿêÿþïÿüõÿþüÿÿÿüüþþþþþþüþÿúþÿúþþüþþüÿýÿÿýÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþþþÿÿûÿÿûþÿýóÿÿðÿþ÷ÿþìÿûà\829¶\87\eÃ\89\fÃ\8a\15Ã\8d\16Ã
\89\ 5Ã\99\fá
+ÃÂ¥\bá©
+æ¯\fë´\ f÷\ fï¶\ fï¶\ fð·\10ð·\10ò¸\ fó¹\10ó¹\ fó¹\rõ¹\rõ¹\rî±\bó¶\rò¸\fð·\bò¹
+ö¾\ f÷¿\10ô¼\rô¼\ fô¼\ fô¼\ fõ½\ eø¿\10ø¿\ e÷¾\fõ¼
+õ½\ eõ½\ eõ½\ eõ¾\fõ¾\fõ¾\võ¾\fõ¾\vö¿\rõ¾\vö½\fõ¼\võ¼\vö½\fö½\fö½\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¿\rô½\võ½\ eö¾\ fô¼\rõ½\ e÷¿\10õ½\ eö¿\rö¿\rõ½\ eõ½\ eö½\ eö½\ eõ»\ fôº\ eð¸\rë² é°\väª
+Ú¢\a× Ó
+Ã\91 ½\83\ 6°x ¡l\f\8d^\ evO\f\>
+=&\ 4\1a\r\0\ 4\0\0\ 4\ 3 \0\0\a\0\ 2 \ 4\ 5\a\ 2\ 2\ 2\ 2\0\ 3\ 1\0\ 2\ 5\ 5\ 5\ 4\ 4\ 4\ 3\ 3\ 3\ 2\ 2\ 2\ 1\ 1\ 1\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 3\ 3\ 4\ 4\ 4\ 3\ 3\ 3\ 2\ 2\ 2\0\0\0\0\0\0\ 2\ 2\ 2\ 3\ 3\ 3\ 4\ 4\ 4\ 4\ 4\ 4\ 2\ 2\ 2\ 1\ 1\ 1\0\0\0\0\0\0\0\0\0\0\0\0\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 1\ 2\ 2\ 2\ 3\ 3\ 3\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 3\ 2\ 1\ 2\ 4\ 3\ 1\ 6\ 3\ 1\ 6\ 3\ 1\ 6\ 2\ 1\ 6\ 1\ 2\ 4\0\ 3\ 4\0\ 3\ 4\ 2\ 4\ 1\ 6\ 3\0\1f\13\ 3?*\vT8\blI \81W\ 5\9ch\ 5¯z
+¸\81\fÃ\8a\vÃ\95\fÃ\9c ÃÂ¥
+ã¬\vç®\aë±\aïµ\vôº\ e÷¾\ f÷¾\ fõ¾\fô½\võ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½
+ô½
+ö½\vö½\vö½\vö½\vö½\võ¾\võ¾\fð»\vñ¹\ eñ¸\ fð·\10ï´\ eï´\ eóµ\12õ·\18ò´\15ò\ eé³\vä¯ à ª æ¯\14Ã\96\ 1Ã\96 Ã\92\10Ã\88\11º\84\1a\9dp\1d\85c#ÿýÃÿ÷ÃÿûÃÿÿêÿúêÿþóÿþûÿþÿúúüÿÿÿýÿþýÿüþÿúþÿùþÿúþþüÿýÿÿýÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþÿýÿÿûÿÿûÿÿýõÿþòÿþõÿþëÿþÃ\9e\81;«\7f\16¿\84\fÃ}\bÃ\84\rÃ\95\16Ã\99\ eÃ\99\ 4Ã\9d\ 2â\ 5ç\bâ«
+㬠äª\bã©\aó\11ì³\ eë²\rô\vï·\fñ¹\fð¸ ï¶\añ·\ eõ¸\10ó¹\10ñ·\rñ¹\fô¼\ fô¼\ fòº\rõ½\12ó»\10òº\ fòº\rõ»\ fö½\ eö½\fö½\fõ½\10õ½\10õ½\10õ½\ eõ½\ eõ¾\fõ½\ eõ¾\fõ¾\fõ¾\fö½\fõ¼\võ¼\võ¼\rõ¼\rõ¼\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\võ½\ eö¾\ fô¼\rõ½\ eö¾\ fô¼\rö¿\rõ¾\fõ½\ eõ½\ eö½\ eõ¼\rôº\ eó¹\ fñ¹\ eê±\bé¯\rå«\fá Ã\9d\vÃ\9b\ eÃ\91
+¼\82\a¯w\b¡l\f\8e^\fuM\ba@\vF.\b$\15\0\ 6\0\0\ 5\ 3\ 6\ 1\ 2\a\0\ 1\ 6\ 1\ 2\ 4\ 1\ 3\ 2\ 3\ 3\ 5\a\ 5\b\ 2\ 2\ 4\ 1\ 1\ 1\0\0\0\ 1\ 1\ 1\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 2\ 2\ 2\0\0\0\0\0\0\ 2\ 2\ 2\ 3\ 3\ 3\ 3\ 3\ 3\ 2\ 2\ 2\0\0\0\0\0\0\ 1\ 1\ 1\ 1\ 1\ 1\0\0\0\ 2\ 2\ 2\ 4\ 4\ 4\ 5\ 5\ 5\ 4\ 4\ 4\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 3\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 3\ 2\ 1\ 3\ 2\ 3\ 1\ 4\ 3\ 1\ 6\ 3\ 1\ 6\ 2\ 1\ 6\ 1\ 2\ 6\0\ 3\ 4\0\ 3\ 4\ 3\ 3\ 1\a\ 2\0!\16\ 4A-\fX9
+pJ \86Y\b\9ch\ 5¯z
+¸\7f\v¿\88
+Ã\92\fÃ\9a ã\väª
+ç¬\bê°\aïµ\vó¹\rö¼\10ö½\ eõ½\ eô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fô½\vô½\vô½\võ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¿\aõ¿\aö½\vö½\f÷¾\ fõ½\ eô½\vò½\vò½\rïº\fì¶\vì¶\ eô\ fì³\ eò\ eò\10è¬\ eç«\ fç«\fâ¨\bã©
+Ã\9e\ 6Ã\95\ 6Ã\9a\18Ã\91\1e¼\82\1e¬x$\81V\12ÿùÃÿýÃÿúêÿÿôÿÿñÿþïÿÿôÿýøýûüþýÿúùþÿÿÿýÿþýÿúþÿùþÿùþÿúþþüÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúþþüÿüÿÿûÿÿüÿÿüüÿýüÿþîÿþá\84B¦x\16Ã\94\eÃ\8a
+Ã\7f\0Ã\88\ 2Ã\94\bÃ\9b Ã\9c\ 6Ã\9f\aâ\bà ¥ ã¨\fç«\ fç¬\10ã©
+å«\vè®\ eæ¯
+ä¯\aä°\ 4æ²\ 4è´\bô\ fî³\ fî³\ fî³\rîµ\fî¶\vï·\fð¸\rñ»\11ï¹\ fî¸\ eî¸\ eñ¹\ eó»\ eó»\ eó»\ eõ»\ fõ»\11õ»\11õ»\ fõ»\ fõ¼\rõ»\ fõ¼\rõ¼\rö½\ eö½\ e÷¾\ f÷¾\ fö¼\10ö¼\10õ¼\rõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¿\rô½\võ½\ eö¾\ fô¼\rõ½\ eö¾\ fô¼\rö½\fö½\fö½\ e÷¾\ f÷½\11õ»\ fó¹\ fò¸\ eñ·\ eé®\bæ¬\fä©\rá\fÃ\9e\ eÃ\9a\ fÃ\8e\v»\81\ 6Âu\ 6\9fj
+\8c\\bvL\ 4eB\bM5 0\1f\ 3\v\ 1\0\ 6\ 2\ 1\ 4\ 3\b\ 1\ 2\ 6\0\ 2\ 1\0\ 1\0\0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 5\ 5\a\ 4\ 4\ 6\ 4\ 4\ 6\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\0\0\ 2\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 3\ 2\ 1\ 3\ 2\ 3\ 1\ 4\ 3\ 1\ 6\ 3\0\a\ 2\ 1\ 6\ 1\ 2\ 6\ 1\ 2\ 6\ 1\ 2\ 4\ 2\ 2\0\ 6\ 1\0"\15\ 4D-\vY; qL\b\87Z\a\9ch\ 5¯y\f¸\7f\f¾\87 Ã\90
+Ã\98 â\v⨠ç¬
+ë°
+ñ·\rôº\ eõ»\ fõ¼\rö½\ eø¿\10ö½\ eö½\ eö½\ eö½\ eö½\ eö½\ eõ¼\rõ¼\rö½\ eö½\ eö½\ eö½\ eö½\ eö½\ eö½\ eö½\vö¾\ 5ö¾\ 5õ¾\võ½\10õ¼\13ô»\14óº\11ï¹\ fî¸\rê¶\bè²\aæ°\ 6æ¯
+å®\ræ¬\ræ«\ fåª\ eà ¥ à £\fÃ\95\0Ã\9a\fÃ\91 Ã\8e\11½\85\18Â¥u }W\19ÿøÃÿüêÿýôÿþúÿü÷ÿþ÷þûòýúóÿüùÿýþÿþÿùøýÿþÿùúüýÿþýÿúþÿùþÿùþÿúþþüÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúýÿ÷ýÿúÿýÿÿûÿÿüÿÿýþÿýüÿýðÿüÃ\95x<°\83&®w\ 3Ã\82\ 4Ã\8d
+Ã\87\ 3Ã\8c\ 5Ã\8f\ 5Ã\91\ 5Ã\94\ 6Ã\98\ 6Ã\9b\aÃ\9e\bá\và £\fâ¥\fá¦\fâ§\vá©
+á¬\bâÂ\aâ¯\ 6ã®\ 6äª
+ä¨
+å©
+èÂ\vé°\vé° ë²\vô\rìµ\10ö\11î·\12ï¹\11ò¹\10ò¹\10òº\ fòº\ fó¹\ fó¹\ fó¹\ fó¹\ fó¹\ fôº\ eôº\ eôº\ eõ»\ fö½\ eö½\ e÷¾\ f÷½\11÷½\11ö¼\10ö½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fö¿\rõ¾\fö¾\ f÷¿\10õ½\ eõ½\ eö¾\ fô¼\rö½\fö½\f÷¾\ f÷¾\ f÷½\11ö¼\10ó¹\ fò¸\ fî³\ræÂ\b㩠æ\vÃ\9e\fÃ\9b\ fÃ\95\rÃ\8a µ}\ 4ªr\ 5\9cg\a\8aZ\ 5xN\ 4iE\aU:\v>+\v\18\f\0\ 5\0\0\ 1\0\ 2\0\ 1\ 5\ 1\ 3\ 2\ 4\ 6\ 5\ 3\ 3\ 5\ 3\ 2\a\0\0\ 2\ 2\ 2\ 4\ 4\ 4\ 6\ 5\ 5\a\ 5\ 5\a\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\0\0\ 2\0\0\ 2\0\0\ 2\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\ 5\ 5\a\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 1\ 3\ 2\ 1\ 3\ 2\ 3\ 1\ 4\ 3\ 1\ 6\ 3\0\a\ 3\0\a\ 2\ 1\ 6\ 1\ 2\ 6\ 1\ 2\ 4\ 3\ 2\0\b\ 1\0"\15\ 4E.\fY;\arK\b\87Z\a\9bg\ 4¯y\r·\80\f½\85
+È
+Ã\97\bà\fà ¥ ä¨ é®
+ïµ\fò¸\ eò¸\ eó¹\rõ¼\r÷¾\ fõ¼\rö½\ eö½\ eö½\ eö½\ eö½\ eö½\ eö½\ eö½\ eö½\ eö½\ eö½\ eö½\ eö½\ eö½\ eö½\fõ½\ 6ô¼\ 5ó»\fô»\12ôº\18ò¸\18ö\13ê³\ eé³\vç±\aæÂ\ 4ä«\ 4â¨\bá¦
+à ¥\rä\fÃÂ¥
+Ã\98\ 1Ã\9a\vÃ\92\vÃ\8c\10¼\80\10¶\80 \93h\1arQ\1cÿüÃÿøïÿÿÿúúÿüÿÿÿÿÿýüøÿþúÿÿýÿýþýüÿþýÿùøýþÿÿþÿÿýÿüýÿúþÿùþÿ÷þÿúþÿúÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿùúÿóúÿõûþÿýýÿþÿúþÿ÷þÿùÿþðÿþá\95zE\9fw\1fµ\81\14Ã\84\13Ã\80\vÃ\80\ 5Ã\86 Ã\87 Ã\8a\fÃ\8e\fÃ\93\rÃ\96\fÃ\98
+Ã\9a\vÃ\9a\bà  \vÃ\9e Ã\9e á
+à ¥\vâ§\vá§\bÃÂ¥\ 6ä§\ eå¨\ få©\rå©\væª\væ« å« å« çÂ\vé¯\rì²\10ó\11îµ\10îµ\10ï¶\ fð·\ eñ·\ eó¶\ eó¶\ eô·\ eô·\ eô·\ eó¹\ fó¹\rõ»\ fôº\ eôº\ eôº\ eô»\fõ¼\rö½\ eö½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¾\võ¾\võ¾\võ¾\vô½
+õ¾\fö¿\rô½\vô½\võ½\ eó»\fö½\fö½\vö½\fö½\ eö¼\10õ»\ fó¹\ fò¸\ fì³\fè®\fã©
+ݤ\fØ\ eÒ\ eË\v\88
+±y\ 2¦p\ 4\99d\ 4\89Y\ 4|P\ 5lI [=\vJ3\11'\17\b \0\0\ 3\0\0\0\0\ 2\0\ 1\0\ 1\ 3\ 2\0\ 1\ 3\0\0\ 4\ 4\ 4\ 6\ 4\ 4\ 6\ 3\ 3\ 5\ 1\ 1\ 3\0\0\ 2\0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 4\ 4\ 6\ 4\ 4\ 6\ 4\ 4\ 6\ 3\ 3\ 5\ 2\ 2\ 4\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 1\ 3\ 2\ 1\ 3\ 2\ 3\ 1\ 4\ 3\ 1\ 6\ 3\0\a\ 3\0\a\ 2\ 1\ 6\ 2\ 1\ 6\ 1\ 2\ 4\ 3\ 2\0 \ 2\0&\16\ 6G0\ eZ<\bqJ\ 5\85X\ 3\99d\ 4Âw\vµ}\fº\82 Ã
\8c Ã\94\aÃ\9d\vá\aá¥\aåª\bð
+òµ\rñ·\rò¸\fóº\vô»\fõ¼\rõ¼\rö½\ eö½\ eö½\ eö½\ eö½\fö½\fõ¼\võ¼\võ¼\võ¼\vô»\fô»\fô»\fóº óº\bò¹\bñ¸\ fñ·\15î¶\17ì´\17ê°\11çÂ\ eå«\väª
+ã§\bà ¤\bá\bÃ\9f Ã\9c Ã\9c\bÃ\96\ 4Ã\94\ 5Ã\8e Ã\86\ e¹\82\1e\9ak\1d{X"ÿüÃÿþìú÷îýþùòöõþÿýüÿýúÿûþÿýüüüûûûýýÿýüÿÿþÿþÿÿ÷øúûýüýÿúýÿùþÿ÷þÿ÷þÿúþÿúÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúúÿõøÿ÷ûÿÿûþÿýÿùýÿõþÿ÷ÿÿóÿûêÿüà{7Â¥v\1c®w\12µ{\r»\80\f¼\84\vº\83\f»\85\v¼\85\aÃ\86\bÃ\88\ 6Ã\8b\ 6Ã\8f Ã\92
+Ã\91\aÃ\95\vÃ\98\ eÃ\99\fÃ\98 Ã\98\ 6Ã\9b Ã\9f\vÃ\98\aÃ\9c Ã\9f Ã\9e\aà\aâ¦
+â§\vÃÂ¥\ 6á¦
+ã©
+åª\ eå«\få«\fçÂ\rë±\ fîµ\10ðµ\ fòµ\ fòµ\ fó¶\ eó¶\ eô·\ fò¸\ fò¸\ eôº\10ó¹\rñ·\vð¶
+ñ·\vóº\võ¼\rö½\ eõ¾\fõ¾\fõ¾\fõ¾\fõ¾\fõ¾\võ¾\võ¾\vô½
+ò»\bô½\võ¾\fó¼
+ó¼
+ô¼\rò» ö½\võ¼
+ô»
+óº ó¹\ró¹\rò¸\ eò¸\ få¬\aå«\vÃÂ¥\bÃ\9e Ã\98 Ã\91 Ã\87\ 5½\83\ 6Âv\ 2Â¥o\ 5\98c\ 5\88X\ 3~S\ 5nH\a[= N6\12)\18\ 6 \0\0\a\ 1\ 1\b\ 6 \ 1\ 1\ 1\ 2\ 4\ 3\ 2\ 3\ 5\ 1\ 2\ 6\0\0\ 2\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 2\ 1\ 3\ 2\ 1\ 3\ 2\ 2\ 2\ 4\ 3\ 1\ 6\ 3\0\a\ 3\0\a\ 2\ 1\ 6\ 2\ 1\ 6\ 1\ 2\ 4\ 3\ 2\0
+\ 3\0(\18\bH1\ fZ<\bpI\ 4\84W\ 4\96a\ 1ªt
+²z\v¸\80 Ã\89\bÃ\91 Ã\9a
+Ã\9d\aà ¤\bã§\bì®\rñ´\ eó¹\10ôº\10ó¹\rò¹
+ô»\fõ¼\rõ¼\rö½\ eö½\ eö½\ eö½\fö½\fóº óº óº ò¹\bò¹
+ñ¸ ñ¸ ñ¸ ñ¸ ñ·\rï¶\11ïµ\15ì´\17ë°\14çÂ\ eä¨
+ᥠã¤\vá¡\fÃ\9d\rÃ\9b\fÃ\98 Ã\97\bÃ\95 Ã\8f\bÃ\8c\ e¹\85\15\9fq\13~X\11ÿûÃÿýãÿûðþýûþÿÿüÿýûÿúúÿöûÿùûÿýùýüþÿÿûûýÿÿÿþþÿûüþùúüþÿÿþÿýýÿùýÿùþÿ÷þÿùþÿúþþüÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüúÿþúÿþûÿÿýþÿûÿüûÿùýÿúÿþùÿýøÿøêÿúÃ\9bu7©}$Â¥y\ e«~ ª|\ 2¯{\ 3´~\ 4º\82\aº\80\ 3¶z\0Ã\83\ 6Ã\86 Ã\81\ 5Ã\86\fÃ\83\bÃ\8b\ fÃ\8a\rÃ\92\10Ã\8e
+Ê Ñ\ eÕ\ eÙ\10Ø\fÓ\ 4Ý\f×\ 4Ô\ 1Ü\bÚ\aÞ¡
+á¤\ eá¤\rà ¥\vá¦
+ã¨\fäª\væ« åª\ 6åª\ 6è ì±\rï´\ eî³\ró
+ò¸\ fôº\10ô¼\11ó»\ eñ¹\fð¸\vòº\võ½\ eð¸ òº\vö¾\ fõ¾\fð¹\aò» õ¾\vð¹\ 6ô½
+ô½
+ö¿\fô½
+ô½\v÷Ã\ eõ¾\fõ¾\fö½\võ¼
+úÃ\10óº ñ·\vð¶\fôº\11ò\få« äª\vã\vÃ\99\aÃ\93\bÃ\8d\b¾\84\ 6´|\ 3ªu\ 5\9fj\ 4\94a\ 5\8b[\a\7fT\ 6pK\a_A\vP8\12*\19\a \0\0\ 6\0\0\ 3\ 1\ 4\ 1\ 1\ 1\0\ 2\ 1\ 5\ 6\b\0\ 1\ 5\ 2\ 2\ 4\a\a \0\0\ 2\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\ 5\ 5\a\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\b\b
+\ 1\ 1\ 3\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\ 2\ 2\ 2\ 1\ 3\ 2\ 1\ 3\ 2\ 2\ 2\ 4\ 3\ 1\ 6\ 5\0\ 6\ 3\ 1\ 6\ 2\ 1\ 6\ 2\ 1\ 6\ 3\ 3\ 5\ 2\ 1\0\a\0\0*\1a
+E.\ eY; nG\ 4\83V\ 3\94a\ 5£l\a®u
+µ| ¿\85\bÃ\8e Ã\95 Ã\9c
+à £\fâ¦
+æª\vî³\11ò·\11ïµ\fð¶\f÷½\11ï¶\aóº\vò¹
+÷¾\ fò¹\bö½\fò¹\bô»
+ø¿\ eö½\fô»\fô»\fôº\ eôº\ eó¹\rò¸\fò¸\ fî³\rì²\12ë±\12æ¬\rã© ã¨\ 6â¤\ 5ã¢
+Ã\9a\bÃ\95\fÃ\95\10Ã\95\12Ã\8c\ 5Ã\8d\ 1Ã\92\rÃ\8a\16¯\7f\e\9cy'gO\11ÿûÃÿýæÿýóÿþûÿýúÿþùÿÿ÷þÿõûÿõúÿ÷úÿúúÿüýÿüþþþýÿþýÿþýÿþýÿüýÿúýÿùýÿùýÿ÷þÿùþÿùþÿúþþüÿýþÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþýþÿýþÿþþÿþþþýÿùýÿ÷ýÿùÿþúÿúüÿûúÿöæÿ÷Ã\8do/\91r\1f\91p\13\9aw\13£v\11©x\11¨u
+¦r\ 5³~\ e·\7f\ e«r\0¶} ¶{\a¼\81\r´w\ 4Ã\89\13»\80\b¾\83\vÃ\8e\13Ã\88\fÃ\84\ 5Ã
\89\ 5Ã\91\fÃ\94\rÃ\89\0Ã\9d\ fÃ\93\ 5Ã\97\bÃ\94\ 5Ã\97\bÃ\9a\vÃ\9c\rÃ\9d\vÃ\9e
+à\fä\fá¦
+äª\vè¬\ eæ¬\rä¨ â¨\båª\bè®\fé®
+ê±
+ô\rð·\ eô»\12ô¼\11òº\ fð¸\vô¼\ fö¾\11÷¿\12ö¾\ fô¼\r÷Ã\ e÷Ã\ eô½
+õ¾\fö¿\f÷Ã\ eô½\vò» ó¼
+ò» ò» ñ¸\að·\ 6õ¼\vóº\v÷½\11ó¹\ fñ¶\10çÂ\vá§\aÃÂ¥
+Ã\9e Ã\95\ 6Ã\8f\bÃ\87 ¸~\ 3¯v\ 3¤n\ 4\9cg\a\93`\a\86W\ 5yO\ 3lI\ 5\>\bJ4\r,\e
+\0\0\ 6\0\0\ 5\ 3\ 6\ 2\ 2\ 2\0\ 2\ 1\ 4\ 5\a\0\0\ 4\ 1\ 1\ 3\0\0\ 2\ 3\ 3\ 5\0\0\ 2\ 4\ 4\ 6\a\a \0\0\ 2\ 1\ 1\ 3\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 3\ 3\ 5\ 1\ 1\ 3\ 2\ 2\ 4\0\0\ 2\ 1\ 1\ 3\0\0\ 2\0\0\ 2\b\b
+\ 2\ 2\ 4\ 1\ 3\ 2\ 1\ 3\ 2\ 2\ 1\ 6\ 3\ 1\ 6\ 5\0\ 6\ 3\ 1\ 6\ 3\ 1\ 6\ 2\ 2\ 4\ 3\ 3\ 5\ 3\ 2\0\b\ 1\0(\e
+B+\vU6\agA\0}P\0\91^\ 3¡k\aÂw\r´|\r»\83
+Å\vÍ\vÖ\rÚ
+á¤\rä¨\fæª\vì±\ fñ¶\10ñ·\ eò¸\ eò¸\fô»\fò¹
+ö½\ eò¹
+ö½\fóº ô»
+ð·\ 6ð·\bð·\bò¸\fôº\ eõ»\11ó¹\ fò¸\ fðµ\ fì±\ fé¯\ fçÂ\rã© à ¦\aà ¡\ 4Ã\9d\ 4Ã\99\ 5Ã\93\aÃ\90\vÃ\92\13Ã\8c\10Ã\8f\13Ã
\8d\12´\82\11¨z"\82_\eÿùÃ
ÿüÃÿÿìýÿ÷ûýúúüùÿþúÿþ÷ÿþ÷ÿþõþÿ÷ûÿùûÿúûÿúýÿüþþüýÿüýÿúýÿúýÿúýÿùýÿùýÿ÷ýÿùþÿùþÿúþþüþþþÿýÿÿýþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýþÿüÿÿüÿÿüÿÿýüÿÿóÿÿðþÿóþÿùþüýÿýýÿúñÿüìÿýãÿþÃÿúÃy`*\84`&\8ee#\8ed\1a\95l\1a\96k\ f\9dq\ e\9fs\b¢r\ 3¤r\0°}\b«v\ 2¯x\ 4±y\b´{
+·~\rµy\aÃ\88\12¾\82
+Ã\83\bÃ\86 Ã\8b Ã\87\ 3Ã\8b\ 6Ã\8b\ 6Ã\8b\ 6Ã\8b\ 6Ã\8e Ã\92
+Î Î\aÑ
+Õ\fÕ\a×\aÜ
+â\vã\vÃÂ¥\rã¨\ eã«\10ã¨\fã©
+å«\vè®\fì³\ eï¶\ fð·\10ð·\10ò¸\ fôº\11ó¹\ fñ·\ró¹\ fõ»\ fóº\vò¹\bô»\fõ¼\võ¼\rô»\fò¹
+óº\vô»\fô»\fö½\ eô»\fò¸\fó ñ·\ eò\fë±\ fé¯\ fã Ã\9f\bÃ\98\bÃ\90\bÃ\8a ¹\81\ 6°w\ 3©q\ 4\9dg\ 3\97d\b\91_
+\84U\avL\ 2jG\ 5[=\aG1
+,\e
+\0\0\ 6\0\ 2\ 5\ 3\ 6\ 4\ 4\ 4\0\ 2\ 1\ 4\ 4\ 6\ 1\ 1\ 3\ 4\ 4\ 6\0\0\ 2\b\b
+\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\v\v\r\ 2\ 2\ 4\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 1\ 1\ 3\ 2\ 2\ 4\b\b
+\0\0\ 2\ 3\ 3\ 5\ 4\ 4\ 6
+
+\f\0\0\ 2\ 3\ 3\ 5\ 1\ 2\ 4\ 1\ 2\ 4\ 2\ 1\ 6\ 3\0\a\ 5\0\ 6\ 3\ 1\ 6\ 3\ 1\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 3\ 2\0 \ 2\0)\1c\fB+\fS4\ 6dA\ 1zO\ 1\8aX\ 1\9cf\ 6©r\r°w\fµ|\b½\83\ 6Ã\8d\bÃ\96\fÃ\9a\và\fâ â¦\bè¬\rò\10î³\rî´\vò¸\ eó¹\rñ·\vôº\ eò¸\fõ¼\róº\vô»\fñ¸ ñ·\vñ·\vò¸\ eó¹\10ñ·\ eî³\rì±\vé®
+åª\bãª\ 5ã©\aá§\bä
+ß\fÙ
+Ã\99\rÃ\8f\ 6Ã\8b\ 1Ã\86\ 1Ã\88\rµ\81\13Â¥u\13 y*nR ÿýÃÿùÃÿÿêÿÿòýÿ÷ùÿùùÿýúÿüýÿüÿýüÿüüÿüüÿýüþÿúýÿúþÿúþÿúþÿúþÿùþÿùþÿùþÿ÷þÿ÷þÿùþÿùþÿúþþüþþüþþþþþÿþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýþÿüÿÿûÿÿûÿÿüüÿþõÿÿóÿÿõþÿùÿÿÿýýýþú÷ÿþúÿüöÿöÃÿþïÿýèÿüÃÿùÃÿýÃ{`+\85i*~`\17\90o\1e\8ek\11\93l\r\97m \98k\ 4¨w\ e©t
+¬v
+¬t\a¹\7f\11®t\b²x
+µy ¾\83\ fµz\ 2Ã\86\v¾\82\ 6Ã\87 Ã\84\b¾\83\ 5¿\83\aÃ\88
+Ã\b\87\ 5Ä\aÉ Í Í\aÎ\bÐ
+Ã\9a\vÃ\9d\fÃ\9d\rÃ\9d\vá\fã\fà ¥\rà ¥\và ¥ ã©
+çÂ\rë±\11ï´\12ô¹\15ò·\13ðµ\ fó¸\12ôº\11ò¸\ eõ»\ fò¸\fôº\ eò¸\fò¸\fò¸\fó¹\rõ»\11ó¹\ fð¶
+ôº\ eö¼\13ñ¶\10ó¸\14æ¬
+ã©
+âª\ fàÃ\9b
+Ì\bÆ
+½\85
+²{\ 6ªr\ 3£l\ 5\99b\ 5\93_ \8b[ \81S\ 6rJ\ 2fD\ 4W<\aE1\f(\18\b\b\0\0\ 3\0\ 2\ 2\ 1\ 6\ 3\ 3\ 5\0\ 1\0\ 3\ 3\ 5\ 2\ 2\ 4\ 3\ 3\ 5\ 5\ 5\a\ 1\ 1\ 3\0\0\ 2\ 2\ 2\ 4\ 4\ 4\ 6\0\0\ 2\0\0\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 1\ 1\ 3\0\0\ 2\ 3\ 3\ 5\ 3\ 3\ 5\0\0\ 2\0\0\ 2\ 6\ 6\b\ 1\ 1\ 3\0\ 1\ 3\ 1\ 2\ 6\ 3\0\a\ 3\0\a\ 5\0\ 6\ 3\ 1\ 4\ 3\ 1\ 2\ 3\ 3\ 3\ 1\ 1\ 1\ 3\ 2\0
+\ 3\0(\1c\f@+\ eP3\ab@\ 3xN\ 4\88V\ 1\9ae\a¦p\ e«t\r²z ¹\81\bÃ\8a Ã\92\fÃ\9a\ eÃ\9b Ã\9e\bâ¥\fç«\ræª\vç¬\bî³\ró
+ïµ\vð¶\fñ·\rñ·\rò¸\ eó¹\rôº\ eôº\10ó¹\ fò¸\ fñ¶\10ï´\10ì±\rç¬
+ä©\aéÂ\ eä¨ á§\ 5ä\ 4à\ 6Ã\9c
+Ã\93\rÃ\8a\bÃ
\84\ 2Ã\84\ 1¼\82\0¿\8a
+¦x\b¤{\1f\92k&ÿ÷Ãÿýæÿùîÿþôÿþóÿÿöûÿùòüô÷ÿüøÿþûÿÿÿüÿÿüÿÿûþÿüþÿýüÿþüþÿúþÿúþÿúþÿùþÿùþÿ÷þÿùþÿùþÿùþÿúþþüþþüþþþþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýþÿüþÿüüÿýüÿüÿÿüÿÿýÿþþþûûùþÿýûýüýÿüýþùÿÿûÿþûûøóüúîÿüÃÿýêÿþèÿÿäÿÿÃÿûÃzb2\83f.\83a!\8eg\1a\8eb\v\96f\ 4 m\ 2¢m\0¤o\0±z\13£n\bÂv\ f±{\ f«s\ 4»\83\12±x\ 5¶} º~\f·|\b·{ º\7f\vº\7f ¹~\ 6º\7f\a¾\84 ¿\85\aÃ\88\aÃ\8b
+Å\vÅ Æ\bÊ
+Í\vÍ Ñ\v×\rÙ\rÚ¡\fÚ¡
+ä\fá¦\fç«\ fñ\13î²\14ì°\11ðµ\13ñ¶\12ñ¶\10÷¼\16ôº\11ö¼\13ð¶\fò¸\ eó¹\10ò¸\ fôº\11î´\vó
+ñ·\ eó¸\14î³\11ïµ\15ä©\rà ¥\rà §\12Ã\9a
+Î
+Ã\8e ¿\88
+¸\7f\v®v ¥l\ 5\9dg\ 5\95_\a\8cY\ 6\83T\ 6{O\ 6mH\ 2^@\ 2Q:\bD1\10$\16 \ 1\0\ 4\0\ 5\ 1\0\ 6\ 3\ 3\ 5\0\0\0\ 4\ 2\ 3\ 4\ 2\ 3\0\0\0\ 4\ 4\ 4\ 2\ 2\ 2\ 2\ 2\ 2\ 5\ 5\ 5\0\0\0\ 6\ 6\ 6\ 6\ 6\ 6\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 6\ 6\b\ 2\ 2\ 4\ 3\ 3\ 5\ 4\ 4\ 6\0\0\ 2\ 6\ 6\b\0\0\ 2\0\0\ 2\ 1\ 2\ 6\ 1\ 2\a\ 3\0\a\ 3\0\a\ 5\0\ 6\ 3\ 1\ 4\ 3\ 1\ 2\ 2\ 2\0\ 1\ 3\0\ 3\ 4\0 \ 4\0(\1c\ e<(\rK0\ 5]:\0qI\ 3\84T\ 2\95_\ 5 i\f¦o
+®v µ|\b¾\84\aÃ
\8a\bÃ\96\ eÃ\99
+Ø
+ä\fã¨\fá§\bäª\bì³\ eç® ê±
+îµ\ eîµ\fîµ\fô\vï¶\rñ¸\ fð·\10îµ\ eì³\ eê°\ eé¯\ fçÂ\ eä©\rá¦
+á¤\vÃ\9f\ 6Ã\9e\ 2Ã\9c\ 4Ã\99 Ã\95\10Ã\8d\12Ã\83\ fÃ\86\ f¸}\ 5®|\ 1Â¥z ¡~"\80c\1fÿùÃÿûêÿùóÿüýýüøþÿúõüõøÿüùÿÿûÿÿûÿÿýþÿÿýÿÿýÿÿýþÿýþÿüþÿýþÿþüþÿúþÿúþÿúþÿúþÿùþÿúþÿúþÿúþþüþþüþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþúÿþúÿþùÿþüÿüÿÿüÿÿüÿÿýÿÿÿûôöñüÿýûÿÿ÷ûúþÿÿúúüÿÿÿüÿÿüÿýþÿûþÿúýýõÿþóÿ÷êÿýêÿøÃÿýÃÿüÃ~^!\83_\15\8ad\ f\8cd\ 5\9bo\ e\95d\a m\11Â¥p\12¡m
+°{\15£n\ 4¨r\ 6¨r\ 6°w\f®u
+Ât °x\v²x
+±y\b³z ¶}
+³z\ 6´|\ 5µ}\ 6·\7f\b¼\81 Ã\86\vÃ\88\vÃ\89\vÃ\8d\rÃ\8e Ã\8f
+Ï
+Ã\99\rÃ\9f\10á\11á\ fÃ\9c\ 6â\vâ¥\fä¨\få©\rç«\fê®\ fï´\12ñ¶\12ô¹\13î³\rò·\11ô¹\13ò·\13ö»\17ï´\10ñ¶\12ò\ eê®\ fã§ åª\ eä\fâ\rÃ\9d\rÃ\96 Ã\92\vÃ\8a\f»\83\f³{\f¨q
+\9fg\ 6\98a\ 6\93\ \87T\ 5~N\ 4vK\ 6jD\ 3Z=\ 1L6\ 5@0\ f \14\b\b\ 2\ 2\ 5\ 2 \ 1\0\ 6\ 3\ 3\ 5\ 1\ 1\ 1\ 3\ 1\ 2\ 3\ 1\ 2\a\a\a\ 1\ 1\ 1\ 3\ 3\ 3\0\0\0\ 3\ 3\ 3\ 2\ 2\ 2\0\0\0\0\0\0\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\0\0\ 2\ 3\ 3\ 5\0\0\ 2\a\a \0\0\ 2\ 2\ 2\ 4\ 3\ 3\ 5\ 5\ 4 \ 1\ 2\a\ 1\ 2\a\ 3\0\a\ 3\0\a\ 5\0\ 6\ 3\ 1\ 2\ 3\ 2\0\ 2\ 2\0\ 1\ 3\0\ 2\ 3\0\b\ 3\0%\1c\r9(\fH/\ 6Z9\ 3pH\ 3\81P\ 1\8f\\ 3\9ae ¡k\a©s ±z\ 6¸\80\a¾\85\ 4Ã\8b\ 6Ã\95 Ã\9a\vÃ\9d\aâ
+á¦
+äª
+è®\få« ç® Ã´\ fë²\rì³\ eè¯
+ë²\rë²\rì²\10ê°\ eçÂ\rå«\fä©\rã¨\ eá¦\ eä\fÃ\9b\bÃ\98\ 6Ã\96\ 6Ã\94\aÃ\90\vÃ\8f\11Ã\87\12»}\f¯u\a¦q\a¢u\10\8ch\12qX\18ÿÿÃÿúèÿýúÿýÿÿûÿúúúûÿüüÿýûÿþ÷ûúýþÿþþÿþþÿþþþþþþþþþÿýþÿýþÿýþÿýþþþüþþüþþüþþüþÿúþþüþþüþþüþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúûÿùûÿ÷ûÿõýÿùýþÿþýÿÿýÿÿýþýþøþÿøøý÷üÿÿûüþýþÿþüýüûùÿÿûþýùúùõþÿúÿÿûýüøÿÿûÿþùÿþøÿúïÿöæÿýæÿþÃÿûÃva2tZ\1f\90f\1a\94d\ f\93a
+\98g\v\96d\ 5\9ah\ 5£o
+ k\ 5¤m\b£l\a£l\a¤m\ 6¨o\b§q\aªq\bªq\ 6°x\v®v ¬t\ 5®v\a²y\b´{\b´{\a²z\ 3¿\84\f¾\84\a¿\84\ 4Ã\87\ 5Ã\8d Ã\93\ eÃ\98\10Ã\9b\ fÃ\97\bÃ\99\ 6Ã\9f â\vá
+ã\aã§\vå©\vå©
+ì±\ fèÂ\vò\ eï´\10ë°\ eò·\15ì±\ fè®\ eå«\våª\ eà ¥\và ¥\rÃ\9d Ã\97\aÃ
\8a\0Ã\8d\aÃ\8b
+¾\84 ´{\b¬s
+£l\b\9ab\ 5\90Z\ 2\8cW\a\82Q\ 5zK\ 5oG\ 2c@\0W:\ 2H1\ 57(\v\15\v\ 1\ 6\0\ 2\ 6\ 3\f\ 1\0\b\ 3\ 3\ 5\ 2\ 2\ 2\ 3\ 1\ 2\ 2\0\ 1\0\0\0\ 2\ 2\ 2\ 5\ 5\ 5\ 4\ 4\ 4\ 3\ 3\ 3\ 6\ 6\ 6\0\0\0\a\a\a\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\ 2\ 2\ 4\a\a \ 5\ 5\a\0\0\ 2\ 3\ 3\ 5\ 1\ 1\ 3\ 1\ 1\ 3\ 5\ 5\a\0\0\ 4\ 2\ 3\b\ 2\ 2
+\ 3\0 \ 3\0\a\ 5\0\ 6\ 3\ 1\ 2\ 2\ 1\0\ 1\ 2\0\ 1\ 3\0\ 1\ 2\0\ 5\ 2\0#\1a\v8'\rH/\aY:\ 4oH\ 5\81R\ 4\90\\ 6\9be\v¡k ©r\v±y\b·\7f\b¾\84\ 6Ã\85\ 1Ã\8f\ 5Ã\95\ 6Ã\99\ 4Ã\9d\aâ\bà ¦\aã© ã© ã©\açÂ\väª\bè®\fäª\bçÂ\væ¬
+è®\ eå«\fâ§\và ¥\vã\vÃÂ
+Ã\9d Ã\9b Ã\9a\fÃ\95\ eÃ\90\11Ã\8a\10¿\84\f¼\81 µz\ 2©p\0¨r\b¨v\1d\86Z\19kJ\1dÿøÃÿûîþÿú÷ýûüÿýøú÷ÿÿÿÿþÿù÷øÿýþÿþÿüúûÿþüÿþúþÿúþÿúýÿúýÿüûÿüýÿüþþÿÿýÿÿýÿÿýþÿýþÿþüÿýþÿýþÿýþÿýÿþþÿþþþþþüþþüþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúûÿùúÿ÷ûÿõûÿùýÿüþþÿþþÿÿýþþÿùüýõþÿûúüùúûýÿÿÿþüýÿþýÿüùÿüùÿÿûÿÿýüüúüüüþÿÿûüþþþÿþþþÿÿýÿýøÿûðÿþðÿÿÃÿþÃÿùÃvR\14vS\13~Y\15{U\ e\88a\14\8db\13\8c_\f\92d\ f\93d\f\96c\b\98c\a\9ae\ 5\9dg\ 5\9dg\ 3\9ce\0\9eg\ 2¡j\ 5Â¥n\a¨o\b§n\ 5ªp\ 5¯u ´z\f¯v\ 5³z\ 6¹~\ 6¼\82\a½\83\ 6¿\86\ 5Ã\8a\aÃ\8e Ã\95\rÃ\94
+Ã\98\fÃ\9c\fÃ\99\aÃ\9a\ 6Ã\9e\bÃ\9c\ 4Ã\9f\ 5ã¨\fá¥\aæª\fä¨
+ã\ 5ç«\ fâ¦
+ä§\ eä\fá¥\ fÃ\9c\bÃ\97\bÃ\94\bÃ\95\rÃ
\8b\ 6¿\84\ 4½\83\bµ| «s\ 6¢k\ 6\9bd\a\91[\ 3\86R\0\85R\ 3~N\ 4uH\ 5iA\ 3[;\ 2Q7\ 6A-\b.\1f\b\v\ 2\0\ 3\0\0\ 4\ 3 \0\0\ 5\ 3\ 3\ 5\ 3\ 3\ 3\ 4\ 2\ 3\ 2\0\ 1\ 4\ 4\ 4\0\0\0\0\0\0\ 4\ 4\ 4\0\0\0\ 2\ 2\ 2ÿÿÿûûûþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþÿþþþþþÿþþþþþÿþþþúúüÿÿÿýýÿþþþÿÿÿÿÿÿ\ 1\ 1\ 3\b\b
+\ 2\ 3\a\ 2\ 3\b\ 3\ 2\b\ 3\ 1\ 6\ 5\0\ 4\ 2\0\ 1\ 2\0\ 1\ 1\ 1\0\ 2\ 4\ 1\ 1\ 2\0\ 4\ 1\0\1f\18\b4$
+C+\ 5S5\ 1hB\ 3{K\ 1\8aV\ 3\94a\b\9bf\b¢m\a«s\ 6±x\ 4¸~\ 3Ã\86\ 6Ã\89\ 4Ã\8d\ 5Ã\97\bÃ\9d\vÃ\9b\ 5Ã\9e\ 4à ¥\vç\fä ç
+ä\aã«\ eà ¨\vã«\fá©
+ß§
+Ý¥
+á Ã\9d\aÃ\9b Ã\98 Ã\94\ 6Ã\92\ 6Ã\8c\bÃ\89\vÃ\84\ f¼\80\ eµ|\v³{
+¬w\a\9fn\a\8e`\vvO\ e]=\17ÿúèÿüöúøùùÿÿøÿÿùÿûüÿýýýûýûüÿüýÿýÿþúûÿþýÿþúÿþùþÿúþÿúýÿúûÿúúÿúûÿüþþÿÿýÿÿýÿÿýþÿýþÿýþÿýþÿýþÿýþÿýþþþÿþþþþþüþþüþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿúýÿúýÿúýÿúþþüþþþþþþþþüþÿúþÿúþþüþþüþþþþþþþþüÿþüÿþüÿþüþþüþþüþþüþþüþþþþþþþþþþþüþþüÿþúÿþùÿþùÿþ÷ÿþóÿûêÿþèÿýæÿýãÿüÃÿýÃfN nS\1ey[\1f~[\19\81Y\11\88Z\f\8f_
+\94a\ 6\96a\ 5\9bd\a\9ac\ 6\95^\ 1\9dg\a\9ef\ 5\9ac\0\9fe\ 1¦m\ 6¤k\ 2¦m\ 2©q\ 4¬t\ 5Âv\ 2±z\ 5±}\ 3²\7f\ 2»\88 ½\86\b¿\88 Ã\8a Ã\8d\aÃ\91
+Î\vÒ\rÕ\fÑ\ 6Ô\ 6Ø\ 6Ú\bÞ¡
+à £\fà  \vÃ\9c
+Ú\rÜ\10Ø\ eÒ
+Ã\90\vÃ\8a Ã\85\bÃ\84
+µz\ 4±x\a¦p\ 4¡l\ 6\98c\ 5\8dZ\ 1\8d[\ 6\84S\ 4zJ\0vJ\ 3iB\ 1fC\vU9
+C-\b;+\12\1e\12\ 2\ 6\ 1\0\ 2\ 1\0\ 1\ 1\ 3\0\ 1\ 3þþþüüüÿþÿüúûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþüþþþþþüþþþþþüþþþþþüþþþþþüþþþþþüþþþþþþûýüþÿÿÿÿÿÿþÿÿüýÿþÿÿýÿ\ 4\ 3\b\0\ 1\ 5\ 1\ 1\ 1\ 2\ 1\0\13\f\0@2\17?)\ 2Q5\ 3a?\ 2wJ\ 6\86U\b\92_\f\98e
+\9eh\ 4¨o\ 4®u\ 4±y\ 2¹~\ 6¿\85\bÃ\89\bÃ\8c\aÃ\91\aÃ\95\ 6Ã\97\ 5Ã\9b\ 6Ã\9d\fÃ\9e\rà\râ\rÃ\9e Ã\9b\ 3Ã\9e\ 5ä\vÃ\9f\aá Ã\9d\vÃ\97\aÃ\91\ 5Ã\8e\ 6Ã\8a\ 5Ã\85\ 3¹\81\ 6¼\85\10°t\ 2´x\b®t\ 6ªs\f\96g\v\8df\edF\14ÿýÃÿùëÿþúÿÿýþÿÿüýÿýþÿýÿüýÿüþþüþþüÿþüÿþüÿþüÿþüþþüþÿúþþüþþüþþüýÿüýÿüýÿüþþþþþþþþþþþüþþüþþüþþüþþüþþüþþüþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿÿÿýýýýüøÿýøÿüñÿÿïÿýçÿýà ÿþÃXA\15dH\16rR\19oI
+\82Z\15\80V\ e}Q\ 6\80R\ 5\87X
+\84U\ 3\85U\ 1\94b\v\93`\ 5\96a\ 3\9ae\ 5¡m
+\9bg\ 2¡l\ 6£n\ 4¡m\0¬x
+¯| Âz\ 5·\80\v¹\82\v»\85\vº\84\bº\84\ 6»\86\ 6¾\87\ 6¿\89\ 3Ã\8f\bÃ\91 Ã\93 Ã\96
+Ö\vØ\r×\vÔ
+Î Ï\fÌ
+Æ\bÄ
+Ã\84
+»~ ·{ ®t\b¨r\b\9eh\ 4\99d\b\8d[\ 4\82R\0\80Q\ 3xJ\0wK\ 2nF\ 1d@\ 4X8\aP6\11A-\12(\e
+\v\ 3\0\a\ 4\0\0\0\0þÿÿúüûÿÿÿýýýù÷øÿþÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿýüþûÿÿûüû÷ÿûúýûüÿþÿþýÿþÿÿÿÿÿÿþùÿÿï-\1f\ 4F2\rK0\ 1[;\ 2sG\ 6\81Q\a\8d]\v\95b \9dg\ 5Â¥o\ 5Âu\ 6±x\ 5³z\ 6¹\81
+»\83
+¿\85\bÃ\89\aÃ\8d\aÃ\8f\ 3Ã\92\ 6Ã\95
+Ì
+Ã\93\bÃ\96 Ã\96 Ã\96\ 6Ã\95\ 4Ã\97\ 6Ã\90\ 1Ã
\8c\0Ã\8b\ 2Ã\8c\ 5Ã\88\ 6½\82\ 2»\80\ 2¼\82\a¶~\r®y ·\7f\10§q\ 4\9dh\0\9dn\14\84\\16cD\15ÿüãÿþóÿÿûüÿÿöúùüÿÿÿÿÿÿýþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüüþýýÿþùûúþÿýÿÿûùúôÿÿöþúîÿÿïÿýèÿýåÿýãÿúÃQ:\1a\D"]A\19eG\13kK\10wU\16wT\12uQ\a\84]\ e\83[\ 6\8b_\b\86X\0\97h\ e\91^\ 3\97b\ 4\97a\ 1 h\a\97_\0ªq
+§o\ 2¬s\ 2¯v\ 3±x\ 5²y\ 6µ| ¸\7f\f¹\80\fº\82\v¾\84 Ã\86 Ã\88
+Å
+Ã\8d\vÃ\8d\bÃ
\8b\ 6Ã\88\ 6Ã\89\ 6Ã\87\ 6¼\82\ 5¹~\ 6´{\a®u\ 4¨p\ 3¡j\ 3\9cf\ 4\93^\ 2\8d[\ 6\84S\ 4}M\ 3|K\brE\ 4lC\ 1b<\0`? N1\ 5M5\136$\f\17\v\0\ 6\0\0\ 3\0\0\b\b\ 6þÿÿýÿþÿÿÿûûûÿÿýÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿýöøõÿÿûÿÿûþúùÿþÿøöûÿþÿýþÿþÿÿýü÷ÿüî;/\15;(\aG/\ 3]>\bkD\ 3{L\ 4\86W\a\90^\a\98c\ 3¡j\ 3ªq\ 6Âu\ 6®v\ 5³{
+µ~
+¶~\a¹\81\ 6¾\84\ 6Ã\85\ 3Ã\89\ 4Ã\8b\aÃ\8b\aÃ\8b\aÃ\8d Ã\8e
+É
+Ã\8e Ã\8d\bÃ\8e\vÃ\8a ¾\87 ½\85
+¹\82\v²{\ 6°y\ 4±y\b«r\aÂ¥o\ 5 m\0\97h\0\92g\v{V\ fhI\eÿüáÿøëÿûõýüøõ÷ôþÿýþÿýüýøþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþþÿÿûýúûýúüþûþÿýøú÷þÿûûü÷ÿÿøÿÿöþúïÿþòÿþóÿøìÿýêÿýÃK7\12K5\fXB\13`G\11kQ\16lO\rvU\ ezT\r}S \7fQ\ 4\85T\ 5\97c\10\92\\ 6\9fg\10\99a\ 4 f\ 2£j\ 1Â¥l\ 3§n\ 5©p «r\vÂt\r¬s
+²x\r²x\f²y\b²y\ 6´{\a·\7f\b¸\80\a·\81\ 5·\81\ 5¶\80\ 4µ~\a±z\ 5ªu\ 5¦p\ 4¢k\ 4\9cf\ 2\95`\0\8e[\0\88V\ 1\83R\ 3~N\ 6zJ\bvH\fmC oH\r]<\ 6W;\vL3\v<)\v%\16\ 1\ f\ 5\0\a\ 3\0\ 5\ 4\0ýýûõ÷öþÿÿøøøÿÿýþýûÿÿýþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüúüùþÿýÿÿýýüøÿþýþýûÿÿÿþÿÿùúþþÿÿÿÿúÿþòÿþè@/\11G1
+O3\ 3c?\ 1rG\ 2\80R\ 5\89Y\ 5\92_\ 3\9be\ 1¡j\ 3§n\ 3¬s\b°x\v±y\f±y
+³|\b¶~\a¶~\ 3»\81\ 4»~\ 1¿\82\ 5Ã\84 Ã\83\bÃ\82\a¿\81\b¿\83 ¿\83\vº\7f º\81\r·\80\f¯z\bÂx\bÂy\v«w
+¦q\a¥n
+ l \8c^\0\85^\ 3rT\faJ\16ÿûà ÿúïÿý÷ÿþûýüúÿÿýÿÿÿøú÷ÿÿúþÿùþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýüøüûöÿÿûÿÿûÿÿûúüùþÿýøýùúÿûøýùúü÷ÿÿúÿÿúùúôýýõþûòÿÿóÿùÃÿþÃÿþèÿýâH8\17WD\1c[D\18bF\16dC\ ekG\vzQ\ f{L\ 6~M\ 1\8aW\ 6\8dY\ 3\95_\ 5\97`\ 5\97`\ 3\99b\ 5\9de\b h\v h\v\9ef\a¨n\r§p\f§p\v§p §r\b©u\b©u\b§u\ 6Â¥s\ 2¤r\ 1Â¥r\ 5¡n\ 3\9af\0\98d\ 1\95c\ 4\91^\ 3\8d[\ 4\84T\0\80Q\ 3{L\ 4tG\ 6qD k@ d<\bZ:\aV;\fO8\ f@-\f5%\ e\17\v\0ÿþôÿü÷þþüýÿþþÿÿûýüÿÿýÿÿýþýûýüøþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿÿþÿýþýûø÷õÿÿûþýûùùùþÿÿþÿÿùûúüýøýûïÿÿì8*\10B/\ fH/\ 6[:\ 4iC\ 2xN\ 6\83U\a\8d[\ 4\94b\ 3\9cf\ 4 i\ 4§p «t\r¬u\ e«u\vÂw\v°x °x\a³|\b´y\ 3¸|\ 4»~ º}
+¹| ¹{
+¹{\f¸z\r³v\v³y\ e°w\ e¨r\b¥p\b¦s
+¢q
+\9cj\a\97b\ 6\88Y\ 1\85_\ elO\rXC\14ÿüà ÿþðÿþùÿÿûø÷õúøùÿþÿüúýÿÿýþÿøúýòþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿþûüùôÿþûýüøÿÿýýýûþÿýúüûùýüüÿÿþÿýùûøþÿýýÿúþÿûÿÿûûúöÿþûþûöÿÿöÿùÃÿýÃÿþìÿûäÿúÃG0\ eS7\10S3\ 4]:\ 4sM\ frI\a{O\b\82R\ 6\84S\ 4\86U\ 6\8cY\b\91]
+\96b\ e\99c\r\99b\b\9ac\b\9ce\b\9ei \9fj
+\9fj
+\9dk
+\9bi\b\99g\ 4\99g\ 4\96d\ 1\97e\ 4\95c\ 4\8dZ\0\8bY\0\8bY\ 2\84T\0\85V\ 6}O\ 2yM\ 4sH\ 4lC\ 5hA\bc;\a[9 V>\12C/
+D4\13;-\13ÿþìÿ÷ìÿþ÷üûùþÿÿüþýûýüþÿÿÿÿýýýûÿÿûÿÿûþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüûýüýýýÿÿýÿÿýúùõþýùÿÿýþÿÿøüýüÿÿüýøÿþõÿÿï7*\177'\ eI2\10Q5\ 5]=\ 2mG\ 6zP\b\84W\ 6\8e\\ 5\96c\a\9dg\a\9fi\a¥n
+¦o\v¦o
+¨q
+©s ©s\a«u\b±y\b°w\ 6¯v\ 5³w ¶z\f¶y\ e³v\f°s µw\12°u\ f¬r\ e§q\r£o\f\9dk
+\97g\ 5\94e \90b\r\8ba\19aA\bN7\rÿþæþüïþÿúûÿýüÿýÿÿÿÿþÿýøþûùþÿÿÿüÿöþÿøþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿûüÿýÿÿýÿÿýþýùúÿþÿúøùÿþÿÿþÿûùúüûùÿþúÿþûÿþùÿÿúþûöÿýøÿÿúÿÿúÿþùÿÿúÿÿøþùóÿûóÿøîÿýïÿúèÿüãF/\ fI/
+U:\ f]?\rlH\ esK\rxO\r}R\r\81U
+\87X
+\89Y\ 5\8bY\ 2\8bZ\0\8e]\0\91^\ 2\90_\ 2\91`\ 4\91_\ 6\8f]\ 4\8d[\ 4\91_\b\8cZ\ 3\8d[\ 6\8cY\ 6\86S\ 2\84S\ 4\83R\ 5yI\0~P\ 5tJ\0sK\ 5kF\ 2c?\ 1c@\b]9\ 5V:\vF2\ f8*\r=1\19ÿ÷äÿÿóÿÿøüûùþÿÿûüþùýþþÿÿüþýÿÿýýþùÿÿûþýùþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþÿÿÿø÷õÿÿýÿÿûþýùýýûøú÷÷ûúüÿÿüýøÿÿøÿþôÿùê=0\1f=,\12G0\aQ5\ 3^>\ 5iF\ 6vL\ 4\81S\ 5\8d[\ 6\93`\ 5\97b\ 6\9dg\a\9fi  j\b¢l\b£n\b£n\ 6¥p\ 6§s\ 6£o\ 2¢n\ 1¦p\ 4«r\a«q\ 6¨n\ 3¦l\ 1¨m\a¤j\ 6 i\ 5\9eh\b\98f\a\93b\ 5\8d^\ 2\88[\ 6uM\abA\fS8\1aÿüêüøïþÿûóýôùÿúûÿûùûøýûÿÿýÿÿþÿûûûþÿûùûöþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿýþÿþÿÿúþÿýÿÿþÿþüÿÿþÿüúýÿýþÿþÿüûùÿþýÿûøÿûøÿþúÿþúÿýùÿÿúþûöýüøþÿúÿÿýýýûÿÿýÿÿýÿüùÿúôÿýôÿùëÿýêÿüâD1\11Q8\10]>\ feE\12kK\12pM\rvO
+|R\ 6\7fT\ 5\80S\0\83U\0\83U\0\83S\0\84T\0\85U\ 1\86V\ 4\86U\ 6\89V\a\82N\ 2\84P\ 5\85S
+\82P\a\83S\v\81Q sG\0xM\bnG\ 4oI\beC\ 4[<\ 3Z<\ 6T6\ 4N7\r;,\ f5-\18ÿýÃÿÿóÿþ÷üûùþÿÿúûýüÿÿùýþþÿÿþÿýûü÷ÿþúÿþûÿÿûÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýýýûûûÿÿýþýûÿþúþÿúýÿüþÿýüÿÿüþûûûùÿÿúÿüöÿýóÿýñ6)\16=-\fF1\ 6Q6\a\=\agC\ 5uJ\ 5\81S\ 6\89Y\a\8f]\ 6\95b\a\9ae \9bf\b\9ei  j\b j\ 6¡m\b¡p \9fn\a o\ 6Â¥r Â¥p\ 6£m\ 3¤k\ 2¦m\ 6¡j\ 5£m\v\9ei\r\91_\ 6\8aZ\ 5\87Z\a~S\ 4pJ\ 3eF\10O7\15ÿûìÿüøþüýüÿÿõÿ÷ùÿúøý÷þÿÿÿþÿþùýûùüÿþÿûûûþÿÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþýÿþýÿþýÿþþþÿþþÿþþÿþþÿþþþÿýþÿýþÿýþÿýþÿýüÿûüÿüúÿýúÿýúÿþúþÿúýÿúýÿüýÿüýÿþþþþÿþüÿýúÿþ÷ÿþõÿýðÿþä;+
+O;\18R;\11]C\12dG\ fhI oL\bqK\ 2pI\0wL\0zL\0{M\0\7fO\ 3\82R\ 6zJ\0}K\ 2\85S\fwE\0xF\ 1wF\ 3{K rE\ 4tH mE\ab>\0aA\ 6W:\ 2N4\ 1I1\ 1J3\a:(\ 45*\14ÿþðÿüñÿýöÿÿýÿÿÿþÿÿ÷ûþûÿÿûÿÿýÿþýÿüþÿúÿþúÿýúÿþúÿþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþÿúþÿúýÿúýÿúýÿüýÿüþþüÿþúÿþùÿý÷ÿýõÿüð0&\r>/\ eC/
+R:\ e^>\v`<\0lC\ 1yM\ 4\80Q\ 3\87W\ 3\8bY\ 2\95d\b\95b\ 6\9cg \9ae\ 5\9ae\ 5\9dm\v\9aj\b\96f\ 2\9dl\ 6\9di\ 3\9bg\ 1Â l\ 6\95a\0\91_\0\98g\v\89[\ 6\83X
+{S\rmF\ 5nJ\f^@\fK6\17ÿýìÿöðÿûûÿþÿûýüúÿùüÿûýÿþþþþÿýþÿþüÿþüÿþüþþÿþþÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúýÿúýÿúýÿúýÿüýÿüýÿþýÿþýÿþýÿþýÿþýÿþþþþþþþþþþÿýþÿüþÿûþÿüüÿýúþÿúýÿúûÿúûÿüúÿþúÿþûÿÿûÿÿýÿþýÿþþþüÿÿ÷ÿýïÿÿìÿúäÿüáD4\12F3 R:\fU:\ 5]>\afD\ae?\0jC\ 2rI\ah=\0uH\ 5|L
+yJ\ 6wG\ 5wG\ 5yI m?\ 1nA\ 6xN\14f?\ 6hE\raB\fS7\ 5R:\fO:\ fJ6\11@-\f3%
+ÿÿïÿÿöÿýøÿÿýùùùüýÿþÿÿüÿÿûÿÿûÿþýÿüýÿüþÿúÿþúÿýúÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþþþþüþþüþÿúþÿúýÿúýÿúýÿüýÿüþþüþþüÿþúÿþùÿýùÿýõÿÿÃ2*\13@2\177$\ 3G.\ 6T5\ 6^;\ 3gA\ 2pH\ 3wM\ 1\80U\ 6\83V\ 3\85W\ 1\8b\\ 4\8f]\ 6\97e\f\92c\v\95f\ e\92c \91b\ 6\8a\\0\8a\\0\8b]\0\8ea\ 6\89\\a~U\ 6xR\viG\b^? `D\15Q6\vJ5\16ÿüìÿþøÿþûÿþýüúûÿþÿÿÿýüüúþþþþþþþþþÿþüÿþúÿþüþþþþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿùþÿ÷þÿ÷þÿ÷þÿ÷ýÿ÷ýÿùýÿùûÿùûÿùûÿúûÿúûÿúûÿúûÿúýÿüÿüÿÿüÿÿüÿÿýþþþþýÿüûÿüûÿþûÿþûÿþûÿþûÿüýÿúýÿùþÿ÷þÿõÿÿöÿýôÿÿóÿùéÿÿìÿþè@/\15F1\12O7\15P4\fY:\ e[9 a= gB\vc<\ 3h@\ 3a8\0rI e<\0iA\ 4b9\ 1e= Y5\ 1_=\rX9
+T9\ eU>\15@, A0\123#
+2&\10ÿþÃþúñùøóÿÿýýýýÿÿÿüýÿüýÿýþÿýþÿýÿþýÿüýÿúþÿúþÿúÿþúÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþúÿþúÿþùýûïÿÿñÿþë?3\e<)\vG/\vK0\ 5R4\0T4\0eA\ 3kF\ 2nH\ 1rK\0sI\0sH\0\7fQ\ 4\80R\ 5\83U\b\80R\ 4\84V\b\81T\ 3}R\ 3zQ\ 2tN\ 3fC\0eE\b^B\10R;\11E1\10C2\18ÿøæÿüðÿü÷øøöÿÿûýüøÿþÿÿùýÿûÿÿþÿÿþüþþüþþþþþþþþþþþüÿþùÿþùþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿþùÿþùÿþùÿþùÿþùþÿùþÿùýÿùýÿùûÿùûÿùûÿùûÿùûÿùûÿùûÿúþþþÿýþÿýþþþüýÿüýÿüýÿþûÿþýþÿýþÿýÿþýÿüýÿúþÿùþÿ÷þÿ÷ÿÿûûü÷üýøÿÿúÿþ÷ÿùïÿúðÿøëÿùç@,\14H0\14L4\12N2\vY<\12^?\11]=\fcB\rV5\0Z9\ 4[:\a`@\11S4\ 6T7\rS7\ fG/ F2\11@/\118*\10:-\1aÿúìÿþóÿûóÿÿúÿÿýùùùþþþþþÿþÿÿþÿÿùúüýÿþýÿüýÿúýÿúþÿúþÿúÿþúÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúÿÿúÿÿöÿýòÿÿï2%\12=-\14C0\10H2\vL4\bU;
+N3\0Z=\ 3aA\ 6iG
+hD\ 6lF\bmE\apH
+nF\bkE\ 6iC\ 4`<\0aA\ 4[>\ 6`F\15I2\bK8\17;-\13ÿýÃÿúïÿýúû÷öüÿÿûÿýùûöÿÿûÿýÿÿûÿÿûÿÿùýÿþüþÿúýÿüýÿþþþÿþþüÿÿ÷ÿÿõþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüÿþüÿýþÿýþÿüþÿýþÿýþÿýüÿýüÿþüÿþúþÿúþÿúýÿúýÿúýÿúýÿúýÿùýÿùþÿ÷þÿ÷ýÿùýÿùýÿúýÿþýþÿþýÿþýÿþýÿþþÿþþþÿþúÿþùþÿùþþüÿÿÿÿÿÿýýýúù÷ÿÿýÿþûÿüøÿþöÿüòÿýÃÿ÷â=+\13B.\13C.\ fE/
+F0\aG2\aJ4\vE/\bF/\rH1\11A,\r>+\r;+\118)\12ÿüèÿþïÿøïÿþøÿûøÿÿýÿþü÷öôþüýÿÿÿùùûýýÿùùûÿÿÿþþüþÿúþÿúþÿùþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþüýÿþýÿþþþþþþþÿþüÿþüÿþüÿþüþþüþþüþþþýÿüýÿúþÿúÿþùÿüóÿýôÿüÃÿýì/ :+\ e@0\ e>,\ 6F3 E.\ 4F-\ 4P5
+P3 T5 V7\vQ2\ 6S6
+O4 J1\bL6\rE1\ e:)\v<.\14ÿüêÿùîÿý÷þýûýýÿþÿÿöüúôûôþÿûÿÿýúõùÿýÿÿûÿÿþÿÿþúþÿùýÿüûÿþýþÿþþþÿÿ÷ÿÿõþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþÿýÿÿýÿÿüÿÿüÿÿüÿÿýþÿýþÿýþÿþüÿþüþþüþþüþþüþþüþþüþÿúýÿùýÿ÷ýÿùýÿùýÿùþÿúþþüþþþÿýÿÿýÿÿýÿÿýÿÿýÿÿþüÿþüÿþúþýûþüýúúúÿÿÿÿÿÿùùùþÿÿþÿÿøøöÿÿúÿÿöÿÿôÿüïÿþÃÿüêÿþè9-\134)\r8,\120$\f4%\ e9-\174'\14ÿþêÿþÃÿýÃÿýïÿüóÿü÷þüýÿÿÿûûýÿýþÿÿýÿþÿøö÷ÿþÿÿÿÿùùùýýûþÿúþÿùþÿùþÿùþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþüýÿþýÿþþþþþþþÿþüÿþüÿþüÿþüþþüþþüýÿþýÿþüÿýýÿüýýûÿþúÿþûÿþúÿþöÿþóÿÿïÿùæ;0\1a9/\166(\ e?/\15=,\12A-\14@,\11:' C/\14<+\ f7'\r>0\16ÿøâÿþêÿýîÿþòÿÿöýúõÿÿýýýÿûüÿüÿÿûÿÿûÿýþÿûõõóýûüÿþÿûùúÿþÿþÿúýÿùûÿúûÿúýÿüþþüÿþúÿþúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿþûÿþýÿþýÿþýÿþýÿþþþþþþþþþþþþþÿýþÿýþÿýþÿýþÿýÿÿýÿþþÿýþÿþþþþþüþÿúÿþùÿþùÿþùÿýúÿþúÿýþÿýþþþþþþþþþþÿýþÿþýÿýýúöõýüúÿÿýýÿüúÿû÷ýùûÿûûÿûùþøöùòþÿúüýõýýõþûòÿÿôÿýòÿÿôÿÿôÿüòÿþôÿøîÿþôÿýòÿýñÿÿöþÿùþÿýþÿÿ÷ûþþÿÿýüúÿþûÿüûÿþüýûüûùúÿþÿÿþüÿþúÿþùþÿùþÿùþÿúþÿúþþüþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþþüþþþýþÿýþÿþþÿþþþÿþüÿýüÿýúÿþúþþüþþüýÿþûÿþöû÷üÿýþÿÿúúúù÷øÿþÿõóôÿþüüûöÿÿøú÷îÿÿôÿÿóÿûðÿýóÿùïÿþîÿÿïÿûîÿÿóÿþôÿýôÿÿöÿüõÿþùÿþúýüøÿþúýýûûûùÿÿûûýúüþýûýüüþûþÿûÿÿú÷øòýÿüúüûýÿþûÿúûÿõûÿóýÿõþÿúÿüÿÿüÿþþÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüûÿüûÿüûÿüûÿüûÿüýÿüýÿþýÿþþþþþþþÿýþÿýþÿýÿÿýÿÿüÿÿýÿþýÿýþÿþþÿþþþÿþúÿþùÿÿ÷ÿÿ÷ÿþùÿþùÿþúÿþüþþþþþþþþþÿýþþúùÿýýÿþýþýûþÿúûýøùþøûÿûùÿûõÿ÷ûÿýûÿýøýùûÿüþÿÿþÿýüüúÿÿûýüúüûùÿÿûþýùþýùÿÿúÿþùÿÿúûüöþÿûúüûøüýüÿÿûüþÿþüÿþúÿûúÿÿýþüýÿþÿÿþüþýûÿþúÿþùþÿùþÿùþÿúþþüþþüþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþþüþþüþþþýÿþýÿþþþÿþþþÿþüÿþüÿýúÿþúþþüþþüýÿþûÿþþÿýùûøúüûþÿÿþþÿÿÿÿÿÿÿÿÿÿýÿþþÿýýýûþÿúÿþúÿüùÿþûÿýúþýøÿÿøýü÷ýüøýýûÿÿýùùùÿÿÿþÿÿûýüýýûÿÿýÿÿûýþùÿÿúúûöÿÿÿÿÿÿúüùþÿûüÿøþÿúþÿûüÿýýÿþûÿüýÿõýÿóþÿóþÿùÿüÿÿüÿþþÿþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüýÿüýÿüýÿüýÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþþþþþÿýþþþþþþþþþþþþþþþüþþüþÿúþÿúþÿúÿþúþÿúþþüþþüþþüþþüþþüþþüÿþüÿþüÿþüþþüþþüþþüýÿüýÿüýÿüýÿüýÿüýÿüýÿüýÿüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþÿúþþüþþüýÿþýÿþþþþþþüþþüÿþüþþüþþüþþüþþüþþüþþüþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþþþþüþþüþþüÿþüþþüþþüþþüþþüýÿüþþüþþüþþüþþþþþþþþþþþþþþþþþüþþüþþüþþüþþüÿþüÿþüÿþüþÿúþÿúþÿúþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþÿúþþüþþüþþüþþüþþüþÿúþÿúþþüýÿüþþüýÿüþÿúþÿùþÿùþÿúþþÿþþÿþþþþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþüþþü
\ No newline at end of file
--- /dev/null
+P6
+# CREATOR: XV Version 3.10 Rev: 12/16/94
+118 85
+255
+øøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷óæáñ¡\ñ¡\ó¢[ó¢[ó¢[ó¢[ó¢[ù¨Xô¨Tô¨Tô¨Tô¨Tù¨XúÂQúÂQúÂQúÂQfDPùâ÷÷÷÷÷÷øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ùâú¹cû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OÂtS=4%=4%=4%=4%=4%=4%ùâüüüùâú¹cû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQü«Tùâúúúúúúúúúúúúøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷óæáñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ó¢[ù¨Xñ¤Vô¨Tô¨Tù¨Xô¨Tô¨Tô¨Tù¨XúÂQfDPùâ÷÷÷÷÷÷÷÷÷÷÷÷øøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ôõõôõõôõõôõõôôôôôôôõõôõõôõõôõõùâú¹cû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°O=4%=4%=4%=4%;*"=4%;*"=4%ûûûùâú¹cû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OúÂQúÂQúÂQúÂQúÂQúÂQúÂQü«Tù¨Xù¨Xù¨Xü«Tú¹cúúúúúúúúúúúú÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ùâñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ó¢[ó¢[ñ¤Vô¨Tô¨Tô¨Tù¨Xô¨Tô¨TfDPê\93÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ôõõôõõôõõôôôôôôôôôôôôôôôôôôôôôôôôôôôùâú¹cû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oô¨T9#\1e;*"=4%=4%=4%;*";*"=4%ÂtSùâú¹cû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OúÂQúÂQúÂQü«Tü«Tü«Tù¨Xù¨Xù¨Xù¨Xùâúúúúúúúúúúúú÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ùâñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ô¨Tô¨Tô¨TfDPÂtSôõõôõõ÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ôõõôõõôõõôõõôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâú¹cû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OÃ\90H9#\1e9#\1e=4%;*"=4%;*";*";*"=4%Ã\90Hû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OúÂQúÂQúÂQúÂQü«Tü«Tù¨Xô¨Tùâúúúúúúúúúûûû÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ê\93ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[fDPfDPôõõôõõôõõôõõôõõôõõôõõôõõôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâùâú¹cû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oô¨T9#\1e;*"9#\1e;*";*"9#\1e=4%;*";*"Ã\90Hû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OúÂQúÂQúÂQúÂQúÂQúÂQü«Tú¹cúúúúúúûûûûûûûûû÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ùâñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\fDPfDPùâôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôú¹cû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OúÂQ9#\1e;*"9#\1e=4%;*";*"9#\1e;*"=4%Ã\90Hû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OúÂQúÂQúÂQü«Tü«Tú¹cúúúûûûûûûûûûûûû÷÷÷÷÷÷÷÷÷ôõõ÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ê\93ñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\fDPfDPê\93ôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôú¹cû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oô¨T9#\1e;*"9#\1e9#\1e=4%9#\1e;*";*"9#\1eÂtSû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OúÂQúÂQúÂQúÂQü«Tü«Tü«Tü«Tùâùùùúúúúúúúúúúúúôõõôõõôõõôõõôõõôõõôõõôõõôõõôõõôõõôõõôõõôôôùâó¢[ñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\fDPfDPùâôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâú¹cúÂQúÂQû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OÂtS;*";*"9#\1e9#\1e9#\1e9#\1e9#\1e9#\1e9#\1eÃ\85Jû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oü«TúÂQü«Tü«Tü«Tü«Tô¨Tøøøøøøøøøøøøùùùùùùôõõôõõôõõôõõôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\fDPfDPùâôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâú¹cúÂQúÂQúÂQúÂQúÂQû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oô¨T=4%;*";*"9#\1e9#\1e9#\1e9#\1e9#\1e;*"fDPû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OúÂQü«Tü«Tü«Tü«Tü«Tù¨Xù¨Xù¨Xùâ÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷øøøôõõôõõôõõôõõôõõôôôôôôôôôôôôôôôôôôôôôôôôôôôùâñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ¡\fDPfDPê\93ôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâú¹cúÂQü«TúÂQúÂQúÂQúÂQúÂQúÂQû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oô¨T;*";*";*"9#\1e9#\1e9#\1e9#\1e9#\1e9#\1e9#\1e;*";*"=4%ÂtS\84\1f+;*"\84\1f+ô£Uû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oü«TúÂQü«Tü«Tü«Tü«Tü«Tü«Tù¨Xù¨Xù¨Xù¨Xù¨Xùâôôôôõõôõõôõõôõõ÷÷÷ôõõôõõôõõôõõôõõôõõôõõôôôôôôôôôôôôôôôôôôôôôùâñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ¡\fDPfDPùâôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâú¹cù¨Xù¨Xù¨Xü«Tü«TúÂQúÂQúÂQúÂQúÂQû°Oû°Oû°Oû°Oû°Oû°Oô¨T=4%;*"9#\1e9#\1e9#\1e9#\1e9#\1e9#\1e9#\1e9#\1e=4%;*";*";*"=4%;*";*";*"\84\1f+ô£Uû°Oû°Oû°Oû°Oû°Oü«Tû°Oû°Oü«Tü«Tü«Tü«Tü«Tü«Tù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xâ\9dqôôôôôôôôôôôôôôôôôôôôô÷÷÷÷÷÷÷÷÷ôõõôõõôõõôôôôôôôôôôôôôôôôôôôôôôôôùâñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ\9fZó¢[ñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZó¢[fDPfDPùâôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâñ¡\ó¢[ó¢[ó¢[ù¨Xù¨Xù¨Xù¨Xù¨Xü«Tü«TúÂQü«TúÂQúÂQúÂQû°Oô¨T;*";*"9#\1e;*"9#\1e9#\1e9#\1e;*"9#\1e9#\1eê\93ÂtS9#\1e9#\1e=4%;*";*"=4%\84\1f+\84\1f+Ã\85Jû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oü«Tü«Tü«Tü«Tü«Tü«Tü«Tù¨Xù¨Xù¨Xù¨Xù¨Xùâôôôôôôôôôôôôôôôôôôôôô÷÷÷÷÷÷÷÷÷ôõõôõõôõõôôôôôôôôôôôôôôôôôôôôôôôôùâñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZó¢[ó¢[ñ\9fZñ\9fZñ\9fZñ\9fZfDPfDPùâôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâñ¡\ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xü«Tü«TúÂQô¨T;*"9#\1e9#\1e9#\1e;*";*"9#\1e9#\1e=4%=4%óæáôôô=4%9#\1e9#\1e9#\1e;*";*"\84\1f+\84\1f+\84\1f+\84\1f+û°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oü«Tü«Tü«Tü«Tü«Tü«Tù¨Xù¨Xù¨Xñ¡\ôôôôôôôôôôôôôôôôôôôôôôôô÷÷÷÷÷÷÷÷÷÷÷÷ôõõôõõôõõôõõôôôôôôôôôôôôôôôôôôùâñ¤Vñ¤Vñ¤Vñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZó¢[ó¢[ñ\9fZñ\9fZfDPfDPùâôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâñ¡\ó¢[ó¢[ñ\9fZó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xô£U=4%9#\1e;*";*";*";*"9#\1e9#\1e=4%ê\93ôôôôôôùâ9#\1e;*";*"9#\1e=4%;*";*"\84\1f+\84\1f+ñ¤Vû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oü«Tü«Tü«Tü«Tù¨Xù¨Xùâôôôôôôôôôôôôôôôôôôôôôôõõ÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ôõõôõõôôôôôôôôôôôôôôôùâñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ¤Vñ\9fZfDPfDPê\93ôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâô£Uñ\9fZô£Uñ¤Vñ¤Vñ\9fZó¢[ó¢[ó¢[ó¢[ù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xñ¤V=4%9#\1e9#\1e9#\1e;*";*";*"9#\1e;*"ê\93ôôôôôôôôôê\939#\1e;*";*";*";*";*";*"\84\1f+\84\1f+û°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tù¨Xôôôôôôôôôôôôôõõôõõôõõ÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ôõõôõõôôôôôôôôôôôôôôôôôôôôôùâñ¤Vñ¤Vñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ\9fZñ\9fZñ¤VfDPfDPê\93ôôôôôôôôôôôôôôôôôôôôôôôôôôôùâó¢[ñ¤Vô£Uñ¤Vô£Uô£Uô£Uù¨Xô£Uô£Uô£Uô£Uó¢[ô£Uô£Uù¨Xù¨Xñ¤V=4%;*"9#\1e;*";*";*";*"9#\1e9#\1eê\93ôôôôôôôôôôôô=4%9#\1e9#\1e9#\1e9#\1e9#\1e\84\1f+\84\1f+\84\1f+ÂtSû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tê\93ôõõôõõôõõôõõôõõ÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ôõõôõõôôôôôôôôôôôôôôôôôôôôôôôôùâñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ\9fZñ\9fZñ¤Vñ¤Vñ¤VfDPfDPê\93ôôôôôôôôôôôôôôôôôôôôôôôôùâó¢[ô£Uó¢[ô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xñ\9fZ=4%;*"9#\1e9#\1e;*";*";*";*"9#\1eê\93ôôôôôôôôôôôôôôô9#\1e;*";*";*";*";*"\84\1f+\84\1f+\84\1f+Ã\90Hü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tù¨Xôõõ÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷øøøùùùúúúúúú÷÷÷÷÷÷ôõõôõõôõõôôôôôôôôôôôôôôôôôôôôôôôôôôôùâñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤VfDPfDPùâôôôôôôôôôôôôôôôôôôôôôùâô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uù¨Xù¨Xù¨Xù¨Xù¨Xñ\9fZ=4%9#\1e9#\1e;*";*";*";*"9#\1e9#\1eê\93ôôôôôôôôôôôôôôôùâ9#\1e;*"9#\1e9#\1e9#\1e;*";*"\84\1f+ÂtSü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tù¨Xü«Tú¹c÷÷÷÷÷÷÷÷÷øøøùùùùùùúúúûûûûûûÂtS÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ôõõôõõôôôôôôôôôôôôôôôôôôôôôùâñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ\9fZñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤VfDPfDPê\93ôôôôôôôôôôôôôôôôôôùâó¢[ô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uù¨Xù¨Xù¨Xù¨Xô£Uô£U9#\1e9#\1e9#\1e9#\1e;*";*";*";*"9#\1eê\93ôôôôôôôôôôôôôôôôôôÂtS9#\1e9#\1e9#\1e9#\1e9#\1e9#\1e=4%\84\1f+ü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tù¨Xü«TóæáùùùúúúúúúûûûûûûûûûûûûûûûóæáfDP÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ôõõôõõôôôôôôôôôôôôôôôôôôôôôùâñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤VfDPfDPê\93ôôôôôôôôôôôôôôôùâô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uù¨Xù¨Xô£Uù¨Xô£U=4%9#\1e9#\1e;*";*";*";*"9#\1e9#\1eÂtSôôôôôôôôôôôôôôôôôôôôôfDP9#\1e9#\1e9#\1e9#\1e9#\1e9#\1e9#\1eÂtSü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tó¢[÷÷÷÷÷÷øøøùùùùùùúúúúúúúúúóæáÂtSfDP÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ôõõôõõôõõôôôôôôôôôùâñ\9fZñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤VfDPfDPÂtSôôôôôôôôôôôôùâñ¡\ô£Uñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uù¨Xô£Uô£U=4%9#\1e;*";*";*";*";*";*"9#\1eÂtSôôôôôôôôôôôôôôôôôôôôôôôôôôôùâùâóæáóæáùâùâ=4%ô£Uü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tùâ÷÷÷÷÷÷÷÷÷øøøùùùùùùúúúûûûùâfDPfDPøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ùâñ\9fZñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ\9fZñ\9fZñ\9fZñ¤VfDPfDPùâôôôôôôôôôùâñ¡\ô£Uñ\9fZñ¤Vô£Uó¢[ô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uù¨Xù¨Xô£Uñ¤V=4%9#\1e9#\1e;*";*";*";*"9#\1e9#\1eÂtSôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tâ\9dqôôôôõõ÷÷÷÷÷÷øøøøøøùùùúúúúúúÂtSfDPfDPúúúùùùùùùùùùøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ùâñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ¤Vñ¤VfDPfDPùâôôôôôôùâñ¤Vñ¤Vó¢[ñ¤Vô£Uó¢[ñ¤Vô£Uñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uù¨Xù¨Xñ¤V=4%9#\1e9#\1e;*";*";*";*";*"9#\1eÂtSôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô¨Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tùâôôôôôôôôôôõõ÷÷÷÷÷÷÷÷÷÷÷÷ùâfDPfDPfDPûûûúúúúúúúúúúúúúúúúúúúúúùùùùùùùùùùùùùùùùùùùâñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZó¢[ñ\9fZñ\9fZfDPfDPùâôôôùâñ¡\ñ\9fZó¢[ñ\9fZñ¤Vñ\9fZó¢[ô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uù¨Xù¨X=4%9#\1e9#\1e;*";*";*"9#\1e9#\1e9#\1eÂtSôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tâ\9dqôôôôôôôôôôôôôôôôôôôõõôõõ÷÷÷fDPfDPfDPfDPüüüüüüûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûúúúúúúùâñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZó¢[ñ\9fZñ\9fZfDPfDPùâùâñ\9fZñ\9fZó¢[ó¢[ó¢[ñ\9fZñ¤Vó¢[ô£Uñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uù¨Xù¨XÃ\85J9#\1e;*";*";*";*"9#\1e9#\1e;*"ÂtSóæáôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâù¨Xü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tùâôôôôôôôôôôôôôôôôôôôõõôõõê\93fDPÂtSÂtSfDPþþþþþþþþþþþþþþþýýýýýýýýýýýýüüüüüüüüüüüüýýýùâñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ¤Vñ¤VfDPfDPê\93ñ\9fZó¢[ñ\9fZó¢[ñ\9fZó¢[ñ¤Vñ\9fZô£Uñ\9fZñ\9fZô£Uô£Uô£Uô£Uô£Uô£Uù¨XÃ\90H9#\1e;*";*";*";*"9#\1e9#\1e;*"ÂtSóæáôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tú¹côôôôôôôôôôôôôôôôôôôôôôôôóæáÂtSfDPfDPfDPfDPÃÃùÃÃüÃÃüÃÃüÿÿÿÿÿÿþþþþþþþþþþþþÿÿÿÿÿÿÿÿÿÿÿÿùâñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤VfDPÂtSñ¤Vñ¤Vñ¤Vñ\9fZó¢[ó¢[ó¢[ñ\9fZó¢[ô£Uñ\9fZô£Uô£Uô£Uù¨Xô£Uô£Uô£UÃ\90H9#\1e;*";*";*";*";*"9#\1e9#\1eÂtSôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôú¹cü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«TùâôôôôõõôõõôõõôõõôõõôõõôõõùâfDPfDPfDPfDP=4%·¸ý·¸ý·¸ý·¸ý¿¿þ·¸ý·¸ý·¸ý·¸ý·¸ý¯®ý¯®ý¯®ý¯®ýùâñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤VÂtSñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vô£Uñ\9fZô£Uñ¤Vñ¤Vô£Uñ¤Vô£Uô£Uô£Uô£Uô£Uô£U9#\1e;*";*";*"9#\1e9#\1e9#\1e9#\1eÂtSôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôùâü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tû°Oü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«TÂtS÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ÂtSfDPfDPfDPfDP=4%\91\91ÿ\91\91ÿ\91\91ÿ\91\91ÿ\89\89ÿ\89\89ÿ\89\89ÿ\89\89ÿ\89\89ÿ\91\91ÿ\91\91ÿ\91\91ÿ\9d\9dý\9d\9dýÃÃïñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vô£Uñ¤Vñ¤Vñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uñ\9fZ=4%;*";*";*"9#\1e9#\1e;*";*"fDP÷÷÷÷÷÷÷÷÷ôõõôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôõõóæáü«Tü«Tü«Tû°Oü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tû°Oü«Tü«Tü«Tü«Tü«Tü«TùâøøøøøøøøøøøøùùùùùùùùùùùùôõõfDPfDPfDP=4%=4%;*"mmýmmýrrÿrrÿrrÿrrÿrrÿwwþ||þ\85\85ü\89\89ÿ\91\91ÿ\91\91ÿ\9d\9dýÃÃùñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ\9fZñ¤Vñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vô£Uñ¤Vñ¤Vñ¤Vñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uñ\9fZ=4%;*";*";*"9#\1e9#\1e;*";*"ÂtSùùùùùùøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷øøøøøøøøøøøøøøøøøøú¹cü«Tû°Oü«Tû°Oû°Oû°Oû°Oü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tú¹cúúúúúúúúúúúúúúúùùùùùùùùùùùùùâfDPfDP=4%=4%9#\1e=4%\\þ\\þ^^ÿ^^ÿddþjjýmmýmmýrrÿrrÿwwþ||þ\85\85ü\89\89ÿ·¸ýñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¤Vñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vô£Uñ¤Vñ¤Vñ¤Vñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£U=4%;*";*";*";*"9#\1e;*";*"fDPûûûüüüüüüüüüüüüüüüûûûûûûûûûûûûûûûûûûûûûúúúúúúúúúúúúùùùùùùùùùùâü«Tü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oü«Tü«TÃ\90HóæáûûûûûûúúúúúúúúúúúúûûûûûûûûûÂtSfDP=4%=4%=4%;*"=4%UUÿUUÿUUÿ\\þ^^ÿddþjjýmmýrrÿrrÿwwþwwþwwþwwþ£¢ûñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vô£Uñ¤Vñ¤Vñ¤Vñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uñ¤VfDP;*";*";*";*"9#\1e9#\1e;*"ÂtSÃÃïÿÿÿþþþþþþþþþþþþþþþþþþýýýþþþþþþþþþþþþýýýýýýýýýýýýýýýýýýýýýüüüü«Tü«Tü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oü«Tê\93üüüýýýýýýýýýýýýüüüüüüüüüüüüüüüê\93=4%fDPfDP9#\1e9#\1efDP\\þ^^ÿ^^ÿ^^ÿddþddþddþddþjjýmmýrrÿwwþwwþwwþ\9d\97ïñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£UfDP;*";*";*"9#\1e9#\1e9#\1e;*"fDP¨¨ý¯®ý·¸ý·¸ý·¸ý·¸ý¿¿þ¿¿þÃÃùÃÃùÃÃùÃÃùÃÃùÃÃüÃÃüÃÃüÿÿÿÿÿÿÃÃüþþþþþþú¹cü«Tü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OÂtSÃÃùÃÃüÃÃüÃÃüÃÃüÃÃüþþþþþþÃÃüÃÃüÃÃüê\93;*"=4%9#\1e9#\1e9#\1e9#\1e^^ÿ^^ÿ^^ÿddþddþddþjjýmmýrrÿrrÿwwþrrÿwwþwwþ·¸ýñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZó¢[ó¢[ñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ\9fZñ¤Vñ¤Vñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uñ¤VfDP;*";*"9#\1e;*"9#\1e9#\1e;*"=4%\85\85ü\85\85ü\89\89ÿ\89\89ÿ\91\91ÿ\91\91ÿ\91\91ÿ\91\91ÿ\91\91ÿ\91\91ÿ\91\91ÿ\91\91ÿ\91\91ÿ\91\91ÿ\91\91ÿ\91\91ÿ\91\91ÿ\9d\9dý£¢û£¢û¨¨ý¨¨ýü«Tü«Tü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oñ¤V\9d\97﨨ý¨¨ý£¢û£¢û\9d\9dý\9d\9dý\9d\9dý\9d\9dý\91\91ÿ\91\91ÿ\89\89ÿ\9d\97ï=4%9#\1e=4%9#\1e;*"9#\1e^^ÿ^^ÿddþddþmmýmmýrrÿrrÿwwþwwþ||þwwþwwþwwþÃÃùñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ\9fZñ¤Vñ¤Vñ¤Vó¢[ñ¤Vô£Uô£Uô£Uô£UÂtS;*";*";*"9#\1e;*";*";*";*"cdõddþ^^ÿ^^ÿ^^ÿ^^ÿ\\þ^^ÿ^^ÿ^^ÿ\\þ^^ÿ\\þ\\þ\\þ\\þ\\þ^^ÿ^^ÿddþddþ^^ÿê\93ü«Tü«Tü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OfDP\81\82úwwþmmýddþ\\þ\\þ\\þ\\þ\\þUUÿUUÿUUÿTTü=4%;*"=4%9#\1e9#\1e=4%^^ÿddþddþddþddþddþddþddþddþjjýmmýmmýmmýrrÿ¯®ýñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZó¢[ó¢[ñ\9fZñ¤Vó¢[ñ¤Vñ¤Vñ\9fZó¢[ô£UÂtS;*";*";*"9#\1e;*";*";*";*"i\ÃTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTýTTýTTýTTþTTþTTþTTþTTþTTþ{|øü«Tü«Tü«Tü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OÂtSFX¾\\þUUÿUUÿUUÿTTþTTþTTþTTþTTþTTþTTþTTþTTþ=4%9#\1e9#\1e=4%9#\1e;*"UUÿUUÿUUÿUUÿ\\þ^^ÿddþjjýmmýrrÿrrÿrrÿwwþwwþ\9d\97ïñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZó¢[ñ\9fZñ\9fZó¢[ñ\9fZñ¤Vñ¤VÂtS;*"9#\1e;*"9#\1e;*";*";*"=4%FX¾TTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýjjýù¨Xü«Tü«Tü«Tü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OúÂQ=4%TTþTTþTTþTTþTTþTTþTTþTTþTTþTTýTTýTTýTTýTTýcdõ9#\1e9#\1e9#\1e9#\1e;*"^^ÿ^^ÿddþddþjjýmmýjjýjjýmmýmmýmmýrrÿrrÿrrÿÃÃïñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZó¢[ó¢[ó¢[ó¢[ñ\9fZñ¤V;*";*";*";*"9#\1e;*";*";*"FX¾TTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýâ\9dqü«Tü«TúÂQü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°O=4%cdõTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTý=4%9#\1e;*"9#\1e=4%mmýmmýmmýmmýrrÿrrÿmmýmmýmmýmmýrrÿmmýmmýmmý\9d\97ïñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ¡\ó¢[ó¢[ó¢[ó¢[ó¢[ÂtS;*"9#\1e9#\1e9#\1e;*";*";*"9#\1ei\ÃTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýmmýü«Tü«Tü«TúÂQúÂQü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OÃ\90H=4%SSùTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTý\\þ=4%9#\1e9#\1efDPddþddþjjýmmýmmýmmýmmýrrÿrrÿmmýjjýddþ^^ÿ^^ÿ\9d\97ïñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ó¢[ó¢[ð\9f\;*";*"9#\1e;*";*";*";*";*"FX¾TTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTþâ\9dqü«Tü«Tü«Tü«TúÂQúÂQû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OÂtS[WæTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTþTTþTTþTTþTTþTTþi\Ã;*"fDPfDPddþddþjjýjjýmmýmmýmmýmmýmmýmmýjjýddþ^^ÿ\\þ\8b\8aúñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ó¢[ÂtS9#\1e9#\1e9#\1e;*";*";*"fDP;*"TD}TTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTýTTýTTýTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþÃÃùü«Tü«Tü«Tü«Tü«TúÂQúÂQû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oô¨TFX¾TTýTTýTTýTTýTTýTTýTTýTTýTTþTTþTTþTTþUUÿUUÿ\\þ^^ÿddþddþjjýi\ÃfDPfDPjjýddþddþddþ^^ÿ^^ÿ^^ÿ\\þ\\þUUÿUUÿUUÿUUÿUUÿ\9d\97ïñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ñ¤Vô¨Tô¨Tô¨Tñ¤Vó¢[ó¢[ñ\9fZ;*";*"=4%=4%;*";*";*";*"fDPTTüUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTý{|øü«Tü«Tü«Tü«Tü«Tü«TúÂQü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OúÂQ;*"SSùTTýTTýTTýTTýTTýTTþTTþTTþUUÿUUÿ^^ÿddþrrÿwwþ\85\85ü\89\89ÿ\91\91ÿ\91\91ÿ\91\92üfDPfDPfDPUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿTTþTTþTTþTTþ\85\85üñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ô¨Tô¨Tô¨Tô¨Tù¨Xô¨Tô¨Tù¨Xù¨Xù¨Xù¨Xô¨TfDP9#\1e;*";*";*";*";*";*"TD}TTüUUÿUUÿUUÿUUÿUUÿUUÿUUÿTTþFX¾FX¾##aTD}(&iFX¾RR÷TTþTTþTTþTTþTTþTTýTTýTTýù¨Xü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tû°Oü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OÂtSFX¾TTþTTþTTþTTþUUÿ\\þddþjjý||þ\81\82ú\91\91ÿ\91\91ÿ\9d\9dý\9d\9dý¨¨ý¨¨ý·¸ý·¸ý·¸ý·¸ýfDPfDPfDPTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþ\85\85üñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ô¨Tô¨Tô¨TúÂQúÂQúÂQû°Oû°Oû°Oû°Oû°Oû°OúÂQúÂQÂtS9#\1e;*";*";*";*";*"9#\1efDPTTüTTþTTþTTþTTþTTþTTþTTüTD}\ 6\12
+\ 6\12
+\ 6\12
+\ 6\12
+\ 6\12
+\ 6\12
+\ 6\12
+\ 6\12
+TTýTTýTTýTTýTTýTTýTTýê\93ü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oô¨TyoÃUUÿ\\þ^^ÿmmýrrÿ\85\85ü\91\91ÿ\9d\9dý¨¨ý¯®ý·¸ý¿¿þÃÃùÃÃüÃÃüÃÃüÃÃüÿÿÿÿÿÿÿÿÿê\93fDPfDPÂtSTTýTTýTTýTTýTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþ\8b\8aúó¢[ó¢[ó¢[ñ¤Vô¨Tô¨Tô¨Tô¨Tô¨TúÂQúÂQúÂQúÂQû°OúÂQúÂQû°Oû°Oû°Oû°Oû°Oû°OÂtS=4%9#\1e;*";*";*";*"9#\1efDPcdõTTþTTþTTþTTþTTþTTþSSù\11\1a7\ 6\12
+\ 6\12
+\ 6\12
+\ 6\12
+\ 6\12
+\ 6\12
+\ 6\12
+\ 6\12
+FX¾TTýTTýTTýTTýTTýTTý\9d\97ïü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OÂtSmmýrrÿ\81\82ú\91\91ÿ\91\92ü£¢û¯®ý·¸ý¿¿þÃÃüÃÃüÃÃüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþýýýùùùfDPfDPfDPù¨XTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTý\9d\97ïô¨Tô¨Tô¨Tô¨TúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQû°OúÂQû°Oû°Oû°Oû°Oû°Oô¨T;*";*";*";*"9#\1e;*"9#\1e;*"SSùTTýTTýTTýTTýTTýTTý[Wæ\11\1a7\ 6\12
+\ 6\12
+\ 6\12
+\ 6\12
+\11\1a7\ 6\12
+\ 6\12
+\ 6\12
+\11\1a7TTýTTýTTýTTýTTýTTýjjýû°Oû°Oû°Oû°Oû°Oü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tû°Oû°OúÂQyoÃ||þ\89\89ÿ\91\92ü¨¨ý·¸ý¿¿þÃÃùÃÃüÃÃüÃÃüÃÃüÿÿÿþþþþþþýýýýýýýýýýýýýýýýýýê\93fDPfDPð\9f\ù¨XTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTýTTý\9d\97ïô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨TúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQû°Oû°OúÂQfDP;*";*";*";*"fDP9#\1e;*"cdõrrü\8b\8aú\8b\8aú\9d\97ï\8b\8aú\9d\97ï\9d\97ïÂtSìAZÃ1D\84\1f+fDPfDP=4%\ 6\12
+\ 6\12
+\ 6\12
+QQôTTýTTýTTýTTýTTýTTýú¹cû°Oû°Oû°Oû°Oû°Oû°Oú¹cú¹cû°Oü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«TÃ\85J\9d\9dý¨¨ý·¸ý¿¿þÃÃüÃÃüÿÿÿÿÿÿþþþþþþþþþýýýýýýüüüûûûûûûûûûûûûúúúúúúúúúfDPfDPfDPù¨Xù¨XTTýTTýTTýTTýTTýTTýTTüTTüTTüTTüTTüTTü\8b\8aúó¢[ó¢[ó¢[ô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tù¨XúÂQúÂQúÂQÃ\85J;*";*";*"9#\1e;*";*";*"ìAZúCXúCXúCXúCXúCXúCXúCXúCXúCXúCXúCXìAZìAZö3Hö3Hö3HÃ1DÃ1D{|øcdõ\\þTTýTTýTTýê\93û°Oû°Oú¹cû°Oû°Oû°Oû°Oú¹cú¹cú¹cú¹cú¹cú¹cú¹cû°Oü«Tü«Tü«Tü«Tü«Tü«Tô¨Tê\93ÃÃüÿÿÿþþþþþþþþþþþþýýýýýýýýýüüüûûûûûûúúúúúúúúúúúúúúúúúúùùùùùùê\93fDP=4%ñ¤Vù¨Xù¨XTTýTTýTTüTTüTTüTTüTTüTTüTTüTTüTTürrüñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ó¢[ó¢[ô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tù¨Xô¨TÃ\90H=4%;*";*";*"9#\1e;*";*"ìAZö3HúCXö3HúCXúCXúCXúCXúCXö3Hö3HìAZìAZö3Hö3Hö3Hö3Hö3HúCXö3HÃ1DÃ1DìAZìAZyoÃÃÃùû°Oû°Oû°Oú¹cú¹cú¹cú¹cú¹cû°Oú¹cú¹cú¹cú¹cú¹cú¹cû°Oû°Oü«Tü«Tü«Tü«Tü«Tâ\9dqÃÃüÿÿÿþþþþþþþþþþþþýýýýýýýýýýýýüüüüüüüüüüüüüüüüüüûûûûûûûûûúúú÷÷÷fDPfDPÂtSù¨Xù¨Xù¨XTTýTTüTTüTTüTTüTTüTTüTTüTTüTTü\9d\97ïñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ñ¡\ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ô¨Tô¨Tô¨Tó¢[ó¢[ó¢[ñ¤Vó¢[ù¨XÂtS=4%;*";*"9#\1e;*"=4%ùâê\93â\9dqúCXúCXúCXúCXúCXúCXö3HúCXúCXö3Hö3HìAZìAZö3HÃ1DÃ1D\84\1f+\84\1f+Ã1DÃ1D\84\1f+Ã1DúCXû°Oû°Oû°Oû°Oû°Oú¹cú¹cú¹cú¹cú¹cû°Oû°Oû°Oû°Oü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tô¨TÃÃùÃÃùÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþþþþýýýüüüûûûûûûúúúùùùøøø÷÷÷÷÷÷ê\93fDPfDPù¨Xù¨Xù¨Xù¨XTTüTTüTTüTTüTTüTTüTTüTTüTTü\81\82úâ\9dqñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\Ã\90H;*";*";*"9#\1e;*";*"fDPÂtSÂtSâ\9dqúCXúCXö3HúCXìAZÃ1Dö3Hö3HìAZÃ1Dö3Hö3HÃ1D\84\1f+\84\1f+Ã1D\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+Ã\85Jû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cû°Oê\93·¸ý·¸ý¿¿þÃÃüÿÿÿþþþýýýýýýüüüûûûúúúùùùùùùøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ôôôfDPfDPô¨Tü«Tü«Tü«Tü«TTTüTTüTTüTTüTTüTTüTTüTTü\81\82úñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ÂtS;*";*"9#\1e;*";*"\84\1f+ùâôôôóæáúCXúCXö3HúCXö3Hö3HìAZÃ1Dö3H\84\1f+ö3HÃ1D\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+Ã\90Hû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cÃÃïýýýýýýüüüüüüûûûûûûúúúúúúùùùøøø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ôõõôõõôõõôôôôôôÂtSfDPÂtSúÂQû°Oü«TúÂQúÂQTTüTTüTTüTTüTTüTTýTTý\81\82úñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\fDP;*"9#\1e;*";*";*"úCXúCXúCXúCXúCXö3HúCXúCXìAZÃ1DìAZìAZìAZÃ1D\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+Ã\85JúÂQû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cùâúúúùùùùùùøøøøøøøøø÷÷÷÷÷÷÷÷÷ôõõôõõôôôôôôôôôôôôôôôôôôôôôôôôôôôê\93fDP=4%û°Oû°Oû°Oû°Oû°Oû°OTTüTTüTTüTTýTTýTTý\8b\8aúñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZ;*"9#\1e=4%;*"\84\1f+Ã1Dö3HúCXö3Hö3HúCXö3HúCXö3HÃ1DÃ1DÃ1DÃ1D\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+Ã1Dù¨Xù¨Xù¨Xù¨Xü«Tü«Tü«Tü«Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹cú¹c÷÷÷ôõõôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôóæáfDP=4%ñ¤Vû°Oû°Oû°Oû°Oû°Oû°OTTýTTýTTýTTýTTý\9d\97ïñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZ;*"9#\1e;*";*"\84\1f+ö3HúCXúCXö3HúCXúCXìAZÃ1Dö3HÃ1DÃ1DìAZÃ1D\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+9#\1e9#\1eÃ1Dù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xü«Tü«Tü«Tü«Tü«Tü«Tû°Oû°Oû°Oû°Oû°Oú¹cú¹cú¹cú¹cú¹cú¹cú¹cê\93ôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôê\93fDPÃ\85Jû°Oû°Oû°Oû°Oû°Oû°Oû°OTTýTTýTTýTTý\85\85üñ¡\ñ¡\ó¢[ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\9#\1e;*";*";*"ìAZö3HìAZö3HúCXö3HúCXìAZ9#\1e\ 6\12
+9#\1e\84\1f+ìAZÃ1D\84\1f+\84\1f+\84\1f+9#\1e\84\1f+\84\1f+9#\1e\ 6\12
+\ 6\12
+Ã\90Hù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xü«Tü«Tü«Tü«Tü«Tü«Tû°Oû°Oû°Oû°Oû°Oú¹cú¹cóæáôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôóæáfDPfDPû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OTTýTTýTTþ\9d\97ïñ¡\ñ¡\ó¢[ó¢[ó¢[ó¢[ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZ9#\1e;*";*"\84\1f+ö3Hö3HìAZö3Hö3Hö3HÃ1DÃ1D\ 6\12
+\ 6\12
+\ 6\12
+\ 6\12
+Ã1DÃ1D\84\1f+\84\1f+\84\1f+\84\1f+9#\1e\ 6\12
+\ 6\12
+9#\1eÃ\90Hù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xü«Tù¨Xù¨Xü«Tü«Tü«Tû°Oû°Oû°Oû°Oû°OùâôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôfDP=4%û°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OTTþTTþrrüñ¡\ó¢[ó¢[ó¢[ó¢[ó¢[ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZ9#\1e;*";*"[WæyoÃÃ1DÃ1Dö3HìAZÃ1DÃ1DÃ1D\84\1f+\ 6\12
+\ 6\12
+\ 6\12
+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+9#\1e\ 6\12
+\ 6\12
+9#\1eñ\9fZù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xü«Tü«Tü«Tù¨Xü«Tü«Tü«Tü«Tú¹cùâôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôê\93fDPÃ\90Hû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OTTþ\85\85üâ\9dqñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZ;*"=4%TD}TTýTTý\\þTD}\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+9#\1e9#\1e\84\1f+\84\1f+9#\1e9#\1e\ 6\12
+\ 6\12
+\ 6\12
+\ 6\12
+Ã\90Hô£Uù¨Xù¨Xô£Uô£Uù¨Xô£Uù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xü«Tü«Tü«Tü«Tü«Tü«Tú¹côôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô÷÷÷÷÷÷ùùùùùùùùù÷÷÷fDPÂtSû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°O\85\85üñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZ;*";*"i\ÃTTýTTþTTþTTþTTþcdõTD}9#\1e\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+\84\1f+9#\1e9#\1e\ 6\12
+\ 6\12
+\ 6\12
+Ã\85Jô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xü«Tü«Tü«Tü«Tü«Tü«Tù¨Xü«Tù¨Xü«Tü«Tô£Uùâôôôôôôôôôôôôôõõôõõ÷÷÷÷÷÷÷÷÷øøøøøøùùùùùùùùùùùùúúúûûûüüüüüüÂtSÂtSô¨Tü«Tü«Tü«Tü«Tù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZ=4%=4%yoÃ^^ÿjjýjjýwwþ||þ\91\91ÿ\91\91ÿ\9d\9dý¨¨ýÃÃùÂtS;*"9#\1e9#\1e\84\1f+9#\1e\ 6\12
+\ 6\12
+\ 6\12
+ÂtSô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uù¨Xù¨Xù¨Xù¨Xü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tü«Tô£U÷÷÷÷÷÷÷÷÷øøøøøøùùùúúúúúúûûûÃÃüÃÃü¿¿þÃÃù¿¿þ¿¿þÃÃùÃÃù¿¿þ¿¿þÃÃïfDPô£Uù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\fDPfDP\9d\97﨨ý·¸ý¿¿þÃÃüÃÃüÃÃüÃÃüýýýüüüüüüûûûûûûûûûùâê\93fDP\ 6\12
+\ 6\12
+ÂtSô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uù¨Xù¨Xù¨Xù¨Xü«Tü«Tü«Tü«Tü«Tü«Tü«Tú¹cýýýÃÃüÃÃù·¸ý¨¨ý\91\92ü\89\89ÿ\85\85üwwþmmýwwþrrÿrrÿmmýrrÿddþddþddþmmýfDPô£Uù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xô£Uù¨Xó¢[ñ¤Vñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\fDPfDPê\93úúúúúúùùùùùùùùùøøøøøøøøøøøøøøøøøøøøø÷÷÷÷÷÷÷÷÷÷÷÷fDPÃ\90Hô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô¨Tü«Tô£Uô¨Tô¨Tô¨Tô¨Tü«Tü«Tü«Tù⨨ý\9d\9dý\89\89ÿ||þmmý^^ÿ\\þ^^ÿ\\þUUÿUUÿTTþTTþTTþTTýTTýTTýTTüfDPÂtSô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uù¨X\9d\97ïñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ¡\ñ¡\fDPfDPùâôõõôôôôõõôõõôôôôôôôõõôõõôôôôôôôôôôôôôôôôôôôôôùâú¹có¢[ô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô¨Tü«Tô£Uô¨Tù¨Xô¨Tô¨Tô£U·¸ý||þmmý\\þUUÿTTþTTþTTþTTýTTýTTüTTüTTüTTüSSûSSûSSûSSûTD}ÂtSô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uñ¡\cdõñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\fDPfDPê\93ôôôôôôôôôôôôôôôôôôôôôôôôôôôôõõôõõôõõ÷÷÷÷÷÷ùâó¢[ñ¤Vó¢[ñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô¨Tô£Uô¨Tô¨Tô¨Tô£Uô£Uô¨T\\þUUÿTTþTTþTTþTTþUUÿUUÿTTþTTþTTþTTþTTþTTýTTýTTýTTýcdõfDPñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£U\9d\97ïSSûó¢[ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\fDPfDPê\93÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷øøøùùùùùùùùùùùùúúúúúúúúúùâú¹cñ¤Vó¢[ñ¤Vó¢[ô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uù¨Xñ¡\TTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTþTTýTTýTTýTTýcdõfDPñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£UTTýTTýñ¡\ñ¡\ñ¡\ó¢[ó¢[ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\fDPfDPùâûûûûûûüüüýýýüüüýýýýýýýýýýýýþþþýýýýýýê\93ó¢[ó¢[ó¢[ó¢[ó¢[ñ\9fZô£Uô£Uñ¤Vñ\9fZô£Uô£Uô£Uô£Uô£Uñ¤Vô£Uù¨Xô£Uù¨Xô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô¨Tê\93UUÿUUÿUUÿUUÿUUÿUUÿUUÿTTþTTþTTþTTþTTþTTþTTþTTþ\\þfDPÃ\90Hô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£U\8b\8aúwwþ\81\82úñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ó¢[ó¢[ñ¡\ï¡\Ã\90Hó¢[ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ï¡\fDPfDP\9d\97ï¿¿þ¯®ý¯®ý£¢û\9d\9dý\91\91ÿ\91\91ÿ\85\85ü\91\91ÿ\91\91ÿ\91\91ÿê\93ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ñ\9fZó¢[ó¢[ÂtS\84\1f+ó¢[ù¨Xô£Uù¨Xù¨Xù¨Xù¨Xù¨Xô£Uù¨Xô£Uô£Uô£Uô£Uù¨Xù¨Xù¨Xù¨Xê\93^^ÿ\\þ^^ÿddþddþmmýrrÿmmýmmýddþ^^ÿ\\þ\\þ\\þ\\þÂtSÂtSô£Uô£Uô£Uô£Uô£Uô£Uù¨Xô£Uô£Uù¨Xô£Uô£Uô£Uê\93¨¨ý\9d\9dý\89\89ÿñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ï¡\=4%ÂtSó¢[ñ¤Vñ¤Vô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tñ¤Vñ¤Vô¨Tñ¤Vó¢[fDPfDPcdõ\\þ\\þTTýTTýTTýTTýTTýTTýTTýcdõê\93ù¨Xù¨Xù¨Xù¨Xñ¤Vó¢[ó¢[ó¢[ó¢[ó¢[ù¨Xù¨Xù¨Xó¢[ù¨XÃ\85J9#\1efDPù¨Xó¢[ó¢[ó¢[ó¢[ó¢[ù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨XÃÃïmmýjjýddþ\\þUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿyoÃÂtSù¨Xô£Uù¨Xù¨Xù¨Xô£Uù¨Xù¨Xô£Uù¨Xô£Uô£Uó¢[ñ¡\\91\91ÿ\91\91ÿ\85\85ümmýñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ð\9f\fDP=4%ÂtSñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ô¨Tô¨Tô¨Tô¨Tô¨TfDPfDPi\ÃSSûSSúSSúSSúSSúSSúSSûSSûcdõô¨Tô¨Tô¨Tô¨Tô¨Tô¨Tù¨Xù¨Xù¨Xô¨Tô¨TúÂQúÂQúÂQúÂQúÂQÂtS9#\1e;*"fDPúÂQü«TúÂQúÂQúÂQúÂQúÂQü«Tù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨X¯®ýUUÿTTþTTþTTþUUÿUUÿUUÿUUÿ^^ÿddþmmýmmýmmýrrüÂtSù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ñ\9fZ¿¿þ¨¨ý¨¨ý£¢û\9d\9dýñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ¡\\84\1f+;*";*"ÂtSñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vô¨TÂtSfDPi\ÃRRøRRøSSùSSùSSùSSùSSú\8b\8aúô¨TúÂQúÂQù¨XúÂQúÂQúÂQô¨TúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQÃ\85J9#\1e;*"9#\1eÂtSü«TúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQ·¸ý\81\82úrrÿwwþmmýrrÿwwþ\81\82ú\89\89ÿ\91\91ÿ\91\91ÿ\9d\9dý\9d\9dý\9d\9dýÂtSñ¤Vù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xù¨Xó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ùâûûûûûûüüüüüüÃÃüñ¤Vñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZ\84\1f+;*";*";*"ÂtSñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ñ¤Vñ¤Vô¨Tô¨Tô¨Tô¨Tï¡\fDPyoÃRRøRRøSSùSSùSSùSSùê\93úÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQúÂQÂtS;*"9#\1e9#\1e;*"=4%ü«Tü«Tü«Tü«Tù¨Xù¨Xù¨Xü«Tü«TúÂQúÂQúÂQúÂQúÂQúÂQû°OúÂQû°Oú¹cÃÃùÃÃùÃÃù¿¿þÃÃùÃÃüÃÃüÃÃüÃÃüýýýýýýüüüfDPô¨Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OúÂQù¨Xù¨Xù¨Xú¹cûûûûûûûûûûûûüüüýýýñ¤Vñ¤Vñ¤Vñ\9fZñ¤Vñ\9fZñ\9fZñ\9fZñ\9fZ\84\1f+;*";*";*";*"fDPñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ó¢[ÂtSi\ÃRRøRRøRRøSSùrrüâ\9dqó¢[ó¢[ô¨Tô¨Tô¨Tô¨Tù¨Xô¨Tô¨Tô¨Tô¨Tù¨Xù¨Xù¨Xù¨Xù¨XÂtS;*"9#\1e9#\1efDP=4%ÂtSù¨Xó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ù¨Xù¨Xù¨Xù¨XúÂQúÂQû°Oû°Oú¹cÃÃüÃÃüÃÃüÃÃüÃÃüÃÃü¯®ý¯®ý£¢û¯®ý¨¨ýê\93ô¨Tû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oú¹cóæáýýýþþþþþþþþþýýýýýýñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ\9fZfDP;*"9#\1e9#\1e9#\1e=4%ÂtSñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ê\93\9d\97ï\9d\97ïê\93ê\93ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ó¢[ó¢[ù¨Xô¨Tù¨Xô¨Tù¨Xó¢[ÂtS9#\1e9#\1e;*"fDPôõõê\93fDPó¢[ó¢[ó¢[ó¢[ñ\9fZó¢[ó¢[ó¢[ù¨Xó¢[ù¨Xó¢[ù¨Xó¢[ó¢[ù¨Xù¨Xó¢[ù¨XÃÃù\85\85ürrÿjjý^^ÿUUÿUUÿ\\þ\\þ\\þ\9d\97ïù¨Xü«TúÂQúÂQû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oú¹cùâýýýüüüüüüûûûûûûüüüüüüñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¤Vñ\9fZfDP;*"=4%9#\1e;*";*";*"ÂtSñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZð\9f\ð\9f\ñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ\9fZñ\9fZñ\9fZñ¡\ñ\9fZfDP9#\1e9#\1e;*"=4%óæá÷÷÷ê\93ÂtSó¢[ó¢[ô£Uô£Uñ\9fZñ\9fZô£Uô£Uó¢[ù¨Xô£Uù¨Xô£Uô£Uô£Uô£Uô£Uô£Uô£UÃÃï^^ÿTTþTTýTTüTTüTTüTTýjjýâ\9dqù¨Xù¨Xù¨Xó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ù¨Xü«TúÂQû°OúÂQ\9d\9dý£¢û\9d\9dý£¢û\9d\9dý£¢û\9d\9dý\91\91ÿ\85\85üñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZ\84\1f+9#\1e9#\1e;*";*";*";*";*"ÂtSñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¤Vñ¡\ñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ\9fZñ¡\ñ¡\ñ\9fZó¢[ñ\9fZñ¤VÂtS=4%;*";*"9#\1eóæáôôôôõõê\93ÂtSñ\9fZñ¤Vô£Uô£Uô£Uñ\9fZñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uù¨Xô£Uô£Uô£Uô£Uô£Uô£U\9d\97ïUUÿUUÿTTþTTþjjýê\93ñ¤Vó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[\9d\97ïUUÿ\\þUUÿUUÿTTþTTþTTþTTþTTþñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZ=4%9#\1e9#\1e;*";*"9#\1e9#\1e9#\1e9#\1eÂtSñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ\9fZñ\9fZñ\9fZñ¡\ñ¡\ñ\9fZó¢[ñ\9fZ=4%9#\1e;*"9#\1e=4%ôôôøøøùùùùùùùâÂtSñ\9fZñ¤Vó¢[ñ\9fZô£Uô£Uñ¤Vñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uê\93ÃÃïê\93ê\93ô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uñ¤Vñ\9fZñ¤Vñ¤Vê\93TTþTTþTTþTTþTTþTTþTTþUUÿUUÿUUÿñ\9fZñ\9fZñ\9fZñ\9fZ=4%=4%fDP;*";*"9#\1e9#\1e;*";*"TD}\8b\8aúñ\9fZñ\9fZñ\9fZñ\9fZð\9f\ñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZÂtS;*"9#\1e9#\1efDPóæáùùùøøøùùùùùùùâÂtSó¢[ñ\9fZñ¤Vô£Uô£Uó¢[ó¢[ô£Uô£Uñ\9fZñ¤Vô£Uñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uâ\9dqddþTTþTTþTTþTTþTTþTTþTTþUUÿUUÿUUÿô¨Tô¨Tñ¤VfDPfDP=4%fDP9#\1e9#\1e9#\1e;*";*"TD}TTý\81\82úð\9f\ð\9f\ð\9f\ð\9f\ð\9f\ð\9f\ð\9f\ð\9f\ð\9f\ð\9f\ñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ¡\ñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZÂtS9#\1e9#\1e9#\1eÂtSóæáýýýýýýýýýþþþþþþùâÂtSñ\9fZñ\9fZó¢[ó¢[ó¢[ñ\9fZñ¤Vó¢[ó¢[ó¢[ô£Uô£Uñ\9fZñ¤Vñ¤Vñ\9fZñ¤Vñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£UÃ\90HcdõTTþTTýTTýTTýTTýTTýTTýTTýTTýSSùSSùû°Oû°OÂtS;*"fDP=4%fDP9#\1e;*";*"9#\1efDPTTýTTý\8b\8aúô¨Tô¨Tñ¤Vñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ÂtS9#\1e9#\1e;*"fDPÃÃüÃÃù·¸ý·¸ý¨¨ý¯®ý\9d\9dýê\93ÂtSó¢[ó¢[ñ\9fZñ\9fZó¢[ó¢[ó¢[ñ\9fZñ¤Vñ¤Vó¢[ó¢[ó¢[ó¢[ô£Uô£Uô£Uô£Uô£Uô£Uô£Uñ¤Vñ¤Vñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£U\9d\97ïSSûSSûSSûSSûSSûSSû[Wæ[WæTD}\84\1f+Ã1Dö3Hû°OÂtS=4%9#\1e9#\1e;*";*"=4%;*"9#\1eTD}TTýTTýTTýTTþúÂQúÂQúÂQô¨Tó¢[ó¢[ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ÂtS9#\1e9#\1e;*"fDP\91\92ü\91\91ÿ\81\82úwwþrrÿjjý^^ÿ\\þyoÃfDPó¢[ó¢[ó¢[ñ\9fZñ\9fZñ\9fZñ\9fZó¢[ó¢[ó¢[ñ\9fZñ\9fZñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uó¢[ó¢[ô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£U\9d\97ïSSùSSùSSùSSùQQôTD}fDP\84\1f+\84\1f+Ã1Dö3Hö3HúCXÂtS;*";*";*";*";*";*"9#\1e=4%TD}SSúSSúSSûTTüTTüû°Oû°Oû°OúÂQû°Oû°Oû°OúÂQû°Oû°Oû°OúÂQúÂQô¨Tó¢[ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ÂtS9#\1e;*";*";*"\\þUUÿTTþTTýTTýTTýTTýTTýTTý[Wæ=4%ñ\9fZñ\9fZñ\9fZó¢[ó¢[ñ\9fZñ\9fZñ\9fZñ\9fZó¢[ó¢[ó¢[ó¢[ó¢[ñ\9fZñ\9fZô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uñ¤Vñ¤Vê\93RRøRRøRRøRRøTD}9#\1e9#\1e9#\1e\84\1f+â\9dqóæáÃÃïìAZö3HfDP;*";*"9#\1e9#\1e9#\1e9#\1e;*"TD}RRøRRøRRøRRøRRøRRøâ\9dqúÂQúÂQû°Oû°Oû°Oû°Oû°OúÂQû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°Oû°OúÂQû°OúÂQúÂQô¨Tô¨Tñ¤Vó¢[ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\fDP;*";*"9#\1e=4%SSùSSûSSûSSúSSúSSúSSúSSúSSúSSúi\Ã=4%ñ\9fZñ¡\ñ\9fZñ\9fZñ\9fZñ\9fZó¢[ó¢[ñ\9fZó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ñ\9fZñ\9fZô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vâ\9dqTTüTTüTTý\\þfDP9#\1e9#\1e9#\1e\84\1f+ö3Hê\93üüüøøøfDPúCX;*"=4%9#\1efDP;*";*";*"i\ÃRRøRRøRRøRRøRR÷RR÷RR÷\8b\8aúó¢[ó¢[ó¢[ó¢[ó¢[ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ó¢[ñ¤Vñ¤Vó¢[ó¢[ñ¡\ÂtS9#\1e9#\1e9#\1e=4%SSùTTýTTýTTýTTýTTýTTýTTýTTüTTüTTýcdõ;*"Ã\85Jñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZñ\9fZó¢[ó¢[ñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vô£Uô£Uô£Uô£Uô£Uô£Uô£Uô£Uó¢[ó¢[ó¢[ó¢[ó¢[ñ¤Vñ¤Vñ¤Vñ¤VÃ\90Hcdõ^^ÿ^^ÿddþTD}9#\1e\84\1f+9#\1eÃ1Dö3HìAZê\93ÿÿÿTD}\ 6\12
+úCX=4%9#\1e=4%;*";*"=4%TD}SSùSSùSSùRRøRR÷RR÷RR÷RR÷rrüñ¤Vñ¤Vñ¤Vó¢[ó¢[ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ñ¡\ÂtS9#\1e9#\1e;*"fDPSSùTTýTTþTTþUUÿUUÿTTþTTþTTýTTüTTüSSûcdõ;*"fDPñ¡\ó¢[ñ\9fZñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ\9fZñ\9fZñ\9fZñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vñ¤Vù⯮ý·¸ý·¸ý·¸ý=4%9#\1e\84\1f+\84\1f+Ã1Dö3HìAZúCXóæáýýýê\93úCX
\ No newline at end of file
--- /dev/null
+#include "image.h"
+#include "tiffio.h"
+#include "iolayer.h"
+
+
+
+/*
+=head1 NAME
+
+tiff.c - implements reading and writing tiff files, uses io layer.
+
+=head1 SYNOPSIS
+
+ io_glue *ig = io_new_fd( fd );
+ i_img *im = i_readtiff_wiol(ig, -1); // no limit on how much is read
+ // or
+ io_glue *ig = io_new_fd( fd );
+ return_code = i_writetiff_wiol(im, ig);
+
+=head1 DESCRIPTION
+
+tiff.c implements the basic functions to read and write tiff files.
+It uses the iolayer and needs either a seekable source or an entire
+memory mapped buffer.
+
+=head1 FUNCTION REFERENCE
+
+Some of these functions are internal.
+
+=over 4
+
+=cut
+*/
+
+
+
+
+
+/*
+=item comp_seek(h, o, w)
+
+Compatability for 64 bit systems like latest freebsd (internal)
+
+ h - tiff handle, cast an io_glue object
+ o - offset
+ w - whence
+
+=cut
+*/
+
+static
+toff_t
+comp_seek(thandle_t h, toff_t o, int w) {
+ io_glue *ig = (io_glue*)h;
+ return (toff_t) ig->seekcb(ig, o, w);
+}
+
+
+/*
+=item i_readtiff_wiol(ig, length)
+
+Retrieve an image and stores in the iolayer object. Returns NULL on fatal error.
+
+ ig - io_glue object
+ length - maximum length to read from data source, before closing it
+
+=cut
+*/
+
+i_img*
+i_readtiff_wiol(io_glue *ig, int length) {
+ i_img *im;
+ uint32 width, height;
+ uint16 channels;
+ uint32* raster;
+ int tiled, error;
+ TIFF* tif;
+
+ error = 0;
+
+ /* Add code to get the filename info from the iolayer */
+ /* Also add code to check for mmapped code */
+
+ io_glue_commit_types(ig);
+ mm_log((1, "i_readtiff_wiol(ig 0x%p, length %d)\n", ig, length));
+
+ tif = TIFFClientOpen("Iolayer: FIXME",
+ "rm",
+ (thandle_t) ig,
+ (TIFFReadWriteProc) ig->readcb,
+ (TIFFReadWriteProc) ig->writecb,
+ (TIFFSeekProc) comp_seek,
+ (TIFFCloseProc) ig->closecb,
+ (TIFFSizeProc) ig->sizecb,
+ (TIFFMapFileProc) NULL,
+ (TIFFUnmapFileProc) NULL);
+
+ if (!tif) {
+ mm_log((1, "i_readtiff_wiol: Unable to open tif file\n"));
+ return NULL;
+ }
+
+ TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width);
+ TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height);
+ TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &channels);
+ tiled = TIFFIsTiled(tif);
+
+ mm_log((1, "i_readtiff_wiol: width=%d, height=%d, channels=%d\n", width, height, channels));
+ mm_log((1, "i_readtiff_wiol: %stiled\n", tiled?"":"not "));
+ mm_log((1, "i_readtiff_wiol: %sbyte swapped\n", TIFFIsByteSwapped(tif)?"":"not "));
+
+ im = i_img_empty_ch(NULL, width, height, channels);
+
+ /* TIFFPrintDirectory(tif, stdout, 0); good for debugging */
+
+ if (tiled) {
+ int ok = 1;
+ uint32 row, col;
+ uint32 tile_width, tile_height;
+
+ TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tile_width);
+ TIFFGetField(tif, TIFFTAG_TILELENGTH, &tile_height);
+ mm_log((1, "i_readtiff_wiol: tile_width=%d, tile_height=%d\n", tile_width, tile_height));
+
+ raster = (uint32*)_TIFFmalloc(tile_width * tile_height * sizeof (uint32));
+ if (!raster) {
+ TIFFError(TIFFFileName(tif), "No space for raster buffer");
+ return NULL;
+ }
+
+ for( row = 0; row < height; row += tile_height ) {
+ for( col = 0; ok && col < width; col += tile_width ) {
+ uint32 i_row, x, newrows, newcols;
+
+ /* Read the tile into an RGBA array */
+ if (!TIFFReadRGBATile(tif, col, row, raster)) {
+ ok = 0;
+ break;
+ }
+ newrows = (row+tile_height > height) ? height-row : tile_height;
+ mm_log((1, "i_readtiff_wiol: newrows=%d\n", newrows));
+ newcols = (col+tile_width > width ) ? width-row : tile_width;
+ for( i_row = 0; i_row < tile_height; i_row++ ) {
+ for(x = 0; x < newcols; x++) {
+ i_color val; /* FIXME: Make sure this works everywhere */
+ val.ui = raster[x+tile_width*(tile_height-i_row-1)];
+ i_ppix(im, col+x, row+i_row, &val);
+ }
+ }
+ }
+ }
+ } else {
+ uint32 rowsperstrip, row;
+ TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip);
+ mm_log((1, "i_readtiff_wiol: rowsperstrip=%d\n", rowsperstrip));
+
+ raster = (uint32*)_TIFFmalloc(width * rowsperstrip * sizeof (uint32));
+ if (!raster) {
+ TIFFError(TIFFFileName(tif), "No space for raster buffer");
+ return NULL;
+ }
+
+ for( row = 0; row < height; row += rowsperstrip ) {
+ uint32 newrows, i_row;
+
+ if (!TIFFReadRGBAStrip(tif, row, raster)) {
+ error++;
+ break;
+ }
+
+ newrows = (row+rowsperstrip > height) ? height-row : rowsperstrip;
+ mm_log((1, "newrows=%d\n", newrows));
+
+ for( i_row = 0; i_row < newrows; i_row++ ) {
+ uint32 x;
+ for(x = 0; x<width; x++) {
+ i_color val; /* FIXME: Make sure this works everywhere */
+ val.ui = raster[x+width*(newrows-i_row-1)];
+ i_ppix(im, x, i_row+row, &val);
+ }
+ }
+ }
+
+ }
+ if (error) {
+ mm_log((1, "i_readtiff_wiol: error during reading\n"));
+ }
+ _TIFFfree( raster );
+ if (TIFFLastDirectory(tif)) mm_log((1, "Last directory of tiff file\n"));
+ return im;
+}
+
+
+
+/*
+=item i_writetif_wiol(im, ig)
+
+Stores an image in the iolayer object.
+
+ im - image object to write out
+ ig - io_object that defines source to write to
+
+=cut
+*/
+
+
+/* FIXME: Add an options array in here soonish */
+
+undef_int
+i_writetiff_wiol(i_img *im, io_glue *ig) {
+ uint32 width, height;
+ uint16 channels;
+ uint16 predictor = 0;
+ int quality = 75;
+ int jpegcolormode = JPEGCOLORMODE_RGB;
+ uint16 compression = COMPRESSION_PACKBITS;
+ i_color val;
+ uint16 photometric;
+ uint32 rowsperstrip = (uint32) -1; /* Let library pick default */
+ double resolution = -1;
+ unsigned char *linebuf = NULL;
+ uint32 y;
+ tsize_t linebytes;
+ int ch, ci, rc;
+ uint32 x;
+ TIFF* tif;
+
+ char *cc = mymalloc( 123 );
+ myfree(cc);
+
+
+ width = im->xsize;
+ height = im->ysize;
+ channels = im->channels;
+
+ switch (channels) {
+ case 1:
+ photometric = PHOTOMETRIC_MINISBLACK;
+ break;
+ case 3:
+ photometric = PHOTOMETRIC_RGB;
+ if (compression == COMPRESSION_JPEG && jpegcolormode == JPEGCOLORMODE_RGB) photometric = PHOTOMETRIC_YCBCR;
+ break;
+ default:
+ /* This means a colorspace we don't handle yet */
+ mm_log((1, "i_writetiff_wiol: don't handle %d channel images.\n", channels));
+ return 0;
+ }
+
+ /* Add code to get the filename info from the iolayer */
+ /* Also add code to check for mmapped code */
+
+ io_glue_commit_types(ig);
+ mm_log((1, "i_writetiff_wiol(im 0x%p, ig 0x%p)\n", im, ig));
+
+ /* FIXME: Enable the mmap interface */
+
+ tif = TIFFClientOpen("No name",
+ "wm",
+ (thandle_t) ig,
+ (TIFFReadWriteProc) ig->readcb,
+ (TIFFReadWriteProc) ig->writecb,
+ (TIFFSeekProc) comp_seek,
+ (TIFFCloseProc) ig->closecb,
+ (TIFFSizeProc) ig->sizecb,
+ (TIFFMapFileProc) NULL,
+ (TIFFUnmapFileProc) NULL);
+
+
+
+ if (!tif) {
+ mm_log((1, "i_writetiff_wiol: Unable to open tif file for writing\n"));
+ return 0;
+ }
+
+ mm_log((1, "i_writetiff_wiol: width=%d, height=%d, channels=%d\n", width, height, channels));
+
+ if (!TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width) ) { mm_log((1, "i_writetiff_wiol: TIFFSetField width=%d failed\n", width)); return 0; }
+ if (!TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height) ) { mm_log((1, "i_writetiff_wiol: TIFFSetField length=%d failed\n", height)); return 0; }
+ if (!TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, channels)) { mm_log((1, "i_writetiff_wiol: TIFFSetField samplesperpixel=%d failed\n", channels)); return 0; }
+ if (!TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT)) { mm_log((1, "i_writetiff_wiol: TIFFSetField Orientation=topleft\n")); return 0; }
+ if (!TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8) ) { mm_log((1, "i_writetiff_wiol: TIFFSetField bitpersample=8\n")); return 0; }
+ if (!TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG)) { mm_log((1, "i_writetiff_wiol: TIFFSetField planarconfig\n")); return 0; }
+ if (!TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, photometric)) { mm_log((1, "i_writetiff_wiol: TIFFSetField photometric=%d\n", photometric)); return 0; }
+ if (!TIFFSetField(tif, TIFFTAG_COMPRESSION, compression)) { mm_log((1, "i_writetiff_wiol: TIFFSetField compression=%d\n", compression)); return 0; }
+
+ switch (compression) {
+ case COMPRESSION_JPEG:
+ mm_log((1, "i_writetiff_wiol: jpeg compression\n"));
+ if (!TIFFSetField(tif, TIFFTAG_JPEGQUALITY, quality) ) { mm_log((1, "i_writetiff_wiol: TIFFSetField jpegquality=%d\n", quality)); return 0; }
+ if (!TIFFSetField(tif, TIFFTAG_JPEGCOLORMODE, jpegcolormode)) { mm_log((1, "i_writetiff_wiol: TIFFSetField jpegcolormode=%d\n", jpegcolormode)); return 0; }
+ break;
+ case COMPRESSION_LZW:
+ mm_log((1, "i_writetiff_wiol: lzw compression\n"));
+ break;
+ case COMPRESSION_DEFLATE:
+ mm_log((1, "i_writetiff_wiol: deflate compression\n"));
+ if (predictor != 0)
+ if (!TIFFSetField(tif, TIFFTAG_PREDICTOR, predictor)) { mm_log((1, "i_writetiff_wiol: TIFFSetField predictor=%d\n", predictor)); return 0; }
+ break;
+ case COMPRESSION_PACKBITS:
+ mm_log((1, "i_writetiff_wiol: packbits compression\n"));
+ break;
+ default:
+ mm_log((1, "i_writetiff_wiol: unknown compression %d\n", compression));
+ return 0;
+ }
+
+ linebytes = channels * width;
+ linebuf = (unsigned char *)_TIFFmalloc( TIFFScanlineSize(tif) > linebytes ?
+ linebytes : TIFFScanlineSize(tif) );
+
+ if (!TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tif, rowsperstrip))) {
+ mm_log((1, "i_writetiff_wiol: TIFFSetField rowsperstrip=%d\n", rowsperstrip)); return 0; }
+
+ TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip);
+ TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rc);
+
+ mm_log((1, "i_writetiff_wiol: TIFFGetField rowsperstrip=%d\n", rowsperstrip));
+ mm_log((1, "i_writetiff_wiol: TIFFGetField scanlinesize=%d\n", TIFFScanlineSize(tif) ));
+ mm_log((1, "i_writetiff_wiol: TIFFGetField planarconfig=%d == %d\n", rc, PLANARCONFIG_CONTIG));
+
+ if (resolution > 0) {
+ if (!TIFFSetField(tif, TIFFTAG_XRESOLUTION, resolution)) { mm_log((1, "i_writetiff_wiol: TIFFSetField Xresolution=%d\n", resolution)); return 0; }
+ if (!TIFFSetField(tif, TIFFTAG_YRESOLUTION, resolution)) { mm_log((1, "i_writetiff_wiol: TIFFSetField Yresolution=%d\n", resolution)); return 0; }
+ if (!TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH)) {
+ mm_log((1, "i_writetiff_wiol: TIFFSetField ResolutionUnit=%d\n", RESUNIT_INCH)); return 0;
+ }
+ }
+
+ for (y=0; y<height; y++) {
+ ci = 0;
+ for(x=0; x<width; x++) {
+ (void) i_gpix(im, x, y,&val);
+ for(ch=0; ch<channels; ch++) linebuf[ci++] = val.channel[ch];
+ }
+ if (TIFFWriteScanline(tif, linebuf, y, 0) < 0) {
+ mm_log((1, "i_writetiff_wiol: TIFFWriteScanline failed.\n"));
+ break;
+ }
+ }
+ (void) TIFFClose(tif);
+ if (linebuf) _TIFFfree(linebuf);
+ return 1;
+}
+
--- /dev/null
+#include "image.h"
+#include "regmach.h"
+
+i_img* i_transform2(int width, int height, int channels,
+ struct rm_op *ops, int ops_count,
+ double *n_regs, int n_regs_count,
+ i_color *c_regs, int c_regs_count,
+ i_img **in_imgs, int in_imgs_count)
+{
+ i_img *new_img;
+ int x, y;
+ i_color val;
+ int i;
+
+ /* since the number of images is variable and the image numbers
+ for getp? are fixed, we can check them here instead of in the
+ register machine - this will help performance */
+ for (i = 0; i < ops_count; ++i) {
+ switch (ops[i].code) {
+ case rbc_getp1:
+ case rbc_getp2:
+ case rbc_getp3:
+ if (ops[i].code - rbc_getp1 + 1 > in_imgs_count) {
+ /* Foo */
+ return NULL;
+ }
+ }
+ }
+
+ new_img = i_img_empty_ch(NULL, width, height, channels);
+ for (x = 0; x < width; ++x) {
+ for (y = 0; y < height; ++y) {
+ n_regs[0] = x;
+ n_regs[1] = y;
+ val = rm_run(ops, ops_count, n_regs, n_regs_count, c_regs, c_regs_count,
+ in_imgs, in_imgs_count);
+ i_ppix(new_img, x, y, &val);
+ }
+ }
+
+ return new_img;
+}
--- /dev/null
+#!perl -w
+use Imager;
+use Benchmark;
+
+$img = Imager->new();
+$img->open(file=>'testimg/penguin-base.jpg', type=>'jpeg')
+ || die "Cannot open penguin-base.jpg";
+
+timethese(-10,
+ { old=><<'EOS',
+$im2 = $img->transform(xexpr=>'x', yexpr=>'y+10*sin((x+y)/10)');
+EOS
+ new=><<'EOS'
+$im2 = Imager::transform2({rpnexpr=>'x y 10 x y + 10 / sin * + getp1'}, $img);
+EOS
+}
+);
+timethese(-10,
+ { old=><<'EOS',
+$im2 = $img->transform(xexpr=>'x', yexpr=>'y+(x+y)/10');
+EOS
+ new=><<'EOS'
+$im2 = Imager::transform2({rpnexpr=>'x y x y + 10 / + getp1'}, $img);
+EOS
+}
+);
+
--- /dev/null
+#!perl -w
+use strict;
+use Imager;
+use Imager::Transform;
+
+my %opts;
+my @in;
+my $expr;
+my $func;
+my $out;
+my %con;
+my $numre = Imager::Expr->numre;
+while (defined(my $arg = shift)) {
+ if ($arg =~ /^-/) {
+ if ($arg eq '-g') {
+ my $work = shift or die "$0: argument missing for -g\n";
+ if ($work =~ /^(\d+)x(\d+)?$/) {
+ $opts{width} = $1;
+ $opts{height} = $2 if defined $2;
+ }
+ elsif ($work =~ /^x(\d+)$/) {
+ $opts{height} = $2;
+ }
+ else {
+ die "$0: invalid geometry supplied to -g\n";
+ }
+ }
+ elsif ($arg eq '-f') {
+ $func = shift or die "$0: argument missing for -f\n";
+ $expr = Imager::Transform->new($func)
+ or die "$0: unknown transformation $func\n";
+ }
+ elsif ($arg eq '-d') {
+ my $func = shift or die "$0: argument missing for -d\n";
+ my $desc = Imager::Transform->describe($func)
+ or die "$0: unknown transformation $func\n";
+ print $desc;
+ exit;
+ }
+ elsif ($arg eq '-l') {
+ print join("\n", sort Imager::Transform->list),"\n";
+ exit;
+ }
+ elsif ($arg eq '-o') {
+ $out = shift or die "$0: argument missing for -o\n";
+ }
+ elsif ($arg eq '--') {
+ push(@in, @ARGV);
+ last;
+ }
+ else {
+ die "$0: Unknown option $arg\n";
+ }
+ }
+ else {
+ if ($arg =~ /^([^\W\d]\w*)=($numre)$/) {
+ exists $con{$1}
+ and die "$0: constant $1 already defined\n";
+ $con{$1} = $2;
+ }
+ else {
+ push(@in, $arg);
+ }
+ }
+}
+
+$expr or usage();
+$expr->inputs <= @in
+ or die "$0: not enough input images specified for $func\n";
+
+for my $in (@in) {
+ my $im = Imager->new();
+ $im->read(file=>$in)
+ or die "Cannot read $in: ",$im->errstr,"\n";
+ $in = $im;
+}
+
+defined $out or $out = $func.".jpg";
+
+$opts{jpegquality} = 100;
+my $im = $expr->transform(\%opts, \%con, @in)
+ or die "$0: error transforming: ",$expr->errstr,"\n";
+
+$im->write(file=>$out, jpegquality=>100)
+ or die "0: Cannot write $out: ",$im->errstr,"\n";
+
+
+sub usage {
+ print <<EOS;
+Usage: $0 -f <func> <constant>=<value> ... <input-image>...
+ $0 -l
+ $0 -d <func>
+ -f <func> - function to evaluate
+ -l - list function names
+ -d <func> - describe <func>
+ -g <digits>x<digits> - dimensions of output image
+ -o <file> - output file
+EOS
+ exit
+}
--- /dev/null
+#i_img * T_PTR_NULL
+Imager::Color T_PTROBJ
+Imager::ImgRaw T_PTROBJ
+Imager::TTHandle T_PTROBJ
+Imager::IO T_PTROBJ
+const char * T_PV
+float T_FLOAT
+float* T_ARRAY
+undef_int T_IV_U
+HASH T_HVREF
+#############################################################################
+INPUT
+T_PTR_NULL
+ if (SvOK($arg)) $var = ($type)SvIV($arg);
+ else $var = NULL
+#############################################################################
+OUTPUT
+T_IV_U
+ if ($var == 0) $arg=&PL_sv_undef;
+ else sv_setiv($arg, (IV)$var);
+T_PTR_NULL
+ sv_setiv($arg, (IV)$var);