Change 30209 by [EMAIL PROTECTED] on 2007/02/10 23:55:04
Integrate:
[ 29593]
Subject: [PATCH] Making adding binary files possible
From: "Jos Boumans" <[EMAIL PROTECTED]>
Date: Fri, 15 Dec 2006 20:51:45 +0100 (CET)
Message-ID: <[EMAIL PROTECTED]>
with a few tweaks
[ 29594]
Fix paths of pack.pl in patching.pod
[ 29604]
Subject: Re: [PATCH] Making adding binary files possible
From: demerphq <[EMAIL PROTECTED]>
Date: Wed, 20 Dec 2006 16:00:33 +0100
Message-ID: <[EMAIL PROTECTED]>
plus matching updates to Makefile.SH and patching.pod
[ 29659]
Check miniperl exists before using it to run uupacktool.pl
during distclean
[ 30010]
Subject: [PATCH] Small bugfixes to uupacktool.pl
From: "Jos Boumans" <[EMAIL PROTECTED]>
Date: Fri, 26 Jan 2007 14:50:29 +0100 (CET)
Message-ID: <[EMAIL PROTECTED]>
Affected files ...
... //depot/maint-5.8/perl/MANIFEST#318 integrate
... //depot/maint-5.8/perl/Makefile.SH#67 integrate
... //depot/maint-5.8/perl/Porting/patching.pod#4 integrate
... //depot/maint-5.8/perl/uupacktool.pl#1 branch
... //depot/maint-5.8/perl/win32/Makefile#62 integrate
... //depot/maint-5.8/perl/win32/makefile.mk#70 integrate
... //depot/maint-5.8/perl/win32/makeico.pl#2 delete
... //depot/maint-5.8/perl/win32/perlexe.ico.packd#1 branch
Differences ...
==== //depot/maint-5.8/perl/MANIFEST#318 (text) ====
Index: perl/MANIFEST
--- perl/MANIFEST#317~30208~ 2007-02-10 15:36:59.000000000 -0800
+++ perl/MANIFEST 2007-02-10 15:55:04.000000000 -0800
@@ -2312,6 +2312,7 @@
os2/perlrexx.cmd Test perl interpreter embedded in REXX
overload.h generated overload enum and name table
overload.pl generate overload.h
+uupacktool.pl Pack/unpack files to the .packed format
pad.c Scratchpad functions
pad.h Scratchpad headers
patchlevel.h The current patch level of perl
@@ -3122,7 +3123,7 @@
win32/include/sys/socket.h Win32 port
win32/Makefile Win32 makefile for NMAKE (Visual C++ build)
win32/makefile.mk Win32 makefile for DMAKE (BC++, VC++ builds)
-win32/makeico.pl script to create perlexe.ico image file
+win32/perlexe.ico.packd uupacktool.pl packed perlexe.ico image
file, 'packd' ext is deliberate!
win32/mdelete.bat multifile delete
win32/perlexe.rc associated perl binary with icon
win32/perlglob.c Win32 port
==== //depot/maint-5.8/perl/Makefile.SH#67 (text) ====
Index: perl/Makefile.SH
--- perl/Makefile.SH#66~30208~ 2007-02-10 15:36:59.000000000 -0800
+++ perl/Makefile.SH 2007-02-10 15:55:04.000000000 -0800
@@ -1063,18 +1063,19 @@
.PHONY: clean _tidy _mopup _cleaner1 _cleaner2 \
realclean _realcleaner clobber _clobber \
- distclean veryclean _verycleaner
+ distclean veryclean _verycleaner \
+ cleanup_unpacked_files unpack_files
-clean: _tidy _mopup
+clean: cleanup_unpacked_files _tidy _mopup
-realclean: _realcleaner _mopup
+realclean: cleanup_unpacked_files _realcleaner _mopup
@echo "Note that '$(MAKE) realclean' does not delete config.sh or
Policy.sh"
_clobber:
[EMAIL PROTECTED] -f Cross/run-* Cross/to-* Cross/from-*
rm -f config.sh cppstdin Policy.sh extras.lst
-clobber: _realcleaner _mopup _clobber
+clobber: cleanup_unpacked_files _realcleaner _mopup _clobber
distclean: clobber
@@ -1198,7 +1199,7 @@
TESTFILE=TEST
-_test_prep:
+_test_prep: unpack_files
cd t && (rm -f $(PERL)$(EXE_EXT); $(LNS) ../$(PERL)$(EXE_EXT)
$(PERL)$(EXE_EXT))
# Architecture-neutral stuff:
@@ -1214,6 +1215,12 @@
_test_notty:
cd t && $(PERL_DEBUG) PERL_SKIP_TTY_TEST=1 $(LDLIBPTH) $(PERL)
$(TESTFILE) $(TEST_ARGS)
+unpack_files:
+ $(LDLIBPTH) ./miniperl$(EXE_EXT) -Ilib uupacktool.pl -u -m
+
+cleanup_unpacked_files:
+ $(LDLIBPTH) ./miniperl$(EXE_EXT) -Ilib uupacktool.pl -c
+
# The second branch is for testing without a tty or controlling terminal,
# see t/op/stat.t
_test:
==== //depot/maint-5.8/perl/Porting/patching.pod#4 (text) ====
Index: perl/Porting/patching.pod
--- perl/Porting/patching.pod#3~24292~ 2005-04-22 07:15:59.000000000 -0700
+++ perl/Porting/patching.pod 2007-02-10 15:55:04.000000000 -0800
@@ -2,17 +2,10 @@
patching.pod - Appropriate format for patches to the perl source tree
-=head2 Where to get this document
-
-The latest version of this document is available from
- http://perrin.dimensional.com/perl/perlpatch.html
-
=head2 How to contribute to this document
-You may mail corrections, additions, and suggestions to me
-at [EMAIL PROTECTED] but the preferred method would be
-to follow the instructions set forth in this document and
-submit a patch 8-).
+You may mail corrections, additions, and suggestions by following the
+instructions set forth in this document and submitting a patch :).
=head1 Description
@@ -85,16 +78,16 @@
# generate a patch for a newly added file
% diff -u /dev/null new/file
-
+
# generate a patch to remove a file (patch > v2.4 will remove it cleanly)
% diff -u old/goner /dev/null
-
+
# get additions, deletions along with everything else, recursively
% diff -ruN olddir newdir
-
+
# ignore whitespace
% diff -bu a/file b/file
-
+
# show function name in every hunk (safer, more informative)
% diff -u -p old/file new/file
% diff -u -F '^[_a-zA-Z0-9]+ *(' old/file new/file
@@ -151,6 +144,25 @@
-diff "diff -u" \
[EMAIL PROTECTED] [EMAIL PROTECTED]
+=item Binary Files
+
+Since the patch(1) utility cannot deal with binary files, it's important
+that you either avoid the use of binary files in your patch, generate the
+files dynamically, or that you encode any binary files using the
+F<uupacktool.pl> utility.
+
+Assuming you needed to include a gzip-encoded file for a module's test
+suite, you might do this as follows using the F<uupacktool.pl> utility:
+
+ $ perl uupacktool.pl -v -p -D lib/Some/Module/t/src/t.gz
+ Writing lib/Some/Module/t/src/t.gz into lib/Some/Module/t/src/t.gz.packed
+
+This will replace the C<t.gz> file with an encoded counterpart. During
+C<make test>, before any tests are run, perl's Makefile will restore all
+the C<.packed> files mentioned in the MANIFEST to their original name.
+This means that the test suite does not need to be aware of this packing
+scheme and will not need to be altered.
+
=item Try it yourself
Just to make sure your patch "works", be sure to apply it to the Perl
@@ -379,7 +391,7 @@
If you follow these guidelines it will make everybody's life a little
easier. You'll have the satisfaction of having contributed to perl,
others will have an easy time using your work, and it should be easier
-for the maintainers to coordinate the occasionally large numbers of
+for the maintainers to coordinate the occasionally large numbers of
patches received.
Also, just because you're not a brilliant coder doesn't mean that you
@@ -397,13 +409,6 @@
them into the source. Obviously you'd want the patches to be as easy
to apply as possible. Keep that in mind. 8-)
-=head1 Last Modified
-
-Last modified 22 August 2002
-H.Merijn Brand <[EMAIL PROTECTED]>
-Prev modified 21 January 1999
-Daniel Grisinger <[EMAIL PROTECTED]>
-
=head1 Author and Copyright Information
Copyright (c) 1998-2002 Daniel Grisinger
==== //depot/maint-5.8/perl/uupacktool.pl#1 (text) ====
Index: perl/uupacktool.pl
--- /dev/null 2007-01-16 11:55:45.526841103 -0800
+++ perl/uupacktool.pl 2007-02-10 15:55:04.000000000 -0800
@@ -0,0 +1,188 @@
+#!perl
+
+use strict;
+use warnings;
+use Getopt::Long;
+use File::Basename;
+
+Getopt::Long::Configure('no_ignore_case');
+
+our $LastUpdate = -M $0;
+
+sub handle_file {
+ my $opts = shift;
+ my $file = shift or die "Need file\n". usage();
+ my $outfile = shift || '';
+ my $mode = (stat($file))[2] & 07777;
+
+ open my $fh, "<", $file
+ or die "Could not open input file $file: $!";
+ binmode $fh;
+ my $str = do { local $/; <$fh> };
+
+ ### unpack?
+ my $outstr;
+ if( $opts->{u} ) {
+ if( !$outfile ) {
+ $outfile = $file;
+ $outfile =~ s/\.packed//;
+ }
+ my ($head, $body) = split /__UU__\n/, $str;
+ die "Can't unpack malformed data in '$file'\n"
+ if !$head;
+ $outstr = unpack 'u', $body;
+
+ } else {
+ $outfile ||= $file . '.packed';
+
+ my $me = basename($0);
+
+ $outstr = <<"EOFBLURB" . pack 'u', $str;
+#########################################################################
+This is a binary file that was packed with the 'uupacktool.pl' which
+is included in the Perl distribution.
+
+To unpack this file use the following command:
+
+ $me -u $outfile $file
+
+To recreate it use the following command:
+
+ $me -p $file $outfile
+
+Created at @{[scalar localtime]}
+#########################################################################
+__UU__
+EOFBLURB
+ }
+
+ ### output the file
+ if( $opts->{'s'} ) {
+ print STDOUT $outstr;
+ } else {
+ print "Writing $file into $outfile\n" if $opts->{'v'};
+ open my $outfh, ">", $outfile
+ or die "Could not open $outfile for writing: $!";
+ binmode $outfh;
+ ### $outstr might be empty, if the file was empty
+ print $outfh $outstr if $outstr;
+ close $outfh;
+
+ chmod $mode, $outfile;
+ }
+
+ ### delete source file?
+ if( $opts->{'D'} and $file ne $outfile ) {
+ 1 while unlink $file;
+ }
+}
+
+sub bulk_process {
+ my $opts = shift;
+ my $Manifest = $opts->{'m'};
+
+ open my $fh, "<", $Manifest or die "Could not open '$Manifest':$!";
+
+ print "Reading $Manifest\n"
+ if $opts->{'v'};
+
+ my $count = 0;
+ my $lines = 0;
+ while( my $line = <$fh> ) {
+ chomp $line;
+ my ($file) = split /\s+/, $line;
+
+ $lines++;
+
+ next unless $file =~ /\.packed/;
+
+ $count++;
+
+ my $out = $file;
+ $out =~ s/\.packed//;
+
+ ### unpack
+ if( !$opts->{'c'} ) {
+ ( $out, $file ) = ( $file, $out ) if $opts->{'p'};
+ if (-e $out) {
+ my $changed = -M _;
+ if ($changed < $LastUpdate and $changed < -M $file) {
+ print "Skipping '$file' as '$out' is up-to-date.\n"
+ if $opts->{'v'};
+ next;
+ }
+ }
+ handle_file($opts, $file, $out);
+ print "Converted '$file' to '$out'\n"
+ if $opts->{'v'};
+
+ ### clean up
+ } else {
+
+ ### file exists?
+ unless( -e $out ) {
+ print "File '$file' was not unpacked into '$out'. Can not
remove.\n";
+
+ ### remove it
+ } else {
+ print "Removing '$out'\n";
+ 1 while unlink $out;
+ }
+ }
+ }
+ print "Found $count files to process out of $lines in '$Manifest'\n"
+ if $opts->{'v'};
+}
+
+sub usage {
+ return qq[
+Usage: $^X $0 [-d dir] [-v] [-c] [-D] -p|-u [orig [packed|-s] | -m [manifest]]
+
+ Handle binary files in source tree. Can be used to pack or
+ unpack files individiually or as specified by a manifest file.
+
+Options:
+ -u Unpack files (defaults to -u unless -p is specified)
+ -p Pack files
+ -c Clean up all unpacked files. Implies -m
+
+ -D Delete source file after encoding/decoding
+
+ -s Output to STDOUT rather than OUTPUT_FILE
+ -m Use manifest file, if none is explicitly provided defaults to
'MANIFEST'
+
+ -d Change directory to dir before processing
+
+ -v Run verbosely
+ -h Display this help message
+];
+}
+
+my $opts = {};
+GetOptions($opts,'u','p','c', 'D', 'm:s','s','d=s','v','h');
+
+die "Can't pack and unpack at the same time!\n", usage()
+ if $opts->{'u'} && $opts->{'p'};
+die usage() if $opts->{'h'};
+
+if ( $opts->{'d'} ) {
+ chdir $opts->{'d'}
+ or die "Failed to chdir to '$opts->{'d'}':$!";
+}
+$opts->{'u'} = 1 if !$opts->{'p'};
+binmode STDOUT if $opts->{'s'};
+if ( exists $opts->{'m'} or exists $opts->{'c'} ) {
+ $opts->{'m'} ||= "MANIFEST";
+ bulk_process($opts);
+ exit(0);
+} else {
+ if (@ARGV) {
+ handle_file($opts, @ARGV);
+ } else {
+ die "No file to process specified!\n", usage();
+ }
+ exit(0);
+}
+
+
+die usage();
==== //depot/maint-5.8/perl/win32/Makefile#62 (text) ====
Index: perl/win32/Makefile
--- perl/win32/Makefile#61~30208~ 2007-02-10 15:36:59.000000000 -0800
+++ perl/win32/Makefile 2007-02-10 15:55:04.000000000 -0800
@@ -1020,8 +1020,8 @@
<<
$(XCOPY) $(PERLIMPLIB) $(COREDIR)
-$(PERLEXE_ICO): $(MINIPERL) makeico.pl
- $(MINIPERL) makeico.pl > $@
+$(PERLEXE_ICO): $(MINIPERL) ..\uupacktool.pl $(PERLEXE_ICO).packd
+ $(MINIPERL) -I..\lib ..\uupacktool.pl -u $(PERLEXE_ICO).packd
$(PERLEXE_ICO)
$(PERLEXE_RES): perlexe.rc $(PERLEXE_ICO)
@@ -1280,7 +1280,7 @@
cd ..\t && \
$(MINIPERL) -I..\lib harness base/*.t comp/*.t cmd/*.t io/*.t op/*.t
pragma/*.t
-test-prep : all utils
+test-prep : all utils unpack_files
$(XCOPY) $(PERLEXE) ..\t\$(NULL)
$(XCOPY) $(PERLDLL) ..\t\$(NULL)
$(XCOPY) $(GLOBEXE) ..\t\$(NULL)
@@ -1290,6 +1290,12 @@
$(PERLEXE) -I..\lib harness $(TEST_SWITCHES) $(TEST_FILES)
cd ..\win32
+unpack_files:
+ $(MINIPERL) -I..\lib ..\uupacktool.pl -u -d .. -m
+
+cleanup_unpacked_files:
+ -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\uupacktool.pl -c -d .. -m
+
test-notty : test-prep
set PERL_SKIP_TTY_TEST=1
cd ..\t
@@ -1330,9 +1336,11 @@
[EMAIL PROTECTED](DEL) *.pdb
[EMAIL PROTECTED](DEL) Extensions_static
-clean : Extensions_clean _clean
+_preclean : cleanup_unpacked_files
+
+clean : _preclean Extensions_clean _clean
-realclean : Extensions_realclean MakePPPort_clean _clean
+realclean : _preclean Extensions_realclean MakePPPort_clean _clean
# Handy way to run perlbug -ok without having to install and run the
# installed perlbug. We don't re-run the tests here - we trust the user.
==== //depot/maint-5.8/perl/win32/makefile.mk#70 (text) ====
Index: perl/win32/makefile.mk
--- perl/win32/makefile.mk#69~30208~ 2007-02-10 15:36:59.000000000 -0800
+++ perl/win32/makefile.mk 2007-02-10 15:55:04.000000000 -0800
@@ -1163,8 +1163,8 @@
$(XCOPY) $(PERLIMPLIB) $(COREDIR)
-$(PERLEXE_ICO): $(MINIPERL) makeico.pl
- $(MINIPERL) makeico.pl > $@
+$(PERLEXE_ICO): $(MINIPERL) ..\uupacktool.pl $(PERLEXE_ICO).packd
+ $(MINIPERL) -I..\lib ..\uupacktool.pl -u $(PERLEXE_ICO).packd
$(PERLEXE_ICO)
$(PERLEXE_RES): perlexe.rc $(PERLEXE_ICO)
@@ -1431,7 +1431,13 @@
cd ..\t && \
$(MINIPERL) -I..\lib harness base/*.t comp/*.t cmd/*.t io/*.t op/*.t
pragma/*.t
-test-prep : all utils
+unpack_files:
+ $(MINIPERL) -I..\lib ..\uupacktool.pl -u -d .. -m
+
+cleanup_unpacked_files:
+ -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\uupacktool.pl -c -d .. -m
+
+test-prep : all utils unpack_files
$(XCOPY) $(PERLEXE) ..\t\$(NULL)
$(XCOPY) $(PERLDLL) ..\t\$(NULL)
.IF "$(CCTYPE)" == "BORLAND"
@@ -1484,9 +1490,13 @@
[EMAIL PROTECTED] *.tds
[EMAIL PROTECTED] Extensions_static
-clean : Extensions_clean _clean
-realclean : Extensions_realclean MakePPPort_clean _clean
+
+_preclean : cleanup_unpacked_files
+
+clean : _preclean Extensions_clean _clean
+
+realclean : _preclean Extensions_realclean MakePPPort_clean _clean
# Handy way to run perlbug -ok without having to install and run the
# installed perlbug. We don't re-run the tests here - we trust the user.
==== //depot/maint-5.8/perl/win32/perlexe.ico.packd#1 (text) ====
Index: perl/win32/perlexe.ico.packd
--- /dev/null 2007-01-16 11:55:45.526841103 -0800
+++ perl/win32/perlexe.ico.packd 2007-02-10 15:55:04.000000000 -0800
@@ -0,0 +1,79 @@
+#########################################################################
+This is a binary file that was packed with the 'uupacktool.pl' which
+is included in the Perl distribution.
+
+To unpack this file use the following command:
+
+ uupacktool.pl -u perlexe.ico.packd perlexe.ico
+
+To recreate it use the following command:
+
+ uupacktool.pl -p perlexe.ico perlexe.ico.packd
+
+Created at Wed Dec 20 15:48:40 2006
+#########################################################################
+__UU__
+M```!``,[EMAIL PROTECTED]@`:`4``%X!```0$````0`@
+M`&@$``#&[EMAIL PROTECTED]@`````0`$``````#`````````````````````
+M`````/___P![`````'L``'M[`````'L`>P![``![>P"]O;T`>WM[`/\`````
+M_P``__\`````_P#_`/\``/__``````#________________W_X________^/
+M_________W__________C_________^/_________X]___________A_____
+M__________C____X_____X__________^/__?___C_C_C__________X____
[EMAIL PROTECTED];('3]6W,@_5MN(/T3=7/P
+M`7!RX`-L9>`#('[EMAIL PROTECTED]@=E=\,/[EMAIL PROTECTED];O__;B`H````$````"``
[EMAIL PROTECTED]/[EMAIL PROTECTED]
+M`/W]_0!Y>7D``````'IZ>@#\_/P`04%!`'5U=0"$A(0`'AX>`,O+RP"WM[<`
+M`P,#`(B(B``"`@([EMAIL PROTECTED]&!`/;[EMAIL PROTECTED]@("``MK:V`([EMAIL
PROTECTED]&AH:`.?GYP`.
[EMAIL PROTECTED]@X`&MK:P`8&[EMAIL PROTECTED],'!P0`5%18`%Q<7``L+"P`!`0$`'Q\?``H*
+M"@!P<'``FYN;`.GIZ`!X>'@`$1$1`",C(P!$1$0`XN+B`*:[EMAIL PROTECTED]:FIJ
+M`+2TM`"OKZ\`S\_/``@("`!L;&P`CX^/`+&QL0"_O[\`\?'Q`%A86`":FIH`
+M____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#_
+M__\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/__
+M_P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____
+M`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`
+M____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#_
+M__\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/__
+M_P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____
+M`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`
+M____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#_
+M__\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/__
+M_P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____
+M`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`
+M____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#_
+M__\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/__
+M_P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`____
+M`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#___\`
+M____`/___P#___\`____`/___P#___\`____`/___P#___\`____`/___P#_
+M__\`____`/___P#___\`____``8&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL
PROTECTED]&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL
PROTECTED]&[EMAIL PROTECTED]
[EMAIL PROTECTED]@8&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL
PROTECTED]&!AP&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL
PROTECTED]&[EMAIL PROTECTED]@8&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL
PROTECTED]&
[EMAIL PROTECTED]&'`8&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL
PROTECTED]&[EMAIL PROTECTED]&!AP&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL
PROTECTED]&[EMAIL PROTECTED]&#!0)[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL
PROTECTED]&
+M#`P&[EMAIL PROTECTED]&!A0&!2<&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL
PROTECTED]&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL
PROTECTED]&&P8&[EMAIL PROTECTED]&[EMAIL PROTECTED]<[EMAIL PROTECTED]&
[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL PROTECTED],[EMAIL PROTECTED]&[EMAIL
PROTECTED]&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL PROTECTED]&"P8&[EMAIL
PROTECTED]&"08&!08&"P8&#`8&
[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL
PROTECTED]@8&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL
PROTECTED]&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL PROTECTED]&[EMAIL
PROTECTED]&[EMAIL PROTECTED]&[EMAIL PROTECTED]&
[EMAIL PROTECTED]&!@;__YY<^[=T(/V;>&7]FR!T_5MS(/U;;B#]$W5S\`%P<N`#;&[EMAIL
PROTECTED]
+MY`=N(.8'97?##V<@_Y]E(/__;[EMAIL PROTECTED]@[EMAIL PROTECTED]
+M!```````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````/[EMAIL PROTECTED]
+M````90`````````````````````````````````````````P````_P````$`
+M```!"`@(]VQL;),``````````0```/\`````````````````````````````
+M`````````````P```/\````!````2P```/^OKZ]0``````````$```#_````
+M`0````````````````````````````````````$```#_`````0```/\`````
+M:FIJE0````$````!````_P````$`````````````````````````````````
+M```!````_P````$```#_````665E99H````!`````0```/\`````````````
+M````````````````````````````%P```/\```"'$1$1[B,C(]Q$1$2[````
+M`7IZ>H4```#_````'0````````````````````$````^%146ZA<7%^@"[EMAIL PROTECTED]
+M"PL+]`$!`?X```#_`@("_1\?'^`*"@KU<'!PCYN;FV0`````````````````
+M```!````_P```/\```#_````_P```/\```#_````_P```/[EMAIL PROTECTED]
+M&.<```!-`````````````````````0```/[EMAIL PROTECTED]@XQP```/\```#_````
+M_P```/\```#_````_P```/]K:VN4``````````````````````````````#_
+M("[EMAIL PROTECTED]/\```#_````_P```/\:&AKE````&```````
+M``````````````````!(````_P,#`_P```"*`````8B(B'<"[EMAIL PROTECTED]
+M`/[EMAIL PROTECTED]&[EMAIL PROTECTED]@```/\```#_=75U
[EMAIL PROTECTED](2$>P```/\```#_'AX>X0```#0`````````````````````
+M``````````$````I````50````$```````````````)Y>7F&````_P```(4`
+M```#````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````#__YY<^[=T(/V;>&7]FR!T_5MS(/U;;B#]$W5S\`%P<N`#;&7@
+;`R!WY`=N(.8'97?##V<@_Y]E(/__;V[__VX@
End of Patch.