Imported from libpng-1.2.8rc3.tar
diff --git a/ANNOUNCE b/ANNOUNCE
index c1feaea..6e857db 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -1,5 +1,5 @@
 
-Libpng 1.2.8rc2 - November 26, 2004
+Libpng 1.2.8rc3 - November 28, 2004
 
 This is not intended to be a public release.  It will be replaced
 within a few weeks by a public version or by another test version.
@@ -31,6 +31,7 @@
   Revised handling of SPECIALBUILD, PRIVATEBUILD, 
     PNG_LIBPNG_BUILD_SPECIAL_STRING and PNG_LIBPNG_BUILD_PRIVATE_STRING.
 version 1.2.8rc1 [Novermber 24, 2004]
+  Inadvertently installed a supposedly faster test version of pngrutil.c
   Moved handling of BUILD macros from pngconf.h to png.h
   Added definition of PNG_LIBPNG_BASE_TYPE in png.h, inadvertently
     omitted from beta5.
@@ -38,6 +39,13 @@
   Despammed mailing addresses by masking "@" with "at".
 version 1.2.8rc2 [November 26, 2004]
   Added two missing "\" in png.h
+  Change tests in pngread.c and pngpread.c to
+    if (png_ptr->transformations || (png_ptr->flags&PNG_FLAG_STRIP_ALPHA))
+       png_do_read_transformations(png_ptr);
+version 1.2.8rc3 [November 28, 2004]
+  Reverted pngrutil.c to version libpng-1.2.8beta5.
+  Added scripts/makefile.elf with supporting code in pngconf.h for symbol
+    versioning (John Bowler).
 
 Send comments/corrections/commendations to
 png-implement at ccrc.wustl.edu (subscription required; write to
diff --git a/CHANGES b/CHANGES
index 66dd1b6..ed828da 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1394,12 +1394,16 @@
     omitted from beta5.
   Revised scripts/pngw32.rc
   Despammed mailing addresses by masking "@" with "at".
+  Inadvertently installed a supposedly faster test version of pngrutil.c
 version 1.2.8rc2 [November 26, 2004]
   Added two missing "\" in png.h
   Change tests in pngread.c and pngpread.c to
     if (png_ptr->transformations || (png_ptr->flags&PNG_FLAG_STRIP_ALPHA))
        png_do_read_transformations(png_ptr);
-
+version 1.2.8rc3 [November 28, 2004]
+  Reverted pngrutil.c to version libpng-1.2.8beta5.
+  Added scripts/makefile.elf with supporting code in pngconf.h for symbol
+    versioning (John Bowler).
 
 Send comments/corrections/commendations to
 png-implement at ccrc.wustl.edu (subscription required; write to
diff --git a/INSTALL b/INSTALL
index e9a1198..0f9a666 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,5 +1,5 @@
 
-Installing libpng version 1.2.8rc2 - November 26, 2004
+Installing libpng version 1.2.8rc3 - November 28, 2004
 
 Before installing libpng, you must first install zlib.  zlib
 can usually be found wherever you got libpng.  zlib can be
@@ -10,7 +10,7 @@
 version of zlib that's installed.
 
 You can rename the directories that you downloaded (they
-might be called "libpng-1.2.8rc2" or "lpng109" and "zlib-1.2.1"
+might be called "libpng-1.2.8rc3" or "lpng109" and "zlib-1.2.1"
 or "zlib121") so that you have directories called "zlib" and "libpng".
 
 Your directory structure should look like this:
@@ -66,10 +66,12 @@
 include
 
  makefile.std      =>  Generic UNIX makefile (cc, creates static libpng.a)
+ makefile.elf      =>  Linux/ELF makefile symbol versioning,
+                       gcc, creates libpng12.so.0.1.2.8rc3)
  makefile.linux    =>  Linux/ELF makefile
-                       (gcc, creates libpng12.so.0.1.2.8rc2)
+                       (gcc, creates libpng12.so.0.1.2.8rc3)
  makefile.gcmmx    =>  Linux/ELF makefile
-                       (gcc, creates libpng12.so.0.1.2.8rc2,
+                       (gcc, creates libpng12.so.0.1.2.8rc3,
                        uses assembler code tuned for Intel MMX platform)
  makefile.gcc      =>  Generic makefile (gcc, creates static libpng.a)
  makefile.knr      =>  Archaic UNIX Makefile that converts files with
@@ -92,12 +94,12 @@
  makefile.openbsd  =>  OpenBSD makefile
  makefile.sgi      =>  Silicon Graphics IRIX makefile (cc, creates static lib)
  makefile.sggcc    =>  Silicon Graphics (gcc,
-                       creates libpng12.so.0.1.2.8rc2)
+                       creates libpng12.so.0.1.2.8rc3)
  makefile.sunos    =>  Sun makefile
  makefile.solaris  =>  Solaris 2.X makefile (gcc,
-                       creates libpng12.so.0.1.2.8rc2)
+                       creates libpng12.so.0.1.2.8rc3)
  makefile.so9      =>  Solaris 9 makefile (gcc,
-                       creates libpng12.so.0.1.2.8rc2)
+                       creates libpng12.so.0.1.2.8rc3)
  makefile.32sunu   =>  Sun Ultra 32-bit makefile
  makefile.64sunu   =>  Sun Ultra 64-bit makefile
  makefile.sco      =>  For SCO OSr5  ELF and Unixware 7 with Native cc
diff --git a/KNOWNBUG b/KNOWNBUG
index 6af2247..4859980 100644
--- a/KNOWNBUG
+++ b/KNOWNBUG
@@ -1,5 +1,5 @@
 
-Known bugs in libpng version 1.2.8rc2
+Known bugs in libpng version 1.2.8rc3
 
 1. April 22, 2001: pnggccrd.c has been reported to crash on NetBSD when
    reading interlaced PNG files, when assembler code is enabled but running
diff --git a/LICENSE b/LICENSE
index b9ac6d0..9898cab 100644
--- a/LICENSE
+++ b/LICENSE
@@ -8,7 +8,7 @@
 If you modify libpng you may insert additional notices immediately following
 this sentence.
 
-libpng version 1.2.6, November 26, 2004, is
+libpng version 1.2.6, November 28, 2004, is
 Copyright (c) 2004 Glenn Randers-Pehrson, and is
 distributed according to the same disclaimer and license as libpng-1.2.5
 with the following individual added to the list of Contributing Authors
@@ -106,4 +106,4 @@
 
 Glenn Randers-Pehrson
 glennrp at users.sourceforge.net
-November 26, 2004
+November 28, 2004
diff --git a/README b/README
index 1c1e4b6..09e790b 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-README for libpng version 1.2.8rc2 - November 26, 2004 (shared library 12.0)
+README for libpng version 1.2.8rc3 - November 28, 2004 (shared library 12.0)
 See the note about version numbers near the top of png.h
 
 See INSTALL for instructions on how to install libpng.
@@ -188,10 +188,12 @@
       scripts       =>  Directory containing scripts for building libpng:
        descrip.mms      =>  VMS makefile for MMS or MMK
        makefile.std     =>  Generic UNIX makefile (cc, creates static libpng.a)
+       makefile.elf     =>  Linux/ELF makefile symbol versioning,
+                            gcc, creates libpng12.so.0.1.2.8rc3)
        makefile.linux   =>  Linux/ELF makefile
-                            (gcc, creates libpng12.so.0.1.2.8rc2)
+                            (gcc, creates libpng12.so.0.1.2.8rc3)
        makefile.gcmmx   =>  Linux/ELF makefile
-                            (gcc, creates libpng12.so.0.1.2.8rc2,
+                            (gcc, creates libpng12.so.0.1.2.8rc3,
                             uses assembler code tuned for Intel MMX platform)
        makefile.gcc     =>  Generic makefile (gcc, creates static libpng.a)
        makefile.knr     =>  Archaic UNIX Makefile that converts files with
@@ -213,12 +215,12 @@
        makefile.openbsd =>  OpenBSD makefile
        makefile.sgi     =>  Silicon Graphics IRIX (cc, creates static lib)
        makefile.sggcc   =>  Silicon Graphics
-                            (gcc, creates libpng12.so.0.1.2.8rc2)
+                            (gcc, creates libpng12.so.0.1.2.8rc3)
        makefile.sunos   =>  Sun makefile
        makefile.solaris =>  Solaris 2.X makefile
-                            (gcc, creates libpng12.so.0.1.2.8rc2)
+                            (gcc, creates libpng12.so.0.1.2.8rc3)
        makefile.so9     =>  Solaris 9 makefile
-                            (gcc, creates libpng12.so.0.1.2.8rc2)
+                            (gcc, creates libpng12.so.0.1.2.8rc3)
        makefile.32sunu  =>  Sun Ultra 32-bit makefile
        makefile.64sunu  =>  Sun Ultra 64-bit makefile
        makefile.sco     =>  For SCO OSr5  ELF and Unixware 7 with Native cc
diff --git a/Y2KINFO b/Y2KINFO
index 7529632..b01253d 100644
--- a/Y2KINFO
+++ b/Y2KINFO
@@ -1,13 +1,13 @@
    Y2K compliance in libpng:
    =========================
 
-      November 26, 2004
+      November 28, 2004
 
       Since the PNG Development group is an ad-hoc body, we can't make
       an official declaration.
 
       This is your unofficial assurance that libpng from version 0.71 and
-      upward through 1.2.8rc2 are Y2K compliant.  It is my belief that earlier
+      upward through 1.2.8rc3 are Y2K compliant.  It is my belief that earlier
       versions were also Y2K compliant.
 
       Libpng only has three year fields.  One is a 2-byte unsigned integer
diff --git a/configure b/configure
index 3037d35..f688936 100755
--- a/configure
+++ b/configure
@@ -1,13 +1,13 @@
 #!/bin/sh
 echo "
   There is no \"configure\" script in this distribution of
-  libpng-1.2.8rc2.
+  libpng-1.2.8rc3.
 
   Instead, please copy the appropriate makefile for your system from the
   \"scripts\" directory.  Read the INSTALL file for more details.
 
   Update, July 2004: you can get a "configure" based distribution
   from the libpng distribution sites.  Download the file
-  libpng-1.2.8rc2-config.tar.gz
+  libpng-1.2.8rc3-config.tar.gz
 "
 
diff --git a/libpng.3 b/libpng.3
index 432000a..05f243d 100644
--- a/libpng.3
+++ b/libpng.3
@@ -1,6 +1,6 @@
-.TH LIBPNG 3 "November 26, 2004"
+.TH LIBPNG 3 "November 28, 2004"
 .SH NAME
-libpng \- Portable Network Graphics (PNG) Reference Library 1.2.8rc2
+libpng \- Portable Network Graphics (PNG) Reference Library 1.2.8rc3
 .SH SYNOPSIS
 \fI\fB
 
@@ -781,7 +781,7 @@
 .SH LIBPNG.TXT
 libpng.txt - A description on how to use and modify libpng
 
- libpng version 1.2.8rc2 - November 26, 2004
+ libpng version 1.2.8rc3 - November 28, 2004
  Updated and distributed by Glenn Randers-Pehrson
  <glennrp at users.sourceforge.net>
  Copyright (c) 1998-2004 Glenn Randers-Pehrson
@@ -3685,13 +3685,13 @@
 
 .SH IX. Y2K Compliance in libpng
 
-November 26, 2004
+November 28, 2004
 
 Since the PNG Development group is an ad-hoc body, we can't make
 an official declaration.
 
 This is your unofficial assurance that libpng from version 0.71 and
-upward through 1.2.8rc2 are Y2K compliant.  It is my belief that earlier
+upward through 1.2.8rc3 are Y2K compliant.  It is my belief that earlier
 versions were also Y2K compliant.
 
 Libpng only has three year fields.  One is a 2-byte unsigned integer that
@@ -3840,8 +3840,8 @@
  1.0.17              10    10017  12.so.0.1.0.17
  1.2.7               13    10207  12.so.0.1.2.7
  1.2.8beta1-5        13    10208  12.so.0.1.2.8beta1-5
- 1.0.18rc1-2         10    10018  12.so.0.1.0.18rc1-2
- 1.2.8rc1-2          13    10208  12.so.0.1.2.8rc1-2
+ 1.0.18rc1-3         10    10018  12.so.0.1.0.18rc1-3
+ 1.2.8rc1-3          13    10208  12.so.0.1.2.8rc1-3
 
 Henceforth the source version will match the shared-library minor
 and patch numbers; the shared-library major version number will be
@@ -3897,7 +3897,7 @@
 
 Thanks to Frank J. T. Wojcik for helping with the documentation.
 
-Libpng version 1.2.8rc2 - November 26, 2004:
+Libpng version 1.2.8rc3 - November 28, 2004:
 Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
 Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
 
@@ -3915,7 +3915,7 @@
 If you modify libpng you may insert additional notices immediately following
 this sentence.
 
-libpng version 1.2.6, November 26, 2004, is
+libpng version 1.2.6, November 28, 2004, is
 Copyright (c) 2004 Glenn Randers-Pehrson, and is
 distributed according to the same disclaimer and license as libpng-1.2.5
 with the following individual added to the list of Contributing Authors
@@ -4014,7 +4014,7 @@
 
 Glenn Randers-Pehrson
 glennrp at users.sourceforge.net
-November 26, 2004
+November 28, 2004
 
 .\" end of man page
 
diff --git a/libpng.txt b/libpng.txt
index 70fe44f..a1be987 100644
--- a/libpng.txt
+++ b/libpng.txt
@@ -1,6 +1,6 @@
 libpng.txt - A description on how to use and modify libpng
 
- libpng version 1.2.8rc2 - November 26, 2004
+ libpng version 1.2.8rc3 - November 28, 2004
  Updated and distributed by Glenn Randers-Pehrson
  <glennrp at users.sourceforge.net>
  Copyright (c) 1998-2004 Glenn Randers-Pehrson
@@ -2904,13 +2904,13 @@
 
 IX. Y2K Compliance in libpng
 
-November 26, 2004
+November 28, 2004
 
 Since the PNG Development group is an ad-hoc body, we can't make
 an official declaration.
 
 This is your unofficial assurance that libpng from version 0.71 and
-upward through 1.2.8rc2 are Y2K compliant.  It is my belief that earlier
+upward through 1.2.8rc3 are Y2K compliant.  It is my belief that earlier
 versions were also Y2K compliant.
 
 Libpng only has three year fields.  One is a 2-byte unsigned integer that
diff --git a/libpngpf.3 b/libpngpf.3
index 401d0d6..234d1ca 100644
--- a/libpngpf.3
+++ b/libpngpf.3
@@ -1,6 +1,6 @@
-.TH LIBPNGPF 3 "November 26, 2004"
+.TH LIBPNGPF 3 "November 28, 2004"
 .SH NAME
-libpng \- Portable Network Graphics (PNG) Reference Library 1.2.8rc2
+libpng \- Portable Network Graphics (PNG) Reference Library 1.2.8rc3
 (private functions)
 .SH SYNOPSIS
 \fB\fB#include <png.h>\fP\fP
diff --git a/png.5 b/png.5
index a9c9efc..e0476db 100644
--- a/png.5
+++ b/png.5
@@ -1,4 +1,4 @@
-.TH PNG 5 "November 26, 2004"
+.TH PNG 5 "November 28, 2004"
 .SH NAME
 png \- Portable Network Graphics (PNG) format
 .SH DESCRIPTION
diff --git a/png.c b/png.c
index 9bc8d7f..4af8424 100644
--- a/png.c
+++ b/png.c
@@ -1,7 +1,7 @@
 
 /* png.c - location for general purpose libpng functions
  *
- * libpng version 1.2.8rc2 - November 26, 2004
+ * libpng version 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@@ -13,7 +13,7 @@
 #include "png.h"
 
 /* Generate a compiler error if there is an old png.h in the search path. */
-typedef version_1_2_8rc2 Your_png_h_is_not_version_1_2_8rc2;
+typedef version_1_2_8rc3 Your_png_h_is_not_version_1_2_8rc3;
 
 /* Version information for C files.  This had better match the version
  * string defined in png.h.  */
@@ -680,7 +680,7 @@
 png_get_copyright(png_structp png_ptr)
 {
    if (&png_ptr != NULL)  /* silence compiler warning about unused png_ptr */
-   return ((png_charp) "\n libpng version 1.2.8rc2 - November 26, 2004\n\
+   return ((png_charp) "\n libpng version 1.2.8rc3 - November 28, 2004\n\
    Copyright (c) 1998-2004 Glenn Randers-Pehrson\n\
    Copyright (c) 1996-1997 Andreas Dilger\n\
    Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.\n");
diff --git a/png.h b/png.h
index 9dfa95d..5c0f58f 100644
--- a/png.h
+++ b/png.h
@@ -1,6 +1,6 @@
 /* png.h - header file for PNG reference library
  *
- * libpng version 1.2.8rc2 - November 26, 2004
+ * libpng version 1.2.8rc3 - November 28, 2004
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
  * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
@@ -8,7 +8,7 @@
  * Authors and maintainers:
  *  libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
  *  libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
- *  libpng versions 0.97, January 1998, through 1.2.8rc2 - November 26, 2004: Glenn
+ *  libpng versions 0.97, January 1998, through 1.2.8rc3 - November 28, 2004: Glenn
  *  See also "Contributing Authors", below.
  *
  * Note about libpng version numbers:
@@ -107,8 +107,8 @@
  *    1.0.17                  10    10017  12.so.0.1.0.17
  *    1.2.7                   13    10207  12.so.0.1.2.7
  *    1.2.8beta1-5            13    10208  12.so.0.1.2.8beta1-5
- *    1.0.18rc1-2             10    10018  12.so.0.1.0.18rc1-2
- *    1.2.8rc1-2              13    10208  12.so.0.1.2.8rc1-2
+ *    1.0.18rc1-3             10    10018  12.so.0.1.0.18rc1-3
+ *    1.2.8rc1-3              13    10208  12.so.0.1.2.8rc1-3
  *
  *    Henceforth the source version will match the shared-library major
  *    and minor numbers; the shared-library major version number will be
@@ -138,7 +138,7 @@
  * If you modify libpng you may insert additional notices immediately following
  * this sentence.
  *
- * libpng versions 1.2.6, August 15, 2004, through 1.2.8rc2, November 26, 2004, are
+ * libpng versions 1.2.6, August 15, 2004, through 1.2.8rc3, November 28, 2004, are
  * Copyright (c) 2004 Glenn Randers-Pehrson, and are
  * distributed according to the same disclaimer and license as libpng-1.2.5
  * with the following individual added to the list of Contributing Authors:
@@ -250,13 +250,13 @@
  * Y2K compliance in libpng:
  * =========================
  *
- *    November 26, 2004
+ *    November 28, 2004
  *
  *    Since the PNG Development group is an ad-hoc body, we can't make
  *    an official declaration.
  *
  *    This is your unofficial assurance that libpng from version 0.71 and
- *    upward through 1.2.8rc2 are Y2K compliant.  It is my belief that earlier
+ *    upward through 1.2.8rc3 are Y2K compliant.  It is my belief that earlier
  *    versions were also Y2K compliant.
  *
  *    Libpng only has three year fields.  One is a 2-byte unsigned integer
@@ -312,9 +312,9 @@
  */
 
 /* Version information for png.h - this should match the version in png.c */
-#define PNG_LIBPNG_VER_STRING "1.2.8rc2"
+#define PNG_LIBPNG_VER_STRING "1.2.8rc3"
 #define PNG_HEADER_VERSION_STRING \
-   " libpng version 1.2.8rc2 - November 26, 2004 (header)\n"
+   " libpng version 1.2.8rc3 - November 28, 2004 (header)\n"
 
 #define PNG_LIBPNG_VER_SONUM   0
 #define PNG_LIBPNG_VER_DLLNUM  13
@@ -326,7 +326,7 @@
 /* This should match the numeric part of the final component of
  * PNG_LIBPNG_VER_STRING, omitting any leading zero: */
 
-#define PNG_LIBPNG_VER_BUILD  2
+#define PNG_LIBPNG_VER_BUILD  3
 
 /* Release Status */
 #define PNG_LIBPNG_BUILD_ALPHA    1
@@ -1354,7 +1354,7 @@
 /* This triggers a compiler error in png.c, if png.c and png.h
  * do not agree upon the version number.
  */
-typedef png_structp version_1_2_8rc2;
+typedef png_structp version_1_2_8rc3;
 
 typedef png_struct FAR * FAR * png_structpp;
 
diff --git a/pngconf.h b/pngconf.h
index 316fab8..afa77fa 100644
--- a/pngconf.h
+++ b/pngconf.h
@@ -1,7 +1,7 @@
 
 /* pngconf.h - machine configurable file for libpng
  *
- * libpng version 1.2.8rc2 - November 26, 2004
+ * libpng version 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@@ -1322,6 +1322,17 @@
 #  define PNG_IMPEXP
 #endif
 
+#ifdef PNG_BUILDSYMS
+#  ifndef PNG_EXPORT
+#    define PNG_EXPORT(type,symbol) PNG_FUNCTION_EXPORT symbol END
+#  endif
+#  ifdef PNG_USE_GLOBAL_ARRAYS
+#    ifndef PNG_EXPORT_VAR
+#      define PNG_EXPORT_VAR(type) PNG_DATA_EXPORT
+#    endif
+#  endif
+#endif
+
 #ifndef PNG_EXPORT
 #  define PNG_EXPORT(type,symbol) PNG_IMPEXP type PNGAPI symbol
 #endif
diff --git a/pngerror.c b/pngerror.c
index a8850c7..2d7fc17 100644
--- a/pngerror.c
+++ b/pngerror.c
@@ -1,7 +1,7 @@
 
 /* pngerror.c - stub functions for i/o and memory allocation
  *
- * libpng version 1.2.8rc2 - November 26, 2004
+ * libpng version 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pnggccrd.c b/pnggccrd.c
index 51ccd85..7eb064e 100644
--- a/pnggccrd.c
+++ b/pnggccrd.c
@@ -6,7 +6,7 @@
  *     and http://www.intel.com/drg/pentiumII/appnotes/923/923.htm
  *     for Intel's performance analysis of the MMX vs. non-MMX code.
  *
- * libpng version 1.2.8rc2 - November 26, 2004
+ * libpng version 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * Copyright (c) 1998, Intel Corporation
diff --git a/pngget.c b/pngget.c
index 853f29e..c0bd58b 100644
--- a/pngget.c
+++ b/pngget.c
@@ -1,7 +1,7 @@
 
 /* pngget.c - retrieval of values from info struct
  *
- * libpng 1.2.8rc2 - November 26, 2004
+ * libpng 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngmem.c b/pngmem.c
index 22a1c21..be834e2 100644
--- a/pngmem.c
+++ b/pngmem.c
@@ -1,7 +1,7 @@
 
 /* pngmem.c - stub functions for memory allocation
  *
- * libpng version 1.2.8rc2 - November 26, 2004
+ * libpng version 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngpread.c b/pngpread.c
index c735e4f..e8a86ab 100644
--- a/pngpread.c
+++ b/pngpread.c
@@ -1,7 +1,7 @@
 
 /* pngpread.c - read a png file in push mode
  *
- * libpng version 1.2.8rc2 - November 26, 2004
+ * libpng version 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngread.c b/pngread.c
index 9ba0bda..29173b3 100644
--- a/pngread.c
+++ b/pngread.c
@@ -1,7 +1,7 @@
 
 /* pngread.c - read a PNG file
  *
- * libpng 1.2.8rc2 - November 26, 2004
+ * libpng 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@@ -806,7 +806,7 @@
  * not called png_set_interlace_handling(), the display_row buffer will
  * be ignored, so pass NULL to it.
  *
- * [*] png_handle_alpha() does not exist yet, as of libpng version 1.2.8rc2
+ * [*] png_handle_alpha() does not exist yet, as of libpng version 1.2.8rc3
  */
 
 void PNGAPI
@@ -856,7 +856,7 @@
  * only call this function once.  If you desire to have an image for
  * each pass of a interlaced image, use png_read_rows() instead.
  *
- * [*] png_handle_alpha() does not exist yet, as of libpng version 1.2.8rc2
+ * [*] png_handle_alpha() does not exist yet, as of libpng version 1.2.8rc3
  */
 void PNGAPI
 png_read_image(png_structp png_ptr, png_bytepp image)
diff --git a/pngrio.c b/pngrio.c
index d8e4d15..d06e57d 100644
--- a/pngrio.c
+++ b/pngrio.c
@@ -1,7 +1,7 @@
 
 /* pngrio.c - functions for data input
  *
- * libpng 1.2.8rc2 - November 26, 2004
+ * libpng 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngrtran.c b/pngrtran.c
index 46474f4..995acb6 100644
--- a/pngrtran.c
+++ b/pngrtran.c
@@ -1,7 +1,7 @@
 
 /* pngrtran.c - transforms the data in a row for PNG readers
  *
- * libpng version  1.2.8rc2 - November 26, 2004
+ * libpng version  1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngrutil.c b/pngrutil.c
index d8c6f76..92e4a94 100644
--- a/pngrutil.c
+++ b/pngrutil.c
@@ -1,6 +1,6 @@
 /* pngrutil.c - utilities to read a PNG file
  *
- * libpng version 1.2.8rc2 - November 26, 2004
+ * libpng version 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@@ -2260,46 +2260,59 @@
    }
    else
    {
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)
-      static const png_byte bitrev[16] =
-         {0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E,
-          0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F};
-      static const png_byte lastbyte_mask_norm[8] =
-         {0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE};
-      static const png_byte lastbyte_mask_swap[8] =
-         {0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F};
-      const png_byte *lastbyte_mask =
-         (png_ptr->transformations & PNG_PACKSWAP) ?
-            lastbyte_mask_swap : lastbyte_mask_norm;
-#else
-      static const png_byte lastbyte_mask[8] =
-         {0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE};
-#endif
       switch (png_ptr->row_info.pixel_depth)
       {
          case 1:
          {
             png_bytep sp = png_ptr->row_buf + 1;
             png_bytep dp = row;
+            int s_inc, s_start, s_end;
+            int m = 0x80;
+            int shift;
             png_uint_32 i;
-            png_byte pixel_mask;
+            png_uint_32 row_width = png_ptr->width;
 
 #if defined(PNG_READ_PACKSWAP_SUPPORTED)
             if (png_ptr->transformations & PNG_PACKSWAP)
-               mask = (bitrev[mask & 0x0F] << 4) | bitrev[(mask >> 4) & 0x0F];
-#endif
-            pixel_mask = (png_byte)mask;
-
-            for (i = png_ptr->width; i >= 8; i -= 8)
             {
-               *dp = (*sp & pixel_mask) | (*dp & ~pixel_mask);
-               sp++;
-               dp++;
+                s_start = 0;
+                s_end = 7;
+                s_inc = 1;
             }
-            if (i > 0)
+            else
+#endif
             {
-               pixel_mask &= lastbyte_mask[i];
-               *dp = (*sp & pixel_mask) | (*dp & ~pixel_mask);
+                s_start = 7;
+                s_end = 0;
+                s_inc = -1;
+            }
+
+            shift = s_start;
+
+            for (i = 0; i < row_width; i++)
+            {
+               if (m & mask)
+               {
+                  int value;
+
+                  value = (*sp >> shift) & 0x01;
+                  *dp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);
+                  *dp |= (png_byte)(value << shift);
+               }
+
+               if (shift == s_end)
+               {
+                  shift = s_start;
+                  sp++;
+                  dp++;
+               }
+               else
+                  shift += s_inc;
+
+               if (m == 1)
+                  m = 0x80;
+               else
+                  m >>= 1;
             }
             break;
          }
@@ -2307,40 +2320,51 @@
          {
             png_bytep sp = png_ptr->row_buf + 1;
             png_bytep dp = row;
-            png_uint_32 i;
-            png_byte pixel_mask[2];
+            int s_start, s_end, s_inc;
             int m = 0x80;
-            int j;
+            int shift;
+            png_uint_32 i;
+            png_uint_32 row_width = png_ptr->width;
+            int value;
 
 #if defined(PNG_READ_PACKSWAP_SUPPORTED)
             if (png_ptr->transformations & PNG_PACKSWAP)
-               mask = bitrev[mask & 0x0F] | (bitrev[(mask >> 4) & 0x0F] << 4);
+            {
+               s_start = 0;
+               s_end = 6;
+               s_inc = 2;
+            }
+            else
 #endif
-            for (j = 0; j < 2; j++)
             {
-               pixel_mask[j] = 0;
-               for (i = 4; i > 0; i--)
+               s_start = 6;
+               s_end = 0;
+               s_inc = -2;
+            }
+
+            shift = s_start;
+
+            for (i = 0; i < row_width; i++)
+            {
+               if (m & mask)
                {
-                  pixel_mask[j] <<= 2;
-                  if (m & mask)
-                     pixel_mask[j] |= 0x03;
-                  m >>= 1;
+                  value = (*sp >> shift) & 0x03;
+                  *dp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
+                  *dp |= (png_byte)(value << shift);
                }
-            }
-            j = 0;
-            for (i = png_ptr->width; i >= 4; i -= 4)
-            {
-               if (pixel_mask[j] != 0)
-                  *dp = (*sp & pixel_mask[j]) | (*dp & ~pixel_mask[j]);
-               sp++;
-               dp++;
-               j ^= 1;
-            }
-            if (i > 0)
-            {
-               pixel_mask[j] &= lastbyte_mask[i * 2];
-               if (pixel_mask[j] != 0)
-                  *dp = (*sp & pixel_mask[j]) | (*dp & ~pixel_mask[j]);
+
+               if (shift == s_end)
+               {
+                  shift = s_start;
+                  sp++;
+                  dp++;
+               }
+               else
+                  shift += s_inc;
+               if (m == 1)
+                  m = 0x80;
+               else
+                  m >>= 1;
             }
             break;
          }
@@ -2348,41 +2372,50 @@
          {
             png_bytep sp = png_ptr->row_buf + 1;
             png_bytep dp = row;
-            png_uint_32 i;
-            png_byte pixel_mask[4];
+            int s_start, s_end, s_inc;
             int m = 0x80;
-            int j;
+            int shift;
+            png_uint_32 i;
+            png_uint_32 row_width = png_ptr->width;
+            int value;
 
 #if defined(PNG_READ_PACKSWAP_SUPPORTED)
             if (png_ptr->transformations & PNG_PACKSWAP)
-               mask = ((mask & 0x55) << 1) | ((mask & 0xAA) >> 1);
+            {
+               s_start = 0;
+               s_end = 4;
+               s_inc = 4;
+            }
+            else
 #endif
-            for (j = 0; j < 4; j++)
             {
-               pixel_mask[j] = 0;
-               for (i = 2; i > 0; i--)
+               s_start = 4;
+               s_end = 0;
+               s_inc = -4;
+            }
+            shift = s_start;
+
+            for (i = 0; i < row_width; i++)
+            {
+               if (m & mask)
                {
-                  pixel_mask[j] <<= 4;
-                  if (m & mask)
-                     pixel_mask[j] |= 0x0F;
-                  m >>= 1;
+                  value = (*sp >> shift) & 0xf;
+                  *dp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
+                  *dp |= (png_byte)(value << shift);
                }
-            }
-            j = 0;
-            for (i = png_ptr->width; i >= 2; i -= 2)
-            {
-               if (pixel_mask[j] != 0)
-                  *dp = (*sp & pixel_mask[j]) | (*dp & ~pixel_mask[j]);
-               sp++;
-               dp++;
-               j += 1;
-               j &= 3;
-            }
-            if (i > 0)
-            {
-               pixel_mask[j] &= lastbyte_mask[4];
-               if (pixel_mask[j] != 0)
-                  *dp = (*sp & pixel_mask[j]) | (*dp & ~pixel_mask[j]);
+
+               if (shift == s_end)
+               {
+                  shift = s_start;
+                  sp++;
+                  dp++;
+               }
+               else
+                  shift += s_inc;
+               if (m == 1)
+                  m = 0x80;
+               else
+                  m >>= 1;
             }
             break;
          }
@@ -2392,123 +2425,24 @@
             png_bytep dp = row;
             png_size_t pixel_bytes = (png_ptr->row_info.pixel_depth >> 3);
             png_uint_32 i;
-            int m = 0x80;
+            png_uint_32 row_width = png_ptr->width;
+            png_byte m = 0x80;
 
-            switch (pixel_bytes)
+
+            for (i = 0; i < row_width; i++)
             {
-               case 1:
-                  for (i = png_ptr->width; i > 0; i--)
-                  {
-                     if (m & mask)
-                     {
-                        *(dp + 0) = *(sp + 0);
-                     }
-                     sp += 1;
-                     dp += 1;
-                     if ((m >>= 1) == 0)
-                        m = 0x80;
-                  }
-                  break;
-               case 2:
-                  for (i = png_ptr->width; i > 0; i--)
-                  {
-                     if (m & mask)
-                     {
-                        *(dp + 0) = *(sp + 0);
-                        *(dp + 1) = *(sp + 1);
-                     }
-                     sp += 2;
-                     dp += 2;
-                     if ((m >>= 1) == 0)
-                        m = 0x80;
-                  }
-                  break;
-               case 3:
-                  for (i = png_ptr->width; i > 0; i--)
-                  {
-                     if (m & mask)
-                     {
-                        *(dp + 0) = *(sp + 0);
-                        *(dp + 1) = *(sp + 1);
-                        *(dp + 2) = *(sp + 2);
-                     }
-                     sp += 3;
-                     dp += 3;
-                     if ((m >>= 1) == 0)
-                        m = 0x80;
-                  }
-                  break;
-               case 4:
-                  for (i = png_ptr->width; i > 0; i--)
-                  {
-                     if (m & mask)
-                     {
-                        *(dp + 0) = *(sp + 0);
-                        *(dp + 1) = *(sp + 1);
-                        *(dp + 2) = *(sp + 2);
-                        *(dp + 3) = *(sp + 3);
-                     }
-                     sp += 4;
-                     dp += 4;
-                     if ((m >>= 1) == 0)
-                        m = 0x80;
-                  }
-                  break;
-               case 6:
-                  for (i = png_ptr->width; i > 0; i--)
-                  {
-                     if (m & mask)
-                     {
-                        *(dp + 0) = *(sp + 0);
-                        *(dp + 1) = *(sp + 1);
-                        *(dp + 2) = *(sp + 2);
-                        *(dp + 3) = *(sp + 3);
-                        *(dp + 4) = *(sp + 4);
-                        *(dp + 5) = *(sp + 5);
-                     }
-                     sp += 6;
-                     dp += 6;
-                     if ((m >>= 1) == 0)
-                        m = 0x80;
-                  }
-                  break;
-               case 8:
-                  for (i = png_ptr->width; i > 0; i--)
-                  {
-                     if (m & mask)
-                     {
-                        *(dp + 0) = *(sp + 0);
-                        *(dp + 1) = *(sp + 1);
-                        *(dp + 2) = *(sp + 2);
-                        *(dp + 3) = *(sp + 3);
-                        *(dp + 4) = *(sp + 4);
-                        *(dp + 5) = *(sp + 5);
-                        *(dp + 6) = *(sp + 6);
-                        *(dp + 7) = *(sp + 7);
-                     }
-                     sp += 8;
-                     dp += 8;
-                     if ((m >>= 1) == 0)
-                        m = 0x80;
-                  }
-                  break;
-               default:
-                /*for (i = png_ptr->width; i > 0; i--)
-                 *{
-                 *   if (m & mask)
-                 *   {
-                 *      png_size_t j;
-                 *      for (j = 0; j < pixel_bytes; j++)
-                 *      {
-                 *         *(dp + j) = *(sp + j);
-                 *      }
-                 *   }
-                 *   sp += pixel_bytes;
-                 *   dp += pixel_bytes;
-                 *   if ((m >>= 1) == 0)
-                 *      m = 0x80;
-                 *}
-                */break;
+               if (m & mask)
+               {
+                  png_memcpy(dp, sp, pixel_bytes);
+               }
+
+               sp += pixel_bytes;
+               dp += pixel_bytes;
+
+               if (m == 1)
+                  m = 0x80;
+               else
+                  m >>= 1;
             }
             break;
          }
@@ -2537,101 +2471,122 @@
 #endif
 
    png_debug(1,"in png_do_read_interlace (stock C version)\n");
-   if (row != NULL && row_info != NULL &&
-       pass < 6)
+   if (row != NULL && row_info != NULL)
    {
-      png_uint_32 final_width = row_info->width * png_pass_inc[pass];
+      png_uint_32 final_width;
+
+      final_width = row_info->width * png_pass_inc[pass];
 
       switch (row_info->pixel_depth)
       {
          case 1:
          {
-            static const png_byte pixeltable1[24] =
-               {0x00, 0x00, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0xFF,
-                0x00, 0x03, 0x0C, 0x0F, 0x30, 0x33, 0x3C, 0x3F,
-                0xC0, 0xC3, 0xCC, 0xCF, 0xF0, 0xF3, 0xFC, 0xFF};
             png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 3);
             png_bytep dp = row + (png_size_t)((final_width - 1) >> 3);
-            int nbits = 8 / png_pass_inc[pass];
-            int sshift = 7 - (int)((row_info->width + 7) & 0x07);
-            int s_inc = nbits;
-            png_byte smask = (1 << nbits) - 1;
-            const png_byte *pix = pixeltable1 + (2 * nbits);
+            int sshift, dshift;
+            int s_start, s_end, s_inc;
+            int jstop = png_pass_inc[pass];
+            png_byte v;
             png_uint_32 i;
+            int j;
 
 #if defined(PNG_READ_PACKSWAP_SUPPORTED)
             if (transformations & PNG_PACKSWAP)
             {
-                sshift = 7 - sshift;
-                s_inc = -s_inc;
+                sshift = (int)((row_info->width + 7) & 0x07);
+                dshift = (int)((final_width + 7) & 0x07);
+                s_start = 7;
+                s_end = 0;
+                s_inc = -1;
             }
+            else
 #endif
-            sshift &= (0x10 - nbits);
-
-            for (i = (row_info->width + nbits - 1) / nbits;
-                 i > 0; i--)
             {
-               *dp-- = pix[(*sp >> sshift) & smask];
+                sshift = 7 - (int)((row_info->width + 7) & 0x07);
+                dshift = 7 - (int)((final_width + 7) & 0x07);
+                s_start = 0;
+                s_end = 7;
+                s_inc = 1;
+            }
 
-               sshift += s_inc;
-               if (sshift >= 8)
+            for (i = 0; i < row_info->width; i++)
+            {
+               v = (png_byte)((*sp >> sshift) & 0x01);
+               for (j = 0; j < jstop; j++)
                {
-                  sshift -= 8;
+                  *dp &= (png_byte)((0x7f7f >> (7 - dshift)) & 0xff);
+                  *dp |= (png_byte)(v << dshift);
+                  if (dshift == s_end)
+                  {
+                     dshift = s_start;
+                     dp--;
+                  }
+                  else
+                     dshift += s_inc;
+               }
+               if (sshift == s_end)
+               {
+                  sshift = s_start;
                   sp--;
                }
-               else if (sshift < 0)
-               {
-                  sshift += 8;
-                  sp--;
-               }
+               else
+                  sshift += s_inc;
             }
             break;
          }
          case 2:
          {
-            static const png_byte pixeltable2[20] =
-               {0x00, 0x55, 0xAA, 0xFF,
-                0x00, 0x05, 0x0A, 0x0F, 0x50, 0x55, 0x5A, 0x5F,
-                0xA0, 0xA5, 0xAA, 0xAF, 0xF0, 0xF5, 0xFA, 0xFF};
-            png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 2);
-            png_bytep dp = row + (png_size_t)((final_width - 1) >> 2);
-            int is2 = (png_pass_inc[pass] == 2);
-            int is8 = (png_pass_inc[pass] == 8);
-            int sshift = (int)((3 - ((row_info->width + 3) & 0x03)) << 1);
-            int s_inc = 2 << is2;
-            png_byte smask = (4 << (2 * is2)) - 1;
-            const png_byte *pix = pixeltable2 + (4 * is2);
+            png_bytep sp = row + (png_uint_32)((row_info->width - 1) >> 2);
+            png_bytep dp = row + (png_uint_32)((final_width - 1) >> 2);
+            int sshift, dshift;
+            int s_start, s_end, s_inc;
+            int jstop = png_pass_inc[pass];
             png_uint_32 i;
-            png_byte v;
 
 #if defined(PNG_READ_PACKSWAP_SUPPORTED)
             if (transformations & PNG_PACKSWAP)
             {
-               sshift = 6 - sshift;
-               s_inc = -s_inc;
+               sshift = (int)(((row_info->width + 3) & 0x03) << 1);
+               dshift = (int)(((final_width + 3) & 0x03) << 1);
+               s_start = 6;
+               s_end = 0;
+               s_inc = -2;
             }
+            else
 #endif
-            sshift &= (0x0E - (2 * is2));
-
-            for (i = (row_info->width + is2) >> is2;
-                 i > 0; i--)
             {
-               v = pix[(*sp >> sshift) & smask];
-               *dp-- = v;
-               if (is8)
-                  *dp-- = v;
+               sshift = (int)((3 - ((row_info->width + 3) & 0x03)) << 1);
+               dshift = (int)((3 - ((final_width + 3) & 0x03)) << 1);
+               s_start = 0;
+               s_end = 6;
+               s_inc = 2;
+            }
 
-               sshift += s_inc;
-               if (sshift >= 8)
+            for (i = 0; i < row_info->width; i++)
+            {
+               png_byte v;
+               int j;
+
+               v = (png_byte)((*sp >> sshift) & 0x03);
+               for (j = 0; j < jstop; j++)
                {
-                  sshift -= 8;
+                  *dp &= (png_byte)((0x3f3f >> (6 - dshift)) & 0xff);
+                  *dp |= (png_byte)(v << dshift);
+                  if (dshift == s_end)
+                  {
+                     dshift = s_start;
+                     dp--;
+                  }
+                  else
+                     dshift += s_inc;
+               }
+               if (sshift == s_end)
+               {
+                  sshift = s_start;
                   sp--;
                }
-               else if (sshift < 0)
-               {
-                  sshift += 8;
-                  sp--;
-               }
+               else
+                  sshift += s_inc;
             }
             break;
          }
@@ -2639,39 +2594,54 @@
          {
             png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 1);
             png_bytep dp = row + (png_size_t)((final_width - 1) >> 1);
-            int jinit = png_pass_inc[pass] >> 1;
-            int sshift = (int)((1 - ((row_info->width + 1) & 0x01)) << 2);
-            int s_inc = 4;
+            int sshift, dshift;
+            int s_start, s_end, s_inc;
             png_uint_32 i;
-            png_byte v;
-            int j;
+            int jstop = png_pass_inc[pass];
 
 #if defined(PNG_READ_PACKSWAP_SUPPORTED)
             if (transformations & PNG_PACKSWAP)
             {
-               sshift = 4 - sshift;
-               s_inc = -s_inc;
+               sshift = (int)(((row_info->width + 1) & 0x01) << 2);
+               dshift = (int)(((final_width + 1) & 0x01) << 2);
+               s_start = 4;
+               s_end = 0;
+               s_inc = -4;
             }
+            else
 #endif
-            for (i = row_info->width; i > 0; i--)
             {
-               v = (*sp >> sshift) & 0x0F;
-               v |= v << 4;
+               sshift = (int)((1 - ((row_info->width + 1) & 0x01)) << 2);
+               dshift = (int)((1 - ((final_width + 1) & 0x01)) << 2);
+               s_start = 0;
+               s_end = 4;
+               s_inc = 4;
+            }
 
-               for (j = jinit; j > 0; j--)
-                  *dp-- = v;
+            for (i = 0; i < row_info->width; i++)
+            {
+               png_byte v = (png_byte)((*sp >> sshift) & 0xf);
+               int j;
 
-               sshift += s_inc;
-               if (sshift >= 8)
+               for (j = 0; j < jstop; j++)
                {
-                  sshift -= 8;
+                  *dp &= (png_byte)((0xf0f >> (4 - dshift)) & 0xff);
+                  *dp |= (png_byte)(v << dshift);
+                  if (dshift == s_end)
+                  {
+                     dshift = s_start;
+                     dp--;
+                  }
+                  else
+                     dshift += s_inc;
+               }
+               if (sshift == s_end)
+               {
+                  sshift = s_start;
                   sp--;
                }
-               else if (sshift < 0)
-               {
-                  sshift += 8;
-                  sp--;
-               }
+               else
+                  sshift += s_inc;
             }
             break;
          }
@@ -2679,112 +2649,23 @@
          {
             png_size_t pixel_bytes = (row_info->pixel_depth >> 3);
             png_bytep sp = row + (png_size_t)(row_info->width - 1) * pixel_bytes;
-            png_bytep dp = row + (png_size_t)(final_width - 2) * pixel_bytes;
-            int jinit = png_pass_inc[pass] >> 1;
-            png_uint_32 i;
-            int j;
+            png_bytep dp = row + (png_size_t)(final_width - 1) * pixel_bytes;
 
-            switch (pixel_bytes)
+            int jstop = png_pass_inc[pass];
+            png_uint_32 i;
+
+            for (i = 0; i < row_info->width; i++)
             {
-               case 1:
-                  for (i = row_info->width; i > 0; i--)
-                  {
-                     for (j = jinit; j > 0; j--)
-                     {
-                        *(dp + 0) = *(dp + 1) = *(sp + 0);
-                        dp -= 2;
-                     }
-                     sp -= 1;
-                  }
-                  break;
-               case 2:
-                  for (i = row_info->width; i > 0; i--)
-                  {
-                     for (j = jinit; j > 0; j--)
-                     {
-                        *(dp + 0) = *(dp + 2) = *(sp + 0);
-                        *(dp + 1) = *(dp + 3) = *(sp + 1);
-                        dp -= 4;
-                     }
-                     sp -= 2;
-                  }
-                  break;
-               case 3:
-                  for (i = row_info->width; i > 0; i--)
-                  {
-                     for (j = jinit; j > 0; j--)
-                     {
-                        *(dp + 0) = *(dp + 3) = *(sp + 0);
-                        *(dp + 1) = *(dp + 4) = *(sp + 1);
-                        *(dp + 2) = *(dp + 5) = *(sp + 2);
-                        dp -= 6;
-                     }
-                     sp -= 3;
-                  }
-                  break;
-               case 4:
-                  for (i = row_info->width; i > 0; i--)
-                  {
-                     for (j = jinit; j > 0; j--)
-                     {
-                        *(dp + 0) = *(dp + 4) = *(sp + 0);
-                        *(dp + 1) = *(dp + 5) = *(sp + 1);
-                        *(dp + 2) = *(dp + 6) = *(sp + 2);
-                        *(dp + 3) = *(dp + 7) = *(sp + 3);
-                        dp -= 8;
-                     }
-                     sp -= 4;
-                  }
-                  break;
-               case 6:
-                  for (i = row_info->width; i > 0; i--)
-                  {
-                     for (j = jinit; j > 0; j--)
-                     {
-                        *(dp + 0) = *(dp +  6) = *(sp + 0);
-                        *(dp + 1) = *(dp +  7) = *(sp + 1);
-                        *(dp + 2) = *(dp +  8) = *(sp + 2);
-                        *(dp + 3) = *(dp +  9) = *(sp + 3);
-                        *(dp + 4) = *(dp + 10) = *(sp + 4);
-                        *(dp + 5) = *(dp + 11) = *(sp + 5);
-                        dp -= 12;
-                     }
-                     sp -= 6;
-                  }
-                  break;
-               case 8:
-                  for (i = row_info->width; i > 0; i--)
-                  {
-                     for (j = jinit; j > 0; j--)
-                     {
-                        *(dp + 0) = *(dp +  8) = *(sp + 0);
-                        *(dp + 1) = *(dp +  9) = *(sp + 1);
-                        *(dp + 2) = *(dp + 10) = *(sp + 2);
-                        *(dp + 3) = *(dp + 11) = *(sp + 3);
-                        *(dp + 4) = *(dp + 12) = *(sp + 4);
-                        *(dp + 5) = *(dp + 13) = *(sp + 5);
-                        *(dp + 6) = *(dp + 14) = *(sp + 6);
-                        *(dp + 7) = *(dp + 15) = *(sp + 7);
-                        dp -= 16;
-                     }
-                     sp -= 8;
-                  }
-                  break;
-               default:
-                /*for (i = row_info->width; i > 0; i--)
-                 *{
-                 *   for (j = jinit; j > 0; j--)
-                 *   {
-                 *      png_size_t k;
-                 *      for (k = 0; k < pixel_bytes; k++)
-                 *      {
-                 *         *(dp + pixel_bytes + k) = *(dp + k) = *(sp + k);
-                 *      }
-                 *      dp -= (2 * pixel_bytes);
-                 *   }
-                 *   sp -= pixel_bytes;
-                 *}
-                */break;
+               png_byte v[8];
+               int j;
+
+               png_memcpy(v, sp, pixel_bytes);
+               for (j = 0; j < jstop; j++)
+               {
+                  png_memcpy(dp, v, pixel_bytes);
+                  dp -= pixel_bytes;
+               }
+               sp -= pixel_bytes;
             }
             break;
          }
diff --git a/pngset.c b/pngset.c
index c5781f3..bf94d06 100644
--- a/pngset.c
+++ b/pngset.c
@@ -1,7 +1,7 @@
 
 /* pngset.c - storage of image information into info struct
  *
- * libpng 1.2.8rc2 - November 26, 2004
+ * libpng 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngtest.c b/pngtest.c
index dff7f0c..c967887 100644
--- a/pngtest.c
+++ b/pngtest.c
@@ -1,7 +1,7 @@
 
 /* pngtest.c - a simple test program to test libpng
  *
- * libpng 1.2.8rc2 - November 26, 2004
+ * libpng 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@@ -1551,4 +1551,4 @@
 }
 
 /* Generate a compiler error if there is an old png.h in the search path. */
-typedef version_1_2_8rc2 your_png_h_is_not_version_1_2_8rc2;
+typedef version_1_2_8rc3 your_png_h_is_not_version_1_2_8rc3;
diff --git a/pngtrans.c b/pngtrans.c
index b2c58c7..936a46d 100644
--- a/pngtrans.c
+++ b/pngtrans.c
@@ -1,7 +1,7 @@
 
 /* pngtrans.c - transforms the data in a row (used by both readers and writers)
  *
- * libpng  1.2.8rc2 - November 26, 2004
+ * libpng  1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngvcrd.c b/pngvcrd.c
index 95c860e..253019e 100644
--- a/pngvcrd.c
+++ b/pngvcrd.c
@@ -2,7 +2,7 @@
  *
  * For Intel x86 CPU and Microsoft Visual C++ compiler
  *
- * libpng version 1.2.8rc2 - November 26, 2004
+ * libpng version 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * Copyright (c) 1998, Intel Corporation
diff --git a/pngwio.c b/pngwio.c
index 155888e..f663513 100644
--- a/pngwio.c
+++ b/pngwio.c
@@ -1,7 +1,7 @@
 
 /* pngwio.c - functions for data output
  *
- * libpng 1.2.8rc2 - November 26, 2004
+ * libpng 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngwrite.c b/pngwrite.c
index a01e768..a2eae2a 100644
--- a/pngwrite.c
+++ b/pngwrite.c
@@ -1,7 +1,7 @@
 
 /* pngwrite.c - general routines to write a PNG file
  *
- * libpng 1.2.8rc2 - November 26, 2004
+ * libpng 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngwtran.c b/pngwtran.c
index a0602f5..38ec94d 100644
--- a/pngwtran.c
+++ b/pngwtran.c
@@ -1,7 +1,7 @@
 
 /* pngwtran.c - transforms the data in a row for PNG writers
  *
- * libpng version 1.2.8rc2 - November 26, 2004
+ * libpng version 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/pngwutil.c b/pngwutil.c
index 351ab51..a35484d 100644
--- a/pngwutil.c
+++ b/pngwutil.c
@@ -1,7 +1,7 @@
 
 /* pngwutil.c - utilities to write a PNG file
  *
- * libpng version 1.2.8rc2 - November 26, 2004
+ * libpng version 1.2.8rc3 - November 28, 2004
  * For conditions of distribution and use, see copyright notice in png.h
  * Copyright (c) 1998-2004 Glenn Randers-Pehrson
  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
diff --git a/scripts/libpng-config-head.in b/scripts/libpng-config-head.in
index 3205b07..9c0502f 100755
--- a/scripts/libpng-config-head.in
+++ b/scripts/libpng-config-head.in
@@ -8,7 +8,7 @@
 
 # Modeled after libxml-config.
 
-version=1.2.8rc2
+version=1.2.8rc3
 prefix=""
 libdir=""
 libs=""
diff --git a/scripts/libpng.pc.in b/scripts/libpng.pc.in
index 9381a38..f929021 100644
--- a/scripts/libpng.pc.in
+++ b/scripts/libpng.pc.in
@@ -6,6 +6,6 @@
 
 Name: libpng12
 Description: Loads and saves PNG files
-Version: 1.2.8rc2
+Version: 1.2.8rc3
 Libs: -L${libdir} -lpng12 -lz -lm
 Cflags: -I${includedir}/libpng12
diff --git a/scripts/makefile.32sunu b/scripts/makefile.32sunu
index 4256cb4..f505f16 100644
--- a/scripts/makefile.32sunu
+++ b/scripts/makefile.32sunu
@@ -33,7 +33,7 @@
 
 LIBNAME=libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 INCPATH=$(prefix)/include
diff --git a/scripts/makefile.64sunu b/scripts/makefile.64sunu
index 6933cbb..da84a3b 100644
--- a/scripts/makefile.64sunu
+++ b/scripts/makefile.64sunu
@@ -33,7 +33,7 @@
 
 LIBNAME=libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 INCPATH=$(prefix)/include
diff --git a/scripts/makefile.aix b/scripts/makefile.aix
index 57365db..f38a2b4 100644
--- a/scripts/makefile.aix
+++ b/scripts/makefile.aix
@@ -18,7 +18,7 @@
 
 LIBNAME=libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 prefix=/usr/local
diff --git a/scripts/makefile.beos b/scripts/makefile.beos
index efa1f16..89f6c27 100644
--- a/scripts/makefile.beos
+++ b/scripts/makefile.beos
@@ -12,7 +12,7 @@
 ZLIBINC=/usr/local/include
 
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 ALIGN=
diff --git a/scripts/makefile.cygwin b/scripts/makefile.cygwin
index 83b6bf4..f5bb4e7 100644
--- a/scripts/makefile.cygwin
+++ b/scripts/makefile.cygwin
@@ -79,7 +79,7 @@
 LIBNAME = libpng12
 PNGMAJ = 0
 CYGDLL = 12
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 SHAREDLIB=cygpng$(CYGDLL).dll
diff --git a/scripts/makefile.darwin b/scripts/makefile.darwin
index b0b3a2a..5d11d0c 100644
--- a/scripts/makefile.darwin
+++ b/scripts/makefile.darwin
@@ -23,7 +23,7 @@
 RANLIB=ranlib
 
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.dec b/scripts/makefile.dec
index 31958ac..34ff3ef 100644
--- a/scripts/makefile.dec
+++ b/scripts/makefile.dec
@@ -32,7 +32,7 @@
 ZLIBINC=../zlib
 
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.elf b/scripts/makefile.elf
new file mode 100644
index 0000000..c2df435
--- /dev/null
+++ b/scripts/makefile.elf
@@ -0,0 +1,249 @@
+# makefile for libpng.a and libpng12.so on Linux ELF with gcc
+# Copyright (C) 1998, 1999, 2002 Greg Roelofs and Glenn Randers-Pehrson
+# Copyright (C) 1996, 1997 Andreas Dilger
+# For conditions of distribution and use, see copyright notice in png.h
+
+LIBNAME = libpng12
+PNGMAJ = 0
+PNGMIN = 1.2.8rc3
+PNGVER = $(PNGMAJ).$(PNGMIN)
+
+CC=gcc
+
+# where "make install" puts libpng12.a, libpng12.so*,
+# libpng12/png.h and libpng12/pngconf.h
+# Prefix must be a full pathname.
+prefix=/usr/local
+
+# Where the zlib library and include files are located.
+#ZLIBLIB=/usr/local/lib
+#ZLIBINC=/usr/local/include
+ZLIBLIB=../zlib
+ZLIBINC=../zlib
+
+ALIGN=
+# for i386:
+#ALIGN=-malign-loops=2 -malign-functions=2
+
+WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
+	-Wmissing-declarations -Wtraditional -Wcast-align \
+	-Wstrict-prototypes -Wmissing-prototypes #-Wconversion
+
+# for pgcc version 2.95.1, -O3 is buggy; don't use it.
+
+CFLAGS=-I$(ZLIBINC) -Wall -O3 -funroll-loops \
+	$(ALIGN) # $(WARNMORE) -g -DPNG_DEBUG=5
+
+LDFLAGS=-L. -Wl,-rpath,. -L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) -lpng12 -lz -lm
+LDFLAGS_A=-L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) libpng.a -lz -lm
+
+RANLIB=ranlib
+#RANLIB=echo
+
+INCPATH=$(prefix)/include
+LIBPATH=$(prefix)/lib
+MANPATH=$(prefix)/man
+BINPATH=$(prefix)/bin
+
+# override DESTDIR= on the make install command line to easily support
+# installing into a temporary location.  Example:
+#
+#    make install DESTDIR=/tmp/build/libpng
+#
+# If you're going to install into a temporary location
+# via DESTDIR, $(DESTDIR)$(prefix) must already exist before
+# you execute make install.
+DESTDIR=
+
+DB=$(DESTDIR)$(BINPATH)
+DI=$(DESTDIR)$(INCPATH)
+DL=$(DESTDIR)$(LIBPATH)
+DM=$(DESTDIR)$(MANPATH)
+
+OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
+	pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
+	pngwtran.o pngmem.o pngerror.o pngpread.o
+
+OBJSDLL = $(OBJS:.o=.pic.o)
+
+.SUFFIXES:      .c .o .pic.o
+
+.c.pic.o:
+	$(CC) -c $(CFLAGS) -fPIC -o $@ $*.c
+
+all: libpng.a $(LIBNAME).so pngtest pngtest-static libpng.pc libpng-config
+
+libpng.a: $(OBJS)
+	ar rc $@ $(OBJS)
+	$(RANLIB) $@
+
+libpng.pc:
+	cat scripts/libpng.pc.in | sed -e s\!@PREFIX@!$(prefix)! > libpng.pc
+
+libpng.syms: png.h pngconf.h
+	$(CC) $(CFLAGS) -E -DPNG_BUILDSYMS png.h |\
+	awk -F '[\t [\]();]' 'BEGIN{print "{global:"}\
+	{ for (i=1;i+2<=NF;++i)\
+		if ($$(i)=="PNG_FUNCTION_EXPORT" && $$(i+2)=="END")\
+			print $$(i+1) ";";\
+	for (i=1;i+1<=NF;++i)\
+		if ($$(i)=="PNG_DATA_EXPORT")\
+			print $$(i+1) ";";}\
+	END{print "local: *; };"}' >$@.new
+	rm -f $@
+	mv $@.new $@
+
+libpng-config:
+	( cat scripts/libpng-config-head.in; \
+	echo prefix=\"$(prefix)\"; \
+	echo I_opts=\"-I$(INCPATH)/$(LIBNAME)\"; \
+	echo L_opts=\"-L$(LIBPATH)\"; \
+	echo R_opts=\"-Wl,-rpath,$(LIBPATH)\"; \
+	echo libs=\"-lpng12 -lz -lm\"; \
+	cat scripts/libpng-config-body.in ) > libpng-config
+	chmod +x libpng-config
+
+$(LIBNAME).so: $(LIBNAME).so.$(PNGMAJ)
+	ln -sf $(LIBNAME).so.$(PNGMAJ) $(LIBNAME).so
+
+$(LIBNAME).so.$(PNGMAJ): $(LIBNAME).so.$(PNGVER)
+	ln -sf $(LIBNAME).so.$(PNGVER) $(LIBNAME).so.$(PNGMAJ)
+
+$(LIBNAME).so.$(PNGVER): $(OBJSDLL) libpng.syms
+	$(CC) -shared -Wl,-soname,$(LIBNAME).so.$(PNGMAJ) \
+	-Wl,-version-script,libpng.syms \
+	-o $(LIBNAME).so.$(PNGVER) \
+	$(OBJSDLL)
+
+libpng.so.3.$(PNGMIN): $(OBJSDLL) libpng.syms
+	$(CC) -shared -Wl,-soname,libpng.so.3 \
+	-Wl,-version-script,libpng.syms \
+	-o libpng.so.3.$(PNGMIN) \
+	$(OBJSDLL)
+
+pngtest: pngtest.o $(LIBNAME).so
+	$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
+
+pngtest-static: pngtest.o libpng.a
+	$(CC) -o pngtest-static $(CFLAGS) pngtest.o $(LDFLAGS_A)
+
+test: pngtest pngtest-static
+	@echo ""
+	@echo "   Running pngtest dynamically linked with $(LIBNAME).so:"
+	@echo ""
+	./pngtest
+	@echo ""
+	@echo "   Running pngtest statically linked with libpng.a:"
+	@echo ""
+	./pngtest-static
+
+install-headers: png.h pngconf.h
+	-@if [ ! -d $(DI) ]; then mkdir $(DI); fi
+	-@if [ ! -d $(DI)/$(LIBNAME) ]; then mkdir $(DI)/$(LIBNAME); fi
+	cp png.h pngconf.h $(DI)/$(LIBNAME)
+	chmod 644 $(DI)/$(LIBNAME)/png.h $(DI)/$(LIBNAME)/pngconf.h
+	-@/bin/rm -f $(DI)/png.h $(DI)/pngconf.h
+	-@/bin/rm -f $(DI)/libpng
+	(cd $(DI); ln -sf $(LIBNAME) libpng; ln -sf $(LIBNAME)/* .)
+
+install-static: install-headers libpng.a
+	-@if [ ! -d $(DL) ]; then mkdir $(DL); fi
+	cp libpng.a $(DL)/$(LIBNAME).a
+	chmod 644 $(DL)/$(LIBNAME).a
+	-@/bin/rm -f $(DL)/libpng.a
+	(cd $(DL); ln -sf $(LIBNAME).a libpng.a)
+
+install-shared: install-headers $(LIBNAME).so.$(PNGVER) libpng.pc \
+	libpng.so.3.$(PNGMIN)
+	-@if [ ! -d $(DL) ]; then mkdir $(DL); fi
+	-@/bin/rm -f $(DL)/$(LIBNAME).so.$(PNGVER)* $(DL)/$(LIBNAME).so
+	-@/bin/rm -f $(DL)/$(LIBNAME).so.$(PNGMAJ)
+	-@/bin/rm -f $(DL)/libpng.so
+	-@/bin/rm -f $(DL)/libpng.so.3
+	-@/bin/rm -f $(DL)/libpng.so.3.$(PNGMIN)*
+	cp $(LIBNAME).so.$(PNGVER) $(DL)
+	cp libpng.so.3.$(PNGMIN) $(DL)
+	chmod 755 $(DL)/$(LIBNAME).so.$(PNGVER)
+	chmod 755 $(DL)/libpng.so.3.$(PNGMIN)
+	(cd $(DL); \
+	ln -sf libpng.so.3.$(PNGMIN) libpng.so.3; \
+	ln -sf libpng.so.3 libpng.so; \
+	ln -sf $(LIBNAME).so.$(PNGVER) $(LIBNAME).so.$(PNGMAJ); \
+	ln -sf $(LIBNAME).so.$(PNGMAJ) $(LIBNAME).so)
+	-@if [ ! -d $(DL)/pkgconfig ]; then mkdir $(DL)/pkgconfig; fi
+	-@/bin/rm -f $(DL)/pkgconfig/$(LIBNAME).pc
+	-@/bin/rm -f $(DL)/pkgconfig/libpng.pc
+	cp libpng.pc $(DL)/pkgconfig/$(LIBNAME).pc
+	chmod 644 $(DL)/pkgconfig/$(LIBNAME).pc
+	(cd $(DL)/pkgconfig; ln -sf $(LIBNAME).pc libpng.pc)
+
+install-man: libpng.3 libpngpf.3 png.5
+	-@if [ ! -d $(DM) ]; then mkdir $(DM); fi
+	-@if [ ! -d $(DM)/man3 ]; then mkdir $(DM)/man3; fi
+	-@/bin/rm -f $(DM)/man3/libpng.3
+	-@/bin/rm -f $(DM)/man3/libpngpf.3
+	cp libpng.3 $(DM)/man3
+	cp libpngpf.3 $(DM)/man3
+	-@if [ ! -d $(DM)/man5 ]; then mkdir $(DM)/man5; fi
+	-@/bin/rm -f $(DM)/man5/png.5
+	cp png.5 $(DM)/man5
+
+install-config: libpng-config
+	-@if [ ! -d $(DB) ]; then mkdir $(DB); fi
+	-@/bin/rm -f $(DB)/libpng-config
+	-@/bin/rm -f $(DB)/$(LIBNAME)-config
+	cp libpng-config $(DB)/$(LIBNAME)-config
+	chmod 755 $(DB)/$(LIBNAME)-config
+	(cd $(DB); ln -sf $(LIBNAME)-config libpng-config)
+
+install: install-static install-shared install-man install-config
+
+# If you installed in $(DESTDIR), test-installed won't work until you
+# move the library to its final location.  Use test-dd to test it
+# before then.
+
+test-dd:
+	echo
+	echo Testing installed dynamic shared library in $(DL).
+	$(CC) -I$(DI) -I$(ZLIBINC) \
+	   `$(BINPATH)/libpng12-config --cflags` pngtest.c \
+	   -L$(DL) -L$(ZLIBLIB) -W1, -rpath,$(DL) -Wl,-rpath,$(ZLIBLIB) \
+	   -o pngtestd `$(BINPATH)/libpng12-config --ldflags`
+	./pngtestd pngtest.png
+
+test-installed:
+	$(CC) -I$(ZLIBINC) \
+	   `$(BINPATH)/libpng12-config --cflags` pngtest.c \
+	   -L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) \
+	   -o pngtesti `$(BINPATH)/libpng12-config --ldflags`
+	./pngtesti pngtest.png
+
+clean:
+	/bin/rm -f *.o libpng.a libpng.syms pngtest pngout.png libpng-config \
+	$(LIBNAME).so $(LIBNAME).so.$(PNGMAJ)* pngtest-static pngtesti \
+	libpng.so.3.$(PNGMIN) \
+	libpng.pc
+
+DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+writelock:
+	chmod a-w *.[ch35] $(DOCS) scripts/*
+
+# DO NOT DELETE THIS LINE -- make depend depends on it.
+
+png.o png.pic.o: png.h pngconf.h
+pngerror.o pngerror.pic.o: png.h pngconf.h
+pngrio.o pngrio.pic.o: png.h pngconf.h
+pngwio.o pngwio.pic.o: png.h pngconf.h
+pngmem.o pngmem.pic.o: png.h pngconf.h
+pngset.o pngset.pic.o: png.h pngconf.h
+pngget.o pngget.pic.o: png.h pngconf.h
+pngread.o pngread.pic.o: png.h pngconf.h
+pngrtran.o pngrtran.pic.o: png.h pngconf.h
+pngrutil.o pngrutil.pic.o: png.h pngconf.h
+pngtrans.o pngtrans.pic.o: png.h pngconf.h
+pngwrite.o pngwrite.pic.o: png.h pngconf.h
+pngwtran.o pngwtran.pic.o: png.h pngconf.h
+pngwutil.o pngwutil.pic.o: png.h pngconf.h
+pngpread.o pngpread.pic.o: png.h pngconf.h
+
+pngtest.o: png.h pngconf.h
diff --git a/scripts/makefile.gcmmx b/scripts/makefile.gcmmx
index 731b670..86e9378 100644
--- a/scripts/makefile.gcmmx
+++ b/scripts/makefile.gcmmx
@@ -15,7 +15,7 @@
 
 LIBNAME = libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 CC=gcc
diff --git a/scripts/makefile.hp64 b/scripts/makefile.hp64
index fdb599a..5e88ed6 100644
--- a/scripts/makefile.hp64
+++ b/scripts/makefile.hp64
@@ -27,7 +27,7 @@
 RANLIB=ranlib
 
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.hpgcc b/scripts/makefile.hpgcc
index e267eb7..df8c56c 100644
--- a/scripts/makefile.hpgcc
+++ b/scripts/makefile.hpgcc
@@ -41,7 +41,7 @@
 #RANLIB=echo
 
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.hpux b/scripts/makefile.hpux
index f792992..0801c64 100644
--- a/scripts/makefile.hpux
+++ b/scripts/makefile.hpux
@@ -24,7 +24,7 @@
 RANLIB=ranlib
 
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.linux b/scripts/makefile.linux
index 3e62ae2..46a6c47 100644
--- a/scripts/makefile.linux
+++ b/scripts/makefile.linux
@@ -5,7 +5,7 @@
 
 LIBNAME = libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 CC=gcc
diff --git a/scripts/makefile.ne12bsd b/scripts/makefile.ne12bsd
index ac230fb..0320062 100644
--- a/scripts/makefile.ne12bsd
+++ b/scripts/makefile.ne12bsd
@@ -13,7 +13,7 @@
 
 LIB=	png12
 SHLIB_MAJOR=	0
-SHLIB_MINOR=	1.2.8rc2
+SHLIB_MINOR=	1.2.8rc3
 SRCS=	pnggccrd.c png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
 		pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
 		pngwtran.c pngmem.c pngerror.c pngpread.c
diff --git a/scripts/makefile.netbsd b/scripts/makefile.netbsd
index 6115ea6..98b9747 100644
--- a/scripts/makefile.netbsd
+++ b/scripts/makefile.netbsd
@@ -13,7 +13,7 @@
 
 LIB=	png
 SHLIB_MAJOR=	3
-SHLIB_MINOR=	1.2.8rc2
+SHLIB_MINOR=	1.2.8rc3
 SRCS=	pnggccrd.c png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
 		pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
 		pngwtran.c pngmem.c pngerror.c pngpread.c
diff --git a/scripts/makefile.openbsd b/scripts/makefile.openbsd
index 9677050..60f2a51 100644
--- a/scripts/makefile.openbsd
+++ b/scripts/makefile.openbsd
@@ -7,7 +7,7 @@
 MANDIR= ${PREFIX}/man/cat
 
 SHLIB_MAJOR=	0
-SHLIB_MINOR=	1.2.8rc2
+SHLIB_MINOR=	1.2.8rc3
 
 LIB=	png
 SRCS=	png.c pngerror.c pnggccrd.c pngget.c pngmem.c pngpread.c \
diff --git a/scripts/makefile.sco b/scripts/makefile.sco
index 3d61e8f..4aa341b 100644
--- a/scripts/makefile.sco
+++ b/scripts/makefile.sco
@@ -24,7 +24,7 @@
 RANLIB=echo
 
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.sggcc b/scripts/makefile.sggcc
index 49a47e4..10c41ae 100644
--- a/scripts/makefile.sggcc
+++ b/scripts/makefile.sggcc
@@ -18,7 +18,7 @@
 
 LIBNAME=libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 CC=gcc
 
diff --git a/scripts/makefile.sgi b/scripts/makefile.sgi
index 8317ec0..bf1abea 100644
--- a/scripts/makefile.sgi
+++ b/scripts/makefile.sgi
@@ -5,7 +5,7 @@
 
 LIBNAME=libpng12
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 
 # Where make install puts libpng.a, libpng12.so, and libpng12/png.h
diff --git a/scripts/makefile.so9 b/scripts/makefile.so9
index a4a2ef4..c74a9b0 100644
--- a/scripts/makefile.so9
+++ b/scripts/makefile.so9
@@ -34,7 +34,7 @@
 RANLIB=echo
 
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/makefile.solaris b/scripts/makefile.solaris
index ecbcf99..eee14cf 100644
--- a/scripts/makefile.solaris
+++ b/scripts/makefile.solaris
@@ -30,7 +30,7 @@
 RANLIB=echo
 
 PNGMAJ = 0
-PNGMIN = 1.2.8rc2
+PNGMIN = 1.2.8rc3
 PNGVER = $(PNGMAJ).$(PNGMIN)
 LIBNAME = libpng12
 
diff --git a/scripts/pngos2.def b/scripts/pngos2.def
index 59ae314..ca17660 100644
--- a/scripts/pngos2.def
+++ b/scripts/pngos2.def
@@ -2,7 +2,7 @@
 ; PNG.LIB module definition file for OS/2
 ;----------------------------------------
 
-; Version 1.2.8rc2
+; Version 1.2.8rc3
 
 LIBRARY		PNG
 DESCRIPTION	"PNG image compression library for OS/2"
diff --git a/scripts/pngw32.def b/scripts/pngw32.def
index 1c3ddfd..7acf13c 100644
--- a/scripts/pngw32.def
+++ b/scripts/pngw32.def
@@ -6,7 +6,7 @@
 DESCRIPTION "PNG image compression library for Windows"
 
 EXPORTS
-;Version 1.2.8rc2
+;Version 1.2.8rc3
   png_build_grayscale_palette  @1
   png_check_sig        @2
   png_chunk_error      @3