#!/usr/bin/env perl #line 2 "./par-archive" eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if 0; # not running under some shell package __par_pl; # --- This script must not use any modules at compile time --- # use strict; #line 159 my ($par_temp, $progname, @tmpfile); END { if ($ENV{PAR_CLEAN}) { require File::Temp; require File::Basename; require File::Spec; my $topdir = File::Basename::dirname($par_temp); outs(qq{Removing files in "$par_temp"}); File::Find::finddepth(sub { ( -d ) ? rmdir : unlink }, $par_temp); rmdir $par_temp; # Don't remove topdir because this causes a race with other apps # that are trying to start. if (-d $par_temp && $^O ne 'MSWin32') { # Something went wrong unlinking the temporary directory. This # typically happens on platforms that disallow unlinking shared # libraries and executables that are in use. Unlink with a background # shell command so the files are no longer in use by this process. # Don't do anything on Windows because our parent process will # take care of cleaning things up. my $tmp = new File::Temp( TEMPLATE => 'tmpXXXXX', DIR => File::Basename::dirname($topdir), SUFFIX => '.cmd', UNLINK => 0, ); print $tmp "#!/bin/sh x=1; while [ \$x -lt 10 ]; do rm -rf '$par_temp' if [ \! -d '$par_temp' ]; then break fi sleep 1 x=`expr \$x + 1` done rm '" . $tmp->filename . "' "; chmod 0700,$tmp->filename; my $cmd = $tmp->filename . ' >/dev/null 2>&1 &'; close $tmp; system($cmd); outs(qq(Spawned background process to perform cleanup: ) . $tmp->filename); } } } BEGIN { Internals::PAR::BOOT() if defined &Internals::PAR::BOOT; eval { _par_init_env(); if (exists $ENV{PAR_ARGV_0} and $ENV{PAR_ARGV_0} ) { @ARGV = map $ENV{"PAR_ARGV_$_"}, (1 .. $ENV{PAR_ARGC} - 1); $0 = $ENV{PAR_ARGV_0}; } else { for (keys %ENV) { delete $ENV{$_} if /^PAR_ARGV_/; } } my $quiet = !$ENV{PAR_DEBUG}; # fix $progname if invoked from PATH my %Config = ( path_sep => ($^O =~ /^MSWin/ ? ';' : ':'), _exe => ($^O =~ /^(?:MSWin|OS2|cygwin)/ ? '.exe' : ''), _delim => ($^O =~ /^MSWin|OS2/ ? '\\' : '/'), ); _set_progname(); _set_par_temp(); # Magic string checking and extracting bundled modules {{{ my ($start_pos, $data_pos); { local $SIG{__WARN__} = sub {}; # Check file type, get start of data section {{{ open _FH, '<', $progname or last; binmode(_FH); my $buf; seek _FH, -8, 2; read _FH, $buf, 8; last unless $buf eq "\nPAR.pm\n"; seek _FH, -12, 2; read _FH, $buf, 4; seek _FH, -12 - unpack("N", $buf), 2; read _FH, $buf, 4; $data_pos = (tell _FH) - 4; # }}} # Extracting each file into memory {{{ my %require_list; while ($buf eq "FILE") { read _FH, $buf, 4; read _FH, $buf, unpack("N", $buf); my $fullname = $buf; outs(qq(Unpacking file "$fullname"...)); my $crc = ( $fullname =~ s|^([a-f\d]{8})/|| ) ? $1 : undef; my ($basename, $ext) = ($buf =~ m|(?:.*/)?(.*)(\..*)|); read _FH, $buf, 4; read _FH, $buf, unpack("N", $buf); if (defined($ext) and $ext !~ /\.(?:pm|pl|ix|al)$/i) { my ($out, $filename) = _tempfile($ext, $crc); if ($out) { binmode($out); print $out $buf; close $out; chmod 0755, $filename; } $PAR::Heavy::FullCache{$fullname} = $filename; $PAR::Heavy::FullCache{$filename} = $fullname; } elsif ( $fullname =~ m|^/?shlib/| and defined $ENV{PAR_TEMP} ) { # should be moved to _tempfile() my $filename = "$ENV{PAR_TEMP}/$basename$ext"; outs("SHLIB: $filename\n"); open my $out, '>', $filename or die $!; binmode($out); print $out $buf; close $out; } else { $require_list{$fullname} = $PAR::Heavy::ModuleCache{$fullname} = { buf => $buf, crc => $crc, name => $fullname, }; } read _FH, $buf, 4; } # }}} local @INC = (sub { my ($self, $module) = @_; return if ref $module or !$module; my $filename = delete $require_list{$module} || do { my $key; foreach (keys %require_list) { next unless /\Q$module\E$/; $key = $_; last; } delete $require_list{$key} if defined($key); } or return; $INC{$module} = "/loader/$filename/$module"; if ($ENV{PAR_CLEAN} and defined(&IO::File::new)) { my $fh = IO::File->new_tmpfile or die $!; binmode($fh); print $fh $filename->{buf}; seek($fh, 0, 0); return $fh; } else { my ($out, $name) = _tempfile('.pm', $filename->{crc}); if ($out) { binmode($out); print $out $filename->{buf}; close $out; } open my $fh, '<', $name or die $!; binmode($fh); return $fh; } die "Bootstrapping failed: cannot find $module!\n"; }, @INC); # Now load all bundled files {{{ # initialize shared object processing require XSLoader; require PAR::Heavy; require Carp::Heavy; require Exporter::Heavy; PAR::Heavy::_init_dynaloader(); # now let's try getting helper modules from within require IO::File; # load rest of the group in while (my $filename = (sort keys %require_list)[0]) { #local $INC{'Cwd.pm'} = __FILE__ if $^O ne 'MSWin32'; unless ($INC{$filename} or $filename =~ /BSDPAN/) { # require modules, do other executable files if ($filename =~ /\.pmc?$/i) { require $filename; } else { # Skip ActiveState's sitecustomize.pl file: do $filename unless $filename =~ /sitecustomize\.pl$/; } } delete $require_list{$filename}; } # }}} last unless $buf eq "PK\003\004"; $start_pos = (tell _FH) - 4; } # }}} # Argument processing {{{ my @par_args; my ($out, $bundle, $logfh, $cache_name); delete $ENV{PAR_APP_REUSE}; # sanitize (REUSE may be a security problem) $quiet = 0 unless $ENV{PAR_DEBUG}; # Don't swallow arguments for compiled executables without --par-options if (!$start_pos or ($ARGV[0] eq '--par-options' && shift)) { my %dist_cmd = qw( p blib_to_par i install_par u uninstall_par s sign_par v verify_par ); # if the app is invoked as "appname --par-options --reuse PROGRAM @PROG_ARGV", # use the app to run the given perl code instead of anything from the # app itself (but still set up the normal app environment and @INC) if (@ARGV and $ARGV[0] eq '--reuse') { shift @ARGV; $ENV{PAR_APP_REUSE} = shift @ARGV; } else { # normal parl behaviour my @add_to_inc; while (@ARGV) { $ARGV[0] =~ /^-([AIMOBLbqpiusTv])(.*)/ or last; if ($1 eq 'I') { push @add_to_inc, $2; } elsif ($1 eq 'M') { eval "use $2"; } elsif ($1 eq 'A') { unshift @par_args, $2; } elsif ($1 eq 'O') { $out = $2; } elsif ($1 eq 'b') { $bundle = 'site'; } elsif ($1 eq 'B') { $bundle = 'all'; } elsif ($1 eq 'q') { $quiet = 1; } elsif ($1 eq 'L') { open $logfh, ">>", $2 or die "XXX: Cannot open log: $!"; } elsif ($1 eq 'T') { $cache_name = $2; } shift(@ARGV); if (my $cmd = $dist_cmd{$1}) { delete $ENV{'PAR_TEMP'}; init_inc(); require PAR::Dist; &{"PAR::Dist::$cmd"}() unless @ARGV; &{"PAR::Dist::$cmd"}($_) for @ARGV; exit; } } unshift @INC, @add_to_inc; } } # XXX -- add --par-debug support! # }}} # Output mode (-O) handling {{{ if ($out) { { #local $INC{'Cwd.pm'} = __FILE__ if $^O ne 'MSWin32'; require IO::File; require Archive::Zip; } my $par = shift(@ARGV); my $zip; if (defined $par) { open my $fh, '<', $par or die "Cannot find '$par': $!"; binmode($fh); bless($fh, 'IO::File'); $zip = Archive::Zip->new; ( $zip->readFromFileHandle($fh, $par) == Archive::Zip::AZ_OK() ) or die "Read '$par' error: $!"; } my %env = do { if ($zip and my $meta = $zip->contents('META.yml')) { $meta =~ s/.*^par:$//ms; $meta =~ s/^\S.*//ms; $meta =~ /^ ([^:]+): (.+)$/mg; } }; # Open input and output files {{{ local $/ = \4; if (defined $par) { open PAR, '<', $par or die "$!: $par"; binmode(PAR); die "$par is not a PAR file" unless eq "PK\003\004"; } CreatePath($out) ; my $fh = IO::File->new( $out, IO::File::O_CREAT() | IO::File::O_WRONLY() | IO::File::O_TRUNC(), 0777, ) or die $!; binmode($fh); $/ = (defined $data_pos) ? \$data_pos : undef; seek _FH, 0, 0; my $loader = scalar <_FH>; if (!$ENV{PAR_VERBATIM} and $loader =~ /^(?:#!|\@rem)/) { require PAR::Filter::PodStrip; PAR::Filter::PodStrip->new->apply(\$loader, $0) } foreach my $key (sort keys %env) { my $val = $env{$key} or next; $val = eval $val if $val =~ /^['"]/; my $magic = "__ENV_PAR_" . uc($key) . "__"; my $set = "PAR_" . uc($key) . "=$val"; $loader =~ s{$magic( +)}{ $magic . $set . (' ' x (length($1) - length($set))) }eg; } $fh->print($loader); $/ = undef; # }}} # Write bundled modules {{{ if ($bundle) { require PAR::Heavy; PAR::Heavy::_init_dynaloader(); init_inc(); require_modules(); my @inc = sort { length($b) <=> length($a) } grep { !/BSDPAN/ } grep { ($bundle ne 'site') or ($_ ne $Config::Config{archlibexp} and $_ ne $Config::Config{privlibexp}); } @INC; # File exists test added to fix RT #41790: # Funny, non-existing entry in _<....auto/Compress/Raw/Zlib/autosplit.ix. # This is a band-aid fix with no deeper grasp of the issue. # Somebody please go through the pain of understanding what's happening, # I failed. -- Steffen my %files; /^_<(.+)$/ and -e $1 and $files{$1}++ for keys %::; $files{$_}++ for values %INC; my $lib_ext = $Config::Config{lib_ext}; my %written; foreach (sort keys %files) { my ($name, $file); foreach my $dir (@inc) { if ($name = $PAR::Heavy::FullCache{$_}) { $file = $_; last; } elsif (/^(\Q$dir\E\/(.*[^Cc]))\Z/i) { ($file, $name) = ($1, $2); last; } elsif (m!^/loader/[^/]+/(.*[^Cc])\Z!) { if (my $ref = $PAR::Heavy::ModuleCache{$1}) { ($file, $name) = ($ref, $1); last; } elsif (-f "$dir/$1") { ($file, $name) = ("$dir/$1", $1); last; } } } next unless defined $name and not $written{$name}++; next if !ref($file) and $file =~ /\.\Q$lib_ext\E$/; # only pack PAR modules and noting else (alex) next if !ref($file) and $file !~ /\WPAR\W/; # end: (alex) outs( join "", qq(Packing "), ref $file ? $file->{name} : $file, qq("...) ); my $content; if (ref($file)) { $content = $file->{buf}; } else { open FILE, '<', $file or die "Can't open $file: $!"; binmode(FILE); $content = ; close FILE; PAR::Filter::PodStrip->new->apply(\$content, $file) if !$ENV{PAR_VERBATIM} and $name =~ /\.(?:pm|ix|al)$/i; PAR::Filter::PatchContent->new->apply(\$content, $file, $name); } outs(qq(Written as "$name")); $fh->print("FILE"); $fh->print(pack('N', length($name) + 9)); $fh->print(sprintf( "%08x/%s", Archive::Zip::computeCRC32($content), $name )); $fh->print(pack('N', length($content))); $fh->print($content); } } # }}} # Now write out the PAR and magic strings {{{ $zip->writeToFileHandle($fh) if $zip; $cache_name = substr $cache_name, 0, 40; if (!$cache_name and my $mtime = (stat($out))[9]) { my $ctx = eval { require Digest::SHA; Digest::SHA->new(1) } || eval { require Digest::SHA1; Digest::SHA1->new } || eval { require Digest::MD5; Digest::MD5->new }; # Workaround for bug in Digest::SHA 5.38 and 5.39 my $sha_version = eval { $Digest::SHA::VERSION } || 0; if ($sha_version eq '5.38' or $sha_version eq '5.39') { $ctx->addfile($out, "b") if ($ctx); } else { if ($ctx and open(my $fh, "<$out")) { binmode($fh); $ctx->addfile($fh); close($fh); } } $cache_name = $ctx ? $ctx->hexdigest : $mtime; } $cache_name .= "\0" x (41 - length $cache_name); $cache_name .= "CACHE"; $fh->print($cache_name); $fh->print(pack('N', $fh->tell - length($loader))); $fh->print("\nPAR.pm\n"); $fh->close; chmod 0755, $out; # }}} exit; } # }}} # Prepare $progname into PAR file cache {{{ { last unless defined $start_pos; _fix_progname(); # Now load the PAR file and put it into PAR::LibCache {{{ require PAR; PAR::Heavy::_init_dynaloader(); { #local $INC{'Cwd.pm'} = __FILE__ if $^O ne 'MSWin32'; require File::Find; require Archive::Zip; } my $zip = Archive::Zip->new; my $fh = IO::File->new; $fh->fdopen(fileno(_FH), 'r') or die "$!: $@"; $zip->readFromFileHandle($fh, $progname) == Archive::Zip::AZ_OK() or die "$!: $@"; push @PAR::LibCache, $zip; $PAR::LibCache{$progname} = $zip; $quiet = !$ENV{PAR_DEBUG}; outs(qq(\$ENV{PAR_TEMP} = "$ENV{PAR_TEMP}")); if (defined $ENV{PAR_TEMP}) { # should be set at this point! foreach my $member ( $zip->members ) { next if $member->isDirectory; my $member_name = $member->fileName; next unless $member_name =~ m{ ^ /?shlib/ (?:$Config::Config{version}/)? (?:$Config::Config{archname}/)? ([^/]+) $ }x; my $extract_name = $1; my $dest_name = File::Spec->catfile($ENV{PAR_TEMP}, $extract_name); if (-f $dest_name && -s _ == $member->uncompressedSize()) { outs(qq(Skipping "$member_name" since it already exists at "$dest_name")); } else { outs(qq(Extracting "$member_name" to "$dest_name")); $member->extractToFileNamed($dest_name); chmod(0555, $dest_name) if $^O eq "hpux"; } } } # }}} } # }}} # If there's no main.pl to run, show usage {{{ unless ($PAR::LibCache{$progname}) { die << "." unless @ARGV; Usage: $0 [ -Alib.par ] [ -Idir ] [ -Mmodule ] [ src.par ] [ program.pl ] $0 [ -B|-b ] [-Ooutfile] src.par . $ENV{PAR_PROGNAME} = $progname = $0 = shift(@ARGV); } # }}} sub CreatePath { my ($name) = @_; require File::Basename; my ($basename, $path, $ext) = File::Basename::fileparse($name, ('\..*')); require File::Path; File::Path::mkpath($path) unless(-e $path); # mkpath dies with error } sub require_modules { #local $INC{'Cwd.pm'} = __FILE__ if $^O ne 'MSWin32'; require lib; require DynaLoader; require integer; require strict; require warnings; require vars; require Carp; require Carp::Heavy; require Errno; require Exporter::Heavy; require Exporter; require Fcntl; require File::Temp; require File::Spec; require XSLoader; require Config; require IO::Handle; require IO::File; require Compress::Zlib; require Archive::Zip; require PAR; require PAR::Heavy; require PAR::Dist; require PAR::Filter::PodStrip; require PAR::Filter::PatchContent; require attributes; eval { require Cwd }; eval { require Win32 }; eval { require Scalar::Util }; eval { require Archive::Unzip::Burst }; eval { require Tie::Hash::NamedCapture }; eval { require PerlIO; require PerlIO::scalar }; } # The C version of this code appears in myldr/mktmpdir.c # This code also lives in PAR::SetupTemp as set_par_temp_env! sub _set_par_temp { if (defined $ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/) { $par_temp = $1; return; } foreach my $path ( (map $ENV{$_}, qw( PAR_TMPDIR TMPDIR TEMPDIR TEMP TMP )), qw( C:\\TEMP /tmp . ) ) { next unless defined $path and -d $path and -w $path; my $username; my $pwuid; # does not work everywhere: eval {($pwuid) = getpwuid($>) if defined $>;}; if ( defined(&Win32::LoginName) ) { $username = &Win32::LoginName; } elsif (defined $pwuid) { $username = $pwuid; } else { $username = $ENV{USERNAME} || $ENV{USER} || 'SYSTEM'; } $username =~ s/\W/_/g; my $stmpdir = "$path$Config{_delim}par-".unpack("H*", $username); mkdir $stmpdir, 0755; if (!$ENV{PAR_CLEAN} and my $mtime = (stat($progname))[9]) { open (my $fh, "<". $progname); seek $fh, -18, 2; sysread $fh, my $buf, 6; if ($buf eq "\0CACHE") { seek $fh, -58, 2; sysread $fh, $buf, 41; $buf =~ s/\0//g; $stmpdir .= "$Config{_delim}cache-" . $buf; } else { my $ctx = eval { require Digest::SHA; Digest::SHA->new(1) } || eval { require Digest::SHA1; Digest::SHA1->new } || eval { require Digest::MD5; Digest::MD5->new }; # Workaround for bug in Digest::SHA 5.38 and 5.39 my $sha_version = eval { $Digest::SHA::VERSION } || 0; if ($sha_version eq '5.38' or $sha_version eq '5.39') { $ctx->addfile($progname, "b") if ($ctx); } else { if ($ctx and open(my $fh, "<$progname")) { binmode($fh); $ctx->addfile($fh); close($fh); } } $stmpdir .= "$Config{_delim}cache-" . ( $ctx ? $ctx->hexdigest : $mtime ); } close($fh); } else { $ENV{PAR_CLEAN} = 1; $stmpdir .= "$Config{_delim}temp-$$"; } $ENV{PAR_TEMP} = $stmpdir; mkdir $stmpdir, 0755; last; } $par_temp = $1 if $ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/; } sub _tempfile { my ($ext, $crc) = @_; my ($fh, $filename); $filename = "$par_temp/$crc$ext"; if ($ENV{PAR_CLEAN}) { unlink $filename if -e $filename; push @tmpfile, $filename; } else { return (undef, $filename) if (-r $filename); } open $fh, '>', $filename or die $!; binmode($fh); return($fh, $filename); } # same code lives in PAR::SetupProgname::set_progname sub _set_progname { if (defined $ENV{PAR_PROGNAME} and $ENV{PAR_PROGNAME} =~ /(.+)/) { $progname = $1; } $progname ||= $0; if ($ENV{PAR_TEMP} and index($progname, $ENV{PAR_TEMP}) >= 0) { $progname = substr($progname, rindex($progname, $Config{_delim}) + 1); } if (!$ENV{PAR_PROGNAME} or index($progname, $Config{_delim}) >= 0) { if (open my $fh, '<', $progname) { return if -s $fh; } if (-s "$progname$Config{_exe}") { $progname .= $Config{_exe}; return; } } foreach my $dir (split /\Q$Config{path_sep}\E/, $ENV{PATH}) { next if exists $ENV{PAR_TEMP} and $dir eq $ENV{PAR_TEMP}; $dir =~ s/\Q$Config{_delim}\E$//; (($progname = "$dir$Config{_delim}$progname$Config{_exe}"), last) if -s "$dir$Config{_delim}$progname$Config{_exe}"; (($progname = "$dir$Config{_delim}$progname"), last) if -s "$dir$Config{_delim}$progname"; } } sub _fix_progname { $0 = $progname ||= $ENV{PAR_PROGNAME}; if (index($progname, $Config{_delim}) < 0) { $progname = ".$Config{_delim}$progname"; } # XXX - hack to make PWD work my $pwd = (defined &Cwd::getcwd) ? Cwd::getcwd() : ((defined &Win32::GetCwd) ? Win32::GetCwd() : `pwd`); chomp($pwd); $progname =~ s/^(?=\.\.?\Q$Config{_delim}\E)/$pwd$Config{_delim}/; $ENV{PAR_PROGNAME} = $progname; } sub _par_init_env { if ( $ENV{PAR_INITIALIZED}++ == 1 ) { return; } else { $ENV{PAR_INITIALIZED} = 2; } for (qw( SPAWNED TEMP CLEAN DEBUG CACHE PROGNAME ARGC ARGV_0 ) ) { delete $ENV{'PAR_'.$_}; } for (qw/ TMPDIR TEMP CLEAN DEBUG /) { $ENV{'PAR_'.$_} = $ENV{'PAR_GLOBAL_'.$_} if exists $ENV{'PAR_GLOBAL_'.$_}; } my $par_clean = "__ENV_PAR_CLEAN__ "; if ($ENV{PAR_TEMP}) { delete $ENV{PAR_CLEAN}; } elsif (!exists $ENV{PAR_GLOBAL_CLEAN}) { my $value = substr($par_clean, 12 + length("CLEAN")); $ENV{PAR_CLEAN} = $1 if $value =~ /^PAR_CLEAN=(\S+)/; } } sub outs { return if $quiet; if ($logfh) { print $logfh "@_\n"; } else { print "@_\n"; } } sub init_inc { require Config; push @INC, grep defined, map $Config::Config{$_}, qw( archlibexp privlibexp sitearchexp sitelibexp vendorarchexp vendorlibexp ); } ######################################################################## # The main package for script execution package main; require PAR; unshift @INC, \&PAR::find_par; PAR->import(@par_args); die qq(par.pl: Can't open perl script "$progname": No such file or directory\n) unless -e $progname; do $progname; CORE::exit($1) if ($@ =~/^_TK_EXIT_\((\d+)\)/); die $@ if $@; }; $::__ERROR = $@ if $@; } CORE::exit($1) if ($::__ERROR =~/^_TK_EXIT_\((\d+)\)/); die $::__ERROR if $::__ERROR; 1; #line 1015 __END__ FILEc43eed86/PAR.pmsS#line 1 "/Users/adaml/perl5/lib/perl5/PAR.pm" package PAR; our $VERSION = '1.021'; use 5.008009; use strict; use warnings; use Config; use Carp qw/croak/; # If the 'prefork' module is available, we # register various run-time loaded modules with it. # That way, there is more shared memory in a forking # environment. BEGIN { if (eval 'require prefork') { prefork->import($_) for qw/ Archive::Zip File::Glob File::Spec File::Temp Fcntl LWP::Simple PAR::Heavy /; # not including Archive::Unzip::Burst which only makes sense # in the context of a PAR::Packer'ed executable anyway. } } use PAR::SetupProgname; use PAR::SetupTemp; #line 315 use Fcntl ':flock'; use Archive::Zip qw( :ERROR_CODES ); use vars qw(@PAR_INC); # explicitly stated PAR library files (preferred) use vars qw(@PAR_INC_LAST); # explicitly stated PAR library files (fallback) use vars qw(%PAR_INC); # sets {$par}{$file} for require'd modules use vars qw(@LibCache %LibCache); # I really miss pseudohash. use vars qw($LastAccessedPAR $LastTempFile); use vars qw(@RepositoryObjects); # If we have PAR::Repository::Client support, we # put the ::Client objects in here. use vars qw(@PriorityRepositoryObjects); # repositories which are preferred over local stuff use vars qw(@UpgradeRepositoryObjects); # If we have PAR::Repository::Client's in upgrade mode # put the ::Client objects in here *as well*. use vars qw(%FileCache); # The Zip-file file-name-cache # Layout: # $FileCache{$ZipObj}{$FileName} = $Member my $ver = $Config{version}; my $arch = $Config{archname}; my $progname = $ENV{PAR_PROGNAME} || $0; my $is_insensitive_fs = ( -s $progname and (-s lc($progname) || -1) == (-s uc($progname) || -1) and (-s lc($progname) || -1) == -s $progname ); # lexical for import(), and _import_foo() functions to control unpar() my %unpar_options; # called on "use PAR" sub import { my $class = shift; PAR::SetupProgname::set_progname(); PAR::SetupTemp::set_par_temp_env(); $progname = $ENV{PAR_PROGNAME} ||= $0; $is_insensitive_fs = (-s $progname and (-s lc($progname) || -1) == (-s uc($progname) || -1)); my @args = @_; # Insert PAR hook in @INC. unshift @INC, \&find_par unless grep { $_ eq \&find_par } @INC; push @INC, \&find_par_last unless grep { $_ eq \&find_par_last } @INC; # process args to use PAR 'foo.par', { opts }, ...; foreach my $par (@args) { if (ref($par) eq 'HASH') { # we have been passed a hash reference _import_hash_ref($par); } elsif ($par =~ /[?*{}\[\]]/) { # implement globbing for PAR archives require File::Glob; foreach my $matched (File::Glob::glob($par)) { push @PAR_INC, unpar($matched, undef, undef, 1); } } else { # ordinary string argument => file push @PAR_INC, unpar($par, undef, undef, 1); } } return if $PAR::__import; local $PAR::__import = 1; require PAR::Heavy; PAR::Heavy::_init_dynaloader(); # The following code is executed for the case where the # running program is itself a PAR archive. # ==> run script/main.pl if (unpar($progname)) { # XXX - handle META.yml here! push @PAR_INC, unpar($progname, undef, undef, 1); _extract_inc($progname); my $zip = $LibCache{$progname}; my $member = _first_member( $zip, "script/main.pl", "main.pl", ); if ($progname and !$member) { require File::Spec; my @path = File::Spec->splitdir($progname); my $filename = pop @path; $member = _first_member( $zip, "script/".$filename, "script/".$filename.".pl", $filename, $filename.".pl", ) } # finally take $ARGV[0] as the hint for file to run if (defined $ARGV[0] and !$member) { $member = _first_member( $zip, "script/$ARGV[0]", "script/$ARGV[0].pl", $ARGV[0], "$ARGV[0].pl", ) or die qq(PAR.pm: Can't open perl script "$ARGV[0]": No such file or directory); shift @ARGV; } if (!$member) { die "Usage: $0 script_file_name.\n"; } _run_member($member); } } # import() helper for the "use PAR {...};" syntax. sub _import_hash_ref { my $opt = shift; # hash slice assignment -- pass all of the options into unpar local @unpar_options{keys(%$opt)} = values(%$opt); # check for incompatible options: if ( exists $opt->{repository} and exists $opt->{file} ) { croak("Invalid PAR loading options. Cannot have a 'repository' and 'file' option at the same time."); } elsif ( exists $opt->{file} and (exists $opt->{install} or exists $opt->{upgrade}) ) { my $e = exists($opt->{install}) ? 'install' : 'upgrade'; croak("Invalid PAR loading options. Cannot combine 'file' and '$e' options."); } elsif ( not exists $opt->{repository} and not exists $opt->{file} ) { croak("Invalid PAR loading options. Need at least one of 'file' or 'repository' options."); } # load from file if (exists $opt->{file}) { croak("Cannot load undefined PAR archive") if not defined $opt->{file}; # for files, we default to loading from PAR archive first my $fallback = $opt->{fallback}; $fallback = 0 if not defined $fallback; if (not $fallback) { # load from this PAR arch preferably push @PAR_INC, unpar($opt->{file}, undef, undef, 1); } else { # load from this PAR arch as fallback push @PAR_INC_LAST, unpar($opt->{file}, undef, undef, 1); } } else { # Deal with repositories elsewhere my $client = _import_repository($opt); return() if not $client; if (defined $opt->{run}) { # run was specified # run the specified script from the repository $client->run_script( $opt->{run} ); return 1; } return 1; } # run was specified # run the specified script from inside the PAR file. if (defined $opt->{run}) { my $script = $opt->{run}; require PAR::Heavy; PAR::Heavy::_init_dynaloader(); # XXX - handle META.yml here! _extract_inc($opt->{file}); my $zip = $LibCache{$opt->{file}}; my $member = _first_member( $zip, (($script !~ /^script\//) ? ("script/$script", "script/$script.pl") : ()), $script, "$script.pl", ); if (not defined $member) { croak("Cannot run script '$script' from PAR file '$opt->{file}'. Script couldn't be found in PAR file."); } _run_member_from_par($member); } return(); } # This sub is invoked by _import_hash_ref if a {repository} # option is found # Returns the repository client object on success. sub _import_repository { my $opt = shift; my $url = $opt->{repository}; eval "require PAR::Repository::Client; 1;"; if ($@ or not eval PAR::Repository::Client->VERSION >= 0.04) { croak "In order to use the 'use PAR { repository => 'url' };' syntax, you need to install the PAR::Repository::Client module (version 0.04 or later) from CPAN. This module does not seem to be installed as indicated by the following error message: $@"; } if ($opt->{upgrade} and not eval PAR::Repository::Client->VERSION >= 0.22) { croak "In order to use the 'upgrade' option, you need to install the PAR::Repository::Client module (version 0.22 or later) from CPAN"; } if ($opt->{dependencies} and not eval PAR::Repository::Client->VERSION >= 0.23) { croak "In order to use the 'dependencies' option, you need to install the PAR::Repository::Client module (version 0.23 or later) from CPAN"; } my $obj; # Support existing clients passed in as objects. if (ref($url) and UNIVERSAL::isa($url, 'PAR::Repository::Client')) { $obj = $url; } else { $obj = PAR::Repository::Client->new( uri => $url, auto_install => $opt->{install}, auto_upgrade => $opt->{upgrade}, static_dependencies => $opt->{dependencies}, ); } if (exists($opt->{fallback}) and not $opt->{fallback}) { unshift @PriorityRepositoryObjects, $obj; # repository beats local stuff } else { push @RepositoryObjects, $obj; # local stuff beats repository } # these are tracked separately so we can check for upgrades early push @UpgradeRepositoryObjects, $obj if $opt->{upgrade}; return $obj; } # Given an Archive::Zip obj and a list of files/paths, # this function returns the Archive::Zip::Member for the # first of the files found in the ZIP. If none is found, # returns the empty list. sub _first_member { my $zip = shift; foreach my $name (@_) { my $member = _cached_member_named($zip, $name); return $member if $member; } return; } # Given an Archive::Zip object, this finds the first # Archive::Zip member whose file name matches the # regular expression sub _first_member_matching { my $zip = shift; my $regex = shift; my $cache = $FileCache{$zip}; $cache = $FileCache{$zip} = _make_file_cache($zip) if not $cache; foreach my $name (keys %$cache) { if ($name =~ $regex) { return $cache->{$name}; } } return(); } sub _run_member_from_par { my $member = shift; my (undef, $filename) = _tempfile( sub { my $fh = shift; my $file = $member->fileName; print $fh "package main;\n", "#line 1 \"$file\"\n"; $member->extractToFileHandle($fh) == AZ_OK or die "Can't extract $file: $!"; }, $member->crc32String . ".pl"); $ENV{PAR_0} = $filename; # for Pod::Usage { do $filename; CORE::exit($1) if ($@ =~/^_TK_EXIT_\((\d+)\)/); die $@ if $@; exit; } } sub _run_member { my $member = shift; my ($fh, $filename) = _tempfile( sub { my $fh = shift; my $file = $member->fileName; print $fh "package main;\n", "#line 1 \"$file\"\n"; $member->extractToFileHandle($fh) == AZ_OK or die "Can't extract $file: $!"; }, $member->crc32String . ".pl"); # NOTE: Perl 5.14.x will print the infamous warning # "Use of uninitialized value in do "file" at .../PAR.pm line 636" # when $INC{main} exists, but is undef, when "do 'main'" is called. # This typically happens at the second invocation of _run_member() # when running a packed executable (the first invocation is for the # generated script/main.pl, the second for the packed script itself). # Hence shut the warning up by assigning something to $INC{main}. # 5.14.x is the only Perl version since 5.8.1 that shows this behaviour. unshift @INC, sub { shift @INC; $INC{$_[1]} = $filename; return $fh }; $ENV{PAR_0} = $filename; # for Pod::Usage { do 'main'; CORE::exit($1) if ($@ =~/^_TK_EXIT_\((\d+)\)/); die $@ if $@; exit; } } sub _run_external_file { my $filename = shift; open my $ffh, '<', $filename or die "Can't open perl script \"$filename\": $!"; my $string = "package main;\n" . "#line 1 \"$filename\"\n" . do { local $/ = undef; <$ffh> }; close $ffh; open my $fh, '<', \$string or die "Can't open file handle to string: $!"; unshift @INC, sub { shift @INC; return $fh }; $ENV{PAR_0} = $filename; # for Pod::Usage { do 'main'; CORE::exit($1) if ($@ =~/^_TK_EXIT_\((\d+)\)/); die $@ if $@; exit; } } # extract the contents of a .par (or .exe) or any # Archive::Zip handle to the PAR_TEMP/inc directory. # returns that directory. sub _extract_inc { my ($file_or_azip_handle) = @_; my ($file, $zip); if (ref($file_or_azip_handle) && $file_or_azip_handle->isa('Archive::Zip::Archive')) { $file = $file_or_azip_handle->fileName(); $zip = $file_or_azip_handle; } else { $file = $file_or_azip_handle; # Temporarily increase Archive::Zip::ChunkSize so that we may find # the EOCD even if stuff has been appended (e.g.by OSX codesign) # to the zip/executable. my $chunksize = Archive::Zip::chunkSize(); Archive::Zip::setChunkSize(-s $file); $zip = Archive::Zip->new(); $zip->read($file) == AZ_OK or die qq[can't read zip file "$file"]; Archive::Zip::setChunkSize($chunksize); } require File::Spec; my $dlext = defined($Config{dlext}) ? $Config{dlext} : ''; my $inc = File::Spec->catdir($PAR::SetupTemp::PARTemp, "inc"); my $canary = File::Spec->catfile($PAR::SetupTemp::PARTemp, $PAR::SetupTemp::Canary); unless (-d $inc && -e $canary) { # acquire the "wanna extract inc" lock my $inc_lock = "$inc.lock"; open my $lock, ">", $inc_lock or die qq[can't open "$inc_lock": $!]; flock($lock, LOCK_EX); mkdir($inc, 0755); EXTRACT: { # First try to unzip the *fast* way. eval { require Archive::Unzip::Burst; Archive::Unzip::Burst::unzip($file_or_azip_handle, $inc) == AZ_OK; } and last EXTRACT; # Either failed to load Archive::Unzip::Burst or # Archive::Unzip::Burst::unzip failed: fallback to slow way. foreach my $name ($zip->memberNames()) { $name =~ s{^/}{}; my $outfile = File::Spec->catfile($inc, $name); next if -e $outfile and not -w _; $zip->extractMember($name, $outfile); # Unfortunately Archive::Zip doesn't have an option # NOT to restore member timestamps when extracting, hence set # it to "now" (making it younger than the canary file). utime(undef, undef, $outfile); } } # touch (and back-date) canary file open my $fh, ">", $canary; print $fh <<'...'; This file is used as "canary in the coal mine" to detect when files in PAR's cache area are being removed by some clean up mechanism (probably based on file modification times). ... close $fh; my $dateback = time() - $PAR::SetupTemp::CanaryDateBack; utime($dateback, $dateback, $canary); # release the "wanna extract inc" lock flock($lock, LOCK_UN); close $lock; } # Add the existing perl module directories to @INC, # but make sure there's no duplicates my %inc_exists = map { ($_, 1) } @INC; unshift @INC, grep { !exists($inc_exists{$_}) && -d $_ } map { File::Spec->catdir($inc, @$_) } [ 'lib' ], [ 'arch' ], [ $arch ], [ $ver ], [ $ver, $arch ], []; # Add all XS DLLs to $PAR::Heavy::FullCache foreach my $name ($zip->memberNames()) { $name =~ s{^/}{}; if (my ($xs_dll) = $name =~ m{/(auto/.*\.\Q$dlext\E)$}) { my $outfile = File::Spec->catfile($inc, $name); $PAR::Heavy::FullCache{$outfile} = $xs_dll; $PAR::Heavy::FullCache{$xs_dll} = $outfile; } } return $inc; } # This is the hook placed in @INC for loading PAR's # before any other stuff in @INC sub find_par { my @args = @_; # if there are repositories in upgrade mode, check them # first. If so, this is expensive, of course! if (@UpgradeRepositoryObjects) { my $module = $args[1]; $module =~ s/\.pm$//; $module =~ s/\//::/g; foreach my $client (@UpgradeRepositoryObjects) { my $local_file = $client->upgrade_module($module); # break the require if upgrade_module has been required already # to avoid infinite recursion if (exists $INC{$args[1]}) { # Oh dear. Check for the possible return values of the INC sub hooks in # perldoc -f require before trying to understand this. # Then, realize that if you pass undef for the file handle, perl (5.8.9) # does NOT use the subroutine. Thus the hacky GLOB ref. my $line = 1; no warnings; return (\*I_AM_NOT_HERE, sub {$line ? ($_="1;",$line=0,return(1)) : ($_="",return(0))}); } # Note: This is likely not necessary as the module has been installed # into the system by upgrade_module if it was available at all. # If it was already loaded, this will not be reached (see return right above). # If it could not be loaded from the system and neither found in the repository, # we simply want to have the normal error message, too! # #if ($local_file) { # # XXX load with fallback - is that right? # return _find_par_internals([$PAR_INC_LAST[-1]], @args); #} } } my $rv = _find_par_internals(\@PAR_INC, @args); return $rv if defined $rv or not @PriorityRepositoryObjects; # the repositories that are preferred over locally installed modules my $module = $args[1]; $module =~ s/\.pm$//; $module =~ s/\//::/g; foreach my $client (@PriorityRepositoryObjects) { my $local_file = $client->get_module($module, 0); # 1 == fallback if ($local_file) { # Not loaded as fallback (cf. PRIORITY) thus look at PAR_INC # instead of PAR_INC_LAST return _find_par_internals([$PAR_INC[-1]], @args); } } return(); } # This is the hook placed in @INC for loading PAR's # AFTER any other stuff in @INC # It also deals with loading from repositories as a # fallback-fallback ;) sub find_par_last { my @args = @_; # Try the local PAR files first my $rv = _find_par_internals(\@PAR_INC_LAST, @args); return $rv if defined $rv; # No repositories => return return $rv if not @RepositoryObjects; my $module = $args[1]; $module =~ s/\.pm$//; $module =~ s/\//::/g; foreach my $client (@RepositoryObjects) { my $local_file = $client->get_module($module, 1); # 1 == fallback if ($local_file) { # Loaded as fallback thus look at PAR_INC_LAST return _find_par_internals([$PAR_INC_LAST[-1]], @args); } } return $rv; } # This routine implements loading modules from PARs # both for loading PARs preferably or as fallback. # To distinguish the cases, the first parameter should # be a reference to the corresponding @PAR_INC* array. sub _find_par_internals { my ($INC_ARY, $self, $file, $member_only) = @_; my $scheme; foreach my $path (@$INC_ARY ? @$INC_ARY : @INC) { my $rv = unpar($path, $file, $member_only, 1) or next; $PAR_INC{$path}{$file} = 1; $INC{$file} = $LastTempFile if (lc($file) =~ /^(?!tk).*\.pm$/); return $rv; } return; } sub reload_libs { my @par_files = @_; @par_files = sort keys %LibCache unless @par_files; foreach my $par (@par_files) { my $inc_ref = $PAR_INC{$par} or next; delete $LibCache{$par}; delete $FileCache{$par}; foreach my $file (sort keys %$inc_ref) { delete $INC{$file}; require $file; } } } #sub find_zip_member { # my $file = pop; # # foreach my $zip (@LibCache) { # my $member = _first_member($zip, $file) or next; # return $member; # } # # return; #} sub read_file { my $file = pop; foreach my $zip (@LibCache) { my $member = _first_member($zip, $file) or next; return scalar $member->contents; } return; } sub par_handle { my $par = pop; return $LibCache{$par}; } my %escapes; sub unpar { my ($par, $file, $member_only, $allow_other_ext) = @_; return if not defined $par; my $zip = $LibCache{$par}; my @rv = $par; # a guard against (currently unimplemented) recursion return if $PAR::__unpar; local $PAR::__unpar = 1; unless ($zip) { # URL use case ==> download if ($par =~ m!^\w+://!) { require File::Spec; require LWP::Simple; # reflector support $par .= "pm=$file" if $par =~ /[?&;]/; # prepare cache directory $ENV{PAR_CACHE} ||= '_par'; mkdir $ENV{PAR_CACHE}, 0777; if (!-d $ENV{PAR_CACHE}) { $ENV{PAR_CACHE} = File::Spec->catdir(File::Spec->tmpdir, 'par'); mkdir $ENV{PAR_CACHE}, 0777; return unless -d $ENV{PAR_CACHE}; } # Munge URL into local file name # FIXME: This might result in unbelievably long file names! # I have run into the file/path length limitations of linux # with similar code in PAR::Repository::Client. # I suspect this is even worse on Win32. # -- Steffen my $file = $par; if (!%escapes) { $escapes{chr($_)} = sprintf("%%%02X", $_) for 0..255; } { use bytes; $file =~ s/([^\w\.])/$escapes{$1}/g; } $file = File::Spec->catfile( $ENV{PAR_CACHE}, $file); LWP::Simple::mirror( $par, $file ); return unless -e $file and -f _; $par = $file; } # Got the .par as a string. (reference to scalar, of course) elsif (ref($par) eq 'SCALAR') { ($par, undef) = _tempfile(sub { my $fh = shift; print $fh $$par; }); } # If the par is not a valid .par file name and we're being strict # about this, then also check whether "$par.par" exists elsif (!(($allow_other_ext or $par =~ /\.par\z/i) and -f $par)) { $par .= ".par"; return unless -f $par; } require Archive::Zip; $zip = Archive::Zip->new; my @file; if (!ref $par) { @file = $par; open my $fh, '<', $par; binmode($fh); $par = $fh; bless($par, 'IO::File'); } Archive::Zip::setErrorHandler(sub {}); my $rv = $zip->readFromFileHandle($par, @file); Archive::Zip::setErrorHandler(undef); return unless $rv == AZ_OK; push @LibCache, $zip; $LibCache{$_[0]} = $zip; $FileCache{$_[0]} = _make_file_cache($zip); # only recursive case -- appears to be unused and unimplemented foreach my $member ( _cached_members_matching($zip, "^par/(?:$Config{version}/)?(?:$Config{archname}/)?" ) ) { next if $member->isDirectory; my $content = $member->contents(); next unless $content =~ /^PK\003\004/; push @rv, unpar(\$content, undef, undef, 1); } # extract all shlib dlls from the .par to $ENV{PAR_TEMP} # Intended to fix problem with Alien::wxWidgets/Wx... # NOTE auto/foo/foo.so|dll will get handled by the dynaloader # hook, so no need to pull it out here. # Allow this to be disabled so caller can do their own caching # via import({no_shlib_unpack => 1, file => foo.par}) if(not $unpar_options{no_shlib_unpack} and defined $ENV{PAR_TEMP}) { my @members = _cached_members_matching( $zip, qr#^shlib/$Config{archname}/.*\.\Q$Config{dlext}\E(?:\.|$)# ); foreach my $member (@members) { next if $member->isDirectory; my $member_name = $member->fileName; next unless $member_name =~ m{ \/([^/]+)$ }x or $member_name =~ m{ ^([^/]+)$ }; my $extract_name = $1; my $dest_name = File::Spec->catfile($ENV{PAR_TEMP}, $extract_name); # but don't extract it if we've already got one unless (-e $dest_name) { $member->extractToFileNamed($dest_name) == AZ_OK or die "Can't extract $member_name: $!"; } } } # Now push this path into usual library search paths my $separator = $Config{path_sep}; my $tempdir = $ENV{PAR_TEMP}; foreach my $key (qw( LD_LIBRARY_PATH LIB_PATH LIBRARY_PATH PATH DYLD_LIBRARY_PATH )) { if (defined $ENV{$key} and $ENV{$key} ne '') { # Check whether it's already in the path. If so, don't # append the PAR temp dir in order not to overflow the # maximum length for ENV vars. $ENV{$key} .= $separator . $tempdir unless grep { $_ eq $tempdir } split $separator, $ENV{$key}; } else { $ENV{$key} = $tempdir; } } } $LastAccessedPAR = $zip; return @rv unless defined $file; my $member = _first_member($zip, "lib/$file", "arch/$file", "$arch/$file", "$ver/$file", "$ver/$arch/$file", $file, ) or return; return $member if $member_only; (my $fh, $LastTempFile) = _tempfile( sub { my $fh = shift; my $file = $member->fileName; $member->extractToFileHandle($fh) == AZ_OK or die "Can't extract $file: $!"; }, $member->crc32String . ".pm"); return $fh; } sub _tempfile { my ($callback, $name) = @_; if ($ENV{PAR_CLEAN} or !defined $name) { require File::Temp; if (defined &File::Temp::tempfile) { # under Win32, the file is created with O_TEMPORARY, # and will be deleted by the C runtime; having File::Temp # delete it has the only effect of giving ugly warnings my ($fh, $filename) = File::Temp::tempfile( DIR => $PAR::SetupTemp::PARTemp, UNLINK => ($^O ne 'MSWin32' and $^O !~ /hpux/), ) or die "Cannot create temporary file: $!"; binmode($fh); $callback->($fh); seek($fh, 0, 0); return ($fh, $filename); } } require File::Spec; # untainting tempfile path my ($filename) = File::Spec->catfile($PAR::SetupTemp::PARTemp, $name) =~ /^(.+)$/; unless (-r $filename) { my $tempname = "$filename.$$"; open my $fh, '>', $tempname or die $!; binmode($fh); $callback->($fh); close($fh); # FIXME why? rename($tempname, $filename) or unlink($tempname); } open my $fh, '<', $filename or die $!; binmode($fh); return ($fh, $filename); } # Given an Archive::Zip object, this generates a hash of # file_name_in_zip => file object # and returns a reference to that. # If we broke the encapsulation of A::Zip::Member and # accessed $member->{fileName} directly, that would be # *significantly* faster. sub _make_file_cache { my $zip = shift; if (not ref($zip)) { croak("_make_file_cache needs an Archive::Zip object as argument."); } my $cache = {}; foreach my $member ($zip->members) { $cache->{$member->fileName()} = $member; } return $cache; } # given an Archive::Zip object, this finds the cached hash # of Archive::Zip member names => members, # and returns all member objects whose file names match # a regexp # Without file caching, it just uses $zip->membersMatching sub _cached_members_matching { my $zip = shift; my $regex = shift; my $cache = $FileCache{$zip}; $cache = $FileCache{$zip} = _make_file_cache($zip) if not $cache; return map {$cache->{$_}} grep { $_ =~ $regex } keys %$cache; } # access named zip file member through cache. Fall # back to using Archive::Zip (slow) sub _cached_member_named { my $zip = shift; my $name = shift; my $cache = $FileCache{$zip}; $cache = $FileCache{$zip} = _make_file_cache($zip) if not $cache; return $cache->{$name}; } # Attempt to clean up the temporary directory if # --> We're running in clean mode # --> It's defined # --> It's an existing directory # --> It's empty END { if (exists $ENV{PAR_CLEAN} and $ENV{PAR_CLEAN} and exists $ENV{PAR_TEMP} and defined $ENV{PAR_TEMP} and -d $ENV{PAR_TEMP} ) { local($!); # paranoid: ignore potential errors without clobbering a global variable! rmdir($ENV{PAR_TEMP}); } } 1; __END__ #line 1266 FILEe0bf3c79/PAR/Dist.pmx#line 1 "/Users/adaml/perl5/lib/perl5/PAR/Dist.pm" package PAR::Dist; use 5.006; use strict; require Exporter; use vars qw/$VERSION @ISA @EXPORT @EXPORT_OK $DEBUG/; $VERSION = '0.53'; @ISA = 'Exporter'; @EXPORT = qw/ blib_to_par install_par uninstall_par sign_par verify_par merge_par remove_man get_meta generate_blib_stub /; @EXPORT_OK = qw/ parse_dist_name contains_binaries /; $DEBUG = 0; use Carp qw/carp croak/; use File::Spec; #line 138 sub blib_to_par { @_ = (path => @_) if @_ == 1; my %args = @_; require Config; # don't use 'my $foo ... if ...' it creates a static variable! my $quiet = $args{quiet} || 0; my $dist; my $path = $args{path}; $dist = File::Spec->rel2abs($args{dist}) if $args{dist}; my $name = $args{name}; my $version = $args{version}; my $suffix = $args{suffix} || "$Config::Config{archname}-$Config::Config{version}.par"; my $cwd; if (defined $path) { require Cwd; $cwd = Cwd::cwd(); chdir $path; } _build_blib() unless -d "blib"; my @files; open MANIFEST, ">", File::Spec->catfile("blib", "MANIFEST") or die $!; open META, ">", File::Spec->catfile("blib", "META.yml") or die $!; require File::Find; File::Find::find( sub { next unless $File::Find::name; (-r && !-d) and push ( @files, substr($File::Find::name, 5) ); } , 'blib' ); print MANIFEST join( "\n", ' ', (sort @files), q( # ) ); close MANIFEST; # if MYMETA.yml exists, that takes precedence over META.yml my $meta_file_name = "META.yml"; my $mymeta_file_name = "MYMETA.yml"; $meta_file_name = -s $mymeta_file_name ? $mymeta_file_name : $meta_file_name; if (open(OLD_META, $meta_file_name)) { while () { if (/^distribution_type:/) { print META "distribution_type: par\n"; } else { print META $_; } if (/^name:\s+(.*)/) { $name ||= $1; $name =~ s/::/-/g; } elsif (/^version:\s+(\S*)/) { $version ||= $1; $version =~ s/^['"]|['"]$//g; } } close OLD_META; close META; } if ((!$name or !$version) and open(MAKEFILE, "Makefile")) { while () { if (/^DISTNAME\s+=\s+(.*)$/) { $name ||= $1; } elsif (/^VERSION\s+=\s+(.*)$/) { $version ||= $1; } } } if (not defined($name) or not defined($version)) { # could not determine name or version. Error. my $what; if (not defined $name) { $what = 'name'; $what .= ' and version' if not defined $version; } elsif (not defined $version) { $what = 'version'; } carp("I was unable to determine the $what of the PAR distribution. Please create a Makefile or META.yml file from which we can infer the information or just specify the missing information as an option to blib_to_par."); return(); } $name =~ s/\s+$//; $version =~ s/\s+$//; my $file = "$name-$version-$suffix"; unlink $file if -f $file; print META << "YAML" if fileno(META); name: $name version: '$version' build_requires: {} conflicts: {} dist_name: $file distribution_type: par dynamic_config: 0 generated_by: 'PAR::Dist version $PAR::Dist::VERSION' license: unknown YAML close META; mkdir('blib', 0777); chdir('blib'); require Cwd; my $zipoutfile = File::Spec->catfile(File::Spec->updir, $file); _zip(dist => $zipoutfile); chdir(File::Spec->updir); unlink File::Spec->catfile("blib", "MANIFEST"); unlink File::Spec->catfile("blib", "META.yml"); $dist ||= File::Spec->catfile($cwd, $file) if $cwd; if ($dist and $file ne $dist) { if ( File::Copy::copy($file, $dist) ) { unlink $file; } else { die "Cannot copy $file: $!"; } $file = $dist; } my $pathname = File::Spec->rel2abs($file); if ($^O eq 'MSWin32') { $pathname =~ s!\\!/!g; $pathname =~ s!:!|!g; }; print << "." if !$quiet; Successfully created binary distribution '$file'. Its contents are accessible in compliant browsers as: jar:file://$pathname!/MANIFEST . chdir $cwd if $cwd; return $file; } sub _build_blib { if (-e 'Build') { _system_wrapper($^X, "Build"); } elsif (-e 'Makefile') { _system_wrapper($Config::Config{make}); } elsif (-e 'Build.PL') { _system_wrapper($^X, "Build.PL"); _system_wrapper($^X, "Build"); } elsif (-e 'Makefile.PL') { _system_wrapper($^X, "Makefile.PL"); _system_wrapper($Config::Config{make}); } } #line 391 sub install_par { my %args = &_args; _install_or_uninstall(%args, action => 'install'); } #line 412 sub uninstall_par { my %args = &_args; _install_or_uninstall(%args, action => 'uninstall'); } sub _install_or_uninstall { my %args = &_args; my $name = $args{name}; my $action = $args{action}; my %ENV_copy = %ENV; $ENV{PERL_INSTALL_ROOT} = $args{prefix} if defined $args{prefix}; require Cwd; my $old_dir = Cwd::cwd(); my ($dist, $tmpdir) = _unzip_to_tmpdir( dist => $args{dist}, subdir => 'blib' ); if ( open (META, File::Spec->catfile('blib', 'META.yml')) ) { while () { next unless /^name:\s+(.*)/; $name = $1; $name =~ s/\s+$//; last; } close META; } return if not defined $name or $name eq ''; if (-d 'script') { require ExtUtils::MY; foreach my $file (glob("script/*")) { next unless -T $file; ExtUtils::MY->fixin($file); chmod(0555, $file); } } $name =~ s{::|-}{/}g; require ExtUtils::Install; if ($action eq 'install') { my $target = _installation_target( File::Spec->curdir, $name, \%args ); my $custom_targets = $args{custom_targets} || {}; $target->{$_} = $custom_targets->{$_} foreach keys %{$custom_targets}; my $uninstall_shadows = $args{uninstall_shadows}; my $verbose = $args{verbose}; ExtUtils::Install::install($target, $verbose, 0, $uninstall_shadows); } elsif ($action eq 'uninstall') { require Config; my $verbose = $args{verbose}; ExtUtils::Install::uninstall( $args{packlist_read}||"$Config::Config{installsitearch}/auto/$name/.packlist", $verbose ); } %ENV = %ENV_copy; chdir($old_dir); File::Path::rmtree([$tmpdir]); return 1; } # Returns the default installation target as used by # ExtUtils::Install::install(). First parameter should be the base # directory containing the blib/ we're installing from. # Second parameter should be the name of the distribution for the packlist # paths. Third parameter may be a hash reference with user defined keys for # the target hash. In fact, any contents that do not start with 'inst_' are # skipped. sub _installation_target { require Config; my $dir = shift; my $name = shift; my $user = shift || {}; # accepted sources (and user overrides) my %sources = ( inst_lib => File::Spec->catdir($dir,"blib","lib"), inst_archlib => File::Spec->catdir($dir,"blib","arch"), inst_bin => File::Spec->catdir($dir,'blib','bin'), inst_script => File::Spec->catdir($dir,'blib','script'), inst_man1dir => File::Spec->catdir($dir,'blib','man1'), inst_man3dir => File::Spec->catdir($dir,'blib','man3'), packlist_read => 'read', packlist_write => 'write', ); my $par_has_archlib = _directory_not_empty( $sources{inst_archlib} ); # default targets my $target = { read => $Config::Config{sitearchexp}."/auto/$name/.packlist", write => $Config::Config{installsitearch}."/auto/$name/.packlist", $sources{inst_lib} => ($par_has_archlib ? $Config::Config{installsitearch} : $Config::Config{installsitelib}), $sources{inst_archlib} => $Config::Config{installsitearch}, $sources{inst_bin} => $Config::Config{installbin} , $sources{inst_script} => $Config::Config{installscript}, $sources{inst_man1dir} => $Config::Config{installman1dir}, $sources{inst_man3dir} => $Config::Config{installman3dir}, }; # Included for future support for ${flavour}perl external lib installation # if ($Config::Config{flavour_perl}) { # my $ext = File::Spec->catdir($dir, 'blib', 'ext'); # # from => to # $sources{inst_external_lib} = File::Spec->catdir($ext, 'lib'); # $sources{inst_external_bin} = File::Spec->catdir($ext, 'bin'); # $sources{inst_external_include} = File::Spec->catdir($ext, 'include'); # $sources{inst_external_src} = File::Spec->catdir($ext, 'src'); # $target->{ $sources{inst_external_lib} } = $Config::Config{flavour_install_lib}; # $target->{ $sources{inst_external_bin} } = $Config::Config{flavour_install_bin}; # $target->{ $sources{inst_external_include} } = $Config::Config{flavour_install_include}; # $target->{ $sources{inst_external_src} } = $Config::Config{flavour_install_src}; # } # insert user overrides foreach my $key (keys %$user) { my $value = $user->{$key}; if (not defined $value and $key ne 'packlist_read' and $key ne 'packlist_write') { # undef means "remove" delete $target->{ $sources{$key} }; } elsif (exists $sources{$key}) { # overwrite stuff, don't let the user create new entries $target->{ $sources{$key} } = $value; } } # apply the automatic inst_lib => inst_archlib conversion again # if the user asks for it and there is an archlib in the .par if ($user->{auto_inst_lib_conversion} and $par_has_archlib) { $target->{inst_lib} = $target->{inst_archlib}; } return $target; } sub _directory_not_empty { require File::Find; my($dir) = @_; my $files = 0; File::Find::find(sub { return if $_ eq ".exists"; if (-f) { $File::Find::prune++; $files = 1; } }, $dir); return $files; } #line 579 sub sign_par { my %args = &_args; _verify_or_sign(%args, action => 'sign'); } #line 594 sub verify_par { my %args = &_args; $! = _verify_or_sign(%args, action => 'verify'); return ( $! == Module::Signature::SIGNATURE_OK() ); } #line 623 sub merge_par { my $base_par = shift; my @additional_pars = @_; require Cwd; require File::Copy; require File::Path; require File::Find; # parameter checking if (not defined $base_par) { croak "First argument to merge_par() must be the .par archive to modify."; } if (not -f $base_par or not -r _ or not -w _) { croak "'$base_par' is not a file or you do not have enough permissions to read and modify it."; } foreach (@additional_pars) { if (not -f $_ or not -r _) { croak "'$_' is not a file or you do not have enough permissions to read it."; } } # The unzipping will change directories. Remember old dir. my $old_cwd = Cwd::cwd(); # Unzip the base par to a temp. dir. (undef, my $base_dir) = _unzip_to_tmpdir( dist => $base_par, subdir => 'blib' ); my $blibdir = File::Spec->catdir($base_dir, 'blib'); # move the META.yml to the (main) temp. dir. my $main_meta_file = File::Spec->catfile($base_dir, 'META.yml'); File::Copy::move( File::Spec->catfile($blibdir, 'META.yml'), $main_meta_file ); # delete (incorrect) MANIFEST unlink File::Spec->catfile($blibdir, 'MANIFEST'); # extract additional pars and merge foreach my $par (@additional_pars) { # restore original directory because the par path # might have been relative! chdir($old_cwd); (undef, my $add_dir) = _unzip_to_tmpdir( dist => $par ); # merge the meta (at least the provides info) into the main meta.yml my $meta_file = File::Spec->catfile($add_dir, 'META.yml'); if (-f $meta_file) { _merge_meta($main_meta_file, $meta_file); } my @files; my @dirs; # I hate File::Find # And I hate writing portable code, too. File::Find::find( {wanted =>sub { my $file = $File::Find::name; push @files, $file if -f $file; push @dirs, $file if -d _; }}, $add_dir ); my ($vol, $subdir, undef) = File::Spec->splitpath( $add_dir, 1); my @dir = File::Spec->splitdir( $subdir ); # merge directory structure foreach my $dir (@dirs) { my ($v, $d, undef) = File::Spec->splitpath( $dir, 1 ); my @d = File::Spec->splitdir( $d ); shift @d foreach @dir; # remove tmp dir from path my $target = File::Spec->catdir( $blibdir, @d ); mkdir($target); } # merge files foreach my $file (@files) { my ($v, $d, $f) = File::Spec->splitpath( $file ); my @d = File::Spec->splitdir( $d ); shift @d foreach @dir; # remove tmp dir from path my $target = File::Spec->catfile( File::Spec->catdir( $blibdir, @d ), $f ); File::Copy::copy($file, $target) or die "Could not copy '$file' to '$target': $!"; } chdir($old_cwd); File::Path::rmtree([$add_dir]); } # delete (copied) MANIFEST and META.yml unlink File::Spec->catfile($blibdir, 'MANIFEST'); unlink File::Spec->catfile($blibdir, 'META.yml'); chdir($base_dir); my $resulting_par_file = Cwd::abs_path(blib_to_par(quiet => 1)); chdir($old_cwd); File::Copy::move($resulting_par_file, $base_par); File::Path::rmtree([$base_dir]); } sub _merge_meta { my $meta_orig_file = shift; my $meta_extra_file = shift; return() if not defined $meta_orig_file or not -f $meta_orig_file; return 1 if not defined $meta_extra_file or not -f $meta_extra_file; my $yaml_functions = _get_yaml_functions(); die "Cannot merge META.yml files without a YAML reader/writer" if !exists $yaml_functions->{LoadFile} or !exists $yaml_functions->{DumpFile}; my $orig_meta = $yaml_functions->{LoadFile}->($meta_orig_file); my $extra_meta = $yaml_functions->{LoadFile}->($meta_extra_file); # I seem to remember there was this incompatibility between the different # YAML implementations with regards to "document" handling: my $orig_tree = (ref($orig_meta) eq 'ARRAY' ? $orig_meta->[0] : $orig_meta); my $extra_tree = (ref($extra_meta) eq 'ARRAY' ? $extra_meta->[0] : $extra_meta); _merge_provides($orig_tree, $extra_tree); _merge_requires($orig_tree, $extra_tree); $yaml_functions->{DumpFile}->($meta_orig_file, $orig_meta); return 1; } # merge the two-level provides sections of META.yml sub _merge_provides { my $orig_hash = shift; my $extra_hash = shift; return() if not exists $extra_hash->{provides}; $orig_hash->{provides} ||= {}; my $orig_provides = $orig_hash->{provides}; my $extra_provides = $extra_hash->{provides}; # two level clone is enough wrt META spec 1.4 # overwrite the original provides since we're also overwriting the files. foreach my $module (keys %$extra_provides) { my $extra_mod_hash = $extra_provides->{$module}; my %mod_hash; $mod_hash{$_} = $extra_mod_hash->{$_} for keys %$extra_mod_hash; $orig_provides->{$module} = \%mod_hash; } } # merge the single-level requires-like sections of META.yml sub _merge_requires { my $orig_hash = shift; my $extra_hash = shift; foreach my $type (qw(requires build_requires configure_requires recommends)) { next if not exists $extra_hash->{$type}; $orig_hash->{$type} ||= {}; # one level clone is enough wrt META spec 1.4 foreach my $module (keys %{ $extra_hash->{$type} }) { # FIXME there should be a version comparison here, BUT how are we going to do that without a guaranteed version.pm? $orig_hash->{$type}{$module} = $extra_hash->{$type}{$module}; # assign version and module name } } } #line 812 sub remove_man { my %args = &_args; my $par = $args{dist}; require Cwd; require File::Copy; require File::Path; require File::Find; # parameter checking if (not defined $par) { croak "First argument to remove_man() must be the .par archive to modify."; } if (not -f $par or not -r _ or not -w _) { croak "'$par' is not a file or you do not have enough permissions to read and modify it."; } # The unzipping will change directories. Remember old dir. my $old_cwd = Cwd::cwd(); # Unzip the base par to a temp. dir. (undef, my $base_dir) = _unzip_to_tmpdir( dist => $par, subdir => 'blib' ); my $blibdir = File::Spec->catdir($base_dir, 'blib'); # move the META.yml to the (main) temp. dir. File::Copy::move( File::Spec->catfile($blibdir, 'META.yml'), File::Spec->catfile($base_dir, 'META.yml') ); # delete (incorrect) MANIFEST unlink File::Spec->catfile($blibdir, 'MANIFEST'); opendir DIRECTORY, 'blib' or die $!; my @dirs = grep { /^blib\/(?:man\d*|html)$/ } grep { -d $_ } map { File::Spec->catfile('blib', $_) } readdir DIRECTORY; close DIRECTORY; File::Path::rmtree(\@dirs); chdir($base_dir); my $resulting_par_file = Cwd::abs_path(blib_to_par()); chdir($old_cwd); File::Copy::move($resulting_par_file, $par); File::Path::rmtree([$base_dir]); } #line 878 sub get_meta { my %args = &_args; my $dist = $args{dist}; return undef if not defined $dist or not -r $dist; require Cwd; require File::Path; # The unzipping will change directories. Remember old dir. my $old_cwd = Cwd::cwd(); # Unzip the base par to a temp. dir. (undef, my $base_dir) = _unzip_to_tmpdir( dist => $dist, subdir => 'blib' ); my $blibdir = File::Spec->catdir($base_dir, 'blib'); my $meta = File::Spec->catfile($blibdir, 'META.yml'); if (not -r $meta) { return undef; } open FH, '<', $meta or die "Could not open file '$meta' for reading: $!"; local $/ = undef; my $meta_text = ; close FH; chdir($old_cwd); File::Path::rmtree([$base_dir]); return $meta_text; } sub _unzip { my %args = &_args; my $dist = $args{dist}; my $path = $args{path} || File::Spec->curdir; return unless -f $dist; # Try fast unzipping first if (eval { require Archive::Unzip::Burst; 1 }) { my $return = !Archive::Unzip::Burst::unzip($dist, $path); return if $return; # true return value == error (a la system call) } # Then slow unzipping if (eval { require Archive::Zip; 1 }) { my $zip = Archive::Zip->new; local %SIG; $SIG{__WARN__} = sub { print STDERR $_[0] unless $_[0] =~ /\bstat\b/ }; return unless $zip->read($dist) == Archive::Zip::AZ_OK() and $zip->extractTree('', "$path/") == Archive::Zip::AZ_OK(); } # Then fall back to the system else { undef $!; if (_system_wrapper(unzip => $dist, '-d', $path)) { die "Failed to unzip '$dist' to path '$path': Could neither load " . "Archive::Zip nor (successfully) run the system 'unzip' (unzip said: $!)"; } } return 1; } sub _zip { my %args = &_args; my $dist = $args{dist}; if (eval { require Archive::Zip; 1 }) { my $zip = Archive::Zip->new; $zip->addTree( File::Spec->curdir, '' ); $zip->writeToFileNamed( $dist ) == Archive::Zip::AZ_OK() or die $!; } else { undef $!; if (_system_wrapper(qw(zip -r), $dist, File::Spec->curdir)) { die "Failed to zip '" .File::Spec->curdir(). "' to '$dist': Could neither load " . "Archive::Zip nor (successfully) run the system 'zip' (zip said: $!)"; } } return 1; } # This sub munges the arguments to most of the PAR::Dist functions # into a hash. On the way, it downloads PAR archives as necessary, etc. sub _args { # default to the first .par in the CWD if (not @_) { @_ = (glob('*.par'))[0]; } # single argument => it's a distribution file name or URL @_ = (dist => @_) if @_ == 1; my %args = @_; $args{name} ||= $args{dist}; # If we are installing from an URL, we want to munge the # distribution name so that it is in form "Module-Name" if (defined $args{name}) { $args{name} =~ s/^\w+:\/\///; my @elems = parse_dist_name($args{name}); # @elems is name, version, arch, perlversion if (defined $elems[0]) { $args{name} = $elems[0]; } else { $args{name} =~ s/^.*\/([^\/]+)$/$1/; $args{name} =~ s/^([0-9A-Za-z_-]+)-\d+\..+$/$1/; } } # append suffix if there is none if ($args{dist} and not $args{dist} =~ /\.[a-zA-Z_][^.]*$/) { require Config; my $suffix = $args{suffix}; $suffix ||= "$Config::Config{archname}-$Config::Config{version}.par"; $args{dist} .= "-$suffix"; } # download if it's an URL if ($args{dist} and $args{dist} =~ m!^\w+://!) { $args{dist} = _fetch(dist => $args{dist}) } return %args; } # Download PAR archive, but only if necessary (mirror!) my %escapes; sub _fetch { my %args = @_; if ($args{dist} =~ s/^file:\/\///) { return $args{dist} if -e $args{dist}; return; } require LWP::Simple; $ENV{PAR_TEMP} ||= File::Spec->catdir(File::Spec->tmpdir, 'par'); mkdir $ENV{PAR_TEMP}, 0777; %escapes = map { chr($_) => sprintf("%%%02X", $_) } 0..255 unless %escapes; $args{dist} =~ s{^cpan://((([a-zA-Z])[a-zA-Z])[-_a-zA-Z]+)/} {http://www.cpan.org/modules/by-authors/id/\U$3/$2/$1\E/}; my $file = $args{dist}; $file =~ s/([^\w\.])/$escapes{$1}/g; $file = File::Spec->catfile( $ENV{PAR_TEMP}, $file); my $rc = LWP::Simple::mirror( $args{dist}, $file ); if (!LWP::Simple::is_success($rc) and $rc != 304) { die "Error $rc: ", LWP::Simple::status_message($rc), " ($args{dist})\n"; } return $file if -e $file; return; } sub _verify_or_sign { my %args = &_args; require File::Path; require Module::Signature; die "Module::Signature version 0.25 required" unless Module::Signature->VERSION >= 0.25; require Cwd; my $cwd = Cwd::cwd(); my $action = $args{action}; my ($dist, $tmpdir) = _unzip_to_tmpdir($args{dist}); $action ||= (-e 'SIGNATURE' ? 'verify' : 'sign'); if ($action eq 'sign') { open FH, '>SIGNATURE' unless -e 'SIGNATURE'; open FH, 'MANIFEST' or die $!; local $/; my $out = ; if ($out !~ /^SIGNATURE(?:\s|$)/m) { $out =~ s/^(?!\s)/SIGNATURE\n/m; open FH, '>MANIFEST' or die $!; print FH $out; } close FH; $args{overwrite} = 1 unless exists $args{overwrite}; $args{skip} = 0 unless exists $args{skip}; } my $rv = Module::Signature->can($action)->(%args); _zip(dist => $dist) if $action eq 'sign'; File::Path::rmtree([$tmpdir]); chdir($cwd); return $rv; } sub _unzip_to_tmpdir { my %args = &_args; require File::Temp; require Cwd; my $dist = File::Spec->rel2abs($args{dist}); my $tmpdir = File::Temp::tempdir("parXXXXX", TMPDIR => 1, CLEANUP => 1) or die "Could not create temporary directory: $!"; $tmpdir = Cwd::abs_path($tmpdir); # symlinks cause Archive::Zip issues on some systems my $path = $tmpdir; $path = File::Spec->catdir($tmpdir, $args{subdir}) if defined $args{subdir}; _unzip(dist => $dist, path => $path); chdir $tmpdir; return ($dist, $tmpdir); } #line 1128 sub parse_dist_name { my $file = shift; return(undef, undef, undef, undef) if not defined $file; (undef, undef, $file) = File::Spec->splitpath($file); my $version = qr/v?(?:\d+(?:_\d+)?|\d*(?:\.\d+(?:_\d+)?)+)/; $file =~ s/\.(?:par|tar\.gz|tar)$//i; my @elem = split /-/, $file; my (@dn, $dv, @arch, $pv); while (@elem) { my $e = shift @elem; if ( $e =~ /^$version$/o and not(# if not next token also a version # (assumes an arch string doesnt start with a version...) @elem and $elem[0] =~ /^$version$/o ) ) { $dv = $e; last; } push @dn, $e; } my $dn; $dn = join('-', @dn) if @dn; if (not @elem) { return( $dn, $dv, undef, undef); } while (@elem) { my $e = shift @elem; if ($e =~ /^(?:$version|any_version)$/) { $pv = $e; last; } push @arch, $e; } my $arch; $arch = join('-', @arch) if @arch; return($dn, $dv, $arch, $pv); } #line 1204 sub generate_blib_stub { my %args = &_args; my $dist = $args{dist}; require Config; my $name = $args{name}; my $version = $args{version}; my $suffix = $args{suffix}; my ($parse_name, $parse_version, $archname, $perlversion) = parse_dist_name($dist); $name ||= $parse_name; $version ||= $parse_version; $suffix = "$archname-$perlversion" if (not defined $suffix or $suffix eq '') and $archname and $perlversion; $suffix ||= "$Config::Config{archname}-$Config::Config{version}"; if ( grep { not defined $_ } ($name, $version, $suffix) ) { warn "Could not determine distribution meta information from distribution name '$dist'"; return(); } $suffix =~ s/\.par$//; if (not -f 'META.yml') { open META, '>', 'META.yml' or die "Could not open META.yml file for writing: $!"; print META << "YAML" if fileno(META); name: $name version: '$version' build_requires: {} conflicts: {} dist_name: $name-$version-$suffix.par distribution_type: par dynamic_config: 0 generated_by: 'PAR::Dist version $PAR::Dist::VERSION' license: unknown YAML close META; } mkdir('blib'); mkdir(File::Spec->catdir('blib', 'lib')); mkdir(File::Spec->catdir('blib', 'script')); return 1; } #line 1272 sub contains_binaries { require File::Find; my %args = &_args; my $dist = $args{dist}; return undef if not defined $dist or not -r $dist; require Cwd; require File::Path; # The unzipping will change directories. Remember old dir. my $old_cwd = Cwd::cwd(); # Unzip the base par to a temp. dir. (undef, my $base_dir) = _unzip_to_tmpdir( dist => $dist, subdir => 'blib' ); my $blibdir = File::Spec->catdir($base_dir, 'blib'); my $archdir = File::Spec->catdir($blibdir, 'arch'); my $found = 0; File::Find::find( sub { $found++ if -f $_ and not /^\.exists$/; }, $archdir ); chdir($old_cwd); File::Path::rmtree([$base_dir]); return $found ? 1 : 0; } sub _system_wrapper { if ($DEBUG) { Carp::cluck("Running system call '@_' from:"); } return system(@_); } # stolen from Module::Install::Can # very much internal and subject to change or removal sub _MI_can_run { require ExtUtils::MakeMaker; my ($cmd) = @_; my $_cmd = $cmd; return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd)); for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') { my $abs = File::Spec->catfile($dir, $cmd); return $abs if (-x $abs or $abs = MM->maybe_command($abs)); } return; } # Tries to load any YAML reader writer I know of # returns nothing on failure or hash reference containing # a subset of Load, Dump, LoadFile, DumpFile # entries with sub references on success. sub _get_yaml_functions { # reasoning for the ranking here: # - XS is the de-facto standard nowadays. # - YAML.pm is slow and aging # - syck is fast and reasonably complete # - Tiny is only a very small subset # - Parse... is only a reader and only deals with the same subset as ::Tiny my @modules = qw(YAML::XS YAML YAML::Tiny YAML::Syck Parse::CPAN::Meta); my %yaml_functions; foreach my $module (@modules) { eval "require $module;"; if (!$@) { warn "PAR::Dist testers/debug info: Using '$module' as YAML implementation" if $DEBUG; foreach my $sub (qw(Load Dump LoadFile DumpFile)) { no strict 'refs'; my $subref = *{"${module}::$sub"}{CODE}; if (defined $subref and ref($subref) eq 'CODE') { $yaml_functions{$sub} = $subref; } } $yaml_functions{yaml_provider} = $module; last; } } # end foreach module candidates if (not keys %yaml_functions) { warn "Cannot find a working YAML reader/writer implementation. Tried to load all of '@modules'"; } return(\%yaml_functions); } sub _check_tools { my $tools = _get_yaml_functions(); if ($DEBUG) { foreach (qw/Load Dump LoadFile DumpFile/) { warn "No YAML support for $_ found.\n" if not defined $tools->{$_}; } } $tools->{zip} = undef; # A::Zip 1.28 was a broken release... if (eval {require Archive::Zip; 1;} and $Archive::Zip::VERSION ne '1.28') { warn "Using Archive::Zip as ZIP tool.\n" if $DEBUG; $tools->{zip} = 'Archive::Zip'; } elsif (_MI_can_run("zip") and _MI_can_run("unzip")) { warn "Using zip/unzip as ZIP tool.\n" if $DEBUG; $tools->{zip} = 'zip'; } else { warn "Found neither Archive::Zip (version != 1.28) nor ZIP/UNZIP as valid ZIP tools.\n" if $DEBUG; $tools->{zip} = undef; } return $tools; } 1; #line 1423 FILE7fc08f90/PAR/Filter.pm}#line 1 "/Users/adaml/perl5/lib/perl5/PAR/Filter.pm" package PAR::Filter; use 5.006; use strict; use warnings; our $VERSION = '0.03'; #line 64 sub new { my $class = shift; require "PAR/Filter/$_.pm" foreach @_; bless(\@_, $class); } sub apply { my ($self, $ref, $name) = @_; my $filename = $name || '-e'; if (!ref $ref) { $name ||= $filename = $ref; local $/; open my $fh, "<", $ref or die $!; binmode($fh); my $content = <$fh>; $ref = \$content; return $ref unless length($content); } "PAR::Filter::$_"->new->apply( $ref, $filename, $name ) foreach @$self; return $ref; } 1; #line 106 FILE#0fd7fc65/PAR/Filter/PatchContent.pm#line 1 "/Users/adaml/perl5/lib/perl5/PAR/Filter/PatchContent.pm" package PAR::Filter::PatchContent; use 5.006; use strict; use warnings; use base 'PAR::Filter'; #line 22 sub PATCH_CONTENT () { +{ map { ref($_) ? $_ : lc($_) } 'AutoLoader.pm' => [ '$is_dosish = ' => '$is_dosish = $^O eq \'cygwin\' || ', ], 'DynaLoader.pm' => [ 'my $do_expand = ' => # perl >= 5.36.0 'use vars qw($do_expand); $do_expand = ', ], 'Pod/Usage.pm' => [ ' = $0' => ' = $ENV{PAR_0} || $0', ], # Some versions of Spreadsheet::ParseExcel have a weird non-POD construct =cmmt # that is used to comment out a block of code. perl treats it as POD and strips it. # Since it's not POD, POD parsers ignore it. # PAR::Filter::PodStrip only strips valid POD. Hence we remove it here. 'Spreadsheet/ParseExcel.pm' => [ qr/^=cmmt\s+.*?^=cut\s*/sm => '', ], 'SQL/Parser.pm' => [ 'my @dialects;' => 'require PAR; my @dialects = (); foreach my $member ( $PAR::LastAccessedPAR->members ) { next unless $member->fileName =~ m!\bSQL/Dialects/([^/]+)\.pm$!; push @dialects, $1; } ', ], 'Tk.pm' => [ 'foreach $dir (@INC)' => 'require PAR; if (my $member = PAR::unpar($0, $file, 1)) { $file =~ s![/\\\\]!_!g; return PAR::Heavy::_dl_extract($member,$file,$file); } if (my $member = PAR::unpar($0, my $name = $_[1], 1)) { $name =~ s![/\\\\]!_!g; return PAR::Heavy::_dl_extract($member,$name,$name); } foreach $dir (@INC)', ], 'Tk/Widget.pm' => [ 'if (defined($name=$INC{"$pkg.pm"}))' => 'if (defined($name=$INC{"$pkg.pm"}) and !ref($name) and $name !~ m!^/loader/!)', ], 'Win32/API/Type.pm' => [ 'INIT ' => '', ], 'Win32/SystemInfo.pm' => [ '$dll .= "cpuspd.dll";' => 'require PAR; $dll = "lib/Win32/cpuspd.dll"; if (my $member = PAR::unpar($0, $dll, 1)) { $dll = PAR::Heavy::_dl_extract($member,"cpuspd.dll","cpuspd.dll"); $dll =~ s!\\\\!/!g; } else { die $! }', ], 'XSLoader.pm' => [ 'goto retry unless $module and defined &dl_load_file;' => 'goto retry;', # XSLoader <= 0.10 'goto \&XSLoader::bootstrap_inherit unless $module and defined &dl_load_file;' => 'goto \&XSLoader::bootstrap_inherit;', # XSLoader >= 0.14 ], 'diagnostics.pm' => [ 'CONFIG: ' => 'CONFIG: if (0) ', 'if (eof(POD_DIAG)) ' => 'if (0 and eof(POD_DIAG)) ', 'close POD_DIAG' => '# close POD_DIAG', 'while () ' => 'require PAR; use Config; my @files = ( "lib/pod/perldiag.pod", "lib/Pod/perldiag.pod", "lib/pod/perldiag-$Config{version}.pod", "lib/Pod/perldiag-$Config{version}.pod", "lib/pods/perldiag.pod", "lib/pods/perldiag-$Config{version}.pod", ); my $contents; foreach my $file (@files) { $contents = PAR::read_file($file); last if defined $contents; } for(map "$_\\n\\n", split/(?:\\r?\\n){2,}/, $contents) ', ], 'utf8_heavy.pl' => [ '$list ||= eval { $caller->$type(); }' => '$list = eval { $caller->$type(); }', '|| croak("Can\'t find $encoding character property definition via $caller->$type or $file.pl")' => '|| croak("Can\'t find $encoding character property definition via $caller->$type or $file.pl") unless $list;' ], } }; sub apply { my ($class, $ref, $filename, $name) = @_; { use bytes; $$ref =~ s/^\xEF\xBB\xBF//; } # remove utf8 BOM my @rule = @{PATCH_CONTENT->{lc($name)}||[]} or return $$ref; while (my ($from, $to) = splice(@rule, 0, 2)) { if (ref($from) eq 'Regexp') { $$ref =~ s/$from/$to/g; } else { $$ref =~ s/\Q$from\E/$to/g; } } return $$ref; } 1; #line 163 FILE438c4970/PAR/Filter/PodStrip.pm#line 1 "/Users/adaml/perl5/lib/perl5/PAR/Filter/PodStrip.pm" package PAR::Filter::PodStrip; use 5.006; use strict; use warnings; use base 'PAR::Filter'; #line 22 sub apply { my ($class, $ref, $filename, $name) = @_; no warnings 'uninitialized'; my $data = ''; $data = $1 if $$ref =~ s/((?:^__DATA__\r?\n).*)//ms; my $line = 1; if ($$ref =~ /^=(?:head\d|pod|begin|item|over|for|back|end|cut)\b/) { $$ref = "\n$$ref"; $line--; } $$ref =~ s{( (.*?\n) (?:=(?:head\d|pod|begin|item|over|for|back|end)\b .*?\n) (?:=cut[\t ]*[\r\n]*?|\Z) (\r?\n)? )}{ my ($pre, $post) = ($2, $3); "$pre#line " . ( $line += ( () = ( $1 =~ /\n/g ) ) ) . $post; }gsex; $$ref =~ s{^=encoding\s+\S+\s*$}{\n}mg; $$ref = '#line 1 "' . ($filename) . "\"\n" . $$ref if length $filename; $$ref =~ s/^#line 1 (.*\n)(#!.*\n)/$2#line 2 $1/g; $$ref .= $data; } 1; #line 87 FILEf4c00bb3/PAR/Heavy.pm'#line 1 "/Users/adaml/perl5/lib/perl5/PAR/Heavy.pm" package PAR::Heavy; use strict; use warnings; $PAR::Heavy::VERSION = '0.12'; #line 20 ######################################################################## # Dynamic inclusion of XS modules # NOTE: Don't "use" any module here, esp. one that is an XS module or # whose "use" could cause the loading of an XS module thru its dependencies. # enable debug/trace messages from DynaLoader perl code my $dl_debug = $ENV{PERL_DL_DEBUG} || 0; our %FullCache; my ($bootstrap, $dl_findfile); # Caches for code references my ($cache_key); # The current file to find my $is_insensitive_fs = ( -s $0 and (-s lc($0) || -1) == (-s uc($0) || -1) and (-s lc($0) || -1) == -s $0 ); # Adds pre-hooks to Dynaloader's key methods sub _init_dynaloader { return if $bootstrap; return unless eval { require DynaLoader; DynaLoader::dl_findfile(); 1 }; print STDERR "PAR::Heavy: pre-hooks to Dynaloader's key methods\n" if $dl_debug; $bootstrap = \&DynaLoader::bootstrap; $dl_findfile = \&DynaLoader::dl_findfile; { no strict 'refs'; local $^W; no warnings 'redefine'; *{'DynaLoader::dl_expandspec'} = sub { return }; *{'DynaLoader::bootstrap'} = \&_bootstrap; *{'DynaLoader::dl_findfile'} = \&_dl_findfile; } } # Return the cached location of .dll inside PAR first, if possible. sub _dl_findfile { print STDERR "PAR::Heavy::_dl_findfile($cache_key)\n" if $dl_debug; if (exists $FullCache{$cache_key}) { print STDERR " found in FullCache as $FullCache{$cache_key}\n" if $dl_debug; return $FullCache{$cache_key}; } if ($is_insensitive_fs) { # We have a case-insensitive filesystem... my ($key) = grep { lc($_) eq lc($cache_key) } keys %FullCache; if (defined $key) { print STDERR " found case-insensitively in FullCache as $FullCache{$key}\n" if $dl_debug; return $FullCache{$key}; } } print STDERR " fall back to DynaLoader::dl_findfile\n" if $dl_debug; return $dl_findfile->(@_); } # Find and extract .dll from PAR files for a given dynamic module. sub _bootstrap { my (@args) = @_; my ($module) = $args[0] or return; my @modparts = split(/::/, $module); my $modfname = $modparts[-1]; $modfname = &DynaLoader::mod2fname(\@modparts) if defined &DynaLoader::mod2fname; if (($^O eq 'NetWare') && (length($modfname) > 8)) { $modfname = substr($modfname, 0, 8); } my $modpname = join((($^O eq 'MacOS') ? ':' : '/'), @modparts); my $file = $cache_key = "auto/$modpname/$modfname.$DynaLoader::dl_dlext"; if ($FullCache{$file}) { # TODO: understand local $DynaLoader::do_expand = 1; return $bootstrap->(@args); } my $member; # First, try to find things in the preferentially loaded PARs: $member = PAR::_find_par_internals([@PAR::PAR_INC], undef, $file, 1) if defined &PAR::_find_par_internals; # If that failed to find the dll, let DynaLoader (try or) throw an error unless ($member) { my $filename = eval { $bootstrap->(@args) }; return $filename if not $@ and defined $filename; # Now try the fallback pars $member = PAR::_find_par_internals([@PAR::PAR_INC_LAST], undef, $file, 1) if defined &PAR::_find_par_internals; # If that fails, let dynaloader have another go JUST to throw an error # While this may seem wasteful, nothing really matters once we fail to # load shared libraries! unless ($member) { return $bootstrap->(@args); } } $FullCache{$file} = _dl_extract($member); # Now extract all associated shared objs in the same auto/ dir # XXX: shouldn't this also set $FullCache{...} for those files? my $first = $member->fileName; my $path_pattern = $first; $path_pattern =~ s{[^/]*$}{}; if ($PAR::LastAccessedPAR) { foreach my $member ( $PAR::LastAccessedPAR->members ) { next if $member->isDirectory; my $name = $member->fileName; next if $name eq $first; next unless $name =~ m{^/?\Q$path_pattern\E\/[^/]*\.\Q$DynaLoader::dl_dlext\E[^/]*$}; $name =~ s{.*/}{}; _dl_extract($member, $name); } } local $DynaLoader::do_expand = 1; return $bootstrap->(@args); } sub _dl_extract { my ($member, $name) = @_; $name ||= $member->crc32String . ".$DynaLoader::dl_dlext"; my $filename = File::Spec->catfile($ENV{PAR_TEMP} || File::Spec->tmpdir, $name); ($filename) = $filename =~ /^([\x20-\xff]+)$/; return $filename if -e $filename && -s _ == $member->uncompressedSize; # $filename doesn't exist or hasn't been completely extracted: # extract it under a temporary name that isn't likely to be used # by concurrent processes doing the same my $tempname = "$filename.$$"; $member->extractToFileNamed($tempname) == Archive::Zip::AZ_OK() or die "Can't extract archive member ".$member->fileName." to $tempname: $!"; # now that we have a "good" copy in $tempname, rename it to $filename; # if this fails (e.g. some OSes won't let you delete DLLs that are # in use), but $filename exists, we assume that $filename is also # "good": remove $tempname and return $filename unless (rename($tempname, $filename)) { -e $filename or die "can't rename $tempname to $filename: $!"; unlink($tempname); } return $filename; } 1; #line 212 FILE6db56080/PAR/SetupProgname.pm#line 1 "/Users/adaml/perl5/lib/perl5/PAR/SetupProgname.pm" package PAR::SetupProgname; $PAR::SetupProgname::VERSION = '1.002'; use 5.008009; use strict; use warnings; use Config; #line 26 # for PAR internal use only! our $Progname = $ENV{PAR_PROGNAME} || $0; # same code lives in PAR::Packer's par.pl! sub set_progname { require File::Spec; if (defined $ENV{PAR_PROGNAME} and $ENV{PAR_PROGNAME} =~ /(.+)/) { $Progname = $1; } $Progname = $0 if not defined $Progname; if (( () = File::Spec->splitdir($Progname) ) > 1 or !$ENV{PAR_PROGNAME}) { my $name = $Progname; if (-s $name) { $Progname = $name; return } if ($Config{_exe}) { $name = "$Progname$Config{_exe}"; if (-s $name) { $Progname = $name; return } } } foreach my $dir (split /\Q$Config{path_sep}\E/, $ENV{PATH}) { next if exists $ENV{PAR_TEMP} and $dir eq $ENV{PAR_TEMP}; my $name = File::Spec->catfile($dir, $Progname); if (-s $name) { $Progname = $name; return } if ($Config{_exe}) { $name = File::Spec->catfile($dir, "$Progname$Config{_exe}"); if (-s $name) { $Progname = $name; return } } } } 1; __END__ #line 95 FILEef2a7e1f/PAR/SetupTemp.pm`#line 1 "/Users/adaml/perl5/lib/perl5/PAR/SetupTemp.pm" package PAR::SetupTemp; $PAR::SetupTemp::VERSION = '1.002'; use 5.008009; use strict; use warnings; use Fcntl ':mode'; use PAR::SetupProgname; #line 31 # for PAR internal use only! our $PARTemp; # name of the canary file our $Canary = "_CANARY_.txt"; # how much to "date back" the canary file (in seconds) our $CanaryDateBack = 24 * 3600; # 1 day # The C version of this code appears in myldr/mktmpdir.c # This code also lives in PAR::Packer's par.pl as _set_par_temp! sub set_par_temp_env { PAR::SetupProgname::set_progname() unless defined $PAR::SetupProgname::Progname; if (defined $ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/) { $PARTemp = $1; return; } my $stmpdir = _get_par_user_tempdir(); die "unable to create cache directory" unless $stmpdir; require File::Spec; if (!$ENV{PAR_CLEAN} and my $mtime = (stat($PAR::SetupProgname::Progname))[9]) { require Digest::SHA; my $ctx = Digest::SHA->new(1); if ($ctx and open(my $fh, "<", $PAR::SetupProgname::Progname)) { binmode($fh); $ctx->addfile($fh); close($fh); } $stmpdir = File::Spec->catdir( $stmpdir, "cache-" . ( $ctx ? $ctx->hexdigest : $mtime ) ); } else { $ENV{PAR_CLEAN} = 1; $stmpdir = File::Spec->catdir($stmpdir, "temp-$$"); } $ENV{PAR_TEMP} = $stmpdir; mkdir $stmpdir, 0700; $PARTemp = $1 if defined $ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/; } # Find any digester # Used in PAR::Repository::Client! sub _get_digester { my $ctx = eval { require Digest::SHA; Digest::SHA->new(1) } || eval { require Digest::SHA1; Digest::SHA1->new } || eval { require Digest::MD5; Digest::MD5->new }; return $ctx; } # find the per-user temporary directory (eg /tmp/par-$USER) # Used in PAR::Repository::Client! sub _get_par_user_tempdir { my $username = _find_username(); my $temp_path; foreach my $path ( (map $ENV{$_}, qw( PAR_TMPDIR TMPDIR TEMPDIR TEMP TMP )), qw( C:\\TEMP /tmp . ) ) { next unless defined $path and -d $path and -w $path; # create a temp directory that is unique per user # NOTE: $username may be in an unspecified charset/encoding; # use a name that hopefully works for all of them; # also avoid problems with platform-specific meta characters in the name $temp_path = File::Spec->catdir($path, "par-".unpack("H*", $username)); ($temp_path) = $temp_path =~ /^(.*)$/s; unless (mkdir($temp_path, 0700) || $!{EEXIST}) { warn "creation of private subdirectory $temp_path failed (errno=$!)"; return; } unless ($^O eq 'MSWin32') { my @st; unless (@st = lstat($temp_path)) { warn "stat of private subdirectory $temp_path failed (errno=$!)"; return; } if (!S_ISDIR($st[2]) || $st[4] != $< || ($st[2] & 0777) != 0700 ) { warn "private subdirectory $temp_path is unsafe (please remove it and retry your operation)"; return; } } last; } return $temp_path; } # tries hard to find out the name of the current user sub _find_username { my $username; my $pwuid; # does not work everywhere: eval {($pwuid) = getpwuid($>) if defined $>;}; if ( defined(&Win32::LoginName) ) { $username = &Win32::LoginName; } elsif (defined $pwuid) { $username = $pwuid; } else { $username = $ENV{USERNAME} || $ENV{USER} || 'SYSTEM'; } return $username; } 1; __END__ #line 185 PK 9\lib/PK 9\script/PK 9\6} MANIFESTmO9)VGqEO:H $!) my]^{@t~vv!W7c{<7rQ S}6!nz .nW$2b*/FV/NN:{kAwrќbO|"=~ҕp6ffﰐFrA$=j5ܒ;(V۔\<2a2n•\6[<M.3*S060^UE{ Wda@% qDk?ǧ0$d[mZR2Ԗᐱ@7EepC2󚚄ʥY rG䮔$@\!C2.~4U .D |< H ]\qF7u 鈲4֪u Umdk]T}?oύs7z?kf?m2=vaӫ/[\D@e v>85Na^V٩I)(M<[.0 K2 {2z3N;V+-b4O3 Ol-:m.Erá_N韯5sjYvHf~}OPLmvpbӦQa q}ֲMh]?PK 9\META.yml-K0=#`M[F!ƻ;وBW#|R&4pS[|4"nR`=j#ct;Wތi]0 c94U}9k%I@߬h@HԳ%JIkB.tـFPK 9\2m2lib/B/Hooks/EndOfScope.pm}mk0W\pP*u)) :&c*Vҗk ֤es v }K8=9禈}!L(b(y(ЃdLC*Lp nwM0vM?bb4B"RhQB-L0ڡ`yTyٕ+ ԳdG$9Fœ f9 W:{]{w9|Rxɑ١\Wql5Yoذ< s(Cee`87p^rUaW<=j^zTgLlXiHRLR˘n6Bmұ,PPOuE8[iGPK 9\6G$lib/B/Hooks/EndOfScope/PP.pmTmoG~Ŏ\%G9 UNS {";{8&J<"kB?Z_(Uv(Lz|#w V J*i7m[\8ZL EN[RAi (ֶ[InҠ6FcB݇ZY'C2'^Q_ة) _yNaIai.}].n7į> KIA 2`E  E JIB\'EBqf` BncQe*4|[rmWq; UJiZ*7vӭiTK{|ŏE_u.\R*C*cgʬ\r] Ì^V̀N3Z\Yxr^|2oeaQy|WS53іK$T7L$y->kQK7z}z}|E;h,y@r{:Ð#)4/c̨4zlyd+1BZT ] fz:|R:ğ~ ?ŭs .2>$Ń˹guo9hd3t̶}_F;8sMt-X)WڧU#l'Q[S OڛlNTx?[fx:Rd0 Dzv8Ź.(߻w)>UΌ;\ -H9VڥÖLr[rR%*mZq? 1H|ca,s>KjJFQ+:eI^KK)ZmTyUM,^QwaQ%^tn&W_qt1r+C Iwo@\wv0&3%PT>VdD)b%Y81(I4.@O`5Z3tCT9 PJ+ږ 8huA&'‹Ǎ511cȶZpSb v뽳NIfXٌvvMa`ސ3~5<ʦaf=J2(o]ŔasAo8!Lci>[rNX*]~'9'&Ar2q4F:c7V./jlt5ֲrgM.%<e.J)#iՆyRmmyɻ4ϧ?OpJX*Njڝoʒ]nЭw6}g{m04OPK 9\,Ľ) %lib/B/Hooks/EndOfScope/PP/HintHash.pmVkSF_q&84iyL5iYKkkkyW]a\B{]<2 h׹瞫&KWFr6'cBR41#zлo4me=E2c -[jR/;X\/2d43¦db*8ƹ4B&e*4fN>TI zE\ tz8qQttcpnU j?pQi&DF{rjw*h Gp^◯??F~k_wHtu:7:QD}!`&Hq0ŭ&gcTinickfRØq~s[BL<kr| _:t@2T|hunj# ߹K)<u\Gv5\iZ` cgB/銭l=.=-$1070o@F9pjp ybt]#֔%imY2`|n*L* .9ɐx4E<~oYnpq]Z?Qǯ8K Npej"+'!4o:x6:hqM*/Eсk:yFހ|DxpVh8YIIDMJ>&puѭV8u3+ p?ܮz[x&E+(raMTegr\옥Rc` x$,NK!iVyt== ȁg7Zq<>8" lYtսKQtE6ޡ1e/_oAY GUǷ=Xu\h*xߢ忖+!fC]te kptZj_ WS"U#ڃpJlZs$I(h}C/|sA"aBBLx:o]:Z|zUWqC'Q2=??IYgq̒hk`G3/%|Ӓ&hƚʢs I~Cߵp0ލ3~:h(?n?Qkm>Ӕ-^0Dz7)4&/{P `7a{>g4A\(I"b{M0ȓ1i%X¬u ˯G߄s}x385kPjH"BU: -R~-Vt!u]^< ni|(4㤦Ӄd,EK !K2{nC9xe*([K_s߸`STǔ"ƿ ?]H6aB?"'>ql=@f}Lr?=~j,߾2x)If;HG_PK 9\^|[[lib/Git/Repository.pmXms"7ί$0ػ!ؾT[ٽ܇8Ed1ӭpjӯXvV,t~+ -iop|۷0ŋW/_FqزZb/"8?=߰)J+o9Akʊ5$H7ra"x )VjnRFyY4T9[9hlaZ`Pt׼OeE\ּ|[x01| FC. R %KkFv."Bi#?v㽍Fb2մ溩E ֎mXg%gXoA+%k[^YFdUyQVs]sT"[gA!0R >ϭw^=$=0J*{nCFbAJW kì2*ȅ%h$aCp! 4gy$H;[ETSU@v-%1XY!!өľL1\; GnSy03c"6`x6<9m9B>A8z> '11RvHR;C42Q'C{ebEhp}p`e9WO,ރ 1< k(q Vp4 JM ŏ6xL)<[]P=Iiv-89jޤccO'Z뙓cf.tWY scBb%fYSjHkP%JzdTtr+"x{X4.dL JS1kM9n2ԡBiczX_1;K% 2B&9ŷg$I?۴}gK#<ߜFǘCvlMa  1`l6g M#^`|#QzB-sOòĞe;aoҦ$F]PV fMǒqlb,xi-q &c5m?Q-3sQNK{\$1)`VB .'ِX+Go<>exZ\9{VidE2,l2ؙ a}ڦi?ұl!lBi(,ׄ`7b0/,W_c;XS"|qs&6}: {ʦC$7/ ;ؾrf{=re-C}\դ xM'BQʨ#9Vp DGw#ғ*FbD-qgc6uln,̚I[;S-BG#`:۬J-];QKv]qvaì8= )u;5X6%Fvh0&\316'~>4@h]p 9~ V0ogXwgO,(햬n~׾aL-:5P6Ýym! OTK]v|J%Nylމ:;}Ǝf-ОVLUu@ξ {<z8epUUYؠnZQòpЭV:[X2kG7_Ξ ׈Ý]J z(D37&ht5H˨"xa_dVg"lX'2Xط3_\tdWFh:]#sK8B$?gMU 87)upC/ eL 9u,[6 G7^(IQ9Qaj,Zp7W!f&?c rk%[3j{XP tA]la>q' F5d )]B왍z]l뚘tv88Ǟ5>%m9ϓOWPdt&+GlnxrYE|w'Q\+C2`nPv>wO]x7w$#:vrzGo߅4 9zfE^PK 9\:X clib/Git/Repository/Command.pmYo]QT!ɏl+M܋Q\R8@Š\I׸*TRB"!hTYK+! !8\O[s̰afr 3>WȩᚥLSyQ» ɨ=>#kRw;%JS& x9L4ȕĹŅUYUGN.3pHҤфGa5t6Ĉ0p/qxZ3G艭:7ڮ#77ֵ6Κ*M֨ c+_P3bеo5MFMVBFM Xoe6MgtRɼN-ፄ[^mUeu 0|OC<"D\PNU@ rO1K9G,[#|[KG6Aibׄ+9<8oчhD17}FXkҷiܼmd>M:dl%h!Z*L]߃g&_2ĭHRkdL41f"l mdT7iZyu ֽ} k;^jF+2×.Wl[8BS&f!U$ZL҆fip{hS9K:DgtY3鵰~KG^݉|9R116u eFYu,03$Azp14csv!ZFQ`2DOv+K~6pٶl-awՆ|j+6Z->cQ(9?uw'6a!.*V谫t_~D@6;]R;m醴y׼k~iz7zw?y5ZL+fJ WdgAh|CT\0DPK 9\Fzlib/Git/Version/Compare.pmWsHݿH|4$u:7tͩ5+,H`YD (R:(>Ιu\クG n]8jqG2LD#ϊK^j5G;Az.¹@K|„.>|#9#"$OןoIr^ 0csث?h`lN~r\"Yooabjp _BN%e1sE0EE6لG..!rLS<)ᖢ"NyeNKX^ C6}\:e-rUtdaoܺ478s 3h4Ҫ0gmXzm8CG;cDe~Z\ ä8I"Ts01̯V+9.@16NrYmJ@Xl!XxF=x A)&iL%@̹L W7_PtFZ*yl6121=F[DQ+oB}|c)(&e\gqG8;ĝwg2ڿ3.q'8;ƹeܛJ\g7/ҙqyXe\u^:vW/qʸt2L˸-`2".^XT$ʸN5yH~aQ[ 2ɏG/,*ߕqϴ_Ƶ8.:q¢";&?)HqEmq&nf-ϸ.],&eI( ".OG*>#ZU=&kb9٧3V;H60~6-9?ִCYƃqX 9zʟ},:R%O8dz@,tni\2IMlI]!Ӯtfԛ^)-8<+j=\\6wH7^r=Hm̼g'bX`Mu'IvV;T *$Ku:iݾ"6"*3}8aPӑ Frl R҄r-Z[&lMWX~ԛFChFV`6P}4҄fU5 ()*I`JP{2WQZ*|)"bdBxn@%F#R{[gh@a\`}G9=֓'M(*hH4MOA= 4y0`¶įS-ZVCBEJ=ݑhJogde,mMQW<%vti$զ!}–f{6V ̙lvf*"xyG-[ C:}젠?06 8T(gyE">vlϷFz A0Ǡ5(j;G0-c2dz-/'Ja|KiǒӢ(gTp-{OavdqGd:|h8OJ{ןR7l(ߖ9|bt}I>a SP -(4MhOOoUuFI;']+±_9Ko-yF h&mdb*~D)+L ~dRTb>-GW?KݹӇjYv"ϲjDŽ3]TrBwn[ 5V#@xk3[mrnUI~b֘X G0 rpSn8DE2#ᦑxi$YțsJ* $ѤT njߘ%!U_YFm-֝x#@!1j:{`bt)\#CLu(XL+ISiD$R]wu3eU> 睔4wL_]F:Z2 %mAPu{ VX#kW:a7-~q3MS*>+s?,Wäͽ#] 8(Qw1 ("86Oxz')Jx `]!{Z^^nOa%\LHZMm4 L1m-q?=STiKyY%5dEgڻJ#m31S7iIck&+K]jGKhٶ\:%/"!-W$o9~pOkӜ͹{-u&$M}֔1UIFfziW7TF͗S W2? O!I=/ə }ZC 4J-yz؆)GoXiSٖ3v1< )ҜiGj5~Laδgf-=~=nr+mi\Ny40?`9 Ln=Ŷ򉨐lCO zCY0KpMN*Y$XJr|5o+=Lne1FV[ e@4e9oTik:tx($|2[?qqJJͶ=/e`<ˈfg.¯x^kO~fgRǪ}!i{43`N39tY~DWISN$tJ%CZpf' ;Js| |_PK 9\}6%^ lib/Hammer/Getopt.pmV]sV}Wl2ɀa04؝3jq5DtŸ.V~{w>llOʋ{=wHogc3Kx܃_n>$skapwɊlW:^q in\I7t/Ρރe9;0E8K cj,Y PG+gk0 ̫͕iNQKѫpSKqTv::J WΊ}—q.f&UBlX! !'7[uYS_uU2>_KPD8 6NXw 1M ҁC/ L*&nϷ5I$pEOmʹ?g߈J~`Qkhy< 0djCfeIJ?fBGNNxCK!Q`Q1Չpݡ^Ux%!/lWR9?wGHHNf3kzx\^Wbm1@9Q!oDhjYnz$Jq^/t56VCSEJA@y hOFtRRQ*aYZ&:7Gw,TLԷ_X6Y"mhjnlmF[E:KumCW+Ol>aʦ3ՊB])*r%-8R>@;G.QkT,ߡg}{uYOmgF!E]VHC{TA[qcD2Nqsaj9Lȵ'*x( 0QmkB'ee 2LbiӂVYkuJ)Z "̬lIRjRz j8th#>:1xF5BZ줪/KncrR1n@QiB KҬ@GtT_xy/Gz&QNTJoU]rt@B(RjqiSqY=a/*!D!ZZj9(P:wҗ'ȇ.?H|Ӑ>٪lvg+ #ePK 9\3 lib/Hammer/HelperFunc.pmUMo0 Wp@׺. baCjlɕ|4%+N EOܰ|fQ]_cՠ܊< ZI)LU#A#^ۧQ2ݏLJ߳/2*X*(q 5kjQ Ū ħQ\*neRMQŔ^pI N0 Da~qYLiдJ]R!Kdu D? N!Tտ \dC HcADŽFd:-7+݄20ᆅuath˒W#4Cl,ȅ.@%sV.g vQ?xηv/O xPvХW|7>SjF{َ]ȚURۆHV;98|O!{.f#8n$mQA ͌S2*>GZr}MQ7/4( Ⱥ+f4xfȪp5" V.oY7=[ؿ T*%sM)G^[iiiğ[2 \]4S%I㯊.wP\: W蟿[btϯ*&u\z b W8sicdZ;oRS;ӔXFCCh29]D}O8#xY@wڃ]BpӟX7DH.KA%p KnJNQ.¡"aݵQ`4HM6\ jk2 *3SF wr>"'ѹ;嘆z!va!nȮPK 9\d {$lib/Hammer/Manifest.pmZoFbB+YHrrCsq{9;\-,Ԓ撱 K#-PHotϯ+ZLBG{{"~2WJ?BB/XDJ6\&rq-JȻuZWrV%HqX`J UxZ/EAogfmD.Tq*ˑ~QuV ^fMܕB.}h}ob^}gxC*k42+D<_d]#&V< k4%D*#wbY$}')^S')rTH,nsp̀Oޞ>ޗ;𻑹nz[*^?ګc̖E>"Ѭ}W: "{^\#9{8.{vbHK~(㢤fhalx-z_˲0x:d>xPdY "k'QsdCY.R5K|ucz;^8mӞ(,/)f=(gs& +AčXn+UˢB}CfbG, c l{): *L&qĢeO!#8'M!lʲk\\l(yZ-  2HO9U;+.A_EӲ4=\})F n% }UZu O^[pvf6sֵs~k E*C?OgO/6ER"}VJ(u thއEpdb~Oc&%rc,u+j5-h~pF.otBGqW.Nky,5l[4"/ P2(4ho:d8L \6$T^`n|f퓂Wz+D2s.|2n-^)hx"/fa]lC #:h#;`:/1w9 M!Ѝ lUJHE)Hz=+g ,OO?,m#gWuc _ju#Sd lX4I=dWkPYߢeXRT a--43$n M\Ȑ+i`7Xp:$K,3ˌx! ^0`(}IL34Sۇ otbu?eؤ'V'Q(6)u  QH?(Sks,6mG|zcݙIA{>#$ /yQ#RӀPm'>hMuPY2c֑dzi5>9kʋi܌O*jw ,P>yY^m{tOBpDŽn \c7 7h]S<ںnF{[Ԏ۶Qq}νo Wz(zEÍ_T{\{q,\M.f`W0ӛ_r4Dc ީ- 3}"W"gRU܉=9 H6/OYq7.הY0rYvDX=\͵A#!%C{\k8`|y=(U1=Kk5^]QrD,$Ng\fT.9†!뎆pєoT~ph{7\ډ*# Ayf_R: /r#8 /X;7H'ѐٺpFdHǦAȍ=0EfAk>X  >枴B~_9Mh5(u\^ ]]u#a0nhK%G&\ +$MBI-ַ Ù᨝bع^^΋C vJv{§E[K[!׊8ݮa{E9i>sQTFʊr^z侠&W WN ۛ*eƩt#Z"GQ4(HQYqF$lÇ*YUn֗- pܢd7`C nS{Ʀ9ww֢p(Fvubo"i_̗^7B(hs_1^plPx}PK 9\- !lib/Hammer/Plugin.pmSߏ@~k gGM5ć˝&jt#, wݙB߾P[>Iԭn7Rt=/Q |UE ϣ(֨M0ZRz%oۏYJ|m.0ug2d~BYDvSRXKU9h:5'`wLͨ6ہ3ڵdy1 )Cja&CS!*̈́)k!{jCRR!,nhQУgr]ei;Q*]/*M vK}8u8.a[LۇzncH̕FI9.q;gS;Oœd8c Gi2kx`Ӓ ^!KRMm΁E8LB{'ݹ\I^Sw<8^y.gr)*q v_RvWN7<Ɛ ,+%xdGrdqr}WnPK 9\܃.- lib/Hammer/Process_queue.pmVoH~篘K>bJTw(Iwr"D`iapnewfv=]bv џE*mB]ۻML:-\>ƚzI+t EFذ+PIG·<_#qhQՀEIr rg}}Kp̞398F h DfSiu8t> L )= >"?*m)Jl0} 7Y֭ cL"&9[8Oea`Vը_ 蚌:C,dVI[+.26*v>]/_LZyOƾL7|xlv+6Q!+gOw(ٽ"wbLٷ#l`E-벬0FR8;ݱ{ڍz\L?nO+nqoD d)$JXͶŞ9gA;Ę)Y[1VZkQ}hNNC OO+WW v\:F`@Fӎr3˧o\ZhVڽeEC #vlî{*q\pOY~a,G9T"qd꜡F0'p=GHɽ<Z'w =kqW 5Qcq8Pw)eChEyOSrK'FnI,h 3XNx^?PK 9\ULP#lib/Hammer/Process_queue/Process.pmTM0W %1vk6$-miasi)(81Ǯ$HyY̼yw_U#VUeқf(zbvD۝ 2EA*Q*g&ڪ=Jw{%5DZBk34[׫pt:j(DB~,77-]Ӓ-HY>Nq(+9S,v4^\М͝p,e!̀O|||(>^pc䨳"l\˦l"C0h++1OlN(r0ӯx7=!KdQɋTMd5y:΢wqGXiV= ΩPdޓAlf y;@Z-X|ZZ irqc[(⭼UQuʪ"@2l;CUXp&|@6RP6u)tMIO ݈R+hj 8kZ+wb| P!n=":M  `EŪFN 3kO:V!1Vsњ&n,q84mSt4g>+s(w&i2Dh-vxdn_'zxVq3}:B} nvn9HD0 \V%uEp0;X'4RGF 3hUNfs^6jЎ(ȚHMA{S$&d](Uo;sWQihiH|6-"̊${cilDF4_EG=d`9|plmP( ZQck0]ƕT/D[=kY͜QB_~(08+nB^ jѮ).p4c%gj3z*I>܂Ψʊ#jS-q;/ͤfE# VVRP_VY\]UcY*ՄR&.wRȂfˆl]ōӡ(G=y 1@ƻhv|;WYJS?=D)С4boeL՚*iM;a&N<1?;FwG*T$U߈܃Vvn< c8u1Զ &Iąc=RɧiNP(gO"oS E/S[Ky1+DF\9|Ydhy\)x6C+ #/S !- =|<Z 'nlzCk_8GxZa+rS&}Hq^xvfhn`(ω֭> Geuݝ]Sd@! c2K<(i煠wVsJQtp/>|XX9cLV_GslĶ?!bYEώ(I yj`[A:MGsp<.&GSxyhx5mwY*dOZu674E3>x۩+=m!%b^_ֳI@RP+PL?6;*c(ZJgg̻fHKq .#I>.zhVWxZ` ,\3ngDz7Gy {Hirx@nv T+rbZj)E9VLGSZGVղR1u<ۖ8[ eP~UәDs7/_8=_\rxA4&;C_jh ='Ԑs̕-0sM(c8A>ՌЅ13,FJX\>L3Ydt}%K$$ HבS> fԮKP O,]lc#}}OҜ;Duyՠ#=-6Lt65bMw"Si#ht]Lk˰i ڠ\θ$CR45CP@i2gMYNl4L>8@,ģCJfŔ^c1%q! K 1m(&JBbnSat \ oNӷ>TݜdTc(`PwDp="%nH#밾MQR r W3Q R{\?o4}eHMС]月 P'rS*??T=錦TpXYRsKnwYc{8D'-nA*[laWtL;Эj7b `H+hb*D U&.O.EG P+!?=/|M&ZbFnpM:J>Y0٨,wK4zT$W|r 0WNgcZm9]L ͻ>6S3A"W0Uz1$?,.l\9=s )Ə~5GJwF\xy,G]6CM`ZBxW=| K^Tih@??goO)J4l{ "W=(tPv7Ŋu7od$gT` ,)C7xoEzO ?uPbK{"0vD!yC~Ɠ4Lп~{^(ꪓ~ !C\NwF2=DSkio`uB=g/xh}gبާog1606-[l#cͅ5 ZwQDW1c+*o4ljX8t4÷z@R֋0QoBP&chupq֯F¬tWH' =gZmuÇ;;ݵo`ʕ `&OwۅLI1xn7od"ENxր'/\hlK 1R4֨Bi5onċg]XPK 9\:2lib/Hammer/Project/Status.pmUm@ί=X7Yi&Ⅴ(YaZAî ow3pwί8)!My(.fX53~Pb_>/4..KF$$z)4$"I"ijr|ĐPpYЅfvG~; kQiLzҀR3(iF <^W,9kJͨiE(e:[du!11]{k[Kj0% V=~1H:o?sG7%}N^Mt֘?ͣ'G:K%6n˞#;Á۫71Ӿ{ D8J n@86tWO{s?^psY[$ŐsYO:XOVô֊4bPod miO0̗m+*S$D􁪱iغoHS{ItO"DgD2BPK 9\nlib/Hammer/Stream.pmQO@k"pmOjjl >:kt[w!gR0we37ŝ&1Je\y;N\eu:3DkQkCpԕa!܅%U;L¹eQ52KӞ7ϓ)LϜqx5$~Z[ @/rböGߔQ4i`1$l ͽF ҏXFb15A38+44#]jE2R0˕(%ecrpy{EIڋ!`цK^<74(F k.F{8ÁA }schB%Zݳ_ʗ?^}?p`m0j6ᐶzTkgUNE+j}ӟIPK 9\aXlib/Hammer/Stream/Process.pmS]0|ؒM{:eLg)+znrdRVk'5x>d%O"@E}z k̞cV 9.쮵jta\dL8d> iMd[w$X< W_ +=]A eoD '|t(Br N){e<22 փ!TwjE ! JNΫfHiг=m"-%Dh4F$7VnֶgZ%h Se;;tzRStv)n[[ƝXQ"XUuCָdQ_#0>|}< |%ܲ Ͱ*^t%F@qhFFĀFOGEZ'FSwʿ*„1 ™_H?]n\yy4iPi?6DTɠ"aj|sLqutN2L}j1&4scę3ڴyx_&j]'_%ͺ&,6qJj*gy ګ/:"Kcl?kێg;QÀZZY8E{Y©N<6hpAӂzN\pEG1U#HO{94`76WDh;yon$+90n.#.F 8Rw .m]U"IyDLx~4a,= cyS6JATg}:a쵒Iys`vD't zk<{u*h#+s]8 -mʝrlqx]iuO+\Sàݑ%9:^p#L Kp=x3Ya? !mF5*i$c>1Ch/o2`,Km{^DL!Tq;!Op3eݪ+[sr .Útreʭv`sTm~+M*]k?J Q2N[Uő$2U㖀KQe_X[W-Zj7˜Ţo -ť3QՆ4yʯE/Q]aq_!F˃OI}b^ZNJ+WI9ǜ'{Wi;TW=ca'4NչzKz ޏ3\w}9>+J͟A-tJbl=Eɿ0gqPK 9\h lib/IO/Tty.pmVmF_1LKm8ޝ^KvzY{mD5ݙgޞ #f+Q g@% OGA`5H۲$LεLRJ$r["XXiwE)׷ QgșT!kDK fVю?807DH=7B֛@k4kAJ Kh_yo־%4nõr\\jCuPnH [ܣL߅E4.7}o#oO.h_<:KІ(` Zqޫ N\Ȳnfy;hDMח 2 ٴ=tYu2=\5A NB7Š%䊯.pzW!av@1#n4NW8WHBTg޾5ǩd\#d{Wv| Lre$5qŃnhjE PvX ns# u`b.qIq1X* Vk2)^T)g4"i :pN4FCJИ$%FyGhNj NwsШaFFk'5m4q .iX0.h1aEBNN.oqӄ z† ò@ރmo2)%XN]9PClлWfɽ7?vkeuEA/A.r94K Z?S A _MT;Jۅ)d|-T`e!jtAr6-TqeB4֙t]}xv uH)[eݛ*-ߺ'XPUhr6N1砰E]^9Q$i!ajya GeF7pqPʛd<#t ׁiʎ [1n4yLs!wƢu\eQr$= -a `!`f5 Cp"Bd>e1pa7[bC"Cċ8u(jB/:WZL9W2-ŊkFVhUANpi42`n΀d jP_lq* MH 쥕kw<5ՍJXZ[zLXy"%ʇU.#roN8)pv `FCy5[: ʽ@ I u8h0# @8X! :w"ոt`E@$IA8D[g /%RဗkcBm*;x MKtvڙeJYřfH.)"خ7Y謒Exl`~P,,gļ|U! ;DC"O,>Ѕ[4ѷI9`\r;Q6"rȶ$gŧLe^(UD'KcIQ?Y=`p]Q1O<.[O,}ʣƲ'QXep]Ljlƒs6[DS0na% k@##2*~NGn#{ܙ1!4!|"{'[8e hV*q1 }2&7#y48Rnca.iLy*`O|~$<SxG#+, 4TXM"EÉ2o'G/EgˬsԦBDf 1^ /ѕI x 0=[d.`@T~|:`h0"|]?D3/a,p ӌ?y&_'qx0j˗=:ݶhS&fg]B0z:98$X"5'/Zb{G7ɤRO" npf nV$(OΎ@1`A<$|c&8ɖ }?I$fP3~I@{xtz{tu eRkqu:->G Æ**"̠aЅ~+Fa :'|h>l0 `]1~~5`4*0|`2%y} 'pvEg"c1$Xc$K e&Bb.~5e\cP%y yQ{Z,Ź%Yg%)M P/i0ܞ g:O3POXz0qE4 asW FVk6ӭPcr[)4?@˗@i > 6Ix@dx"^K1NAfèp nOt%OYcE@T[+@V}@e?Ix'{I/b(nWq#& ?Y 5݄Mه(F0~[.}dp>.{0@hऒlîA`C+oEL ,SCnZ` ,r2h4̰B#*fY@\E5~ƾ͔Ɔ`+K ] x*gѨřH&!$ʀ/z0j-*l-mY+7R&mƓyCß@D=ѢT FA?:K!##Q+MpSfbZ>T@D% GQD4')h-]F VN*fiaV4j8#jqP @3*!HW%[Uף;xUx% 60$]g/~?L}s%5+GCiU52ztݴhc~I{ًfw dcX=Ɩ"ْytrU]{,@TɒY9E4*iؙ-Md&N ++Ql\d¶v%?4/f ~ X~ĪRÔ~g"_ALqsC@FeE]=)kؿ55:AO?<8#{L<FO2MOW; o<()#NI78؜h>lcKل$nb_z7L%ë z g'H>6q8G"Kd(,eq'$">BGޗ R LQ)z#@ xڕ8h Rx@ɰ2 b O gy$y&ޖ ב+WϏ^BWـh<\:dx& ^k4٤YWia(ˀ )ڝ D aPAvR8Y!65ij,AW`)AY_<Bk Mp4!,0@O8&9S(,l7`E10.`5G8k_:~ O1AV) JCmOOONEac @24oUG4-gg\%^^gmC{R0ݒRn&"6{drdTxl]Qz ?\D' (SWT+ dg)-Spo> c31]P\3diKPXӂM/`yTБzb7].QU Ȣm' 0 m(XG#9&m@haEx^w[TlJa\`V VwfT2A[:=C>Ddk?dxIHpgSm!&| L M(n4P؃F~|N.z7)Iɥ,'߶?'\Udߞ+wӃFa!}|.zwnW{_XWyZX03ysW*JM'ʓO ܻD)U-. w AϦA2>??$s$̤EtaV>KgT4*P̮ɧ2dI\i6B֎آH|/I;"- ]n@ᣚf" "'Y.|^< \=5}yQE]W ev/^B1N5h4m B63FWtԧ( #VG]>|LBSؙ8 ӉQӁ|GSt 1 X7p( :O13^xm+U!S .[:xo9ɈydεB ( B c7hܧ2*@Wh>IJvgOrOWtJ9z*Cewd~ MufԧRB1ynmW|;;<_j*D0QckgaAf T}&nfJ'&'g,^DuAP i$ +,O饪ʯCnw z^hf6Byqt õ-8`afXDE*o]ykPۧx(⭯Y"7 |x{xt|~zW3h% ,'p>kX)lYv@K:+#s@ozV-;K[gnxC=7g70W(W >:TʦgT a?#t!q^liMKQaF7*qIRe^é @@Xs7=1@E0My[_ hB-ϟD0PVԻd+٦l{,uzx9yi<[R^iAZ ߀s1b=8KWy9p]*^Oɴ1LrA!C Ɵg*"do~'RBrDx}JB nR^vv$RU SX?9ZHvW); 320*k1%Qb*=ÅSr4!%Jh&ȏdNLVwKk2F/_ G2%(`ja b{I|%۝U=Zi=(zv[䱷CPq/R\[$>Wh;>!vKux@>9]ALm'ƕT&:u6_Ƣ{?f4ǹJKus*igD"6kB{<?_R}/e3v󇦧?sW̆E.ޡ)쌆,S5k;H \m'E=d㗗# D!_$:1MY^x-&>qǏ_rBWHj`t>r/aF. 6#c*)!FǢI |vgEL$ !!iք` ?Jź`>&+ MLXawVє}Ѭx@ HNj;:Q7Y3U.GKB,mbƧq*6%3p EQ4aؒ=.gqZgi-%Y'5ЭIݕJDuAs,|0hFo~*4FuHH z>LBSwѶ*A~O^Qg Z*8΂/Z1ǜz>MAb>PI_q|!xQˤ_r ޒ% ;x{ٽAE5%y4EG=jm #t(ϳ 4*#`PS` Ws }FI$WrCcJqxp^Nb:튋I<[AOHɉ5$DG )0x&DkL PPO6x>Pw?O1E¾*GcoL6G, .jRU 楴[Y% U~σc2b|涁o|*GVYl> R"9e?b d%6l>([.}0lj-f(1@b{ڳ@ q"!v6v%Q}+nM%@<pLGCaҙà IR[첓v)qtF(`/M`0J;{tF7ҠNֳ|\~ =H=:tĪmن}+EFGNdfH;bu91IS W4imǐ#^!mQq+|gݕ"C3K@zo׽_=>-jSrƸe992>Xt|x} ]mŐ57s3PeaXy}4E)W 6L *#,Bv (EtzS3fmT."+qB%P岂MSzPszz~Úksxʫ;¶\jƦ1d>RThđ oP,n}FoRutAyJH0ҡtB@ *4moW^c~RpARo^RcQ]CuGTlR: ޕHy$W׭Ơ!GjzzE\L4/؏8ffw*c|tRkl[TDrSGC3W9G:;?;͵|8֡ҾJSKFz_FY Y[f˨ 5ݹ{ĆV0 _@%R cǜeբ|\Vq?e/50*Ot#-k?~vߧߟ=<×wT{`}Z$F.=E<͌6EO4)xEiyk.*d#:q4;iE3#;s*B2P;&Ԭ5d;26b'bp#<#WASKFm1zW/*8V>dH>Wy솎`afJ[inV^ueQޣ%P6[ְh> ))]^Ǜ|{FXBjeqYTӮ8|2ANqH$uMH/"Y#r#@L )[f&~ SD`8BII~Q0@ T[MA!﹭8TZ㪪g! Tai3_=Уdxh;q ]M]%\|hI!I7_^r-|D+O^e]h|Yaڰ~F٧VdsO:'˓{B1#ql/L1Lb!`(zFq|mҺ| )eV?;;P?%JѯFt\Cl^ykZ^Jhem_?+b9L }u6d_ijY_Uc #?Y'D?ݴ^_fǽ*mH@B# FrWNH&^.rRvl,yK^Zi%twt}Ǐ.T@ Q^ĠOHOe ?)d%I[o"Κ,JJ ѵW*X1 @:CM(^׌/)՞r.쫇ut}]\f6wbnX׳`~q-翾H+*KKۦ|wǠm0e׉b TR\\>\ɲHy.H61rL<dJW}wRMMT!u@VOWI`n&'l~B7 U9zX&tK۟ꝝ9?0y˘HJՐl1>LF-Ll-&@ SIUi5_迕'"v8 : ȵY~+恐̗L|y:jnW9ݸJŮdr.N.[UKt:u9 4; In o \!5IVjelTN%RK05~rtф[_ Qܵ/`!U3ax̧fӈMU!3Vv$c9WE8ZҳڲqS 8V$tY3f7WaLњjf6㥓 {F#P*}t5([-b)-Af5"?k{Rk4 uvmjjYtWh g4&Z.eWo~_k _jmH[KZlٙKm6BNWtE>ov<{&ZxUFkjKmIпE|I2ms}nCQ W|У@h G//oX>Dw q+'L,NCz '1>I8:z/'?EUL~?j3JAݹ? q.l}էjt,{α`렺t/؍:0tL9&d/^dsk> íc֣ȲhN_2`VUIJR ${kl<|XN:&TT}%&Zyꯉ{c*SYJf8bUr;F^m+}3'K5Bxy~W%s2]$Xup7@VI֋$EcIe|oFq!iꫛd\EP~s9*?f=/~|="|h7Uxo)v6$Ҷ>J4[ﱮ,->[8 YukZձEnrյy[1B>9O$('+w[yut>O;Ŏ&rElRӥ,Rr(ҽ*Gr'Ƈ˛Lgabn7; ,k"LtKGm!^Guz-}9 w' $FKU)^u4%BGlIg`m&#F[]ysu]t]ڿQp(r}.⍵r?Ai0@`g 6SQ /I(pK +{vɧv Tx_)~uӦ+y0@ƺ1-4> H"p?<0ꙴ(\t@R%a6D 3y=Pfh-cTpKf(0uDX=TM, H$SG е*)0導 Ÿ |O~{*+%- ï+.qcܿظbR13;p:'il[9J4y(QNmw)q 8&MCHD&}:TcdCT*:bf#rz)~ 5]-=\BݘFsn4E0i=-h5"Wŝ!OGwz~ G|eG;%la4 t}fWW{EQ@DOj.NMT@tֻo|6jWN\KKԈx+R6e\c]N:=V$ougt~gb%ᎊxa#DwqYGCv$aycZEKT^3rXV0.dyǦ21/#z`d{tV210f}i֚zv2)W oĖE^9;jU''r+2 1ɠ.^ÝG]]*-Z|i۔rhȊbNޜl2qLkI8@GĠ0raKYt <,"aU` K5ǶT9wT 5Sge(vM l.i&nZK5rJVdN* RG.FY#~?o~i]7cI?/*x]KD/D<s- 3 e"}Nb.φ7tBrQ"]ПDDžSKd%'.hfy? r[jDУ$.UյK=jmϴ,πNęCW \,:jc.W{g[+`WuvHTMbrqi qxCjscGf1;Y4@](N,>2FTI`t|gSqC' @Tn1ofY{^E-nx@m+ƂY:^emUqr]Dm}Ǵ8s]XU* B[W/Nh9??:9θ͇T&CLuHw۠ ?*7BK: )"L*k5( D ,rLvJ>W<mohipJğENg.K V˥7Fǣi2)$Q0i[sE V^SmMaj&91Q[UIU 40L}Ԛ̟\17\<#.<@;5xGgG[7 2_J(= KCw@$QaW0wj$@vt:g)9 @/ژN >dQj)y}8blG {?Z30CtӚZA=?hYGM+ 7&'X]r )E`Lpoπ@( LNO.-ZѣXjbnr=TŽ!mTnNk0"^$ PKІV>}eØVjZ, ִ F0qdw%tHMg=">wSTF1] sdv8%jQ r ;u5 i{r]CA6Qx?|J ~ / e]Rtxv :t GfD4z@T^Yx~9?k({ό>1o,]0yvkz /pFkQ^򠨈 9t.p*uBيW9 QQ D%ݫ `'^^PG򄱥3] p؏%@NjF.A$9+3wb>WhoB#P\Nkw9-{}9:/O%Ȕ`s>?(s0~-/jC- @ 3Ep75-'?ox.tIY@j{Hȟwsj 'c. 'D=޶a̯$L]ÜMצff]j|;so%E+f_ ,fQW_ @|Way8Wrr,g(Q%Dc 壨tJMP^=6~ª˞ r8ptW rQ eZRCٴbOxi`:>f|J7XZynD3{4^3⃋)_vU:޽O7>gV5>uvXY@Ҋ2}ϑ+Ù1l)ouИjimw'ݫǎ*@8D:;?=-})퍒ۀsR ui(i]VF4P(&Cp Ԍ:/;{e>V #-uF<%!GiuBM'da9)0ѧqX&gboYOɴbKIߎɌFɜܔȀu6PfgF>r1 xc $[<2]ůYFIaFqyGBv x8=N'+fp e#abiXUQ }=+BG7' H~21ݪnV/45I®/ޭnU/^IDF@~`>ChB"P%P%j :U#LLX߶J*ȶш +ztCuiAw׹'?_bf j@H~k6}ǫp2AS0җ>E)Ϗ1t5,hzzx^l.xhǷ0g;gL,d<آ*È%@:Fq D zp-<dtm8GPO<`ߠI~/ +N4ܡC Ίb17Ŕ9?zŎU0oNFj\S)Tc>!⡺3:U(U^Ӗ7ke{2d2] v~YG*MI"h**Kѱ+%h%#6@%=vrL8H <Ɉaql*S#ழZC1ih|mI'6RVSpy-[42Y7@jci K/qւg("،Z(|?4"U"/90D u z:qIi6L1/ M(7(|Ckqnӓó3P_*P9 u AJUFy&}馚"fٚ +*lrlB b.OحK|4ߚ{g`ںK5BU_}&y4- lAE#^hJk$4Д]Hq'7ؓK.lx @}Щb8;@Nz![r30ҁsx~|U1ykϹ9iP3>M;qzrEL:AZl17kYE"8=<~Sqt<|X \r(Ɩy]Q/[ JFCnv^m(G0:ͧh1L/|2ָ[mE&<:c 9Qƃk|U-mvD0xVN9+eS?iwt </I7t,: (4YxȠ{f2& :9wƣDRlEI[aQD[X(ݻ HP_2lY$pF̰+LDeZY[T L_p 8gcj sӿ"rA6G *uL?=t$\|li z`\ucc@XI7a SET;T8Y:gچ_WU\"z|*չE@qÄ`} b-!NBpAF'a6:IaE c`k\.dkeX7,;Dr)io[7<`BQ,9/1,etOW r/^l]Ey]iVj8$[N΋O=M汭\-]=ȭ6Ld.z4֌j??a廈|͇mTZmi[K:mo~WLh[k;{~}sٽ{Y}\knm9Xhat2udF ekr5svIF,bi4!殺Z3KrUŜ/3GsLIy'jr DiHCKm Uذt9!m~>c&ƪSn6YLhTv蝔dCpNvc)9(go<,eYrHCZ3 ǎj*!"|Oz%?Qۦ\55**hp~mRܝ+v&5C?hPІA~(zv?;;, QnYsUnҗK쿉虁GLzJ#hAA^/|I|Mh3(Kz; JBQ@QB#^BFFBUC^+4W^jU {gi-=UټmQh1<2D^wv,˅VV]ÌA\e鷅okKJKKUI;jR]Z _u[`tEI0b.㐔,+U>A!wZo63ڔ)j?GXh@A)8RjPo^N=@6r!Zv%0Ť6j6]*a*f6{-4XFiaA^v|H$C"0aZO 3NI*Cك@JyqF%zb<84K&؀Խ 0г{LBjv1LG@esyhWzGj٧xʴ`,w4%}5^3\fBӢQ9ca (fFhdAӡS?Tk~?=j.RؗU4 \\efR6"Iⳮ^A§,ʸuzY0z)pliճ>ר1ςpu\i@Gd%طވ )+G3g Nhgt.tV| 6&Af-2T+vuL&)Z!;)9o *Zl$#\e20κ *:נf بe[rIȴéQX#yee.|pTvOpXL]|0t8FK%Gbju@| <N&7<:…TF 7eӥ8\(N,2'Iq鿀% >_fWθ+Ê;* A4@V?ON'OJ/>K [Ji)20*Aʳt6Ox3Ǝb .1;^ t)ZND@33܎bPԏp(3DZ'!ynU(1B߫2vxץC( `N}hPM0tL[tV{m"aFii# &(5_X.ȼ ǠƂ5aG 'dt_ 9QhV̤ (/0czpv|t@Rlʤ99#ǙBa8\=+TJ!x0﷐~ħ;\SҸ]2.MFR +~C$jV @bIgu7QT#,lS:?(\ i!uM`'ÿ1f)Ex8O|T)3qS ]QQ5HGA)WI,xib[_Eʳw0|[$J0$XPnϢu.DTx)[X[.^%J#rWr> exO^U>Tr/̀xSKLb~o91{`oiħ("9|9HY3H1|#xG:t(OV\?:e⊭KnQ@*x:gތ=ra3LMJH.tm3ܐ<0lbʍl0DS;c?+/=nHFy(mo_ҵz)A־U lF07x*<ʉDV/TWOdyd;2y,!c+jX8&p'P)%/YﭯoG 2q(hgSL_o,|FEIYaƠC/]5RqUS¼ UV50 !9'yJqQ8ZzvNȪ( GA~_ÂZ3m]$kWtg$RG9BnGGf ;۶(3Cĥi #FMl P {#ԢKRAhfn "Z09wl٥-KB?U|b&-N/AvQж+;+>?͊`Nre7.iJtg8Cdc9W2 Kgb\~=!d xmnr՝#ٱc,YhVCɼ~>:aJإx+ށ<@W~v^EHO*;Qp]e &8kXyyF$;IpGKsM*lg&ԜNZw;.Se¹S+SuS/_xr_[tS}H/]}*+_%|PS1p ga*Twⱉ'j6K֒Qnhn>+\d,u4PFbT0=,ۻZ;ԝQ6╭|asCUa+Hk`&T.$-d0iZ*7daVC[=}(Zl e8cLkȊnيL^Hk7E{ uӬm~ te[)E9!9Ҩgrz5ӰբTCZqtv.![ed)|9p1ַ՝w\)@ϷũZ kc(mT;piC/Jf^@2$/&v?^21Ng4%, {I&|?s OMF?>N?<[9-UȨ@Af 2H|V|9 8 SM}dݒG^]daǞT0r \ pwC.q c^h"k96t*A桕ݣ떍AXoqGݽï3FT *Jh8Gh*)xiozns(/Mυ xiLgl~ ,Ӽq ?Žv<#zSϐS~']}R2 uéи*/q2/DS^|"!l$a<~$1S0AVBtI.e`2|@qCrZ&̨҃ƋWgg ~&gN}[O.0>`(Ct|DrtD0fX/Q'tq_(&XC lW<@NxU9ʅ9 S4GTrv C1ǝ0 +*-ZfvuYFN;U|R^^54%kl564ڀ@\(8o'_yB U|cr=Xc }xq k-PQR] -_Jɮ:b_7҂ FNG(V?&,)mY8`1:VgV!K4B61495HZ1O'@P˂fq'{T0~d&vxˆV|fFTҮ0hkHN+jҪeş˗%eycaۡqj)֠lB9IqE"q>ppvInȥI荑.i 7OXVs!Y8 [qY';F~4$*a(C3pއ5UDzKM6*ZuߒЛM?SD(7/G?wo:+juہߏu{[xsd|Le0fOT(%7b?BLذ42Z3B$ym7H*o%Eyc_ ߰%JyEzwZf;y6[T Yk~IoIbQ,q" ɾ?aFR84j9nݮ>\ x%h0Lj 9,^QYi,j  dV(cuP?8\89=;_/_6a_?+X&^l|_7w76Y=61 {5 W9 XeBS)kJaxlJ <5}ЁU"ҍDUvtt@J4Qm{¥MOH ;^$?\RVֿ\BЎwisp͒>.>]?i# T ƞuk}G=dG۷ALn?`-?QFE\nlǛ>o҇ Y G$8qձ0y]xqo_+: }B0 \Y/VSI!8yxh7tj'F?iعa|paIL3Ƚ)5!xmtKv?|wavi<( /OH׌W`eFkr3y) /NSuϠgGV"#Nq ~ `"a>ǖ;1iGE[G^>bEd}U2_ Uj=)OdR3LeQy[mmDq-ͻ]D5mNS|LE`|n|=I*n xI~"CfZ`^ܓ!tꕘ}[5{5'VF]"W<0`rjM 3s;?o83;s/fw6/:/YVGLW js\vBI\0}T}<ěRNɁSugl99cll)+=GX; bkˁ5w,?)?N*tH ۪w9\ ˸r?F?fg*E_sl92d/5LZ 'c,2UZVɢlUmhwdQr:ٓdVIMBS*`mUHp["oMKd˨^@DHtjmoEZ*lP Ryl > &XV~P(Sc,x_Gku1G /x'A:'\_aqýRk4咩kLS4 E0P|FPWzޒ?4e+CdD(KMnjIx|SuTLN6ksGe޻.Cp\u2Һ,2*ܱtΖ+k- b]KGg F8W6R݊nΒ Tvs Xa񘧼T7xq;jyWk[Ț?VBdRX6-fZϜQГ)"N1ahw+Xu!^iꏌQnPK 9\ a *lib/IPC/Run/IO.pmZs6VEUnKi5uU) /UΨ<ϵP\)?yX'=v0]z@s`vw>GnJ^K$]kG ps’ .ˌ~P!v@TvϪ]@S.o~t‰Ĭj5`>xC3E.B"!{).3ܜMф*K2u+CK`;-/ݚ!EZ5w?!~: 1`坂e4:,/W(srF , FBcQa&B%2!" q+#Z]"rmNCLJ m<<#wdӓ+*Hڢ#- QyR 9X7٘R\O%>1#/|I%/u- c FW DxVGY`;ާSXͳ@U*~R3R)=%g`CQ]08 fKD2!yج1VwQM(HknjUb.1^<<. xğlݟnt5♿,{X. ]σtk:GV, >ྰX!q*1lTPDc슞eO"E [-JjzAr]#>AYסTNl!0"ei0 #~<_ bv֍\Wk{[$b~QN~D6>í,xUЗh&{&vX _|ܸoLgDӕ7 <`S^$!Tdl]TT.OlRG.Bi\"Qګ9x@r~ڒ%+MB+k_w"e020K^Sx#/l\\O ~LH2kySœ0^ҏ_w%d0U)2^ׯ76u>#ݠqUxqc[brnJ_O'7ũnXrpooi1О*4QLp@h-e0m:x̧I]s\:iAj.;MX.iTZ8ÐP㲔Iy"&긩]G-* ~7ŕlh)AǢMjo-8wqCB'xc4|WZȑ.,ALę}bfms>Eb},ֶ(d}E nyW1XZ,"㋼Yg <-o:ԫfgMuS#tQP|tچl~Gg3\1ntEym"Sϧ<:8 v`>W=~T%&,$շ#[vbk+Ҧ ~#Gʃ}¹<aڄ8y%:Gcp3M)|XG?6cR/sٝ}]iLA11vX *}}^l'2O"+ҩ^ stTPU4W5*wz0)NcE|55K }1Ox/S܂NH4 c{iP[L,So] s6I .$ٔ@%|M,+P'GmJ=<p038B|{#װ/4*_*,}~+(Ur< <**`Z@6xMؾMV/PK 9\D{&lib/IPC/Run/Timer.pmY{sFO45vcCq$4id dhdqDq{Nxؓ>'\ֽ!p`p_xX~H?ղ@ƾ΍C?I7^^|8x})V<7pS`777N ŇK8WSßNMj..(.Xv>n![f3bZET#0'ĻcΜ=J(T+?~|M<'bT{B]GKR7cjJo1Sd\#r)9Z-&_3NIouvC3b`- ,H"qB?VFAF@]$MkpVT@aG1Zpn M1G* taŒ1 gc0#jk89ZH=*9#C Ԇ-dnAGf=aiJYNWRβ#[+h/Ek! ȒivPxVñµP:WTh06q8a&p6WFjf,/[.O%.wv0awXTCڟ? Atj!QO.&1Y1I8ԒnMKZsfIiӡjȝORN쏌mmH94Ŗ p5y|+7.'GNCrg9ƎE&Gc%0SYG[O3) !#",Y$ɷ.hH5c_;5Ve!;jhf(߈\`([,_L|:^#]O*/#9y(N%(P ԍoLU`K+X V\UE֩2Ak)FsD=t6Jca?TSwu|t ^b)h=/FӇ`QL C6WpTt,mCEz ]0:oMdatG8Z;j9'1VYA*na\b=`.ӤmaMq9,7e+TasG< N=@j`SQ03yiK.ԋbFGSG ~lM-4z,ROea0 f^15oÉ$)#"o v@^ 0nXz)g :00n˵{ctTF3}42w^(""QKn]MWPSEE`Lʜ,V_%Ko}ylHvӘT+=75}CÝaw"oԲRnhKwf%z]\#֎)"˸v{dbYE .}_v~8+sO K`," $+LQļ5wMuy}sO]t:Wb? Kv؈`2 l3rr~d{5/5d ,SC=l0<)!a/?vG5C`W BF9Ʃ?!ď!}>w #>9 b1dX;&cWmd]hَٜt0YYasI V,*%F(L!eal0 E TI 1gV"Կ{ f<=qv~]|^ R<2Nwwj3dmN \/dp `?sٟ쐍"۱$OЗv{bh2Yۜz{Nܡ۶׍\r7d'PU#wṄ&\KY7`:vr[%} L^!ecyy'qǺ*6d4*ZXl7+=.L: a4{  zd zD̀ ,,[Lbb e{cVk&s50rۑE<9bR – l3yHgoXmEDd]ب}JZq[SZGj5nV}î_%KpV*ujNbp{[Gjc?yuvo{5&(. ~1#6x`x/Lhv jIVb[l\$ޏo3Оq`g) M1ksstPyU" o""2o3 / (0;A5X#JS'Dh.\߇9[&ğؚtX" ϟ 6"V<x= NϏ&*e^Zrc]RCNȘ\z\+ey.)kWV [ US=7lU"ZT GU*[ W'1'Zef\r3R&re$?('OYbkty޺+TֿQ9ɠa} l&8mng ۽a|aTEE}੝6cJ]VnL&NirVky,sfš@JpZWŕꪭ2ڪгKT޵WFI@tVƙx+`+ݧ[%ҪU9{YuGu2Ӌ0y%;'JU oIQ>+Qҿg#?>򭺜Ύ7!S{U Ks;4=ZhT]J: l;­ed̖dc8yC>`Ǘ= E9#<~b3^bVov"-\D$N}46bQBzd*a)y^|y*gHm#Կ|AgczDNQG>>)2Ķ{1;f^S]2 ۇZڢ` szDq9qE)͎7&hsrUeخrNlζd["4!ND_ƟC8gRyTd' M$s}Cߝץ$uQ,~Vmԯw(~$l}P8#i4P]a}W%!fuC$;lȥ{yVIypll[-t|P8չr0\؋;v NP@!m$WTbeؾT Ѭ}g9͖?ߍ_ v^ZЌNCaN]6ҦFD9 Sa#̅\wv6nƊ:XMFZ[o|k=Y>"aƦjFδN:WTmQ4|.W8L~rKVOR7Iv&;E?6R$M)ҼtUh${Nm q,oK%>'8Ԋ+̹yJm݅ px_<oo877OU mtR>&)UjHLq=9WmE`bВ[I^R\uO 9*P 9E~碪9X17@ct; O `p (.U!B&MJ5ӡ (kՋ=KEuѦ~ҷ#'CSʹP!"RoTCV(aThrE'\},IR|z7đc{GmKܵvݩJtOBeC(CWfEVD5A2pq2ZRg 6`jFkR ↿z0QV|`r;1IٯE\dXsWjO#D)/#Id][_Gj|=D:ZOeI@9PH >&T)2I޳Sj*ExN_PY0t4MVO cj?Uebg9Ɇjb3QelOUʦ8b j^>WUoqr~<j<)<6"aXA &O&P|Vsv Pl@Ϧ:xwn,>&鬒e#UݢԚ?ٍq@,863d9+̼4/O|]Oվs Nf%>Kq_PK 9\x4p`>lib/IPC/Run/Win32IO.pm[mwH_QQmeg;xp'0 IDho"U 9e-JUn{: gy3^G· ϗ08{:,`獗FAto^ȧӹ"?$rIur6NHx_4c7_Ɠpp{o);z|  ?Cwz>bGTXܭfq(ao!N}uqf gjH7b:̙ h V2^0Xђ-]̣<pޯSw+q1c<ޢ?;fr/Z'"!"ӧlX-߲Mlzył 8zul)Xe?p!s4 r<~{QK`Q\Ӊ UǦGAc"HX-XۨξقVG5p^1EΛ~Md^A @i3V̈["·Ԭ5doNXB pf[$H;&b څVQZ[1e6^ϱ?Cj՘GR#Hfw9\29Vrr(G ,V䦫X>Y 9ZJC}j8N#Z Qg"_0dxAvf}VBjS RJ9IrF+y#+i$8 b(:U6V@ɓQon7nQ@%#;ugQ2 Gd[Fe-1ΐu~ xC(Y l!dH Dy o?M2<4Et@ˉ5"_Hń\񢼭D.ݙ)q5ƶo+v $J$HCbouV@ɕŴ8g_8Ԭ M1)].z`y:Ź]Yw#W:p(oR+АT [uLNpۯaMi񻊒pnva- |kqYGw;ʇ/LN߈ԧ*N̼/1B-QmB")R%XA.КP" -%zFOܻ`SE0u/f .,K6QB[ |D"@^gR3-VmHc"U+}()} ,5[[v'4pMߦ1C-a#`t7SprMaVee݉65s^,<:uzZ` {yodi>ylDLIBުtwyhdPʆP- K)um̩@l ,UgJ_[l|Tt-+$,d焣p235QlZvჺhJ)pZ%WdJU`T)( {<@VSm"U2G5I .1WgJfyBmްgUdr); u8 "!paj}KmX FmUZ>yC, ъL+8 M)v5YɼEDק@*0Rta) }Lyr{%nϕP){iU+O7m7D)\V@~hfO!K:QZhfKEr-""e[)Э tG jk}#uZt["\g)+s-lb9@@@- ߞtO"ͧ(KS/2X!iJb_PĖQ0#(av^kfO*@{77)VK l뵩H{*# <7-xb1Pql֤ ʖ%ݎ~4zu8"1UJy$yzL)'Wu =?[&.߸D!뙬?=e#[j]0 j֐t=u\S{=:yhMɻZ?[WoE2uWHE ⍍5et%"-yq8lkfKUIj"?#`PH \}"QCB)Bl7׹ IUzGwmu f LjxSKD#T춳|t57F1[3mmYnw|X<qldPK 9\&'lib/MIME/Base32.pmUQo0~ϯ8Q8S )m4TMS;iB0!ZIV;'r(ݤj/};w~>ҍq4-t-JO)m;*Nx%ˣ crv`^qG[.7}(#ݓkHۗ׭Ej&<:̘2&OC\Isr)?.][e!lS7ǃ3m- GSO7bSy8%)AĀG ^%z+Z}L)^sؔ:Q˜59e <N,K5Jc(x -Jim>!Cɂ(`]gK<٧STZ?ԓD% -lȊ5S&%Q-p nykcM 6z ^% H.2T뺝' e:&Rubv Rq^оoY-03]<kxk_<#(DCǦoPK 9\.lib/Module/Implementation.pmWo6~_qpH\:la,mMV$FP-6TI)/Jvyyw}w>e1$S2'X Ud^_..~}??]ݿ w8Rtb>?_Tyx6p9|{@o4 3[5S҈F5tY%̨J}*ߒ U Ӛk`LrXp)Q(10U@`8dHB>FNcxb A+^s̞0s>qrl[xGe Xd,)^$D' blv{Wp򝔢Z%*4R%kŮ]DŽ.vq ^.|uPCPNcH4YX^OPcU2|p}s};{;ʸm&n,C #, Ae]W޶ͻ7E[D =]A(mP2U 0Ti%?%5>.г?flnP|{וqIrdKKгY(RFEN|] `k@Q0s2:=qآ(Ү?=k|K Rl>F=/I!%C။'`@%k73h4$N'@p/IwQڙ'z_J*VI awoRSHRfz+"IˢW|?kַCe1[1=ƱK1#|ip$t|uhHR Vn]C29X/U.vٶ5%"PKe=)bOw/%a1Mn$M"g)+L'AzH -E.`8K܋ Wz3FKj` ۿ8PK 9\E"Ylib/Module/Runtime.pmXmW_1dir9$8R4kkeApwfW~_hn듓#v}fYb޻}#/ 붳0CQ/4 wS2%EZ}i@$biHR{Qy 2 iJ<#J:U$JF!wRRz<;1$K&|:LF<$a_MH#_#'bz"I*K@JL5LPCC*B%hA[*)1'^d^dFOx<`yDY86Oe<$D };;8;&u}Ҹl1".U,eq_>9o]]yVޛ`4aZ*,G.Å\v6a=xj5k?%u}lɒ%5a&'[]DxڑS^zIOC&Giom3Q%zɜPYZϜUK߂?% I 1rj+3lsQ1z ȟƮ;ND՟+?E%i\&iح-tz~o<Ȅj aDTC/^+ OP5j_Fr~u.Y3O5N΂$=k5"ysjG]UVk‰ScrꤾƄwEo~lM jt1!FaShA9mOW~l搚Z52݊Nc̷]5h4S)rRoܘ$ *v6Uzai?Ny(i̲Ep Y"It< (cc|pZ `^VUb>IayryH/;]/"v~.j"\o{3_MŨ=_-ۺP>z=0VY%icOZpBWy 1chd6"EK=>8E} ?h`8948Qoߖ1Hk|> 8^Ӽ35`9Z=g`S۳-%RQ]89l|ijokdV1S%ޥN֪r#U5:[UެH5 hhT[}UjVZ6Z!-VDۚ?6|YѤffH~U}4AqND; D؂☯__^6bZ¶RK2؈.1Fퟡ7kPK 9\emlib/Package/Stash.pmR]k0}ׯhnIL&6ePUWL\Kn(G7z9G\tUcKfԢPp7B+x<<8<5mDny4ۈSJyË̇nPnB%VCJ䂹!D Dtz<:J`OghY96 뤙.ZZVWW 8.1<pK%Ds^\K0/.v'j}@AT(m?;p |VȂIoimK( L_w^x,Yn.E6~䬔z쓗~?c# r>n}零:uᘺ`/{ ,)ٰV GnW]^(dnr!Zrt4v<'7+ 4 E|~:vqxwݝmPpg3/b7AMH07f^ [̅}YP  鯃Hh?`3yʳkvA%\I7bƯy dl!~;(8H`P,BRTcK\$ W?_E'[jF/8wb:Ϯ DH4'|s{x2/ 8<0p'LJRWf`]{,W S37b6ٞuu~uf)<:>}֐z]b0xG*\<&LZ;d5iYu?|=,h~y(kܙ'gƐZ>j`tx> A…$Zl>)21f|ʚZȣG)ZljPmU9@6!X6}gS@T˶n1ޒ2 O)U^ Ut'D!/0 cE <( (v@RFO$a?~@rF*q[OZST(.͞\:?;Nˇ4[i=&odWYGsJ;lLOJ:):xd{16"a43I4l*r3<ؑH,mX.цt;K5oP->3#c!bjX(@e?&{E|T"raY["Fo=f#?e,iciIj~A?<'MMQiĠO|??n?u#9|xz404j0]͞p:dN:,]f=};[L%\zj=1i*drJ*x~ڋRrxPxܟlUs߃Dax~AhiJ r0|>AmN *B Q(X]RZUdɤ-g`U4sR/APFMf޽+dJܸ`p-)4m <,̵ϦNŬIhplR gFU6S<Ճ: hYOaz[ &S gY[eTbB;ĘNlHl*46iiBY!gِZr"8DPq\E]ť">a&eQ;8~?~3(Nz5xw{ 5Us¦mf뻱x2:}fik4ȭ:h~zEa΍Ŧn3(ϜML;=Hyy<<@3%8~?b;=DZhG%GBEDe:ګ^mlvZ S(PCC$QoU]QU}+lǡ $SQ W yUguh;g=G/- ~IKs--U`mxJc1^ٜӴۆϥA s/zJR!K^,vgYC[ 1L=ꗢ]"m|l >;8Of܇2B$;pxu X̝ Z֌p R;~ݲv5< VNz. $ 9ioi^g?vw~z}i\q؝k 鎃=/vcضe6*olzrme\ [@W(kR0adbR'H33}1Ċ4QU|zYlYTWҀ5!MXhD@n$QJkuZtDW ;eDvceꍏt|#鍩(F|\sywy{<%ӎCsGܝ-]3,Oi[%8e9qY95q]l%YH{ltҦ{X%D~jI,A]c? s0z[>N˘fH6ʽPby68L'CB>P@$6646^g2(YAk9LEL:\ۈk8j~҅ q@ax`d*SQ< @҇T_yϠkZ,w$ZVjq-NQH&s%pACm+=(rQ7H *ٜR\>b31ˈC|Diz=DWn9jf;2ȷyeMdo}X*iM^ht&M(#Ө6 PQf6fHDNx>TWTPIB5]Z|E¡uiNndJY726/+^-Kf*oX 4c뉼<46%"L">n)}MohR%5Ѣۧ xCo!>yv"} om%ꑦgCFZ#=+XZmg+"ܣȪA^DtUȨ)N+DOpS9'1C s3J&+Pzg<ಕRh)B$՞wѯM!_ "|Eh9jwR @7r$*f!CCQ\E|kBS HITRKȃ:uM#S{Wz}wfsʍmeRy]WHW*(ѰXrr)?*W[\LͻW~P)=|*0Pe Fbwv3mR-NzӡU::l)Bh\L2uȶkmzn?PK 9\-p lib/Package/Stash/XS.pm]AK1V]h<ĺJQҔ[6,IߵEaf0ôI9W٤=;%eh0I|:c 7oRfq/m:뒎1)@ޫZ.6MlmYyzIH8D8Vk|]LhyE'7w% y7ֵ\<˧J˿ҺZ=hMH9#PK 9\Xo lib/Sub/Exporter/Progressive.pmVko6_q99ua 76؆MÊ8hvHKRIL#8c~#$+KHT|Bpr @Яy"(| b3GQPX$=d[u%MW}vc-v0FEp*Z4bw)+^Epc ߨ3kUUEe܁+%9[Pztw4>S%, H{/N~411Y{1UGꤱo^k.I2AWqqQ=vcx/ a6hf?>dΨ)_X"=֫o_ry>aWsX1N;P|gSe{C3ҭ,$ɍ6IQ H\7N?'bV5 w Tk 82-f-uyh=J]5r6UBd؇@k6/t Z,=ܵM~pu2ub=c3mNd=upR)r7N?3c`Œ*um~Utuh|AzLBV3D WTVB OX/~\>$Ⴄo6e|t:S/Jˎg:FU>CxYw{򠗁y p1O?}cąß PK 9\0Lm-*lib/System/Command.pmks6~(uN:RصVsZvNr(XSG]$HQqrs4"v]0r;g>I?zV6_O'lȬA+K8[;q臋D%i컩|g5hGrls+&#}zuu'oS?' X}6$5ben1ukD

ӛ84 BJ|g8AK}Fj|f3sz3~m]~}zqn\s֥0AdB)UN؉/b̉=ӏaF: DS#>,pIv*<upx8G f,A>(NsoûPC5,b><5贵_,W&¿A&9U[9|`q]6'-yP(#g_bΟ1D UqOʺ&ʅJ{oh*g&P *7݀PNyC'p]y9ɦs7 z|՟zf^^݀+`((%0kgޘͳE>KA[-@ʚڷAr`0RIA^N (,_0_{wϢl* Y6JOXf8wzZ>qvQet.ErEߧ՝EUƬHamrdLjjgClT4oZ#u$G:w/?L"?vmcGDZ̍ܘ3%i6id jrsj-֣`'BC\<!cr|4+ а%J&Y>rWlC# h|C6 a6.EAm*_X$yZUy)_C*^wQ9'vlA*2RRRú,c[zU<]yE>p;<>/n Юqkڊ$Ai-p3R$WgIMSaS8C5zp`4; ZŊ'xF #fmH$+nX^E\xDRq{u²1lN8%[+[@grke _!i?9vs2h"Q>7`f$ć dkG ȑ38m`Ξy<2;~<7qJ`$~6>0Iߗnx JPS0Fao*afʮvy\AQRS`~Ӏ[\:oI[걕w!{ahӶ ȆʳM6]_G˷(HK%|n;=g֫=\MXe ` 6beޣYZN9PiP|RVw9\HPBP=.`O!"q^#x-C GR(Z9%<7[:9^OF Bixr};KrIq" x|ǟBYXZҮ ^^0 C0 a3l̃ZZ[a})IAjy#xͱ |7|hrٯV;8KTd_x mMZ9h8! Y^6jR=,MClw3T80xYRY\Bqb+95 `FEW^yDj0GjjEF;5S/O}`` _plJl4b?{5 @}f;= jRWf`lrm5=;}uzmՠۛ5$ HT D};Ըe-~s>J@uQ|P+G wM//\*&!3Kkrw'evY"ޞh%)T r-( BH_ԒA;pkBdu${x z O'l&W+ӗ<ʕ;.l'ըI<U-#;tVࣆ@^=CdfFr C^!P.5.}P*8kܗQ0>7Y AVI0Mߐ))_`#NQFEL|A:\|us Ro+uţȵ1 ֧=M @t2;;hZ_Pͦޗg!C,}`;d0s +m}\f~2TtT+5 v ZOt<ܨ4:]]{~`Lesv~tSPK 9\ɢoV lib/System/Command/Reaper.pmVms7ίX.4@۝6p<4N 0*w9q1Kf`ϮdpuViuْGB7hp>va98~l׷,Bhkcov{,Zݑb r">KU|4x^Kx<_I3ѵ@ ?CmRӣYDRS!WbǣTFGW#HTEōdD6Ι \CqK6T(cvݟxj;^EJ{6[.ew< d1V}HO[WJ~Aɷgc벤lDy0CI(~*8mSd%d$G(\7!9.Udʱkmm˜KPRP=mκ1RnJ-ҕli!]` ^c`z ,Y(AP٫*IBcDdIT X/w5N3zBs&{58&rz4?zM3 jVM(>-7ElMħmZw|Z0 y2au#aIF JɀFU~ӱNP f? ]L>QS,-Ǟ%%9C`ceqzֻ'\zxe?m`3PXqDn ( ^LNLH;@w^6/O`쿹쟽m> OɩG/(A\QDO=?cAPCruw5?GwՊ*SFjqNE|< E0e{ JO`upX̹0m`48非c!4r0Ǐqՠi޹j& MC,SDpxAlQ339_xn؉\FK>Ans.<1q]7;~>S]‹.1/Kp!dX۰NF"h:FЋ^rwBF݆1Z82.Əᆳ$U:< ifjW LmcKT].' Sud c11 p/PK 9\lib/Try/Tiny.pmXmsίĀ-q`92X}J©]԰;̮0yYV>rU2=Z$n8t7&TA4VytH7޳ӣUB>QI{F&M^_.''!R zC$hM[U)Y.5~FLʖ7Y6=mV) te<d>=j÷_//gVÃ/TH]׋<:5Z3׷Oɻ|~ ־==fG-SBl}U.~Pow\2Gx3bnE*6rDDU%BdcNѥ;R4: Y`# K ͈,{:pXG6]㠌=̯wx"&,~p!ckqi4[sh9ժ劁5GTn;y. %qn#٬@E`zD+ w+aIbs]?@з !o6 eౖϖ{Um(%gF%4}5r J]X@W<٥ίubsM*=ާEfv€e쐄 q``gmrJ k![E&K ($Oȱ ZvU/+pרCk$x^{ׅX&(@E~VRzTWb,+ >r6[ rUrejи ^eq_T򴌌>r0)wHi> NYZirt0 mUG{o{ 6з$x$9;l~AW6NO'Т<_vGPU^gpP79 &CN<نu1p5n|<(0>]&Oo߿\NflBGy?x?myL[ r|fZA~&~7cbcf^L~M'1P 49LUR2ӯ2*G*|r[\㎉K"i?x`??>^Obv2yc`OFa~Z+-6_l;Gp+p0E]SH['{w73~J&tAbǗ1[7KLөoO1 =ogo@x:hPK 9\|^' lib/URI.pmZkWH~EG6d&g$$<2 D-m-H2Vwe 1ظUU{|$Awee]5C?%f1~`[K5ٺqG!{l0q6s9TĒIÔ{{G{ݣhw_c{>BBs:aZXV?@ 8m$Yꒆ]'`9) |.zuұHvkɆFt,&ޓ&#_&CZD2D#?gL M5YO&rLJ*P 7%oI2y7Ao6$\1o"bͼL^7OLSP:rMf)l|8q4ԕ040n/BE0,C8@͍3EA?6Ē>Ei,h0[2XL^4$uCTnA W8B~F|@Y:hC'=Oi r^cr., h%>eۺ{q1gJ56ֺQj֒O?}t}/,LZk)PTa G^R+NbR,RĂsƟy`ʳ2.\|E҃+(Z.)q3HbDžf]1AAi&J87r[Lj)L:VDK/0ӣwm׬uޱ)/3hPӋsɺ}oufu`yfw`f'c'?c:j\yat,ÌeIRZ}vWWFzpO4(˹[vSmQ.*&V d,X;#QJmT44ZVŭ.BajVMff.'Zg'mLcY^Y,jY3Iarf %cvs`6=]Kig:$$<5b+JM,:Xه/0ϡĪH)DhKzo'`Cb7}X0h X/Hc>XUXhlwl2u.h |yM,zwy C4$tFBBgorK\ڥ&3HܫF; @Tuh]):5UEGԀ3P.Te8>9ty|:)}o:l>$O+\_q]RDGER(Yt/(ચ _Ӎf-2@tKyM8^KxAAK(W˦/QųZR'ܱ< tf"*r uoM'sCv^+#8mк»iFԚLRD%aMm륡j~(LqtȌՍƬ<[  =K𤀬 Wm~J=Ā ";ϨW AE{9 DHU&:5YYvK/X/cMqt+"K3 zqxtz;-tGpG ŷT61?h0k~MiBܜ\Ffe]l[((=h`Mf @ZT?h*}Sֵ+ISSj6%*ٮW$k+#Yw畒R>_ :]H.X=S^w}>=, ~̀R9+fR[^&(`Z z~$[A2;Y6ulj[MD:J0 R*G)BH-)|/FMOã7zȅB|Et'|+%V9=ċǨo (5s\auqu6_Z?PK 9\n_ lib/URI/Escape.pmVioF_1ldvCBEI *! /.#)2;YM/ovi/]X)n`ϻɏkdrKײ^-zՋD^ȃUkpYr't11[U.}PJ%sfRir}R dB \e:ctÛ{TR ߔ'VgVS΢;XG=*M =hwFm{O[TONFYQ)8XL|Ҥ@Ծ#X"$HT UT042"{+3*L axr+K%_1)QWk gTC77ْ(JZ.>PBAHSØLY>;sr5sf|~8ΏǪ$jox唾;6}m;-lEx\fMQ@O\,SQDfA@41#!&&㔭KβDڱ,C&h4g˥u+K$E p4IatECRTӢhg^<<0TALsx슔}[Cgڶ{HN*7JrTLUY/l}`l{yt#{PW΢Z!51kN_5n,UC=Kn7Ymϯa}xX6T9-쁞(-Z^oFOFM*ls}} >^qQ}Y& $IYBLct%-RA?fop%QmRD2u'yӍE RUbpK2> vR% n5rA#0KKs jL^?fC=͆ OF54Bn} ,AK/%xUos 9f3[q0$PK 9\clib/URI/Heuristic.pmW{WX|i̖D!}7UŞ% ws+IPj}=1O)e Ҙ۷3,Ki5OcYSO4#)_Ԓ<֟_g~3G}DB+T/ܰ$uv}TWNƗ_u0Z.Dcӂ; %$|#%Y``HFYll4ed-d$iG$lm:vx-(&AǜO3HFpr?89?1$"i-4`g 0FU\=}-Wu={E\y4 |m33]T}xp?hHL j9{b-fᗖ=NnXD4zu9<$v~UMp)|ud*yuM9%= עpFJMdb) 2Ld|LfXI :ǔd'54&|ruȐ8P̠&Ov"z3F`$}:oËׯ5cwՂ떬e6 K3L?DZHߗbvgp9j^P, oP /E,TxO(qxo;NSpaX\rgd0$x>kk0<+Ou+ !SFt>Nl>)s U٠/m9Wzna\6BzE`DC"^ŝ$`+ec/~>Seu&tMUqг={O[HIvbY1ܮ#ÄQ6Z*(quUqeߖ$l~VI=^c,aX*粰sUeV.#O{ ]ɯ@/9K}]4{Ͷ.z/k7ֶ7{^PMPJ΄O&6.' p(16Yo[Ľ,q=oS1yi818`eP+Iu]n[@5M8DŽ'؃g$ *Nf1-9t_~]o#b$,Rd-rg|am M%2ɑL׃Nuv(%T(HOUXPGS5P؀X\p,LJG]EX(l7i&T m=KXsU釸:ֱXCR+[-p\/QG~#NH_@8a&(FL2`%?mc'lpˡYv "h* UJ]QˠXE%^c+E(TXN+\'xQOurY*U!O_/ʢ& ʧ`H!B+Jc.yMl9,U&J?d(Xc>C&X~pmVqY .&|&VAbPK 9\` @lib/URI/IRI.pmRKk@>wŐJj@DDPjp^dHZ*}.F=+U/:|4[^5r?7=D 'Eˍӂަhp AVYqn[k^bǒ:-aݢ1:Y$2^LG 7SJhƱH=\:arM@3jhOFcnЍV_/i~cǧ'ʛO_XƮ2PK 9\M%]blib/URI/QueryParam.pm+HLNLOU ,M- H,J̵*-NU(.)L.2ҋKT\=lMMԁ@ť`lPK 9\;lib/URI/Split.pmSMo@=_1VVLVBjP (Xqwm쇛3oy;{V0>A0=rLdx[/n7p 뉡?t&U#Sܔxq? ~O^B}UgTXYǀHP _Xx n\/h|Qlh9szA^x'!A#ꐩz86L@\a>ЗtZnyVxx44pQ;Zv7*xmbj C[3!FE#,xh O Z9k?"Li^fϊi;R%6Tdˎ5k$ X}.g |AZHFE6yf,Kx΀5]iD jZgҿeU385>~ OפBc%Em?gTHDa$$ "bjD:%e )6wR5ோ}LZQ@2t$8G n஄?[]x6 'PR9]ЊHa3JRCM#[MFHEt kFl_ւ~D,"IMx('yOCkΤsgjɘ* oζ_:mݴ^E!&14qlD`+SE11Nc#wX[q-f DER ^_wFY:wagbjPTQ}(ek&]{4 / APEzYpI_cN8OTZ9q-oԵJ{a&OԔf/ұx"}zK,}WhNR *#Ĕ;+D![*%ca879 8 ܶ^^B7J̄Ws'BeFlGT}ͩEFSl*B9ʓ$MZ~ AWtl7!'f85ZȰG8>1۫*N.tw4ֶwPO*9Kn+jB˓咣P %ӫqpgieط~|s/A.AO˞k+ E<#RtYwRV܂{X{N' ROPu q8 fVXӽ Wm n6EX_c<8/ōfMWg蕘nSY.j+Q?<<== #4֖zÂ׬{NۣO < O~ZXXT[Qu9(:j1%n\Z5nO;"͸TwZ4e/q@N4 Ė吣Ŝ\JGSMwБ$RD=+eGv< &i>JsF))&Ԫurֈw~s^Y)[]ϯ.L^bB'm`2NLG֥N!ey#78F|{I܀0;{L)+%;:)kHwPD>F{-f~]f*6[6-v};:[ {ȺC.3B6Vң\klib/URI/_foreign.pm+HLNLOU 򴲊O/JLϳ*-NU(.)L.2ҋREy% my@@"0נ`O?[uS=c5PK 9\&Ѭ lib/URI/_generic.pmXsHE`iqح;Hxx]e?䡒=YR Bۯ!)@`6lm=MwQ|-r4 "ǽ^] (+}L&Q! /<ܨ7ע5/M8qՅ To_I|9xğ'/߾yaW={,A?9쿟<$|쟓PU ֏ˬ`e}rp|| 1ky43WS,,X0;+؆kw~ a,;+D.BFY!zd1F˥cpQu# | IK4M 1ʴ$ >D kBײnkZ{m\YQyocV>24Z΋hhs~r`pzѮ)tuY]¢hkU] 3nEP#YnU]Vfą*A{V3+M~8z~[FvGIpjs6eC9Q]-BV=jJk)yVƓ^ F5 1w|\ 498wO;0̤`(솈C7֌"p1S̀#/\bv6PA ꐝAF2*plKsqlK *I*$Vii%nhF $"]ܽ #mxk"kUF({;b!p fY=MpLr 8Kudﭑ`wUiPYFRJq[ XŲ@T@)8Hgbi5 TkBYQsãlܸcir>xX0%g' 7NFB!2#_h|nC[$451b? ZWH+qpSPCYsCG&S;hz77 oƐ <69 {x{w$1/"n#ŬXAf]q -G;4>4Urr *u膍 i}vs6 95z7(F}/Kb7rTVA8Z\yZ\>!;Cǖr4hZl]P YjJ5tTGSkߖgA,[G-"%;?ƾ7]"MR޻w9d y6zQ\UD2Clٟ~{8 _M|>plp Exxg)A۫x B|tB/ eZpF| ]A$”XT%QSI t" *Cɋ3/$ x0Y|xv2˄2rj׸jiP~ =>}\l&f9˵_b^)n41s.y_0YbWxYbBwd?dor)J?8  v xb>\= ѵL" )ԙEpD j| mA_[ hNjzƀjYY:NJRn$Uw3iOE3M&$'ud;f֛VNة.Brb],"ΧnI XZtԨ ]*T+֚Gdž7Q&x#}ʫ BwR[ta#ugjkm[0ýi< {=_p} y\Jfq5wn+P%؍oJ}f\仌q7} '&+HY3v8MO.Ёy"A@̶E}GGZ}>G?V"frVq6qE{-ϦD,@+kU‚KU.E"\8d2_ڿ.bIXĭav#"cR|sj!JWXԂ3)7p[D$W81.x6%/ ˘uwkק8En^l"LtX%˶2qKs+6&2[5LkEӴU] h7jzW'X=nKi|Z=(6ZXЎQQ\{-=0OFw$zM 66Va Lh9=)jφ5}a{ikP‡0alMk>FEn,^#Z71m/T9gFAE'V%DM;;X |LH@koig $XeKHF85C& PjD5)gك _Ϊq&"fns:&f~${D)?Y#يePK 9\. lib/URI/_punycode.pmVksF %d IҤPic;mIX = V{9޺7_;qxLt$š]~޸'M~Bpt=0^>{HCc!W~m_16J&0{ wu"Co06xlu>uv*&G߃h!8bZ Ed-~kȹܽ(WjhvBnUoOGv{~p{ &-O'\kBcP۪W$R̤|t oGgyp90M3773&Խd[y.( cUyBn7zVRT[RouKicpɼk1,8`VYTmTtܺ~KEiM/.1q13.RvLWpGFzz9GKmst?>3I$:?"+m|HA-t\Vn@jB,9#G骤Xo&yd[(˟ZF궯O4GE:lv/g $}~"ߍFje`jTr:dW M0 XiZ(L̥'f;(FMz#gM]zx5sldDm mi WT:l8J 57Ц[ʖ[QIJRK66pR\cj{)MlfԨ 7|H718t_HR|M<޹$Q5<ٳ Y< 5)FA蛛@DZ^F6J`3gQJo< Ditc~WM(5 wNĜ, [ ttb+\(dJ) D*au%=7wfxpW"jłGF"DD@AHahKDK`4=򪫴IɶY9#t/ n4WQK-JlTנo-oůJPМDg#,B$$Mb8CZjEVGMU3XZy-x 6ѫ o Rt쌝/+Ү Co%a g7BۘMKo\xɎǃ񸊿xAu?PK 9\Xylib/URI/_query.pmXmoH\~ń8.B{'D*U#WINZ, 6ff6Cjkg97K˲"xl P@0j <כ2n4gCg!~/^zЙ9eDeߝ? W_vpy lBa]A l<1D;/zK gX{sx*Dg#}+Ldw #D>"7$ y#1s ) vl%t m'G] "ȃAm`K$Ob@I*{(zWisgk sr l c' H/NH;g.Vc$P=8РT-fP`L83njL!$81ژG"ѯvY6Zw@\Kd)ZKRGK2Bdh':u.I2oN>-Ui L E S]*KbكFbB./C]j`lwR}ã77n:ۏם.ATlp奚zhSaf-=DIw eG ~:mG3Mi/"PR$nZ{GPe+v'L4eߤqkؚ7X\E:^R*A?"A65<˖&,J"vȟo}T}p >W~0 ׸ }m '͆[$7NM(DΌOKn|jRRf4~nϠ+Y ZqBL],)$ $Lc,\stП/Ƚu%e93&>$6U^8J2ŎzDɜI(JWbG4)qӤ/ Ӕ,GnbI,NiŽCx#Z%> Ċۤfj䦐nIl1T.C =R@ Fd[g s(z:4gʎfbi1kҊzO96;N {ү; lI:ױ'gg*QQ0Hܴ./O (@ 'Ime(l$X^E+RY,7z~ܡI2>}^?pS5?6 k"t;# spZ,҄W>ݥ( PK 9\z' lib/URI/_segment.pmMAk@+6(ҋ/-XK+2c tgS)$Fy߾ySQM}ͶّÚ+Ǣen?GE$j@rĘZmj߼O䬪_6RR?ammGR+J! B:~3^Kd?{*D7l੺C\^_0G4yx Y>s -HD9{ ܵoPq] $ɰ'upR9G\PK 9\f-.lib/URI/_server.pmVRF}5"9`qV"dTT%;C|Q yl֖.ߞ]7K\fzzΜ>5K?O\v/KEr#w{;OY˿o$ i~" v媩I줁p}kIg C<}ۻw8Z'4ͯp YܙF0t DdᒶT8,FyyBxp3˶> jZ^Z|2HL= fi#f #qh\mLg`[I Zkߣ(u`X' Ҷ Ҭ ?YD wUXeH+Exe&\e@lnʠ(xvd[e azaʈHg$sQO˥jm mL1k}%Šk Y־bʢl،0O.y60ÞT#KHkр<4sX1Ot! E|#L|2tPdCK)O~8+Pvho/ 4v|L9hӃduk otdw+&cÃ$\LRm5g_] JyӆD2REX@ֿ!TkD\Dl#e/ooN)LLek#gDdM4&WA 蒎є6q(q`[3WUpӏaɱkH xw͛$wTF>i4>uY Tpm*i;pi6Z_q"Y8\U}}Jd)I/oqudհWG>9/w ?T8 m-|l~{l:2>d~nUɚT9kk<YF/hqrjooͪcZ+xc3XVpmqG kY\ %\fi^UQQ?bDX/I.Su2R!Ow8RS SYd7+­+(TWPRH GͨܮU,L6Y Eq p;PK 9\Kmlib/URI/_userpass.pmR]O0}ȢKExE!8 kC{!1a[wz=tO_hHD+&R!K>#.b)H[?Px-.t/ڈ+F Ų)jZ\$ D)1 דVfz# 4c lfˮ<% T8~0D5ӼSh1sV8ٲkx' 9Zd U$c6{aӰٽ[ڞ!Zu`GޒZ ,CR;V-GOQ+rv8 pU1/?sZK(g>Z%MwD" PK 9\_Tlib/URI/data.pmT]O@|! EIMS)/} mgoGbE)Qnovnovr>qN|-6Na8 ,Y᫭0rhczCY1_^G^[C~ )<-숆YD дrYQARFQ(&_x1?%XMxzOu4SI1.>lwo޻w;{A i#aQk}xoPx/fy^o-EUrK/M4E)$n/Α7k\ UlS;T[޽=^^i T]6[82+(/Y >Bg-V2IFd  )LNq/OHa僛A~EHp_)? ^sPGlIm5ݦ3\ir*;'Iu@ K;u* \#MbyG֠ByunA8-0N󃄦ܵ]18 {]vT!FFn"WVwp,}3!B6Sk`œGʌPuҨN*)'U?|W5#Y" 1V@oI1|wZYR?)`͙,k;BYP+"_ۃOSqS# (.KeyN?yraʲ9rx&,&||C8~$pr2G3i3_nyz~ʖ <^ AJP98uPK 9\i > lib/URI/file.pmVao62Ku +[tՠ%**(1Q%|pݻw#*.5] rSa^JVCY/UiBVɥa:OoG~?|mlDħjjԥVw*b}BՂͩiDתʑ/ =G02RZ(Қ !tç~ţAsUڊ1@IJj7"s9l | 7k~)O$V4竤3/_?MnAL}b@-Vwl31uMPԹim m]nQ\ڔd_ w4]k|E5wjJSW^[.uLɫIpr|(! op-f!  ARWuiUKY`M?I9N8M@z0-ѯ&:XA ˤ|? N/t:(6t$:.,>Zy&5K{cHhlL69*I6L.;O'gHjw0-XUl`ʹ% 7',i{ٖ{C',0uɿp¢H]Aؔ0C^'DacԵ3f/uTQj0tpɃ +!qLy$-Ia#wDOP{7sђIhvg=G1lj](d Դ,ѭkڰI܌̔ hÛwgb(N_o%eY2-*)ʔ.ټ|V3Ua x ܖ"\]d4ՔpKk.@m\¯|绸Y$`lF 罙"*y]y{ǕzWnux @0r#T X;YdN+7 4BAq؞q0'mC[9-S49!I/ѕL-",BU8Ng/~[+m` {:#c%I.7ǒ0+8+c^rP hr|?w(ﰆ:i m(RB ?!u̕Ю^Yw_F G 4ҕBp= =Z.CCxk5EAJgMy JNI[HoP@6$3ux}PK 9\ Qlib/URI/file/Base.pmT]o0}$Rv}%mejdҴN%&F nj߾kDOs:?ɒ|:qݐEu?N=M9,yIg!"Ҩǟg|4̾)PеM10JH@d+VS "D̾,DDH p#ͰdMXCʚuE`]Ħzr|; ɚ W-&C[^rwQ#oJ;OPK 9\rNlib/URI/file/FAT.pmUKk@י_qЀhL bܴ`_Ȩ3'!3A{g⢝!!T.J \mk؆5_?2n6e5dMщcM &w IοcWycgPK 9\ЧB lib/URI/file/Mac.pmVMoF=KbJ)1Rb$>H€j%nB23هTCy;͌[Q|{ ;U4}'l>c*loU7Z&q #1/M!Z _nN%Х4,|9ZxI9jQؼ~GX0#LvXo&ڛߴZ:;&;L$oU2\n"8? )6 A]]I%4,ev‚EP )3`!>꬜ϖ|}?ԲTf4AOHXqx$nxiϋRh&)QR6L$vx16ho`m |*s&/; fG}L{)Ԩ: fcW Ni#y,(K%h#MK1MzM?qVT-qTWzC-!BTeclOzHq6k9&snf52zqg 0ABcK!>U(@bz%x!i4ys}0/R]䡵G`H.ŗX)co#:hcr)2֞rO8A&mMś3?: w; T_euѶRAcpqvjT7񎝺#IEmq 7+j4ٰJPƥ^jQ .6Hђ=pOaWɐ,@ɅnQPN#\"AO$4'O'8S`ҴI$a%*_m8y$bqB<{8PKzRw߇-z1)S^"i:+~$k촜aA5Kod/s7kPK 9\t`1lib/URI/file/OS2.pm}MO0 WDlKiB&/})k5K$4~;IW/Il?_ ]1֞cvp{?Ԍ""m~X{ ={AZV͊n dSNwis\>%S܏◇q KH[JxrF*W`)ߨxǒp ٤V$Q-yȍ KFp هT'hZCĭnXɯy˰R%\Vд37EMjY,Л3H/S뗂]BUY>&HUۓЊ$H 8uEU`FBTNpL-V=]zmovܳ+!myG֔.Ģڈ0b S8=O=CTpF(>a7Ͻ޿옄ŋw5Zu"d<:99|z=-bzk!!p?2Z8.4`ātkL9d Rd?6uZ_0B{ :8;.V{85~eT?PK 9\Slib/URI/file/Win32.pmT[S@~&$kjm:h'v7ɶ" Ur !s|Y2gC8xմL0iƒU74x4jAY@,J]01YԷ&q?8;:=|~']Ev 4A, OﴥB*`uJ4KB=~X᏶Ɩb+0j| 'Iz*8Ypkc*ZXn3rj ȹeQk LgAtGw ڷ xZB!A5apT_ 7MQ\u4l1}΍̭*S A ǾX`t'`ZV\T=oωo=Kbn8Vc(N88z2D]y?'VѼ(ҭZ+` ?c8)݆Ҥaא1 ºt_[ZeFϱW([ KrxPK 9\L<<lib/URI/ftp.pmSn@]_q"H!R`%JYhҲ5Lkf̸"{ %UysY- /x\:KբYeZ 4Rշl ~}!=HjIZlҿHGt͌vd,dMeZiank'41;fvJv囆t;|̯ =4=Y@mo"%^nqe*00OCl t%Jk՘KjEI}W=J2@OP.p 0)aW @?- Q :W;ĖҪX;+ZX*{@њ s9Ȼl@cqU5fϟ>cuԊl?ZdhCf?3/`A{T:/uAU{nI|)=%\Ż, PK 9\gt\5}lib/URI/ftpes.pm+HLNLOU J+)H-*-NU(.)L.2ARE *aA~ z&P-Ey% 0@ťI ũɥE ԼʂzjEANfrf:H5PK 9\8R>lib/URI/ftps.pm5 0E|lbQ68:tQZbZm^^]vs pn9D%DV|`q7xrIЄAWt{Fn'' ^?$+f#p;.si0ZcYBPK 9\y. Slib/URI/geo.pmX{o6?j:nǰƵo [䱭HSAi[I #E4C6EwK`gg’F18'Y< y49AW7ie|Do_ 0H'"⥍Yq{?989}Y@"a,KdېP0]!_Vy6CM?? ) ЏaAl98YނK6\$%-_ PC`PΆTag 8T`߂,Ϡ[r$OG'H00y(:4 K"O1'Cx2$n总ʆ~ԟg0L(z9¶G6eydEb?b# +VF(kF{؛askl8;3Tno"gienC5q'ȋҟF) GH{- 7'@':)`Rm.`~4>JCEO0MK:;IxS&;T9ijdvaY-6Gا'4#['㘘[D#:Vv M5idFQD%q 8Q 3nLvqc( ?5~Yrܖ! VHrvK vP7 3?@[^TjforHt;{?~WփA w-[iƒ >Z؃ի7ʫ3.EJfOg)Zm Oc7d[Ogϲ[G+*1uX8n,1268ɔEai÷jllQ3&-u0g~>5EPg&iTU9og)X: uӏG;;cRD`@D`Rb'-ٓVySwW[KLzdj֣:Fev3:U庋c+}T;{]eN V8!3Z٘ZG5#y)+m,9bdet?1:9Uu/1:)4dw1T'CcNGJFEH>bi-9(/)\`ǩ?qՉfL;@%j#2ZLQ BCHsV&%@'ԦU]Hk_ye-ʱݚV} _ۚQÛCX&Xb\2h\'Z~i.ً_Z/I˪3m)`[v˵Rn8n粩nȝ_uΕz+[b,{4< x[^.U-MwGKc]]ɩtmh״dشQKuM!:VSVEڲ6W:Y~/Oip]^!CfVMSZ56S[`/V){ JIf׽^EojKK屢YT򃼎Nrfpo=ocQ/_PK 9\p_ | lib/URI/gopher.pmUmF|Mc0-IiuRJjuGŬuvס]@ "4wgvf=SߟlAÙ j.sAҤic|\_?s\RJ$,as9p 8ݛ۟_ܧnXJFe \6T|ԙW2"+/I3jM0 b|%A-(D| `Tt"0q  I Vx w?4f߾mwe6~ \}qƓ`h5͌2VNv'jPCb `:}M_׏8S:bn'FvgF^{e0F>6ȹo݃(vFm-0;cg(xйj_}or@uQU[/hg[?Ʀy |(EgњCEJj{8̧ih T*BW+losD%I#X>Sm[!bm/w6yH=Xk5@Z$a6Ι&1 ^řFUah7Dd~$8yվ#bXq+[k8uIR*%b4FXX,:DC R-PG0g[)SKQ3(Rw&)r>N3 $n*StCu~',D:,}p8 k`_Ye4fL4&i֖Zkc֑ Mg^nm`S'%#sE, Hq1`MdF\5~LZTH*&a/s4悚Qæl U==B(\ Ӯ}(8uXY2 ^W}RL+b<㢁wqbxD  JQ+TkUi0j F.M^~fvp[ PK 9\7lib/URI/http.pm]N0E+U$ DtE7RmdIla`O@Qy²3wypLq,!82s.LmaK'x.[A*shve-<\yr9WeG+͝`h}7eW܉$'Kp7[^0VRz#Y(%miO\-t$re4vIwH&.Ѱ1anPK 9\1wlib/URI/https.pm+HLNLOU ())(*-NU(.)L.2ARE *aA~ z&P-Ey% p@ťI )i9%E% && ҢT!HК PK 9\ *ӈlib/URI/icap.pm% 0EP)4١K!i 4&/tP=%G*1h "Ezk˄['ۧd6Ob=8p'ż` 9!,f2VcYPK 9\at}lib/URI/icaps.pm+HLNLOU LN,(*-NU(.)L.2ҋ!D QXע Ԓ_Z`ngl/.MR(NM.-JUV(J-)-S0T2抏wsRKU07PK 9\5#^lib/URI/irc.pmWmo6_qHYibHڡ@LjdҥF;ka HER$Wb&qІӢ{*4]L}Z¤IaTfy+?ޜ?R 8ӳTGZL -=B[ϟ}|Lv .b`1己a||Td%Bȃ$0SʊR_|ܵZm@n>#^{DV0XWfb^kMǬob77@A*橚jFj X5J,$z!o8 D, xt@2ѷ&R:1"`ǽ6%;D~e2Wi7hYOs)sF:Y\`cTjʔ.¥ wRRo_å\k5%]WS[WC7i1MXRȗ2qV PRNr(4jEDOVQO<63$^o)PFU& 12l`6F&Ef1NZv5t @y:ŦYn2=}͑05$ 8؟o.`;/?!.Oaio:1ɝ8I[ܪNe2Ndc\D*<+Y,ȈW@Ŕؘ# :Jބ=;/pB AHa^k%zD'ك ,bAP}BYAX'I(sH$C%}EF.aSW얻?BSflM#Vs#n|E8bNMJ|( rIǎI46`M*#?b`uTgR04\8"+ح*򑻵tԅeaPGZc3ʺwѴu&`}}"iD(aӃ ŒY1 M|&|lxvGN'Z@#(Kr O>QWFSn_F <0,4̌$^4?dr㞀`6ntِ[QS0içQMwo`'9!'HXiC#+V.H01rF#ߎq%E '^۾ԗ1ozSM69f7Bg5#~ܰ~uI2$dPN"u / ~/PK 9\:ܵvlib/URI/ircs.pm+HLNLOU ,J.*-NU(.)L.2ARE *aA~ z&P-Ey% 0@ťI )i9%E% & ҢT!HК PK 9\{6lib/URI/ldap.pmMKO0#RˁR<*KAqI,;JT٤ˮfp窆L  Hĭ"U㲬}E+nAkI$zxɍGE.#fMIkx"=Gj2aM1_ĤM+6ф3JPO {]U]fEg0zfG&V\F/R6c?dv}t}CSUAVO>Nu$謉UAݘ3}nR^U;t?c6CKɉ<\)W{)jGPK 9\Saثlib/URI/ldapi.pm}=O0Wܐ,@e"uPN(k}hxܬ)eE3*;4JƆȞV\|F(vꕂH5ҏg%KTyZ85]BG< *c)"Oh{g% Nr@96L)3*^)yV*$x.#f8Jyuya#xzn:W ׆Tz&Au%i"*ikG͠u9U 2Nޒ۸:33bcJTL \)ljEriQ/E2sHf*mu/ܞ3uaPBamQ04>SS/F% }hI_gAQ^ ^*9=U(%Ϯz{C`ZҩZwᬆYF͚;q0yfCmv.+㶌-R28Ռgghpd 9Dlv( ?[t6dZ* h%Ti_I84d쟜5|LRd E^*Plx>p w(΁3 1UMH` ~1 m%Go Xu5\`2A Zto9U+`{;$'Jo,;;D_PK 9\rco}lib/URI/mms.pm+HLNLOU -*-NU(.)L.2ARE *aA~ z&P-Ey% `2JJ @ťI )i9%E% 榦 \\\PK 9\{}Rlib/URI/news.pmSn@}bغ@ܔHJ\ҦY']R%.;s̜ي_tF{4*/JC kYGǩe7TT8~>t`||8nJ**06b]cg*yRsgi gTY"ݲq"׫eJ| VB-;x_g5FiK1|y:Bވ |ޱèmhAǹ#⬬xN2&GFZo:8`qBqT&by]Z!zUbĥ>(ZNBh*cEQyѶr232 K*f{TPβ:\RCGp2Ѫ9?,#9&@Th;> i=eՁ)1ϊ^Yr`%eLrv z[waûzW7Rh/DEkHR0A$[Zj:ޑ'ޫɧn[{p0NtShE)2tPl{h HX$]zA : уnN˕U;J}`m -Iu )xZ$[\*} |T@THBT+|W[jaɽwQ-^AhqfH||.Y^mbl:aO+tmd|U2!iflWXb_x- S.\GծrE+/5]M5̛V*]Pp iQ7T?y-ݑ=FHOq)U&$)q\}$kH.29]._&hexc3mTPF_xr&05*q\`lKG-1&ZTiH^_4;6T9MէKz ]ӧ+a_qb N!3N3Qw gBL(.Qt( ̀[a#^6&2F[`W ]7!GmT0#PK 9\qlib/URI/rlogin.pm+HLNLOU *O̳*-NU(.)L.2ҋRE *aA~ z&P-Ey% `KRRKsJ JL j PK 9\{slib/URI/rsync.pm% @E+X%* 6&J$Olw9\Fe7k<ȭL j=.I@;v!\e (/+5"ˍ(sUM?e v@g'O"]Z|6Jʚ^V MME?8 0PK 9\^ 4p}lib/URI/rtsp.pm+HLNLOU **).*-NU(.)L.2ҋRE *aA~ z&P-Ey% `2JJ @ťI )i9%E% & \\\PK 9\i[m~lib/URI/rtspu.pm+HLNLOU **).(*-NU(.)L.2ҋRE *aA~ z&P-Ey% p@ťI )i9%E% & \\\PK 9\/Salib/URI/scp.pm+HLNLOU *N.*-NU(.)L.2ҋRE *aA~ z&P-Ey% 3@\PK 9\a=Tblib/URI/sftp.pm+HLNLOU *N+)*-NU(.)L.2ҋRE *aA~ z&P-Ey% 3@\PK 9\rnlib/URI/sip.pmUMo@=_1KdBHr|IU*JmDZ`[Gv׍ή !Zr7קּU+1r,O(pó5tDF10^"V=>|fHJYpY@*D,BP(" L- p%q)e. y _GC91^2&D- ^{Pm[V&\2WY?2x%-G`'-~PHnl7rRGLft7pr.O(.,pɲ D(xs[6' `k ]ƞ!O(l}g;4[-dKp G ; ı q(aC&6pT{{S+2RDD!o+RE}OFh 'ZN\9QA1AUp4Sfqօ %LYm>YsR\ZCJ?;UZ5uFuiL7\9ߝ4tu{},ov`0ҋ4FӬ7V^ i[fH\E4OKhY EGDL`c"iPK 9\ vlib/URI/sips.pm+HLNLOU *,(*-NU(.)L.2ARE *aA~ z&P-Ey% 0@ťI )i9%E% f ҢT XК PK 9\|Sհlib/URI/smb.pmQk0)-BKe>ýRM۰6)I /M `OCirxs*e&HR S?`(˥uX 09evFܼ0`v0mIaO2ܔ \(8t:SтS}/I`YL'?[9\~Uy) #Q-^/MSv4Z6s#sI݃gEihn̝dFΝxyG>PU#0 ՃRҴ$8HTQf\@g;4,-iӡ!4ZXHқ*OCǁNY 砾uSlQ˺ $DwƉrK'PK 9\x(,lib/URI/smtp.pm5N@ @* <^[0 =r91 %rlDZFW:]B.jXBup<pV Q~7Us uj_o7bbݣ\ߩI;ze 2ρ*wb Bܴ,=+™igLJ'ޟL|PK 9\{wlib/URI/snews.pm%A @+ 3F LFPK 9\Fslib/URI/ssh.pm-A 0xKL dlED5)6:D=n/ } %dYݺd/a6 G{ Kx`v 4tfR 4 l_s^T9; 7ys[oc[9h"QBPK 9\ ,slib/URI/telnet.pm+HLNLOU *IK-*-NU(.)Lr@Ģ̼bT~iJkP:TKAbQj^:ذTfBg.a-q1qȫiy`R9.4J~`" YЧ08iZ (;:}C;!nZ5+ۇ_uC[vgK@p81pahkZ ]t`ZfP&|Aii>7Lܠ{b1`V}۲S nS`b(KacHpqh X*I* i 1 R|Br&`*8?N`'uLfz,eڎeoL0”g &Ƃcb*lKѮ.F6=nb` J bj@X%YD[6abqŭHwR]_?vvfNY,JŰ9f I,2.j|~5(#D6@4Чy:X"$HuB?Ey` j\3PBl<-70=:DtMmC [k^ٰFGNY鶼͚E-SC Mb ,=ip ڶ&J= _gul2"Ju\b6fcqOa;7{9A,$W+XꜮVD% / m1ҋ\ga/%b<:hڮDyhPK 9\qTi lib/XML/Parser.pmYSF1f$U!^",vwYX!F 's|F܃xߜ_\iEx|r0LT8Ǯ|?+*&zi8OĻLAWq,+?z<6ΦishEA̗Ǝ\F,ˆқ HxL^&Wo=Z]_˱H8q>$ !s&˱wdAw' tG#yίΜ8=*iOCS|cvX~ĘթT]UPLgv]K(q9hcJq/IMz];"B܇ L-KZv'yu6dQs&K;3aX*J;+}?bv] Uv1) MUS64=6vZ1`#;KT˝uC868 ӢStn*mS)Ƌ SmstEF,~e  a,M ^(srsU}PiRA2 B_LThm˱$AJQAk>e"Ek|X,cז;ֆOcEecgwvEwyh]ɤBT֧2XqEHn42$CgX)х&. =檕~ 't*Aߠ2NdgTeRiXa/Y4JT:.ԀS1^8"-閿 T79LYϐ9w;TDZ8;*5,+?.%;2AN^H];ITfbUcUSHWs*(_ Gr+Z-mBY -xf ժ\ WtU u?w=F>q0);g":XS9):m(<8q$=]BՎWSDd1f0–RM5r0'VI~"> B7؆H%?;um0_g!swh6o"覐x̰4 M~Ph4& ?J5$S<WIlj@q^.y HdeCs̓+J D |<2/Ù0FA02ipcp#EP{>~N*>ڰ_6s_9TI|k|E߄1r bq04:&4FMບL/G8f8&*\Z;~#pi۬{6a+uYzRɟ"KL)$\TW u`Iy}`e3/[l lP'"FνS`zxa1HDҮB`HU\6ٲcl8'َ0wPK 9\ު3519lib/XML/Parser/Expat.pmkSH;b0N$rٻ+;!pvJnQ kl"KB#8ۯ{^{z5=3C?cJ>}YۿM1c< e Yc#'Bٔ˗bʇh,,#ǧ'q<#.yԏIļs*mg~>iBaDAJ%CHA.JqKZ~9M]@/8o <3 $–DQg-Ҳp'2ʇ@@ER[ !Ni:Z]&Ύ#lv#%N-`^Ɩ\Gq<V~+^쑋ǀNiˉB~Q=Y$8sB?˒a1q n>a\)r.q@1J[KQ>RUjV1ȟE%h!S\#<0$ [sݿ}a -4ꧼcslRZ|QYZѥCp|QJ| Q2RZ!j"B!#J %6"1!>n#6ygg[X^O 7F<8'{00$mքJYCl知y,K9v1iJ5DF罅HT 9:,cet*Zh:rB/Ce-Prb3 3 .>m-c'$R)x^.i٣(=<~Թܼxܽo X YH\ r-Ƨ:ڎ0pB\{w2Qj)M24b*S:|a zWTVٰ(GUF!Ns:߰?$)]n5sGN 6YNα l{B )UOLZEbv`1d[+g '~f3jIx cE2 9\% h Z%\( ~e7"U{(2"BX(~KFx[#yb|Ztia6yLva RP8)*sbOQ^ҡgʡ\WHU0%8)@79TGyjkm-.``lI>sq_٭JLq.,3c} ۑsĄDi$H1͏€XWkgnD j9N.V͠LۂLg&e(ܦbqߜv{*0)3W(r _*YA\ WT)nzSa_j*é5j0 '5Ǒ x \%{-Ԑz4yJɱ|o#-*6 DK TsY#S L}FJ͎M%$ /dt4¬kYiNz4IC菾,ȕ|;1@5j$dNMPpOƥBĚpbr/ߨp ֔fXw-7/dN^EwYb(%y=| N^LT0^*(qPS9;Bp :׿xk0  j\oSŬ$'Mnq:=$sxz|*tz(W,dM]%~0ŒۊpH Ӊ֤2Iba}ހ)y.uX9ۏe t4&3FɛO{#6B>zٍj YmmxR$ (eɔ7Mqd d N@|2z-)ߞA!P]9D@TII۾@'$C'?IؠwnrIPl:w rrǫf4\5cqNh j^E/spUYV+}5O%_qg8 ZcOk? 2Ot9hѹ}t* r9t[OHERq"QTG!WnNšZ͡NĦjU ; 2\qnke0&H<@hz{1拵10V]DE$s*!/y/īv;Woi?oYJzmVOF7q^,M,Trvc 8KZ_W|wNA)lݑ,>-/RE UWW~_yN[PJQ"%ϐ, Q sHZ*I:,9F:S8aB۰nzouhP e`~5_vPJ$0xJ cGj,Z !]##(gf)0η,HXEibf YymUnq X^׍%5ю!h" RiE;pfךfAUy!ԃ * IK4ɚZ>G<ԖJv>! [;%^25ٝd^4ME\ຄ?DhPK 9\XMT?lib/XML/Parser/Style/Stream.pmU]o0} l 2hBZ&!<-2IKPl4i{ϹqМy6,8#8Ҩ }Wu7^ 7aaMP'Ŷe!5D@u,g?V9,iᖯeɖopHynI4F(۬`S;'ZPEdb#euǻ`-Zģ 2 `w*2᭄%"t YӘxZnQQ֫.)Xy*%9G[74M=Blsu)::U`]kd ]hjYu ^Q)&I(FJH~]+>w~Mb9NH & L*KxA/̦󳪿F.qnJlu)C8ӯ# oPK 9\}|Nklib/XML/Parser/Style/Subs.pmJ@E+.mjŅYZ ٸ4&1d^KKȿ;iD.971@zX.#B?,n f;Db@j8DU"J5F7B|.=v)&25RV %W}poF$ GjŸywYe =jCg|+!@>>ʺMbɤbk;0Id$%Ѹ+}PK 9\?!QRlib/XML/Parser/Style/Tree.pmSj@|X0` FHO RkA` "ᪧx]Z%ߛTJܥpN-.ֵo hXVӴfM[weÚ)flyD+ %))IbA+wGI v}0goS),WBuN<; (SBrƊe18C@%~&o""^\5Qx\zW _8kX5UgI^)b#=fw!o7t:ְLtjU60s!m N+&ٛts}T O%O =9잢:듳t~u ^I~PKc 9\ 2*lib/auto/IO/Tty/Tty.bundle{XT8grb0-4/\gF^k32udңefd++-:vOoad-+,άLX{y{}{zoG20HXb`2v"XVݖWfcNˡdnwW-wjŊdK.rctL3`{k}lO?8iw~ƧsC2lOi짣&3qmcp5V^y;dש/Ebq7b&-q9'wm&D C[\Es|0q؟._ObOc [7Uʡ(=v]s!V3)RZ>:ө:Az֑ Ùh/αE{õ33۵ca[P=nͺA]'I]?Ҽ pmnKmm"\oۺ.ZpF߶rcIi?MmmX=qRlo5byOsXַ vA؎Qhxǒ@M4CH %k%:S.<(<0j˜)㱜HiAC5 XNP)MTb&4I$f 7=ԜU4#|j"4DpsDzDivQ9O稃i=ҝnJ˃̓Ƌ|1K 5niVP,24o7,KiF4%f/SMiG41vvcx9#L1~CfiD3 մXIi>F3h>f4oEL=64G9Jn#߉9#`15ISbqP&M'}CM43Ѵ ߷˵ׁ4WܷLjNJNbV~%f4&bb?Fj CSGL-L?;1 v 97@ 1f<YhɁx?KӒs4JLj?f4DԼ)kh.!fW9!^4?/RÆ_Є`?OR'V4? nnl&QhE̗Ym4ob>V͝?P/ 4)tfe58GiJ9X,&\;#/48 XɗFf1h}X 8%̵̈OGs4h"&/ihfԴJ6K1yG3o9(.4 & 5'y (iD}NͿ9% 1Js7ψZjIA>1s6jlҸ$(q];i͋x,UԬf.'yJ\dIs>R+1%Qbv.9f:1&vNR(h2IsϩiC45yM<1#ѼJiD4{9&N44鉔Ha&7|ML7uԤH'ԔHs3Cļf95u49@~4 Y-|4 ԴJ3M1E^iBK49!ͩ(YKb`/5Fi@11F1XITiy#)QS&B4~\܀bvFԴH3 vbjvHf1Tb4hg 5_H3m܌2jإ~s1'1 hFSibT3?BP"M1#Ļ^GM4?f&1b.CbIJK75CLDԬ4I@5m 0bbѼDiEӟp4OQ%MsO49I7n8oA91]hf4+|@{9PS)kļ_<],4{كcPMM4ס 1;앦Vb~ 9"MĬ~ 8?LALu0c24+Yf5\hPS.M$171iz c#f_Y &ͷd85_Hsbơ9B o@c$b4(Khjy M1z4OP3Omh~´RhN{&|J14wRsP[&4MԜ+ M5M[`_anI bU7 .&Ql8 HG 箺Dz9W>ۜ'$>!hf479DhSW4ُf!5]G<1@M8M1EM4h$~4Js%bAfR(D4pRO4KqA`RFjvKj\ۃ9&M8y5a԰+pOL!3tM1ҼS(MTb&3>-{hcslU4#3+fhb" fJM$ل[b8{, 03uS ]q q>qc ue݂0q}\&;+YtjڤybvFAchfQ-M>Mn'?bFNxi&YE8j I@&M-1Z-Y-M8y~ԴJs()Dc(/M1ׄywBJd`>4I$f ajbbOhi&&" OTivQ9*~85%n`Lׁ4hl0iLfۈ9OM8i@3FibT3?Txѣ)#f65-?'&?TB3^\M̕b^MM4$3(5]Ҽf41 hޠ4C3X4/Q9EMbaj֙~١~Snm>|Ԑjt7o-Ʒ]=nBkE:R93+Ðnh 6ƞ3o(v} 5Gg퉿8٥c6RJ֗sVhd:Xl3Qvee̖fg[ źYgjtك[21ϠF=XY_ת[x'Kߓv wVvfL᪬_.OO954muc[XfC=6O߽C },>:YOzyW0g[<[ݜ R̲,ND!)+̏wgw1ݺJe~͇r|Kk[zaz[ZU:XY1yD~طNXOxeם͠Uzһ `lu#M=[ځˢ3x,1>z=Y?~0[`aş՟d6?w/ p[O cЎj0b=sXGy}:~ XTq궒Lov}`5o~6~U_1fzG7Zl˜JҞ.Ol5>>B8ORb;П<_glG=_#!lIoq} g1u|c۱#eܷ#ڔ%\7X_ЉxnE]6#6o żNggҡ{ CAo{]0Cϙ;8͊Ȓkcm8\CZC19hIObd2x%E8Vkg? Ǜ>(imm mB[{nͺhsX]?m#*zh{~.vїR?0g~zTKpCk -;+;I]rxu3#ٱKc⺄}'߿63 cra" P3<x?ߐU| u(vcІ CfG Wb;#Σ`Ba,ihHVCVSldVoB/S߄}s0cSuܥ ߾⟰Kj uux1۟Sĵg:C:uv,uEq=MϰC:nTzV6( ƥ3݄iz܏z쾜yzoC=h? ˊ^\ gU<;|1?5nf]㏈:|-:]p.:ob|]4a07w X\߹JOZ R|p"e _|0vw 5WkunAdE~c SS4n~,7uUzW^w@,s?ϟ11t7^}~ʫ &>Գ]:ߏ_G}t7\~h+az]8Nnkx1rm]OMo g{'ywvyӌpO]\l ۝[1p=zcF<ǙZ] )l} ۱f-.^=N?|wD~-p9]}7V>xmwŋ8IMA$J$ģH|Ǒx;3i$$$!t_Kb[H\JH|瓸7N/%M$ķNx7~?D$N?)do^^qgw)~x8CIga ĕ  =vCO ~@܅Q}9Ƈ! w Mm"_a;!ރ>yu"8'!cRx5[!^ox3Oa om[ EG1OWClx%+o0^*mliĔXIYnlt7uu w׺MEdEb}Ym&vI}M .M֘`rKy[Q3,Ŷh.+.Kւ2\_gg kl\_aJm,Ef=߿668l)m+(T+cd5vl[9԰hPd͝T0[&*ۯnIe$֌b9I,'9YHs9%>Ry:%M]3UP7)I)j~N)Su)iIJQ?ykjcGz*,i uefAX!&Ò[8rgOGDMPL6<̜¼\V}f8ܢDGn((-~Bf5JsNLVl2YYqa,ɰc, . z4z2OW4ç%`c%3̳yn+Q2T97n34v_6 fˆ>d1𝱙NClY!+/|̿>EnVZs-"Us~ll:sDna+3͞ & ?%UpȖge"(MFVP nI50[ =A r}A }JfXp+Yml90{O ՠ0 'V |u|u|uu~!6nϵ6^E~VQY=s<\WdV|ѵFb_ nlѼ7V[}#n#.u"*܌OF=FL꓌ť|TafREP Js o.TݤnQZJ7@x=S>K-y%j*^* s- dXm\j+(F=ϟ2T+9V&g+y9g0~U/Fw؉'gtҔXP_p;fU45$7NZ|ReIEU/fCjN{e˛nr̯^PS{ºE 9>#ڙEYmv露ױSRRҧflͷ0Wh5=mS1BXȳX5rFz%|M1~ݓhäjx wt*Lೲ*/t۝Miw9^kZvphzu3q';^cHKcvVU5,2VWT4/q+uc.GmU1gòƊ卵˫W15XsFs~8msSxcƪ 8^߷_s0L,@. LG06t$^t!,$ڂz!( +jIKZҒ%-iIKZҒ%-iIKZҒ%-iIKZҒ%-iIKZҒ%-iIKZҒ%-iIKZҒ%-iIKZҒ%-iIKZҒ%-iIKZҒ%-iIKZҒ%-iIKZҒOY"߁n`.04"H0y0܆y9u/|5-oƼ ]wb&G1󓘟`y,Fc>\K0y n=|#0ג%-iIKZҒ%-iIKZҒ%-iIKZҒ%-iIKZҒ%-iIKZҒ%-iIKZҒ%-iIKZҒ%-i?IG_e/)kUMl⸖AYvvT,W,/XpV2OW/&Elr:YKVeS]%̷ϯEmߩ\S? ں4T8  n-&pr}˱omZP嶻UF|]5DE xe*ɷj\lYgSzk)_Vm0?`$h]=_YFVYUr1 u.nUGnyG[58ݎ:9`}#-t 4W[n2>p۫km;G}ƱP݊ze/g(j~Q滾 κ&_|mE]K+ݪVKy^>9kj^\tԻգXf_ݤ/76jZuԕp/U9*jPOls;]=|v]۠v[]v!NˋnwbjR;nc|.hk 86h8c/V\%2n,ϛE'_Gb9d('bX(񲁱24@`962TTrMP)|gPycPy[PrgPAA~J`yhPylP93\T.*7W7wW~6| AP頲^XTTTT"T **Wo*TSPA֠rGxHX`e@X2XX=ar/XF0q\ %b%,r,ÒXX񱄅&2ILoɰLe ,)’K:,aTX# |^R_g6}if3`~=wJL%hW>g$s>f!~1c4sܢI64.M+p> 7ud?K9/OLLy~D_%&hǸgYGfYm K7cK!^grTW٫`{#TP2/Yϱ?ڟxSS,nӅ'UR2%cԩ "Wµ>]񇃶;~~kԚIM}g^|UdۋvxkɣS-<_}U?uOO+Cmtpujx^r^]yȇn+ |tg_i:o{8|Fԭ~W~S6yǶkx·ֿ;8s}w|1c\U/ZGlU[A[J]GtPfˆǾLdBqxկ;C>z_HL[_ zM-^_mCVgŇgw9+u~C*OEh#P穨*茶 7pZC8U*U.aC d']r=s텋oZk6jh$|[e&gUF +,esԣbthƩanX[⮴W<ַ_ ~62ϡۿf=xatx}E}T2$r= t9 5p+B c#U* t#Ow$)UhU#]2Hb-.L3U [! #yxv3t>kp À qYWM0n ?&ma_(oϹv\ xE=Vƕ-h7vJA](prngM_XD[` 'G:o4dO^Z0gY#O]#dBY{=Jx4pJMHGs@e ⼞AVx S A7m u+x~`ٿYVx+r^uV^SxJZm^>'t{MJ+ cهvv -%xC4okVGc Y7ɭ= a-nooRzt 3gGJFu>ٹd  k#u2/n;X@TN7R~<'lk67}#KUh6d LG뻉*bm͖%S_"seh9ɊI~/R7V֌w7QA-X+Ühq0؞#ƴ-;͖Dt^0^X Օ%R OOb, ,Ђ~ueu6'XgcjǨ|dDr&i7G4O=E+ѯЯ=G\-cC.$r;g l;_tj7lƹD;g6ļIwM}`v c:o;ԣWSj2=As?->,|/<dzu?X޲bԂ7 td5Ag;Љ}~}?YIʜܞ}}1j}6+r骼E| `rE狼d)es@'C]l7[27Ms/t ZF!;͓28wOCoo:ɽ1\ӑ=zeZ6cOkm#TZGG+ 7LxXŚ" bM+kMll1U({ riL>A::}+f~9-d7vݕmsˡX̎!A]Fnxq Ov| WXٌ>Yl kO6I='+)r_V&n#zoD-ϹId(cHI(k@&eF2vہ~-ŸIoQS -wo<+~u(ƾ)&}ݛ=~~X_L:H1s ^ TKwGaxKy$zLP*f#%z3giwQ;Q8*w'^= ʛDOm!>6RmFm#?fN(1W,{i}|nXhǂbaKqXٖh.h< $|X ;LaV:]Gm+}cW.̌a5c' H' 耠Ʋ揼) 6"!gX2՜cKӂG+qc+& k%emE%<$a4Rrb_(LJоv@V'8&I\R7C0\(d&b)RT3žUjVa5lV9}=c2]-,Tѐ%XO'| APKx6iXjǩMERpV}5Lf5ǓXH-i_cKu04cV?$:0տcx|/+Z WH ؊ˈc=̿2 4=uC-IGOΊ#+~>jLo]z#Bem~'6c+BF] ݠޏ=}к7nF5Y(o4<ow'Oa,ar_Wn_~U"DL57dacm/G*;+~-efu}>Uonc(8Q9?]?!&Nǜ2Q[.[ m(yl퉰WGgw{B=#o:t"}ɰcw*qhъG EDžtz˱^ihCb_ʻ__{ pYkѿ+滭éGDljךC|uZOwRpO"º| $kUɦfh$3\.q=|5kf'4(-6:["Tޱ Z/x[bzZ^~7cBlP?oҠ2Z1|쏋HrqLh(#u'Q}VWlG%77c;-!Of[X!hk<~ >abfwbn?Ld5MZD*=S60LṘe~}`CvH{AFh_z`3|٬dnT$CGc.İ@ l%c[!|!8ouN%^?§[9cA4pk/y3b6!0ÜU,:~JS]ȩ;p|?Nn%?ǔ.ӨMRd'^Kemt"{yѦx{3noi&]~M7U}h~13f)?chf.z}*ߓLz};{U@f\qfX+okh 3dh<,mW|4,>B8q_hY|G<{shmO=AVw\Sb蟈}S8Tu~5+)NC[ː'ozee5pEw$K+]]gy4SL"W\ޭ_C& k U^C}} ^-bκEˢcf{{)QHXRj@Y%G {$ݷӐ }Β֙>{d7}ݏL dl3֥ɠ[G꤬x֣ {-=bbg΅ߝ[{ N|_%;@yJZwʸ^N/nuQ,bo["ў?/|W⾮EPHYj`]TNmVdKLμîl30KLr#z;h51&;[5붜nN7QZޅ}Ņ~휅ˊ~/{fҁ7(5ytnxX&m@_ȍ{eNw$߽s"8?NXš,lrlCwoQAǠ { tcF@nSIe lUڐ*;&9>U3 <.*t)N -=QV;j/R34~gXDy3̧Q|s7ðGgukc7VѶTїGe&2& 0|ě-Zk+]c*:Q2w13 c;'~9Sj DG qgS; rtlu9䣳qk4ebP5͞O6 DYmrV{U1:ϝ@.Yn ^Ni!=;Ms:gyAio |Afdm9)[bݝ`lH[u~e:znFLBob?ٝeg{dkT^gkM]]!%b6nc&o83SOmΡ6q.qNISV=Fq5P?%7" +߆:d{_0q5?bw13UJ~h.%o&=6̲MG7~׃5>]̜Kͷ`߁δ#8Bk;]?eEe?{q}mf7__E1|L~T 6 _%Ŧ Ju.A_ɭWZR?"K=cus+Zs0WCd;1\}ak/x~@e/m^*,|:P5Dz9fqo:{ bX_Ece^gb9~VMmeW&o9yw~ٿП+ >MV$ (}M#Iٝ_^-~ }DWȂ^.|KϦ|F3ʦ2ϡB3"޳#B !lz|n]sϦer#:' 7(??`/h7KZ? ^kOQ$n7YF09,Gk[/ЗkT|W.2X hZk_ԖkBA(&,Gfo:L .s7hTl"7|Cl{?Ars{@#Kx1tBCCsM9^xŻAnP|7H {7Sc@B]wSt~٥X+#W:hQ-E+cxu}4e,/G/B!; 7\C2cUx T0}>R_¯QT$T,^TM*H߬W;Ux _RU*ܣTF~ ߪWGT*_UUUx Q_SowT{**~H?UT9Ă_on~A{j9'? / j8I8_a@F~|~C;*W-Pxw{/xe? ~#t.p \"D?" >  0^ |=O, |5I a}YwOJkP |) (BoPJ)!lŜ%7Б5"Hz{h5#'L`?:#cLd k4+je uyZe舗ΐ܊eJYݔq9M`M8J8ʝyy|+/oŲ*~jGidLlsi/tDށ;}c=oׇ$*+>RxmL-s{mNkfd_sF&5B߆j'+txcռ6kZ>ú]V[ʥ ݵeU}֊ _bs9;ںƹaUguY6p  Y0ZZDG^g\Ucuqmu:^`q^/[ M.diXaeEӎj5ԬP*s;= l'RQL֜T\WQWz\S(u*UbeȳH=۝Ue+W!讂bXP˺ ʥ#<먱}"̛\&2y2a9Hh Rș2-.AFyo6u ΂xf&3CHfjb[Y,5 8f|h 7"5/iH"#i"#%"].DZ/҇D:蠃:蠃:蠃:蠃:蠃:蠃:蠃:蠃:蠃:蠃:蠃:蠃:蠃:蠃:0xuH*o;d^累cKk\c_vbk2VWh+PY{IEUE;F-8=RGe}r1=n{]s/)k:ʝPXNUGY`VQVf/`mTN_ʾQ%g1j/JQM핳+ٮ:{iAc,Qg׮uKW:e*P(ߥɗy5UP^hl#py% QI *Zo 2:O)NA_!KCK\ݾ<ݾbȚ)m?u:[' 5=kjstg\nC oID0GgXeLOzBYh22xcc-,DN?!8.!%Aik}>5NFA?9ӯ(YLЯ>-hCDN':k]MpzVCiTCk4tTC pzgh4zި;54C }ZCrZ N_6 =_C/ɵ;zu?|3{%iG9?F7[o--Wob|݌|+݊o%ݎ|w3OJ+ķ_9> |kU[ ]hѸ߸[}{6|*x; G<w{ss՜rN}ϴ}Nc#`]Y#VRÏKRITs ?{{Ԝ6#3#/#,5'JQ21©q19Qs2|$x ?jN}}^^^ߣ]3]\S\[s[3qxxSNmqυ{SG#dUL# cwVY:&Z?~/P%bHZۦg<O{떧ͯU޵4{gGjWmk7>Q'E_1敷g_7ai'lnjYGӷecvg]-e_ݞq;L8ưxET?0?egn9L3$$I@1  `HB 2! چf@&X%m- ׂJho[2]g9s2i{qskk^k3wmcxi aa$TcNp txBEX/XO~ڤؒشa4짵ɢڊ ]W&R[ZSШ+9̆X﩮D}́ @囪T;=j׷g4-:yZgz#Y0g<^[TGC 0J)_YY&C7Qh <]Hj=~]tY~T +T9k뇬O6im WѥiX@֗x5OGz+R)-=pzC'i)m]c1C't:;Tb1K}HwC0L27ڡzC0?Z'7<{/g]bF,錯S~LuqՖP雛o,g^sCcʌfPxQ1&h7AGJl?xC@tݦsWX:%93넎w#ދv==5udxZX:OİmQ&^t-=C) <Jj~;uH>ORJ;/FὉrlK"?c$2Nm)ɲ3n)G5c&} g7c zCXmg$XL-^("nQv]/Rhm'DY`ڹAúvZnokG&ܞ/5+a^+ioafHkd1m4=$,g>E?c>NG-I-eIcI sr,\+_*ci)3ie|)dRж/Z#_FV/sL#Zkd~s瀶2oiV&3i@u̻Z~nALQK_je~y^#j@=)2hdڵ2~6whe,cd~I/V#U+i<gLɃOE[~XŶ!B {o9Mhی>N ZmImlz=}'FMFa>ʷ!?9Rؕ?iEM!][ntGNzck: ڎu=z46(9eS6+ 6 լڙ|d݊nԀ8Ŷ|b *G⇂oC_% a(1(.;ď?U~~6U~~,[F?ǂ?U\??eO?U~OF0_Ogob,ܨy{>'h1*->/h^zu_cJ / ZW^ܗ-Ыb>Aqt6z{!>92v㼺q:eAGv!âܡ5UP|؅XJG/WPu[Ў> {ކ=yБ $;i>eAb(/5ޓ4&Rfeӥɲd%Ishq@l'18s|o?p,QJ&|}rv9!ucXL0GRKbQ&{_M6NͲ|ӄ%IDnݏޥ5l9q3K1&1oKgoEK"r] ;h 4+eYm81ϤY}$(?eM[YAVMk{~I"_cs)&5&56cDƶ\VR8-xWLZ:^3FAtQ&1XX#=ge]؇W~mbl'KXV{4Պel}}yң7)ETNo_R_(Q_tWOAohWԧMR0M}D}4><y&H}"E}wMQAӭ/B^9vp}IX75鯃L i W<"Kf|M>a'"CZc)_;hЧ# +5bMs>O~H?ه_Lެ]WY'Ts: gUGJN { t)q$Hlb`C.dBLbXvJ,SvvvfhgڱM("BE;D;E"ю^FThgh lA;h'l@-PKJ́OCE;ѯ-hg+y|vh tIU*2Kn.: 3mCwD_zv+*w{H~.M_] )< 82m-&֝̚ +2R{,,\%?E?zmh%'Raǵ/M~3vxEb?C_O6T;;}:MV9""AMN`=]*ky_V _vBwt\?{3/ݷ`~L>sq^k}Detk.jCI Ah? Z㚼7 <Ƽ2_+ M,Za.rs,zZbyve&f"s=9ՍKeNYb}&9:OkI̳fy2wy׌9(A?6gݳ|RzY(NO_;m7i~M{ bM7t\j˫yA|vSζHAmxGφO̎h] {l:d_y(厡vYz|U4} x/$h_q<:}Z ;|M)c^$]tR\\2ܶy#pM=$im= N6ƜX6~:}!{0wҠ|yZSF9#>o^#h@S}˟p/@ ~z%cNsؗ#iG >ļyfu;V%I Z(q57>wU%{!ea;K~1rW(0}W>N^9YC_m̡2ϛ¯[{g} :6ovR^ O(lJPֽ٪5-º_&Fd>>>aWPϧ&wz L_a_AOEWT M^?Kt JX)V@;فvTK3}zz?'?@_HlܜḦ́y! %L6[0fıbbEqپxEEq,EݭI 9Z wMKC̬RS.>sxx;<4 ̑?}?Vl0߈9sFt,t~s7~ 69{. {?69?`~=D3ou@:iav]; c?O~ cOØ;O21<ùߝ $ټvZn8ʌ ?Ftl6k)ۃfhM:.b?~|~bm+s3sɞGWkg6Wѫk${E|=)[5O 6G:gli=УI4'5ZN/nqSd?p3/-e=tL;˕RGN&K w gþn2qg?aahno0qa2GƇK;I[cU%sͿ7})za NYq;tKR'31Ӥ:Ω;X|af}'Ĝ,~3񄍟GյAvXm=#F~=t3,pE ƲQ F|g#ΛXֵh33w`<94t[nƲ~"˔X^ǰ]6_|$qI2s!}>X4?Wwc5~_+| &J߷)J< Y i=vAϤ ;F 0%^8þ7ҿ\7?c⺥GVn{q|ٽ9?kLWa#tlX7r_(plz7.yC>Fagh7X.[!s?^uq_:2wetGWCoAn>u+l4ҮӐYi} f[:'i$;јD'sAfq'pvEFb iO$Ia;_Eblק?+˕#YLw9y-=rgolSteh*}ϟ`Q/' ~h wG?p 9Is%Ɗs9BgۖI$1x/|e`' {YGvna9r ?3aRGzha56^8cr8l?C &kM6s˓ͤX# y eГռޮ|QVGw`?M;e]8J];d~vv_DX|Y 8|3>;?$lmfKJ I,u2].Yv,~I-ϩ6nm9*>{} ú3D]kniavL{mi V96U޹ɏReuoe|n-G-loO n׋ި]@ DVq܈{(Gkg7!>\/HRkcd:G>D{ F~~ uw81 zy!Lb;m}]88l) bs'YGC 2FmG[]"( $>47~\]Կ$EqX_wK{о;| ysv֞t~ ;ay0яgܙx8. F[q(l$!37,awYٖϲE>NF][g N6-Bd2œx \ƿ򽰑ڻRٗ\4pE3'Ndž]ows[Yb:Q_`#t>n6S -n9/{rһ֞.3w}<CyLS˧s}[^(:|?ktDzQR3߂bYPa~Yk:Y*{|$zY>Ma,PK,o ~UWYA'UJ!UW|Jߪzqm/UyBqn7>=Udzo`޾wޡdEOZm0qRBR_ AcxA~^{f̦sDYo>(~V?θfwRMͦ\}m!27#zϞ䛑Mv_{ RK4/FhaVtwCVGOK30t'~P\¶_4NZߔf^0eJI G\qMEM𸧔X7ۥpIߺǓg]87}ܾں^ i><L%JkꭠvlNԺ Ma#K|ɋ$?>5z/ S<4~]jK٧H[ҹE S|Z,FY';ʇ2;˩a䟟5߇p֡[n;QW7uX ,߳'Pܿtkr?~ShZ,D{lCo<{s4Mڒ ; 3][TS৕A۲s,wR׵ץ]S%iWX7 2u<㾠cdB`|f/ྠՕʼT|7s^|7AĤ'#xLjsEMd{5˞!%fxI)KY{ jx&+o0(FV+d".go?c|HB}C:M98? }7s52^ߡPGs};˯HC N8]{`t7yO: }!?5W&y"sv%Iu&lu }_ߗœ:JyJw s}C/ b-Z x|7qrgvʜؙg- ~o} e0~y1s4vkit^7e[֍cgaRs>{~u :"ѷu(OucgNnY:uK}_:[rzl콁uN~q<t3okS}&Z ?V}GE XoKKm7f+OS3%Wj˓*a>خ^gm/,tR=<=tC+Ћϔ')1BdY6q9IG&1+T֓Y:z~Ή5XO.~'= 1^6e;Tݠ]=o+Z9gt~?A>Ωcp~-62;U&~aײo[L>lK h+FPw<)CMhk+;$acsP-9H֯TRDS=a&^4S Kj&9lOɂMG渟xwlf"YH]la/j紛 xb&Mw.[}|6D1)cM:G!So:HΚKjr~r~Ω.g#Zs-}%Gg$w OyH/Pc]ﶰ^P)6FA?BW[ܜ"ҕeaΣB_c:}^F YW/ᬻQ2^螕"Ÿ?躂8ݪp<}l:߅ִ _6x9ϧ҄5b\ϋy0I~_[.)ϏU.3\#ϧQJ@Wnȡ >mGĞ>pq~/)Ɋݍz)܃t0S㐷bx^'^x" y;yopw>iw-p;:O?-kn*^))Kd|_CwO._ORf' x7Q'0]끿-ߩ X Ǜ]x pȞ Q/{v/X~N 8}k"p[~YMc,:c^Ex>_ |~>Y?L>og=qJj9ꦕK*k%+VVT76U*Oy}]5KW,mdw*=K3UY3&ٙlZRU1už:tN^`RWC#[׏Ouʟ,Ribjww.t)z}yZwoz}wYͫ77+\ @ȟ:uRJ̥i~@JH<y 7] 2<-ɝ"μ W7ڕְF322T"ųi9sMޣ UR9-ss2)se뒘tc3?L/c-1XsitiU8W_ZᬮYZS|r V RYM bM`554֬WV4:y*ʉ?E/p6m\[*/w.iv66*iX@V\5µٰ/TWWpVGJZ[~RV&kuQ 璚rO)ĚXTIh`TWW0g<ǼxZ([@Y;Y,U2۰ʹUty I6s]jN1-Vmio2\e+0(WX2Z\FK¯V-"m:_O65.BƭѭL>Wr`0wΊZOUM2ZU]vP^bu+k 02G!b+Uv\;R jKpiXY&f@+kiUK, q},p{\Xb>M>.ikߕH}Ό8r^*8eu;w9""*J gR0 td?ޝ|Aߖ zu^!+^/h~TЍ~VqK?j^w"O z/ z$NrZ/ݗ A;rVAuY hT Z/W z&htT>Dgpo\Ä߁"Nz \+]+ ~@O z_s>  CAItt&X zmeL~uMDK4_'x@~,mѥ:BG7tut>tU G:=KG/:ީ_{u[::Mg:ڣttOu:#ݫ́t:zvjݢ.>Oh%40^=IGO%:LW^BGwtt&6!Mwۃn %t'06 `p?8FP?0p>X?8:rׇbAAƃ#bM(4D אX:,(30(y~e AxK] ArWhU0 }P l8WSU#^M?A+XP ] ;U'XC4T}[D1ȜZP>OYݔMOb|%8k+20Zu \ǡSӄg@/*jF覼>ZX!YTV,qU 9FZpNge-f76gxvt sf;'˜,sr[ef ,3G̭z3TgL 6,> 5ՕpV O5fSNHYQ_YQ>SQ5lS١UPC؏Y "QEfP@mnBaH{E *"cISu9NWߖgxO`{z9?wFs[GO&66"bs^K{vKfwi_<̽+~u]3~X _L5'?}>3cKD4uZǿM[.'kUӏ+kܱ[3VܓMݶmUon͒߬\f־k˯-yԲ]a07m; i/w/]nKS!tl_:zո?tiÇ_:{Zqo_|r2n6\Y?kǓ/;iXS PK! 9\X¡=l&lib/auto/XML/Parser/Expat/Expat.bundle \U8ߙ}QW\SCA3=3E\pQPeq-ť"rlQ[qҲҷE,ߢllѷ môDe9=ϝg>{9w3_\?c:O0<>ϸA\XVViL4qoz|(4+ĺDRRp+Ѭҙnӻ]Rp1=#^V5H#^sK/_vaAqW!;H(`q? r fjWr):W!:Z)ᩙYwDQf7ЃiKg f6FЌr\^4g"z*=zLx:YrYY%fg/)rɠb3[r,%wMϔKmfq hJ({h)qc6bTr#|0%1ї @xc5kuR]ѮVu,ޡc1&P|^brUڧtFx;ʧpo>×? @K}Ճ)}:l)oo(6⢛fc]d)iG:h4֝h {X6heWN;6h]eSDc~1Di=9mC-hэD4S4i $ɴDcM4Lܛۺ7 [<.ɴ!}v>mE/VC>.Dl~DiR0h'eZ-&zqڗ2-lvD#ڌ[lLfNweZLml5D{S&NF$Qmm_B%ڎ`i8o0ѶɴO6]m}c]uw~Л_.?hOxë6!o s`ovUGX]Xf!~ &9S?2d}#5gʕ l,3d5)Y*˝ZeI`N1^#5˱7V'#0 M9[(DZpg逮>kuN*O9q:H6̱o|U! axP |@m*ˈQŇ Wo>V"xhxׂPD3, D8!eKO/%_^?1<3obx0_ 7rk 0;6-ͭǰ "|bBYTMy60N !žj׋N?vbDe`Xٗ7"٦+0GxrLʌ}(_Ӫ (W@v`걗p,e ӅC%ݚ<0)hWח HHU9]gC-݅m錒lK/ڞl:Hw-W ^܎^ݫa}4!`G[Dpa/َ4kGz*qgPM ?Oag>ʢkGay P=y? ~ 22ўl__-W:W΍gte`c1Y{ƞ2 ~,ȆB 6w 0_ yܮ;n-\DŽF9k1vmqj쨼G~GJ(um)gMa-ҊJ|GWerW!-_״t<HTб}3å{t"*c);`d~uދe3رM/Fz[H/ 1:/eaLnm7 uxfL`w.drAәBLm];#st1/ޛez3s 2f c=8Xe|PxP3Sma#](|wj]ޞ.tqó%sX,BmA'Nz_4!rg.Qȅήmu|t]dgEt:]#;S9N|r(9zp ' 4М8A4J5JgnZ+u[/\SӉg~NvjfYNMn'WԲ~b5\gg'E?tN-QA?󟎊~Ug1駦cS,ЏtV]SSJ 3Ѝ~B?t?ϿLY_ ٞscOǦ~tlY?34s<~Un拎ںQMUGE7v{{:ƻEx &|;yY!OTo;:|Oj@(3Ous:{Wα& cB=[ #/~X/kmᗁ:n(B;b.T(uTe?X#=$w^IީC:L%p`ۄF eP)ab6(^2 ]ʴN6zHo>Ɋ3thoJh+|S5}=%KH^wXq|.f]C6\(Pf#9^g2s甦{$uYقDXWs\vu m`xPGGا$(zoaBD\h@#A#@w5ՠ֯6etO?aI;nap=Q-bKp;]ږ9uwPC3_zg^UoKo a `i =M z$mO!C髆W){ ].{F|#r{:%= |c 7unO q]toн~@ }z@7z@z[OS?>UO@}@zw P_g)tC"}ߡ[9O$DA;ZcU6zG!^8kw\ֳmcڂ̃zO/ 7I=tl KK=4DCC:%1aՐCL eC!:[wx ;;3% 2<}uh_Fݡcvڛۼcq_e Bx.hs =Fo&?hhOxFߤoa&{?}3/:q|/W CTsJ3k2~3^o glL|˘u2v`_E'=igcccu:ܕ¡xYÙw?eW|lvAA._lL @an{may/|OnO&3Y<'9>4ǡx>c eܰMY&ۼϵ6ε]3)xg0|Ixu=ީ&L*Qe0J_^Ln??wh,㕲](>weRՊ򎛲U|GYKWfξuMϦձdD7WAeA b{[^B{[m l 5=aWE{~h?7d\IEuP:34~;ngIZ2]iK`(Ő_t[hsP  v |n׶(_ Æ*~l똋|=80exo;:ڞ%oV^yq\WF ؾ#3Ïǯj.*xwf{ǂ] ^?Ar{L6mAzԋ,s_&)<3?^ZmH1ض _e0$r}Ed02V*iڇUıpmX&*"#\S 8t LC uom;Kj=)^QHHqطBT#ÆwtWAC)ߒQNjIGu=Q(ɤ3aaqM8% lkƁ$쫿d6}Ρag;7',߃qclg'1Am| tCK!|Ap_E;6[5vuG/mk_b14~<%<ݒM[/_Au6:_~7_!|5`=x'3sYP`|{Y .`ko)e ʾܐ9s5qt\}?kؓ^Kp:3a^1VӃH^9W؂]RplE]8 i/ ^9f:w˫,[\xw0V6od\xP qw9H츦80pW*T88ߞ]')s9)(vʜeIsTV,/&T!aH;?#ԎoxЎ{@XgJ1JQ`Nth^f0i4on_(\\mR;V=}Xw:fI5cI%z=;k<6ȖwT>e6:F7ٙyR}E,F3n\< POKH }qL.͝8 oO8> ?e5&55aE+zy ~C(fgt3 HdFuX\bvr.zwp}xZ64ǶX~a#$YFKv6(d$>ھ`L8)Rx dݙշ>D1,:oim*,5]h;h/qf,o㇀5W:L:ۉa}ɾCF[Rc#/6+FEGHXWVnhբ(2C}c9ߚq#arJ`H7bx*wbΛN^#ئs&*bZTН<cӡGb*c,kǥ5*cXUQtX[,Q7GٖѼx6_rOg*scΉBDԐ>hSbx9CcX1Л 3;$ nRh0.9F@CGw5B]ʼUcxQ0E #Im[r)@!mU20lku~Lc / Qc}_׭U5@M51My4F[4/cyزhcyTCn}5UDkEyPhE A6t ˼w]OA? `>A] oC1~Fx5 .#9ǂcSݎe$,9I Urm`9*sc_ϫ'/Ќcm+ 錊sKiDIiL,C("Teܚ?^BeC"y:]_BSL#Ҟe4HvVG[m@: "[E_et%`S`[i`c ?HEk]VȻ?@w7_ y쳞s:tO3y*1a a !v8 21h5b"!Z#r;5^m w:m_ףzrUbtt~)Z4ӍNNiݦJ@hnۢ[ܣn[IQ]e>t#oSxWZnݖ? o q"}I?C-?#矎/o/SmPY{\{hGxv7EpGqȦt)|f>GE甆$z);Ӊ*z=PEKtd?O羝l(rf0Ѫw-_2ܛ-g+v]  + jR{Q(م<  *?;m><ݏH)d vSv;7D96 D]3n HI(E?Cs\?K_οǥ~<|gG<[0e>`CVwk%~w1: 7e(ROe,s\O꣡o6»nȳx?Q-6=3LSwXmntke(% ?639㘇QcF`gtaE5nBh9=-׌(ȏPwo aYم ܋<(Q`{k ><][ v7Og^w1Ndk)9H)'cڐ ]4P^,HE &n*֓|6ʗq[kbv+#n`F;5cTZGtdǘ7{fL{InE m !,wQMxAz " D6]aRNݑ eGGD/5:۞J>lZ\>7c S9%{OLxֽ+j^+h>c.;dQ t6hN{e'7QlX iFWY4k{EDD(߫Go m %u?mױ|(#ӝM=:1x΀ϝҸ {b xo}os#W+tG5no9MW>ĶZ:Έ`163uh  }6۽31BYnǭ6+GEu&'5qY@vBߏv5$F4]WOG= 5l8!w&(ߦ ;MI_'Oݷ\?aRWI+[b<7Pu'Ea›/7}?9x[^K{]zS!@7z9z2 _tsu"c L!cv|\_ u Gb 1Z3։mi|ίmޝy{y5B9Ott>LB!> ƾ~⾢]L4>i|&/4{4!T74_|L/}%0.5~ #䗨35ߙ` |n8NF(ZOeZm\EI뿽 1g4K?m,xsN 8uw }HG>g^4 <}D[egLN? Sa+;yfǛ'H7uNr8_|q^+6[aP̫"u~g77ކ)sNx6!V9V.ۑwX}9pζ5@Noϵai0t^ւlo.`.m{!+U9vTxå;\vrF!8?ebר2,#Q*Oa_Ύ1b)O- :F_#}ׄq}o5?%}rZ&;]̗eyμk+ۅ<):8tAk:u^:ep;L[xu.އg`\KW@8Aي./ pCH* ; q&z =GwCA~A 6ހw(lUolvK+@u疋m7nۇ[Zb:.=oh(os | <}h/6ڏrf~ k~aTW~?e&A:Cy;0}{I,lC{,G^ {:/ a?Ņ՝0NECp'NX;m´TXw*w*.;ʝw*fjߩ)TSsr`x"PNʼnЦw*Cg{4TNť~B\T|q(w*Zbhc7د`b\# ,|`Wŋ<Ou1PO HC1۵xYCSG~u{{q7_ XTN_uZB6.DIPJ76k?rrp\iNpr‡ PeOvfbτs9 UOhƏ?#y4)^Ç]q9Q>Y+{eVfƳ@]68f@x M/+9`V_Q|@~~CZ^`[.[Ae:.e5 %Eu ̟/hԯ"|2,2xTbCn`|[fu=`~ohc9!++I{MFf_w@<>ۋN=ѤycBtt=q l0_ .Џ,'o3+A<Hy69MPj^jH@p~l O L^:G(mlʌ cpT V %8h!Ud?Y@b?t19[NS zfø`}wsq qzhLv웃mw%]{Ms΃&K 3.4:VC}ŸlfoZgwK :owNҸp7c ~{0.C-͢}m8AchO;4XF7 j kg‚}yMI_i/5EW {+s1n8O_wcS;؄a1|lZ6L vr <`alZ.MH6s9 R9criMA|lB~lW)n]r+X3n=)6ω5H4ػ9 4a#Ͱ.Ҿ r}i27B:`t>VrW1w\P a wNp <7A;°ǟy{JA~j6H[ X_\Eʠw0 R`aآ ; ubs򽋼 nլ m .ߍN-:_"Nfhf B312HԌe xytR(kRxm=2<Ȍ*N#HهvwH} e#^ewvKQAk!|_-с\֛h/H@"[mn˵@ޏ"\p@~'?^FsktmUs`L.x_*slz?;L+c!$kNk[mdm`}+>ysR;D #I hF}=|Gtmq }i"@ޖZՁJ[ݖ>mX/8PiKjƏߑF??sڃm'E!=HI^Df<\6ol&~B K{Pi}"< k>Tʾ0?"ޛgfNيqm4s?`yz-7oD;.Wt]<}Nv@ ߛa$]"K6 o {hݷ<5w~˶ O a)F{PfsF |_}w-}[]ao 9hhh|aD.*s9`YN} wZ$1o*l6ҋ3,x'V)>.q$;hG)P y y Z rʣ G@yg7s/`7oy:t KM,$?;7|`cIgHӱpBEi0C.7e lBrΜ\<Lz.@>iB0~W ְx d-ܛ`gr#y9xxܤQNK((˅r,rW&v11c /pnޟeiCQAB9[(*ǵr-rtr,57듘|x2'<ˁZ CPhN c@]>bb!PGC:gz`^Ji N7 ,Q:f|wDЖtlU3 zn]H6ZN৙N},cd+ 7>PQC?7xycCŒ>P,^XNɅ2hZexC(v8J(U EB9rr">1vwųO4qF9lB9Q)*$}mc-.X1}qdw[3:ߒKC֭X~|8@\ya4 ^Dr8Br2VY\݉٪}!6eq/ c}W;coex_\XvF>Z8~ږϥ7*wd X3pIP2`38ky~|4 ҙm*7cueo:O;1}'X6ࡔ~/J &q c_ |?0? |޾|O$b<%ɀXX2ΉK;@z١5G6^(:wޗN(f?{h/m ίęy/BX̙ NLRA?a)qg&/Q[ c [3 7 Kqf60~vf\a6| FKknW_AЯ +3U2:WBq@Я,ޅ/~ v[`#yxߣ<.1űLF4K!ߞ!,oX&cw-B} /7 x_ Db_q޿k:_hPr]W{,6pFa\Љ4~x56LZdQ߿Yݠb]~/AXY40{!xCֳ1>, 1!*QIi2Njb!7|#(N(so_eoÿ7~>a+?NV7>fOaxUmHRl;; lNCʟ;x6bYL.ѵf>Va]HBUKBENftkDH@*o6lC>זpЎA%n=o~+|Kw⸪k)U5/-I ̿}Gp% t{Hkosī&-O̼Er{hRmԢmwI ?vo@>: [~8;o| (l;wB_؂1mf#;ܷo(wh].kΨlW4ȸ8~ ë|1GF4| ־e^9~Z3a\;`||yUb:ˇrKH/ ۑ\|#9} Gr #rH1? s: =W =Wc0w[)S8}2"}:"}:c@/@=>p\ȳ>ӳ>ӳ1A,NY~2 }߁9> xp(pm/"N"NO,s(rz2r-?oBRNzsrys.Wq]nŇg]U*u\]~ ^/_~qqwy\9$x[3v:^σ! w?>ZZAl;ctaWꮔ!*|7\Źm.ÕGkzsv*W> i6tcn{\GLUv3s>c/?ty+A o^3o tn 񺈳 "6)9l_5S<^"š)*hCYS;5_S 68¦Q̑LrS= 9XTν9 rU%$9DJr9ئ'O9wFV-Tr$9$g?3rF Omfz35|˹|M1\Θ~r^!+rUs9ors{IQ !|!<ջyy"AS@YE:۔ed oI,8,<3xO,['CxVfV09NΖ0ZN c& =tAS=Ta)?A:a3>:oZ"\yPD~x_ w`I9q/-Ĭ!` YC:z:^iI6y%o%ͅ66= k8¦I:Am+mܤw4Չ WĩtA:6fF Oma+9v^!N᩿*/<*ȹ뒶;%E<gTr^ *x3@s 7r>|U9<=ɹ¦1 ݬku < 6TQm쨮#: ZjC>Ymh?1Ǿ:nCпȆ>kjCwku mSl:W6_׸68&ц"AV!|<X"_#i{"o3F+/:3 -i;}=o,s:0\_v:)ѾΉ'C=>>'*+wG @,C8MG X/Kp%:=q|# ~f+ ƻ>O;va&v񛮳 ~%x O*8mO0B0 8|^E,9<jse= j73N"x"㱾#YG4O< ^<eAXG<^@p_`;=~nHpg/pTw'~7vKp_`}5r^Nu|B$ __x-%WO.gq{6:'N&'|x4QO~[xF,o)ԿO_ֿOR2v'XEK2^dXaȰ[-q,6CTRW0Y2=+ɳg^X$kɤ=":ZP2Ro-r: u鹖"Kvhlkq1`LAqIQivI^aAKkE)[gYJ[\0rF,no! # ,< 묖ud^A^qnheqIcL-)W%K[[61Bp+2MsF5CPXJ/,(..qZ-|yɐ),5Y2م ZsiPEEE9nB+/7Ӎ@ybM[RbSc]o|kvެJS^6;τvPb6+ʦƱsI2eT 5^({̪hV~"mۣC2 n-|hYVfXW0,L%&K :"xa#W˔cϛf[KPog--1e[M,y gu^!kV!|Y:k?R52s.MyR-E4 KgJKq&gZs@URX!hP-PfÄHäDž>%zά|`~QK4 q5p-XINvKW2ۡ,q632†gcJ9nSƈd:}¸14VNTW Qt|2GyA)fQJY]f/hY`= aJa6>pbҴ{f' 2 LG c]./c1Ì*1L2 QLp6czLWi23TOe{b̻<0_tK>x)3t*c_V1SS0}#`ie~˼eJMIT^<<<<<<<<<<<<<<<<<<<<<4/%3ɟ38888888888888888888888888888888>'7䗐_Fz<{j"sדɏ#?$#9'^Dw%{kɯ#?w&/CM~&3'1k@SW_I~_?O~p?|O!8ȿ\K/#=[C~5__C9ǑH~fǑ?/o"Oa=rzc%_L{yyyyyyyyyyyyyyyyyyyyyyyyyyyyy˅$Dgvd3rR'q|9k¸ܢ%l 欬KܬܹYK-E9IN$?8Jgf+ȱ I)Y,  -2  Ǡh18LrX%??k$0]/İ.aRXJcXQenVAavaAuq ̮YŖV$I֬y1t:Z+?1ha%''k撬%4f$cq./e *7E.eLg)˥?p7fc0LVXd͚YgJZJX`]1AAyR @^@]Cfʷ̖JU%MʱΚ/ ƐU]exT PO4[fY T& P&ks^M*6Bl eP%+ ,,W'f TVbɗt>_QB)({EL([Y^\\%bhkI,צs CR*h5" hd$ DT[I9b("zRl-ZfPBt"nh*VUpuu3;Tz4M@%YyR{EZ 82Wsִe β旤Y $AWɤEEEJ ĪX ,# JJL[|KxFYK,żafIwQJ-)j@ǿXRSzza~鼂f,꛲+* e^ TaLRH7Iy9% Bl$=(p 'af~CWHZ%u~^qpkvhPr>OJQ-XJ,%yB"KȒ  @d^-uHxF[1}Ur2oZ㦦\ qUe ^ŰUdpiYoex%[YSXbX ,`yJ+v_(*̆n(c KJ"x'XEO[XGs (Ȇ)Blz\YhFd,V(>m^*yo·Ւbޒi \nҌi+p);~`XЦK V~Qr;/^ zE}+ÎƿgyzCw_6* U2QQ}wem~060nkk..<:8:88GF'; &?ip;mw|۫VI@LFuUbNx?up 1Dx~8#}97#\^'r«w>8~ ωZ.YS9Ֆ N=M7e9_:q7᣻p<_JޞA^&ޗgL!.i ՇpAT@O":3L#}^C''}_!|(8?e|v!4.k*f.ke/"<82ǟӛ݄O~GOoOBxAx{S} 8C8nr| 8FA,8^@S9~/x9rFq)r59??$|8 ?Ox>!T~c DM?Op~'Մ^Cp{ 'C£ ΄Cx_±D|Gxw>\g!|=ONn!|?W "<8GxW¿"|5g~\ _Nzo"^F')Ÿ"u+& "O p>s#?ń3'na9?O< K<&|+ "|? 7(^x+8p&P¿ /5$< xQ!{[_L'?OxsO p^o;6ǻ!9\4I݈ɔ|̈́/C8  \7>P *>_/WU*- JQWUxNU_GL>C*\oQ/* ^TU7*r ET៫T`p;>JOWy*| _·=*} :ƒ\T~ Q'T*?** v#UxO~ ³U  CWzWx^uAgbnM #~}c}GGzcz&G5]⛞ga)\]@]$]}\мi1`ɉQxoSo&ܪnɶ#mlClkձy꠺ hZ}&qy yqu䤹#feաd͝?8nzbyTp8TX8X}osG͞9usn3nr[8mm͞6w<̹ld[k7UV0M͗-ح8xlVȓ͟ m0q+O J!0'R.e0.O4.-kH$@2lAZ7grʕꎣ,^6逡B eYχhDOBkQIVI!-5)QHjorIB^VG*)5rX Xȶ9"&u1㰬"klgwL7fY#'OsZkެ8@+pV`V`V kWIN4+OV4O^4+Of4On5_[_uYuYuYuY5vfn6FͺݬY5vfn͚֬uYnIuKҬ[fݒ[fݒ4떤Y$ͺ%i-In46@n46@nͺ H}yHR\Z,ǸC{[n9q'0?OVZŋs00|fa%Z |nS-jnYՊ<]VW-.Zwj9ƒHV^ʪ8MXک5U_Z(-6Y:biuƅK1ܬ_ZVUCt?D-6Y4+ q8R u>,+vklkΨ™|ҳEy m3yݐi sjWwG* C~ez/<3oF7YӽפgU-/jgf47gxaFЛg:g̾mw]oiiu?.Uؙm;.ca7:ݴc#ӿ}֥z횲v&>~*Ꮚoo~oW/6CZ\Ny4M[M^}$-cM}(0 _loSsSVҪ閸C_ 9GlM%,9+#m)>6}K,~%}sz\ǒ>}|Ha7 '_v\Ǿ&w8:)~S_0/ ok_gOvlӵJg7>?]\|덿^r젣x{Տ>˓߈eDmILJ䒯71P^pcs3ξ;i=OXb+0=gק~xfV׷ǎ1yoKF?륖/k3vk9`}rk->eR>M,f0CS?φkgWNz(s}v=y?;7dDǷM=2j89' n :߳.}u6͇^RMߓs<;Krv3)˨M_PK 9\ý 3lib/namespace/clean.pmXmSH_&'QY[j,lH=3Gnt+e=sٔ˔yqx%q&3z.%3M{a=,Z%l|sQ\n?]ݻ:u/?oOkoKUp%)v>"&<[Lz1+\}~dx~q O ZHB (h6 vv켁緜_|;mqz»*&ʿUTEy9mb9j(4:_ZډRg03|X4 G~̎|ulxƽn;fH`Zp}qw ('ye0Fp; Dx\J&0h;7sP cS.gz&Q2+T5P)A&e>M0%%3,$?h-1v`:hIw-#',Â8ŨE:땐(vAEN uQ3m`>Q@f2WY*I| 0=I5bRa~_!c`0P>V*on ^CYrtWæP*hx.N  71?9.8BZq6 ddʹϓ0aB$B”a@⳩Z Ak Ha`1e܈E@jCr%Er17B>tZ\KyPfy53dUU7#iQNV9訡`(".zTdGSɠhϔo#1چ(icȶQX9f1Ą>b|.=P!%i(Oge"U )N q#uyX3Y$,ŷ𴧰W-="~.dDg!sXct&:k4 St6IZR3-)n /dF f1ydN] kauꃣ$($ґK 1"̬? >tDcftB?|H]>_l7H C0hZR=ή</9]`uUhnbH@s&t:QD]k(+: >JIi3eDRdU(mt,Qt7"F-Hl^>S$\b-jh Gl uG*Aq aMZЬUzoZCITv)UmSVP1gܰvE [ 8daAeO ;#LYZlCuV+ynua{] @g[k[R?W9.bt+ TG@l.7=,ҍS5= %rdžZ!.D_Y?$ "G-N/ph,˹E.̬+Pv+]5ⲉvOBXMytL8MٺSSLK=C4 0>9׍L5SZL/#VJ[ ~>#zҺ4cw?PU1ٺE#OT, gHƙ3L_=x*3hZCeyNi68].}aQY|7TRom9zZ <b.RQL 3us318:R$k.ZwTU,ȱ"ҤguިU{1kL2ݵw>ǧaQ3﹈ CfZa^=E*ўDBKWSӍL>Nf1?n/~}l~4₍ KD4.apQ:xԺ}/u$y`eoaC!q0ı&IdvҞ䵇"0iL΀7KUv=<4}-Xu R t Bjv:cN:v.Ч\N"F`wtGvWfņPk?`,F(5W6z[!sYki(/^dkqd,Qm)j$=O'=N&i~_>;|Y^7/Jk #Uc8fЛwE>Jry,mlfq6y~tAɟ) e6e<]&%װtM?6Uȗd<Ɉ\T?yԇ8TE2]gDׯW񋈊ʋtJE䅚eycu7]uq|| H>>>ioGãjl i@XoyϤܪ˴Hmm9>|O&G=M"dt)LW^6[,Ln_qgkx`)ghv ƙ%HDU{XЗm*e}BiorE$\atAE,/c)`L >,8ZET2jjcuEjgu5I.Nx<ӏv_EH{8t 7iSxuC%hkw?27 `MB\lXwAERMo2z Й:3BHYVHI鄐3-vo"(ò h/huX0539+.͋4y98:Rϟ}x~oB>d"(d{]t/Β+u76b8Oj߀H?vsBQP@*F]Ϸe U:[T' /K@yL-sXLd<JVJKǾtL2Wg .@T(?vH|Y"4vsLԮ X䩬R(P](˵l.\X ,ɇmxd q]%_tE X$A.;9dx:R'JeQv@,i3$0R8) sX(Go%>p'c,f[, mo7>+IvԿ#n ܶ:E$; f$dƔB+lʙ6VbZ~+wSTB pET`-1yV_w'`_4scv-d|rd4,QXd@OjBŔ ,Wy_E2ş%nu|q%Һ@{O}ljr>Md*%qk'ݔ@(XP~?چ;N'V0Q"*gQ,G4.2K{^EuYH'[['>?;qLJ)KUTGvI.K]h˒n"*}^GG"Zb*PP"uuqRMw]ɑ]ǠS۠@ot /p/aK:M\Ge m ,VH J4dz Pt" fĀՍ$CXhRu]3 uX1qg"pE:=L*Uae ,{`zĵYsȂ[bv^ z=X="9OGw p 3os  @jS;)`֠9@3RbԖhb$tDnUMw좼FsFP the7Oh(pp;UATKZf`tRu=wvk>39 -Veb)k+-Q~M<)ˋVE$ ?1:tNA ]\db:anE"y $IjIP!Jrqjڐ݄/2z]EWQi \].!CBu *]OW,$W$X1V 嗫.M tUb4`YhQ6-w*eH ܭ=|=nrx):zL#p"yhl9K2d4s銥#5 gBdt"LL:V=O\|?trYL x"a˚ s *?$s0Z^ ( 2 "jVkfj$"QJx:͛OxvA,%,_BUthP|U?ߌ+* '(Zӱ!qήj>}3q2 i?oMv9{,V -+`m3B䱒cl68J f(ڳo6Bfp<~um|޲@ԧݣ8C D& :b+(dMa_v=s25ί2$>؆j/e<^@`C:uQVêP;zis$-])B "#AUn0KA;͏3gN&oLڸ8k]}&JFߝ|zhe,~c`t'T$EVYi+!J9f֚ @s쵥Q^vyruus*ck>Jkږh!dyHݤewa]#S2&̀ 9Vؠ2Kp\%2wf'rFaY0=P^=cg0e<씳ypձQǁnh utRGYo3G x"΢,oYz~ |r8\3llL!G !<ƙJ}ryb+tGrKv0߻h4]\\8| Y71K)G FScc#xj3*L}\{0Dyk]8B#^J{ >;KΩ 9C&a y~EW-!e@o%'3峞;MklB]{遫 ٱE1.q)!Ij}XE>HcS?N]~O$wm׀&<,nK6錺UdedF/ TB2/?#V2@k <Md5-ٍkSr]Pl^ fGYuқhg_G vzm&@;RozE>^EѮzRƅgcf'㳯 c{-:- ꮽn,܁ijmTm7Y=[95t%+^2r<$p4L"-[䘮7AaDcJv7y'CJ[Ŝ>Ҙ W@F Z@E@lƱ[ZH[iifh}Fygl_cuի:x;wo ݴiOЪm$){BF5{s<(/PEF_FIE_wD}Sa&tJY FB (~wf,Zf,r1C]_|%),p D9OF$9[{ZqBy3^V&9|*?A=o:AVtw4:]|| cq H :fOo{wm 1{\bцo菂Nw pHTQZ9Kmxc6X;x_4WyZ~ kQ4qN[z[Ę|N|m4Ml9~@we{$&D1Ԛm1(Cʶ>NJjfsՊT]6MܷCiSxm+аPBe;̅VqפN|bfϼvKXp"59mV X=J!D"RQGC׍yk:Њ( ǽvԞ r;.g7ᶥiMGN@L%M%x\ t_,B}41+S8Impz%5H#V[ ci?6xSqm.>2O _'] kd=YR<`k(K=i" 1 Reh*1B*\֐|Z,'*7 va*JͶ:8cb"Vbth>{[Ri2g@ :7ѡx.0:䋉l2ۆ~bvSj%ͮI]Ŏq(:+bzH@5))Y5vhrjzvӏ", hda5'|tDOʞ&z3SQmπۖh=9FN{R F9N n5o }ͱ7eG|nw? ]bÁ^6FH@5jDMj5K`XI}Hf)iu׳4%Ch8O`ȨfJB4PoS]c4# y76{fnhv|wCj5:{M vtRhLq'(k4|ߺ{C/쌎en H 1S'/c|‭Ǝ>t1|xd3 @o9<́SC$%Q6yRڌPtͰZkNj*-WyZc۳̴'nb:ͧh36cBF}M?F-xEIWٻ0{/J"ǃܤ<@]cqv"'d$<E@"^At`F(- vr;I i2 ߤgMvRoT*3ޫ|p3F߸XALt!$y@=Kb:hA!}n;5gvGaY1{~`:*h_`p*9 '-1T .+DI)lcN!^ժKsJ#MEqd0PO呌hLWCu pq9K˸Hl Gx_ &3?t]P3˕% l7KֻZG%nGdɵKŠ vXu QL׍b'.MI^6 BX8Ib1/~11.~^'_u!/5!yӓ~{7VÊV-Ż~i]ilqu.rO|@G`IgimT-5A p#3\_8nrPѦjW&G}X#ʏ..U 3V v1j.UZi_}77ټ~p{k\ugάjsƠFzDoCcM&\ߘ(Sp2c>jgab O ߘ8m6X"p!Uc r.%[b0޻f`SVZWlFh0eVS;FlTL\Cމ#yoGSn16 ޜMǚK[WӢbH ~?tn]*-ooɓ5r,j俦nMS4vWUl޼HI*ޤ=~_ǽ(R9&AxIb`ԛ_ k/`M*8Z"4Ԧ!vLR3}i]wM58TzP%c-E͚yd9E~iDYGȬ[Zliۃ3?dM1zwF!B/~l,F@zl8~/z/lwUWN"rVyj/J;  /^Ȧ?^@E9dL쁡G?ζ~~WzY)^Yu0()/Wa4}94<^p=#n3By9aCH,' Z{-YzbS3ZtNbq j}C0fm8JphunaJAt'  :+R}eꗔXq$Dt>h|[u<1K=RT(7o~ #(4ktޱ8‘6i |"E'Qk9i ewxKaU+Vano[1[HT]LY8Y,(*r^1,oU`cph l{(@76VkӚ;浽>d1C& ju@ICuNӼ B (rƋaY}EքE5`R֌18:];t t%1#_ hXŋ?#zܮl/ ۫A[vw5ŷ ؓ2 vw"F=^i;=3i^eKqb`545==3F>u^winDeu#i6 ?A ⿭b_J2wS t ;rzo ':W l6|ּMkۖ*~tLߑU yAZ ovפhmP{Y6ۯOM8pe,dtʑ5RpF&s{}Q<#t@SC^/>;CH&K=FGԜk%2<{.}HK(ג Dš^h{4~x.dC3lۂZ Dɋ6&Ňn Ul:O%mVZ}ݔ2ξ>E<@7*w;ơpUᶜ FI c8tv[oSkċ6^Ƚ 9A;;;!+iOGr`Dy~>`8>NNeyQE81v[}`)QJ\z=Y-یċa 8/F}KvP|>tdipb-#tԛBI. UBgQa|: L[ϓYrC_J[ ED|P'/\n>SqCKbG1> ',YලJNj5J7[ll|%g"ۥ'aÇG@_K=Ja>磈,y,RK9 rEwfN\U`x!-eLޛXTh~_cmi)buȇ8A@{H)sX.D9YH!E<=ҹR:s9@i{/";:˯<̲W:` ZD=CRmzGa7)zx Z(*]FYcHPE=7z)9YsmU^fDIHx29K.4_R(^W4<2n-+A\&ώ|Cf3EҪٜ0u c]\SۢU?xQ) u0x7xU3"gnS8%?Ve:I9GH y|PbDxj$܁bkӱKPQ&.P 1 hwB6_2R$d~VeJ_-LXѽZ3d(r GAm '&w:xbDB<f uY/ 4((,E-.L2d%Q|YN=Hl T!`pL)W֫pPM5;CCjEn5QMkY9+@t@^5њ MMk8K2̢f|<ȳ.1uU\Gt ~P D}+ej5R߲pwl.Ϧ=sdBSyp''%QA6Lsk(C)iXHw}s&-A9cm0PbaE.i,Hl)w!eǀ]r4W_ fEtA-6ޫЖsf'`6QȿLkGwړ-ZmL6.~3.OIRq2₢q8n;OJIB'] cbAD3ʧ?PެCjP,d]M-˫RSyf&cMerqmI( 3#|F֙ /fOOܔuUx>7];M yTRQ*,TLZ-EN2׋f_+&v:ۋԭ[{M;v|E3tg4-R֨KC"bq=4oK-r#s9g0ρig>T~D2~AbJ5wBŷ1v5̤U/`uN(^ rovv]V~UŗP"sŹ+IR2$Rm).c ˳K XRXuU(2<_xL-p;?" ـM39'_ђ,A7.PL=؇4y>*ӧ$+`xV3.Asd?7;~t M5'<{!ժP_7yG0CuO[˔#M8\{v kq()͜G\̶O}:˖FjO9f]'(*G>ewXpaτ7v4 IbEasc7J\Sk2AZzԆK:mF,4Coc5=)F0N48rU f%Lj$ͻLCgokCv #E"⏸ޜD4+8͌Ke; `VVо|bu+еA>r$ߠ=鬖6=o&ϜnoEĽ((iW@ffPTpo;mE ~u{w&Nޮ&:2H\L8dR87rʅ2Rb\1N,C*2sH\Ynҷ[K d!H WfK ;++nFe™iΖr;Ekw3!x(]b]˜iοGn;Yh\ל38yY@KW4[9ǭ% z:9(?s~nE24 Wh+ىWuO)pu?6mS=i#*ꈝd\]KuYHn쵮̣z cʫsx:H~ڥ0$3+O2r.Ҙ=posPu*>Z׮w0Si5rp:dq;v,?^ҵ/vs X|>tszkx~E|N]0Ϸ㱒dSbZğTޫxRO>1ISr9` +(o=bʗ[ #xB.(@@a36kFh;CtZۿO/^я]+S{qΨG8T _x>wfဇ&hgKc߾uȧ]\ꡒFBoevںn޼}sUoH rx׃ctU\z (A`PPێw [c0%ı([uЃ,W*XTe0R0@!\Xݔbl~(Y#AOw^gD?Z9nڻ.߲\g|SNe%2ѵ\An)R~|NV̴hGd[ja4l3وf+sz'2>̠@ ӂIԺ +ϕmpW*(Lj$p%|B `+ap(<,MC",y%0hMRl5k> ŁsR^5|LwTGY i"5Vntyf4,e1JUW4pݖ8h=^oFE3}o0%O%d.l~CfnF-%= GWzG?Im1&ИWNpf#μ?42(>Qr:% xبH; БN8TߵexТ79p͑Wmw;2:P \ZRp[( bP-A }|2E|i9m8vX=ƽj&4 M "投zHЩ [?c) yV(9nr:[6eywܓI\y5~a NB0(t_Bo:nNr=K(yP&>dĜu[/$_>3hﹸ"p7QKrxͨ}Onv oXJWVvBph$j6xJ%톂W'΋;wi5s:X-Cg 4 'woHo*߀EtB6巘Le'qq9J/+v? Zޮ0,vi^EAiA65 YUSu]3q "@UM[E(GUM>8ѽ4j?glڵ׬kb).]BjA#Wg!Y&W?byR 6.h;z6knW&Lvê~9wOouQB3#mw >Hm ,$DptRT=Vfb hm:Sah9trI-dZ4eYRNX" ?>:Z'.Z6̓cɶꋎfj{`l*D"g$41,hb{Dz+lSc(9G<~lvKf0BIo1uhHNA L$K Imo?l|͒Əmu>kBd #Yk$]sK-cHRtW(ڎB׶y᫃ /8}mӂ~] ]oCFdC$=r4P8ܧ0]ǟ3nTWYy5Pf6s]".U(uDip MN5@ef85I{0Ո7gJ֔YS{; 2%+yb͂n{c k-*/K}TXu` `cV&q⌍ZO{#sH>dZF&}X $BtZ1AhE6Mg.K"M&[wIefhSRwڲFF /2rZtne˹.āYa~ˎ>ڛk,Tj q:`0@g@bWӉR(6ll$4o~7TMuzX2/KV|Cd #+,ԢK uX្+/jG]'Q 3n/-(sL,oª wZCdL.5,\'rqKv{xMN(3 蹟f㄀&SӬzT0+ D 퉡jptk s#4?i5|a\ тӉX?Wc';#@tSLx}o|SˤG8& WA>4 ']1\i 5'ܯjjjuu ۏVSd5OWW|jAvhJ_jNKU7iH+N١ʨv kdlݾ\S fuՀuM:xaKm>}OKZqѽ ՄHőJmꎝ1)Tjx1Wl>;1k'f>uMtb]e]ϐA{eV]uS)܇jRE!- yTzj|Aj又0DžejG*ǤIFUAa; v0+t)%'#k^jaX\m0ۓ`;(4KZSg;~ b4wdLSEޓ*:E7VRn?:IXS` K9g#CMbep"3ՓRac-#-Jcٳ$P˓Π948P+f<+_e+#dqިMfjte 8iPu>9F8ɲ-@Y7H+Kv6PTb9^i[s߬-f Cx!":MP\8{߿Q0+pa\f%,v4þd$$9-)P[Jic5x%0N2i` Q 5=j螇-&+Z1BM%ыR]i4FVd[Tkmѧ]:w&8_M ^Om\)WKQAtGBQ/F=Ɔc>nPQW{qb~4Xl\.vP`{1mx`N;RUӁ;P n#F+Av`T;U} @cq˕~0lKJalBsHcn64Qrk?^Rhv o'Xw,k-rWïU* =S\yGlva7-2LrG/[`أ 0QGhu9wm!4oP7m>W kݤlNA(ZUIn}rtPNRkWQơkםHsZz8xߟa|EF|_$0r,u/Ju׮zFxg^rqY{ѧvt(,KȽc('{11.9lg \tQrvLMw}l@Qk+}6}t;ѓ'u]$sx5 YFeDooh|p޳ =/lڭ`Kᮭ]7 h)F֣ G?hb6юg,MAT& pPtMzfZ|1lǼC;!^\ Ak`ۡ'OAu,5xͣ铭z N{L'?};T3/|#q+o?Or0xO`q? pp6>936Nr5w'd?ߗ"SAkJٗPq?N;fњCiL<n (աvkE4oiS1g{X8:l|_#ֻdJMv{t΃ Wq%<ML4JH(31e{*hE*%hh[MgXbzm ȷJԞ؉;TO2̏'a_F# S%d4JPa]u ?zM/Er[(k@d7r:V 1:J$!~1Vuum9V53.ӚDbogpL}& #dBejo3/~]s+| |S';|7~;LZx2M9n /rjoUuW fR\=\jʇ^8 Cya|}33'T0̌SMd]|хsѻhc)6Lc? 2(R_bIAhT3BMNFqU'nY^5Pm^dנbEՇo7;afJވB}TEu 0g(-& oÝvWDAAZ#~l +%V]'%.bdAfbKQ|Fss6篦h47 4x)Q5>뛯iַݮ4nWHȊZvT͹ʻv~v_Ã>ѹneY'-{Bd: ^r[?Ξp0a* :x#SG'Pި?Ql` ԱD2L +q$L^vJ^el#~qKRcqu7S 'KjVOh5I\%j-Yq$1|P8vuNDע6mZY!AdLԺdהMm rC3Fcyo+NͭU@? L192]؁(縚0YoPჼ=A벟]%`߰ʩ]va%2Q}hׯ_/ǝh,j؄]%󃷯>P/^z(e‚}1&/\ S,)bb")tࢸ#$pϜDej4)|KX]c=@ aa+NtB@ ~ ɉ+ǭ@|I4FSsuvSfC{8 SvHJ.jS|Y z0c$ "TgYZ~Y,ѵ?|9}9×>|iMksuzFjn>oidayAV65[y[0gY)XiyT9|2讫j&c~?]0}q74a|qR_X:1~sxgΈΧ*T1^\IIɠ+S L4Y\.@7ulJcu dlX7՟㯇T$?:X=R/޾J7/*I)"2JtFWx'@Y`Η %<)(eˍ0NA32CÏGoƋPzpi6~>qlbΙ 1$hKAgPv MPr}$TGw yJ|J}x28 SJG5AVmOӎzn`U48ֱT1}C:3֣ن7-3ң  Lְfdig79\uOb`>FV(}}b0,k,vXkWQ$s "x*f#dK` 7q8L+]C:no'} q(l zK/dCfz/;{ BEU-GtL/ qyͯ݌``QG5;[X?[4lib/IPC/Run/Win32IO.pmPK 9\&'Plib/MIME/Base32.pmPK 9\.lib/Module/Implementation.pmPK 9\E"Ylib/Module/Runtime.pmPK 9\emlib/Package/Stash.pmPK 9\nC /Ӽlib/Package/Stash/PP.pmPK 9\-p lib/Package/Stash/XS.pmPK 9\Xo !lib/Sub/Exporter/Progressive.pmPK 9\0Lm-*lib/System/Command.pmPK 9\ɢoV }lib/System/Command/Reaper.pmPK 9\Olib/Try/Tiny.pmPK 9\|^' wlib/URI.pmPK 9\n_ #lib/URI/Escape.pmPK 9\clib/URI/Heuristic.pmPK 9\` @ lib/URI/IRI.pmPK 9\M%]b lib/URI/QueryParam.pmPK 9\;C lib/URI/Split.pmPK 9\ʿ2 alib/URI/URL.pmPK 9\Lm: Elib/URI/WithBase.pmPK 9\a(lib/URI/_emailauth.pmPK 9\L>\kNlib/URI/_foreign.pmPK 9\&Ѭ lib/URI/_generic.pmPK 9\Qg%lib/URI/_idna.pmPK 9\zO  M)lib/URI/_ldap.pmPK 9\gz.lib/URI/_login.pmPK 9\. ]/lib/URI/_punycode.pmPK 9\Xy4lib/URI/_query.pmPK 9\z' e;lib/URI/_segment.pmPK 9\f-.<lib/URI/_server.pmPK 9\KmAlib/URI/_userpass.pmPK 9\_TqClib/URI/data.pmPK 9\i > Flib/URI/file.pmPK 9\ QLlib/URI/file/Base.pmPK 9\rNNlib/URI/file/FAT.pmPK 9\ЧB Plib/URI/file/Mac.pmPK 9\t`1Slib/URI/file/OS2.pmPK 9\JJQUlib/URI/file/QNX.pmPK 9\bVlib/URI/file/Unix.pmPK 9\SXlib/URI/file/Win32.pmPK 9\L<<[lib/URI/ftp.pmPK 9\gt\5}^lib/URI/ftpes.pmPK 9\8R>^lib/URI/ftps.pmPK 9\y. Sq_lib/URI/geo.pmPK 9\p_ | flib/URI/gopher.pmPK 9\7jlib/URI/http.pmPK 9\1wklib/URI/https.pmPK 9\ *ӈllib/URI/icap.pmPK 9\at}Lmlib/URI/icaps.pmPK 9\5#^mlib/URI/irc.pmPK 9\:ܵvslib/URI/ircs.pmPK 9\{6$tlib/URI/ldap.pmPK 9\Saثulib/URI/ldapi.pmPK 9\wvlib/URI/ldaps.pmPK 9\yZwlib/URI/mailto.pmPK 9\rco}zlib/URI/mms.pmPK 9\{}R{lib/URI/news.pmPK 9\o|s}lib/URI/nntp.pmPK 9\J6w~lib/URI/nntps.pmPK 9\,lib/URI/otpauth.pmPK 9\ٺ`8Slib/URI/pop.pmPK 9\q2lib/URI/rlogin.pmPK 9\{s҅lib/URI/rsync.pmPK 9\^ 4p}lib/URI/rtsp.pmPK 9\i[m~Llib/URI/rtspu.pmPK 9\/Salib/URI/scp.pmPK 9\a=Tbflib/URI/sftp.pmPK 9\rnlib/URI/sip.pmPK 9\ vlib/URI/sips.pmPK 9\|Sհalib/URI/smb.pmPK 9\x(,lib/URI/smtp.pmPK 9\{wlib/URI/snews.pmPK 9\Fslib/URI/ssh.pmPK 9\ ,sylib/URI/telnet.pmPK 9\vslib/URI/tn3270.pmPK 9\Q`dr lib/URI/ws.pmPK 9\]%ftLlib/URI/wss.pmPK 9\nLޒlib/Variable/Magic.pmPK 9\qTi lib/XML/Parser.pmPK 9\ު3519lib/XML/Parser/Expat.pmPK 9\;lib/XML/Parser/Style/Debug.pmPK 9\LPaglib/XML/Parser/Style/Objects.pmPK 9\XMT?Ylib/XML/Parser/Style/Stream.pmPK 9\}|NkԴlib/XML/Parser/Style/Subs.pmPK 9\?!QRlib/XML/Parser/Style/Tree.pmPKc 9\ 2*mlib/auto/IO/Tty/Tty.bundlePK| 9\ E/#mlib/auto/Package/Stash/XS/XS.bundlePK. 9\n(5$m}lib/auto/Variable/Magic/Magic.bundlePK! 9\X¡=l&mHlib/auto/XML/Parser/Expat/Expat.bundlePK 9\ý 35lib/namespace/clean.pmPK 9\[@ &lib/namespace/clean/_Util.pmPK 9\bO;S4& vscript/hamPK 9\7#script/main.plPK}} e6254e6116bc5e460d349dccf2274469d18d550dCACHE PAR.pm