summaryrefslogtreecommitdiff
path: root/graphics/tiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/tiff
Initial commit
Diffstat (limited to 'graphics/tiff')
-rw-r--r--graphics/tiff/HOWTO72
-rw-r--r--graphics/tiff/README31
-rw-r--r--graphics/tiff/TIFF6.ps.gzbin0 -> 177271 bytes
-rw-r--r--graphics/tiff/TTN1.ps1089
-rw-r--r--graphics/tiff/TTN2.draft.txt705
-rw-r--r--graphics/tiff/TTN2.draft.txt.gzbin0 -> 12373 bytes
-rw-r--r--graphics/tiff/tiff-v3.4-tar.gzbin0 -> 573908 bytes
-rw-r--r--graphics/tiff/tiff-v3.4beta018-tar.gzbin0 -> 498508 bytes
-rw-r--r--graphics/tiff/tiff-v3.4beta024-tar.gzbin0 -> 523842 bytes
-rw-r--r--graphics/tiff/tiff-v3.4beta028-tar.gzbin0 -> 545437 bytes
-rw-r--r--graphics/tiff/tiff-v3.4beta029-tar.gzbin0 -> 552051 bytes
-rw-r--r--graphics/tiff/v3.4.0.patch-01752
12 files changed, 2649 insertions, 0 deletions
diff --git a/graphics/tiff/HOWTO b/graphics/tiff/HOWTO
new file mode 100644
index 0000000000..11f6c607cb
--- /dev/null
+++ b/graphics/tiff/HOWTO
@@ -0,0 +1,72 @@
+$Header: /usr/people/sam/tiff/RCS/HOWTO,v 1.16 1996/04/29 19:42:29 sam Exp $
+
+How To Obtain This Software (in case all you get is this file)
+
+The software is available for public ftp on
+ sgi.com graphics/tiff/tiff-v3.4-tar.Z
+ (192.48.153.1)
+
+For example,
+ % ftp -n sgi.com
+ ....
+ ftp> user anonymous
+ ... <type in password>
+ ftp> cd graphics/tiff
+ ftp> binary
+ ftp> get tiff-v3.4-tar.Z
+
+In general, the latest version of the 3.4 release of the software is
+always available as "tiff-v3.4-tar.Z" in the ftp directory. This file
+is a link to the appropriate released version (so don't waste your time
+retrieving the linked file as well!) Any files of the form tiff-v3.4-patch*
+are shell scripts that can be used to patch older versions of the
+source code. For example, the file tiff-v3.4-patch01 would contain
+patches to update tiff-v3.4-tar.Z. Patch files only work to go between
+consecutive versions, so if you are multiple versions behind the latest
+release, you will need to apply each patch file between your current
+version and the latest.
+
+
+Obtaining the Software by Electronic Mail
+-----------------------------------------
+Do not send me requests for the software; they will be ignored (without
+response). If you cannot use FTP at all, there is a service called
+"ftpmail" available from decwrl.dec.com: you can send e-mail to
+this machine and it will use FTP to retrieve files for you and send you
+the files back again via e-mail. To find out more about the ftpmail
+service, send a message to "ftpmail@decwrl.dec.com" whose body
+consists of the single line "help".
+
+
+What to do Once You've Retrieved Stuff
+--------------------------------------
+The software comes in a compressed tar file. To extract the
+information:
+
+ zcat tiff-v3.4-tar.Z | tar xf -
+
+(uncompress and extract individual files in current directory).
+
+There is also a companion compressed tar file, v3.0pics.tar.Z
+that has sample TIFF image files. These are mostly useful in
+testing the software if/when you port it to an unsupported system.
+
+
+TIFF Mailing List
+-----------------
+A mailing list for users of this software is located on sgi.com.
+If you want to join this mailing list or have a list-related request
+such as getting your name removed from it, send a request to
+
+ tiff-request@sgi.com
+
+For example, to subscribe, send the line "subscribe" in the body of
+your message. The line "help" will return a list of the commands
+understood by the mailing list management software.
+
+Submissions (including bug reports) should be directed to:
+
+ tiff@sgi.com
+
+When corresponding about this software please always specify what
+version you have and what system you're running on.
diff --git a/graphics/tiff/README b/graphics/tiff/README
new file mode 100644
index 0000000000..97703cdee4
--- /dev/null
+++ b/graphics/tiff/README
@@ -0,0 +1,31 @@
+Fri Jul 7 17:18:37 PDT 1995
+
+There is free TIFF software here. Multiple versions are no longer provided.
+
+ 2694 May 24 11:47 HOWTO basic info on what to get
+ 693 Mar 31 1992 README this file
+1070958 Jun 18 1992 TIFF6.ps TIFF 6.0 spec in PostScript
+ 280700 Jun 18 1992 TIFF6.ps.Z compressed version of TIFF6.ps
+1531799 Mar 31 1992 v3.0pics.tar.Z test images
+ 573147 Jul 7 1995 tiff-v3.4*-tar.gz latest distribution
+
+Signatures on the source code distribution:
+
+Standard checksum (sum tiff-v3.4-tar.gz): 63113 1121
+Alternate checksum (sum -r tiff-v3.4-tar.gz): 38499 1121
+MD5 signature (md5 tiff-v3.4-tar.gz): 2a7fbbccdb805e39489176f8eb9a703b
+
+Look at HOWTO for info on the mailing list.
+
+ Sam
+
+To appease the SGI public ftp mafia ...
+------------------------------------------------------------------------------
+This software is provided without support and without any obligation on the
+part of Silicon Graphics, Inc. to assist in its use, correction, modification
+or enhancement. There is no guarantee that this software will be included
+in future software releases.
+
+THIS SOFTWARE IS PROVIDED "AS IS" WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
diff --git a/graphics/tiff/TIFF6.ps.gz b/graphics/tiff/TIFF6.ps.gz
new file mode 100644
index 0000000000..ad3e547d6d
--- /dev/null
+++ b/graphics/tiff/TIFF6.ps.gz
Binary files differ
diff --git a/graphics/tiff/TTN1.ps b/graphics/tiff/TTN1.ps
new file mode 100644
index 0000000000..dd946c5362
--- /dev/null
+++ b/graphics/tiff/TTN1.ps
@@ -0,0 +1,1089 @@
+%!PS-Adobe-3.0
+%%Title: TTN1.TiffTrees.930601
+%%Creator: PageMaker 5.0
+%%CreationDate: 7-27-1993, 12:08:48
+%%For: Steve Carlsen,Eng
+%%Pages: (atend)
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%DocumentNeededResources: (atend)
+%%DocumentSuppliedResources: (atend)
+%%CMYKCustomColor: (atend)
+%%DocumentCustomColors: (atend)
+%%DocumentProcessColors: (atend)
+%%DocumentPrinterRequired: () (Apple LaserWriter II NT)
+%ALDOriginalFile: BIG:Documents:TIFF Tech Notes:TTN1.TiffTrees.930601
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset ALPS_PS 1.0 1
+%%Copyright: (C) Copyright 1992 Aldus Corporation. All Rights Reserved.
+%%Version: 1.0 1
+/setpacking where{pop currentpacking true setpacking}if userdict/ALPS 385
+dict
+dup begin userdict/ALPS known{/$MetalHead ALPS def}{/$MetalHead currentdict
+def}ifelse/ALPS currentdict def put/bdef{bind def}bind def/xdef{exch
+def}bdef
+/ldef{load def}bdef/ndef{1 index where{pop pop pop}{dup xcheck{bind}if def}
+ifelse}bdef/T true def/F false def/q`[currenttransfer]cvx def/PSScreen[
+currentscreen]cvx def/PSsetgray systemdict/setgray get def/_PSdef matrix
+def
+/_WCmtx matrix def/_LPmtx matrix def/bse^{0 0 transform round exch round
+exch
+itransform translate}bdef/j`{_PSdef currentmatrix pop}bdef/ps${gsave scale
+_WCmtx currentmatrix pop grestore scale}bdef/k`{_LPmtx currentmatrix
+pop}bdef
+/l`{_LPmtx setmatrix}bdef/m`{{90 rotate pop 0 exch neg translate}{-90
+rotate
+neg 0 translate pop}ifelse}bdef/p`{dup length 2 add array cvx dup 3 -1 roll
+2
+exch putinterval dup 0 4 -1 roll put dup 1/exec load
+put}bdef/setcmykcolor{1
+sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat systemdict
+/setrgbcolor get exec pop}ndef/setcustomcolor{exch aload pop pop 4{4 index
+mul
+4 1 roll}repeat setcmykcolor pop}ndef/setprocesscolor{exch aload pop pop
+4{4
+index mul 4 1 roll}repeat setcmykcolor pop}ndef/findcmykcustomcolor{5
+/packedarray where{pop packedarray}{array astore readonly}ifelse}ndef
+/findcmykprocesscolor{5/packedarray where{pop packedarray}{array astore
+readonly}ifelse}ndef/newcmykcustomcolor{6/packedarray where{pop
+packedarray}{
+array astore
+readonly}ifelse}ndef/setoverprint{pop}ndef/currentoverprint{false
+}ndef/setseparationgray{PSsetgray}ndef/separationimage{image}ndef/proc1
+null
+def/proc2 null def/newproc null def/ic 0 def/im 0 def/iy 0 def/ik 0
+def/imtnt
+0 def/imsptnt 0 def/magentabuf null def/yellowbuf null def/blackbuf null
+def
+/level2/languagelevel where{pop languagelevel 1 ne}{false}ifelse def
+/colorexists level2{statusdict/processcolors known{statusdict/processcolors
+get exec}{1}ifelse 4 eq def}{systemdict/setcmykcolor known
+def}ifelse/colimbuf
+{0 1 2 index length 1 sub{dup 2 index exch get 255 exch sub 2 index 3 1
+roll
+put}for}bdef/imagecmyk{ALPS begin aload pop/ik xdef/iy xdef/im xdef/ic xdef
+end}bdef/addprocs{ALPS begin/packedarray where{pop dup type/packedarraytype
+eq
+2 index type/packedarraytype eq or}{false}ifelse{/proc2 exch cvlit
+def/proc1
+exch cvlit def proc1 aload pop proc2 aload pop proc1 length proc2 length
+add
+packedarray cvx}{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1
+length proc2 length add array def newproc 0 proc1 putinterval newproc proc1
+length proc2 putinterval newproc cvx}ifelse end}bdef/currentcolortransfer{
+currenttransfer dup dup dup}ndef/setcolortransfer{systemdict begin
+settransfer
+end pop pop pop}ndef/customcolorimage{ALPS begin colorexists{aload pop pop
+4
+array astore imagecmyk currentcolortransfer{ik mul ik sub 1 add}addprocs 4
+1
+roll{iy mul iy sub 1 add}addprocs 4 1 roll{im mul im sub 1 add}addprocs 4 1
+roll{ic mul ic sub 1 add}addprocs 4 1 roll setcolortransfer/magentabuf 0
+string def/yellowbuf 0 string def/blackbuf 0 string def{colimbuf dup length
+magentabuf length ne{dup length dup dup/magentabuf exch string
+def/yellowbuf
+exch string def/blackbuf exch string def}if dup magentabuf copy yellowbuf
+copy
+blackbuf copy pop}addprocs{magentabuf}{yellowbuf}{blackbuf}true 4
+colorimage}{
+aload pop pop 4 array astore imagecmyk getimtnt currenttransfer{imtnt mul 1
+imtnt sub add}addprocs settransfer image}ifelse end}ndef/getimtnt{ic .3 mul
+im
+.59 mul iy .11 mul ik add add add dup 1 gt{pop 1}if/imtnt xdef}bdef/j2`{
+setcustomcolor}bdef/k2`{setprocesscolor}bdef/l2`{F setoverprint 1 exch sub
+setseparationgray pop}bdef/m2`{pop pop}bdef/n2`{null eq{pop pop/m2` load
+def
+false def}{null eq{pop/l2` load def}{{/k2` load def}{/j2` load def}ifelse}
+ifelse true def}ifelse}bdef/_ft null def/_fc null def/_f? false def/_fo
+false
+def/o2` null def/N` null def/_fpat null def/_fpatn null def/_st null
+def/_sc
+null def/_s? false def/_so false def/q2` null def/O` null def/Q` null
+def/P`
+null def/u2` null def/_LBOmtx matrix def/_LBOgsave matrix def/_x1 null
+def/_y1
+null def/_x2 null def/_y2 null def/_rdp null def/_LLx null def/_LLy null
+def
+/_URx null def/_URy null def/_th null def/_hthk null def/_rd null def/_wp
+null
+def/_hp null def/_diam null def/_w null def/_h null def/_dshlen null
+def/_rem
+null def/_spclen null def/_undo? false def/_dch(X)def/xfont null def/_ch
+null
+def/_prcs? false def/b`{/_prcs? xdef/_ft xdef dup null ne{_prcs?{
+findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_fc xdef/_f?/o2` _prcs?
+_fc _ft n2` atlanta^}bdef/atlanta^{_f?{/N`{_fo setoverprint _fc _ft o2`
+_fpat
+null eq{fill}{_fpat j1`}ifelse}def}{/N`{newpath}def}ifelse}bdef/c`{/_fpatn
+xdef _fpatn null eq{/_fpat null def}{/_fpat _fpatn findfont
+def}ifelse}bdef/e`
+{/_fo xdef}bdef/a`{/_prcs? xdef/_st xdef dup null ne{_prcs?{
+findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_sc xdef/_s?/q2` _prcs?
+_sc _st n2` seattle^}bdef/seattle^{_s?{/O`{_so setoverprint _sc _st q2`
+stroke
+}def/Q`{_so setoverprint _sc _st q2` fill}def/P`/Q` load def/u2`{_so
+setoverprint _sc _st q2`
+show}def}{/O`{newpath}def/Q`{newpath}def/P`{newpath}
+def/u2`{pop}def}ifelse}bdef/f`{/_so xdef}bdef/arct{arcto pop pop pop
+pop}ndef
+/u`{_LBOgsave currentmatrix pop translate scale 1 0 moveto 0 0 1 360 0 arcn
+closepath _LBOgsave setmatrix}bdef/v`{moveto 1 index 0 rlineto 0 exch
+rlineto
+neg 0 rlineto closepath}bdef/w`{/_y2 xdef/_x2 xdef/_y1 xdef/_x1 xdef/_rdp
+xdef
+_x1 _y1 _rdp add moveto _x1 _y2 _x2 _y2 _rdp arct _x2 _y2 _x2 _y1 _rdp arct
+_x2 _y1 _x1 _y1 _rdp arct _x1 _y1 _x1 _y2 _rdp arct closepath}bdef/bell^{{
+_LBOmtx astore concat}if}bdef/south^{/_URy xdef/_URx xdef/_LLy xdef/_LLx
+xdef}
+bdef/lpd^{gsave translate rotate}bdef/jp^{grestore}bdef/bh^{gsave bell^
+south^
+/_th xdef _URx _LLx sub abs _th sub _URy _LLy sub abs _th sub _LLx _th 2
+div
+add _LLy _th 2 div add v` gsave N` grestore _th setlinewidth O`
+grestore}bdef
+/y`{gsave bell^ 2{2 index sub 4 1 roll}repeat v`{N`}{P`}ifelse
+grestore}bdef
+/z`{gsave bell^ south^/_th xdef _th 2 div/_x1 _LLx 2 index add def/_y1 _LLy
+2
+index add def/_x2 _URx 2 index sub def/_y2 _URy 2 index sub def pop 6 index
+4
+copy 0 _LLx _y1 gsave samson^ _th setlinewidth O` grestore 0 _LLx _y2 gsave
+samson^ _th setlinewidth O` grestore 4 index 4 copy 90 _x1 _LLy gsave
+samson^
+_th setlinewidth O` grestore 90 _x2 _LLy gsave samson^ _th setlinewidth O`
+grestore _th lt exch _th lt and{F _LLx _LLy _LLx _th add _LLy _th add F y`
+F
+_LLx _URy _th sub _LLx _th add _URy F y` F _URx _th sub _LLy _URx _LLy _th
+add
+F y` F _URx _th sub _URy _th sub _URx _URy F y`}if grestore}bdef/A`{gsave
+bell^ south^/_th xdef/_ch xdef xfont _th scalefont setfont _th 2 div/_x1
+_LLx
+2 index add def/_y1 _LLy 2 index add def/_x2 _URx 2 index sub def/_y2 _URy
+2
+index sub def pop{4 copy _ch 0 _LLx _y1 F roswell^ _ch 0 _LLx _y2 F
+roswell^}{
+4 copy 0 _LLx _y1 gsave samson^ _th setlinewidth O` grestore 0 _LLx _y2
+gsave
+samson^ _th setlinewidth O` grestore}ifelse{4 copy _ch 90 _x1 _LLy F
+roswell^
+_ch 90 _x2 _LLy F roswell^}{4 copy 90 _x1 _LLy gsave samson^ _th
+setlinewidth
+O` grestore 90 _x2 _LLy gsave samson^ _th setlinewidth O` grestore}ifelse
+grestore}bdef/nba^{gsave bell^ south^/_rd xdef/_th xdef/_wp _URx _LLx sub
+abs
+_th sub def/_hp _URy _LLy sub abs _th sub def/_diam _rd 2 mul _th sub
+def/_w
+_wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def
+_LBOgsave currentmatrix pop _LLx _th 2 div add _LLy _th 2 div add translate
+_diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam div}{1}ifelse
+scale _rd _th 2 div sub 0 0 _w _h w` _LBOgsave setmatrix gsave N` grestore
+_th
+setlinewidth O` grestore}bdef/C`{gsave bell^ south^/_rd xdef/_wp _URx _LLx
+sub
+abs def/_hp _URy _LLy sub abs def/_diam _rd 2 mul def/_w _wp _diam ge{_wp}{
+_diam}ifelse def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOgsave
+currentmatrix
+pop _LLx _LLy translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp
+gt{_hp
+_diam div}{1}ifelse scale _rd 0 0 _w _h w` _LBOgsave
+setmatrix{N`}{P`}ifelse
+grestore}bdef/D`{gsave bell^ south^/_rd xdef/_th xdef/_hthk _th 2 div
+def/_wp
+_URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def _hthk _rd
+ge{
+_wp _hp _LLx _hthk add _LLy _hthk add v` N`}{gsave _LLx _hthk add _LLy
+_hthk
+add translate _rd _hthk sub 0 0 _wp _hp w` N` grestore}ifelse/_w _URx _LLx
+sub
+abs def/_h _URy _LLy sub abs def _w 2 _th mul sub _h 2 _th mul sub _LLx _th
+add _LLy _th add v` _rd _LLx _LLy _URx _URy w` Q` grestore}bdef/E`{gsave
+bell^
+south^/_rd xdef/_th xdef/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy
+sub
+abs _th sub def/_diam _rd 2 mul _th sub def/_w _wp _diam
+ge{_wp}{_diam}ifelse
+def/_h _hp _diam ge{_hp}{_diam}ifelse def _LBOmtx currentmatrix pop _LLx
+_th 2
+div add _LLy _th 2 div add translate _diam _wp gt{_wp _diam div}{1}ifelse
+_diam _hp gt{_hp _diam div}{1}ifelse scale _LBOgsave currentmatrix pop _th
+_rd
+gt dup{_rd 2 div}{_rd _th 2 div sub}ifelse 0 0 _w _h auburn^ _LBOmtx
+setmatrix
+{_rd}{_th}ifelse setlinewidth O` _LBOgsave setmatrix{/_x1 _rd 4 index _th 2
+div sub add def 4 copy 0 _x1 0 gsave samson^ _LBOmtx setmatrix _th
+setlinewidth O` grestore 0 _x1 _h gsave samson^ _LBOmtx setmatrix _th
+setlinewidth O` grestore}if{/_y1 _rd 4 index _th 2 div sub add def 4 copy
+90 0
+_y1 gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore 90 _w _y1
+gsave samson^ _LBOmtx setmatrix _th setlinewidth O` grestore}if
+grestore}bdef
+/F`{gsave bell^ south^/_rd xdef/_th xdef/_ch xdef xfont _th scalefont
+setfont
+/_wp _URx _LLx sub abs _th sub def/_hp _URy _LLy sub abs _th sub def/_diam
+_rd
+2 mul _th sub def/_w _wp _diam ge{_wp}{_diam}ifelse def/_h _hp _diam
+ge{_hp}{
+_diam}ifelse def _LBOmtx currentmatrix pop _LLx _th 2 div add _LLy _th 2
+div
+add translate _diam _wp gt{_wp _diam div}{1}ifelse _diam _hp gt{_hp _diam
+div}
+{1}ifelse scale _LBOgsave currentmatrix pop _th _rd gt dup{_rd 2 div}{_rd
+_th
+2 div sub}ifelse 0 0 _w _h auburn^ _LBOmtx setmatrix{_rd}{_th}ifelse
+setlinewidth O` _LBOgsave setmatrix{/_x1 _rd 4 index _th 2 div sub add def
+4
+copy _ch 0 _x1 0 T roswell^ _ch 0 _x1 _h T roswell^}if{/_y1 _rd 4 index _th
+2
+div sub add def 4 copy _ch 90 0 _y1 T roswell^ _ch 90 _w _y1 T roswell^}if
+grestore}bdef/auburn^{/_y2 xdef/_x2 xdef/_y1 xdef/_x1 xdef/_rdp xdef _x1
+_y1
+_rdp add moveto _x1 _y1 _x2 _y1 _rdp arct _x2 _rdp sub _y1 moveto _x2 _y1
+_x2
+_y2 _rdp arct _x2 _y2 _rdp sub moveto _x2 _y2 _x1 _y2 _rdp arct _x1 _rdp
+add
+_y2 moveto _x1 _y2 _x1 _y1 _rdp arct}bdef/jmk${gsave bell^ south^/_th
+xdef/_w
+_URx _LLx sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub
+_h
+_th 2 div sub _LLx _w add _LLy _h add u` gsave N` grestore _th setlinewidth
+O`
+grestore}bdef/H`{gsave bell^ south^ _URx _LLx sub abs 2 div _URy _LLy sub
+abs
+2 div _LLx 2 index add _LLy 2 index add u`{N`}{P`}ifelse grestore}bdef/I`{
+gsave bell^ south^/_th xdef/_w _URx _LLx sub abs 2 div def/_h _URy _LLy sub
+abs 2 div def _w _th 2 div sub _h _th 2 div sub _LLx _w add _LLy _h add
+_LBOmtx currentmatrix pop translate scale _LBOgsave currentmatrix pop 1 0
+moveto 0 exch 360{0 0 1 4 -1 roll dup 5 index add arc _LBOmtx setmatrix _th
+setlinewidth O` _LBOgsave setmatrix}for pop grestore}bdef/J`{gsave bell^
+south^/_th xdef _dch 0 3 -1 roll put xfont _th scalefont setfont/_w _URx
+_LLx
+sub abs 2 div def/_h _URy _LLy sub abs 2 div def _w _th 2 div sub _h _th 2
+div
+sub _LLx _w add _LLy _h add _LBOmtx currentmatrix pop translate scale
+_LBOgsave currentmatrix pop 1 0 moveto 0 exch 360{0 0 1 4 -1 roll dup arc
+_LBOmtx setmatrix _dch u2` newpath _LBOgsave setmatrix}for
+grestore}bdef/jbd^{
+gsave bell^ moveto lineto setlinewidth O` grestore}bdef/ald^{gsave bell^
+samson^ setlinewidth O` grestore}bdef/ws^{gsave bell^ xfont exch scalefont
+setfont F roswell^ grestore}bdef/samson^{translate rotate 0 0
+moveto/_dshlen
+xdef/_rem xdef/_spclen xdef 1 1 3 -1 roll{pop _dshlen 0 rlineto _spclen
+_rem 0
+gt{1 add/_rem _rem 1 sub def}if 0 rmoveto}for _dshlen 0
+rlineto}bdef/roswell^{
+gsave/_undo? xdef translate rotate _dch 0 3 -1 roll put 0 moveto/_rem xdef
+/_spclen xdef 1 1 3 -1 roll{pop gsave _undo?{_LBOmtx setmatrix}if _dch u2`
+grestore _spclen _rem 0 gt{1 add/_rem _rem 1 sub def}if 0 rmoveto}for
+_undo?{
+_LBOmtx setmatrix}if _dch u2` grestore}bdef 8 dict begin/FontType 3 def
+/FontMatrix[.001 0 0 .001 0 0]def/FontBBox[-500 -500 500 500]def/Encoding
+256
+array def 0 1 255{Encoding exch/.nodef put}for Encoding 97/circle put
+/CharProcs 2 dict def CharProcs begin/.nodef{}def/circle{0 0 500 0 360 arc
+closepath fill}bind def end/BuildGlyph{1000 0 -500 -500 500 500
+setcachedevice
+exch/CharProcs get exch 2 copy known not{pop/.nodef}if get exec}bind def
+/BuildChar{1 index/Encoding get exch get 1 index/BuildGlyph get exec}bind
+def
+currentdict end/_xfont exch definefont/xfont exch def/_thumbStr 10 string
+def
+/_irad null def/_orad null def/_dx null def/_dy null def/_ld2 null def/_sz
+null def/_th null def/_lblsave null def/LFont null def/T`{gsave 0.05 0.05
+scale translate 2 copy 2 copy 8 -2 roll dup 3 -1 roll{neg}if exch v` .5
+setseparationgray fill 0 0 v` gsave 1 setseparationgray fill grestore 0
+setseparationgray 20 setlinewidth stroke/Helvetica findfont 180 scalefont
+setfont 100 add 100 exch moveto pop _thumbStr cvs show
+grestore}bdef/q3`{_th
+_orad sub dup _dx _dy u` stroke _dx _ld2 sub _dy moveto _dx _ld2 add _dy
+lineto stroke _dx _dy _ld2 sub moveto _dx _dy _ld2 add lineto
+stroke}bdef/V`{
+/_irad xdef/_orad xdef/_dy xdef/_dx xdef/_th xdef/_ld2 xdef/_hthk 2.5 wcu^
+round dup 2 le{pop 2}if def gsave 0 setlinecap 1 setseparationgray _th
+_hthk 2
+mul add setlinewidth q3` _hthk _irad add dup _dx _dy u` fill 0
+setseparationgray _th setlinewidth q3` _irad dup _dx _dy u` fill 1
+setseparationgray _dx _irad sub _dy moveto _dx _irad add _dy lineto stroke
+_dx
+_dy _irad sub moveto _dx _dy _irad add lineto stroke grestore}bdef/f1a`{1
+exch
+sub 0 0 0 setcmykcolor}bdef/f1b`{1 exch sub 0 exch 0 0
+setcmykcolor}bdef/f1c`{
+1 exch sub 0 0 3 -1 roll 0 setcmykcolor}bdef/f1d`{1 exch sub 0 0 0 4 -1
+roll
+setcmykcolor}bdef/f1e`{setseparationgray}bdef/W`{gsave F setoverprint/_dy
+xdef
+/_dx xdef/_sz xdef/_th xdef _dx _dy translate{-90 rotate}if/XPaint exch
+ldef
+0.35 XPaint 11 _sz mul _sz 0 0 v` fill/_dx _th def/_sz _sz 2 _th mul sub
+def 0
+1 10{10 div XPaint _sz dup _dx _th v` fill/_dx _dx _sz 2 _th mul add add
+def}
+for grestore}bdef/calBarArray[0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1
+0
+0 0 0 1 0 0 .5 0 0 .5 0 0 .5 0 0 0 0 0 0 .5]def/X`{gsave/_dy xdef/_dx
+xdef/_sz
+xdef/_th xdef _dx _dy translate{-90 rotate}if 0.35 setseparationgray 11 _sz
+mul _sz 0 0 v` fill/_dx _th def/_sz _sz 2 _th mul sub def currentoverprint
+false setoverprint 0 1 10{calBarArray exch 4 mul 4 getinterval aload pop
+setcmykcolor _sz dup _dx _th v` fill/_dx _dx _sz 2 _th mul add add def}for
+setoverprint grestore}bdef/pw${gsave/_hthk 2.5 wcu^ round dup 2 le{pop 2}if
+def 5 copy 1 setseparationgray 0 setlinecap moveto rlineto _hthk 2 mul add
+setlinewidth stroke 0 setseparationgray moveto rlineto setlinewidth stroke
+grestore}bdef/Y`{/_lblsave save def[exch 0 0 2 index neg 0 0]LFont exch
+makefont setfont}bdef/a1`{0 setseparationgray moveto show}bdef/Z`{_lblsave
+restore}bdef/f1`{/LFont/|_______Helvetica T/Helvetica aldus^ def}bdef/_xbft
+null def/_xbfc null def/_xbx? F def/XPaint null def/XFill null def/XStroke
+null def/b1`{gsave bell^ south^/_th xdef currentoverprint T
+setoverprint}bdef
+/d1`{setoverprint grestore}bdef/c1`{beams^ bapco^}bdef/bapco^{_URx _LLx sub
+abs _th sub _URy _LLy sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add
+4
+copy v` gsave XFill grestore _th setlinewidth XStroke 4 copy moveto rlineto
+exch 3 index add exch moveto exch neg exch rlineto
+XStroke}bdef/beams^{/_prcs?
+xdef/_xbft xdef dup null
+ne{_prcs?{findcmykprocesscolor}{findcmykcustomcolor}
+ifelse}if/_xbfc xdef/_xbx?/XPaint _prcs? _xbfc _xbft n2` psquare^}bdef
+/psquare^{_xbx?{/XFill{_xbfc 0 XPaint fill}def/XStroke{_xbfc 1 XPaint
+stroke}
+def}{/XFill{newpath}def/XStroke{newpath}def}ifelse}bdef/e1`{/__$jk
+where{pop
+/junk save def bell^ south^/_th xdef _URx _LLx sub abs _th sub _URy _LLy
+sub
+abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave .9
+setseparationgray fill grestore 0 setseparationgray _th setlinewidth stroke
+_LLx _LLy _URy add 2 div moveto/Helvetica findfont[180 180 J2` neg 0 0 3 -1
+roll 0 0]makefont setfont show junk restore}{{6{pop}repeat}if 6{pop}repeat}
+ifelse}bdef/s`{gsave clippath 1 setseparationgray fill grestore}bdef/r`{
+PSScreen exch pop exch pop dup type/dicttype eq{dup/HalftoneType get 1 eq{
+begin/Angle exch def/Frequency exch def 60 0 currentdict
+end}if}if}bdef/t`{{1
+exch sub}}bdef/PPDSetup{countdictstack mark}bdef/PPDCleanup{stopped
+cleartomark countdictstack exch sub dup 0 gt{{end}repeat}{pop}ifelse}bdef
+/_PATgsave matrix def/_PATmtx matrix def/gl^{7 dict begin/FontDict 9 dict
+def
+FontDict begin/cache exch def/key exch def/proc exch cvx def/mtx exch
+matrix
+invertmatrix def/height exch def/width exch def/ctm matrix currentmatrix
+def
+/ptm matrix identmatrix def/str(12345678901234567890123456789012)def end
+/FontBBox[0 0 FontDict/width get FontDict/height get]def/FontMatrix
+FontDict
+/mtx get def/Encoding StandardEncoding def/FontType 3 def/BuildChar{pop
+begin
+FontDict begin width 0 cache{0 0 width height setcachedevice}{setcharwidth}
+ifelse 0 0 moveto width 0 lineto width height lineto 0 height lineto
+closepath
+clip newpath gsave proc grestore end end}def FontDict/key get currentdict
+definefont end}bdef/hj^{dup type/dicttype eq{begin FontDict/ctm get
+setmatrix}
+{exch begin FontDict/ctm get setmatrix concat}ifelse currentdict setfont
+FontDict begin FontMatrix concat width 0 dtransform round width div exch
+round
+width div exch 0 height dtransform round height div exch round height div
+exch
+0 0 transform round exch round exch ptm astore setmatrix pathbbox height
+div
+ceiling height mul 4 1 roll width div ceiling width mul 4 1 roll height div
+floor height mul 4 1 roll width div floor width mul 4 1 roll 2 index sub
+height div ceiling cvi exch 3 index sub width div ceiling cvi exch 4 2 roll
+moveto FontMatrix ptm invertmatrix pop{gsave ptm concat dup str length
+idiv{
+str show}repeat dup str length mod str exch 0 exch getinterval show
+grestore 0
+height rmoveto}repeat pop end end}bdef/i1`{gsave clip hj^ grestore newpath}
+bdef/j1`{gsave 0 0 0 0 setcmykcolor fill grestore i1`}bdef/k1`{_PATgsave
+currentmatrix pop _PATmtx defaultmatrix setmatrix rotate 3.36 3.36[1 0 0 -1
+0
+0]{2 setlinecap 0 1.68 moveto 1.68 0 lineto 1.68 3.36 moveto 3.36 1.68
+lineto
+0.675 setlinewidth stroke}/l1` true gl^ pop 5.28 5.28[1 0 0 -1 0 0]{2
+setlinecap 0 2.64 moveto 2.64 0 lineto 2.64 5.28 moveto 5.28 2.64 lineto
+0.675
+setlinewidth stroke}/m1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap
+0
+1.92 moveto 3.84 1.92 lineto 0.675 setlinewidth stroke}/n1` true gl^ pop
+7.68
+7.68[1 0 0 -1 0 0]{2 setlinecap 0 3.84 moveto 7.68 3.84 lineto 0.675
+setlinewidth stroke}/o1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap
+1.92 0 moveto 1.92 3.84 lineto 0.675 setlinewidth stroke}/p1` true gl^ pop
+7.68 7.68[1 0 0 -1 0 0]{2 setlinecap 3.84 0 moveto 3.84 7.68 lineto 0.675
+setlinewidth stroke}/q1` true gl^ pop 3.84 3.84[1 0 0 -1 0 0]{2 setlinecap
+1.92 0 moveto 1.92 3.84 lineto 0 1.92 moveto 3.84 1.92 lineto 0.675
+setlinewidth stroke}/r1` true gl^ pop 7.68 7.68[1 0 0 -1 0 0]{2 setlinecap
+3.84 0 moveto 3.84 7.68 lineto 0 3.84 moveto 7.68 3.84 lineto 0.675
+setlinewidth stroke}/s1` true gl^ pop _PATgsave setmatrix}bdef
+/_OutlineSmearFrac 10 def/_OutlineWeight 0.012 def/_OutlineFillColor 0 0 0
+1(\
+)findcmykprocesscolor def/_ShadowReverseColor 0 0 0 1()findcmykprocesscolor
+def/_BoldFactorX 0.015 def/_BoldFactorY 0.015 def/_ShadowFactorX 0.06 def
+/_ShadowFactorY 0.06 def/_ObliqueFactor -0.21 def/_ShadowTintFactor 0.2 def
+/_BFontUOThick 1 0/Helvetica findfont/FontMatrix get dtransform dup mul
+exch
+dup mul add sqrt _OutlineWeight mul def/_TXmtx matrix def/_TXctmx matrix
+def
+/_txgsave matrix def/_BaseMatrix[1 0 0 -1 0 0]def/_ItalicMatrix[1 0
+_ObliqueFactor 1 0 0]def/tempDict null def userdict/FCDict userdict put
+/isWinPS false def/_xSize 12 def/_ySize 12 def/_dots 1440 def/_fDict null
+def
+/_uScale null def/_uPosition null def/_uThickness null def/_uOThickness
+null
+def/_dUPosition -100 def/_dUThickness 50 def/_dFontScale -0.001 def/_runLen
+null def/_txc null def/_txt null def/_txo F def/_tx? F def/_ctc null
+def/_ctt
+null def/_cto F def/_cPaint null def/_outxc null def/_outxt null def/_outxo
+T
+def/_shdc null def/_shdt null def/_shdo T def/K2` null def/k3` null def/m3`
+null def/j3` null def/l3` null def/FTextPaint null def/STextPaint null def
+/_gMTX matrix def/macvec 256 array def macvec dup dup 0/Times-Roman
+findfont
+/Encoding get 0 128 getinterval putinterval 39/quotesingle put 96/grave
+put
+/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute/agrave
+/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave/ecircumflex
+/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute/ograve
+/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis/dagger
+/degree/cent/sterling/section/bullet/paragraph/germandbls/registered/copyright
+/trademark/acute/dieresis/notequal/AE/Oslash/infinity/plusminus/lessequal
+/greaterequal/yen/mu/partialdiff/summation/product/pi/integral/ordfeminine
+/ordmasculine/Omega/ae/oslash/questiondown/exclamdown/logicalnot/radical
+/florin/approxequal/Delta/guillemotleft/guillemotright/ellipsis/blank/Agrave
+/Atilde/Otilde/OE/oe/endash/emdash/quotedblleft/quotedblright/quoteleft
+/quoteright/divide/lozenge/ydieresis/Ydieresis/fraction/currency/guilsinglleft
+/guilsinglright/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase
+/perthousand/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute
+/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex/apple/Ograve/Uacute
+/Ucircumflex/Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring
+/cedilla/hungarumlaut/ogonek/caron macvec 128 128 getinterval astore pop
+/winvec 256 array def winvec dup dup 0/Times-Roman findfont/Encoding get 0
+128
+getinterval putinterval 39/quotesingle put 96/grave
+put/grave/acute/circumflex
+/tilde/macron/breve/dotaccent/dieresis/ring/cedilla/hungarumlaut/ogonek/caron
+/dotlessi winvec 0 14 getinterval astore
+pop/bullet/bullet/bullet
+/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex
+/perthousand/Scaron/guilsinglleft/OE/bullet/bullet/bullet/bullet/quoteleft
+/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark
+/scaron/guilsinglright/oe/bullet/bullet/Ydieresis/space/exclamdown/cent
+/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
+/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
+/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
+/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth
+/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
+/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute
+/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex
+/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute
+/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex
+/udieresis/yacute/thorn/ydieresis winvec 127 129 getinterval astore
+pop/M1`{{
+_TXmtx astore concat}if _TXctmx currentmatrix pop}bdef/N1`{_txgsave
+currentmatrix pop}bdef/O1`{_txgsave setmatrix}bdef/P1`{O1`}bdef/Q1`{_TXctmx
+setmatrix}bdef/v1`{userdict begin dict/FCDict exch def
+end}bdef/fontdef{FCDict
+3 1 roll put}bdef/fontget{FCDict exch get}bdef/x1`{aldus^ _BaseMatrix
+makefont
+fontdef}bdef/p3`{dup length 1 add dict/tempDict exch def{1 index/FID ne 2
+index/UniqueID ne and{tempDict 3 1 roll put}{pop pop}ifelse}forall tempDict}
+bdef/aldus^{findfont exch isWinPS{pop dup/Encoding get dup 161 get exch 162
+get/cent eq exch/exclamdown eq and}if{p3` dup/Encoding
+isWinPS{winvec}{macvec}
+ifelse put definefont}{exch pop}ifelse}bdef/I1`{findfont p3` dup/Encoding
+get
+256 array copy dup dup 3 index/Encoding 3 2 roll put}bdef/J1`{put
+dup}bdef/K1`
+{pop pop definefont _BaseMatrix makefont fontdef}bdef/y1`{gsi^ fontdef}bdef
+/z1`{fontget _ItalicMatrix makefont fontdef}bdef/gsi^{fontget dup maxlength
+2
+add dict/tempDict exch def{1 index/FID ne 2 index/UniqueID ne and{tempDict
+3 1
+roll put}{pop pop}ifelse}forall tempDict begin/PaintType 2 def/StrokeWidth
+1 0
+FontMatrix dtransform dup mul exch dup mul add sqrt _OutlineWeight exch div
+def end tempDict definefont}bdef/auckland^{/_ySize xdef/_xSize xdef
+fontget[
+_xSize 0 0 _ySize 0 0]makefont setfont}bdef/wcu^{_dots mul}bdef/n`{1440 div
+/_dots xdef}bdef/J2`{wcu^ exch wcu^ exch}bdef/w1`{J2`
+auckland^}bdef/K2`{}bdef
+/A1`{isWinPS{O2`}{pop pop pop}ifelse 5 3 roll K2`}bdef/L2`{/_x1 _xSize
+_BoldFactorX mul def/_y1 _ySize _BoldFactorY mul def 5 copy _y1 add exch
+_x1
+add exch K2` 5 copy _y1 add exch _x1 sub exch K2` 5 copy _y1 sub exch _x1
+add
+exch K2` 5 copy _y1 sub exch _x1 sub exch K2` K2`}bdef/B1`{O2` 5 3 roll
+L2`}
+bdef/C1`{O2` 6 3 roll 6 copy U2` 3 1 roll _ySize _ShadowFactorY mul add
+exch
+_xSize _ShadowFactorX mul add exch 3 -1 roll{L2`}{K2`}ifelse V2`{L2`}{K2`}
+ifelse}bdef/D1`{O2` 5 3 roll gsave 6 index not{7 index _xSize _ySize
+auckland^
+}if 5 copy _ySize _ShadowFactorY mul add exch _xSize _ShadowFactorX mul add
+exch 11 -1 roll{L2`}{K2`}ifelse grestore 6 -1 roll{M2`}{6 -1 roll
+N2`}ifelse}
+bdef/M2`{/_x1 _OutlineSmearFrac wcu^ def/_y1 _OutlineSmearFrac wcu^ def 5
+copy
+_y1 neg add exch _x1 neg add exch K2` 5 copy _y1 neg add exch _x1 add exch
+K2`
+5 copy _y1 add exch _x1 neg add exch K2` 5 copy _y1 add exch _x1 add exch
+K2`
+m3`}bdef/E1`{O2` 5 3 roll M2`}bdef/N2`{gsave _xSize _ySize auckland^ 5 copy
+m3` grestore K2`}bdef/F1`{O2` 6 3 roll N2`}bdef version cvr 47.0
+ge{/strwth{
+stringwidth pop}bdef}{/strwth{gsave newpath 0 0 moveto 0 0 lineto closepath
+clip stringwidth grestore pop}bdef}ifelse/O2`{dup 0 gt{dup 4 1 roll 4 index
+mul exch 5 index mul add 5 index strwth add sub exch div add}{pop pop pop}
+ifelse}bdef/G1`{fontget/_fDict xdef wcu^ _fDict/FontInfo known{_fDict
+/FontMatrix get 3 get mul/_uScale xdef _fDict/FontInfo get dup
+/UnderlinePosition known{dup/UnderlinePosition get _uScale mul/_uPosition
+xdef
+}{/_uPosition _dUPosition _uScale mul def}ifelse dup/UnderlineThickness
+known{
+dup/UnderlineThickness get _uScale mul/_uThickness xdef}{/_uThickness
+_dUThickness _uScale mul def}ifelse pop}{_dFontScale mul/_uScale xdef
+/_uPosition _dUPosition _uScale mul def/_uThickness _dUThickness _uScale
+mul
+def}ifelse/_uOThickness _BFontUOThick _uScale mul def _fDict/PaintType
+known{
+_fDict/PaintType get 2 eq{_fDict/StrokeWidth known{/_uOThickness _fDict
+/StrokeWidth get _uScale mul def}{1 0 _fDict/FontMatrix get dtransform dup
+mul
+exch dup mul add sqrt _OutlineWeight mul _uScale mul/_uOThickness
+xdef}ifelse}
+if}if}bdef/H1`{gsave/_runLen xdef/_y1 xdef/_x1 xdef/_y1 _y1 _uPosition add
+def
+{dup not{U2`}if/_y2 _ySize _ShadowFactorY mul _y1 add def/_x2 _xSize
+_ShadowFactorX mul _x1 add def _uThickness _x2 _y2 _x2 _runLen add _y2 P2`
+dup
+not{V2`}if}if{_uOThickness _x1 _y1 _uThickness 2 div add _x1 _runLen add
+_y1
+_uThickness 2 div sub Q2`}{_uThickness _x1 _y1 _x1 _runLen add _y1
+P2`}ifelse
+grestore}bdef/mm${gsave _ySize 3 div sub/_y1 xdef _y1 _y1 3 1 roll _ySize
+16
+div 5 1 roll P2` grestore}bdef/P2`{gsave moveto lineto setlinewidth k3`
+grestore}bdef/Q2`{gsave south^/_th xdef _URx _LLx sub abs _th sub _URy _LLy
+sub abs _th sub _LLx _th 2 div add _LLy _th 2 div add v` gsave j3` grestore
+_th setlinewidth k3` grestore}bdef/d`{/_prcs? xdef/_txt xdef dup null ne{
+_prcs?{findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_txc xdef
+SetOutColor SetShadColor/_tx?/l3` _prcs? _txc _txt n2`
+S2`}bdef/SetOutColor{
+_txt null eq{/_outxc null def/_outxt null def}{_txc null eq{_txt 0
+eq{/_outxt
+1 def _prcs?{/_outxc _OutlineFillColor def}{/_outxc null
+def}ifelse}{/_outxt 0
+def/_outxc null def}ifelse}{_txc aload pop pop add add add 0 eq{/_outxt 1
+def
+/_outxc _OutlineFillColor def}{/_outxt 0 def/_outxc null def}ifelse}ifelse}
+ifelse/_cjc?/FTextPaint _prcs? _outxc _outxt n2`}bdef/SetShadColor{_txt
+null
+eq{/_shdc null def/_shdt null def}{/_shdo _txo def _txc null eq{_txt 0 eq{
+/_shdt 1 def}{/_shdt T2` def}ifelse _prcs?{/_shdc _ShadowReverseColor def
+/_shdo T def}{/_shdc null def}ifelse}{_txc aload pop pop add add add 0 eq{
+/_shdt 1 def/_shdc _ShadowReverseColor def/_shdo T def}{/_shdt T2`
+def/_shdc
+_txc def}ifelse}ifelse}ifelse/_cjc?/STextPaint _prcs? _shdc _shdt
+n2`}bdef/S2`
+{_tx?{/K2`{_txo setoverprint _txc _txt l3` moveto 0 4 2 roll 0 32 6 3 roll
+awidthshow}def/k3`{_txo setoverprint _txc _txt l3` stroke}def/m3`{_outxo
+setoverprint _outxc _outxt FTextPaint moveto 0 4 2 roll 0 32 6 3 roll
+awidthshow}def/j3`{_outxo setoverprint _outxc _outxt FTextPaint
+fill}def}{/K2`
+{5{pop}repeat}def/k3`{newpath}def/m3`{5{pop}repeat}def/j3`{newpath}def}ifelse}
+bdef/T2`{_txt _ShadowTintFactor mul}bdef/U2`{/_ctc _txc def/_ctt _txt
+def/_cto
+_txo def/_cPaint/l3` ldef/_txc _shdc def/_txt _shdt def/_txo _shdo def/l3`
+/STextPaint ldef}bdef/V2`{/_txc _ctc def/_txt _ctt def/_txo _cto def/l3`
+/_cPaint ldef}bdef/g`{/_txo xdef}bdef/SaveHook{}ndef/RestoreHook{}ndef/W2`{
+SaveHook _dots _LPmtx aload _PSdef aload _WCmtx aload _txgsave aload
+_TXctmx
+aload _gMTX currentmatrix aload}bdef/X2`{astore setmatrix astore pop astore
+pop astore pop astore pop astore pop/_dots xdef RestoreHook}bdef/bmt^{save
+def
+}bdef/tsi^{mark W2` counttomark 2 add -2 roll pop restore X2`
+o`}bdef/seni^{
+restore}bdef/o`{/_fo F def/_so F def/_txo F def}bdef/_GRPHmtx matrix def
+/_imagesave null def/_imc null def/_imt null def/ImPaint null def/cjc^{
+/_imagesave save def _WCmtx setmatrix}bdef/tvs^{_PSdef setmatrix}bdef/dsd^{
+_imagesave restore}bdef/espresso 4 dict def espresso
+begin/setgray{setgray}def
+/setcmykcolor{setcmykcolor}def/setrgbcolor{setrgbcolor}def/sethsbcolor{
+sethsbcolor}def end/o3`{espresso begin userdict begin}bdef/vm${/OSdict xdef
+end end end}bdef/b2a`{/_imagesave save def{_GRPHmtx astore concat}if
+translate
+dup scale newpath 0 0 v` clip newpath userdict begin/showpage{}def 0
+setgray 0
+setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit[]0 setdash newpath
+F
+setoverprint}bdef/a2`{OSdict begin}bdef/b2`{end V1`}bdef/kHu${/_imagesave
+save
+def{_GRPHmtx astore concat}if translate scale translate newpath v` clip
+newpath userdict begin/showpage{}def 0 setgray 0 setlinecap 1 setlinewidth
+0
+setlinejoin 10 setmiterlimit[]0 setdash newpath F setoverprint}bdef/V1`{end
+_imagesave restore}bdef/_ortnt null def/_orclr null def/_gop false
+def/_cjc?
+false def/*setcmyk null def/*setrgb null def/*sethsb null def/*setgry null
+def
+/*setsepgray null def/*setcustomclr null def/*setprocessclr null def/*setop
+null def/*zimage null def/$gate_1 T def/$clrOverride F def/Y2`{ALPS begin
+/*setcmyk/setcmykcolor ldef/*setrgb/setrgbcolor ldef/*sethsb/sethsbcolor
+ldef
+/*setgry/setgray ldef/*setcustomclr/setcustomcolor ldef/*setprocessclr
+/setprocesscolor ldef/*setop/setoverprint
+ldef/*setsepgray/setseparationgray
+ldef/*zimage/image ldef end}bdef/X1`{ALPS begin/setcmykcolor/*setcmyk ldef
+/setrgbcolor/*setrgb ldef/sethsbcolor/*sethsb ldef/setgray/*setgry ldef
+/setcustomcolor/*setcustomclr ldef/setprocesscolor/*setprocessclr ldef
+/setoverprint/*setop ldef/setseparationgray/*setsepgray ldef/image/*zimage
+ldef end}bdef/$curgry systemdict/currentgray get def/$setrgb systemdict
+/setrgbcolor get def/$sethsb systemdict/sethsbcolor get def/$setcmyk
+systemdict/setcmykcolor known{systemdict/setcmykcolor get}{{1 sub 4 1 roll
+3{3
+index add neg dup 0 lt{pop 0}if 3 1 roll}repeat systemdict/setrgbcolor get
+exec pop}}ifelse def/a3`{ALPS begin/setcmykcolor{gsave $setcmyk 1 $curgry
+sub
+grestore c3`}def/setrgbcolor{gsave $setrgb 1 $curgry sub grestore c3`}def
+/sethsbcolor{gsave $sethsb 1 $curgry sub grestore c3`}def/setgray{1 exch
+sub
+c3`}def/setseparationgray{1 exch sub c3`}def _spotOR?{/setcustomcolor/i3`
+ldef
+}{/setcustomcolor/b3` ldef}ifelse/setprocesscolor{gsave exch aload pop pop
+4{4
+index mul 4 1 roll}repeat $setcmyk pop 1 $curgry sub grestore c3`}def
+/setoverprint{d3`}def/image{ORimage}def end}bdef/b3`{gsave exch aload pop
+pop
+4{4 index mul 4 1 roll}repeat $setcmyk pop 1 $curgry sub grestore
+c3`}bdef/c3`
+{$gate_1 $clrOverride and{ALPS begin/$gate_1 F def _ortnt null ne{_ortnt
+mul}{
+null}ifelse _orclr exch X1` SetORColorProc a3`/$gate_1 T def end}{ALPS
+begin
+$MetalHead begin c3` end end}ifelse}bdef/d3`{$gate_1 $clrOverride and{ALPS
+begin/$gate_1 F def pop _gop X1` setoverprint a3`/$gate_1 T def end}{ALPS
+begin $MetalHead begin setoverprint end end}ifelse}bdef/ORimage{$gate_1
+$clrOverride and{ALPS begin/$gate_1 F def X1` _orclr null ne{_orclr
+customcolorimage}{separationimage}ifelse a3`/$gate_1 T def end}{ALPS begin
+$MetalHead begin image end end}ifelse}bdef/W1`{ALPS begin _prcs?
+xdef/_ortnt
+xdef dup null ne{_prcs?{findcmykprocesscolor}{findcmykcustomcolor}ifelse}if
+/_orclr xdef/_cjc?/SetORColorProc _prcs? _orclr _ortnt n2` false
+setoverprint
+/_gop false def/_spotOR? F def Y2` a3`/$clrOverride T def end}bdef/Y1`{ALPS
+begin/_gop xdef end}bdef/*findcmykcustomclr null def/*newcmykcustomclr null
+def/epsdict null def/typedict null def/*$setcustomclr null def/_spotOR? F
+def
+/$spotOverride F def/$gate_2 T def/clrAdjust? F def/_fhbool F def/f2`{ALPS
+begin dup dict/epsdict xdef dict/typedict xdef/clrAdjust? T def
+end}bdef/g2`{
+cvn 8 1 roll exch 2 array astore 1 index cvn exch typedict 3 1 roll put 5
+array astore epsdict 3 1 roll put}bdef/h2`{null exch 2 array astore exch
+cvn
+exch typedict 3 1 roll put}bdef/i2`{ALPS begin clrAdjust?{/_spotOR? T def
+e3`
+g3`/$spotOverride T def}if end}bdef/e3`{ALPS begin/*findcmykcustomclr
+/findcmykcustomcolor ldef/*newcmykcustomclr/newcmykcustomcolor ldef
+/*$setcustomclr/setcustomcolor ldef end}bdef/f3`{ALPS begin
+/findcmykcustomcolor/*findcmykcustomclr ldef/newcmykcustomcolor
+/*newcmykcustomclr ldef/setcustomcolor/*$setcustomclr ldef end}bdef/g3`{ALPS
+begin/findcmykcustomcolor/h3` ldef/newcmykcustomcolor/n3`
+ldef/setcustomcolor
+/i3` ldef end}bdef/h3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def
+dup
+cvn epsdict exch known{5 1 roll 4{pop}repeat cvn epsdict exch get aload
+pop}if
+f3` findcmykcustomcolor g3`/$gate_2 T def end}{ALPS begin $MetalHead begin
+findcmykcustomcolor end end}ifelse}bdef/n3`{$gate_2 $spotOverride and{ALPS
+begin/$gate_2 F def/_fhbool xdef dup cvn epsdict exch known{5 1 roll 4{pop}
+repeat cvn epsdict exch get aload pop}if _fhbool f3` newcmykcustomcolor g3`
+/$gate_2 T def end}{ALPS begin $MetalHead begin newcmykcustomcolor end end}
+ifelse}bdef/i3`{$gate_2 $spotOverride and{ALPS begin/$gate_2 F def 1 index
+4
+get cvn dup typedict exch known{typedict exch get aload pop 1 index null
+eq{
+exch pop mul 1 exch sub exch pop f3` setseparationgray g3`}{exch{f3` mul
+setprocesscolor g3`}{f3` mul setcustomcolor g3`}ifelse}ifelse}{pop f3`
+setcustomcolor g3`}ifelse/$gate_2 T def end}{ALPS begin $MetalHead begin
+setcustomcolor end end}ifelse}bdef/BMT 2 dict def BMT begin/*def/def load
+def
+/def{1 index/fcheckload eq{pop{pop pop}}if *def}bdef end/t1`{BMT begin}bdef
+/u1`{end}bdef/u1a`{findfont pop}bdef end/setpacking where{pop setpacking}if
+%%EndResource
+ALPS begin
+%%BeginResource: procset IMAGE_PS 1.0 1
+%%Copyright: (C) Copyright 1993 Aldus Corporation. All Rights Reserved.
+%%Version:1.0 1
+/IMdict 100 dict def IMdict begin/bdef{bind def}bind def/xdef{exch def}bdef
+/ldef{load def}bdef/ndef{1 index where{pop pop pop}{dup xcheck{bind}if def}
+ifelse}bdef/setoverprint{pop}ndef/findcmykcustomcolor{5/packedarray
+where{pop
+packedarray}{array astore readonly}ifelse}ndef/findcmykprocesscolor{5
+/packedarray where{pop packedarray}{array astore readonly}ifelse}ndef
+/setcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}
+repeat systemdict/setrgbcolor get exec pop}ndef/setcustomcolor{exch aload
+pop
+pop 4{4 index mul 4 1 roll}repeat setcmykcolor
+pop}ndef/setprocesscolor{exch
+aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndef
+/separationimage{image}ndef/iB^{/_imprcs? xdef/_imt xdef dup null
+ne{_imprcs?{
+findcmykprocesscolor}{findcmykcustomcolor}ifelse}if/_imc xdef _imc null
+eq{1
+_imt sub setseparationgray}{_imprcs?{_imc _imt setprocesscolor}{_imc
+_imt
+setcustomcolor}ifelse}ifelse}bdef/iA^{setoverprint}bdef/level2/languagelevel
+where{pop languagelevel 1 ne}{false}ifelse def/_colorexists?
+level2{statusdict
+/processcolors known{statusdict/processcolors get exec}{1}ifelse 4 eq def}{
+systemdict/setcmykcolor known def}ifelse/IMcolorbuf{0 1 2 index length 1
+sub{
+dup 2 index exch get 255 exch sub 2 index 3 1 roll put}for}bdef/IMsetcmyk{
+aload pop/_ik xdef/_iy xdef/_im xdef/_ic xdef}bdef/iC^{/packedarray
+where{pop
+dup type/packedarraytype eq 2 index type/packedarraytype eq
+or}{false}ifelse{
+/proc2 exch cvlit def/proc1 exch cvlit def proc1 aload pop proc2 aload pop
+proc1 length proc2 length add packedarray cvx}{/proc2 exch cvlit def/proc1
+exch cvlit def/newproc proc1 length proc2 length add array def newproc 0
+proc1
+putinterval newproc proc1 length proc2 putinterval newproc cvx}ifelse}bdef
+/currentcolortransfer{currenttransfer dup dup dup}ndef/setcolortransfer{
+systemdict begin settransfer end pop pop pop}ndef/customcolorimage{
+_colorexists?{aload pop pop 4 array astore IMsetcmyk
+currentcolortransfer{_ik
+mul _ik sub 1 add}iC^ 4 1 roll{_iy mul _iy sub 1 add}iC^ 4 1 roll{_im mul
+_im
+sub 1 add}iC^ 4 1 roll{_ic mul _ic sub 1 add}iC^ 4 1 roll setcolortransfer
+/_mbuf 0 string def/_ybuf 0 string def/_kbuf 0 string def{IMcolorbuf dup
+length _mbuf length ne{dup length dup dup/_mbuf exch string def/_ybuf exch
+string def/_kbuf exch string def}if dup _mbuf copy _ybuf copy _kbuf copy
+pop}
+iC^{_mbuf}{_ybuf}{_kbuf}true 4 colorimage}{aload pop pop 4 array astore
+IMsetcmyk iE^ currenttransfer{_imtint mul 1 _imtint sub add}iC^ settransfer
+image}ifelse}ndef/iE^{_ic .3 mul _im .59 mul _iy .11 mul _ik add add add
+dup 1
+gt{pop 1}if/_imtint xdef}bdef/iF^{/_imprcs? xdef/_imspotint xdef
+_colorexists?
+{currentcolortransfer{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll{
+_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll{_imspotint mul 1
+_imspotint
+sub add}iC^ 4 1 roll{_imspotint mul 1 _imspotint sub add}iC^ 4 1 roll
+setcolortransfer}{currenttransfer{_imspotint mul 1 _imspotint sub add}iC^
+settransfer}ifelse findcmykcustomcolor customcolorimage}ndef/iG^{/inv
+xdef/h
+xdef/w xdef/AsBin xdef/imbuf w 7 add 8 idiv string def w h inv[1 0 0 1 0
+0]{
+currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}imagemask}bdef
+/isCL^{/AsProcess xdef/TintPercent xdef/ColorName xdef/_k xdef/_y xdef/_m
+xdef
+/_c xdef/OverPrint xdef/bits xdef/h xdef/w xdef/AsBin xdef/imbuf w bits mul
+7
+add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf
+AsBin{readstring
+}{readhexstring}ifelse pop}OverPrint iA^ _c _m _y _k ColorName TintPercent
+AsProcess iF^}bdef/iI^{/OverPrint xdef/bits xdef/h xdef/w xdef/AsBin xdef
+/imbuf w bits mul 7 add 8 idiv string def w h bits[1 0 0 1 0 0]{currentfile
+imbuf AsBin{readstring}{readhexstring}ifelse pop}OverPrint iA^
+separationimage
+}bdef/iJ^{/bits xdef/h xdef/w xdef/AsBin xdef/imbuf w bits mul 3 mul 7 add
+8
+idiv string def w h bits[1 0 0 1 0 0]{currentfile imbuf AsBin{readstring}{
+readhexstring}ifelse pop}false 3 colorimage}bdef/iK^{/bits xdef/h xdef/w
+xdef
+/AsBin xdef/imbuf w bits mul 4 mul 7 add 8 idiv string def w h bits[1 0 0 1
+0
+0]{currentfile imbuf AsBin{readstring}{readhexstring}ifelse pop}false 4
+colorimage}bdef end
+%%EndResource
+end
+%%EndProlog
+%%BeginSetup
+ALPS begin
+/isWinPS false def
+0 k1`
+f1`
+40 v1`
+%%EndSetup
+%%Page: 1 1
+%%PageProcessColors: (atend)
+%%PageCustomColors: (atend)
+%%BeginPageSetup
+j`
+%%EndPageSetup
+/$0 bmt^
+0.05 -0.05 scale
+6120 -7920 translate
+0 0 translate
+bse^
+4.8 4.8 1 1 ps$
+300 n`
+/$1 bmt^
+o`
+N1`
+F M1`
+$1 tsi^
+/$1 bmt^
+%%IncludeResource: font Times-Italic
+/AA /|______Times-Italic T /Times-Italic x1`
+/$2 bmt^
+/AA 200 200 w1`
+T g`
+0 0 0 1 (Black) 1 T d`
+450 -1414 (TIFF Tech Note 1 - TIFF Trees) -0.015121 0 525 6 28 A1`
+O1`
+N1`
+F M1`
+/AA 200 200 w1`
+-915 1411 (An Aldus TIFF Technical Note: 1 June 1993) -0.005341 0 752 8 41
+A1`
+840 1411 (TTN1-1) 0 -0.001465 130 0 5 A1`
+O1`
+0 0 0 1 (Black) 0 T b`
+null null F a`
+0 337 -1472 984 -1397 F bh^
+N1`
+F M1`
+$2 tsi^
+/$2 bmt^
+%%IncludeResource: font Helvetica-Bold
+/AB /|______Helvetica-Bold T /Helvetica-Bold x1`
+/$3 bmt^
+/AB 320 320 w1`
+T g`
+0 0 0 1 (Black) 1 T d`
+-915 -1284 (TIFF T) -0.063797 0 200 1 5 A1`
+-720 -1284 (echnical Note 1: TIFF T) -0.063797 0 729 4 22 A1`
+6 -1284 (rees) -0.063797 0 137 0 3 A1`
+$3 tsi^
+/$3 bmt^
+%%IncludeResource: font Times-Bold
+/AC /|______Times-Bold T /Times-Bold x1`
+/$4 bmt^
+/AC 200 200 w1`
+T g`
+0 0 0 1 (Black) 1 T d`
+-68 -1126 (Motivation) 0 -0.004379 197 0 9 A1`
+$4 tsi^
+/$4 bmt^
+%%IncludeResource: font Times-Roman
+/AD /|______Times-Roman T /Times-Roman x1`
+/$5 bmt^
+/AD 200 200 w1`
+T g`
+0 0 0 1 (Black) 1 T d`
+-915 -1071 (TIFF has always supported what amounts to a singly linked list
+of IFD\325s in a single TIFF file, via the \322next IFD) -0.000885 0 1863
+21 111 A1`
+-915 -1017 (pointer,\323 though most applications currently ignore any IFD
+beyond the first one.) 0.009171 0 1355 11 80 A1`
+-915 -942 (Probably the best use for a linked list of IFD\325s is when you
+want to store multiple different but related images in) -0.003189 0 1871 21
+114 A1`
+-915 -888 (the same file. The classic example is multiple pages of a fax
+transmission.) 0.001358 0 1233 12 74 A1`
+-915 -813 (But suppose we want to define an image mask for an image. \(This
+is defined within the TIFF spec, but currently) 0.002548 0 1870 20 109 A1`
+-915 -759 (rarely used.\) That would mean two IFD\325s in the file, one for
+the main image and one for the image mask.) -0.00206 0 1750 20 102 A1`
+-915 -705 (Perhaps the image is really large, so that we would like to
+include a lower resolution version \(or \322subimage\323\) of) 0.000519 0
+1865 19 112 A1`
+-915 -651 (the image; if so, we must include a lower resolution version of
+the image mask, too. Now we have four IFD\325s in) 0.004227 0 1867 21 109
+A1`
+-915 -596 (our TIFF file. The order of the files in the linked list is
+nowhere defined in the TIFF spec, so the TIFF reader has) -0.002548 0 1878
+23 115 A1`
+-915 -542 (to be careful that it doesn\325t try to use the wrong subimage
+for the wrong purpose. The situation is still workable,) 0.003418 0 1867 20
+114 A1`
+-915 -488 (but is starting to get complicated.) 0.001389 0 555 5 34 A1`
+-915 -413 (Let\325s complicate the scenario further by saying that we want
+to include subimages and masks for each of the) -0.000839 0 1807 18 106 A1`
+-915 -359 (pages in a multiple-page fax transmission. Now things are really
+messy. Which subimage goes with which main) 0.003006 0 1867 16 106 A1`
+-915 -305 (image? We could make a list of rules, but they would be quite
+arbitrary and difficult to use.) 0.002655 0 1521 17 92 A1`
+/AC 200 200 w1`
+-44 -192 (Solution) 0 -0.006851 148 0 7 A1`
+/AD 200 200 w1`
+-915 -92 (If only we had the concept of a tree within a TIFF file, we would
+have a natural way to associate a main or) 0.00415 0 1777 23 106 A1`
+-915 -38 (\322parent\323 image with a subordinate or \322child\323 image
+such as a reduced resolution version or an image mask.) -0.001907 0 1788 17
+104 A1`
+-915 37 (One way to create a tree structure within a TIFF file is to define
+a new ) 0.001297 0 1182 16 72 A1`
+/AC 200 200 w1`
+267 37 (SubIFDs) 0 0 157 0 6 A1`
+/AD 200 200 w1`
+425 37 ( tag, of type LONG. Each) 0.001297 0 429 5 23 A1`
+-915 91 (LONG value points to a \322child\323 IFD structure.) 0.005936 0
+775 7 44 A1`
+-915 166 (This method is safe because old TIFF readers will not recognize
+the new tag, and will simply ignore it. It is) 0.001526 0 1786 20 108 A1`
+-915 220 (versatile because there is no built-in restriction concerning
+what you store in a child IFD\321a feature that may) 0.001343 0 1815 17 109
+A1`
+-915 274 (come in handy for future private and public enhancements.)
+0.009155 0 982 8 56 A1`
+-915 349 (So when should you use the NextIFD pointer at the end of an IFD
+and when should you use the ) 0.003143 0 1601 20 91 A1`
+/AC 200 200 w1`
+686 349 (SubIFDs) 0 0 157 0 6 A1`
+/AD 200 200 w1`
+844 349 ( tag?) 0.003143 0 80 1 4 A1`
+-915 404 (Use the NextIFD pointer if your application requires that
+multiple visually unrelated images be stored in the) -0.004654 0 1800 16
+108 A1`
+-915 458 (same TIFF file\321a multi-page fax transmission, for example. Use
+the ) 0.008286 0 1162 10 66 A1`
+/AC 200 200 w1`
+247 458 (SubIFDs) 0 0 157 0 6 A1`
+/AD 200 200 w1`
+404 458 ( tag for pointing to images that) 0.008286 0 514 6 31 A1`
+-915 512 (modify or add information to or otherwise \322help\323 the Parent
+image\321transparency masks and subsampled) 0.002777 0 1760 13 98 A1`
+-915 566 (versions, for example.) -0.000198 0 370 2 21 A1`
+-915 641 (No particular order or precedence is defined for child images.
+For example, if we have two child images, such as) 0.000336 0 1879 19 111
+A1`
+-915 695 (a transparency mask and a subsampled version, they can appear in
+either order.) -0.004745 0 1319 12 77 A1`
+/AC 200 200 w1`
+-49 804 (New Tag) 0.013016 0 159 1 6 A1`
+-915 912 (SubIFDs) 0 0.011658 157 0 6 A1`
+/AD 200 200 w1`
+-915 966 (Tag) 0 0.006516 65 0 2 A1`
+-802 966 (= 330 \(14A\)) -0.029495 0 206 2 10 A1`
+-915 1020 (Type) 0 0.004333 86 0 3 A1`
+-802 1020 (= LONG) -0.024002 0 150 1 5 A1`
+-915 1074 (N) 0 0 30 0 0 A1`
+-802 1074 (= number of child IFDs) -0.002029 0 394 4 21 A1`
+-915 1183 (Each LONG value is an offset \(from the beginning of the TIFF
+file, as always\) to a child IFD. Child images) -0.000946 0 1796 20 105 A1`
+-915 1237 (provide extra information for the parent image\321such as a
+transparency mask or subsampled version of the) -0.004684 0 1780 15 102 A1`
+-915 1291 (parent image.) -0.068771 0 227 1 12 A1`
+O1`
+$5 tsi^
+showpage
+$0 seni^
+%%PageTrailer
+%%PageProcessColors: Black
+%%PageCustomColors:
+%%Page: 2 2
+%%PageProcessColors: (atend)
+%%PageCustomColors: (atend)
+%%BeginPageSetup
+j`
+%%EndPageSetup
+/$0 bmt^
+0.05 -0.05 scale
+6120 -7920 translate
+0 0 translate
+bse^
+4.8 4.8 1 1 ps$
+300 n`
+/$1 bmt^
+o`
+N1`
+F M1`
+$1 tsi^
+/$1 bmt^
+%%IncludeResource: font Times-Italic
+/AA /|______Times-Italic T /Times-Italic x1`
+/$2 bmt^
+/AA 200 200 w1`
+T g`
+0 0 0 1 (Black) 1 T d`
+450 -1414 (TIFF Tech Note 1 - TIFF Trees) -0.015121 0 525 6 28 A1`
+O1`
+N1`
+F M1`
+/AA 200 200 w1`
+-915 1411 (An Aldus TIFF Technical Note: 1 June 1993) -0.005341 0 752 8 41
+A1`
+840 1411 (TTN1-2) 0 -0.001465 130 0 5 A1`
+O1`
+N1`
+F M1`
+$2 tsi^
+/$2 bmt^
+%%IncludeResource: font Times-Bold
+/AB /|______Times-Bold T /Times-Bold x1`
+/$3 bmt^
+/AB 200 200 w1`
+T g`
+0 0 0 1 (Black) 1 T d`
+-57 -1155 (Examples) 0 -0.007492 174 0 7 A1`
+$3 tsi^
+/$3 bmt^
+%%IncludeResource: font Times-Roman
+/AC /|______Times-Roman T /Times-Roman x1`
+/$4 bmt^
+/AC 200 200 w1`
+T g`
+0 0 0 1 (Black) 1 T d`
+-915 -1080 (Let\325s revisit our first example. We have a main image, a
+mask for the main image, a low res subimage, and a) 0.001923 0 1813 21 106
+A1`
+-915 -1026 (mask for the low res subimage. The IFDs in our file would look
+like this:) -0.005783 0 1218 14 72 A1`
+-116 -896 (Main Image) 0.046387 0 202 1 9 A1`
+-19 -842 (|) 0 0 8 0 0 A1`
+-165 -788 (\321\321\321\321\321\321\321\321\321\321\321\321) 0 0 500 0 11
+A1`
+-169 -734 (|) 0 0 8 0 0 A1`
+131 -734 (|) 0 0 8 0 0 A1`
+-286 -680 (LowRes Child) -0.007324 0 242 1 11 A1`
+37 -680 (Mask Child) 0.027664 0 196 1 9 A1`
+-169 -626 (|) 0 0 8 0 0 A1`
+-315 -571 (LowRes Mask Child) -0.038651 0 345 2 16 A1`
+-915 -421 (The ) 0.008774 0 75 1 3 A1`
+/AB 200 200 w1`
+-840 -421 (SubIFDs) 0 0 157 0 6 A1`
+/AC 200 200 w1`
+-682 -421 ( tag is used in both the main image and the LowRes Child image.
+In the main image, the ) 0.008774 0 1482 19 86 A1`
+/AB 200 200 w1`
+800 -421 (SubIFDs) 0 0 157 0 6 A1`
+/AC 200 200 w1`
+-915 -367 (tag has two values, which point to the beginning of the IFD
+structures for a LowRes Child and Mask Child) -0.003128 0 1780 19 103 A1`
+-915 -313 (images. In the LowRes Child image, the ) -0.003555 0 681 7 38
+A1`
+/AB 200 200 w1`
+-234 -313 (SubIFDs) 0 0 157 0 6 A1`
+/AC 200 200 w1`
+-76 -313 ( tag has only one value, the location of the IFD for a LowRes)
+-0.003555 0 1020 13 60 A1`
+-915 -259 (mask image.) 0.043533 0 211 1 10 A1`
+-915 -184 (If there is more than 1 child image for a given parent image,
+the NextIFD value of Child #1 must point to Child) 0.000336 0 1857 22 110
+A1`
+-915 -130 (#2, and so on. The last Child\325s NextIFD value must be zero.)
+0.00444 0 1002 11 58 A1`
+-915 -1 (This completes the TIFF Tree tech note.) -0.014923 0 670 6 38 A1`
+O1`
+$4 tsi^
+showpage
+$0 seni^
+%%PageTrailer
+%%PageProcessColors: Black
+%%PageCustomColors:
+%%Trailer
+end
+%%Pages: 2
+%%DocumentSuppliedResources:
+%%DocumentNeededResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+%%+ font Helvetica-Bold
+%%+ font Times-Bold
+%%DocumentProcessColors: Black
+%%DocumentCustomColors:
+%%CMYKCustomColor:
+%%EOF
diff --git a/graphics/tiff/TTN2.draft.txt b/graphics/tiff/TTN2.draft.txt
new file mode 100644
index 0000000000..dee801ee24
--- /dev/null
+++ b/graphics/tiff/TTN2.draft.txt
@@ -0,0 +1,705 @@
+DRAFT TIFF Technical Note #2 17-Mar-95
+============================
+
+This Technical Note describes serious problems that have been found in
+TIFF 6.0's design for embedding JPEG-compressed data in TIFF (Section 22
+of the TIFF 6.0 spec of 3 June 1992). A replacement TIFF/JPEG
+specification is given. Some corrections to Section 21 are also given.
+
+To permit TIFF implementations to continue to read existing files, the 6.0
+JPEG fields and tag values will remain reserved indefinitely. However,
+TIFF writers are strongly discouraged from using the 6.0 JPEG design. It
+is expected that the next full release of the TIFF specification will not
+describe the old design at all, except to note that certain tag numbers
+are reserved. The existing Section 22 will be replaced by the
+specification text given in the second part of this Tech Note.
+
+
+Problems in TIFF 6.0 JPEG
+=========================
+
+Abandoning a published spec is not a step to be taken lightly. This
+section summarizes the reasons that have forced this decision.
+TIFF 6.0's JPEG design suffers from design errors and limitations,
+ambiguities, and unnecessary complexity.
+
+
+Design errors and limitations
+-----------------------------
+
+The fundamental design error in the existing Section 22 is that JPEG's
+various tables and parameters are broken out as separate fields which the
+TIFF control logic must manage. This is bad software engineering: that
+information should be treated as private to the JPEG codec
+(compressor/decompressor). Worse, the fields themselves are specified
+without sufficient thought for future extension and without regard to
+well-established TIFF conventions. Here are some of the significant
+problems:
+
+* The JPEGxxTable fields do not store the table data directly in the
+IFD/field structure; rather, the fields hold pointers to information
+elsewhere in the file. This requires special-purpose code to be added to
+*every* TIFF-manipulating application, whether it needs to decode JPEG
+image data or not. Even a trivial TIFF editor, for example a program to
+add an ImageDescription field to a TIFF file, must be explicitly aware of
+the internal structure of the JPEG-related tables, or else it will probably
+break the file. Every other auxiliary field in the TIFF spec contains
+data, not pointers, and can be copied or relocated by standard code that
+doesn't know anything about the particular field. This is a crucial
+property of the TIFF format that must not be given up.
+
+* To manipulate these fields, the TIFF control logic is required to know a
+great deal about JPEG details, for example such arcana as how to compute
+the length of a Huffman code table --- the length is not supplied in the
+field structure and can only be found by inspecting the table contents.
+This is again a violation of good software practice. Moreover, it will
+prevent easy adoption of future JPEG extensions that might change these
+low-level details.
+
+* The design neglects the fact that baseline JPEG codecs support only two
+sets of Huffman tables: it specifies a separate table for each color
+component. This implies that encoders must waste space (by storing
+duplicate Huffman tables) or else violate the well-founded TIFF convention
+that prohibits duplicate pointers. Furthermore, baseline decoders must
+test to find out which tables are identical, a waste of time and code
+space.
+
+* The JPEGInterchangeFormat field also violates TIFF's proscription against
+duplicate pointers: the normal strip/tile pointers are expected to point
+into the larger data area pointed to by JPEGInterchangeFormat. All TIFF
+editing applications must be specifically aware of this relationship, since
+they must maintain it or else delete the JPEGInterchangeFormat field. The
+JPEGxxTables fields are also likely to point into the JPEGInterchangeFormat
+area, creating additional pointer relationships that must be maintained.
+
+* The JPEGQTables field is fixed at a byte per table entry; there is no
+way to support 16-bit quantization values. This is a serious impediment
+to extending TIFF to use 12-bit JPEG.
+
+* The 6.0 design cannot support using different quantization tables in
+different strips/tiles of an image (so as to encode some areas at higher
+quality than others). Furthermore, since quantization tables are tied
+one-for-one to color components, the design cannot support table switching
+options that are likely to be added in future JPEG revisions.
+
+
+Ambiguities
+-----------
+
+Several incompatible interpretations are possible for 6.0's treatment of
+JPEG restart markers:
+
+ * It is unclear whether restart markers must be omitted at TIFF segment
+ (strip/tile) boundaries, or whether they are optional.
+
+ * It is unclear whether the segment size is required to be chosen as
+ a multiple of the specified restart interval (if any); perhaps the
+ JPEG codec is supposed to be reset at each segment boundary as if
+ there were a restart marker there, even if the boundary does not fall
+ at a multiple of the nominal restart interval.
+
+ * The spec fails to address the question of restart marker numbering:
+ do the numbers begin again within each segment, or not?
+
+That last point is particularly nasty. If we make numbering begin again
+within each segment, we give up the ability to impose a TIFF strip/tile
+structure on an existing JPEG datastream with restarts (which was clearly a
+goal of Section 22's authors). But the other choice interferes with random
+access to the image segments: a reader must compute the first restart
+number to be expected within a segment, and must have a way to reset its
+JPEG decoder to expect a nonzero restart number first. This may not even
+be possible with some JPEG chips.
+
+The tile height restriction found on page 104 contradicts Section 15's
+general description of tiles. For an image that is not vertically
+downsampled, page 104 specifies a tile height of one MCU or 8 pixels; but
+Section 15 requires tiles to be a multiple of 16 pixels high.
+
+This Tech Note does not attempt to resolve these ambiguities, so
+implementations that follow the 6.0 design should be aware that
+inter-application compatibility problems are likely to arise.
+
+
+Unnecessary complexity
+----------------------
+
+The 6.0 design creates problems for implementations that need to keep the
+JPEG codec separate from the TIFF control logic --- for example, consider
+using a JPEG chip that was not designed specifically for TIFF. JPEG codecs
+generally want to produce or consume a standard ISO JPEG datastream, not
+just raw compressed data. (If they were to handle raw data, a separate
+out-of-band mechanism would be needed to load tables into the codec.)
+With such a codec, the TIFF control logic must parse JPEG markers emitted
+by the codec to create the TIFF table fields (when writing) or synthesize
+JPEG markers from the TIFF fields to feed the codec (when reading). This
+means that the control logic must know a great deal more about JPEG details
+than we would like. The parsing and reconstruction of the markers also
+represents a fair amount of unnecessary work.
+
+Quite a few implementors have proposed writing "TIFF/JPEG" files in which
+a standard JPEG datastream is simply dumped into the file and pointed to
+by JPEGInterchangeFormat. To avoid parsing the JPEG datastream, they
+suggest not writing the JPEG auxiliary fields (JPEGxxTables etc) nor even
+the basic TIFF strip/tile data pointers. This approach is incompatible
+with implementations that handle the full TIFF 6.0 JPEG design, since they
+will expect to find strip/tile pointers and auxiliary fields. Indeed this
+is arguably not TIFF at all, since *all* TIFF-reading applications expect
+to find strip or tile pointers. A subset implementation that is not
+upward-compatible with the full spec is clearly unacceptable. However,
+the frequency with which this idea has come up makes it clear that
+implementors find the existing Section 22 too complex.
+
+
+Overview of the solution
+========================
+
+To solve these problems, we adopt a new design for embedding
+JPEG-compressed data in TIFF files. The new design uses only complete,
+uninterpreted ISO JPEG datastreams, so it should be much more forgiving of
+extensions to the ISO standard. It should also be far easier to implement
+using unmodified JPEG codecs.
+
+To reduce overhead in multi-segment TIFF files, we allow JPEG overhead
+tables to be stored just once in a JPEGTables auxiliary field. This
+feature does not violate the integrity of the JPEG datastreams, because it
+uses the notions of "tables-only datastreams" and "abbreviated image
+datastreams" as defined by the ISO standard.
+
+To prevent confusion with the old design, the new design is given a new
+Compression tag value, Compression=7. Readers that need to handle
+existing 6.0 JPEG files may read both old and new files, using whatever
+interpretation of the 6.0 spec they did before. Compression tag value 6
+and the field tag numbers defined by 6.0 section 22 will remain reserved
+indefinitely, even though detailed descriptions of them will be dropped
+from future editions of the TIFF specification.
+
+
+Replacement TIFF/JPEG specification
+===================================
+
+[This section of the Tech Note is expected to replace Section 22 in the
+next release of the TIFF specification.]
+
+This section describes TIFF compression scheme 7, a high-performance
+compression method for continuous-tone images.
+
+Introduction
+------------
+
+This TIFF compression method uses the international standard for image
+compression ISO/IEC 10918-1, usually known as "JPEG" (after the original
+name of the standards committee, Joint Photographic Experts Group). JPEG
+is a joint ISO/CCITT standard for compression of continuous-tone images.
+
+The JPEG committee decided that because of the broad scope of the standard,
+no one algorithmic procedure was able to satisfy the requirements of all
+applications. Instead, the JPEG standard became a "toolkit" of multiple
+algorithms and optional capabilities. Individual applications may select
+a subset of the JPEG standard that meets their requirements.
+
+The most important distinction among the JPEG processes is between lossy
+and lossless compression. Lossy compression methods provide high
+compression but allow only approximate reconstruction of the original
+image. JPEG's lossy processes allow the encoder to trade off compressed
+file size against reconstruction fidelity over a wide range. Typically,
+10:1 or more compression of full-color data can be obtained while keeping
+the reconstructed image visually indistinguishable from the original. Much
+higher compression ratios are possible if a low-quality reconstructed image
+is acceptable. Lossless compression provides exact reconstruction of the
+source data, but the achievable compression ratio is much lower than for
+the lossy processes; JPEG's rather simple lossless process typically
+achieves around 2:1 compression of full-color data.
+
+The most widely implemented JPEG subset is the "baseline" JPEG process.
+This provides lossy compression of 8-bit-per-channel data. Optional
+extensions include 12-bit-per-channel data, arithmetic entropy coding for
+better compression, and progressive/hierarchical representations. The
+lossless process is an independent algorithm that has little in
+common with the lossy processes.
+
+It should be noted that the optional arithmetic-coding extension is subject
+to several US and Japanese patents. To avoid patent problems, use of
+arithmetic coding processes in TIFF files intended for inter-application
+interchange is discouraged.
+
+All of the JPEG processes are useful only for "continuous tone" data,
+in which the difference between adjacent pixel values is usually small.
+Low-bit-depth source data is not appropriate for JPEG compression, nor
+are palette-color images good candidates. The JPEG processes work well
+on grayscale and full-color data.
+
+Describing the JPEG compression algorithms in sufficient detail to permit
+implementation would require more space than we have here. Instead, we
+refer the reader to the References section.
+
+
+What data is being compressed?
+------------------------------
+
+In lossy JPEG compression, it is customary to convert color source data
+to YCbCr and then downsample it before JPEG compression. This gives
+2:1 data compression with hardly any visible image degradation, and it
+permits additional space savings within the JPEG compression step proper.
+However, these steps are not considered part of the ISO JPEG standard.
+The ISO standard is "color blind": it accepts data in any color space.
+
+For TIFF purposes, the JPEG compression tag is considered to represent the
+ISO JPEG compression standard only. The ISO standard is applied to the
+same data that would be stored in the TIFF file if no compression were
+used. Therefore, if color conversion or downsampling are used, they must
+be reflected in the regular TIFF fields; these steps are not considered to
+be implicit in the JPEG compression tag value. PhotometricInterpretation
+and related fields shall describe the color space actually stored in the
+file. With the TIFF 6.0 field definitions, downsampling is permissible
+only for YCbCr data, and it must correspond to the YCbCrSubSampling field.
+(Note that the default value for this field is not 1,1; so the default for
+YCbCr is to apply downsampling!) It is likely that future versions of TIFF
+will provide additional PhotometricInterpretation values and a more general
+way of defining subsampling, so as to allow more flexibility in
+JPEG-compressed files. But that issue is not addressed in this Tech Note.
+
+Implementors should note that many popular JPEG codecs
+(compressor/decompressors) provide automatic color conversion and
+downsampling, so that the application may supply full-size RGB data which
+is nonetheless converted to downsampled YCbCr. This is an implementation
+convenience which does not excuse the TIFF control layer from its
+responsibility to know what is really going on. The
+PhotometricInterpretation and subsampling fields written to the file must
+describe what is actually in the file.
+
+A JPEG-compressed TIFF file will typically have PhotometricInterpretation =
+YCbCr and YCbCrSubSampling = [2,1] or [2,2], unless the source data was
+grayscale or CMYK.
+
+
+Basic representation of JPEG-compressed images
+----------------------------------------------
+
+JPEG compression works in either strip-based or tile-based TIFF files.
+Rather than repeating "strip or tile" constantly, we will use the term
+"segment" to mean either a strip or a tile.
+
+When the Compression field has the value 7, each image segment contains
+a complete JPEG datastream which is valid according to the ISO JPEG
+standard (ISO/IEC 10918-1). Any sequential JPEG process can be used,
+including lossless JPEG, but progressive and hierarchical processes are not
+supported. Since JPEG is useful only for continuous-tone images, the
+PhotometricInterpretation of the image shall not be 3 (palette color) nor
+4 (transparency mask). The bit depth of the data is also restricted as
+specified below.
+
+Each image segment in a JPEG-compressed TIFF file shall contain a valid
+JPEG datastream according to the ISO JPEG standard's rules for
+interchange-format or abbreviated-image-format data. The datastream shall
+contain a single JPEG frame storing that segment of the image. The
+required JPEG markers within a segment are:
+ SOI (must appear at very beginning of segment)
+ SOFn
+ SOS (one for each scan, if there is more than one scan)
+ EOI (must appear at very end of segment)
+The actual compressed data follows SOS; it may contain RSTn markers if DRI
+is used.
+
+Additional JPEG "tables and miscellaneous" markers may appear between SOI
+and SOFn, between SOFn and SOS, and before each subsequent SOS if there is
+more than one scan. These markers include:
+ DQT
+ DHT
+ DAC (not to appear unless arithmetic coding is used)
+ DRI
+ APPn (shall be ignored by TIFF readers)
+ COM (shall be ignored by TIFF readers)
+DNL markers shall not be used in TIFF files. Readers should abort if any
+other marker type is found, especially the JPEG reserved markers;
+occurrence of such a marker is likely to indicate a JPEG extension.
+
+The tables/miscellaneous markers may appear in any order. Readers are
+cautioned that although the SOFn marker refers to DQT tables, JPEG does not
+require those tables to precede the SOFn, only the SOS. Missing-table
+checks should be made when SOS is reached.
+
+If no JPEGTables field is used, then each image segment shall be a complete
+JPEG interchange datastream. Each segment must define all the tables it
+references. To allow readers to decode segments in any order, no segment
+may rely on tables being carried over from a previous segment.
+
+When a JPEGTables field is used, image segments may omit tables that have
+been specified in the JPEGTables field. Further details appear below.
+
+The SOFn marker shall be of type SOF0 for strict baseline JPEG data, of
+type SOF1 for non-baseline lossy JPEG data, or of type SOF3 for lossless
+JPEG data. (SOF9 or SOF11 would be used for arithmetic coding.) All
+segments of a JPEG-compressed TIFF image shall use the same JPEG
+compression process, in particular the same SOFn type.
+
+The data precision field of the SOFn marker shall agree with the TIFF
+BitsPerSample field. (Note that when PlanarConfiguration=1, this implies
+that all components must have the same BitsPerSample value; when
+PlanarConfiguration=2, different components could have different bit
+depths.) For SOF0 only precision 8 is permitted; for SOF1, precision 8 or
+12 is permitted; for SOF3, precisions 2 to 16 are permitted.
+
+The image dimensions given in the SOFn marker shall agree with the logical
+dimensions of that particular strip or tile. For strip images, the SOFn
+image width shall equal ImageWidth and the height shall equal RowsPerStrip,
+except in the last strip; its SOFn height shall equal the number of rows
+remaining in the ImageLength. (In other words, no padding data is counted
+in the SOFn dimensions.) For tile images, each SOFn shall have width
+TileWidth and height TileHeight; adding and removing any padding needed in
+the edge tiles is the concern of some higher level of the TIFF software.
+(The dimensional rules are slightly different when PlanarConfiguration=2,
+as described below.)
+
+The ISO JPEG standard only permits images up to 65535 pixels in width or
+height, due to 2-byte fields in the SOFn markers. In TIFF, this limits
+the size of an individual JPEG-compressed strip or tile, but the total
+image size can be greater.
+
+The number of components in the JPEG datastream shall equal SamplesPerPixel
+for PlanarConfiguration=1, and shall be 1 for PlanarConfiguration=2. The
+components shall be stored in the same order as they are described at the
+TIFF field level. (This applies both to their order in the SOFn marker,
+and to the order in which they are scanned if multiple JPEG scans are
+used.) The component ID bytes are arbitrary so long as each component
+within an image segment is given a distinct ID. To avoid any possible
+confusion, we require that all segments of a TIFF image use the same ID
+code for a given component.
+
+In PlanarConfiguration 1, the sampling factors given in SOFn markers shall
+agree with the sampling factors defined by the related TIFF fields (or with
+the default values that are specified in the absence of those fields).
+
+When DCT-based JPEG is used in a strip TIFF file, RowsPerStrip is required
+to be a multiple of 8 times the largest vertical sampling factor, i.e., a
+multiple of the height of an interleaved MCU. (For simplicity of
+specification, we require this even if the data is not actually
+interleaved.) For example, if YCbCrSubSampling = [2,2] then RowsPerStrip
+must be a multiple of 16. An exception to this rule is made for
+single-strip images (RowsPerStrip >= ImageLength): the exact value of
+RowsPerStrip is unimportant in that case. This rule ensures that no data
+padding is needed at the bottom of a strip, except perhaps the last strip.
+Any padding required at the right edge of the image, or at the bottom of
+the last strip, is expected to occur internally to the JPEG codec.
+
+When DCT-based JPEG is used in a tiled TIFF file, TileLength is required
+to be a multiple of 8 times the largest vertical sampling factor, i.e.,
+a multiple of the height of an interleaved MCU; and TileWidth is required
+to be a multiple of 8 times the largest horizontal sampling factor, i.e.,
+a multiple of the width of an interleaved MCU. (For simplicity of
+specification, we require this even if the data is not actually
+interleaved.) All edge padding required will therefore occur in the course
+of normal TIFF tile padding; it is not special to JPEG.
+
+Lossless JPEG does not impose these constraints on strip and tile sizes,
+since it is not DCT-based.
+
+Note that within JPEG datastreams, multibyte values appear in the MSB-first
+order specified by the JPEG standard, regardless of the byte ordering of
+the surrounding TIFF file.
+
+
+JPEGTables field
+----------------
+
+The only auxiliary TIFF field added for Compression=7 is the optional
+JPEGTables field. The purpose of JPEGTables is to predefine JPEG
+quantization and/or Huffman tables for subsequent use by JPEG image
+segments. When this is done, these rather bulky tables need not be
+duplicated in each segment, thus saving space and processing time.
+JPEGTables may be used even in a single-segment file, although there is no
+space savings in that case.
+
+JPEGTables:
+ Tag = 347 (15B.H)
+ Type = UNDEFINED
+ N = number of bytes in tables datastream, typically a few hundred
+JPEGTables provides default JPEG quantization and/or Huffman tables which
+are used whenever a segment datastream does not contain its own tables, as
+specified below.
+
+Notice that the JPEGTables field is required to have type code UNDEFINED,
+not type code BYTE. This is to cue readers that expanding individual bytes
+to short or long integers is not appropriate. A TIFF reader will generally
+need to store the field value as an uninterpreted byte sequence until it is
+fed to the JPEG decoder.
+
+Multibyte quantities within the tables follow the ISO JPEG convention of
+MSB-first storage, regardless of the byte ordering of the surrounding TIFF
+file.
+
+When the JPEGTables field is present, it shall contain a valid JPEG
+"abbreviated table specification" datastream. This datastream shall begin
+with SOI and end with EOI. It may contain zero or more JPEG "tables and
+miscellaneous" markers, namely:
+ DQT
+ DHT
+ DAC (not to appear unless arithmetic coding is used)
+ DRI
+ APPn (shall be ignored by TIFF readers)
+ COM (shall be ignored by TIFF readers)
+Since JPEG defines the SOI marker to reset the DAC and DRI state, these two
+markers' values cannot be carried over into any image datastream, and thus
+they are effectively no-ops in the JPEGTables field. To avoid confusion,
+it is recommended that writers not place DAC or DRI markers in JPEGTables.
+However readers must properly skip over them if they appear.
+
+When JPEGTables is present, readers shall load the table specifications
+contained in JPEGTables before processing image segment datastreams.
+Image segments may simply refer to these preloaded tables without defining
+them. An image segment can still define and use its own tables, subject to
+the restrictions below.
+
+An image segment may not redefine any table defined in JPEGTables. (This
+restriction is imposed to allow readers to process image segments in random
+order without having to reload JPEGTables between segments.) Therefore, use
+of JPEGTables divides the available table slots into two groups: "global"
+slots are defined in JPEGTables and may be used but not redefined by
+segments; "local" slots are available for local definition and use in each
+segment. To permit random access, a segment may not reference any local
+tables that it does not itself define.
+
+
+Special considerations for PlanarConfiguration 2
+------------------------------------------------
+
+In PlanarConfiguration 2, each image segment contains data for only one
+color component. To avoid confusing the JPEG codec, we wish the segments
+to look like valid single-channel (i.e., grayscale) JPEG datastreams. This
+means that different rules must be used for the SOFn parameters.
+
+In PlanarConfiguration 2, the dimensions given in the SOFn of a subsampled
+component shall be scaled down by the sampling factors compared to the SOFn
+dimensions that would be used in PlanarConfiguration 1. This is necessary
+to match the actual number of samples stored in that segment, so that the
+JPEG codec doesn't complain about too much or too little data. In strip
+TIFF files the computed dimensions may need to be rounded up to the next
+integer; in tiled files, the restrictions on tile size make this case
+impossible.
+
+Furthermore, all SOFn sampling factors shall be given as 1. (This is
+merely to avoid confusion, since the sampling factors in a single-channel
+JPEG datastream have no real effect.)
+
+Any downsampling will need to happen externally to the JPEG codec, since
+JPEG sampling factors are defined with reference to the full-precision
+component. In PlanarConfiguration 2, the JPEG codec will be working on
+only one component at a time and thus will have no reference component to
+downsample against.
+
+
+Minimum requirements for TIFF/JPEG
+----------------------------------
+
+ISO JPEG is a large and complex standard; most implementations support only
+a subset of it. Here we define a "core" subset of TIFF/JPEG which readers
+must support to claim TIFF/JPEG compatibility. For maximum
+cross-application compatibility, we recommend that writers confine
+themselves to this subset unless there is very good reason to do otherwise.
+
+Use the ISO baseline JPEG process: 8-bit data precision, Huffman coding,
+with no more than 2 DC and 2 AC Huffman tables. Note that this implies
+BitsPerSample = 8 for each component. We recommend deviating from baseline
+JPEG only if 12-bit data precision or lossless coding is required.
+
+Use no subsampling (all JPEG sampling factors = 1) for color spaces other
+than YCbCr. (This is, in fact, required with the TIFF 6.0 field
+definitions, but may not be so in future revisions.) For YCbCr, use one of
+the following choices:
+ YCbCrSubSampling field JPEG sampling factors
+ 1,1 1h1v, 1h1v, 1h1v
+ 2,1 2h1v, 1h1v, 1h1v
+ 2,2 (default value) 2h2v, 1h1v, 1h1v
+We recommend that RGB source data be converted to YCbCr for best compression
+results. Other source data colorspaces should probably be left alone.
+Minimal readers need not support JPEG images with colorspaces other than
+YCbCr and grayscale (PhotometricInterpretation = 6 or 1).
+
+A minimal reader also need not support JPEG YCbCr images with nondefault
+values of YCbCrCoefficients or YCbCrPositioning, nor with values of
+ReferenceBlackWhite other than [0,255,128,255,128,255]. (These values
+correspond to the RGB<=>YCbCr conversion specified by JFIF, which is widely
+implemented in JPEG codecs.)
+
+Writers are reminded that a ReferenceBlackWhite field *must* be included
+when PhotometricInterpretation is YCbCr, because the default
+ReferenceBlackWhite values are inappropriate for YCbCr.
+
+If any subsampling is used, PlanarConfiguration=1 is preferred to avoid the
+possibly-confusing requirements of PlanarConfiguration=2. In any case,
+readers are not required to support PlanarConfiguration=2.
+
+If possible, use a single interleaved scan in each image segment. This is
+not legal JPEG if there are more than 4 SamplesPerPixel or if the sampling
+factors are such that more than 10 blocks would be needed per MCU; in that
+case, use a separate scan for each component. (The recommended color
+spaces and sampling factors will not run into that restriction, so a
+minimal reader need not support more than one scan per segment.)
+
+To claim TIFF/JPEG compatibility, readers shall support multiple-strip TIFF
+files and the optional JPEGTables field; it is not acceptable to read only
+single-datastream files. Support for tiled TIFF files is strongly
+recommended but not required.
+
+
+Other recommendations for implementors
+--------------------------------------
+
+The TIFF tag Compression=7 guarantees only that the compressed data is
+represented as ISO JPEG datastreams. Since JPEG is a large and evolving
+standard, readers should apply careful error checking to the JPEG markers
+to ensure that the compression process is within their capabilities. In
+particular, to avoid being confused by future extensions to the JPEG
+standard, it is important to abort if unknown marker codes are seen.
+
+The point of requiring that all image segments use the same JPEG process is
+to ensure that a reader need check only one segment to determine whether it
+can handle the image. For example, consider a TIFF reader that has access
+to fast but restricted JPEG hardware, as well as a slower, more general
+software implementation. It is desirable to check only one image segment
+to find out whether the fast hardware can be used. Thus, writers should
+try to ensure that all segments of an image look as much "alike" as
+possible: there should be no variation in scan layout, use of options such
+as DRI, etc. Ideally, segments will be processed identically except
+perhaps for using different local quantization or entropy-coding tables.
+
+Writers should avoid including "noise" JPEG markers (COM and APPn markers).
+Standard TIFF fields provide a better way to transport any non-image data.
+Some JPEG codecs may change behavior if they see an APPn marker they
+think they understand; since the TIFF spec requires these markers to be
+ignored, this behavior is undesirable.
+
+It is possible to convert an interchange-JPEG file (e.g., a JFIF file) to
+TIFF simply by dropping the interchange datastream into a single strip.
+(However, designers are reminded that the TIFF spec discourages huge
+strips; splitting the image is somewhat more work but may give better
+results.) Conversion from TIFF to interchange JPEG is more complex. A
+strip-based TIFF/JPEG file can be converted fairly easily if all strips use
+identical JPEG tables and no RSTn markers: just delete the overhead markers
+and insert RSTn markers between strips. Converting tiled images is harder,
+since the data will usually not be in the right order (unless the tiles are
+only one MCU high). This can still be done losslessly, but it will require
+undoing and redoing the entropy coding so that the DC coefficient
+differences can be updated.
+
+There is no default value for JPEGTables: standard TIFF files must define all
+tables that they reference. For some closed systems in which many files will
+have identical tables, it might make sense to define a default JPEGTables
+value to avoid actually storing the tables. Or even better, invent a
+private field selecting one of N default JPEGTables settings, so as to allow
+for future expansion. Either of these must be regarded as a private
+extension that will render the files unreadable by other applications.
+
+
+References
+----------
+
+[1] Wallace, Gregory K. "The JPEG Still Picture Compression Standard",
+Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
+
+This is the best short technical introduction to the JPEG algorithms.
+It is a good overview but does not provide sufficiently detailed
+information to write an implementation.
+
+[2] Pennebaker, William B. and Mitchell, Joan L. "JPEG Still Image Data
+Compression Standard", Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.
+638pp.
+
+This textbook is by far the most complete exposition of JPEG in existence.
+It includes the full text of the ISO JPEG standards (DIS 10918-1 and draft
+DIS 10918-2). No would-be JPEG implementor should be without it.
+
+[3] ISO/IEC IS 10918-1, "Digital Compression and Coding of Continuous-tone
+Still Images, Part 1: Requirements and guidelines", February 1994.
+ISO/IEC DIS 10918-2, "Digital Compression and Coding of Continuous-tone
+Still Images, Part 2: Compliance testing", final approval expected 1994.
+
+These are the official standards documents. Note that the Pennebaker and
+Mitchell textbook is likely to be cheaper and more useful than the official
+standards.
+
+
+Changes to Section 21: YCbCr Images
+===================================
+
+[This section of the Tech Note clarifies section 21 to make clear the
+interpretation of image dimensions in a subsampled image. Furthermore,
+the section is changed to allow the original image dimensions not to be
+multiples of the sampling factors. This change is necessary to support use
+of JPEG compression on odd-size images.]
+
+Add the following paragraphs to the Section 21 introduction (p. 89),
+just after the paragraph beginning "When a Class Y image is subsampled":
+
+ In a subsampled image, it is understood that all TIFF image
+ dimensions are measured in terms of the highest-resolution
+ (luminance) component. In particular, ImageWidth, ImageLength,
+ RowsPerStrip, TileWidth, TileLength, XResolution, and YResolution
+ are measured in luminance samples.
+
+ RowsPerStrip, TileWidth, and TileLength are constrained so that
+ there are an integral number of samples of each component in a
+ complete strip or tile. However, ImageWidth/ImageLength are not
+ constrained. If an odd-size image is to be converted to subsampled
+ format, the writer should pad the source data to a multiple of the
+ sampling factors by replication of the last column and/or row, then
+ downsample. The number of luminance samples actually stored in the
+ file will be a multiple of the sampling factors. Conversely,
+ readers must ignore any extra data (outside the specified image
+ dimensions) after upsampling.
+
+ When PlanarConfiguration=2, each strip or tile covers the same
+ image area despite subsampling; that is, the total number of strips
+ or tiles in the image is the same for each component. Therefore
+ strips or tiles of the subsampled components contain fewer samples
+ than strips or tiles of the luminance component.
+
+ If there are extra samples per pixel (see field ExtraSamples),
+ these data channels have the same number of samples as the
+ luminance component.
+
+Rewrite the YCbCrSubSampling field description (pp 91-92) as follows
+(largely to eliminate possibly-misleading references to
+ImageWidth/ImageLength of the subsampled components):
+
+ (first paragraph unchanged)
+
+ The two elements of this field are defined as follows:
+
+ Short 0: ChromaSubsampleHoriz:
+
+ 1 = there are equal numbers of luma and chroma samples horizontally.
+
+ 2 = there are twice as many luma samples as chroma samples
+ horizontally.
+
+ 4 = there are four times as many luma samples as chroma samples
+ horizontally.
+
+ Short 1: ChromaSubsampleVert:
+
+ 1 = there are equal numbers of luma and chroma samples vertically.
+
+ 2 = there are twice as many luma samples as chroma samples
+ vertically.
+
+ 4 = there are four times as many luma samples as chroma samples
+ vertically.
+
+ ChromaSubsampleVert shall always be less than or equal to
+ ChromaSubsampleHoriz. Note that Cb and Cr have the same sampling
+ ratios.
+
+ In a strip TIFF file, RowsPerStrip is required to be an integer
+ multiple of ChromaSubSampleVert (unless RowsPerStrip >=
+ ImageLength, in which case its exact value is unimportant).
+ If ImageWidth and ImageLength are not multiples of
+ ChromaSubsampleHoriz and ChromaSubsampleVert respectively, then the
+ source data shall be padded to the next integer multiple of these
+ values before downsampling.
+
+ In a tiled TIFF file, TileWidth must be an integer multiple of
+ ChromaSubsampleHoriz and TileLength must be an integer multiple of
+ ChromaSubsampleVert. Padding will occur to tile boundaries.
+
+ The default values of this field are [ 2,2 ]. Thus, YCbCr data is
+ downsampled by default!
diff --git a/graphics/tiff/TTN2.draft.txt.gz b/graphics/tiff/TTN2.draft.txt.gz
new file mode 100644
index 0000000000..acb9b36b29
--- /dev/null
+++ b/graphics/tiff/TTN2.draft.txt.gz
Binary files differ
diff --git a/graphics/tiff/tiff-v3.4-tar.gz b/graphics/tiff/tiff-v3.4-tar.gz
new file mode 100644
index 0000000000..d69a24777a
--- /dev/null
+++ b/graphics/tiff/tiff-v3.4-tar.gz
Binary files differ
diff --git a/graphics/tiff/tiff-v3.4beta018-tar.gz b/graphics/tiff/tiff-v3.4beta018-tar.gz
new file mode 100644
index 0000000000..97b7a24851
--- /dev/null
+++ b/graphics/tiff/tiff-v3.4beta018-tar.gz
Binary files differ
diff --git a/graphics/tiff/tiff-v3.4beta024-tar.gz b/graphics/tiff/tiff-v3.4beta024-tar.gz
new file mode 100644
index 0000000000..7e658796da
--- /dev/null
+++ b/graphics/tiff/tiff-v3.4beta024-tar.gz
Binary files differ
diff --git a/graphics/tiff/tiff-v3.4beta028-tar.gz b/graphics/tiff/tiff-v3.4beta028-tar.gz
new file mode 100644
index 0000000000..65375cfa42
--- /dev/null
+++ b/graphics/tiff/tiff-v3.4beta028-tar.gz
Binary files differ
diff --git a/graphics/tiff/tiff-v3.4beta029-tar.gz b/graphics/tiff/tiff-v3.4beta029-tar.gz
new file mode 100644
index 0000000000..33360ef299
--- /dev/null
+++ b/graphics/tiff/tiff-v3.4beta029-tar.gz
Binary files differ
diff --git a/graphics/tiff/v3.4.0.patch-01 b/graphics/tiff/v3.4.0.patch-01
new file mode 100644
index 0000000000..353949674f
--- /dev/null
+++ b/graphics/tiff/v3.4.0.patch-01
@@ -0,0 +1,752 @@
+#! /bin/sh
+#
+# This is a shell script that converts tiff-v3.4beta016 to tiff-v3.4beta018
+#
+TOP=.
+
+findBinary()
+{
+ IFS=:
+ for i in $PATH; do
+ test -x $i/$1 && return
+ done
+ echo "Fatal error: this shell script requires $2."
+ exit 1
+}
+findBinary patch "Larry Wall's patch program"
+
+Patch()
+{
+ echo "Patch $1:"
+ patch -s $TOP/$1
+}
+
+NewFile()
+{
+ echo "New file $1"
+ cat >$TOP/$1
+}
+
+NewDir()
+{
+ echo "New directory $1"
+ mkdir "$TOP/$1"
+}
+
+RmDir()
+{
+ echo "Remove directory $1"
+ rm -rf $TOP/$1.orig
+ mv $TOP/$1 $TOP/$1.orig
+}
+
+RmFile()
+{
+ echo "Remove $1"
+ rm -f $TOP/$1.orig
+ mv $TOP/$1 $TOP/$1.orig
+}
+
+Patch Makefile.in<<'EOF-EOF-EOF'
+2c2
+< # $Header: /usr/people/sam/tiff/RCS/Makefile.in,v 1.24 1995/07/08 00:01:56 sam Exp $
+---
+> # $Header: /usr/people/sam/tiff/RCS/Makefile.in,v 1.25 1995/07/19 01:53:48 sam Exp $
+257a258
+> html/v3.4beta018.html \
+EOF-EOF-EOF
+Patch config.guess<<'EOF-EOF-EOF'
+127c127
+< *:IRIX:*:*)
+---
+> *:IRIX*:*:*)
+EOF-EOF-EOF
+Patch config.site<<'EOF-EOF-EOF'
+1c1
+< # $Header: /usr/people/sam/tiff/RCS/config.site,v 1.3 1995/06/30 04:43:04 sam Exp $
+---
+> # $Header: /usr/people/sam/tiff/RCS/config.site,v 1.5 1995/07/17 14:53:35 sam Exp $
+60a61,63
+> # NB: JPEG support requires release 5 or later of the IJG code,
+> # which you can find on the Internet at ftp.uu.net:/graphics/jpeg/.
+> #
+66a70,73
+> # NB: Deflate support requires version 0.92 or later of the libgz
+> # library written by Jean-loup Gailly and Mark Adler. The library
+> # was last found at ftp://ftp.uu.net/graphics/png/code/zlib-0.93.tar.gz.
+> #
+68c75
+< #LIBGZ="-L \${ZIPDIR} -llibgz" # libgz library to load
+---
+> #LIBGZ="-L \${ZIPDIR} -lgz" # libgz library to load
+EOF-EOF-EOF
+Patch configure<<'EOF-EOF-EOF'
+2c2
+< # $Header: /usr/people/sam/tiff/RCS/configure,v 1.12 1995/07/03 16:05:40 sam Exp $
+---
+> # $Header: /usr/people/sam/tiff/RCS/configure,v 1.15 1995/07/17 14:57:08 sam Exp $
+144c144
+< echo "This is TIFF configure $Revision: 1.12 $"
+---
+> echo "This is TIFF configure $Revision: 1.15 $"
+381,382c381,404
+< ISGCC=no; CCOMPILER=
+< for i in $CC gcc cc ncc dcc xlc gcc2; do
+---
+> CCOMPILER=
+> for i in $CC gcc cc ncc dcc xlc c89 gcc2; do
+> if isGNU $i; then
+> ISGCC=yes
+> else
+> ISGCC=no
+> fi
+> #
+> # Guess special options needed to get an
+> # ANSI C compiler and/or similar. Should
+> # probably be combined with above checks
+> # so we only select an ANSI C compiler.
+> #
+> if [ -z "$ENVOPTS" ]; then
+> case $ISGCC-$TARGET in
+> no-*-irix*) C_ANSI=-ansi;;
+> no-*-hp*) C_ANSI="-Aa -D_HPUX_SOURCE -Dhpux";;
+> no-*-apollo-*) C_ANSI="-A nansi";;
+> *-sco*) C_ANSI="-Dsco";;
+> *-aix*) C_ANSI="-Dunix -qlanglvl=ansi -qsrcmsg" ;;
+> esac
+> else
+> C_ANSI="$ENVOPTS"
+> fi
+384,387c406
+< ($i -o dummy $ENVOPTS dummy.c) >/dev/null 2>&5 && {
+< if isGNU $i; then
+< ISGCC=yes
+< fi
+---
+> ($i -o dummy $C_ANSI dummy.c) >/dev/null 2>&5 && {
+389a409,411
+> if [ -z "$ENVOPTS" ]; then
+> ENVOPTS="$C_ANSI"
+> fi
+413,426d434
+< #
+< # Guess special options needed to get an
+< # ANSI C compiler and/or similar. Should
+< # probably be combined with above checks
+< # so we only select an ANSI C compiler.
+< #
+< if [ -z "$ENVOPTS" ]; then
+< case $ISGCC-$TARGET in
+< no-*-irix*) ENVOPTS=-ansi;;
+< no-*-hp*) ENVOPTS="-Aa -D_HPUX_SOURCE -Dhpux";;
+< no-*-apollo-*) ENVOPTS="-A nansi";;
+< *-sco*) ENVOPTS="-Dsco";;
+< esac
+< fi
+724c732
+< #ifdef __osf__
+---
+> #if defined(__osf__) || defined(_AIX)
+942c950
+< *-irix5*)
+---
+> *-irix*)
+EOF-EOF-EOF
+Patch dist/tiff.alpha<<'EOF-EOF-EOF'
+1c1
+< define ALPHA 016
+---
+> define ALPHA 018
+EOF-EOF-EOF
+Patch html/Makefile.in<<'EOF-EOF-EOF'
+1c1
+< # $Header: /usr/people/sam/tiff/html/RCS/Makefile.in,v 1.3 1995/06/30 23:28:32 sam Exp $
+---
+> # $Header: /usr/people/sam/tiff/html/RCS/Makefile.in,v 1.4 1995/07/19 01:54:06 sam Exp $
+64a65,66
+> v3.4beta016.html \
+> v3.4beta018.html \
+EOF-EOF-EOF
+Patch html/index.html<<'EOF-EOF-EOF'
+15c15
+< <B>Latest Software</B>: <A HREF="v3.4beta016.html">v3.4beta016</A><BR>
+---
+> <B>Latest Software</B>: <A HREF="v3.4beta018.html">v3.4beta018</A><BR>
+84c84
+< Last updated: $Date: 1995/07/07 02:34:32 $
+---
+> Last updated: $Date: 1995/07/19 01:54:06 $
+EOF-EOF-EOF
+Patch libtiff/Makefile.in<<'EOF-EOF-EOF'
+1c1
+< # $Header: /usr/people/sam/tiff/libtiff/RCS/Makefile.in,v 1.19 1995/07/05 21:09:18 sam Exp $
+---
+> # $Header: /usr/people/sam/tiff/libtiff/RCS/Makefile.in,v 1.20 1995/07/17 19:26:25 sam Exp $
+70d69
+< INCS = tiff.h tiffio.h
+261a261,262
+> INCS = ${SRCDIR}/tiff.h ${SRCDIR}/tiffio.h
+>
+264a266
+> f=`basename $$i`; \
+266c268
+< -src ${SRCDIR}/$$i -O $$i; \
+---
+> -src $$i -O $$f; \
+EOF-EOF-EOF
+Patch libtiff/mkg3states.c<<'EOF-EOF-EOF'
+1c1
+< /* "$Header: /usr/people/sam/tiff/libtiff/RCS/mkg3states.c,v 1.30 1995/06/07 17:19:51 sam Exp $ */
+---
+> /* "$Header: /usr/people/sam/tiff/libtiff/RCS/mkg3states.c,v 1.31 1995/07/17 01:27:30 sam Exp $ */
+28,45c28,31
+< Copyright (C) 1990, 1995 Frank D. Cringle.
+<
+< This file is part of viewfax - g3/g4 fax processing software.
+<
+< viewfax is free software; you can redistribute it and/or modify it
+< under the terms of the GNU General Public License as published by the
+< Free Software Foundation; either version 2 of the License, or (at your
+< option) any later version.
+<
+< This program is distributed in the hope that it will be useful, but
+< WITHOUT ANY WARRANTY; without even the implied warranty of
+< MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+< General Public License for more details.
+<
+< You should have received a copy of the GNU General Public License
+< along with this program; if not, write to the Free Software
+< Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+<
+---
+> * Decoder support is derived, with permission, from the code
+> * in Frank Cringle's viewfax program;
+> * Copyright (C) 1990, 1995 Frank D. Cringle.
+> */
+EOF-EOF-EOF
+Patch libtiff/tif_aux.c<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_aux.c,v 1.30 1995/06/06 23:49:31 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_aux.c,v 1.31 1995/07/18 23:13:19 sam Exp $ */
+77a78
+> int
+188a190
+> int
+EOF-EOF-EOF
+Patch libtiff/tif_dir.c<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_dir.c,v 1.150 1995/06/30 14:32:37 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_dir.c,v 1.151 1995/07/19 00:39:31 sam Exp $ */
+72c72
+< if (*v > td->td_samplesperpixel)
+---
+> if ((uint16) *v > td->td_samplesperpixel)
+80c80
+< td->td_extrasamples = *v;
+---
+> td->td_extrasamples = (uint16) *v;
+EOF-EOF-EOF
+Patch libtiff/tif_fax3.c<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_fax3.c,v 1.127 1995/06/30 15:29:02 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_fax3.c,v 1.128 1995/07/17 01:27:30 sam Exp $ */
+200c200
+< Fax3PrematureEOL(const char* module, TIFF* tif, uint32 a0)
+---
+> Fax3BadLength(const char* module, TIFF* tif, uint32 a0, uint32 lastx)
+202,203c202,205
+< TIFFWarning(module, "%s: Premature EOL at scanline %d (x %lu)",
+< tif->tif_name, tif->tif_row, (u_long) a0);
+---
+> TIFFWarning(module, "%s: %s at scanline %d (got %lu, expected %lu)",
+> tif->tif_name,
+> a0 < lastx ? "Premature EOL" : "Line length mismatch",
+> tif->tif_row, (u_long) a0, (u_long) lastx);
+205c207
+< #define prematureEOL(a0) Fax3PrematureEOL(module, tif, a0)
+---
+> #define badlength(a0,lastx) Fax3BadLength(module, tif, a0, lastx)
+1206c1208,1209
+< fprintf(fd, " Consecutive Bad Fax Lines: %u\n", sp->badfaxrun);
+---
+> fprintf(fd, " Consecutive Bad Fax Lines: %lu\n",
+> (u_long) sp->badfaxrun);
+EOF-EOF-EOF
+Patch libtiff/tif_fax3.h<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_fax3.h,v 1.25 1995/07/06 18:03:52 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_fax3.h,v 1.26 1995/07/17 01:27:30 sam Exp $ */
+264a265
+> badlength(a0, lastx); \
+298d298
+< prematureEOL(a0); \
+321d320
+< prematureEOL(a0); \
+468,469d466
+< else \
+< prematureEOL(a0); \
+EOF-EOF-EOF
+Patch libtiff/tif_getimage.c<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_getimage.c,v 1.37 1995/06/20 23:40:24 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_getimage.c,v 1.38 1995/07/17 01:27:18 sam Exp $ */
+1496a1497
+> TIFFRGBValue c;
+1499d1499
+< TIFFRGBValue c;
+1625a1626
+> TIFFRGBValue c;
+1629d1629
+< TIFFRGBValue c;
+EOF-EOF-EOF
+Patch libtiff/tif_lzw.c<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_lzw.c,v 1.68 1995/06/30 15:29:02 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_lzw.c,v 1.69 1995/07/19 00:39:31 sam Exp $ */
+175,177c175,177
+< #define NextCode(tif, sp, bp, code, get) { \
+< if ((sp)->dec_bitsleft < nbits) { \
+< TIFFWarning(tif->tif_name, \
+---
+> #define NextCode(_tif, _sp, _bp, _code, _get) { \
+> if ((_sp)->dec_bitsleft < nbits) { \
+> TIFFWarning(_tif->tif_name, \
+179,180c179,180
+< tif->tif_curstrip); \
+< code = CODE_EOI; \
+---
+> _tif->tif_curstrip); \
+> _code = CODE_EOI; \
+182,183c182,183
+< get(sp, bp, code); \
+< (sp)->dec_bitsleft -= nbits; \
+---
+> _get(_sp,_bp,_code); \
+> (_sp)->dec_bitsleft -= nbits; \
+EOF-EOF-EOF
+Patch libtiff/tif_open.c<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_open.c,v 1.57 1995/06/06 23:49:31 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_open.c,v 1.58 1995/07/17 01:27:01 sam Exp $ */
+178c178
+< { int one = 1; char* cp = (char*)&one; bigendian = (*cp == 0); }
+---
+> { union { int i; char c[4]; } u; u.i = 1; bigendian = u.c[0] == 0; }
+EOF-EOF-EOF
+Patch libtiff/tif_print.c<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_print.c,v 1.62 1995/06/30 05:46:47 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_print.c,v 1.64 1995/07/19 00:39:31 sam Exp $ */
+72c72
+< int i, j;
+---
+> uint16 i;
+224c224
+< fprintf(fd, "assoc-alpha", sep);
+---
+> fprintf(fd, "%sassoc-alpha", sep);
+227c227
+< fprintf(fd, "unassoc-alpha", sep);
+---
+> fprintf(fd, "%sunassoc-alpha", sep);
+252c252
+< char *cp;
+---
+> char* cp;
+398,399c398,399
+< fprintf(fd, " %5d: %5u %5u %5u\n",
+< i,
+---
+> fprintf(fd, " %5lu: %5u %5u %5u\n",
+> l,
+429,431c429,431
+< fprintf(fd, " %2d: %5u",
+< i, td->td_transferfunction[0][l]);
+< for (j = 1; j < td->td_samplesperpixel; j++)
+---
+> fprintf(fd, " %2lu: %5u",
+> l, td->td_transferfunction[0][l]);
+> for (i = 1; i < td->td_samplesperpixel; i++)
+433c433
+< td->td_transferfunction[j][l]);
+---
+> td->td_transferfunction[i][l]);
+458,459c458,459
+< fprintf(fd, " %3d: [%8lu, %8lu]\n",
+< i,
+---
+> fprintf(fd, " %3lu: [%8lu, %8lu]\n",
+> (u_long) s,
+EOF-EOF-EOF
+Patch libtiff/tif_write.c<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_write.c,v 1.69 1995/06/27 00:54:41 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_write.c,v 1.70 1995/07/18 17:55:31 sam Exp $ */
+363a364,366
+> #define isUnspecified(td, v) \
+> (td->v == (uint32) -1 || (td)->td_imagelength == 0)
+>
+367c370
+< register TIFFDirectory *td = &tif->tif_dir;
+---
+> TIFFDirectory* td = &tif->tif_dir;
+369,370c372,378
+< td->td_stripsperimage = td->td_nstrips =
+< (isTiled(tif) ? TIFFNumberOfTiles(tif) : TIFFNumberOfStrips(tif));
+---
+> if (isTiled(tif))
+> td->td_stripsperimage = isUnspecified(td, td_tilelength) ?
+> td->td_samplesperpixel : TIFFNumberOfTiles(tif);
+> else
+> td->td_stripsperimage = isUnspecified(td, td_rowsperstrip) ?
+> td->td_samplesperpixel : TIFFNumberOfStrips(tif);
+> td->td_nstrips = td->td_stripsperimage;
+388a397
+> #undef isUnspecified
+EOF-EOF-EOF
+Patch libtiff/tif_zip.c<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_zip.c,v 1.3 1995/06/30 15:29:02 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/libtiff/RCS/tif_zip.c,v 1.4 1995/07/17 14:38:12 sam Exp $ */
+39c39
+< * is best found using archie (e.g. look for zlib-0.92.tar.gz).
+---
+> * was last found at ftp://ftp.uu.net/graphics/png/code/zlib-0.93.tar.gz.
+EOF-EOF-EOF
+Patch tools/fax2tiff.c<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/tools/RCS/fax2tiff.c,v 1.36 1995/06/06 23:45:26 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/tools/RCS/fax2tiff.c,v 1.37 1995/07/17 01:36:52 sam Exp $ */
+42c42,49
+< TIFF faxTIFF;
+---
+> #ifndef EXIT_SUCCESS
+> #define EXIT_SUCCESS 0
+> #endif
+> #ifndef EXIT_FAILURE
+> #define EXIT_FAILURE 1
+> #endif
+>
+> TIFF *faxTIFF;
+54a62,75
+> static tsize_t
+> DummyReadProc(thandle_t fd, tdata_t buf, tsize_t size)
+> {
+> (void) fd; (void) buf; (void) size;
+> return (0);
+> }
+>
+> static tsize_t
+> DummyWriteProc(thandle_t fd, tdata_t buf, tsize_t size)
+> {
+> (void) fd; (void) buf; (void) size;
+> return (size);
+> }
+>
+59a81
+> TIFFErrorHandler whandler;
+71,79c93,108
+< _TIFFmemset(&faxTIFF, 0, sizeof (faxTIFF));
+< TIFFSetField(&faxTIFF, TIFFTAG_IMAGEWIDTH, XSIZE);
+< TIFFSetField(&faxTIFF, TIFFTAG_SAMPLESPERPIXEL, 1);
+< TIFFSetField(&faxTIFF, TIFFTAG_BITSPERSAMPLE, 1);
+< TIFFSetField(&faxTIFF, TIFFTAG_FILLORDER, FILLORDER_LSB2MSB);
+< TIFFSetField(&faxTIFF, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
+< TIFFSetField(&faxTIFF, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE);
+< TIFFSetField(&faxTIFF, TIFFTAG_YRESOLUTION, 196.);
+< TIFFSetField(&faxTIFF, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);
+---
+> /* smuggle a descriptor out of the library */
+> faxTIFF = TIFFClientOpen("(FakeInput)", "w", (thandle_t) -1,
+> DummyReadProc, DummyWriteProc,
+> NULL, NULL, NULL, NULL, NULL);
+> if (faxTIFF == NULL)
+> return (EXIT_FAILURE);
+> faxTIFF->tif_mode = O_RDONLY;
+>
+> TIFFSetField(faxTIFF, TIFFTAG_IMAGEWIDTH, XSIZE);
+> TIFFSetField(faxTIFF, TIFFTAG_SAMPLESPERPIXEL, 1);
+> TIFFSetField(faxTIFF, TIFFTAG_BITSPERSAMPLE, 1);
+> TIFFSetField(faxTIFF, TIFFTAG_FILLORDER, FILLORDER_LSB2MSB);
+> TIFFSetField(faxTIFF, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
+> TIFFSetField(faxTIFF, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE);
+> TIFFSetField(faxTIFF, TIFFTAG_YRESOLUTION, 196.);
+> TIFFSetField(faxTIFF, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);
+81c110
+< faxTIFF.tif_scanlinesize = TIFFScanlineSize(&faxTIFF);
+---
+> faxTIFF->tif_scanlinesize = TIFFScanlineSize(faxTIFF);
+87c116
+< TIFFSetField(&faxTIFF,
+---
+> TIFFSetField(faxTIFF,
+91c120
+< TIFFSetField(&faxTIFF,
+---
+> TIFFSetField(faxTIFF,
+95c124
+< TIFFSetField(&faxTIFF,
+---
+> TIFFSetField(faxTIFF,
+99c128
+< TIFFSetField(&faxTIFF,
+---
+> TIFFSetField(faxTIFF,
+103c132
+< TIFFSetField(&faxTIFF,
+---
+> TIFFSetField(faxTIFF,
+107c136
+< TIFFSetField(&faxTIFF,
+---
+> TIFFSetField(faxTIFF,
+130c159
+< return (-2);
+---
+> return EXIT_FAILURE;
+156c185
+< return (-2);
+---
+> return (EXIT_FAILURE);
+158,164c187,193
+< faxTIFF.tif_readproc = out->tif_readproc; /* XXX */
+< faxTIFF.tif_writeproc = out->tif_writeproc; /* XXX */
+< faxTIFF.tif_seekproc = out->tif_seekproc; /* XXX */
+< faxTIFF.tif_closeproc = out->tif_closeproc; /* XXX */
+< faxTIFF.tif_sizeproc = out->tif_sizeproc; /* XXX */
+< faxTIFF.tif_mapproc = out->tif_mapproc; /* XXX */
+< faxTIFF.tif_unmapproc = out->tif_unmapproc; /* XXX */
+---
+> faxTIFF->tif_readproc = out->tif_readproc; /* XXX */
+> faxTIFF->tif_writeproc = out->tif_writeproc; /* XXX */
+> faxTIFF->tif_seekproc = out->tif_seekproc; /* XXX */
+> faxTIFF->tif_closeproc = out->tif_closeproc; /* XXX */
+> faxTIFF->tif_sizeproc = out->tif_sizeproc; /* XXX */
+> faxTIFF->tif_mapproc = out->tif_mapproc; /* XXX */
+> faxTIFF->tif_unmapproc = out->tif_unmapproc; /* XXX */
+171c200
+< TIFFSetField(&faxTIFF, TIFFTAG_COMPRESSION, COMPRESSION_CCITTFAX3);
+---
+> TIFFSetField(faxTIFF, TIFFTAG_COMPRESSION, COMPRESSION_CCITTFAX3);
+179,181c208,210
+< faxTIFF.tif_fd = fileno(in);
+< faxTIFF.tif_clientdata = (thandle_t) faxTIFF.tif_fd;
+< faxTIFF.tif_name = argv[optind];
+---
+> faxTIFF->tif_fd = fileno(in);
+> faxTIFF->tif_clientdata = (thandle_t) faxTIFF->tif_fd;
+> faxTIFF->tif_name = argv[optind];
+204c233
+< TIFFGetField(&faxTIFF, TIFFTAG_YRESOLUTION, &yres);
+---
+> TIFFGetField(faxTIFF, TIFFTAG_YRESOLUTION, &yres);
+211c240,242
+< rows = copyFaxFile(&faxTIFF, out);
+---
+> if (!verbose)
+> whandler = TIFFSetWarningHandler(NULL);
+> rows = copyFaxFile(faxTIFF, out);
+212a244,245
+> if (!verbose)
+> (void) TIFFSetWarningHandler(whandler);
+232c265
+< return (0);
+---
+> return (EXIT_SUCCESS);
+250a284
+> (*tifin->tif_setupdecode)(tifin);
+326c360
+< exit(-1);
+---
+> exit(EXIT_FAILURE);
+EOF-EOF-EOF
+Patch tools/tiff2bw.c<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/tools/RCS/tiff2bw.c,v 1.18 1995/07/01 01:16:55 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/tools/RCS/tiff2bw.c,v 1.19 1995/07/19 00:39:51 sam Exp $ */
+34c34
+<
+---
+> #include <ctype.h>
+66c66
+< register int red = RED, green = GREEN, blue = BLUE;
+---
+> register uint32 red = RED, green = GREEN, blue = BLUE;
+EOF-EOF-EOF
+Patch tools/tiffcmp.c<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/tools/RCS/tiffcmp.c,v 1.26 1995/06/06 23:45:26 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/tools/RCS/tiffcmp.c,v 1.27 1995/07/19 00:39:51 sam Exp $ */
+122,123c122,123
+< int s, size1;
+< uint32 row;
+---
+> tsize_t size1;
+> uint32 s, row;
+432c432
+< int i;
+---
+> uint16 i;
+EOF-EOF-EOF
+Patch tools/tiffdump.c<<'EOF-EOF-EOF'
+1c1
+< /* $Header: /usr/people/sam/tiff/tools/RCS/tiffdump.c,v 1.43 1995/07/03 15:09:29 sam Exp $ */
+---
+> /* $Header: /usr/people/sam/tiff/tools/RCS/tiffdump.c,v 1.44 1995/07/19 00:39:51 sam Exp $ */
+62c62
+< #include "tiff.h"
+---
+> #include "tiffio.h"
+173,176d172
+< static void TIFFSwabShort(uint16 *);
+< static void TIFFSwabLong(uint32 *);
+< static void TIFFSwabArrayOfShort(uint16 *, unsigned long);
+< static void TIFFSwabArrayOfLong(uint32 *, unsigned long);
+656,703d651
+< }
+< }
+<
+< static void
+< TIFFSwabShort(uint16* wp)
+< {
+< register unsigned char *cp = (unsigned char *)wp;
+< int t;
+<
+< t = cp[1]; cp[1] = cp[0]; cp[0] = t;
+< }
+<
+< static void
+< TIFFSwabLong(uint32* lp)
+< {
+< register unsigned char *cp = (unsigned char *)lp;
+< int t;
+<
+< t = cp[3]; cp[3] = cp[0]; cp[0] = t;
+< t = cp[2]; cp[2] = cp[1]; cp[1] = t;
+< }
+<
+< static void
+< TIFFSwabArrayOfShort(uint16* wp, unsigned long n)
+< {
+< register unsigned char *cp;
+< register int t;
+<
+< /* XXX unroll loop some */
+< while (n-- > 0) {
+< cp = (unsigned char *)wp;
+< t = cp[1]; cp[1] = cp[0]; cp[0] = t;
+< wp++;
+< }
+< }
+<
+< static void
+< TIFFSwabArrayOfLong(uint32* lp, unsigned long n)
+< {
+< register unsigned char *cp;
+< register int t;
+<
+< /* XXX unroll loop some */
+< while (n-- > 0) {
+< cp = (unsigned char *)lp;
+< t = cp[3]; cp[3] = cp[0]; cp[0] = t;
+< t = cp[2]; cp[2] = cp[1]; cp[1] = t;
+< lp++;
+EOF-EOF-EOF
+NewFile html/v3.4beta018.html<<'EOF-EOF-EOF'
+<HTML>
+<HEAD>
+<TITLE>
+Changes in TIFF v3.4beta018
+</TITLE>
+</HEAD>
+
+<BODY>
+
+<BASEFONT SIZE=4>
+<B><FONT SIZE=+3>T</FONT>IFF <FONT SIZE=+2>C</FONT>HANGE <FONT SIZE=+2>I</FONT>NFORMATION</B>
+<BASEFONT SIZE=3>
+
+<UL>
+<HR SIZE=4 WIDTH=65% ALIGN=left>
+<B>Current Version</B>: v3.4beta018<BR>
+<B>Previous Version</B>: <A HREF=v3.4beta016.html>v3.4beta016</A><BR>
+<B>Master FTP Site</B>: <A HREF="ftp://ftp.sgi.com/graphics/tiff">ftp.sgi.com (192.48.153.1), directory graphics/tiff</A><BR>
+<HR SIZE=4 WIDTH=65% ALIGN=left>
+</UL>
+
+<P>
+This document describes the changes made to the software between the
+<I>previous</I> and <I>current</I> versions (see above).
+If you don't find something listed here, then it was not done in this
+timeframe, or it was not considered important enough to be mentioned.
+The following information is located here:
+<UL>
+<LI><A HREF="#configure">Changes in the software configuration</A>
+<LI><A HREF="#libtiff">Changes in libtiff</A>
+<LI><A HREF="#tools">Changes in the tools</A>
+</UL>
+
+<P><HR WIDTH=65% ALIGN=right>
+
+<A NAME="configure"><B><FONT SIZE=+3>C</FONT>HANGES IN THE SOFTWARE CONFIGURATION:</B></A>
+
+<UL>
+<LI>configure now recognizes IRIX 6.x systems
+<LI>configure now uses <TT>ENVOPTS</TT> when searching for an ANSI
+ C compiler; this fixes a problem configuring the software under
+ HP/UX with the native C compiler
+<LI>configure now correctly recognizes memory-mapped files are supported
+ under AIX
+</UL>
+
+<P><HR WIDTH=65% ALIGN=right>
+
+<A NAME="libtiff"><B><FONT SIZE=+3>C</FONT>HANGES IN LIBTIFF:</B></A>
+
+<UL>
+<LI><TT>make install</TT> now properly installs the include files
+<LI>some portability fixes from Bjorn Brox
+<LI>the G3/G4 codec now warns about decoded rows that are longer than
+ the image/tile width
+<LI>changes from Frank Cringle to make the library work with the
+ gcc-specific bounds checking software
+<LI>miscellaneous fixes to <TT>TIFFPrintDirectory</TT>
+<LI>bug fix to correct a problem where <TT>TIFFWriteRawStrip</TT>
+ could not be used to automatically grow an image's length
+</UL>
+
+<P><HR WIDTH=65% ALIGN=right>
+
+<A NAME="tools"><B><FONT SIZE=+3>C</FONT>HANGES IN THE TOOLS:</B></A>
+
+<UL>
+<LI>fixes from Frank Cringle to update <TT>fax2tiff</TT>
+<LI>portability fixes to <TT>tiff2bw</TT> and <TT>tiffcmp</TT>
+<LI><TT>tiffdump</TT> now uses the byte swapping routines in the library
+</UL>
+
+<A HREF="index.html"><IMG SRC="images/back.gif"></A> TIFF home page.<BR>
+
+<HR>
+
+<ADDRESS>
+<A HREF="sam.html">Sam Leffler</A> / <A HREF="mailto:sam@engr.sgi.com">sam@engr.sgi.com</A>
+Last updated $Date: 1995/07/19 01:54:02 $.
+</ADDRESS>
+
+</BODY>
+</HTML>
+EOF-EOF-EOF