From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- graphics/psfig/README | 88 ++ graphics/psfig/doc/figs/box.ps | 11 + graphics/psfig/doc/figs/cm.ps | 26 + graphics/psfig/doc/figs/piechart.ps | 154 ++++ graphics/psfig/doc/figs/pretzel.ps | 14 + graphics/psfig/doc/figs/rosette.ps | 76 ++ graphics/psfig/doc/figs/starlines.ps | 40 + graphics/psfig/doc/figs/trevor.ps | 583 ++++++++++++ graphics/psfig/doc/figs/zip.ps | 21 + graphics/psfig/doc/psfig-doc.tex | 292 ++++++ graphics/psfig/doc/psfig.man | 261 ++++++ graphics/psfig/pscompress | 12 + graphics/psfig/psfig.sty | 995 +++++++++++++++++++++ graphics/psfig/unsupported/arbortext.pro | 100 +++ graphics/psfig/unsupported/dospecial.frag | 43 + graphics/psfig/unsupported/dospecial.patch | 37 + graphics/psfig/unsupported/graphpaper.ps | 78 ++ graphics/psfig/unsupported/macdemo/README | 76 ++ graphics/psfig/unsupported/macdemo/cleanfig | 3 + graphics/psfig/unsupported/macdemo/figs/box.ps | 11 + graphics/psfig/unsupported/macdemo/figs/cm.ps | 26 + .../psfig/unsupported/macdemo/figs/piechart.ps | 154 ++++ graphics/psfig/unsupported/macdemo/figs/pretzel.ps | 14 + graphics/psfig/unsupported/macdemo/figs/rosette.ps | 76 ++ .../psfig/unsupported/macdemo/figs/starlines.ps | 40 + graphics/psfig/unsupported/macdemo/figs/trevor.ps | 583 ++++++++++++ graphics/psfig/unsupported/macdemo/figs/zip.ps | 21 + graphics/psfig/unsupported/macdemo/lprep68.pro | 446 +++++++++ graphics/psfig/unsupported/macdemo/lprep68.procs | 439 +++++++++ graphics/psfig/unsupported/macdemo/lprep70.pro | 451 ++++++++++ graphics/psfig/unsupported/macdemo/lprep70.procs | 450 ++++++++++ graphics/psfig/unsupported/macdemo/macdemo.tex | 19 + .../unsupported/macdemo/macfigs/bullet.fig68.bb | 2 + .../unsupported/macdemo/macfigs/bullet.fig68.gz | Bin 0 -> 6829 bytes .../unsupported/macdemo/macfigs/dave.fig68.bb | 2 + .../unsupported/macdemo/macfigs/dave.fig68.gz | Bin 0 -> 2228 bytes .../unsupported/macdemo/macfigs/macdraw.fig68.bb | 2 + .../unsupported/macdemo/macfigs/macdraw.fig68.gz | Bin 0 -> 597 bytes graphics/psfig/unsupported/macdemo/stripfonts.awk | 5 + graphics/psfig/unsupported/psfig-li.pro | 100 +++ graphics/psfig/unsupported/psfig-li.tex | 391 ++++++++ 41 files changed, 6142 insertions(+) create mode 100644 graphics/psfig/README create mode 100644 graphics/psfig/doc/figs/box.ps create mode 100644 graphics/psfig/doc/figs/cm.ps create mode 100644 graphics/psfig/doc/figs/piechart.ps create mode 100644 graphics/psfig/doc/figs/pretzel.ps create mode 100644 graphics/psfig/doc/figs/rosette.ps create mode 100644 graphics/psfig/doc/figs/starlines.ps create mode 100644 graphics/psfig/doc/figs/trevor.ps create mode 100644 graphics/psfig/doc/figs/zip.ps create mode 100644 graphics/psfig/doc/psfig-doc.tex create mode 100644 graphics/psfig/doc/psfig.man create mode 100644 graphics/psfig/pscompress create mode 100644 graphics/psfig/psfig.sty create mode 100644 graphics/psfig/unsupported/arbortext.pro create mode 100644 graphics/psfig/unsupported/dospecial.frag create mode 100644 graphics/psfig/unsupported/dospecial.patch create mode 100644 graphics/psfig/unsupported/graphpaper.ps create mode 100644 graphics/psfig/unsupported/macdemo/README create mode 100644 graphics/psfig/unsupported/macdemo/cleanfig create mode 100644 graphics/psfig/unsupported/macdemo/figs/box.ps create mode 100644 graphics/psfig/unsupported/macdemo/figs/cm.ps create mode 100644 graphics/psfig/unsupported/macdemo/figs/piechart.ps create mode 100644 graphics/psfig/unsupported/macdemo/figs/pretzel.ps create mode 100644 graphics/psfig/unsupported/macdemo/figs/rosette.ps create mode 100644 graphics/psfig/unsupported/macdemo/figs/starlines.ps create mode 100644 graphics/psfig/unsupported/macdemo/figs/trevor.ps create mode 100644 graphics/psfig/unsupported/macdemo/figs/zip.ps create mode 100644 graphics/psfig/unsupported/macdemo/lprep68.pro create mode 100644 graphics/psfig/unsupported/macdemo/lprep68.procs create mode 100644 graphics/psfig/unsupported/macdemo/lprep70.pro create mode 100644 graphics/psfig/unsupported/macdemo/lprep70.procs create mode 100644 graphics/psfig/unsupported/macdemo/macdemo.tex create mode 100644 graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.bb create mode 100644 graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.gz create mode 100644 graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.bb create mode 100644 graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.gz create mode 100644 graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.bb create mode 100644 graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.gz create mode 100644 graphics/psfig/unsupported/macdemo/stripfonts.awk create mode 100644 graphics/psfig/unsupported/psfig-li.pro create mode 100644 graphics/psfig/unsupported/psfig-li.tex (limited to 'graphics/psfig') diff --git a/graphics/psfig/README b/graphics/psfig/README new file mode 100644 index 0000000000..a847dad6e8 --- /dev/null +++ b/graphics/psfig/README @@ -0,0 +1,88 @@ +psfig/tex -- TeX macros for the inclusion of postscript figures + +================================================================== + +COPYRIGHT NOTICE + +All software, documentation, and related files in this distribution of +psfig/tex are Copyright 1993 Trevor J. Darrell + +Permission is granted for use and non-profit distribution of psfig/tex +providing that this notice be clearly maintained, but the right to +distribute any portion of psfig/tex for profit or as part of any commercial +product is specifically reserved for the author. + +Thanks to Ned Batchelder, Greg Hager, J. Daniel Smith, Tom Rokicki, +Robert Russell, George V. Reilly, Ken McGlothlen, Dr. Baron Grey, +Gerhard Tobermann and all others who have contributed code and +comments to this project! + +================================================================== + +NEW IN VERSION 1.10 + +- Support for OzTeX (derived from Baron Grey's OzTeX version of psfig) + +- New searching path algorithm (from Gerhard Tobermann); looks in + multiple directories; looks for file.ps before file.ps.bb... + +- Many small bug fixes (underscore in draft mode, angle/clip interaction) + +- Improved documentation and man page + +================================================================== + +SYSTEM REQUIREMENTS + +Psfig/tex uses \special calls to manipulate the PostScript environment +within a document, and include figure files. To use psfig, you must +therefore be using a postscript device for your output. This version +of psfig/tex works with the unix "dvips" PostScript driver, which is +available from labrea.stanford.edu, and with OzTeX. + +It may also work with the ArborText "dvips" driver, and with the +"dvi2ps" written by Tony Li ; see the +"unsupported" directory. + +================================================================== + +INSTALLATION + +To install psfig, simply copy psfig.sty into a directory on your TeX +include path (e.g. /usr/lib/tex/macros). + +If you are using OzTeX, change the driver line at the top of +the psfig.sty file to read + \def\setDriver{\OzTeXDriver} +instead of + \def\setDriver{\DvipsDriver} + + +A users guide and manual page can be found in the "doc" directory. + +For tips on dealing with Macintosh postscript, see the directory +"unsupported/macdemo/README". + +================================================================== + +BUGS + +If you use the letter style, make sure you include the psfig style +first. + +If you have an old version of dvips, you may need to make a patch to +use the compressed figure option, and to handle magnification +correctly. The files "unsupported/dospecial.[patch,frag]" contain a +patch and a corresponding code fragment for dvips' dospecial.c file. +To apply the patch copy dospecial.patch into your dvips directory and +run "patch < dospecial.patch", and then recompile. "dospcial.frag" +contains the modified portion of the code as it should appear in the +patched file. To use magnification with psfig and dvips, you need to +change the line + /magscale false def +in special.pro to + /magscale true def +in order to have the figures scaled correctly. + + + diff --git a/graphics/psfig/doc/figs/box.ps b/graphics/psfig/doc/figs/box.ps new file mode 100644 index 0000000000..ca6807a138 --- /dev/null +++ b/graphics/psfig/doc/figs/box.ps @@ -0,0 +1,11 @@ +%! +%%BoundingBox: 0 0 1 1 +newpath +0 0 moveto +1 0 lineto +1 1 lineto +0 1 lineto +closepath +.8 setgray +fill + diff --git a/graphics/psfig/doc/figs/cm.ps b/graphics/psfig/doc/figs/cm.ps new file mode 100644 index 0000000000..93b94b0a3b --- /dev/null +++ b/graphics/psfig/doc/figs/cm.ps @@ -0,0 +1,26 @@ +%! +%%BoundingBox: 27.47 27.47 172.52 172.52 + +100 100 translate +newpath + 0 0 moveto + 0 0 72 0 90 arc + closepath + fill + + 0 0 moveto + 0 0 72 90 180 arc + closepath + stroke + + 0 0 moveto + 0 0 72 180 270 arc + closepath + fill + + 0 0 moveto + 0 0 72 270 360 arc + closepath + stroke + +showpage diff --git a/graphics/psfig/doc/figs/piechart.ps b/graphics/psfig/doc/figs/piechart.ps new file mode 100644 index 0000000000..164583e8d8 --- /dev/null +++ b/graphics/psfig/doc/figs/piechart.ps @@ -0,0 +1,154 @@ +%! +%%BoundingBox: 126 246 486 546 +% Cookbook Example Program from First Printing, Revised 7 Jan 1985 +% Program: Drawing a Pie Chart Number: 18 +%----------------------------------------------------------------------------- +% +/PieDict 24 dict def % Local storage for + % ``DrawPieChart'' and its related + % procedures. +PieDict begin + /DrawSlice % DrawSlice draws an outlined and + { /grayshade exch def % filled-in pie slice. It takes + /endangle exch def % four operands: the label for + /startangle exch def % this particular pie slice, the + /thelabel exch def % starting angle for the slice, + % the ending angle for the slice + % and the shade of gray the slice + % should be. + + newpath % Create a path which will draw a + % pie slice. + 0 0 moveto + 0 0 radius startangle endangle arc + closepath + + 1.415 setmiterlimit % This guarantees that when we + % outline the pie slices with a + % stroke that we will not get a + % spike on the interior angles. + gsave grayshade setgray fill grestore % Fill the pie slice path with the + stroke % appropriate gray color. By using + % gsave and grestore we don't lose + % the current path. Since + % PostScript paints color onto the + % page, it is very important that + % we fill the pie slice first and + % then outline it with a stroke. + gsave % Draw the tick mark and place the + % label: + startangle endangle add 2 div % Find the center of the pie slice + rotate % and rotate so that the x-axis + % coincides with this center. + radius 0 translate % Translate the origin out to the + % circumference. + newpath + 0 0 moveto labelps .8 mul 0 lineto% Draw the tick-mark. + stroke + labelps 0 translate % Move the origin out a little + % beyond the circumference. + 0 0 transform % Next we wish to place the label + grestore % at the current origin. If we + itransform % simply draw the text on the page + /y exch def /x exch def % now, it would come out rotated. + x y moveto % Since this is not desired we + % avoid it by returning to the + % previous unrotated coordinate + % system. Before returning, + % though, we would like to + x 0 lt % remember the position of the + { thelabel stringwidth pop neg % current origin on the printed + 0 rmoveto % page. We will accomplish this by + } if % using the transform and + % itransform operators. Performing + % a transform on the origin pushes + % the coordinates of the origin in + % device space onto the operand + % stack. Performing a grestore + % returns us to the previous + % unrotated coordinate system. + % Next we perform an itransform on + % the two device coordinates left + % on the stack to determine where + % we are in the current coordinate + % system. + y 0 lt { 0 labelps neg rmoveto } if % Make some adjustments so that + thelabel show % the label text won't collide + } def % with the pie slice. + /findgray % Procedure findgray calculates + { /i exch def /n exch def % the gray value for a slice. It + i 2 mod 0 eq % takes two arguments: the total + { i 2 div n 2 div round add n div } % number of slices and the current + { i 1 add 2 div n div } % slice number (Given that there + ifelse % are n pie slices, the slices are + } def % ``numbered'' from 1 to n). The +end % gray values for the pie slices + % range evenly from white to black + % (i.e. - the values provided to + % setgray range from (n/n, n-1/n, + % ..., 1/n)). Since we don't want + % similar values of gray next to + % each other, findgray + % ``shuffles'' the possible + % combinations of gray. + +/DrawPieChart % DrawPieChart takes seven + { PieDict begin % arguments: the title of the pie + /radius exch def % chart, the point size to print + /ycenter exch def /xcenter exch def % the title in, the point size to + /PieArray exch def % print the labels for each slice + /labelps exch def /titleps exch def % in, a special array (described + /title exch def % below where DrawPieChart is + % called), the (x,y) center of the + % pie chart and the radius of the + % pie chart. + + gsave + xcenter ycenter translate % Translate the coordinate system + % origin to center of pie chart. + /Helvetica findfont titleps % Print the title of the pie chart + scalefont setfont % in Helvetica. + title stringwidth pop 2 div neg % Center the title below the pie + % chart. + radius neg titleps 3 mul sub + moveto title show + /Helvetica findfont labelps % Print the individual pie slice + scalefont setfont % labels in Helvetica + /numslices PieArray length def + /slicecnt 0 def + /curangle 0 def % A ``loop'' variable that keeps + % track of the angle of arc to + % begin each pie slice at. + PieArray % Repeat the following for each + % element in the PieArray. + { /slicearray exch def + slicearray aload pop % Push the label and percentage + % onto the stack. + /percent exch def + /label exch def + /perangle percent 360 mul def % Convert the percentage into + % degrees of angle. + /slicecnt slicecnt 1 add def + label curangle + curangle perangle add + numslices slicecnt findgray + DrawSlice + /curangle curangle perangle add % Update the current starting + % angle. + def + } forall + grestore + end + } def + +() 18 9 + [ [(Blueberry) .12 ] % The pie array is an array of + [(Cherry) .30 ] % arrays. Each array in the pie + [(Apple) .26 ] % array contains a string denoting + [(Boston Cream) .16 ] % the label to be printed next to + [(Other) .04 ] % the pie slice followed by a real + [(Vanilla Cream) .12 ] % number indicating the percentage + ] 306 396 100 DrawPieChart % of the pie represented by this + % particular slice. +showpage + diff --git a/graphics/psfig/doc/figs/pretzel.ps b/graphics/psfig/doc/figs/pretzel.ps new file mode 100644 index 0000000000..e6bbf413b3 --- /dev/null +++ b/graphics/psfig/doc/figs/pretzel.ps @@ -0,0 +1,14 @@ +%! pretzel.ps -- an example for the psfig paper. +%%BoundingBox: 95 100 185 200 + +5 setlinewidth +1 setlinecap +110 100 moveto +120 120 140 160 160 160 curveto +170 160 180 150 180 140 curveto +180 120 160 100 140 100 curveto +120 100 100 120 100 140 curveto +100 150 110 160 120 160 curveto +140 160 160 120 170 100 curveto +stroke +showpage diff --git a/graphics/psfig/doc/figs/rosette.ps b/graphics/psfig/doc/figs/rosette.ps new file mode 100644 index 0000000000..2ab4424b55 --- /dev/null +++ b/graphics/psfig/doc/figs/rosette.ps @@ -0,0 +1,76 @@ +%! +%%BoundingBox: 124.38 124.38 487.61 487.61 +% Cookbook Example Program from First Printing, Revised 7 Jan 1985 +% Program: Repeated Shapes Number: 6 +%----------------------------------------------------------------------------- +% + % This program prints a rosette + % design by defining a section of + % that design and printing that + % section repeatedly. This program + % illustrates the ``for'' and + % "arc" operators, and it shows + % how coordinate transformations + % can be nested so as to use the + % most convenient coordinate + % system for each part of a + % design. +/inch {72 mul} def + +/wedge % Define an ``ice cream cone'' + { newpath % shape by means of the ``arc'' + 0 0 moveto % operator. This shape will have a + 1 0 translate % 30 degree angle topped off with + 15 rotate % a semicircle. Set the path's + 0 15 sin translate % first point at the current + 0 0 15 sin -90 90 arc % origin. Next, move the origin to + closepath % the center of the semicircle by + } def % translating to the right 1 unit, + % rotating counter-clockwise by 15 + % degrees, and translating ``up'' + % in the rotated system by the + % radius of the semicircle. The + % ``arc'' operator includes a + % straight line to the initial + % point of the arc and a curved + % section to the end of the arc. + % Note that the semicircle goes + % from -90 degrees to 90 degrees + % in the rotated coordinate + % system. + +gsave + 4.25 inch 4.25 inch translate % Move into position for the + % rosette. + 1.75 inch 1.75 inch scale % Make the edges of the rosette 1 + % 3/4 inches long. + 0.02 setlinewidth % Use a 7/200 inch thick line. + 2 1 13 % Set up the ``for'' operator to + % iterate 12 times, pushing 2 onto + % the stack the first time, 3 the + % next time, ... , and 13 the last + % time. + { % The last argument for ``for'' is + % the sequence of operations to be + % repeated. This sequence must be + % enclosed by braces. + 13 div setgray % Divide the loop index by 13 to + % set a gray value. + gsave % Enclose the ``wedge'' operation + wedge % in a ``gsave''-``grestore'' + % pair, as it will mess up the + % coordinate system. + gsave % Save the wedge path for use + % after the ``fill''. + fill + grestore + 0 setgray stroke % Draw a black border around the + % wedge. + grestore % Get out of the coordinate system + % left by wedge. + 30 rotate % Set up for the next section. + } for % Close the last argument and + % execute the ``for'' operator. +grestore +showpage + diff --git a/graphics/psfig/doc/figs/starlines.ps b/graphics/psfig/doc/figs/starlines.ps new file mode 100644 index 0000000000..a7cf877ea6 --- /dev/null +++ b/graphics/psfig/doc/figs/starlines.ps @@ -0,0 +1,40 @@ +%! +%%BoundingBox: 300 400 410 420 +/Times-Roman findfont +30 scalefont setfont +newpath +300 400 translate +.25 setlinewidth +0 0 moveto +(StarLines) true charpath clip + +/rays { + 0 1.5 179 + { gsave + rotate + 0 0 moveto + 108 0 lineto + stroke + grestore + } for +} def + + +newpath +54 -15 translate +rays +showpage + + + +% +% +% +% +% +% +% +% +% +% +% diff --git a/graphics/psfig/doc/figs/trevor.ps b/graphics/psfig/doc/figs/trevor.ps new file mode 100644 index 0000000000..b46453479a --- /dev/null +++ b/graphics/psfig/doc/figs/trevor.ps @@ -0,0 +1,583 @@ +%!PS-Adobe-1.0 +%%Title: trevor +%%Creator: Ned Batchelder +%%CreationDate: Wed Mar 26 11:05:04 1986 +%%BoundingBox: 72 72 432 525 + +%%Pages: 1 +%%EndComments +/doimage { + /b exch def /m exch def /n exch def + /pix n string def + n m b [n 0 0 m neg 0 m] + { currentfile pix readhexstring pop } + image +} def +/spotsize { + /perinch exch def + currentscreen 3 -1 roll + pop perinch + 3 1 roll setscreen +} def +/invert { + /curtran currenttransfer cvlit def + /newtran curtran length 3 add array def + newtran 0 {1 exch sub} putinterval + newtran 3 curtran putinterval + newtran cvx settransfer +} def +72 72 translate +%%EndProlog +%%Page: ? 1 +360.000 453.600 scale +60 spotsize +112 176 8 doimage +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffefbffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffdeaffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffdf2ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffac8ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffacb +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffefefdfcfcfdfefffffefbf8fafdfeffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffff8b2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffefefcf7eddbc9c1c1cbd9e5eff1d9b5b3c8 +e0f3f7fafeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffbd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffef9f0ddc3a88e725d56565e6e82949e +8c65545d759bb6d0f5fefefefdfeffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffad3ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffefef9e4bf99785f4f443d38363539 +3f484b4e4c423d3b3b485a77bbf0fdfaf2f4fdffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffff6a2ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffefdf6dfb98b644b3f39383735 +32302f31343738393a383c3f3735394576c6eefbf7f0f5fdffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff6a4ffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffef5d8ae805b453a3734 +32333333302e2d2e30313336393a393a3a3536384e8ad0f7fefaeff8feffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffff6a4ffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffefce8b98159463b +363535363536353434322f3031303234383c3e3835343536405da3e8fcfef2f2feffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffff9c7ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef5d59b64 +49403b3735343433333333333231303335322f30333a4040373233383f486ec3f0fcf8ec +fbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff59bffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefbe9 +ba7d503d383634323233312f2f2e2b2b2b2c2c2f3235312d2c3038403c3533383d404d8b +d0f1faebf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff599 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fef5d199654437343433302e2f312e2b2a2726272a2c2c2c2d3135332d2b2f3a3e383432 +3a3d405c9cd4eeeefaffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffff8c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffdecbe7d4f3a353333312e2b2829282624252627282929292b2b2b3038352e2b30 +393b3730323a38416eaedbedfcffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff7b4ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffce5a96944353132302e2b2928272928272727292926232325272c2f2e31 +332e2b29303837302d3436375583bed8f2feffffffffffffffffffffffffffffffffffff +fffffffffffffffffffff8bcffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffde5a6643f343333312e2b2a2a2c2d2f2f2e2d2e2f2d2a27262729 +2d30303030312f2a293137332b2e32333f5e83a0c3e9f8fdfeffffffffffffffffffffff +fffffffffffffffffffffffffffff9c7ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffef0af6a4436333333302f2d2d2e2f2e2d2d2f2e2f302e2d +2c2d2f31322f2c2e3234332c272c33342c2a2d30323f53667ca7cadff2fdffffffffffff +fffffffffffffffffffffffffffffffffffffad3ffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffff8c8774b3b35322f2e2d2c2b2c2d2f2d2b2c2e2d +2d302f2e2d2d2f3132322d292d333933282b2e32312c2c2c2e333e4b597498b9d2ecfdff +fffffffffffffffffffffffffffffffffffffffffffff8bfffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffee18e523d35312b272525252424272a2b +2a2a2a28292a2b2c2b2b2c2e3032332f2b2c34382e292c2d2f2d2c2a2d2f333b4655688b +bfdef3fdfffffffffffffffffffffffffffffffffffffffffffffacfffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffef8b7633f332e2a252424252524 +222323252526242121222426282727282a2d35372f282a35382c29282a2d2e2c2b2e2f31 +383c455784bfe1f5fefffffffffffffffffffffffffffffffffffffffffffdf1ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffcda7f45322a27252628 +28282928262423262726252422222020232527292b2e31333129252831312a2525292c2e +2c2b2e2b3032353c4d77b3d9fafffffffffffffffffffffffffffffffffffffffffffbdd +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeefa253352b26 +2527282625262828272827262626282a26242122262a2b29292c2f3235302623262d2d26 +2426292e2d292b2a2b2e2f333b4a70a8ebfeffffffffffffffffffffffffffffffffffff +fffffad5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbca70 +3f2f2926242425222021222324272b2a2927282a292928282a2c2d2c2c333633312f2a26 +222327282625262b2f2b282a2a2b2c30363b486bc8fbffffffffffffffffffffffffffff +fffffffffffff9d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fee7934c352e29272727272522222223222124272726282b2a2a2a2a2b2b29292c343936 +2e29262623202124282624272b2b27292a292a2f33363d4c90eafeffffffffffffffffff +fffffffffffffffffffff9d3ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffff7ba6038312d28292b2c2c2a26242426231e1d1f212225282828282928242223 +293136342f2a26232122212124242426282b2b2a2928282c31353a4260bbf9ffffffffff +fffffffffffffffffffffffffffff8bbffffffffffffffffffffffffffffffffffffffff +fffffffffffffffedf844434312d2b2c2c2c2c292725242625221f1e1d1e212426262425 +24212022262b2f2d2a292724202021202223232525282a2d292526292e353c414b81e1fe +fffffffffffffffffffffffffffffffffffff7b2ffffffffffffffffffffffffffffffff +fffffffffffffffffffffff9b75c3934312e2e2e2b28272524222426262525211e1f2225 +292926252323262c2e2f2e2b2825242423211e1f212223222325282c2a2625272a313940 +475baff6fffffffffffffffffffffffffffffffffffff7bdffffffffffffffffffffffff +fffffffffffffffffffffffffffffee88b453735302e2b2a282625222223242626272724 +22232425282b28252324282f32312e2a2827242221201e1d1f2023222224282b2b272628 +2a2d333c434e81dffefffffffffffffffffffffffffffffffffff6abffffffffffffffff +fffffffffffffffffffffffffffffffffffff9be623b36312b2824222223242323252728 +262625242424222022262624232123282c2a272423232220201f1d1c1d2022232322262a +2c2a2626282b2f373b4660b6f8fffffffffffffffffffffffffffffffffff7b6ffffffff +fffffffffffffffffffffffffffffffffffffffffffee9924a37322b2523212021232624 +24252b2b2726252425262322222122232322232426292c2e2a26221f1f1e1d1c1e202324 +24232426292a2725272b2e32373f4e86e4fefffffffffffffffffffffffffffffffff9c8 +fffffffffffffffffffffffffffffffffffffffffffffffffffdd46f3d312a2422222220 +20212322222124262626262526252322211e212221201f2022252c32332e2925221f1d1e +2024282a292927252627282526292f3233394463bef9ffffffffffffffffffffffffffff +fffffbddfffffffffffffffffffffffffffffffffffffffffffffffffef7b155332a2422 +21211f1e1f202223221f1d202324252526231f1d1d1e2528272220202226272a2e2d2a27 +23212020242a3136363430282422242626262a3134363e4f8fe8feffffffffffffffffff +fffffffffffffad0fffffffffffffffffffffffffffffffffffffffffffffffffee3853f +2d27232222222221212326262320212121202121232422202123282c302f2b2b2c2c2b2c +2d2c2927252524262e3a444e504b4435292321232827292d32363a4264c3f9ffffffffff +fffffffffffffffffffff8bdffffffffffffffffffffffffffffffffffffffffffffffff +f6b65930282523242425242123262622212123222020212123262827272426292f343131 +32302d2b29272524252529314057646e74695b48322621222728292c30363b3f4b8be8fe +fffffffffffffffffffffffffffffce9ffffffffffffffffffffffffffffffffffffffff +fffffffee1843c2824252525252524232526242020212322222122212225282927242323 +272a2a2c2f2c28262625242324293547627f8b91958a755e412b23212529292b2e33373e +4461c4fcfffffffffffffffffffffffffffffce8ffffffffffffffffffffffffffffffff +fffffffffffffffac05e2f2524242525242221232525242322212221201f202123252422 +201f1f1f2121242626272728272625272a374c6683a5acaba9a090745436252123292b2b +2d3033383d4c99f1fffffffffffffffffffffffffffffad7ffffffffffffffffffffffff +fffffffffffffffffffffef19843292524222223221f1e202122232623202021211f1e1f +242625211d1d1e1f2121232627272a2e2e2c2b2d364e6d89a0bec4bfb6aca18c6c472c22 +21262a2e2f303336384171d4fcfffffffffffffffffffffffffff9c9ffffffffffffffff +fffffffffffffffffffffffffffffee075332826232120201f1e1c1c1d1e222524201e21 +22201c1a1e222423201f21242425282b2f302f302f2f30384b6b8eacbfcbcec9c0b4aa9b +82613d262124272d30313637373e5fa9ecfefffffffffffffffffffffffffce5ffffffff +fffffffffffffffffffffffffffffffffffffbc3592e28241f1e1e1d1e1d1c1c1d1e2123 +23201f1f1f1d1b191a1c1e20212021232425282a3035363333343b4e698eb4c9d1cfcecb +c6baac9f917f5931242425282d32373a383e609fe0fcfffffffffffffffffffffffffad6 +ffffffffffffffffffffffffffffffffffffffffffffef9d452b27221e1d1b1c1c1c1d1e +1e1e21222221201e1c1b1b1b1b1d1c1c1e1d1c1e1f212224272e3539414f647f9dc0d7db +d8d3d0cecabfb0a49c9378472924252429303538353c5b96dcf8feffffffffffffffffff +fffff8b9fffffffffffffffffffffffffffffffffffffffffffdd977382924201e1c1b1b +1b1c1e1e1d1f2221201f1d1c1b1b1c1c1e1f1e1f211f1d1e1f202023252b3549657f96ae +c9d8dfded9d6d1cfcdc2b4aaa39e8e6333252623242b313231374d83d2f1fdffffffffff +fffffffffffffad1fffffffffffffffffffffffffffffffffffffffffff9b85c3126231e +1d1c1d1d1c1c1c1c1b1c1e1f1e1d1c1c1d1e1e1f20202024272222222224262a2f364568 +8aa3b9cfe0e0dcdbd8d8d3d0cdc2bab1a7a29c7f492a282524282d2f2f354c78beeffdff +fffffffffffffffffffff8c1fffffffffffffffffffffffffffffffffffffffffef09c4a +2c25211e1d1d1d1d1e1c1a191a1d201f1e1e202122222222222223252421232526292c34 +3c455d85a9c0d4e4eae6dedadadad5d0ccc6c0b8ada5a3926334292928292d302f365d95 +d0f6fefffffffffffffffffffffff9c4ffffffffffffffffffffffffffffffffffffffff +fdda7b3e2a24201e1e1c1c1d1e1c1a191a1c1e1d1d1f2225262624222121202121212327 +2a2b303a455778a2c3d6e2e8eaeae4dcdadad6d1cdcbc5bcb0a9a59b77402a2a2b2c3034 +313b7bcaf5fefffffffffffffffffffffffff9c4ffffffffffffffffffffffffffffffff +fffffffffac061362924201e1d1b1b1d1e1d1b1a1a1b1c1c1e202224252424212020201f +1e2124272a2e36455a779dbfd5dfe2e5e7e9e7dfdcdad7d3cfcdc8bfb2aba9a0844f2e2a +2a2e323734429bf1fefffffffffffffffffffffffffffad2ffffffffffffffffffffffff +fffffffffffffffff4a9513227231f1e1c1b1b1d1e1d1b1a1a1b1c1d1e1f201f1e1e2121 +201f1f1f20232529303c4f647e9dbbd0d9dcdde2e6e8e6e3dfd8d5d4d1cfc8bdb2adaca2 +8c5e332b2c2e32383745a8f8fffffffffffffffffffffffffffff9c5ffffffffffffffff +ffffffffffffffffffffffffeb94492f25211e1d1c1b1c1c1d1c1b1a1a1c1d1d1c1d1f1f +1e1e1f1e1f20212224262a34465d758ba0b4c7d1d4d8dce0e4e5e6e5e1d9d6d6d4cfc7bb +b3afada59167382d2c292e3437439af3fffffffffffffffffffffffffffffad3ffffffff +fffffffffffffffffffffffffffffffee17f412e24201e1c1b1c1e1e1f1e1d1b1c1c1c1b +1b1c1e202021211e20232325282b364e6a8095a3b0becad1d6e0e5e9eaeaecece5dddad8 +d7d2c7bbb4afaba7956f3d2e2c25292f333d81e8fffffffffffffffffffffffffffffbdc +fffffffffffffffffffffffffffffffffffffffccf693a2b23201e1b1b20262827262220 +1e1c1c1b1a1b1d202324211f2125282a2f3953728b9aa7aeb5c1cbd3dde8eef4f5f7f8f4 +ece5e0dbd7d3cabdb6b0aaa4967443312e24252a2f3770e0feffffffffffffffffffffff +fffff8bafffffffffffffffffffffffffffffffffffffff8b256352a25221e1b1d2a3b3f +37312f2c261f1d1b1b1d1e202525212024292f373f547691a0a9aeb3b9c1cbd6e3eef3f9 +fcfdfdf9f1e9e2ddd7d2ccc4bab2aaa495774833302524262c3363d8feffffffffffffff +fffffffffffff9c9fffffffffffffffffffffffffffffffffffffff399442f2925231f1b +20354b534d4647463a2b25201e211f1f2222202329303c49537495a8aeb0b3b8bfc8d5e2 +eef7fafcfefefdfbf4e9e2ded5d0ccc7bfb6ada393794a332f2421242b315dd3feffffff +fffffffffffffffffffffad3fffffffffffffffffffffffffffffffffffffee681382b26 +2525201c233a535e5e5a5c5c54463d342a23232222222429303d4f596f95acb8bab9bdc2 +cbdae5edf3fbfefefefffefbf5eae1dcd4d0cdc8c1b9afa2937c4d332d2320242a305ad1 +fdfffffffffffffffffffffffffff9cbfffffffffffffffffffffffffffffffffffffdd3 +6a2f26242426201c253d556063646666635f584f4034302d2c2e30343d4c5c7499afbac2 +c7ccd3d6dce8edf0f6fdfefffffffefbf5ece5dfd7d3d0cbc3bbb1a4967e4d332c241f24 +292f5ed6fefffffffffffffffffffffffffff7b1ffffffffffffffffffffffffffffffff +fffffccc602c23212226211d243b535f636669696a6c69665b514e4d4a4a4c4d54627a9d +b6c1cad4dde3e7e6e7eceff4fbfefffffefefefcf7efeae3d9d8d7d2cabeb4a79a824f34 +2e241f24282d5cd3fefffffffffffffffffffffffffff7b7ffffffffffffffffffffffff +fffffffffffffbc65929211f2024221e243a515f63676a6b6d6f70726f6b6c6e6e707375 +7f92aac0ccd5e0e9eeeff0eeedeff1f6fcfefffffefcfcfcf8f1ebe2dbdadad5cfc5b7a9 +9a824d302e242023272b59cffdfffffffffffffffffffffffffffad0ffffffffffffffff +fffffffffffffffffffffab94d26201e1f23221f2338505f64696b6c6e70737577787a7f +858c9299acc1cdd7dee6eef1f3f3f2f2f1f4f5f8fcfefffffdf4f5faf8f2ece2d9d8d9d5 +d0c8bbab9b834c2d2a242223262955ccfdfffffffffffffffffffffffffff8bbffffffff +fffffffffffffffffffffffffffff9b34825211e1e22232022324a5d666a6c6c6f727578 +7a7c8189929aa2aec1d3dce4e9eef2f4f5f4f2f5f6f8f8fbfcfcfefefdf7f5f8f3ece9df +d3cecdcbcac6beaf9f88522e2a252223252748bafbfffffffffffffffffffffffffff8ba +fffffffffffffffffffffffffffffffffffff6ab4325211e1d212521202c465a656a6c6d +6f72767a7f8289919aa2acb7c7d5e1e9edf0f3f3f3f2f4f5f7f8f8f8f8f8fdfcf9f4f3f0 +e5dad4c6b8afa9a9b3bdbbb0a28c582e2925222223263ea9f9ffffffffffffffffffffff +fffff7adfefefefffffffffffffefefefffffffefefef09b3d231e1d1d21251f1c284257 +63696c6f6f73787e848990969ea5aeb8c5d1dce0e7e9edefefeef0f1f1f4f4f3f3f3f6f2 +eae4dfd2bfafa190837c75768297a8aaa18d5a2d2724201f21243ba3f8ffffffffffffff +fffffffffffff7b9fdfefefefefefefefefefdfdfefefdfdfdfdec973d231e1e1f232620 +1c243c54636a6d6f71777c838a8f949aa1a6adb5bdc6cfd4dadee1e6e9e9ebeae7e9ecef +eeebe5ddd7cdb79c7f6c635a53514c4e5362788e978e612f2723201f2124399ff8ffffff +fffffffffffffffffffff8bafbfcfbfcfbfcfcfcfbfcfbfbfbfaf9f9f9faeb993f231e1e +202528201b21375160696e70727981898e92969da2a6aaafb6bcc3c5cbd1d5dbe1e1e4e1 +dddce1e5e2dbd3c6bba37f62493f3d3b3b3b3a3b3f4751607583673226221e1e20233698 +f6fffffffffffffffffffffffffff8b6f7f7f8f7f7f8f8f6f6f8f6f6f6f4f3f3f4f5e595 +40241f1f222526201c1f324d5d666c707379848c9093979c9fa1a5aaaeb0b3b4b9c2c9cd +d5d8dcd9d2d0d4d8d2c7bdae9775544135302f30353a3c3d4144484e5a706a3625221e1e +2022328cf3fffffffffffffffffffffffffff5a5f3f3f5f4f3f2f2f2f2f2f1f1f0f0eff0 +f0eedb9041261f1f212323201c1d2a465a646b6f747a838b90919294969a9d9d9d9fa0a4 +a9afb7bfc8cdd0cfc9c6c9cbc4b9ab92735642362e2b2e3a4a545a5c5b58585755636b3e +2521201f20212c7aebfffffffffffffffffffffffffff7b4f0f1f1f1f0efefeeefeeedee +ededececebe9d08a4328211f2021211f1c1d253f57636a6e757c8288898482807c7d7f7b +797a818d9498a3b0b9bdc2c6c0bebfc1bbaf9a77584337322f34445b6b757b7a77746f66 +6168704a2822232422232a68defefffffffffffffffffffffffff9c5eceeeeeeedececec +ececebebeaeae9e8e8e5cc8b4528211f1f1f1e1d1c1b20365261696d737c817f7669605c +5756554f4d5159687178889ba8adb6bcbcbcbdbcb3a38b694d3f38353a475869737a8282 +7f7c79737078805d2c24262825252b58cefdfffffffffffffffffffffffff8beeaebeaea +eaeae9e9e8e8e9e8e6e7e6e4e5e2cd8d4527211f1d1d1d1c1a191c2f4d5f686d72787467 +5b4d413d3b39363233383b434b556880939daab5bec4c3beb19c81654f47423d41495562 +65646f7476787a797a858c6c3123272a29292e52c3fcfffffffffffffffffffffffff7af +eaeae8e8eae8e6e7e6e6e6e7e5e4e3e2e2dfcc8e442722201e1c1c1b1b1a1b2a4a5f696e +706b5b4b4037312d2b2a2726282c2c2e343d4f677e8fa2b3c1cecec4b29b806a584b4342 +464a4d5251525b5e5e6975797d89927a3a23262b2d2c2e50bffbffffffffffffffffffff +fffff8bbe9eae8e7e8e6e5e6e4e5e4e4e3e2e1e0e0dbc487422924211f1d1c1b1a191925 +475f686c69574136312c2927272623222528292b2d3443566c8099b3c9d5d6ccb59c856e +584a4848433d3b473c464b514f5468757f8b9584462627292b2b2c52c2fbffffffffffff +fffffffffffffacee8e8e6e6e5e5e6e5e3e4e4e4e2e1e0e0e0dac2833f272323201e1c1a +1a1a1a22435f68675b44332d2c2c2e3033322f2d2d2d2e2e2f36424d5e7390b1cfe0e4d7 +b99d866e58504f4942413c6746555043464e5b6f7f8c968e542a29292a292b5ccdfcffff +fffffffffffffffffffff8bee7e7e5e5e4e5e5e4e4e3e3e3e2e1e1e1e0d9bf7d3e272223 +221f1c1a1a1a1820415f665c49393332373e444a4c48413b34302f2e30374149566a89b1 +d6e9f3dfbb9d8770605a585d5047374d4e6c69544c555f6d808e989364302929292b2f71 +ddfdfffffffffffffffffffffffffacae7e6e5e4e3e4e3e4e3e3e3e3e2e1e1e0e0dbc07f +4027212022201b181919191f3d5e61503f38373d4952585b574f463e3a383b3834363d48 +546580a9d2e9f4dfbca18b7b71696d7f664f444b5d82826f66676d7583939c9873382b2b +2a2d3889ecfefffffffffffffffffffffffffbdae6e6e5e5e3e4e3e3e2e3e2e3e2e1e1e0 +dfdac1834328211f1f1f1c191919191f3d5d5b483e40454c555a5a54483f3b34393d4647 +443e3f485464789cc9e3ecdabaa5938f888083907d635d66798d8e83838788888f9ea39d +7d403636313049abf8fefffffffffffffffffffffffff8bbe5e4e5e5e3e3e4e2e2e3e1e2 +e2e1e1dfded9c28b4b2a201e1e1c1a181918191f3e5d5a4d494b505558544b43382d2b28 +444d59574c4e4b4e56647495c2dfe7d6b9a79a9e98908e8d857a788191999b9a9ca1a3a2 +a3abaca38449454c423d6ed6fdfffffffffffffffffffffffffff8bae6e5e5e4e3e2e2e2 +e2e1e0e1e0e0e0dededccca35f2f201e1e1b1a1818191a1f3e5e5e585654545450443936 +312d2d273d55828b6153595b5b627190b9d8e1d4bca99da1a39f968e86838891a0a9acaa +a9aeb1b2b3b7b3aa8f5a515e5759a1f0fffffffffffffffffffffffffffff7ade6e6e6e5 +e4e2e2e3e3e2e0e0dfe0e1dededed6bd7a39211d1c1b1b1817191a1f3f6165605c57534f +453630333b3b3b36405d95a68068676962626e8aaeccd8cebaa99c9ba09d928d8a8b929f +acb2b1acaab2bbc0bfbeb6ad9a7566666680d5fbfffffffffffffffffffffffffffff7b9 +e6e7e6e5e6e3e3e3e3e1e0dfe0e1e1dedfe0ddce9546241e1c1b1b1918191a2042636864 +5f56524a3c33323f50514e505870909f93857d7367636d84a4c3d1cbb6a99d969a9b9189 +86888e97a0a5a5a5acbbc6cac6c1b8ada091857576a5effeffffffffffffffffffffffff +fffff8bae7e7e6e5e4e4e3e3e4e3e2e0e1e2e1dfe0e0dfd8ac5a2a1f1d1c1d1b1a1a1a21 +44646a68625751473e3e44526267666a6e7c8b95918b807064636d7f9cbfd0ccbbaea49d +9da0a098908b8b8e949ba3aebcc8d0cecac4baaea29c9b9294c1f7ffffffffffffffffff +fffffffffffff8b6e7e8e7e6e6e4e5e4e4e3e2e2e2e3e2e1e1e1e0dcbf7434221f1f201e +1c1b1b2244656b69625a50494c545c646d747a7f80848a8a8581766862646c7b97bfd8d3 +c0b2aaa5a5a6a9abaaa7a5aaadb3bac4ccd2d5d1ccc7bfb3a49ca1a8b0d2f9ffffffffff +fffffffffffffffffffff5a5e8e9e8e8e6e6e6e5e4e4e3e4e3e2e1e2e2e1e0ddcc8a3d25 +2121201e1d1d1c2445646b6b655e57565e646a727b848a8c898582807e7e736865676d78 +94bbd8d9c3b4adaaabafb1b2b6bdc1c6c7c7cacdd0d5d7d2cdc9c1b3a59ea2abbcd8f7fe +fffffffffffffffffffffffffffff7b4e8e9e8e8e7e6e6e6e5e5e4e3e3e3e2e2e2e1e0dd +d095462823221f1e1f1e1e2442626c6e6c6866696d6b6a6f777f83827c797a7e8384766d +6b6b707a93b3d1decdbbb1acadb3b8bdbec2c9cecccbcccdced4d7d4cecac1b3a7a6aaa7 +b9d3effefffffffffffffffffffffffffffff9c5e8e8e8e8e6e6e5e5e5e4e4e3e2e2e3e3 +e1e0dfddcf9c522c2321201e1e1f1e2442636d6f7173777877736d6b6d71747575798189 +8c877a72706e727c92b6d9e4d4c0b6b0adaeb6c3c9cacdd0cfd0d1d4d5d9dad6d0ccc2b4 +a7abb4a4b0caeafdfffffffffffffffffffffffffffff8bee9e9e9e8e6e5e5e6e6e5e5e3 +e2e2e3e3e2e1e0dbd2b46f3924201e1e1e1f1f2341636e71767b8183817f7c77787c8083 +868b9193918a7e77726f737c90b5dce8d7beb6b1b1b1b5c1ced5d6d8d9dadee2e2e0dcd5 +d0cbc1b3a6adc0a8a3bee7fdfffffffffffffffffffffffffffff7afe9e9eae9e7e6e6e6 +e7e6e6e4e3e3e3e2e2e2e1ddd8cc95502b201d1e1f21222541646d71777f86898a8c8d8c +8e929696989a9b999591877b7371747a8cb2dcebdcc4b6b3b7bbbdc5d1dbdde1e3e5ecef +ece8e3d9d0c6beb2a6afc8ab9ebae2fdfffffffffffffffffffffffffffff8bbe9eaebea +eae8e7e7e7e7e7e5e4e4e3e3e3e2e1dfddd7b57036221d1e2024272d48666e717881888b +8d909496999ea19fa0a2a19d9d9d8f7c737374788db5dce8ddcab8b2b8bec2cad5e0e5e8 +edeff4f8f5f1e9dfd3c5bbb0a6afc3a4a1badefcffffffffffffffffffffffffffffface +ebebecebeae9e8e8e8eae7e6e6e4e4e4e5e4e3e1dfdccb974d271e1e232d343a4e686e71 +777e888e9093999da0a5a5a2a4a7a6a6abaa947d767575778db2d7e1dbcebdb2b1b5bacd +e0eaeff3f6f7f9fbfbf7ece2d6c9bcafa6acb59aa8badafbffffffffffffffffffffffff +fffff8beececececeae9e9e9e9eae8e7e7e6e5e5e6e5e4e3e1ded6b87033201f293c494a +54696e70747d8a9092979ea3a7aaa8a7a9adadafb6b0977f787675788eb1d3dcdcd7c6b4 +aeabadc4e0eef7fcfdfdfefefefaf0e4d6cbbcaea4a7aba3b8bddafbffffffffffffffff +fffffffffffffacaebebebeae9e9e9e9e8e8e8e7e7e7e6e5e5e4e3e3e2e0dbcc984a2623 +344f5953586a6d6f747d898f9298a0a4abaeaeb1b3b5b4b6b9b198807773737b92b5d5dd +dfdfd2beafa7a6b0c8e1f3fcfefefefefefbf2e5d7ccbcada2a2aab6c9c7dffcffffffff +fffffffffffffffffffffbdaeae9eae9e7e8e7e7e8e8e8e8e7e6e5e5e4e3e2e2e0dfdcd4 +b86d3229445d5f575b6a6c6e747d878e91979da5adb2b7bcbfbfbbb9beb5967c726f707c +98bdd7e0e4e6dac7b4a8a5a2b0c7dcf3fcfefefefefcf4e6d7cabbaca1a0afc2d1cee6fd +fffffffffffffffffffffffffffff8bbe9e8eae9e7e8e6e7e7e7e8e7e6e5e4e5e4e3e2e1 +dfdedcd7cb92463150625f59606c6c6e757f858b91989ea6b0b8c1c7c8c5c3bebfae8c74 +6e6e717e9bc4dde7eff3e4cbb7adaaa1a1adc0dceffafdfdfcfbf5e7d7c9b8aaa1a1b9d1 +d2ccecfefffffffffffffffffffffffffffff8bae7e8e9e8e8e8e6e6e6e7e6e5e5e4e3e4 +e3e2e1e0dedddad7d3b1633d5660595a666e6e6e747d82888f969ea8b5bfc8cdcdcdccc5 +b99d7d6c6a6e737e98c2dce3eef8e2c1b0acaea89d9da8c0d5e7f2f4f6f7f0e2d4c4b7ab +a1a1b7c8c2c8f0fefffffffffffffffffffffffffffff7ade8e8eae9e8e6e6e6e6e7e5e5 +e6e5e3e3e3e2e0dedddddbdad7c588535c5e575c6b6e6f70757b80858b939fabb9c5ced2 +d2d3d1c7b18a6e666971767c8eabc2ccd9e3ccaea1a5acaa9e979aa6bacedbe4eaede6d9 +cebfb3aba19fadb8b8d0f6fffffffffffffffffffffffffffffff7b9e8e8e8e7e6e6e6e6 +e6e6e5e6e5e4e3e2e1e1e0dedddcdbdad9d0ab73635d565d6f707071767a7d8288909ead +bcc8d0d5d7d5cebda07966656a7275737a899cadbcc1af968d95a0a19b9a9899a4b5c1cf +dce2ddd2c8baaea9a19eaebdbedafbfffffffffffffffffffffffffffffff8bae7e7e6e6 +e5e5e4e5e5e5e4e4e3e2e1e0e0e0dfdddcdbdad9d8d5c1906e61565b6e72717175797a7e +858e9badbccbd2d5d5d0c5af8d6d64656b706f68666e7f909da196827679848a94a1a097 +949dadbecfd7d4cbc2b5a9a6a29fb3c3c3e4fdfffffffffffffffffffffffffffffff8b6 +e6e6e5e4e3e4e3e3e3e2e2e2e2e2dfdededededbdbd9d8d8d7d4c9a47a695c5666707172 +7376777a828c9aacbacbd5d6d1c7b89d79635e616668635a575e6e7a7f827c674e4b5c75 +96a8a89a9193a0b2c2cbcbc4bbb0a5a2a09eaebbccf2feffffffffffffffffffffffffff +fffff5a5e4e5e4e4e2e2e1e1e2e1e0dfe0dfdfdddcdddddadad8d7d7d5d4cfb48772685d +626c7072737474777e8997a8b7c7d1d5cfc1ad8b695d5c5c5c5a50413c485c696c6b6857 +4d4f587a9fa9aba39a969dadbbc2c4beb6ada3a09e9ca4b6defbffffffffffffffffffff +fffffffffffff7b4e4e3e3e3e2e1e0e0e0e0dfdddddddcdbdadadadad8d6d6d5d4d3d0bb +9076716b65686f71727372737a8593a2b0bdc7cbc6b79f785e5a5f5d544c3c2d2a374b59 +5c5f69717d7c7b91a3a7a9a8a29ea1afbbc1bfbab3a9a0a19f9aa2c5f2feffffffffffff +fffffffffffffffffffff9c5e3e1e2e2e0dfdfdfdfdedddbdbdad9dadad9d8d8d7d7d5d4 +d3d2cfc39e7d76756a676e71707071717581909ca6b0babeb8ab8f6a585963645746393b +40434a504e546d828c8c8e979aa0a3a7a9a5a7b2bdc1bdb5afa69fa19f9aabe2fdffffff +fffffffffffffffffffffffffffff8bee2e1e2e1dfdedfdededddbd9dad9dad9d8d8d8d8 +d6d5d4d2d2d1cfc8ae897c7d766f6f716f6f706f727d8a959da7b1b4ad9f7f5f565c686a +6251444b53504b49444b657880868d9192999da5a7a5aab6bfc1bbb2aba4a0a19f9bb2ed +fefffffffffffffffffffffffffffffffffff7afe3e1e2e0dedddedddcdcdad9d8d7d8d7 +d6d7d8d6d5d4d3d3d1d0cecab9938082807b73716e6e6e6d70788490979fa7aaa695735a +58616967635b5251534e4742434d5e6e7a83888c9197999e9fa0a7b1bac0bbb3a9a4a2a3 +a099b0ecfefffffffffffffffffffffffffffffffffff8bbe1e1e1dfdddcdcdddddbd9d8 +d7d6d6d6d5d6d8d6d5d3d2d2d1cfcecabc957e7d7b7b72716e6c6b6b6e737d8991989ea1 +9e8d6e5c5d656764605d56514f4d4c4f545b6575858b8a8c929395989a9b9ca6b1bbbab1 +a9a5a4a5a097adeafdfffffffffffffffffffffffffffffffffffacee0e1e1dfdcdbdada +dadad8d7d6d6d7d5d5d5d6d5d4d2d0d0d0cfcec9bb8d71777878716f6e6c6a696b707983 +8c90969a9a896e60646867635d59565351565d61676b74838f8f8d90929293959590919c +aab5b7b0aaa6a6a69d95adebfefffffffffffffffffffffffffffffffffff8bedededede +dcdad8dadadad8d6d5d5d6d5d4d4d4d4d3d1d0d0cfcececbbe8f636b777973706e6d6b69 +6a6d747d878b9094948873696a6a68635e5b5f5e5c626e71788087909795919697969290 +90888893a2abb1b1aba8a7a59b92acecfefefffffffffffffffffffffffffffffffffaca +dddedddcdbdad8d8d8d8d6d6d4d5d6d4d4d3d3d3d2d1d0d0cecdcdcbc3a0675d7176726f +6e6c6a6a6a6a6e7680878c8f90887a726e6b696664646969686f7f87939da0a2a6a29da1 +9f988d88877e7d8a97a3adb0aba9a8a39790aaeafefeffffffffffffffffffffffffffff +fffffbdadcdddcdbdad9d7d8d6d6d6d5d5d5d5d4d3d3d3d2d1d0cfcfcecdcdccc8b68965 +656e6d6c6d6b696a69686b717c83888a8b867c76726f6d6c6b6c7071737e94a5b2b8b6b5 +b9b5b0aea59a8e857e767482909fadb1aca6a7a1948fadecfefeffffffffffffffffffff +fffffffffffff8bbdbdcdbd9d9d8d7d7d5d5d5d5d5d5d4d3d3d3d3d2d1d0cfcecdcdcbcb +c9c3ae86605e61646b6a696967676a707982878b8b857f7b7671706e6c6e7379818fa4b5 +c0c2beb9b4b0b0ada49c90817362657c8f9fadb1aca4a59d918eafeefeffffffffffffff +fffffffffffffffffffff8badbdad9d9d7d7d6d6d4d5d4d4d5d5d4d4d2d2d3d3d1cfcfce +cdcccbcacac8bfa0654645506669686867696a6f7882888f8c807b78726d6a696b6f7983 +8d959ea8aaa8a49b9390908d8b8880725f4d60879aa3afb1aca7a59c918eb5f1feffffff +fffffffffffffffffffffffffffff7add9d9d9d9d6d5d4d3d4d4d3d3d3d3d3d3d3d2d2d2 +cfcececdcdcccbcac9c7c4ae78422c385d6967686667696d767f86908b7c757069635e61 +69707b86878582837f7f7f7d7d7e7a716c66615b575e7899a7adb2b1aaa6a39a908ebff7 +fffffffffffffffffffffffffffffffffffff7b9d9d8d8d6d5d4d3d3d4d3d2d3d3d2d2d2 +d2d2d2d1cfcececdcdcdcacac8c7c5b894592f31566968666667696f767d828e8b7c7269 +5d5a5b606a6d6e6e6b696a6b686e6f7072726c64615d5f62708798a8adb3b6b0a8a6a196 +8d91cdfbfefffffffffffffffffffffffffffffffffff8bad8d7d5d4d3d2d3d2d3d2d0d1 +d0d1d2d1d0d1d2cfcdcccccccbcbcac9c7c5c5bdad7d42324e6668666565686f777d7e87 +8a827761494a53595c59555354585b5e5f636464696e6e727879797b8ea5b0b2aeb1b3ac +a7a59e918995d6fbfefffffffffffffffffffffffffffffffffff8b6d6d6d5d3d2d2d2d1 +d2d1d0d0d0d0d1d0cfd0d0cecdcccbcbcccccac8c6c5c4c0bca265404b6467656464696f +797f7c828a89826944394146474546494f545b636a6c717d88909191908c878da2b5bbb3 +aaabada7a4a29c8f889ce0fbfefffffffffffffffffffffffffffffffffff5a5d6d5d3d2 +d1d1d2d1d0cfd0d0d1d0d0d0cfd0cfcdcccbcbcbcbc9c8c7c5c5c3c2c2b9946753616665 +6362686d7883817f888f918663464042464a4e5965707c8a94989ca4aeb4a99a938d8f9d +b0babdafa1a1a4a2a3a1978b85a8edfcfefffffffffffffffffffffffffffffffffff7b4 +d4d3d2d1d1d0d1d0d0cfcfcfd0d0d0cfced0cecccdcacacacac7c6c5c4c3c2c3c4c3b899 +6a5f65646362666c7683867f87939a9b8a705e565a6166707d8b98a2a8aeafb0c0c5ad99 +8f8f9dadb7bdbba998979ea1a19c908685b7f7fdfefeffffffffffffffffffffffffffff +fffff9c5d3d3d2d1d1d0d0cfcfcfcfcfd0d0cfcfcfcfcdcccbcacacac9c6c6c4c3c3c3c4 +c5c6c7b77f6063636363676a737f87828592999e9f9384726a6a6b717b8c99a0a2abb0b1 +b8b5a298959daeb5b6bbb7a89590989c9c978c8187c6fafefefeffffffffffffffffffff +fffffffffffff8bed2d1d0d0cfcfcfcfcfcecfcfcfcfcecdcececdcbcac8c8c9c8c7c6c4 +c2c3c3c3c5c7cac08760616261646669717b8484828b939ba29f9784736d6b6d717d8a92 +959da7abacaaa4a5a8aeb4b3b3b4b0a38e8a94979a95887a8edafbfefefefeffffffffff +fffffffffffffffffffff7afd0cfcfcfcfcfcfcfcfcfcececfcfcecdcdcdcdccc9c7c7c8 +c7c6c5c3c2c3c4c4c5c8cac28b6162626262666a6e767e8483858a929a9e9a8c7f797775 +747a848d9298a3aaacadafafaeaeafb1b3b1a89c898690959994847aa0e9fcfefefefeff +fffffffffffffffffffffffffffff8bbcfcfcfcecdcecfcfcfcececececececccccbcbcb +c9c7c6c6c6c6c4c4c3c2c3c4c4bfb9b0845e6262626264676a70777e818383868d93938b +8481828283888e94999ca1a4a5a7a6a4a2a5aaacafada29587868f9396918380b7f4fdfe +fffffffffffffffffffffffffffffffffffffacececfcfcecececed0cfcfcecdcecdcdcb +cbcbcbcac7c6c5c5c7c6c4c3c3c3c4c4bfa48370594f5f6261626263686b71777c7f7d80 +868a8984828382848585898e908a827e848c8c8e94a0aaa9aaa69b8f84879194948d818d +d2f8fdfefffffffffffffffffffffffffffffffffffff8becececfcecececfcfcecdcdcd +cdcdcccbcccccccac7c5c5c5c6c5c3c3c2c3c4c5b588533831435e625f60616366696e72 +787a757982847e7c7d817e7e7a757575746d605e6a767a8392a3aca8a6a0988f88889297 +938981a8ecfcfdfefffffffffffffffffffffffffffffffffffffacacececfcecececfce +cdcccccdcdcdcbcacbcbcac9c6c5c4c4c5c5c3c3c2c3c5c4b3916335283e5d6560606163 +6467696d73757071777b78767678797a746c6866686864636a757c8797a6aba6a0999994 +8d8c9599908588caf9fefefefefffffffffffffffffffffffffffffffffffbdacecfcfce +cdcdcecececccccdcdcccbcacacac9c8c6c4c4c4c6c5c4c2c2c3c5c4b7a2884e2c3c5c68 +635f6061626566686c6f6b696d73727273757678766f6b6b6c6d6e6d737d85929fa8aaa4 +9f979b98919297998f8499e2fbfdfefefefefefffffffffffffffffffffffffffffff8bb +ced0cececdcccdcdcdcccccccccbcac9c9c9c8c8c6c4c4c4c5c5c3c2c2c3c5c4baa79c6d +393b5968665f5f6062646466676b6864666b6c6e707577797b767372706e72747c87909c +a9adaaa6a4a09e9a989a9a988d83a6ecfcfdfefffefefeffffffffffffffffffffffffff +fffff8bacdcecdcdcccbcccccccbcbcacacac9c8c8c7c8c8c5c4c3c3c3c3c3c2c3c3c5c4 +baaaa4895340556668615d5e60626365666865616062646a6e72777c7e78757675777c85 +9197a0abb3b2b0b0aea8a09e9d9d9a938780aceefdfefefefefefefffffffffffffffffe +fefffffffffff7adcccdcdcdcccbcccccccbcac9c8c9c8c7c7c7c8c8c4c3c3c3c2c3c3c3 +c4c4c5c3baaba59d7751526369625c5c5d5f6265676865605b5a61696d70757e827e7c80 +7e87929ba5a8b3b9bab8b8bab6aba4a39f98928c8382aeeefdfefefefefefeffffffffff +fffffffefefffffffffff7b9cdcecececccccccccccccbc9c7c8c8c8c8c7c8c7c5c3c3c3 +c3c5c3c4c5c4c4c2b8aea6a79370575d66645d5b5d5d6165686967625c5b626a6f71757e +8588888c888e9ba1a7afbbc0b8b7bcbeb8b0ada99e938c867f84adeefdfefefeffffffff +fffffffffffffffffffffffffffff8bacdcdcecdcccccbcacbcbcbc9c7c8c8c8c8c7c8c8 +c5c3c3c4c4c4c4c5c5c5c5c2b6afa8a9a3916f5b61645c5a5e5f6064676869655f5d6369 +6c6f767d83898c9191959ca0a9b1b9bcb8b6bcbeb8b1aca4998e86807e83a8ecfdfeffff +fefefefefffffffffffffffffffffffffffff8b6cccdcdcccbcbcacacac9c9cac8c8c7c6 +c5c5c7c7c5c3c2c3c4c3c2c3c4c5c5bfb3aea9a7a9a19066595f5b585a5d606365656867 +62616668696d777e8588898f969ea3a6a9afb4b7b5b4b7bbb5aca79e92877e7e8386a5e3 +fafefffffefefefefffffffffffffffffffffffffefef5a5cccdcccbcacac9c9cac9c8c9 +c8c7c7c7c5c5c6c6c5c3c1c3c4c3c2c3c5c5c3bbb2adaba9aaa5a3845b575957565b5f61 +646568676565696a6b7079818986868d97a3a8aaa7abb2b5b1afb0b2a9a2a49c8d7f7b80 +848496c5eafbfefefefefefefefffffffffffffffffffefefefef7b4cbcbcbcbc9c9c8c9 +c9c8c8c8c6c6c6c6c5c6c6c6c4c4c1c3c3c3c2c4c4c3c1b6afadabadabaaa6a275535456 +54555b60656869676464686d6d7177808683838a939fa2a4a1a3a8aca6a3a3a59b9a9c93 +8378798082818391b7e3fafefefefefefefffffffffffffffffffefefefdf9c5cacbcaca +c9c8c8c8c8c8c8c7c6c5c5c5c5c5c4c5c4c2c1c3c3c3c2c1bdb7b5afabacabafb0aaa7a9 +98644e515350555c636666656362676d6f72777d7f8182828592999b9c9fa0a09b9b9b98 +9093908579757c81817f797586b0e1fafdfdfdfdfefffffffffffffffffefefefefef8be +c9c9c8c9c7c5c5c5c6c6c6c5c4c4c3c3c3c4c4c4c3c1c1c2c2c2bbb1aaa39da0a7aaaaab +b2aca9a6aa8b5a4c4f4f4d525c6263626162656a6d7074797a7a7a7c7f898c8d8c929395 +9391918c8687827971767f81807c71626d85abd8f4fcfdfdfefefefffefefefefefefefd +fdfdf7afc8c8c7c6c6c5c5c6c5c5c5c5c4c4c2c2c3c5c5c4c1c1c1c2c2c0b29f9a9a9491 +a3aaaaadb0b1a9a8a8a67c534a4e4a4a525c6062626264686c6e6f71726f6f767e848686 +7e82868b8a857e7a7a79766e70797e8180796b555b6c83a3cdebf7fcfdfefefffefdfefe +fefffefdfdfdf8bbc8c7c6c5c5c4c5c5c5c5c4c4c4c3c2c2c5c6c5c4c0bfc0c1c1bcac9a +9b9f978e9ca7a9adafb3b0aba7a79e76544c4b4949525b62636264686a6b6b6c6e6c6a6e +767c7f807977797c7a7772706e6b6869737b7f807e786a524f57667c97b4def9fdfefefe +fefdfefefefffefdfdfdf9cec7c6c5c5c4c3c4c4c4c4c4c4c3c2c2c3c4c4c4c3c0c0c0c1 +c1baa99c9d9d9a919099a2a8b0b0b6adaba5a79a74584c4a47474f595f60626364636568 +67666766676a7175726f6f6e6d6d6a676360616d787c807d7b796c534d4f5461738fc9f5 +fdfdfefefdfdfefefefefefcfcfdf8bec7c6c5c4c4c4c5c5c4c3c4c5c4c2c2c3c3c3c3c3 +bfc1c2c1bfb5a69b9c9e9a90898b96a6adb0b4b6adaea5a7977a63514844444b545c5e5b +5b5c60625f5d6063605d666b6a6764636463605e595a68757d7f7f7b7a797465564f4f56 +6294d3f2fcfdfefefdfcfdfdfefefefcfcfdf9cac6c6c5c4c4c4c4c3c4c3c4c5c4c4c2c3 +c2c1c2c3c1c1c0c0bcaea19a9f9f9b90888687a2aab0afb8b4afaca3a997806d53454242 +4651585858595a5b59585b5f5c585d5e5d5c5b5859585754546171797e807f7c7a7a7874 +705d515364a2dfeefafcfdfdfcfcfdfdfefefdfcfcfdfad9c4c4c4c3c2c2c3c3c4c3c3c4 +c3c4c2c1c3c2c2c1c1c1bfbbb5a8a09c99979d8a81868392a7a9afb1baaeafa9a5a89386 +7351403e40434a5155565454535253555455585755545453504d4c505d6d74787c7d7d7b +7b79726b7d715a5165a2e5eef8fbfdfdfcfcfcfcfdfcfcfcfdfdf7bbc4c4c3c3c3c3c3c3 +c3c3c4c4c2c2c2c2c3c3c3c1c0bfbab4afa39e9a8c909583868c898299a5aaafb3b6aab0 +a8a8a89189754f3d3f4041454d51514e4e4e4f4f4c5053524d4b494744454d5e6e757676 +797b7f7d7b7a7165716c5c546599e2f2f8fbfcfcfcfcfcfcfcfcfcfcfdfcf7bac3c2c1c1 +c1c1c2c1c2c2c2c3c1c0c0c0c0c0bfb8b4b8b7b1a59ea2968a928d8b938b7e76809da0aa +abb2aeaab1a4aba28e8d744a393c3e3d4045484948494a4745454644413f3c3b4150606b +72757675797b7e7c7d7b7166685b54596590d9f5f7fbfafafbfbfbfbfbfcfbfbfcfbf4ad +c2c2c1c1c1c1c2c1c2c2c3c3c1c0bebfbab7b2968da5b2b0a6a7a89496988d9899847c7c +778a9ca1a9a7afa7acaca3ab9e918f6f4534373b3c3b3e404141423f3d3b3b3938373740 +52646c7172747576797a7b7c7d7b6f5e5c55535d678ecff3f6fbfafafaf9fafbfbfafafa +fcfbf4b8c2c1c1c2c1c0c3c2c1c2c4c3c1c1c0bdb0ac9e737096b5c1b4ababa19f9b989e +988d93907c7691a0a2a5a5a9a2aba7a3ac9c938c643e32373d3c3c3b3b3a393634353434 +33353d4e626e7173737475797a7b7e7e7d7a6d514b4f57626b93c9eff8fafafaf9f8f8fa +fafafafafbfaf5b9c1c1c0c2c1c0c1c2c2c2c3c2c1c0c2bfbabba27f91b2c4c7b3a8b1ac +a09ca39c9a9f9f937f7a809b9ea0a09fa29ea7a3a5a89694865c3d2f323a3f3f3f3c3934 +31303030343d4b5c697172727174767c7e81817b7a7b6b45404d5a646b94cfebf8fafaf9 +f8f7f8fafafaf8f9fafaf4b4c0c0c1c1c1c0c0c2c2c2c2c2c2c4bbafbdccbda9a8a9b8bf +bcbab9b1a5a1a0959da69c9490938585949698979b9d9ba39fa3a293947f593c2e323b3f +40403f3d383433353e4c5b656b706e6e6f71777e8286837c7a7c693d3b4f5f666d9ddeeb +f5f9faf9f8f8f8f9f9f9f8f8f9faf1a3c1bebfbfc0c1c1c1c0c0c1bfc5c49e8bacc2bbae +8f698cc2cbc8bab3b1ac99919c98929fa49d85757c8f8d93949798999f9aa09b94987b5a +402d313b404141413f3d3c434d5b676a6b6c696b6d6f798286827c7b7c7d693b38506266 +75a4e7eff3f8f8f9f7f7f8f7f9f8f8f8f7f8f1b2c0bfc1c0c0c1c1c0bebab8b5c5c09095 +b6bcbbad824b70c1d7ccbcbcbeab9399a19898a6a59588847a7f87898f8f9497969a999e +989d99755634282f393e4242434549535d666d6d6d6b6a6d6e707e878a817b7c7f7f6b3c +3752666b84ace6f3edf5f7f8f7f6f6f7f8f7f7f8f7f6f2c3bfbec0bfc0c1bfbfb9a79eae +cdcfb6a8a0b3c2bd85547fbed7d4c9b9b09f929b9c96a0a59d9796908775748284878992 +94979c9b9f9ba388553325252d374144464b515b646b6f6c6b68676e7174808a8c87817f +81816d3e3653677392bae1f0dde8f5f6f6f5f5f5f7f7f6f5f6f5f1bcbebebec0c2c1c0c3 +b5958aadd2ded19971a1d6daa46f98bbc2c7c1a8a2a5a1a0968d9698949a9a8f80706972 +7f7d808691969b9d9fa19d89482e2a29292e3b464e52555c656b6d6868666770757d868a +8a89878184836d3d33536f829abed1e9d2c9e5f3f4f3f3f4f6f6f5f5f5f6f0adbdbebebf +bfc4cccdc0a69fb6cedac9895e95d6e5d5acb9ccc0a8a2a6adb7bbaf9a95908a8a979685 +7a7575696d797f808794989d9fa397713a2e3645413a3e47525757596066686565656a73 +7b858989888b888487846a3a365d8294919195c5ba98c0e2edf0f1f2f4f3f3f4f4f4f0b9 +bfc0bfb1a8bed6cec3aa848bc0d2b0776a9cc4d7e4c9cdddbd786296b8c0c5b5a6a79482 +8b9794878a877a69666b7e80848e96999d9f98633936466a76746b5856595654555a5e5f +62666e7a848b8c8b8b8d8a8889856a3b3f6c8d9a764c4d778a77a6cbddeaf0f2f4f3f4f2 +f2f4f2ccc3c8c6ab9fb3c8d0ceaa717bc3d7bc978eabb3bbbebed5dcac655491c1c6c2b9 +aca38e838d8f919da3917872766e6e747e8b9097989a93633b3f5e94b1baac8e715d5552 +4f52585c636d79848b8f9192918f8b8a8b83633f5175949b643538578490b3c0c4d4e5eb +f3f4f5f2f2f4f0bcc9d2cfb79780a2d5e1c3909fcad6c8c2bdbcad967897d1e2a35d73ae +c4cec7bba993888785828fa0a28b7e7b736b635e7181898d91938b65424c72a5c1d9ddc9 +a96f565251545b646d7780889095979795928d8b8c805a4a637ca49c5c373e5d8aa2beb6 +9eaecad2e9f3f5f4f3f4f2c8ced7ceb58271a4d3dadacac9d0c5aaabc6c8b181567cbddc +c7899ecdd1d6d2c09e8e9994877f8e9a97898b85726463636e787b838a918f73475282ac +b5b7cdd0c394685a5a606770767c858d959b9d9a96918e8d8c765665819ac1a35f475c82 +949fb4a48c9fc1c5d5ecf3f3f4f4f3d8c0d8d2c099a0ccc8b3b6c9d1cbad7870adc8b677 +649abfd0d9cbccc6c6dcdbd1afa0afa592888e948e8b8f8f7d767b7a7a716e77848d937f +515085adafa9c3dee7c98e6964676d72777f8891989ea09d97908e8e8b787ca5becdd99e +656886a7ada4997f82adc5b9b2d4e7e7eaf0efb89cd6e0d0d0dce3c3866898cace975e5d +9ecacb9182c0cec6d3e7d19c97cbdedec19f9e979286878b878c908f838c918e8d8c8581 +808a928b5f4a79a59f93acc7d7d2a77468676c6f75828e969da1a4a2988e8d9093a2c3e0 +efe8c8887591aab5beae896378afbea58baccfced4e3eab6accbcbafbee3e4be73558dc7 +cda07384b3d6dac8c4cdc1c2dee8b4696dbfe4d7a7777387978a83858d8f8e8788988e86 +91a8a8a5918692946c4459889389909aadc8bf836c6a6d6e7482929da5a8aaa4978c8f9d +a9ceeaf2e9cc967e91a3b0b7bdb4a2889cbeb79c919fbabdb5bad0a5c7c39d7092cdd9c6 +887fafccd0c6b5b8c9d3d3d7d9aa98bedfdc9c5158a9ded19961658da6a49689908b877f +8894868796a5abb8b6a19a9e764452829b9c9b9ba6c2bb846f6e6e707783919fa9adada5 +9c9aabc0c8e6e7d6a57e7b869eabadb4b4acaca8bbc7a47b90a7b2b19a8dada8ccb48073 +a8cacfceb8b6c7cfcdcec7b6afbfd1e0d27e64a7dacf804b6bb1e0d2ac8c98b5b5a99892 +948881848a8c7e8ea0a1a3bdcdc4b7a37d4e4e789eaba59791979d7d7170717478818e9d +aab0b2afb6c5d3d5c8caa276576785899aa9acadaa9d998d9eb8a07d9bafa99b9ca6b9a9 +dabe908db8c5c6d5c5b3a8b4cbc6b0816a98cfd9b76f5a9ed9c4845485cbe3d6bac1d9e0 +c7a8a1a4a090888487887c889da4a2b0c7cbc0b8a881625d666665686e76847a76747374 +78818a99a7ab9f88878d89877d7b5f3e55778192a1a7a2a7a5917b6676abb2a2b3b89574 +8eb6c6a5e9d5c2b3adb4c3d6cba57087c7cbb46f5992cfc89c6880b8dbcd9e829ecbd3cc +bacae9e1cab4a6bab49e96888c8a81868f9da6b0c2c4b0b0c3b5968678665557595b6066 +737674767b81858ea191684c4543424650635140698992a3a9a49ca6a59785788fb4b8a0 +aabea1899cbab98edfd9c7a06f77aeccbc855f8acfd2c99081b4d8cbb99aa5c9d8d4b0a3 +acb2b0a07991d2dcc3af8a8fa5aeac989a8988898c9295a1adac9a9dbdbfb7b9ab9e8d83 +766a696674807a77797a75849f9b7a54423c3f4e697159657f94a1a3a49d9eaba6a7afa8 +b0bbaf8084b2b0a5aabcb69bccccb37b4e68acc6c1907db4d7d3c8c0b4c2c9b7b9bfcdcf +c8bea4a8b9b4a3834e62bcdac9995d5488b3b9a79991918e898c8d8d8f96979ba8b6b8b2 +b8bcc4bbaca19f9ca5a4897e79706b8ea1b4a77c544b5875878187a3afaaada49d9ba2ab +9790afbdbdb6a87e86b2b29289aeb9afb1bdad786a95bdbfb7bcc3dad0c2bac2cdcec39b +8da8d3e4cc986b87bbb8a375485eaed5daaf756ea3bbb7a7a2a2948c8b8c8b89878a9a98 +96adb3a5abb3bec7bfb4b1b9b9b4a49f96898ea8afbeb298807c83989ea0abb2b7ac9e9c +9797a39f6e5f9ec9c2a19ba3acc4bb7c70a7bca9bbb9b8acafc8c9b8a4abcee8c6a99095 +c0cbb2835678c6dec8854c6bb0b8b679507eb0c7ddc5b6b4cbd4cdbcb7b8a29494878a95 +89829594909ea5919299a9b5b5aeacbcb9b7b6c1bec0c3c2bdc3beb0b2b6abb1aba5a7a1 +a29a90989a98a48f5a68a8d0b97b75acb4c3c19296b8c39cc3bbb8bbc9d6cda97772ace3 +ce9c6861a4cdb8794868bad2c88a5b80afb4c5b38a9db6c4d8cdd1d8bebccfcbc8bca399 +9f8f93a0918688898989978a818c9fa9a4a5a3b0b6b7acb8bcc2c8c3bec2c9c2c7cbb6b1 +ac9c96928e8d90999e9fa3836587b4d1b37979afb1adb9c1c5c4c6aacab99291bad2d2a1 +5c4f98dbde995b6aadd9d8986084c1d5cdb7909fbfc4c1c3bdbac1d7e2dadbd29c88afc9 +ceb6a3a9b0a7a9af9d88818488868985839096a19c979aa1adada0a2a8b1bbb6a8bbc3b5 +c1c8b0a49f94958e858c9495a0a5a3897f91aacebba1a3baaf868ac1c7b0a6b3d2af665b +a4ccd195596ba7d3e4b57b96d1eae2c09ba9cdd5cccbb7afbfd9cdb8b8aba5c3dfdbd5bf +734979c4dcc2a0a1b1b9baafa08d909aa0968a88858a8c8f8b8d909a9e919ea9aeb4bdb2 +a1b5b7a1b4bba49895949889868e9598a3a9a28f776c90c2b6a8b0c0b07982bbbc95708d +c5965d60a2d0dab485a5d2dbded4bfc8e0e9e4d1bcb1c5d0cac6bba49ec9c5bcb3885e71 +b5d6cc97583d69c5e4c98f738babbbb3a99d9ea5aba09c918c8d8e8c7f89939a9596aaab +a5adb0a6a4a8a59aa3a89e979791928991959ba2acb19f7f5c578cb8a57f88bac1a0b0d5 +cb966a97dbac7b8cbdd9e2cec3cce1e3dad2c7b5b8cde1d1b68886b4d1c0ad85659ac3ce +b77b484f9acfcb91585f84c4d9ccb39091afc6bfb0a8a5a6a8a4aea396909b9c929a9b9e +959fada8929ea29ca0a39e999d9aa0a0968b8687969aa4a9adafa0755f89afbd996372b7 +c8b2bee0dbbba4bbeeddb3a2b7cfe9dfd0baaaafc6cfc188668dc9bea5734d81c0b89567 +5081c4ddbc6c5477a2c9cfb892919db6c6c6d6c9bbd0dbc8b3afb0b3b0b2b7ac97939fa7 +a5a7a397919db3a99fa19a93a2a6999aa19aa1a08f8882929e9da2a4a8acb0a4a1c8c8bf +a98592bdbe9097c9d0cdc3a8d8dbc7987b99d6dec6915f76aabab27a4d6fb6ba96614d74 +b1be996371aad2e2d99d7ea0b3c3d3cbb8afb0bbc5bcc6d1d4e5e0c6aba7adb3aebabcac +9ba1a2a29fa2a69a959db5afb4aaa3a1aaa597999e999b9b908f8ea1a9a9a6a8aaa6b2be +ccd0b7afbeaea1ada3686eafbfb59393a1a8a48c7983a1b1b1a18b94a9ada88d808da5a9 +9b847b80919b93858fb0cadde3d7c4bfcad4d5d0c8c2c6c9c4bcbeb6b8c1b8aa9d9f9fa8 +aaaeb2aba9ababa89fa19b88888d97928e888a8987878a88868185837b7b86989ba19fa1 +9d9ca4a4afac999695836e6463575e777e7e7982 +showpage diff --git a/graphics/psfig/doc/figs/zip.ps b/graphics/psfig/doc/figs/zip.ps new file mode 100644 index 0000000000..783ec71b24 --- /dev/null +++ b/graphics/psfig/doc/figs/zip.ps @@ -0,0 +1,21 @@ +%! +%%BoundingBox: 301.0 392.44 360.02 437.4 +/Times-Italic findfont 30 scalefont setfont + +/printZip { + 0 0 moveto + (Zip) show +} def +320 400 translate + +.95 -.05 0 { + setgray + printZip + -1 .5 translate +} for + +1 setgray printZip + + +showpage + diff --git a/graphics/psfig/doc/psfig-doc.tex b/graphics/psfig/doc/psfig-doc.tex new file mode 100644 index 0000000000..0aec9e8121 --- /dev/null +++ b/graphics/psfig/doc/psfig-doc.tex @@ -0,0 +1,292 @@ +%\documentstyle[psfig]{article} +\documentstyle{article} +\input ../psfig.sty +\begin{document} +\pssilent +\psfigurepath{figs} +\def\Ps{Post\-Script} +% +\title{Psfig/\TeX\ 1.10 Users Guide} +\author{Trevor Darrell \\ {\it trevor@media.mit.edu}} +\date{\ } +\maketitle + +\section{Introduction} +Psfig/\TeX\ is a macro package for \TeX\ that facilitates the +inclusion of \Ps\ figures into \TeX\ documents. With the +help of a compatible postprocessor, +\footnote{The {\tt dvips} program developed by T. Rokicki +has full psfig support; it is available via anonymous FTP from {\tt labrea.stanford.edu}. OzTeX also supports psfig and is available from various ftp sites. Psfig is available from {\tt whitechapel.media.mit.edu}.} +\Ps\ figures are automatically +scaled and positioned on the page, and the proper amount of space is +reserved. +Custom characters such as +`\psfig{figure=pretzel.ps,height=8pt,silent=}' and +`\psfig{figure=cm.ps,height=8pt,silent=}' +may be created and used freely throughout a document, or figures can +be presented as traditional broken-out displays: +\par +\hbox{ +\hspace{.3in} +\vbox{\psfig{figure=zip.ps}\vspace{.5in}} +\psfig{figure=piechart.ps,height=1.5in} +\vbox{\psfig{figure=starlines.ps}\vspace{.6in}} +} + +\section{Simple figures} +To include a \Ps\ figure with psfig, include the psfig style at the top +of your document: +\begin{quote} +{\tt\verb+\documentstyle[psfig,...]{article}+} +\end{quote} +and then, when you wish to include a figure, invoke the macro +\begin{quote} +{\tt\verb+\+psfig\{figure={\it input}\}} +\end{quote} +where {\it input} is the name of a \Ps\ file. Psfig will +automatically position the figure at the current point on the page, +and reserve the proper amount of space in \TeX\ so that it doesn't +block any other objects on the page. For example, if we have a file +called `piechart.ps' which contains the \Ps\ code to draw the chart in +the introduction, we could use the commands +\begin{quote} +\tt +\verb+\+par \\ +\verb+\+centerline\{\verb+\+psfig\{figure=piechart.ps\}\} \\ +\verb+\+par +\end{quote} +to include it as a centered paragraph. +Since no mention of size was made in the above example, psfig draws the figure +at its natural size (as if it was printed directly on +a \Ps\ printer.) The pie's natural size is several inches across, which +is a little large; the pie in the introduction was produced with: +\begin{quote} +\tt\verb+\+centerline\{\verb+\+psfig\{figure=piechart.ps,height=1.5in\}\} +\end{quote} +The {\tt height} option specifies how tall the figure should be on the +page. Since no {\tt width} was specified, the figure was scaled +equally in both dimensions. (This will also happen with a {\tt width} +but no {\tt height} option.) By listing both a {\tt height} and {\tt +width}, figures can be scaled disproportionately, with interesting +results: +\par +\centerline{\hbox{ +\psfig{figure=rosette.ps,height=.8in,width=.15in} +\psfig{figure=rosette.ps,height=.8in,width=.35in} +\psfig{figure=rosette.ps,height=.8in} +\psfig{figure=rosette.ps,height=.8in,width=1.2in} +\psfig{figure=rosette.ps,height=.8in,width=1.5in} +}} +\par +\noindent This figure was produced with: +\begin{quote} +\tt\verb+\+centerline\{\verb+\+hbox\{ \\ +\verb+\+psfig\{figure=rosette.ps,height=.8in,width=.15in\}\\ +\verb+\+psfig\{figure=rosette.ps,height=.8in,width=.35in\}\\ +\verb+\+psfig\{figure=rosette.ps,height=.8in\} \\ +\verb+\+psfig\{figure=rosette.ps,height=.8in,width=1.2in\}\\ +\verb+\+psfig\{figure=rosette.ps,height=.8in,width=1.5in\}\\ +\}\} +\end{quote} +The \verb+\psfig+ macro is (unfortunately) sensitive to whitespace, and will be +confused by any extra spaces or newlines in its argument. +\section{Sources of figures} +\hbox{ +\vbox{\psfig{figure=trevor.ps,height=1in}} +\hspace{.15in} +\vbox{\parbox{3.5in} {Any program that produces \Ps\ as output +can be used for psfig figures +as long as it adheres to the bounding box comment convention (see below). +For instance, the bitmap image +of the author was included as a figure at left.}\vspace{.2in}}} + +Since the Macintosh drawing applications produce \Ps, they can be used +to create figures. However, the \Ps produced by most Macintosh +applications is often not well suited to be included directly as +aBpsfig figure, unless it is saved as an ``EPSF compliant'' file. If +the file is not EPSF compliant then the postscript may have to be +edited before being used as an included figure. + +\section{Draft figures and Silent mode} +\begin{figure} +\centerline{ +\psfig{figure=rosette.ps,height=2in} +\psdraft +\psfig{figure=rosette.ps,height=2in} +\psfull +} +\vspace{.25in} +\centerline{Figure 2: The rosette.ps figure, in non-draft and draft mode} +\end{figure} +Normally, psfig will print advisory messages to remind you that it is +including figures as TeX processes a document. This behavior can +be disabled with {\tt \verb+\+pssilent}, and re-enabled with +{\tt \verb+\+psnoisy}. +\par +Some \Ps\ figures can take quite a long time to transmit and print; +for these figures a draft mode is available to speed printing of draft +versions of the document. A figure printed in draft mode will appear +as an outlined box (Figure 2). The macro {\tt +\verb+\+psdraft} will switch into draft mode, and all subsequent psfig +macros will produce draft figures until reaching the macro {\tt +\verb+\+psfull}, which switches out of draft mode. + +No {\tt +\verb+\+special} commands are used in draft mode, so a draft document +can be previewed using any Dvi viewer. Psfig uses the \LaTeX\ {\tt +\verb+\+fbox} command to produce the draft box; thus draft boxes will +not work in plain \TeX. The printing of boxes in draft mode can be +disabled/enabled with {\tt +\verb+\+psnodraftbox} and {\tt +\verb+\+psdraftbox}. + +\section{Bounding boxes} +To properly translate and scale a figure psfig must know its `natural' +position on the page; this information is present +in what is called the {\it bounding box} of a \Ps\ program. The +bounding box is an outer limit to the marks created by a program, +and is specified as four coordinates of a rectangle: the lower-left $x$ coordinate +(bbllx), the lower-left $y$ coordinate (bblly), the upper-right +$x$ coordinate (bburx), and the upper-right $y$ coordinate (bbury). +Adobe has defined a convention whereby the bounding box of a program +is contained in a `bounding box comment'. +\footnote{See `Appendix J: \Ps\ File Structuring Conventions' in +{\it The \Ps\ Language Reference Manual}} +This comment, which must be present in any file to be used as a psfig figure, +is a line of the form +\begin{quote} +\tt \verb+%%+BoundingBox: \it bbllx bblly bburx bbury +\end{quote} +All values are in \Ps\ points, relative to the {\it default} +transformation matrix. The only mandatory \Ps\ convention is +that the first line of the file should begin with the characters +`\verb+%+!' (a `\verb+%+' begins a comment in \Ps.) A good place for the +bounding box comment is as the second line of the file. +\par +If a bounding box comment is present in the figure file, psfig will +extract its values. The bounding box values may instead be specified +directly in the {\tt \verb+\+psfig} argument, using clauses of the +form {\tt bbllx=\it bbllx},{\tt bblly=\it bblly},..., in which case +the figure file is not searched for the bounding box. + +\section{Reserved size} +\par +\psfig{figure=box.ps,rheight=0bp,rwidth=0bp,height=1.25in,width=\textwidth,silent=} +\par +There are two sizes associated with each psfig figure: the size +at which it is to be printed on the page +and the size it reserves in \TeX. This latter size is appropriately +termed the {\it reserved size}, and is expressed as clauses of the form +``{\tt rheight={\it dimen}}'' +and ``{\tt rwidth={\it dimen}}''. If omitted, the reserved size defaults +to the real size. Some special effects need to be transparent +to \TeX\ and thus have a zero reserved size, such as the grey +box enclosing +this paragraph. + +\section{Clipping} +Normally a \Ps\ program can be expected to not mark the page +outside its bounding box. If this is not the case, or if you +want to specify a bounding box so as to isolate part of a larger figure, +there is an option that sets the \Ps\ clip path so that +no marks will show up outside the declared bounding box. Currently +this is invoked by adding a clause of the form ``{\tt clip=}''. +Here a slice has been taken out of the pie chart in the example by +specifying a smaller bounding box and adding the clip option. +\par +\centerline{\protect\fbox{\psfig{figure=piechart.ps,height=2in,bbllx=306bp,bblly=396bp,bburx=486bp,bbury=546bp,clip=}}} +\centerline{A piece of the pie.} +\vspace{.2in} +\par +Some \Ps\ programs use the clipping path to position their output on +the page; if a figure is being drawn at its natural size and position +despite psfig commands to the contrary, it may need the clip option. + +\newpage +\section{Rotating figures} +Figures can be rotated by psfig using the {\tt angle={\it degrees}} +clause. For example, here is the rosette and its 90 degree rotation: + +\centerline{\hbox{ +\psfig{figure=rosette.ps,height=1.0in} +\psfig{figure=rosette.ps,height=1.0in,angle=90} +}} + +By default psfig scales the figure so that its rotated bounding box +fits within the desired size. This can lead to counterintuitive results +when rotating to angles which are not multiples of 90 degrees. Here +is the rosette rotated to 0,20,40, and 60 degrees. + +\centerline{\hbox{ +\psfig{figure=rosette.ps,height=1.0in} +\psfig{figure=rosette.ps,height=1.0in,angle=20} +\psfig{figure=rosette.ps,height=1.0in,angle=40} +\psfig{figure=rosette.ps,height=1.0in,angle=60} +}} + +With autoscaling, some rotated figures come out smaller because the +diagonal of their bounding box is of course longer than their height +or width alone. This behavior can be disabled with {\tt +\verb+\+psscalefirst}, and re-enabled with {\tt +\verb+\+psrotatefirst}. With {\tt \verb+\+psscalefirst} a new +height and width is computed after the bounding box; +the previous figure would now look like: + +\psscalefirst +\centerline{\hbox{ +\psfig{figure=rosette.ps,height=1.0in} +\psfig{figure=rosette.ps,height=1.0in,angle=20} +\psfig{figure=rosette.ps,height=1.0in,angle=40} +\psfig{figure=rosette.ps,height=1.0in,angle=60} +}} + +While the rotated figures will all come out at the same +size their reserved sizes will be different, thus +they may not be aligned correctly. + +\section{Compressed Figures} +Psfig allows the inclusion of compressed \Ps files when using +the {\tt dvips} dvi processor. +The shell script {\tt pscompress} is used to compress figures, and +produces two files: {\it filename}{\tt .bb} and {\it filename}{\tt .Z}. +The first file contains the bounding box comment only, while the second +file contains the actual compressed PostScript file. Usage: +\begin{quote} +\tt \verb+%+ pscompress \it filename +\end{quote} +When psfig searches for a figure, if it fails to find +{\it filename}, it then searches for {\it filename}{\tt .bb}. +If that file exists, it is used for bounding box processing, +and a command to decompress and include the file {\it filename}{\tt .Z} +is issued to dvips. + +\section{Figure search path} + +Psfig first searches in the current directory for a figure (or +in the specified directory if given an absolute path). If it fails +to find the figure in the current directory, it optionally searches +a search path of figure directories to see if the figure is +present. To specify the figure search path, use +\begin{quote} +\tt \verb+\+psfigurepath\verb+{+\it dir1 \tt :\it dir2\tt :\it ...\tt :\it dirn\tt\verb+}+ +\end{quote} +where {\it dir1...dirn} are the directories figures are to be found in. +\newpage +\section{Acknowledgements} +\par +This work was done while the author was with the Department of +Computer and Information Science, University of Pennsylvania. Ned +Batchelder co-developed the original {\it troff} version of this +program with the author, and was responsible for much of the overall +design. For more detailed information on the original version of \Ps\ +see {\it Psfig -- A Ditroff Preprocessor for PostScript Figures} in +the USENIX 87 proceedings, or {\it Bringing troff up to speed} in the +July 1987 issue of Unix Review. + +Greg Hager provided the initial pure-\TeX\ implementation of psfig. +J. Daniel Smith of Schlumberger CAD/CAM implemented the rotation +feature and improved the file scanning routines, using certain code +fragments from Tom Rokicki's dvips program. +\par +\end{document} + diff --git a/graphics/psfig/doc/psfig.man b/graphics/psfig/doc/psfig.man new file mode 100644 index 0000000000..b638852867 --- /dev/null +++ b/graphics/psfig/doc/psfig.man @@ -0,0 +1,261 @@ +.TH Psfig/TeX 1 +.SH NAME +Psfig/TeX (1.10) \- PostScript figures in TeX +.SH SYNTAX +\\\fBinput psfig\fP +.SH DESCRIPTION +.B Psfig/TeX +is a macro package for TeX, as well as LaTeX, that facilitates the +inclusion of PostScript figures into (La)TeX documents. +With the help of a compatible postprocessor, PostScript figures are +automatically scaled and positioned on the page, and the proper amount +of space is reserved. +Figures can be presented as traditional broken-out displays, +and Custom characters may be created and used freely throughout a document. +.PP +The \fBdvips\fP program developed by Tomas Rokicki has full +\fBpsfig\fP support. The \fBOzTeX\fP package has support for +all \fBpsfig\fp functions except compressed figures. +.PP +.SH USAGE +To include a figure with \fBpsfig\fP, include the \fBpsfig\fP style at +the top of your document. +In LaTeX: ``\\\fBdocumentstyle\fP[psfig,...]{article}''; in TeX: +``\\\fBinput\fP psfig''. +Then invoke the macro ``\\\fBpsfig\fP{figure=\fIfilename\fP}'', where +\fIfilename\fP is the name of a PostScript file. +.B Psfig +will automatically position the figure at the current +point on the page, and reserve the proper amount of space. +.PP +.SH OPTIONS +Options may be specified in the form +``\\\fBpsfig\fP{figure=\fIfilename\fP,\fIoption\fP=\fIvalue\fP,\fIoption\fP=\fIvalue\fP,...}''; +recognized options include \fBheight\fP, \fBwidth\fP, \fBrheight\fP, +\fBrwidth\fP, \fBclip\fP, and \fBangle\fP. +.IP height 9 +The ``\fBheight\fP=\fIdimen\fP'' option specifies how tall the +figure should be on the page. +When no \fBwidth\fP is specified, the figure is scaled equally +in both dimensions. +.IP width +The ``\fBwidth\fP=\fIdimen\fP'' option specifies how wide the +figure should be on the page. +When no \fBheigth\fP is specified, the figure is scaled equally +in both dimensions. +.IP +If no \fBheight\fP or \fBwidth\fP option is given, the figure's +`natural' size will be used. +By listing both a \fBheight\fP and \fBwidth\fP, figures can be scaled +disproportionately. +.IP rheight +There are two sizes associated with each \fBpsfig\fP figure: the size +at which it is to be printed on the page and the size it reserves +in TeX. +This latter size is appropriately termed the reserved size, and is +expressed as an option of the form ``\fBrheight\fP=\fIdimen\fP'', +to reserve a vertical size of \fIdimen\fP. +If omitted, the reserved size defaults to the real size. +Some special effects need to be transparent to TeX and thus have a +zero reserved size, such as a grey box enclosing a paragraph. +.IP rwidth +To reserve a width in TeX, the ``\fBrwidth\fP=\fIdimen\fP'' +option is used. +.IP clip +The ``\fBclip\fP=t'' option sets the PostScript clipping path +so that no marks will show up outside the declared bounding box. +This option allows the user to isolate part of a larger figure, +by specifying a new bounding box: +``\\\fBpsfig\fP{figure=figs/piechart.ps,height=2in,bbllx=306bp,% +bblly=396bp,bburx=486bp,bbury=546bp,clip=}'' +.IP angle +Figures can be rotated by \fBpsfig\fP using the ``\fBangle\fP=\fIdegrees\fP'' +option. +Example: +``\\\fBpsfig\fP{figure=figs/rosette.ps,height=1.0in,angle=90}''. +.PP +.SH AUTOSCALING +With autoscaling, some rotated figures come out smaller because the +diagonal of their bounding box is longer than their \fBheight\fP +or \fBwidth\fP alone. +This behavior can be disabled with \\\fBpsscalefirst\fP, and re-enabled +with \\\fBpsrotatefirst\fP. +With \\\fBpsscalefirst\fP a new \fBheight\fP and \fBwidth\fP are +computed after the bounding box. +While the rotated figures will all come out at the same size, their +reserved sizes will be different, thus they may not be aligned +correctly. +.PP +.SH SOURCES OF FIGURES +Any PostScript program can be used as a +\fBpsfig\fP figure, as long as it adheres to the +Encapsulated PostScript Format (EPSF), which +dictates a set of forbidden operators and a comment +structuring convention. \fBPsfig\fP +is actually less restrictive than the EPSF requirements; it can handle +some of the "non-compliant" postscript operators, and the only +required comment is the Bounding Box comment (see below). +.PP +.SH BOUNDING BOXES +To properly translate and scale a figure \fBpsfig\fP must know +its `natural' position on the page; this information is present +in the `bounding box comment' of a PostScript program. +This is a line of the form +``%%BoundingBox: \fIbbllx bblly bburx bbury\fP'' in the header of +the file. +.PP +The bounding box specifies four coordinates of a rectangle that +defines the outermost edges of the PostScript figure: the lower-left +\fIx\fP coordinate (\fIbbllx\fP), the lower-left \fIy\fP coordinate +(\fIbblly\fP), the upper-right \fIx\fP coordinate (\fIbburx\fP), and +the upper-right \fIy\fP coordinate (\fIbbury\fP). +This rectangle must be present in any file to be used as a +\fBpsfig\fP figure. +Most modern graphics packages produce (encapsulated) PostScript +files which contain a ``%%BoundingBox:'' comment line in the header. +All \fIbb...\fP values are in points, relative to the default +transformation matrix. +.PP +.SH MISSING BOUNDING BOX +When no bounding box comment line is present in your PostScript file, +you can edit one in. +The only mandatory PostScript convention is that the first line of +the file should begin with the characters `%!'. +A good place for the bounding box comment is the second line of +the file. +.PP +The bounding box values may also be specified directly in the +\\\fBpsfig\fP argument, using clauses of the form +``bbllx=\fIbbllx\fP,bblly=\fIbblly\fP,...'', in which case +the figure file is not searched for the bounding box. +.PP +To control the amount of white space around a figure in a (La)TeX +document, it may be necessary to experiment with the bounding box +parameters \fIbb...\fP, also in cases where the bounding box is +provided by the plot or graphics package. +.PP +.SH DRAFT FIGURES +Some PostScript figures take quite a long time to transmit and print; +for these figures a draft mode is available to speed printing of draft +versions of the document. +A figure printed in draft mode will appear as an empty box. +The macro \\\fBpsdraft\fP will switch into draft mode, and all +subsequent \fBpsfig\fP macros will produce draft figures until reaching +the macro \\\fBpsfull\fP, which switches out of draft mode. +.PP +No \\\fBspecial\fP commands are used in draft mode, so a draft document +can be previewed using \fIany\fP DVI viewer. +The printing of boxes in draft mode can be disabled/enabled with +\\\fBpsnodraftbox\fP and \\\fBpsdraftbox\fP. +.PP +.SH SILENT MODE +Normally, \fBpsfig\fP will print advisory messages to remind you that it is +including figures as (La)TeX processes a document. This behavior can +be disabled with \\\fBpssilent\fP, and re-enabled with \\\fBpsnoisy\fP. +.PP +.SH COMPRESSED POSTSCRIPT FILES +As off version 1.9, \fBpsfig\fP allows the inclusion of compressed +PostScript files (when using \fBdvips\fP). +.PP +To compress PostScript files, the shell script \fBpscompress\fP is used. +\fBPscompress\fP produces two files: \fIfilename\fP.bb and \fIfilename\fP.Z. +The first file contains the bounding box comment only, while the second +file contains the actual compressed PostScript file. +Usage: ``% \fBpscompress\fP \fIfilename\fP''. +.PP +When (La)TeX is run on \fIyour_document\fP.tex, the file \fIfilename\fP.bb +is scanned for the bounding box comment, to allow (La)TeX to properly +reserve the right size for the figure. +Only when the file \fIyour_document\fP.dvi is printed by means of \fBdvips\fP, +the actual PostScript file \fIfilename\fP.Z is decompressed (\fBzcat\fP-ed) +and included in \fIyour_document\fP.ps. +.PP +.SH MACINTOSH FIGURES +Since the Macintosh drawing applications produce PostScript, they can +be used to create figures. +However, the PostScript produced by most Macintosh applications is often +not well +suited to be included directly as a \fBpsfig\fP figure, unless it is +saved as an "EPSF compliant" file. If the file is not "EPSF compliant" +then the postscript may have to be edited before being used +as an included figure. See the \fBpsfig\fP tool \fBcleanfig\fP +and the sample document \fBmacdemo.tex\fP for guidance. +.PP +Non-EPSF Macintosh PostScript files often +require a ``Laserprep'' prolog in order to +be properly printed. +A laserprep prolog can be included with the \fBdvips\fP special +header command at the top of your (La)TeX file: +``\\\fBspecial\fP{header=lprep70.procs}''. +\fBPsfig\fP provides `lprep68.procs', as well as `lprep70.procs', +to suit various versions of the Macintosh applications. +.PP +.SH FIGURE SEARCH PATH +Psfig first searches in the current directory for a figure (or +in the specified directory if given an absolute path). If it fails +to find the figure in the current directory, it optionally searches +a search path of figure directories to see if the figure is +present. To specify the figure search path, use +"\\psfigurepath{dir1:dir2:...:dirn}", +where dir1...dirn are the directories figures are to be found in. +.PP +.SH PROBLEMS +.IP Problem: 10 +The page with graphics is not printed. +.IP Solution: 10 +Remove lines containing `\fBshowpage\fP' and/or `\fBstop\fP' +from the PostScript graphics file. +Lines of this kind are usually found near the end of the file. +.IP Problem: 10 +The figure is positioned in weird places. +.IP +Generally, this is an indication that the PostScript ``%%BoundingBox:'' +comment is missing. +It may also be that a translation takes places \fIafter\fP the +bounding box was determined. +.RE +.IP Solution: 10 +Edit a bounding box comment into the PostScript file +and/or experiment with the \fIbb...\fP values (see: MISSING BOUNDING +BOX above). +.PP +.SH BUGS +The \\\fBpsfig\fP macro is (unfortunately) sensitive to whitespace, +and will be confused by any extra spaces or newlines in its argument. +.PP +The LaTeX \fBletter\fP style must be loaded after the +\\\fBpsfig\fP macros due to naming conflicts. This can be +forced by including psfig with an explicit \\\fBinput\fP +command before the \\\fBdocumentstyle\fP command. +.PP +.SH ACKNOWLEDGEMENTS +This work was done while the author was with the Department of +Computer and Information Science, University of Pennsylvania. Ned +Batchelder co-developed the original troff version of this +program with the author, and was responsible for much of the overall +design. For more detailed information on the original version of +see \fIPsfig \- A Ditroff Preprocessor for PostScript Figures\fP in +the USENIX 87 proceedings, or \fIBringing troff up to speed\fP in the +July 1987 issue of Unix Review. +.PP +Greg Hager provided the initial pure-TeX implementation of \fBpsfig\fP. +J. Daniel Smith of Schlumberger CAD/CAM implemented the rotation +feature and improved the file scanning routines, using certain code +fragments from Tom Rokicki's \fBdvips\fP program. +.PP +Thanks to Sake Hogeveen (hogeveen.fys.ruu.nl) for editing this man page. +.SH AUTHOR +Trevor Darrell +.PP +.SH SEE ALSO +tex(1), latex(1), dvips(1), psfig-troff(1) +.PP +A printed version of the psfig-tex manual may be obtained by typing +.br +``% \fBlatex\fP psfig-doc'', then ``% \fBdvips\fP psfig-doc'', +.br +and finally printing the resulting psfig-doc.ps file on your nearest +PostScript printer. +The manual provides many examples with real-life PostScript graphics, +see the text of psfig-doc.tex for more usage examples. + diff --git a/graphics/psfig/pscompress b/graphics/psfig/pscompress new file mode 100644 index 0000000000..c0f1346818 --- /dev/null +++ b/graphics/psfig/pscompress @@ -0,0 +1,12 @@ +#!/bin/csh -f +while ($1 != "") + if (-e $1.bb || -e $1.Z) then + echo will not overwrite $1.bb or $1.Z, skipping + shift + else + echo "%\!" > $1.bb + grep \%\%BoundingBox $1 >> $1.bb + compress $1 + shift + endif +end diff --git a/graphics/psfig/psfig.sty b/graphics/psfig/psfig.sty new file mode 100644 index 0000000000..606c18ce8e --- /dev/null +++ b/graphics/psfig/psfig.sty @@ -0,0 +1,995 @@ +% Psfig/TeX +\def\PsfigVersion{1.10} +\def\setDriver{\DvipsDriver} % \DvipsDriver or \OzTeXDriver +% +% All software, documentation, and related files in this distribution of +% psfig/tex are Copyright 1993 Trevor J. Darrell +% +% Permission is granted for use and non-profit distribution of psfig/tex +% providing that this notice is clearly maintained. The right to +% distribute any portion of psfig/tex for profit or as part of any commercial +% product is specifically reserved for the author(s) of that portion. +% +% To use with LaTeX, use \documentstyle[psfig,...]{...} +% To use with TeX, use \input psfig.sty +% +% Bugs and improvements to trevor@media.mit.edu. +% +% Thanks to Ned Batchelder, Greg Hager (GDH), J. Daniel Smith (JDS), +% Tom Rokicki (TR), Robert Russell (RR), George V. Reilly (GVR), +% Ken McGlothlen (KHC), Baron Grey (BG), Gerhard Tobermann (GT). +% and all others who have contributed code and comments to this project! +% +% ====================================================================== +% Modification History: +% +% 9 Oct 1990 JDS used more robust bbox reading code from Tom Rokicki +% 29 Mar 1991 JDS implemented rotation= option +% 25 Jun 1991 RR if bb specified on cmd line don't check +% for .ps file. +% 3 Jul 1991 JDS check if file already read in once +% 4 Sep 1991 JDS fixed incorrect computation of rotated +% bounding box +% 25 Sep 1991 GVR expanded synopsis of \psfig +% 14 Oct 1991 JDS \fbox code from LaTeX so \psdraft works with TeX +% changed \typeout to \ps@typeout +% 17 Oct 1991 JDS added \psscalefirst and \psrotatefirst +% 23 Jun 1993 KHC ``doclip'' must appear before ``rotate'' +% 27 Oct 1993 TJD removed printing of filename to avoid +% underscore problems. changed \frame to \fbox. +% Added OzTeX support from BG. Added new +% figure search path code from GT. +% +% ====================================================================== +% +% Command synopsis: +% +% \psdraft draws an outline box, but doesn't include the figure +% in the DVI file. Useful for previewing. +% +% \psfull includes the figure in the DVI file (default). +% +% \psscalefirst width= or height= specifies the size of the figure +% before rotation. +% \psrotatefirst (default) width= or height= specifies the size of the +% figure after rotation. Asymetric figures will +% appear to shrink. +% +% \psfigurepath{dir:dir:...} sets the path to search for the figure +% +% \psfig +% usage: \psfig{file=, figure=, height=, width=, +% bbllx=, bblly=, bburx=, bbury=, +% rheight=, rwidth=, clip=, angle=, silent=} +% +% "file" is the filename. If no path name is specified and the +% file is not found in the current directory, +% it will be looked for in directory \psfigurepath. +% "figure" is a synonym for "file". +% By default, the width and height of the figure are taken from +% the BoundingBox of the figure. +% If "width" is specified, the figure is scaled so that it has +% the specified width. Its height changes proportionately. +% If "height" is specified, the figure is scaled so that it has +% the specified height. Its width changes proportionately. +% If both "width" and "height" are specified, the figure is scaled +% anamorphically. +% "bbllx", "bblly", "bburx", and "bbury" control the PostScript +% BoundingBox. If these four values are specified +% *before* the "file" option, the PSFIG will not try to +% open the PostScript file. +% "rheight" and "rwidth" are the reserved height and width +% of the figure, i.e., how big TeX actually thinks +% the figure is. They default to "width" and "height". +% The "clip" option ensures that no portion of the figure will +% appear outside its BoundingBox. "clip=" is a switch and +% takes no value, but the `=' must be present. +% The "angle" option specifies the angle of rotation (degrees, ccw). +% The "silent" option makes \psfig work silently. +% +% ====================================================================== +% check to see if macros already loaded in (maybe some other file says +% "\input psfig") ... +\ifx\undefined\psfig\else\endinput\fi +% +% from a suggestion by eijkhout@csrd.uiuc.edu to allow +% loading as a style file. Changed to avoid problems +% with amstex per suggestion by jbence@math.ucla.edu + +\let\LaTeXAtSign=\@ +\let\@=\relax +\edef\psfigRestoreAt{\catcode`\@=\number\catcode`@\relax} +%\edef\psfigRestoreAt{\catcode`@=\number\catcode`@\relax} +\catcode`\@=11\relax +\newwrite\@unused +\def\ps@typeout#1{{\let\protect\string\immediate\write\@unused{#1}}} + +\def\DvipsDriver{ + \ps@typeout{psfig/tex \PsfigVersion -dvips} +\def\PsfigSpecials{\DvipsSpecials} \def\ps@dir{/} +\def\ps@predir{} } +\def\OzTeXDriver{ + \ps@typeout{psfig/tex \PsfigVersion -oztex} + \def\PsfigSpecials{\OzTeXSpecials} + \def\ps@dir{:} + \def\ps@predir{:} + \catcode`\^^J=5 +} + +%% Here's how you define your figure path. Should be set up with null +%% default and a user useable definition. + +\def\figurepath{./:} +\def\psfigurepath#1{\edef\figurepath{#1:}} + +%%% inserted for Searching Unixpaths +%%% (the path must end with :) +%%% (call: \DoPaths\figurepath ) +%%%------------------------------------------------------ +\def\DoPaths#1{\expandafter\EachPath#1\stoplist} +% +\def\leer{} +\def\EachPath#1:#2\stoplist{% #1 part of the list (delimiter :) + \ExistsFile{#1}{\SearchedFile} + \ifx#2\leer + \else + \expandafter\EachPath#2\stoplist + \fi} +% +% exists the file (does not work for directories!) +% +\def\ps@dir{/} +\def\ExistsFile#1#2{% + \openin1=\ps@predir#1\ps@dir#2 + \ifeof1 + \closein1 + %\ps@typeout{...not: \ps@predir#1\ps@dir#2} + \else + \closein1 + %\ps@typeout{...in: \ps@predir#1\ps@dir#2} + \ifx\ps@founddir\leer + %\ps@typeout{set founddir #1} + \edef\ps@founddir{#1} + \fi + \fi} +%------------------------------------------------------ +% +% Get dir in path or error +% +\def\get@dir#1{% + \def\ps@founddir{} + \def\SearchedFile{#1} + \DoPaths\figurepath +% \fi +} +%------------------------------------------------------ +%%% END of Searching Unixpaths + + +% +% @psdo control structure -- similar to Latex @for. +% I redefined these with different names so that psfig can +% be used with TeX as well as LaTeX, and so that it will not +% be vunerable to future changes in LaTeX's internal +% control structure, +% +\def\@nnil{\@nil} +\def\@empty{} +\def\@psdonoop#1\@@#2#3{} +\def\@psdo#1:=#2\do#3{\edef\@psdotmp{#2}\ifx\@psdotmp\@empty \else + \expandafter\@psdoloop#2,\@nil,\@nil\@@#1{#3}\fi} +\def\@psdoloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else + #5\def#4{#2}\ifx #4\@nnil \else#5\@ipsdoloop #3\@@#4{#5}\fi\fi} +\def\@ipsdoloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil + \let\@nextwhile=\@psdonoop \else + #4\relax\let\@nextwhile=\@ipsdoloop\fi\@nextwhile#2\@@#3{#4}} +\def\@tpsdo#1:=#2\do#3{\xdef\@psdotmp{#2}\ifx\@psdotmp\@empty \else + \@tpsdoloop#2\@nil\@nil\@@#1{#3}\fi} +\def\@tpsdoloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil + \let\@nextwhile=\@psdonoop \else + #4\relax\let\@nextwhile=\@tpsdoloop\fi\@nextwhile#2\@@#3{#4}} +% +% \fbox is defined in latex.tex; so if \fbox is undefined, assume that +% we are not in LaTeX. +% Perhaps this could be done better??? +\ifx\undefined\fbox +% \fbox code from modified slightly from LaTeX +\newdimen\fboxrule +\newdimen\fboxsep +\newdimen\ps@tempdima +\newbox\ps@tempboxa +\fboxsep = 3pt +\fboxrule = .4pt +\long\def\fbox#1{\leavevmode\setbox\ps@tempboxa\hbox{#1}\ps@tempdima\fboxrule + \advance\ps@tempdima \fboxsep \advance\ps@tempdima \dp\ps@tempboxa + \hbox{\lower \ps@tempdima\hbox + {\vbox{\hrule height \fboxrule + \hbox{\vrule width \fboxrule \hskip\fboxsep + \vbox{\vskip\fboxsep \box\ps@tempboxa\vskip\fboxsep}\hskip + \fboxsep\vrule width \fboxrule} + \hrule height \fboxrule}}}} +\fi +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% file reading stuff from epsf.tex +% EPSF.TEX macro file: +% Written by Tomas Rokicki of Radical Eye Software, 29 Mar 1989. +% Revised by Don Knuth, 3 Jan 1990. +% Revised by Tomas Rokicki to accept bounding boxes with no +% space after the colon, 18 Jul 1990. +% Portions modified/removed for use in PSFIG package by +% J. Daniel Smith, 9 October 1990. +% +\newread\ps@stream +\newif\ifnot@eof % continue looking for the bounding box? +\newif\if@noisy % report what you're making? +\newif\if@atend % %%BoundingBox: has (at end) specification +\newif\if@psfile % does this look like a PostScript file? +% +% PostScript files should start with `%!' +% +{\catcode`\%=12\global\gdef\epsf@start{%!}} +\def\epsf@PS{PS} +% +\def\epsf@getbb#1{% +% +% The first thing we need to do is to open the +% PostScript file, if possible. +% +\openin\ps@stream=\ps@predir#1 +\ifeof\ps@stream\ps@typeout{Error, File #1 not found}\else +% +% Okay, we got it. Now we'll scan lines until we find one that doesn't +% start with %. We're looking for the bounding box comment. +% + {\not@eoftrue \chardef\other=12 + \def\do##1{\catcode`##1=\other}\dospecials \catcode`\ =10 + \loop + \if@psfile + \read\ps@stream to \epsf@fileline + \else{ + \obeyspaces + \read\ps@stream to \epsf@tmp\global\let\epsf@fileline\epsf@tmp} + \fi + \ifeof\ps@stream\not@eoffalse\else +% +% Check the first line for `%!'. Issue a warning message if its not +% there, since the file might not be a PostScript file. +% + \if@psfile\else + \expandafter\epsf@test\epsf@fileline:. \\% + \fi +% +% We check to see if the first character is a % sign; +% if so, we look further and stop only if the line begins with +% `%%BoundingBox:' and the `(atend)' specification was not found. +% That is, the only way to stop is when the end of file is reached, +% or a `%%BoundingBox: llx lly urx ury' line is found. +% + \expandafter\epsf@aux\epsf@fileline:. \\% + \fi + \ifnot@eof\repeat + }\closein\ps@stream\fi}% +% +% This tests if the file we are reading looks like a PostScript file. +% +\long\def\epsf@test#1#2#3:#4\\{\def\epsf@testit{#1#2} + \ifx\epsf@testit\epsf@start\else +\ps@typeout{Warning! File does not start with `\epsf@start'. It may not be a PostScript file.} + \fi + \@psfiletrue} % don't test after 1st line +% +% We still need to define the tricky \epsf@aux macro. This requires +% a couple of magic constants for comparison purposes. +% +{\catcode`\%=12\global\let\epsf@percent=%\global\def\epsf@bblit{%BoundingBox}} +% +% +% So we're ready to check for `%BoundingBox:' and to grab the +% values if they are found. We continue searching if `(at end)' +% was found after the `%BoundingBox:'. +% +\long\def\epsf@aux#1#2:#3\\{\ifx#1\epsf@percent + \def\epsf@testit{#2}\ifx\epsf@testit\epsf@bblit + \@atendfalse + \epsf@atend #3 . \\% + \if@atend + \if@verbose{ + \ps@typeout{psfig: found `(atend)'; continuing search} + }\fi + \else + \epsf@grab #3 . . . \\% + \not@eoffalse + \global\no@bbfalse + \fi + \fi\fi}% +% +% Here we grab the values and stuff them in the appropriate definitions. +% +\def\epsf@grab #1 #2 #3 #4 #5\\{% + \global\def\epsf@llx{#1}\ifx\epsf@llx\empty + \epsf@grab #2 #3 #4 #5 .\\\else + \global\def\epsf@lly{#2}% + \global\def\epsf@urx{#3}\global\def\epsf@ury{#4}\fi}% +% +% Determine if the stuff following the %%BoundingBox is `(atend)' +% J. Daniel Smith. Copied from \epsf@grab above. +% +\def\epsf@atendlit{(atend)} +\def\epsf@atend #1 #2 #3\\{% + \def\epsf@tmp{#1}\ifx\epsf@tmp\empty + \epsf@atend #2 #3 .\\\else + \ifx\epsf@tmp\epsf@atendlit\@atendtrue\fi\fi} + + +% End of file reading stuff from epsf.tex +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% trigonometry stuff from "trig.tex" +\chardef\psletter = 11 % won't conflict with \begin{letter} now... +\chardef\other = 12 + +\newif \ifdebug %%% turn me on to see TeX hard at work ... +\newif\ifc@mpute %%% don't need to compute some values +\c@mputetrue % but assume that we do + +\let\then = \relax +\def\r@dian{pt } +\let\r@dians = \r@dian +\let\dimensionless@nit = \r@dian +\let\dimensionless@nits = \dimensionless@nit +\def\internal@nit{sp } +\let\internal@nits = \internal@nit +\newif\ifstillc@nverging +\def \Mess@ge #1{\ifdebug \then \message {#1} \fi} + +{ %%% Things that need abnormal catcodes %%% + \catcode `\@ = \psletter + \gdef \nodimen {\expandafter \n@dimen \the \dimen} + \gdef \term #1 #2 #3% + {\edef \t@ {\the #1}%%% freeze parameter 1 (count, by value) + \edef \t@@ {\expandafter \n@dimen \the #2\r@dian}% + %%% freeze parameter 2 (dimen, by value) + \t@rm {\t@} {\t@@} {#3}% + } + \gdef \t@rm #1 #2 #3% + {{% + \count 0 = 0 + \dimen 0 = 1 \dimensionless@nit + \dimen 2 = #2\relax + \Mess@ge {Calculating term #1 of \nodimen 2}% + \loop + \ifnum \count 0 < #1 + \then \advance \count 0 by 1 + \Mess@ge {Iteration \the \count 0 \space}% + \Multiply \dimen 0 by {\dimen 2}% + \Mess@ge {After multiplication, term = \nodimen 0}% + \Divide \dimen 0 by {\count 0}% + \Mess@ge {After division, term = \nodimen 0}% + \repeat + \Mess@ge {Final value for term #1 of + \nodimen 2 \space is \nodimen 0}% + \xdef \Term {#3 = \nodimen 0 \r@dians}% + \aftergroup \Term + }} + \catcode `\p = \other + \catcode `\t = \other + \gdef \n@dimen #1pt{#1} %%% throw away the ``pt'' +} + +\def \Divide #1by #2{\divide #1 by #2} %%% just a synonym + +\def \Multiply #1by #2%%% allows division of a dimen by a dimen + {{%%% should really freeze parameter 2 (dimen, passed by value) + \count 0 = #1\relax + \count 2 = #2\relax + \count 4 = 65536 + \Mess@ge {Before scaling, count 0 = \the \count 0 \space and + count 2 = \the \count 2}% + \ifnum \count 0 > 32767 %%% do our best to avoid overflow + \then \divide \count 0 by 4 + \divide \count 4 by 4 + \else \ifnum \count 0 < -32767 + \then \divide \count 0 by 4 + \divide \count 4 by 4 + \else + \fi + \fi + \ifnum \count 2 > 32767 %%% while retaining reasonable accuracy + \then \divide \count 2 by 4 + \divide \count 4 by 4 + \else \ifnum \count 2 < -32767 + \then \divide \count 2 by 4 + \divide \count 4 by 4 + \else + \fi + \fi + \multiply \count 0 by \count 2 + \divide \count 0 by \count 4 + \xdef \product {#1 = \the \count 0 \internal@nits}% + \aftergroup \product + }} + +\def\r@duce{\ifdim\dimen0 > 90\r@dian \then % sin(x+90) = sin(180-x) + \multiply\dimen0 by -1 + \advance\dimen0 by 180\r@dian + \r@duce + \else \ifdim\dimen0 < -90\r@dian \then % sin(-x) = sin(360+x) + \advance\dimen0 by 360\r@dian + \r@duce + \fi + \fi} + +\def\Sine#1% + {{% + \dimen 0 = #1 \r@dian + \r@duce + \ifdim\dimen0 = -90\r@dian \then + \dimen4 = -1\r@dian + \c@mputefalse + \fi + \ifdim\dimen0 = 90\r@dian \then + \dimen4 = 1\r@dian + \c@mputefalse + \fi + \ifdim\dimen0 = 0\r@dian \then + \dimen4 = 0\r@dian + \c@mputefalse + \fi +% + \ifc@mpute \then + % convert degrees to radians + \divide\dimen0 by 180 + \dimen0=3.141592654\dimen0 +% + \dimen 2 = 3.1415926535897963\r@dian %%% a well-known constant + \divide\dimen 2 by 2 %%% we only deal with -pi/2 : pi/2 + \Mess@ge {Sin: calculating Sin of \nodimen 0}% + \count 0 = 1 %%% see power-series expansion for sine + \dimen 2 = 1 \r@dian %%% ditto + \dimen 4 = 0 \r@dian %%% ditto + \loop + \ifnum \dimen 2 = 0 %%% then we've done + \then \stillc@nvergingfalse + \else \stillc@nvergingtrue + \fi + \ifstillc@nverging %%% then calculate next term + \then \term {\count 0} {\dimen 0} {\dimen 2}% + \advance \count 0 by 2 + \count 2 = \count 0 + \divide \count 2 by 2 + \ifodd \count 2 %%% signs alternate + \then \advance \dimen 4 by \dimen 2 + \else \advance \dimen 4 by -\dimen 2 + \fi + \repeat + \fi + \xdef \sine {\nodimen 4}% + }} + +% Now the Cosine can be calculated easily by calling \Sine +\def\Cosine#1{\ifx\sine\UnDefined\edef\Savesine{\relax}\else + \edef\Savesine{\sine}\fi + {\dimen0=#1\r@dian\advance\dimen0 by 90\r@dian + \Sine{\nodimen 0} + \xdef\cosine{\sine} + \xdef\sine{\Savesine}}} +% end of trig stuff +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\psdraft{ + \def\@psdraft{0} + %\ps@typeout{draft level now is \@psdraft \space . } +} +\def\psfull{ + \def\@psdraft{100} + %\ps@typeout{draft level now is \@psdraft \space . } +} + +\psfull + +\newif\if@scalefirst +\def\psscalefirst{\@scalefirsttrue} +\def\psrotatefirst{\@scalefirstfalse} +\psrotatefirst + +\newif\if@draftbox +\def\psnodraftbox{ + \@draftboxfalse +} +\def\psdraftbox{ + \@draftboxtrue +} +\@draftboxtrue + +\newif\if@prologfile +\newif\if@postlogfile +\def\pssilent{ + \@noisyfalse +} +\def\psnoisy{ + \@noisytrue +} +\psnoisy +%%% These are for the option list. +%%% A specification of the form a = b maps to calling \@p@@sa{b} +\newif\if@bbllx +\newif\if@bblly +\newif\if@bburx +\newif\if@bbury +\newif\if@height +\newif\if@width +\newif\if@rheight +\newif\if@rwidth +\newif\if@angle +\newif\if@clip +\newif\if@verbose +\def\@p@@sclip#1{\@cliptrue} +% +% +\newif\if@decmpr +% +\def\@p@@sfigure#1{\def\@p@sfile{null}\def\@p@sbbfile{null}\@decmprfalse + % look directly for file (e.g. absolute path) + \openin1=\ps@predir#1 + \ifeof1 + \closein1 + % failed, search directories for file + \get@dir{#1} + \ifx\ps@founddir\leer + % failed, search directly for file.bb + \openin1=\ps@predir#1.bb + \ifeof1 + \closein1 + % failed, search directories for file.bb + \get@dir{#1.bb} + \ifx\ps@founddir\leer + % failed, lose. + \ps@typeout{Can't find #1 in \figurepath} + \else + % found file.bb in search dir + \@decmprtrue + \def\@p@sfile{\ps@founddir\ps@dir#1} + \def\@p@sbbfile{\ps@founddir\ps@dir#1.bb} + \fi + \else + \closein1 + %found file.bb directly + \@decmprtrue + \def\@p@sfile{#1} + \def\@p@sbbfile{#1.bb} + \fi + \else + % found file in search dir + \def\@p@sfile{\ps@founddir\ps@dir#1} + \def\@p@sbbfile{\ps@founddir\ps@dir#1} + \fi + \else + % found file directly + \closein1 + \def\@p@sfile{#1} + \def\@p@sbbfile{#1} + \fi +} +% +% +% +\def\@p@@sfile#1{\@p@@sfigure{#1}} +% +\def\@p@@sbbllx#1{ + %\ps@typeout{bbllx is #1} + \@bbllxtrue + \dimen100=#1 + \edef\@p@sbbllx{\number\dimen100} +} +\def\@p@@sbblly#1{ + %\ps@typeout{bblly is #1} + \@bbllytrue + \dimen100=#1 + \edef\@p@sbblly{\number\dimen100} +} +\def\@p@@sbburx#1{ + %\ps@typeout{bburx is #1} + \@bburxtrue + \dimen100=#1 + \edef\@p@sbburx{\number\dimen100} +} +\def\@p@@sbbury#1{ + %\ps@typeout{bbury is #1} + \@bburytrue + \dimen100=#1 + \edef\@p@sbbury{\number\dimen100} +} +\def\@p@@sheight#1{ + \@heighttrue + \dimen100=#1 + \edef\@p@sheight{\number\dimen100} + %\ps@typeout{Height is \@p@sheight} +} +\def\@p@@swidth#1{ + %\ps@typeout{Width is #1} + \@widthtrue + \dimen100=#1 + \edef\@p@swidth{\number\dimen100} +} +\def\@p@@srheight#1{ + %\ps@typeout{Reserved height is #1} + \@rheighttrue + \dimen100=#1 + \edef\@p@srheight{\number\dimen100} +} +\def\@p@@srwidth#1{ + %\ps@typeout{Reserved width is #1} + \@rwidthtrue + \dimen100=#1 + \edef\@p@srwidth{\number\dimen100} +} +\def\@p@@sangle#1{ + %\ps@typeout{Rotation is #1} + \@angletrue +% \dimen100=#1 + \edef\@p@sangle{#1} %\number\dimen100} +} +\def\@p@@ssilent#1{ + \@verbosefalse +} +\def\@p@@sprolog#1{\@prologfiletrue\def\@prologfileval{#1}} +\def\@p@@spostlog#1{\@postlogfiletrue\def\@postlogfileval{#1}} +\def\@cs@name#1{\csname #1\endcsname} +\def\@setparms#1=#2,{\@cs@name{@p@@s#1}{#2}} +% +% initialize the defaults (size the size of the figure) +% +\def\ps@init@parms{ + \@bbllxfalse \@bbllyfalse + \@bburxfalse \@bburyfalse + \@heightfalse \@widthfalse + \@rheightfalse \@rwidthfalse + \def\@p@sbbllx{}\def\@p@sbblly{} + \def\@p@sbburx{}\def\@p@sbbury{} + \def\@p@sheight{}\def\@p@swidth{} + \def\@p@srheight{}\def\@p@srwidth{} + \def\@p@sangle{0} + \def\@p@sfile{} \def\@p@sbbfile{} + \def\@p@scost{10} + \def\@sc{} + \@prologfilefalse + \@postlogfilefalse + \@clipfalse + \if@noisy + \@verbosetrue + \else + \@verbosefalse + \fi +} +% +% Go through the options setting things up. +% +\def\parse@ps@parms#1{ + \@psdo\@psfiga:=#1\do + {\expandafter\@setparms\@psfiga,}} +% +% Compute bb height and width +% +\newif\ifno@bb +\def\bb@missing{ + \if@verbose{ + \ps@typeout{psfig: searching \@p@sbbfile \space for bounding box} + }\fi + \no@bbtrue + \epsf@getbb{\@p@sbbfile} + \ifno@bb \else \bb@cull\epsf@llx\epsf@lly\epsf@urx\epsf@ury\fi +} +\def\bb@cull#1#2#3#4{ + \dimen100=#1 bp\edef\@p@sbbllx{\number\dimen100} + \dimen100=#2 bp\edef\@p@sbblly{\number\dimen100} + \dimen100=#3 bp\edef\@p@sbburx{\number\dimen100} + \dimen100=#4 bp\edef\@p@sbbury{\number\dimen100} + \no@bbfalse +} +% rotate point (#1,#2) about (0,0). +% The sine and cosine of the angle are already stored in \sine and +% \cosine. The result is placed in (\p@intvaluex, \p@intvaluey). +\newdimen\p@intvaluex +\newdimen\p@intvaluey +\def\rotate@#1#2{{\dimen0=#1 sp\dimen1=#2 sp +% calculate x' = x \cos\theta - y \sin\theta + \global\p@intvaluex=\cosine\dimen0 + \dimen3=\sine\dimen1 + \global\advance\p@intvaluex by -\dimen3 +% calculate y' = x \sin\theta + y \cos\theta + \global\p@intvaluey=\sine\dimen0 + \dimen3=\cosine\dimen1 + \global\advance\p@intvaluey by \dimen3 + }} +\def\compute@bb{ + \no@bbfalse + \if@bbllx \else \no@bbtrue \fi + \if@bblly \else \no@bbtrue \fi + \if@bburx \else \no@bbtrue \fi + \if@bbury \else \no@bbtrue \fi + \ifno@bb \bb@missing \fi + \ifno@bb \ps@typeout{FATAL ERROR: no bb supplied or found} + \no-bb-error + \fi + % +%\ps@typeout{BB: \@p@sbbllx, \@p@sbblly, \@p@sbburx, \@p@sbbury} +% +% store height/width of original (unrotated) bounding box + \count203=\@p@sbburx + \count204=\@p@sbbury + \advance\count203 by -\@p@sbbllx + \advance\count204 by -\@p@sbblly + \edef\ps@bbw{\number\count203} + \edef\ps@bbh{\number\count204} + %\ps@typeout{ psbbh = \ps@bbh, psbbw = \ps@bbw } + \if@angle + \Sine{\@p@sangle}\Cosine{\@p@sangle} + {\dimen100=\maxdimen\xdef\r@p@sbbllx{\number\dimen100} + \xdef\r@p@sbblly{\number\dimen100} + \xdef\r@p@sbburx{-\number\dimen100} + \xdef\r@p@sbbury{-\number\dimen100}} +% +% Need to rotate all four points and take the X-Y extremes of the new +% points as the new bounding box. + \def\minmaxtest{ + \ifnum\number\p@intvaluex<\r@p@sbbllx + \xdef\r@p@sbbllx{\number\p@intvaluex}\fi + \ifnum\number\p@intvaluex>\r@p@sbburx + \xdef\r@p@sbburx{\number\p@intvaluex}\fi + \ifnum\number\p@intvaluey<\r@p@sbblly + \xdef\r@p@sbblly{\number\p@intvaluey}\fi + \ifnum\number\p@intvaluey>\r@p@sbbury + \xdef\r@p@sbbury{\number\p@intvaluey}\fi + } +% lower left + \rotate@{\@p@sbbllx}{\@p@sbblly} + \minmaxtest +% upper left + \rotate@{\@p@sbbllx}{\@p@sbbury} + \minmaxtest +% lower right + \rotate@{\@p@sbburx}{\@p@sbblly} + \minmaxtest +% upper right + \rotate@{\@p@sbburx}{\@p@sbbury} + \minmaxtest + \edef\@p@sbbllx{\r@p@sbbllx}\edef\@p@sbblly{\r@p@sbblly} + \edef\@p@sbburx{\r@p@sbburx}\edef\@p@sbbury{\r@p@sbbury} +%\ps@typeout{rotated BB: \r@p@sbbllx, \r@p@sbblly, \r@p@sbburx, \r@p@sbbury} + \fi + \count203=\@p@sbburx + \count204=\@p@sbbury + \advance\count203 by -\@p@sbbllx + \advance\count204 by -\@p@sbblly + \edef\@bbw{\number\count203} + \edef\@bbh{\number\count204} + %\ps@typeout{ bbh = \@bbh, bbw = \@bbw } +} +% +% \in@hundreds performs #1 * (#2 / #3) correct to the hundreds, +% then leaves the result in @result +% +\def\in@hundreds#1#2#3{\count240=#2 \count241=#3 + \count100=\count240 % 100 is first digit #2/#3 + \divide\count100 by \count241 + \count101=\count100 + \multiply\count101 by \count241 + \advance\count240 by -\count101 + \multiply\count240 by 10 + \count101=\count240 %101 is second digit of #2/#3 + \divide\count101 by \count241 + \count102=\count101 + \multiply\count102 by \count241 + \advance\count240 by -\count102 + \multiply\count240 by 10 + \count102=\count240 % 102 is the third digit + \divide\count102 by \count241 + \count200=#1\count205=0 + \count201=\count200 + \multiply\count201 by \count100 + \advance\count205 by \count201 + \count201=\count200 + \divide\count201 by 10 + \multiply\count201 by \count101 + \advance\count205 by \count201 + % + \count201=\count200 + \divide\count201 by 100 + \multiply\count201 by \count102 + \advance\count205 by \count201 + % + \edef\@result{\number\count205} +} +\def\compute@wfromh{ + % computing : width = height * (bbw / bbh) + \in@hundreds{\@p@sheight}{\@bbw}{\@bbh} + %\ps@typeout{ \@p@sheight * \@bbw / \@bbh, = \@result } + \edef\@p@swidth{\@result} + %\ps@typeout{w from h: width is \@p@swidth} +} +\def\compute@hfromw{ + % computing : height = width * (bbh / bbw) + \in@hundreds{\@p@swidth}{\@bbh}{\@bbw} + %\ps@typeout{ \@p@swidth * \@bbh / \@bbw = \@result } + \edef\@p@sheight{\@result} + %\ps@typeout{h from w : height is \@p@sheight} +} +\def\compute@handw{ + \if@height + \if@width + \else + \compute@wfromh + \fi + \else + \if@width + \compute@hfromw + \else + \edef\@p@sheight{\@bbh} + \edef\@p@swidth{\@bbw} + \fi + \fi +} +\def\compute@resv{ + \if@rheight \else \edef\@p@srheight{\@p@sheight} \fi + \if@rwidth \else \edef\@p@srwidth{\@p@swidth} \fi + %\ps@typeout{rheight = \@p@srheight, rwidth = \@p@srwidth} +} +% +% Compute any missing values +\def\compute@sizes{ + \compute@bb + \if@scalefirst\if@angle +% at this point the bounding box has been adjsuted correctly for +% rotation. PSFIG does all of its scaling using \@bbh and \@bbw. If +% a width= or height= was specified along with \psscalefirst, then the +% width=/height= value needs to be adjusted to match the new (rotated) +% bounding box size (specifed in \@bbw and \@bbh). +% \ps@bbw width= +% ------- = ---------- +% \@bbw new width= +% so `new width=' = (width= * \@bbw) / \ps@bbw; where \ps@bbw is the +% width of the original (unrotated) bounding box. + \if@width + \in@hundreds{\@p@swidth}{\@bbw}{\ps@bbw} + \edef\@p@swidth{\@result} + \fi + \if@height + \in@hundreds{\@p@sheight}{\@bbh}{\ps@bbh} + \edef\@p@sheight{\@result} + \fi + \fi\fi + \compute@handw + \compute@resv} +% +% +% +\def\OzTeXSpecials{ + \special{empty.ps /@isp {true} def} + \special{empty.ps \@p@swidth \space \@p@sheight \space + \@p@sbbllx \space \@p@sbblly \space + \@p@sbburx \space \@p@sbbury \space + startTexFig \space } + \if@clip{ + \if@verbose{ + \ps@typeout{(clip)} + }\fi + \special{empty.ps doclip \space } + }\fi + \if@angle{ + \if@verbose{ + \ps@typeout{(rotate)} + }\fi + \special {empty.ps \@p@sangle \space rotate \space} + }\fi + \if@prologfile + \special{\@prologfileval \space } \fi + \if@decmpr{ + \if@verbose{ + \ps@typeout{psfig: Compression not available + in OzTeX version \space } + }\fi + }\else{ + \if@verbose{ + \ps@typeout{psfig: including \@p@sfile \space } + }\fi + \special{epsf=\@p@sfile \space } + }\fi + \if@postlogfile + \special{\@postlogfileval \space } \fi + \special{empty.ps /@isp {false} def} +} +\def\DvipsSpecials{ + % + \special{ps::[begin] \@p@swidth \space \@p@sheight \space + \@p@sbbllx \space \@p@sbblly \space + \@p@sbburx \space \@p@sbbury \space + startTexFig \space } + \if@clip{ + \if@verbose{ + \ps@typeout{(clip)} + }\fi + \special{ps:: doclip \space } + }\fi + \if@angle + \if@verbose{ + \ps@typeout{(clip)} + }\fi + \special {ps:: \@p@sangle \space rotate \space} + \fi + \if@prologfile + \special{ps: plotfile \@prologfileval \space } \fi + \if@decmpr{ + \if@verbose{ + \ps@typeout{psfig: including \@p@sfile.Z \space } + }\fi + \special{ps: plotfile "`zcat \@p@sfile.Z" \space } + }\else{ + \if@verbose{ + \ps@typeout{psfig: including \@p@sfile \space } + }\fi + \special{ps: plotfile \@p@sfile \space } + }\fi + \if@postlogfile + \special{ps: plotfile \@postlogfileval \space } \fi + \special{ps::[end] endTexFig \space } +} +% +% \psfig +% usage : \psfig{file=, height=, width=, bbllx=, bblly=, bburx=, bbury=, +% rheight=, rwidth=, clip=} +% +% "clip=" is a switch and takes no value, but the `=' must be present. +\def\psfig#1{\vbox { + % do a zero width hard space so that a single + % \psfig in a centering enviornment will behave nicely + %{\setbox0=\hbox{\ }\ \hskip-\wd0} + % + \ps@init@parms + \parse@ps@parms{#1} + \compute@sizes + % + \ifnum\@p@scost<\@psdraft{ + \PsfigSpecials + % Create the vbox to reserve the space for the figure. + \vbox to \@p@srheight sp{ + % 1/92 TJD Changed from "true sp" to "sp" for magnification. + \hbox to \@p@srwidth sp{ + \hss + } + \vss + } + }\else{ + % draft figure, just reserve the space and print the + % path name. + \if@draftbox{ + % Verbose draft: print file name in box + % 10/93 TJD changed to fbox from frame + \hbox{\fbox{\vbox to \@p@srheight sp{ + \vss + \hbox to \@p@srwidth sp{ \hss + % 10/93 TJD deleted to avoid ``_'' problems + % \@p@sfile + \hss } + \vss + }}} + }\else{ + % Non-verbose draft + \vbox to \@p@srheight sp{ + \vss + \hbox to \@p@srwidth sp{\hss} + \vss + } + }\fi + + + + }\fi +}} +\psfigRestoreAt +\setDriver +\let\@=\LaTeXAtSign + + + diff --git a/graphics/psfig/unsupported/arbortext.pro b/graphics/psfig/unsupported/arbortext.pro new file mode 100644 index 0000000000..d06480d112 --- /dev/null +++ b/graphics/psfig/unsupported/arbortext.pro @@ -0,0 +1,100 @@ +%! +% Psfig/TeX Release 1.2 +% arbortext (dvips) version +% +% All software, documentation, and related files in this distribution of +% psfig/tex are Copyright 1987, 1988 Trevor J. Darrell +% +% Permission is granted for use and non-profit distribution of psfig/tex +% providing that this notice be clearly maintained, but the right to +% distribute any portion of psfig/tex for profit or as part of any commercial +% product is specifically reserved for the author. +% +% +% $Header: figtex.pro,v 1.5 87/07/24 20:14:50 trevor Exp $ +% $Source: $ +% +%/TeXscale { 65536 div } def +%/psfts { S 65781.76 div N } N +/TeXscale { 65781.76 div } def + +%/DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap +%currentlinejoin currentdash currentgray currentmiterlimit ] cvx def +% +% Since dvi2ps has an initgraphics at the beginning of texpre.ps, we can +% assume: +gsave initgraphics +/DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap +currentlinejoin currentdash currentgray currentmiterlimit ] cvx def +grestore + +/startTexFig { +% usage : x y bb-llx bb-lly bb-urx bb-ury startFig + /SavedState save def + userdict maxlength dict begin + currentpoint transform + + DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap + setlinewidth setmatrix + + itransform moveto + + /ury exch TeXscale def + /urx exch TeXscale def + /lly exch TeXscale def + /llx exch TeXscale def + /y exch TeXscale def + /x exch TeXscale def + + currentpoint /cy exch def /cx exch def + + /sx x urx llx sub div def % scaling for x + /sy y ury lly sub div def % scaling for y + + sx sy scale % scale by (sx,sy) + + cx sx div llx sub + cy sy div ury sub translate + + /DefFigCTM matrix currentmatrix def + + /initmatrix { + DefFigCTM setmatrix + } def + /defaultmatrix { + DefFigCTM exch copy + } def + + /initgraphics { + DocumentInitState setmiterlimit setgray setdash + setlinejoin setlinecap setlinewidth setmatrix + DefFigCTM setmatrix + } def + + /showpage { + initgraphics + } def +% /erasepage and /copypage added for MatLab support (tli) + /erasepage { + initgraphics + } def + /copypage {} def + +} def +% Args are llx lly urx ury (in figure coordinates) +/clipFig { + currentpoint 6 2 roll + newpath 4 copy + 4 2 roll moveto + 6 -1 roll exch lineto + exch lineto + exch lineto + closepath clip + newpath + moveto +} def +% doclip, if called, will always be just after a `startfig' +/doclip { llx lly urx ury clipFig } def +/endTexFig { + end SavedState restore +} def diff --git a/graphics/psfig/unsupported/dospecial.frag b/graphics/psfig/unsupported/dospecial.frag new file mode 100644 index 0000000000..90aa1cd5cb --- /dev/null +++ b/graphics/psfig/unsupported/dospecial.frag @@ -0,0 +1,43 @@ +/* + * This is a code fragment from a patched version of dospecial.c + * dvips version 5.47 + * + * The changed lines are between the TJD comments. + * The patch allows for zcat input to plotfile commands. + * + */ + + + if (strncmp(p, "ps:", 3)==0) { + hvpos() ; + psflush() ; /* now anything can happen. */ + if (p[3]==':') { + if (strncmp(p+4, "[begin]", 7) == 0) + nlcmdout(&p[11]); + else if (strncmp(p+4, "[end]", 5) == 0) + nlcmdout(&p[9]); + else nlcmdout(&p[4]); + } else if (strncmp(p+3, " plotfile ", 10) == 0) { + char *sfp ; + p += 13; + /* + * Fixed to allow popen input for plotfile + * TJD 10/20/91 + */ + while (*p == ' ') p++; + if (*p == '"') { + p++; + for (sfp = p; *sfp && *sfp != '"'; sfp++) ; + } else { + for (sfp = p; *sfp && *sfp != ' '; sfp++) ; + } + *sfp = '\0'; + if (*p == '`') + figcopyfile(p+1, 1); + else + figcopyfile (p, 0); + /* End TJD changes */ + } else + nlcmdout(&p[3]); + return; + } diff --git a/graphics/psfig/unsupported/dospecial.patch b/graphics/psfig/unsupported/dospecial.patch new file mode 100644 index 0000000000..690fbfaa19 --- /dev/null +++ b/graphics/psfig/unsupported/dospecial.patch @@ -0,0 +1,37 @@ +*** dospecial.c Tue Jan 15 16:17:59 1991 +--- dospecial.c.new Sun Oct 20 13:14:10 1991 +*************** +*** 620,628 **** + } else if (strncmp(p+3, " plotfile ", 10) == 0) { + char *sfp ; + p += 13; +! for (sfp = p; *sfp && *sfp != ' '; sfp++) ; + *sfp = '\0'; +! figcopyfile (p, 0); + } else + nlcmdout(&p[3]); + return; +--- 620,642 ---- + } else if (strncmp(p+3, " plotfile ", 10) == 0) { + char *sfp ; + p += 13; +! /* +! * Fixed to allow popen input for plotfile +! * TJD 10/20/91 +! */ +! while (*p == ' ') p++; +! if (*p == '"') { +! p++; +! for (sfp = p; *sfp && *sfp != '"'; sfp++) ; +! } else { +! for (sfp = p; *sfp && *sfp != ' '; sfp++) ; +! } + *sfp = '\0'; +! if (*p == '`') +! figcopyfile(p+1, 1); +! else +! figcopyfile (p, 0); +! /* End TJD changes */ + } else + nlcmdout(&p[3]); + return; diff --git a/graphics/psfig/unsupported/graphpaper.ps b/graphics/psfig/unsupported/graphpaper.ps new file mode 100644 index 0000000000..031061afb2 --- /dev/null +++ b/graphics/psfig/unsupported/graphpaper.ps @@ -0,0 +1,78 @@ +%! + +/emptystr { ( ) } def +/graph { + /labels exch def % show labels ? (boolean) + /divs exch def % divsion spacing + /height exch def + /width exch def + + .25 setlinewidth + 2 setlinecap + gsave +% currentlinewidth currentdash +% initgraphics +% setdash setlinewidth + + width divs div cvi + /index divs def + divs 0 translate + + { newpath + 0 0 moveto + labels { + gsave + 90 rotate 20 0 moveto + index emptystr cvs show + grestore + } if + 0 height lineto + stroke + divs 0 translate + /index index divs add def + + } repeat + + grestore + gsave +% currentlinewidth currentdash +% initgraphics +% setdash setlinewidth + + height divs div cvi + /index divs def + 0 divs translate + + { newpath + 0 0 moveto + labels { + gsave + 20 0 moveto + index emptystr cvs show + grestore + } if + width 0 lineto + stroke + 0 divs translate + /index index divs add def + + } repeat + + grestore + +} def + +save + +/Helvetica findfont 10 scalefont setfont +/inch {72 mul} def + +1 setlinewidth +8.5 inch 11 inch 100 true graph +[3] 0 setdash +.25 setlinewidth +8.5 inch 11 inch 20 false graph + +restore + +showpage diff --git a/graphics/psfig/unsupported/macdemo/README b/graphics/psfig/unsupported/macdemo/README new file mode 100644 index 0000000000..bc0bc81e8a --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/README @@ -0,0 +1,76 @@ +NOTE: Much of this information and code is now obselete, since +robust EPSF postscript can be obtained from many Mac applications +(such as canvas and photoshop.) With system 7, Postscript can often +be routed to a file using a dialog box option rather than cmd-F/K. + +===================================================================== +===================================================================== +Tips on redirecting Mac postscript (when there is no "Save as...EPSF") + +1) How to capture a figure and the LaserPrep prolog into a disk file: + +Many different methods exist to appempt to do this, some of which As +of this writing, it is possible to convince MacDraw to place a Postscript +description of a figure in a file rather than sending it directly to a +LaserWriter by hitting clover-F immediately after clicking +`OK' on the print dialog box. The file is always called `PostScript' +and is left in the folder MacDraw was started in. Use a communications +program to move the file over to the host on which TeX is running. + +MacDraw creates a output file in the form of `QuickDraw' calls, which +are interpreted as a set of PostScript procedures. These procedures +are defined in what we call the Macintosh LaserPrep prolog, which must +be downloaded before Macintosh figures are sent to the printer. By +using clover-K rather than clover-F in the key sequence above both the +prolog and figure will be captured in the PostScript file. The prolog +can be extracted by hand-editing out the portion of the clover-K file +not also present in the clover-F file. + +You need to always make sure that you keep a version of the prolog +that was resident in the Mac when the figures was generated, +since the prolog is usually not backward compatible. E.g. figures +which rely on laseprep version 68 will not print using laserprep +verion 70. (Thanks Apple!) + +2) Make the postscript suitible for including as an encapsulated +postscript figure. + +Unfortunately, the postscript produced by most versions of the +LaserWriter driver is not well suited to be included directly as a +psfig figure. Most versions of the LaserPrep do not include an +accurate bounding box comment in the PostScript files they produce; +figures created by these systems will have to have their bounding box +added by hand. "graphpaper.ps" is often useful for determining the +bounding box of a figure. The "cleanfig" shell script adds a default +bounding box, removes nasty "%%EOF" lines, converts CF-LF (useful for +files that have been moved across appletalk), and strips away +downloaded fonts. + +NOTE: fonts are stripped by the cleanfig program because I found that +my documents were crashing on figures that were downloading fonts that +were already printer-resident. Cleanfig will remove all fonts, so if +you are using non-resident fonts in your figures you will have to +modify cleanfig to not stip out the downloading of those fonts. + +3) Make sure the Laserprep prolog is loaded in the printer +before printing your document. + +Other Macintoshes will often automatically download the Laserprep +code into the printer whenever access the printer and find it +does not have the code already downloaded. + +The laserprep prolog can be manually sent down by either +by prepending it using /bin/cat: + cat lprep70.pro doc.ps | lpr +or with the dvips special header command at the top of your latex file: + \special{header=lprep70.procs} +The only difference between the ".pro" and ".procs" version is what +structuring comments are included. The ".procs" version works well +as the argument to a \special{header=..} within dvips (e.g. it +will preview correctly under NeWS). + +4) Good luck! (you may need it.) +"macdemo.tex" containts a test document that including four version 68 +mac figures. + +====================================================================== diff --git a/graphics/psfig/unsupported/macdemo/cleanfig b/graphics/psfig/unsupported/macdemo/cleanfig new file mode 100644 index 0000000000..c4eced5b1b --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/cleanfig @@ -0,0 +1,3 @@ +#!/bin/csh -f +tr \\15 \\12 | grep -v %%EOF | sed -e 's/^%%BoundingBox: ? ? ? ?/%%BoundingBox: 0 0 600 800/g' | awk -f stripfonts.awk + diff --git a/graphics/psfig/unsupported/macdemo/figs/box.ps b/graphics/psfig/unsupported/macdemo/figs/box.ps new file mode 100644 index 0000000000..ca6807a138 --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/figs/box.ps @@ -0,0 +1,11 @@ +%! +%%BoundingBox: 0 0 1 1 +newpath +0 0 moveto +1 0 lineto +1 1 lineto +0 1 lineto +closepath +.8 setgray +fill + diff --git a/graphics/psfig/unsupported/macdemo/figs/cm.ps b/graphics/psfig/unsupported/macdemo/figs/cm.ps new file mode 100644 index 0000000000..93b94b0a3b --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/figs/cm.ps @@ -0,0 +1,26 @@ +%! +%%BoundingBox: 27.47 27.47 172.52 172.52 + +100 100 translate +newpath + 0 0 moveto + 0 0 72 0 90 arc + closepath + fill + + 0 0 moveto + 0 0 72 90 180 arc + closepath + stroke + + 0 0 moveto + 0 0 72 180 270 arc + closepath + fill + + 0 0 moveto + 0 0 72 270 360 arc + closepath + stroke + +showpage diff --git a/graphics/psfig/unsupported/macdemo/figs/piechart.ps b/graphics/psfig/unsupported/macdemo/figs/piechart.ps new file mode 100644 index 0000000000..164583e8d8 --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/figs/piechart.ps @@ -0,0 +1,154 @@ +%! +%%BoundingBox: 126 246 486 546 +% Cookbook Example Program from First Printing, Revised 7 Jan 1985 +% Program: Drawing a Pie Chart Number: 18 +%----------------------------------------------------------------------------- +% +/PieDict 24 dict def % Local storage for + % ``DrawPieChart'' and its related + % procedures. +PieDict begin + /DrawSlice % DrawSlice draws an outlined and + { /grayshade exch def % filled-in pie slice. It takes + /endangle exch def % four operands: the label for + /startangle exch def % this particular pie slice, the + /thelabel exch def % starting angle for the slice, + % the ending angle for the slice + % and the shade of gray the slice + % should be. + + newpath % Create a path which will draw a + % pie slice. + 0 0 moveto + 0 0 radius startangle endangle arc + closepath + + 1.415 setmiterlimit % This guarantees that when we + % outline the pie slices with a + % stroke that we will not get a + % spike on the interior angles. + gsave grayshade setgray fill grestore % Fill the pie slice path with the + stroke % appropriate gray color. By using + % gsave and grestore we don't lose + % the current path. Since + % PostScript paints color onto the + % page, it is very important that + % we fill the pie slice first and + % then outline it with a stroke. + gsave % Draw the tick mark and place the + % label: + startangle endangle add 2 div % Find the center of the pie slice + rotate % and rotate so that the x-axis + % coincides with this center. + radius 0 translate % Translate the origin out to the + % circumference. + newpath + 0 0 moveto labelps .8 mul 0 lineto% Draw the tick-mark. + stroke + labelps 0 translate % Move the origin out a little + % beyond the circumference. + 0 0 transform % Next we wish to place the label + grestore % at the current origin. If we + itransform % simply draw the text on the page + /y exch def /x exch def % now, it would come out rotated. + x y moveto % Since this is not desired we + % avoid it by returning to the + % previous unrotated coordinate + % system. Before returning, + % though, we would like to + x 0 lt % remember the position of the + { thelabel stringwidth pop neg % current origin on the printed + 0 rmoveto % page. We will accomplish this by + } if % using the transform and + % itransform operators. Performing + % a transform on the origin pushes + % the coordinates of the origin in + % device space onto the operand + % stack. Performing a grestore + % returns us to the previous + % unrotated coordinate system. + % Next we perform an itransform on + % the two device coordinates left + % on the stack to determine where + % we are in the current coordinate + % system. + y 0 lt { 0 labelps neg rmoveto } if % Make some adjustments so that + thelabel show % the label text won't collide + } def % with the pie slice. + /findgray % Procedure findgray calculates + { /i exch def /n exch def % the gray value for a slice. It + i 2 mod 0 eq % takes two arguments: the total + { i 2 div n 2 div round add n div } % number of slices and the current + { i 1 add 2 div n div } % slice number (Given that there + ifelse % are n pie slices, the slices are + } def % ``numbered'' from 1 to n). The +end % gray values for the pie slices + % range evenly from white to black + % (i.e. - the values provided to + % setgray range from (n/n, n-1/n, + % ..., 1/n)). Since we don't want + % similar values of gray next to + % each other, findgray + % ``shuffles'' the possible + % combinations of gray. + +/DrawPieChart % DrawPieChart takes seven + { PieDict begin % arguments: the title of the pie + /radius exch def % chart, the point size to print + /ycenter exch def /xcenter exch def % the title in, the point size to + /PieArray exch def % print the labels for each slice + /labelps exch def /titleps exch def % in, a special array (described + /title exch def % below where DrawPieChart is + % called), the (x,y) center of the + % pie chart and the radius of the + % pie chart. + + gsave + xcenter ycenter translate % Translate the coordinate system + % origin to center of pie chart. + /Helvetica findfont titleps % Print the title of the pie chart + scalefont setfont % in Helvetica. + title stringwidth pop 2 div neg % Center the title below the pie + % chart. + radius neg titleps 3 mul sub + moveto title show + /Helvetica findfont labelps % Print the individual pie slice + scalefont setfont % labels in Helvetica + /numslices PieArray length def + /slicecnt 0 def + /curangle 0 def % A ``loop'' variable that keeps + % track of the angle of arc to + % begin each pie slice at. + PieArray % Repeat the following for each + % element in the PieArray. + { /slicearray exch def + slicearray aload pop % Push the label and percentage + % onto the stack. + /percent exch def + /label exch def + /perangle percent 360 mul def % Convert the percentage into + % degrees of angle. + /slicecnt slicecnt 1 add def + label curangle + curangle perangle add + numslices slicecnt findgray + DrawSlice + /curangle curangle perangle add % Update the current starting + % angle. + def + } forall + grestore + end + } def + +() 18 9 + [ [(Blueberry) .12 ] % The pie array is an array of + [(Cherry) .30 ] % arrays. Each array in the pie + [(Apple) .26 ] % array contains a string denoting + [(Boston Cream) .16 ] % the label to be printed next to + [(Other) .04 ] % the pie slice followed by a real + [(Vanilla Cream) .12 ] % number indicating the percentage + ] 306 396 100 DrawPieChart % of the pie represented by this + % particular slice. +showpage + diff --git a/graphics/psfig/unsupported/macdemo/figs/pretzel.ps b/graphics/psfig/unsupported/macdemo/figs/pretzel.ps new file mode 100644 index 0000000000..e6bbf413b3 --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/figs/pretzel.ps @@ -0,0 +1,14 @@ +%! pretzel.ps -- an example for the psfig paper. +%%BoundingBox: 95 100 185 200 + +5 setlinewidth +1 setlinecap +110 100 moveto +120 120 140 160 160 160 curveto +170 160 180 150 180 140 curveto +180 120 160 100 140 100 curveto +120 100 100 120 100 140 curveto +100 150 110 160 120 160 curveto +140 160 160 120 170 100 curveto +stroke +showpage diff --git a/graphics/psfig/unsupported/macdemo/figs/rosette.ps b/graphics/psfig/unsupported/macdemo/figs/rosette.ps new file mode 100644 index 0000000000..2ab4424b55 --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/figs/rosette.ps @@ -0,0 +1,76 @@ +%! +%%BoundingBox: 124.38 124.38 487.61 487.61 +% Cookbook Example Program from First Printing, Revised 7 Jan 1985 +% Program: Repeated Shapes Number: 6 +%----------------------------------------------------------------------------- +% + % This program prints a rosette + % design by defining a section of + % that design and printing that + % section repeatedly. This program + % illustrates the ``for'' and + % "arc" operators, and it shows + % how coordinate transformations + % can be nested so as to use the + % most convenient coordinate + % system for each part of a + % design. +/inch {72 mul} def + +/wedge % Define an ``ice cream cone'' + { newpath % shape by means of the ``arc'' + 0 0 moveto % operator. This shape will have a + 1 0 translate % 30 degree angle topped off with + 15 rotate % a semicircle. Set the path's + 0 15 sin translate % first point at the current + 0 0 15 sin -90 90 arc % origin. Next, move the origin to + closepath % the center of the semicircle by + } def % translating to the right 1 unit, + % rotating counter-clockwise by 15 + % degrees, and translating ``up'' + % in the rotated system by the + % radius of the semicircle. The + % ``arc'' operator includes a + % straight line to the initial + % point of the arc and a curved + % section to the end of the arc. + % Note that the semicircle goes + % from -90 degrees to 90 degrees + % in the rotated coordinate + % system. + +gsave + 4.25 inch 4.25 inch translate % Move into position for the + % rosette. + 1.75 inch 1.75 inch scale % Make the edges of the rosette 1 + % 3/4 inches long. + 0.02 setlinewidth % Use a 7/200 inch thick line. + 2 1 13 % Set up the ``for'' operator to + % iterate 12 times, pushing 2 onto + % the stack the first time, 3 the + % next time, ... , and 13 the last + % time. + { % The last argument for ``for'' is + % the sequence of operations to be + % repeated. This sequence must be + % enclosed by braces. + 13 div setgray % Divide the loop index by 13 to + % set a gray value. + gsave % Enclose the ``wedge'' operation + wedge % in a ``gsave''-``grestore'' + % pair, as it will mess up the + % coordinate system. + gsave % Save the wedge path for use + % after the ``fill''. + fill + grestore + 0 setgray stroke % Draw a black border around the + % wedge. + grestore % Get out of the coordinate system + % left by wedge. + 30 rotate % Set up for the next section. + } for % Close the last argument and + % execute the ``for'' operator. +grestore +showpage + diff --git a/graphics/psfig/unsupported/macdemo/figs/starlines.ps b/graphics/psfig/unsupported/macdemo/figs/starlines.ps new file mode 100644 index 0000000000..a7cf877ea6 --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/figs/starlines.ps @@ -0,0 +1,40 @@ +%! +%%BoundingBox: 300 400 410 420 +/Times-Roman findfont +30 scalefont setfont +newpath +300 400 translate +.25 setlinewidth +0 0 moveto +(StarLines) true charpath clip + +/rays { + 0 1.5 179 + { gsave + rotate + 0 0 moveto + 108 0 lineto + stroke + grestore + } for +} def + + +newpath +54 -15 translate +rays +showpage + + + +% +% +% +% +% +% +% +% +% +% +% diff --git a/graphics/psfig/unsupported/macdemo/figs/trevor.ps b/graphics/psfig/unsupported/macdemo/figs/trevor.ps new file mode 100644 index 0000000000..b46453479a --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/figs/trevor.ps @@ -0,0 +1,583 @@ +%!PS-Adobe-1.0 +%%Title: trevor +%%Creator: Ned Batchelder +%%CreationDate: Wed Mar 26 11:05:04 1986 +%%BoundingBox: 72 72 432 525 + +%%Pages: 1 +%%EndComments +/doimage { + /b exch def /m exch def /n exch def + /pix n string def + n m b [n 0 0 m neg 0 m] + { currentfile pix readhexstring pop } + image +} def +/spotsize { + /perinch exch def + currentscreen 3 -1 roll + pop perinch + 3 1 roll setscreen +} def +/invert { + /curtran currenttransfer cvlit def + /newtran curtran length 3 add array def + newtran 0 {1 exch sub} putinterval + newtran 3 curtran putinterval + newtran cvx settransfer +} def +72 72 translate +%%EndProlog +%%Page: ? 1 +360.000 453.600 scale +60 spotsize +112 176 8 doimage +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffefbffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffdeaffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffdf2ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffac8ffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffacb +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffefefdfcfcfdfefffffefbf8fafdfeffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffff8b2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffefefcf7eddbc9c1c1cbd9e5eff1d9b5b3c8 +e0f3f7fafeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffbd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffef9f0ddc3a88e725d56565e6e82949e +8c65545d759bb6d0f5fefefefdfeffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffad3ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffefef9e4bf99785f4f443d38363539 +3f484b4e4c423d3b3b485a77bbf0fdfaf2f4fdffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffff6a2ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffefdf6dfb98b644b3f39383735 +32302f31343738393a383c3f3735394576c6eefbf7f0f5fdffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff6a4ffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffef5d8ae805b453a3734 +32333333302e2d2e30313336393a393a3a3536384e8ad0f7fefaeff8feffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffff6a4ffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffefce8b98159463b +363535363536353434322f3031303234383c3e3835343536405da3e8fcfef2f2feffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffff9c7ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef5d59b64 +49403b3735343433333333333231303335322f30333a4040373233383f486ec3f0fcf8ec +fbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff59bffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefbe9 +ba7d503d383634323233312f2f2e2b2b2b2c2c2f3235312d2c3038403c3533383d404d8b +d0f1faebf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff599 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fef5d199654437343433302e2f312e2b2a2726272a2c2c2c2d3135332d2b2f3a3e383432 +3a3d405c9cd4eeeefaffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffff8c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffdecbe7d4f3a353333312e2b2829282624252627282929292b2b2b3038352e2b30 +393b3730323a38416eaedbedfcffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff7b4ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffce5a96944353132302e2b2928272928272727292926232325272c2f2e31 +332e2b29303837302d3436375583bed8f2feffffffffffffffffffffffffffffffffffff +fffffffffffffffffffff8bcffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffde5a6643f343333312e2b2a2a2c2d2f2f2e2d2e2f2d2a27262729 +2d30303030312f2a293137332b2e32333f5e83a0c3e9f8fdfeffffffffffffffffffffff +fffffffffffffffffffffffffffff9c7ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffef0af6a4436333333302f2d2d2e2f2e2d2d2f2e2f302e2d +2c2d2f31322f2c2e3234332c272c33342c2a2d30323f53667ca7cadff2fdffffffffffff +fffffffffffffffffffffffffffffffffffffad3ffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffff8c8774b3b35322f2e2d2c2b2c2d2f2d2b2c2e2d +2d302f2e2d2d2f3132322d292d333933282b2e32312c2c2c2e333e4b597498b9d2ecfdff +fffffffffffffffffffffffffffffffffffffffffffff8bfffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffee18e523d35312b272525252424272a2b +2a2a2a28292a2b2c2b2b2c2e3032332f2b2c34382e292c2d2f2d2c2a2d2f333b4655688b +bfdef3fdfffffffffffffffffffffffffffffffffffffffffffffacfffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffef8b7633f332e2a252424252524 +222323252526242121222426282727282a2d35372f282a35382c29282a2d2e2c2b2e2f31 +383c455784bfe1f5fefffffffffffffffffffffffffffffffffffffffffffdf1ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffcda7f45322a27252628 +28282928262423262726252422222020232527292b2e31333129252831312a2525292c2e +2c2b2e2b3032353c4d77b3d9fafffffffffffffffffffffffffffffffffffffffffffbdd +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeefa253352b26 +2527282625262828272827262626282a26242122262a2b29292c2f3235302623262d2d26 +2426292e2d292b2a2b2e2f333b4a70a8ebfeffffffffffffffffffffffffffffffffffff +fffffad5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbca70 +3f2f2926242425222021222324272b2a2927282a292928282a2c2d2c2c333633312f2a26 +222327282625262b2f2b282a2a2b2c30363b486bc8fbffffffffffffffffffffffffffff +fffffffffffff9d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fee7934c352e29272727272522222223222124272726282b2a2a2a2a2b2b29292c343936 +2e29262623202124282624272b2b27292a292a2f33363d4c90eafeffffffffffffffffff +fffffffffffffffffffff9d3ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffff7ba6038312d28292b2c2c2a26242426231e1d1f212225282828282928242223 +293136342f2a26232122212124242426282b2b2a2928282c31353a4260bbf9ffffffffff +fffffffffffffffffffffffffffff8bbffffffffffffffffffffffffffffffffffffffff +fffffffffffffffedf844434312d2b2c2c2c2c292725242625221f1e1d1e212426262425 +24212022262b2f2d2a292724202021202223232525282a2d292526292e353c414b81e1fe +fffffffffffffffffffffffffffffffffffff7b2ffffffffffffffffffffffffffffffff +fffffffffffffffffffffff9b75c3934312e2e2e2b28272524222426262525211e1f2225 +292926252323262c2e2f2e2b2825242423211e1f212223222325282c2a2625272a313940 +475baff6fffffffffffffffffffffffffffffffffffff7bdffffffffffffffffffffffff +fffffffffffffffffffffffffffffee88b453735302e2b2a282625222223242626272724 +22232425282b28252324282f32312e2a2827242221201e1d1f2023222224282b2b272628 +2a2d333c434e81dffefffffffffffffffffffffffffffffffffff6abffffffffffffffff +fffffffffffffffffffffffffffffffffffff9be623b36312b2824222223242323252728 +262625242424222022262624232123282c2a272423232220201f1d1c1d2022232322262a +2c2a2626282b2f373b4660b6f8fffffffffffffffffffffffffffffffffff7b6ffffffff +fffffffffffffffffffffffffffffffffffffffffffee9924a37322b2523212021232624 +24252b2b2726252425262322222122232322232426292c2e2a26221f1f1e1d1c1e202324 +24232426292a2725272b2e32373f4e86e4fefffffffffffffffffffffffffffffffff9c8 +fffffffffffffffffffffffffffffffffffffffffffffffffffdd46f3d312a2422222220 +20212322222124262626262526252322211e212221201f2022252c32332e2925221f1d1e +2024282a292927252627282526292f3233394463bef9ffffffffffffffffffffffffffff +fffffbddfffffffffffffffffffffffffffffffffffffffffffffffffef7b155332a2422 +21211f1e1f202223221f1d202324252526231f1d1d1e2528272220202226272a2e2d2a27 +23212020242a3136363430282422242626262a3134363e4f8fe8feffffffffffffffffff +fffffffffffffad0fffffffffffffffffffffffffffffffffffffffffffffffffee3853f +2d27232222222221212326262320212121202121232422202123282c302f2b2b2c2c2b2c +2d2c2927252524262e3a444e504b4435292321232827292d32363a4264c3f9ffffffffff +fffffffffffffffffffff8bdffffffffffffffffffffffffffffffffffffffffffffffff +f6b65930282523242425242123262622212123222020212123262827272426292f343131 +32302d2b29272524252529314057646e74695b48322621222728292c30363b3f4b8be8fe +fffffffffffffffffffffffffffffce9ffffffffffffffffffffffffffffffffffffffff +fffffffee1843c2824252525252524232526242020212322222122212225282927242323 +272a2a2c2f2c28262625242324293547627f8b91958a755e412b23212529292b2e33373e +4461c4fcfffffffffffffffffffffffffffffce8ffffffffffffffffffffffffffffffff +fffffffffffffffac05e2f2524242525242221232525242322212221201f202123252422 +201f1f1f2121242626272728272625272a374c6683a5acaba9a090745436252123292b2b +2d3033383d4c99f1fffffffffffffffffffffffffffffad7ffffffffffffffffffffffff +fffffffffffffffffffffef19843292524222223221f1e202122232623202021211f1e1f +242625211d1d1e1f2121232627272a2e2e2c2b2d364e6d89a0bec4bfb6aca18c6c472c22 +21262a2e2f303336384171d4fcfffffffffffffffffffffffffff9c9ffffffffffffffff +fffffffffffffffffffffffffffffee075332826232120201f1e1c1c1d1e222524201e21 +22201c1a1e222423201f21242425282b2f302f302f2f30384b6b8eacbfcbcec9c0b4aa9b +82613d262124272d30313637373e5fa9ecfefffffffffffffffffffffffffce5ffffffff +fffffffffffffffffffffffffffffffffffffbc3592e28241f1e1e1d1e1d1c1c1d1e2123 +23201f1f1f1d1b191a1c1e20212021232425282a3035363333343b4e698eb4c9d1cfcecb +c6baac9f917f5931242425282d32373a383e609fe0fcfffffffffffffffffffffffffad6 +ffffffffffffffffffffffffffffffffffffffffffffef9d452b27221e1d1b1c1c1c1d1e +1e1e21222221201e1c1b1b1b1b1d1c1c1e1d1c1e1f212224272e3539414f647f9dc0d7db +d8d3d0cecabfb0a49c9378472924252429303538353c5b96dcf8feffffffffffffffffff +fffff8b9fffffffffffffffffffffffffffffffffffffffffffdd977382924201e1c1b1b +1b1c1e1e1d1f2221201f1d1c1b1b1c1c1e1f1e1f211f1d1e1f202023252b3549657f96ae +c9d8dfded9d6d1cfcdc2b4aaa39e8e6333252623242b313231374d83d2f1fdffffffffff +fffffffffffffad1fffffffffffffffffffffffffffffffffffffffffff9b85c3126231e +1d1c1d1d1c1c1c1c1b1c1e1f1e1d1c1c1d1e1e1f20202024272222222224262a2f364568 +8aa3b9cfe0e0dcdbd8d8d3d0cdc2bab1a7a29c7f492a282524282d2f2f354c78beeffdff +fffffffffffffffffffff8c1fffffffffffffffffffffffffffffffffffffffffef09c4a +2c25211e1d1d1d1d1e1c1a191a1d201f1e1e202122222222222223252421232526292c34 +3c455d85a9c0d4e4eae6dedadadad5d0ccc6c0b8ada5a3926334292928292d302f365d95 +d0f6fefffffffffffffffffffffff9c4ffffffffffffffffffffffffffffffffffffffff +fdda7b3e2a24201e1e1c1c1d1e1c1a191a1c1e1d1d1f2225262624222121202121212327 +2a2b303a455778a2c3d6e2e8eaeae4dcdadad6d1cdcbc5bcb0a9a59b77402a2a2b2c3034 +313b7bcaf5fefffffffffffffffffffffffff9c4ffffffffffffffffffffffffffffffff +fffffffffac061362924201e1d1b1b1d1e1d1b1a1a1b1c1c1e202224252424212020201f +1e2124272a2e36455a779dbfd5dfe2e5e7e9e7dfdcdad7d3cfcdc8bfb2aba9a0844f2e2a +2a2e323734429bf1fefffffffffffffffffffffffffffad2ffffffffffffffffffffffff +fffffffffffffffff4a9513227231f1e1c1b1b1d1e1d1b1a1a1b1c1d1e1f201f1e1e2121 +201f1f1f20232529303c4f647e9dbbd0d9dcdde2e6e8e6e3dfd8d5d4d1cfc8bdb2adaca2 +8c5e332b2c2e32383745a8f8fffffffffffffffffffffffffffff9c5ffffffffffffffff +ffffffffffffffffffffffffeb94492f25211e1d1c1b1c1c1d1c1b1a1a1c1d1d1c1d1f1f +1e1e1f1e1f20212224262a34465d758ba0b4c7d1d4d8dce0e4e5e6e5e1d9d6d6d4cfc7bb +b3afada59167382d2c292e3437439af3fffffffffffffffffffffffffffffad3ffffffff +fffffffffffffffffffffffffffffffee17f412e24201e1c1b1c1e1e1f1e1d1b1c1c1c1b +1b1c1e202021211e20232325282b364e6a8095a3b0becad1d6e0e5e9eaeaecece5dddad8 +d7d2c7bbb4afaba7956f3d2e2c25292f333d81e8fffffffffffffffffffffffffffffbdc +fffffffffffffffffffffffffffffffffffffffccf693a2b23201e1b1b20262827262220 +1e1c1c1b1a1b1d202324211f2125282a2f3953728b9aa7aeb5c1cbd3dde8eef4f5f7f8f4 +ece5e0dbd7d3cabdb6b0aaa4967443312e24252a2f3770e0feffffffffffffffffffffff +fffff8bafffffffffffffffffffffffffffffffffffffff8b256352a25221e1b1d2a3b3f +37312f2c261f1d1b1b1d1e202525212024292f373f547691a0a9aeb3b9c1cbd6e3eef3f9 +fcfdfdf9f1e9e2ddd7d2ccc4bab2aaa495774833302524262c3363d8feffffffffffffff +fffffffffffff9c9fffffffffffffffffffffffffffffffffffffff399442f2925231f1b +20354b534d4647463a2b25201e211f1f2222202329303c49537495a8aeb0b3b8bfc8d5e2 +eef7fafcfefefdfbf4e9e2ded5d0ccc7bfb6ada393794a332f2421242b315dd3feffffff +fffffffffffffffffffffad3fffffffffffffffffffffffffffffffffffffee681382b26 +2525201c233a535e5e5a5c5c54463d342a23232222222429303d4f596f95acb8bab9bdc2 +cbdae5edf3fbfefefefffefbf5eae1dcd4d0cdc8c1b9afa2937c4d332d2320242a305ad1 +fdfffffffffffffffffffffffffff9cbfffffffffffffffffffffffffffffffffffffdd3 +6a2f26242426201c253d556063646666635f584f4034302d2c2e30343d4c5c7499afbac2 +c7ccd3d6dce8edf0f6fdfefffffffefbf5ece5dfd7d3d0cbc3bbb1a4967e4d332c241f24 +292f5ed6fefffffffffffffffffffffffffff7b1ffffffffffffffffffffffffffffffff +fffffccc602c23212226211d243b535f636669696a6c69665b514e4d4a4a4c4d54627a9d +b6c1cad4dde3e7e6e7eceff4fbfefffffefefefcf7efeae3d9d8d7d2cabeb4a79a824f34 +2e241f24282d5cd3fefffffffffffffffffffffffffff7b7ffffffffffffffffffffffff +fffffffffffffbc65929211f2024221e243a515f63676a6b6d6f70726f6b6c6e6e707375 +7f92aac0ccd5e0e9eeeff0eeedeff1f6fcfefffffefcfcfcf8f1ebe2dbdadad5cfc5b7a9 +9a824d302e242023272b59cffdfffffffffffffffffffffffffffad0ffffffffffffffff +fffffffffffffffffffffab94d26201e1f23221f2338505f64696b6c6e70737577787a7f +858c9299acc1cdd7dee6eef1f3f3f2f2f1f4f5f8fcfefffffdf4f5faf8f2ece2d9d8d9d5 +d0c8bbab9b834c2d2a242223262955ccfdfffffffffffffffffffffffffff8bbffffffff +fffffffffffffffffffffffffffff9b34825211e1e22232022324a5d666a6c6c6f727578 +7a7c8189929aa2aec1d3dce4e9eef2f4f5f4f2f5f6f8f8fbfcfcfefefdf7f5f8f3ece9df +d3cecdcbcac6beaf9f88522e2a252223252748bafbfffffffffffffffffffffffffff8ba +fffffffffffffffffffffffffffffffffffff6ab4325211e1d212521202c465a656a6c6d +6f72767a7f8289919aa2acb7c7d5e1e9edf0f3f3f3f2f4f5f7f8f8f8f8f8fdfcf9f4f3f0 +e5dad4c6b8afa9a9b3bdbbb0a28c582e2925222223263ea9f9ffffffffffffffffffffff +fffff7adfefefefffffffffffffefefefffffffefefef09b3d231e1d1d21251f1c284257 +63696c6f6f73787e848990969ea5aeb8c5d1dce0e7e9edefefeef0f1f1f4f4f3f3f3f6f2 +eae4dfd2bfafa190837c75768297a8aaa18d5a2d2724201f21243ba3f8ffffffffffffff +fffffffffffff7b9fdfefefefefefefefefefdfdfefefdfdfdfdec973d231e1e1f232620 +1c243c54636a6d6f71777c838a8f949aa1a6adb5bdc6cfd4dadee1e6e9e9ebeae7e9ecef +eeebe5ddd7cdb79c7f6c635a53514c4e5362788e978e612f2723201f2124399ff8ffffff +fffffffffffffffffffff8bafbfcfbfcfbfcfcfcfbfcfbfbfbfaf9f9f9faeb993f231e1e +202528201b21375160696e70727981898e92969da2a6aaafb6bcc3c5cbd1d5dbe1e1e4e1 +dddce1e5e2dbd3c6bba37f62493f3d3b3b3b3a3b3f4751607583673226221e1e20233698 +f6fffffffffffffffffffffffffff8b6f7f7f8f7f7f8f8f6f6f8f6f6f6f4f3f3f4f5e595 +40241f1f222526201c1f324d5d666c707379848c9093979c9fa1a5aaaeb0b3b4b9c2c9cd +d5d8dcd9d2d0d4d8d2c7bdae9775544135302f30353a3c3d4144484e5a706a3625221e1e +2022328cf3fffffffffffffffffffffffffff5a5f3f3f5f4f3f2f2f2f2f2f1f1f0f0eff0 +f0eedb9041261f1f212323201c1d2a465a646b6f747a838b90919294969a9d9d9d9fa0a4 +a9afb7bfc8cdd0cfc9c6c9cbc4b9ab92735642362e2b2e3a4a545a5c5b58585755636b3e +2521201f20212c7aebfffffffffffffffffffffffffff7b4f0f1f1f1f0efefeeefeeedee +ededececebe9d08a4328211f2021211f1c1d253f57636a6e757c8288898482807c7d7f7b +797a818d9498a3b0b9bdc2c6c0bebfc1bbaf9a77584337322f34445b6b757b7a77746f66 +6168704a2822232422232a68defefffffffffffffffffffffffff9c5eceeeeeeedececec +ececebebeaeae9e8e8e5cc8b4528211f1f1f1e1d1c1b20365261696d737c817f7669605c +5756554f4d5159687178889ba8adb6bcbcbcbdbcb3a38b694d3f38353a475869737a8282 +7f7c79737078805d2c24262825252b58cefdfffffffffffffffffffffffff8beeaebeaea +eaeae9e9e8e8e9e8e6e7e6e4e5e2cd8d4527211f1d1d1d1c1a191c2f4d5f686d72787467 +5b4d413d3b39363233383b434b556880939daab5bec4c3beb19c81654f47423d41495562 +65646f7476787a797a858c6c3123272a29292e52c3fcfffffffffffffffffffffffff7af +eaeae8e8eae8e6e7e6e6e6e7e5e4e3e2e2dfcc8e442722201e1c1c1b1b1a1b2a4a5f696e +706b5b4b4037312d2b2a2726282c2c2e343d4f677e8fa2b3c1cecec4b29b806a584b4342 +464a4d5251525b5e5e6975797d89927a3a23262b2d2c2e50bffbffffffffffffffffffff +fffff8bbe9eae8e7e8e6e5e6e4e5e4e4e3e2e1e0e0dbc487422924211f1d1c1b1a191925 +475f686c69574136312c2927272623222528292b2d3443566c8099b3c9d5d6ccb59c856e +584a4848433d3b473c464b514f5468757f8b9584462627292b2b2c52c2fbffffffffffff +fffffffffffffacee8e8e6e6e5e5e6e5e3e4e4e4e2e1e0e0e0dac2833f272323201e1c1a +1a1a1a22435f68675b44332d2c2c2e3033322f2d2d2d2e2e2f36424d5e7390b1cfe0e4d7 +b99d866e58504f4942413c6746555043464e5b6f7f8c968e542a29292a292b5ccdfcffff +fffffffffffffffffffff8bee7e7e5e5e4e5e5e4e4e3e3e3e2e1e1e1e0d9bf7d3e272223 +221f1c1a1a1a1820415f665c49393332373e444a4c48413b34302f2e30374149566a89b1 +d6e9f3dfbb9d8770605a585d5047374d4e6c69544c555f6d808e989364302929292b2f71 +ddfdfffffffffffffffffffffffffacae7e6e5e4e3e4e3e4e3e3e3e3e2e1e1e0e0dbc07f +4027212022201b181919191f3d5e61503f38373d4952585b574f463e3a383b3834363d48 +546580a9d2e9f4dfbca18b7b71696d7f664f444b5d82826f66676d7583939c9873382b2b +2a2d3889ecfefffffffffffffffffffffffffbdae6e6e5e5e3e4e3e3e2e3e2e3e2e1e1e0 +dfdac1834328211f1f1f1c191919191f3d5d5b483e40454c555a5a54483f3b34393d4647 +443e3f485464789cc9e3ecdabaa5938f888083907d635d66798d8e83838788888f9ea39d +7d403636313049abf8fefffffffffffffffffffffffff8bbe5e4e5e5e3e3e4e2e2e3e1e2 +e2e1e1dfded9c28b4b2a201e1e1c1a181918191f3e5d5a4d494b505558544b43382d2b28 +444d59574c4e4b4e56647495c2dfe7d6b9a79a9e98908e8d857a788191999b9a9ca1a3a2 +a3abaca38449454c423d6ed6fdfffffffffffffffffffffffffff8bae6e5e5e4e3e2e2e2 +e2e1e0e1e0e0e0dededccca35f2f201e1e1b1a1818191a1f3e5e5e585654545450443936 +312d2d273d55828b6153595b5b627190b9d8e1d4bca99da1a39f968e86838891a0a9acaa +a9aeb1b2b3b7b3aa8f5a515e5759a1f0fffffffffffffffffffffffffffff7ade6e6e6e5 +e4e2e2e3e3e2e0e0dfe0e1dededed6bd7a39211d1c1b1b1817191a1f3f6165605c57534f +453630333b3b3b36405d95a68068676962626e8aaeccd8cebaa99c9ba09d928d8a8b929f +acb2b1acaab2bbc0bfbeb6ad9a7566666680d5fbfffffffffffffffffffffffffffff7b9 +e6e7e6e5e6e3e3e3e3e1e0dfe0e1e1dedfe0ddce9546241e1c1b1b1918191a2042636864 +5f56524a3c33323f50514e505870909f93857d7367636d84a4c3d1cbb6a99d969a9b9189 +86888e97a0a5a5a5acbbc6cac6c1b8ada091857576a5effeffffffffffffffffffffffff +fffff8bae7e7e6e5e4e4e3e3e4e3e2e0e1e2e1dfe0e0dfd8ac5a2a1f1d1c1d1b1a1a1a21 +44646a68625751473e3e44526267666a6e7c8b95918b807064636d7f9cbfd0ccbbaea49d +9da0a098908b8b8e949ba3aebcc8d0cecac4baaea29c9b9294c1f7ffffffffffffffffff +fffffffffffff8b6e7e8e7e6e6e4e5e4e4e3e2e2e2e3e2e1e1e1e0dcbf7434221f1f201e +1c1b1b2244656b69625a50494c545c646d747a7f80848a8a8581766862646c7b97bfd8d3 +c0b2aaa5a5a6a9abaaa7a5aaadb3bac4ccd2d5d1ccc7bfb3a49ca1a8b0d2f9ffffffffff +fffffffffffffffffffff5a5e8e9e8e8e6e6e6e5e4e4e3e4e3e2e1e2e2e1e0ddcc8a3d25 +2121201e1d1d1c2445646b6b655e57565e646a727b848a8c898582807e7e736865676d78 +94bbd8d9c3b4adaaabafb1b2b6bdc1c6c7c7cacdd0d5d7d2cdc9c1b3a59ea2abbcd8f7fe +fffffffffffffffffffffffffffff7b4e8e9e8e8e7e6e6e6e5e5e4e3e3e3e2e2e2e1e0dd +d095462823221f1e1f1e1e2442626c6e6c6866696d6b6a6f777f83827c797a7e8384766d +6b6b707a93b3d1decdbbb1acadb3b8bdbec2c9cecccbcccdced4d7d4cecac1b3a7a6aaa7 +b9d3effefffffffffffffffffffffffffffff9c5e8e8e8e8e6e6e5e5e5e4e4e3e2e2e3e3 +e1e0dfddcf9c522c2321201e1e1f1e2442636d6f7173777877736d6b6d71747575798189 +8c877a72706e727c92b6d9e4d4c0b6b0adaeb6c3c9cacdd0cfd0d1d4d5d9dad6d0ccc2b4 +a7abb4a4b0caeafdfffffffffffffffffffffffffffff8bee9e9e9e8e6e5e5e6e6e5e5e3 +e2e2e3e3e2e1e0dbd2b46f3924201e1e1e1f1f2341636e71767b8183817f7c77787c8083 +868b9193918a7e77726f737c90b5dce8d7beb6b1b1b1b5c1ced5d6d8d9dadee2e2e0dcd5 +d0cbc1b3a6adc0a8a3bee7fdfffffffffffffffffffffffffffff7afe9e9eae9e7e6e6e6 +e7e6e6e4e3e3e3e2e2e2e1ddd8cc95502b201d1e1f21222541646d71777f86898a8c8d8c +8e929696989a9b999591877b7371747a8cb2dcebdcc4b6b3b7bbbdc5d1dbdde1e3e5ecef +ece8e3d9d0c6beb2a6afc8ab9ebae2fdfffffffffffffffffffffffffffff8bbe9eaebea +eae8e7e7e7e7e7e5e4e4e3e3e3e2e1dfddd7b57036221d1e2024272d48666e717881888b +8d909496999ea19fa0a2a19d9d9d8f7c737374788db5dce8ddcab8b2b8bec2cad5e0e5e8 +edeff4f8f5f1e9dfd3c5bbb0a6afc3a4a1badefcffffffffffffffffffffffffffffface +ebebecebeae9e8e8e8eae7e6e6e4e4e4e5e4e3e1dfdccb974d271e1e232d343a4e686e71 +777e888e9093999da0a5a5a2a4a7a6a6abaa947d767575778db2d7e1dbcebdb2b1b5bacd +e0eaeff3f6f7f9fbfbf7ece2d6c9bcafa6acb59aa8badafbffffffffffffffffffffffff +fffff8beececececeae9e9e9e9eae8e7e7e6e5e5e6e5e4e3e1ded6b87033201f293c494a +54696e70747d8a9092979ea3a7aaa8a7a9adadafb6b0977f787675788eb1d3dcdcd7c6b4 +aeabadc4e0eef7fcfdfdfefefefaf0e4d6cbbcaea4a7aba3b8bddafbffffffffffffffff +fffffffffffffacaebebebeae9e9e9e9e8e8e8e7e7e7e6e5e5e4e3e3e2e0dbcc984a2623 +344f5953586a6d6f747d898f9298a0a4abaeaeb1b3b5b4b6b9b198807773737b92b5d5dd +dfdfd2beafa7a6b0c8e1f3fcfefefefefefbf2e5d7ccbcada2a2aab6c9c7dffcffffffff +fffffffffffffffffffffbdaeae9eae9e7e8e7e7e8e8e8e8e7e6e5e5e4e3e2e2e0dfdcd4 +b86d3229445d5f575b6a6c6e747d878e91979da5adb2b7bcbfbfbbb9beb5967c726f707c +98bdd7e0e4e6dac7b4a8a5a2b0c7dcf3fcfefefefefcf4e6d7cabbaca1a0afc2d1cee6fd +fffffffffffffffffffffffffffff8bbe9e8eae9e7e8e6e7e7e7e8e7e6e5e4e5e4e3e2e1 +dfdedcd7cb92463150625f59606c6c6e757f858b91989ea6b0b8c1c7c8c5c3bebfae8c74 +6e6e717e9bc4dde7eff3e4cbb7adaaa1a1adc0dceffafdfdfcfbf5e7d7c9b8aaa1a1b9d1 +d2ccecfefffffffffffffffffffffffffffff8bae7e8e9e8e8e8e6e6e6e7e6e5e5e4e3e4 +e3e2e1e0dedddad7d3b1633d5660595a666e6e6e747d82888f969ea8b5bfc8cdcdcdccc5 +b99d7d6c6a6e737e98c2dce3eef8e2c1b0acaea89d9da8c0d5e7f2f4f6f7f0e2d4c4b7ab +a1a1b7c8c2c8f0fefffffffffffffffffffffffffffff7ade8e8eae9e8e6e6e6e6e7e5e5 +e6e5e3e3e3e2e0dedddddbdad7c588535c5e575c6b6e6f70757b80858b939fabb9c5ced2 +d2d3d1c7b18a6e666971767c8eabc2ccd9e3ccaea1a5acaa9e979aa6bacedbe4eaede6d9 +cebfb3aba19fadb8b8d0f6fffffffffffffffffffffffffffffff7b9e8e8e8e7e6e6e6e6 +e6e6e5e6e5e4e3e2e1e1e0dedddcdbdad9d0ab73635d565d6f707071767a7d8288909ead +bcc8d0d5d7d5cebda07966656a7275737a899cadbcc1af968d95a0a19b9a9899a4b5c1cf +dce2ddd2c8baaea9a19eaebdbedafbfffffffffffffffffffffffffffffff8bae7e7e6e6 +e5e5e4e5e5e5e4e4e3e2e1e0e0e0dfdddcdbdad9d8d5c1906e61565b6e72717175797a7e +858e9badbccbd2d5d5d0c5af8d6d64656b706f68666e7f909da196827679848a94a1a097 +949dadbecfd7d4cbc2b5a9a6a29fb3c3c3e4fdfffffffffffffffffffffffffffffff8b6 +e6e6e5e4e3e4e3e3e3e2e2e2e2e2dfdededededbdbd9d8d8d7d4c9a47a695c5666707172 +7376777a828c9aacbacbd5d6d1c7b89d79635e616668635a575e6e7a7f827c674e4b5c75 +96a8a89a9193a0b2c2cbcbc4bbb0a5a2a09eaebbccf2feffffffffffffffffffffffffff +fffff5a5e4e5e4e4e2e2e1e1e2e1e0dfe0dfdfdddcdddddadad8d7d7d5d4cfb48772685d +626c7072737474777e8997a8b7c7d1d5cfc1ad8b695d5c5c5c5a50413c485c696c6b6857 +4d4f587a9fa9aba39a969dadbbc2c4beb6ada3a09e9ca4b6defbffffffffffffffffffff +fffffffffffff7b4e4e3e3e3e2e1e0e0e0e0dfdddddddcdbdadadadad8d6d6d5d4d3d0bb +9076716b65686f71727372737a8593a2b0bdc7cbc6b79f785e5a5f5d544c3c2d2a374b59 +5c5f69717d7c7b91a3a7a9a8a29ea1afbbc1bfbab3a9a0a19f9aa2c5f2feffffffffffff +fffffffffffffffffffff9c5e3e1e2e2e0dfdfdfdfdedddbdbdad9dadad9d8d8d7d7d5d4 +d3d2cfc39e7d76756a676e71707071717581909ca6b0babeb8ab8f6a585963645746393b +40434a504e546d828c8c8e979aa0a3a7a9a5a7b2bdc1bdb5afa69fa19f9aabe2fdffffff +fffffffffffffffffffffffffffff8bee2e1e2e1dfdedfdededddbd9dad9dad9d8d8d8d8 +d6d5d4d2d2d1cfc8ae897c7d766f6f716f6f706f727d8a959da7b1b4ad9f7f5f565c686a +6251444b53504b49444b657880868d9192999da5a7a5aab6bfc1bbb2aba4a0a19f9bb2ed +fefffffffffffffffffffffffffffffffffff7afe3e1e2e0dedddedddcdcdad9d8d7d8d7 +d6d7d8d6d5d4d3d3d1d0cecab9938082807b73716e6e6e6d70788490979fa7aaa695735a +58616967635b5251534e4742434d5e6e7a83888c9197999e9fa0a7b1bac0bbb3a9a4a2a3 +a099b0ecfefffffffffffffffffffffffffffffffffff8bbe1e1e1dfdddcdcdddddbd9d8 +d7d6d6d6d5d6d8d6d5d3d2d2d1cfcecabc957e7d7b7b72716e6c6b6b6e737d8991989ea1 +9e8d6e5c5d656764605d56514f4d4c4f545b6575858b8a8c929395989a9b9ca6b1bbbab1 +a9a5a4a5a097adeafdfffffffffffffffffffffffffffffffffffacee0e1e1dfdcdbdada +dadad8d7d6d6d7d5d5d5d6d5d4d2d0d0d0cfcec9bb8d71777878716f6e6c6a696b707983 +8c90969a9a896e60646867635d59565351565d61676b74838f8f8d90929293959590919c +aab5b7b0aaa6a6a69d95adebfefffffffffffffffffffffffffffffffffff8bedededede +dcdad8dadadad8d6d5d5d6d5d4d4d4d4d3d1d0d0cfcececbbe8f636b777973706e6d6b69 +6a6d747d878b9094948873696a6a68635e5b5f5e5c626e71788087909795919697969290 +90888893a2abb1b1aba8a7a59b92acecfefefffffffffffffffffffffffffffffffffaca +dddedddcdbdad8d8d8d8d6d6d4d5d6d4d4d3d3d3d2d1d0d0cecdcdcbc3a0675d7176726f +6e6c6a6a6a6a6e7680878c8f90887a726e6b696664646969686f7f87939da0a2a6a29da1 +9f988d88877e7d8a97a3adb0aba9a8a39790aaeafefeffffffffffffffffffffffffffff +fffffbdadcdddcdbdad9d7d8d6d6d6d5d5d5d5d4d3d3d3d2d1d0cfcfcecdcdccc8b68965 +656e6d6c6d6b696a69686b717c83888a8b867c76726f6d6c6b6c7071737e94a5b2b8b6b5 +b9b5b0aea59a8e857e767482909fadb1aca6a7a1948fadecfefeffffffffffffffffffff +fffffffffffff8bbdbdcdbd9d9d8d7d7d5d5d5d5d5d5d4d3d3d3d3d2d1d0cfcecdcdcbcb +c9c3ae86605e61646b6a696967676a707982878b8b857f7b7671706e6c6e7379818fa4b5 +c0c2beb9b4b0b0ada49c90817362657c8f9fadb1aca4a59d918eafeefeffffffffffffff +fffffffffffffffffffff8badbdad9d9d7d7d6d6d4d5d4d4d5d5d4d4d2d2d3d3d1cfcfce +cdcccbcacac8bfa0654645506669686867696a6f7882888f8c807b78726d6a696b6f7983 +8d959ea8aaa8a49b9390908d8b8880725f4d60879aa3afb1aca7a59c918eb5f1feffffff +fffffffffffffffffffffffffffff7add9d9d9d9d6d5d4d3d4d4d3d3d3d3d3d3d3d2d2d2 +cfcececdcdcccbcac9c7c4ae78422c385d6967686667696d767f86908b7c757069635e61 +69707b86878582837f7f7f7d7d7e7a716c66615b575e7899a7adb2b1aaa6a39a908ebff7 +fffffffffffffffffffffffffffffffffffff7b9d9d8d8d6d5d4d3d3d4d3d2d3d3d2d2d2 +d2d2d2d1cfcececdcdcdcacac8c7c5b894592f31566968666667696f767d828e8b7c7269 +5d5a5b606a6d6e6e6b696a6b686e6f7072726c64615d5f62708798a8adb3b6b0a8a6a196 +8d91cdfbfefffffffffffffffffffffffffffffffffff8bad8d7d5d4d3d2d3d2d3d2d0d1 +d0d1d2d1d0d1d2cfcdcccccccbcbcac9c7c5c5bdad7d42324e6668666565686f777d7e87 +8a827761494a53595c59555354585b5e5f636464696e6e727879797b8ea5b0b2aeb1b3ac +a7a59e918995d6fbfefffffffffffffffffffffffffffffffffff8b6d6d6d5d3d2d2d2d1 +d2d1d0d0d0d0d1d0cfd0d0cecdcccbcbcccccac8c6c5c4c0bca265404b6467656464696f +797f7c828a89826944394146474546494f545b636a6c717d88909191908c878da2b5bbb3 +aaabada7a4a29c8f889ce0fbfefffffffffffffffffffffffffffffffffff5a5d6d5d3d2 +d1d1d2d1d0cfd0d0d1d0d0d0cfd0cfcdcccbcbcbcbc9c8c7c5c5c3c2c2b9946753616665 +6362686d7883817f888f918663464042464a4e5965707c8a94989ca4aeb4a99a938d8f9d +b0babdafa1a1a4a2a3a1978b85a8edfcfefffffffffffffffffffffffffffffffffff7b4 +d4d3d2d1d1d0d1d0d0cfcfcfd0d0d0cfced0cecccdcacacacac7c6c5c4c3c2c3c4c3b899 +6a5f65646362666c7683867f87939a9b8a705e565a6166707d8b98a2a8aeafb0c0c5ad99 +8f8f9dadb7bdbba998979ea1a19c908685b7f7fdfefeffffffffffffffffffffffffffff +fffff9c5d3d3d2d1d1d0d0cfcfcfcfcfd0d0cfcfcfcfcdcccbcacacac9c6c6c4c3c3c3c4 +c5c6c7b77f6063636363676a737f87828592999e9f9384726a6a6b717b8c99a0a2abb0b1 +b8b5a298959daeb5b6bbb7a89590989c9c978c8187c6fafefefeffffffffffffffffffff +fffffffffffff8bed2d1d0d0cfcfcfcfcfcecfcfcfcfcecdcececdcbcac8c8c9c8c7c6c4 +c2c3c3c3c5c7cac08760616261646669717b8484828b939ba29f9784736d6b6d717d8a92 +959da7abacaaa4a5a8aeb4b3b3b4b0a38e8a94979a95887a8edafbfefefefeffffffffff +fffffffffffffffffffff7afd0cfcfcfcfcfcfcfcfcfcececfcfcecdcdcdcdccc9c7c7c8 +c7c6c5c3c2c3c4c4c5c8cac28b6162626262666a6e767e8483858a929a9e9a8c7f797775 +747a848d9298a3aaacadafafaeaeafb1b3b1a89c898690959994847aa0e9fcfefefefeff +fffffffffffffffffffffffffffff8bbcfcfcfcecdcecfcfcfcececececececccccbcbcb +c9c7c6c6c6c6c4c4c3c2c3c4c4bfb9b0845e6262626264676a70777e818383868d93938b +8481828283888e94999ca1a4a5a7a6a4a2a5aaacafada29587868f9396918380b7f4fdfe +fffffffffffffffffffffffffffffffffffffacececfcfcecececed0cfcfcecdcecdcdcb +cbcbcbcac7c6c5c5c7c6c4c3c3c3c4c4bfa48370594f5f6261626263686b71777c7f7d80 +868a8984828382848585898e908a827e848c8c8e94a0aaa9aaa69b8f84879194948d818d +d2f8fdfefffffffffffffffffffffffffffffffffffff8becececfcecececfcfcecdcdcd +cdcdcccbcccccccac7c5c5c5c6c5c3c3c2c3c4c5b588533831435e625f60616366696e72 +787a757982847e7c7d817e7e7a757575746d605e6a767a8392a3aca8a6a0988f88889297 +938981a8ecfcfdfefffffffffffffffffffffffffffffffffffffacacececfcecececfce +cdcccccdcdcdcbcacbcbcac9c6c5c4c4c5c5c3c3c2c3c5c4b3916335283e5d6560606163 +6467696d73757071777b78767678797a746c6866686864636a757c8797a6aba6a0999994 +8d8c9599908588caf9fefefefefffffffffffffffffffffffffffffffffffbdacecfcfce +cdcdcecececccccdcdcccbcacacac9c8c6c4c4c4c6c5c4c2c2c3c5c4b7a2884e2c3c5c68 +635f6061626566686c6f6b696d73727273757678766f6b6b6c6d6e6d737d85929fa8aaa4 +9f979b98919297998f8499e2fbfdfefefefefefffffffffffffffffffffffffffffff8bb +ced0cececdcccdcdcdcccccccccbcac9c9c9c8c8c6c4c4c4c5c5c3c2c2c3c5c4baa79c6d +393b5968665f5f6062646466676b6864666b6c6e707577797b767372706e72747c87909c +a9adaaa6a4a09e9a989a9a988d83a6ecfcfdfefffefefeffffffffffffffffffffffffff +fffff8bacdcecdcdcccbcccccccbcbcacacac9c8c8c7c8c8c5c4c3c3c3c3c3c2c3c3c5c4 +baaaa4895340556668615d5e60626365666865616062646a6e72777c7e78757675777c85 +9197a0abb3b2b0b0aea8a09e9d9d9a938780aceefdfefefefefefefffffffffffffffffe +fefffffffffff7adcccdcdcdcccbcccccccbcac9c8c9c8c7c7c7c8c8c4c3c3c3c2c3c3c3 +c4c4c5c3baaba59d7751526369625c5c5d5f6265676865605b5a61696d70757e827e7c80 +7e87929ba5a8b3b9bab8b8bab6aba4a39f98928c8382aeeefdfefefefefefeffffffffff +fffffffefefffffffffff7b9cdcecececccccccccccccbc9c7c8c8c8c8c7c8c7c5c3c3c3 +c3c5c3c4c5c4c4c2b8aea6a79370575d66645d5b5d5d6165686967625c5b626a6f71757e +8588888c888e9ba1a7afbbc0b8b7bcbeb8b0ada99e938c867f84adeefdfefefeffffffff +fffffffffffffffffffffffffffff8bacdcdcecdcccccbcacbcbcbc9c7c8c8c8c8c7c8c8 +c5c3c3c4c4c4c4c5c5c5c5c2b6afa8a9a3916f5b61645c5a5e5f6064676869655f5d6369 +6c6f767d83898c9191959ca0a9b1b9bcb8b6bcbeb8b1aca4998e86807e83a8ecfdfeffff +fefefefefffffffffffffffffffffffffffff8b6cccdcdcccbcbcacacac9c9cac8c8c7c6 +c5c5c7c7c5c3c2c3c4c3c2c3c4c5c5bfb3aea9a7a9a19066595f5b585a5d606365656867 +62616668696d777e8588898f969ea3a6a9afb4b7b5b4b7bbb5aca79e92877e7e8386a5e3 +fafefffffefefefefffffffffffffffffffffffffefef5a5cccdcccbcacac9c9cac9c8c9 +c8c7c7c7c5c5c6c6c5c3c1c3c4c3c2c3c5c5c3bbb2adaba9aaa5a3845b575957565b5f61 +646568676565696a6b7079818986868d97a3a8aaa7abb2b5b1afb0b2a9a2a49c8d7f7b80 +848496c5eafbfefefefefefefefffffffffffffffffffefefefef7b4cbcbcbcbc9c9c8c9 +c9c8c8c8c6c6c6c6c5c6c6c6c4c4c1c3c3c3c2c4c4c3c1b6afadabadabaaa6a275535456 +54555b60656869676464686d6d7177808683838a939fa2a4a1a3a8aca6a3a3a59b9a9c93 +8378798082818391b7e3fafefefefefefefffffffffffffffffffefefefdf9c5cacbcaca +c9c8c8c8c8c8c8c7c6c5c5c5c5c5c4c5c4c2c1c3c3c3c2c1bdb7b5afabacabafb0aaa7a9 +98644e515350555c636666656362676d6f72777d7f8182828592999b9c9fa0a09b9b9b98 +9093908579757c81817f797586b0e1fafdfdfdfdfefffffffffffffffffefefefefef8be +c9c9c8c9c7c5c5c5c6c6c6c5c4c4c3c3c3c4c4c4c3c1c1c2c2c2bbb1aaa39da0a7aaaaab +b2aca9a6aa8b5a4c4f4f4d525c6263626162656a6d7074797a7a7a7c7f898c8d8c929395 +9391918c8687827971767f81807c71626d85abd8f4fcfdfdfefefefffefefefefefefefd +fdfdf7afc8c8c7c6c6c5c5c6c5c5c5c5c4c4c2c2c3c5c5c4c1c1c1c2c2c0b29f9a9a9491 +a3aaaaadb0b1a9a8a8a67c534a4e4a4a525c6062626264686c6e6f71726f6f767e848686 +7e82868b8a857e7a7a79766e70797e8180796b555b6c83a3cdebf7fcfdfefefffefdfefe +fefffefdfdfdf8bbc8c7c6c5c5c4c5c5c5c5c4c4c4c3c2c2c5c6c5c4c0bfc0c1c1bcac9a +9b9f978e9ca7a9adafb3b0aba7a79e76544c4b4949525b62636264686a6b6b6c6e6c6a6e +767c7f807977797c7a7772706e6b6869737b7f807e786a524f57667c97b4def9fdfefefe +fefdfefefefffefdfdfdf9cec7c6c5c5c4c3c4c4c4c4c4c4c3c2c2c3c4c4c4c3c0c0c0c1 +c1baa99c9d9d9a919099a2a8b0b0b6adaba5a79a74584c4a47474f595f60626364636568 +67666766676a7175726f6f6e6d6d6a676360616d787c807d7b796c534d4f5461738fc9f5 +fdfdfefefdfdfefefefefefcfcfdf8bec7c6c5c4c4c4c5c5c4c3c4c5c4c2c2c3c3c3c3c3 +bfc1c2c1bfb5a69b9c9e9a90898b96a6adb0b4b6adaea5a7977a63514844444b545c5e5b +5b5c60625f5d6063605d666b6a6764636463605e595a68757d7f7f7b7a797465564f4f56 +6294d3f2fcfdfefefdfcfdfdfefefefcfcfdf9cac6c6c5c4c4c4c4c3c4c3c4c5c4c4c2c3 +c2c1c2c3c1c1c0c0bcaea19a9f9f9b90888687a2aab0afb8b4afaca3a997806d53454242 +4651585858595a5b59585b5f5c585d5e5d5c5b5859585754546171797e807f7c7a7a7874 +705d515364a2dfeefafcfdfdfcfcfdfdfefefdfcfcfdfad9c4c4c4c3c2c2c3c3c4c3c3c4 +c3c4c2c1c3c2c2c1c1c1bfbbb5a8a09c99979d8a81868392a7a9afb1baaeafa9a5a89386 +7351403e40434a5155565454535253555455585755545453504d4c505d6d74787c7d7d7b +7b79726b7d715a5165a2e5eef8fbfdfdfcfcfcfcfdfcfcfcfdfdf7bbc4c4c3c3c3c3c3c3 +c3c3c4c4c2c2c2c2c3c3c3c1c0bfbab4afa39e9a8c909583868c898299a5aaafb3b6aab0 +a8a8a89189754f3d3f4041454d51514e4e4e4f4f4c5053524d4b494744454d5e6e757676 +797b7f7d7b7a7165716c5c546599e2f2f8fbfcfcfcfcfcfcfcfcfcfcfdfcf7bac3c2c1c1 +c1c1c2c1c2c2c2c3c1c0c0c0c0c0bfb8b4b8b7b1a59ea2968a928d8b938b7e76809da0aa +abb2aeaab1a4aba28e8d744a393c3e3d4045484948494a4745454644413f3c3b4150606b +72757675797b7e7c7d7b7166685b54596590d9f5f7fbfafafbfbfbfbfbfcfbfbfcfbf4ad +c2c2c1c1c1c1c2c1c2c2c3c3c1c0bebfbab7b2968da5b2b0a6a7a89496988d9899847c7c +778a9ca1a9a7afa7acaca3ab9e918f6f4534373b3c3b3e404141423f3d3b3b3938373740 +52646c7172747576797a7b7c7d7b6f5e5c55535d678ecff3f6fbfafafaf9fafbfbfafafa +fcfbf4b8c2c1c1c2c1c0c3c2c1c2c4c3c1c1c0bdb0ac9e737096b5c1b4ababa19f9b989e +988d93907c7691a0a2a5a5a9a2aba7a3ac9c938c643e32373d3c3c3b3b3a393634353434 +33353d4e626e7173737475797a7b7e7e7d7a6d514b4f57626b93c9eff8fafafaf9f8f8fa +fafafafafbfaf5b9c1c1c0c2c1c0c1c2c2c2c3c2c1c0c2bfbabba27f91b2c4c7b3a8b1ac +a09ca39c9a9f9f937f7a809b9ea0a09fa29ea7a3a5a89694865c3d2f323a3f3f3f3c3934 +31303030343d4b5c697172727174767c7e81817b7a7b6b45404d5a646b94cfebf8fafaf9 +f8f7f8fafafaf8f9fafaf4b4c0c0c1c1c1c0c0c2c2c2c2c2c2c4bbafbdccbda9a8a9b8bf +bcbab9b1a5a1a0959da69c9490938585949698979b9d9ba39fa3a293947f593c2e323b3f +40403f3d383433353e4c5b656b706e6e6f71777e8286837c7a7c693d3b4f5f666d9ddeeb +f5f9faf9f8f8f8f9f9f9f8f8f9faf1a3c1bebfbfc0c1c1c1c0c0c1bfc5c49e8bacc2bbae +8f698cc2cbc8bab3b1ac99919c98929fa49d85757c8f8d93949798999f9aa09b94987b5a +402d313b404141413f3d3c434d5b676a6b6c696b6d6f798286827c7b7c7d693b38506266 +75a4e7eff3f8f8f9f7f7f8f7f9f8f8f8f7f8f1b2c0bfc1c0c0c1c1c0bebab8b5c5c09095 +b6bcbbad824b70c1d7ccbcbcbeab9399a19898a6a59588847a7f87898f8f9497969a999e +989d99755634282f393e4242434549535d666d6d6d6b6a6d6e707e878a817b7c7f7f6b3c +3752666b84ace6f3edf5f7f8f7f6f6f7f8f7f7f8f7f6f2c3bfbec0bfc0c1bfbfb9a79eae +cdcfb6a8a0b3c2bd85547fbed7d4c9b9b09f929b9c96a0a59d9796908775748284878992 +94979c9b9f9ba388553325252d374144464b515b646b6f6c6b68676e7174808a8c87817f +81816d3e3653677392bae1f0dde8f5f6f6f5f5f5f7f7f6f5f6f5f1bcbebebec0c2c1c0c3 +b5958aadd2ded19971a1d6daa46f98bbc2c7c1a8a2a5a1a0968d9698949a9a8f80706972 +7f7d808691969b9d9fa19d89482e2a29292e3b464e52555c656b6d6868666770757d868a +8a89878184836d3d33536f829abed1e9d2c9e5f3f4f3f3f4f6f6f5f5f5f6f0adbdbebebf +bfc4cccdc0a69fb6cedac9895e95d6e5d5acb9ccc0a8a2a6adb7bbaf9a95908a8a979685 +7a7575696d797f808794989d9fa397713a2e3645413a3e47525757596066686565656a73 +7b858989888b888487846a3a365d8294919195c5ba98c0e2edf0f1f2f4f3f3f4f4f4f0b9 +bfc0bfb1a8bed6cec3aa848bc0d2b0776a9cc4d7e4c9cdddbd786296b8c0c5b5a6a79482 +8b9794878a877a69666b7e80848e96999d9f98633936466a76746b5856595654555a5e5f +62666e7a848b8c8b8b8d8a8889856a3b3f6c8d9a764c4d778a77a6cbddeaf0f2f4f3f4f2 +f2f4f2ccc3c8c6ab9fb3c8d0ceaa717bc3d7bc978eabb3bbbebed5dcac655491c1c6c2b9 +aca38e838d8f919da3917872766e6e747e8b9097989a93633b3f5e94b1baac8e715d5552 +4f52585c636d79848b8f9192918f8b8a8b83633f5175949b643538578490b3c0c4d4e5eb +f3f4f5f2f2f4f0bcc9d2cfb79780a2d5e1c3909fcad6c8c2bdbcad967897d1e2a35d73ae +c4cec7bba993888785828fa0a28b7e7b736b635e7181898d91938b65424c72a5c1d9ddc9 +a96f565251545b646d7780889095979795928d8b8c805a4a637ca49c5c373e5d8aa2beb6 +9eaecad2e9f3f5f4f3f4f2c8ced7ceb58271a4d3dadacac9d0c5aaabc6c8b181567cbddc +c7899ecdd1d6d2c09e8e9994877f8e9a97898b85726463636e787b838a918f73475282ac +b5b7cdd0c394685a5a606770767c858d959b9d9a96918e8d8c765665819ac1a35f475c82 +949fb4a48c9fc1c5d5ecf3f3f4f4f3d8c0d8d2c099a0ccc8b3b6c9d1cbad7870adc8b677 +649abfd0d9cbccc6c6dcdbd1afa0afa592888e948e8b8f8f7d767b7a7a716e77848d937f +515085adafa9c3dee7c98e6964676d72777f8891989ea09d97908e8e8b787ca5becdd99e +656886a7ada4997f82adc5b9b2d4e7e7eaf0efb89cd6e0d0d0dce3c3866898cace975e5d +9ecacb9182c0cec6d3e7d19c97cbdedec19f9e979286878b878c908f838c918e8d8c8581 +808a928b5f4a79a59f93acc7d7d2a77468676c6f75828e969da1a4a2988e8d9093a2c3e0 +efe8c8887591aab5beae896378afbea58baccfced4e3eab6accbcbafbee3e4be73558dc7 +cda07384b3d6dac8c4cdc1c2dee8b4696dbfe4d7a7777387978a83858d8f8e8788988e86 +91a8a8a5918692946c4459889389909aadc8bf836c6a6d6e7482929da5a8aaa4978c8f9d +a9ceeaf2e9cc967e91a3b0b7bdb4a2889cbeb79c919fbabdb5bad0a5c7c39d7092cdd9c6 +887fafccd0c6b5b8c9d3d3d7d9aa98bedfdc9c5158a9ded19961658da6a49689908b877f +8894868796a5abb8b6a19a9e764452829b9c9b9ba6c2bb846f6e6e707783919fa9adada5 +9c9aabc0c8e6e7d6a57e7b869eabadb4b4acaca8bbc7a47b90a7b2b19a8dada8ccb48073 +a8cacfceb8b6c7cfcdcec7b6afbfd1e0d27e64a7dacf804b6bb1e0d2ac8c98b5b5a99892 +948881848a8c7e8ea0a1a3bdcdc4b7a37d4e4e789eaba59791979d7d7170717478818e9d +aab0b2afb6c5d3d5c8caa276576785899aa9acadaa9d998d9eb8a07d9bafa99b9ca6b9a9 +dabe908db8c5c6d5c5b3a8b4cbc6b0816a98cfd9b76f5a9ed9c4845485cbe3d6bac1d9e0 +c7a8a1a4a090888487887c889da4a2b0c7cbc0b8a881625d666665686e76847a76747374 +78818a99a7ab9f88878d89877d7b5f3e55778192a1a7a2a7a5917b6676abb2a2b3b89574 +8eb6c6a5e9d5c2b3adb4c3d6cba57087c7cbb46f5992cfc89c6880b8dbcd9e829ecbd3cc +bacae9e1cab4a6bab49e96888c8a81868f9da6b0c2c4b0b0c3b5968678665557595b6066 +737674767b81858ea191684c4543424650635140698992a3a9a49ca6a59785788fb4b8a0 +aabea1899cbab98edfd9c7a06f77aeccbc855f8acfd2c99081b4d8cbb99aa5c9d8d4b0a3 +acb2b0a07991d2dcc3af8a8fa5aeac989a8988898c9295a1adac9a9dbdbfb7b9ab9e8d83 +766a696674807a77797a75849f9b7a54423c3f4e697159657f94a1a3a49d9eaba6a7afa8 +b0bbaf8084b2b0a5aabcb69bccccb37b4e68acc6c1907db4d7d3c8c0b4c2c9b7b9bfcdcf +c8bea4a8b9b4a3834e62bcdac9995d5488b3b9a79991918e898c8d8d8f96979ba8b6b8b2 +b8bcc4bbaca19f9ca5a4897e79706b8ea1b4a77c544b5875878187a3afaaada49d9ba2ab +9790afbdbdb6a87e86b2b29289aeb9afb1bdad786a95bdbfb7bcc3dad0c2bac2cdcec39b +8da8d3e4cc986b87bbb8a375485eaed5daaf756ea3bbb7a7a2a2948c8b8c8b89878a9a98 +96adb3a5abb3bec7bfb4b1b9b9b4a49f96898ea8afbeb298807c83989ea0abb2b7ac9e9c +9797a39f6e5f9ec9c2a19ba3acc4bb7c70a7bca9bbb9b8acafc8c9b8a4abcee8c6a99095 +c0cbb2835678c6dec8854c6bb0b8b679507eb0c7ddc5b6b4cbd4cdbcb7b8a29494878a95 +89829594909ea5919299a9b5b5aeacbcb9b7b6c1bec0c3c2bdc3beb0b2b6abb1aba5a7a1 +a29a90989a98a48f5a68a8d0b97b75acb4c3c19296b8c39cc3bbb8bbc9d6cda97772ace3 +ce9c6861a4cdb8794868bad2c88a5b80afb4c5b38a9db6c4d8cdd1d8bebccfcbc8bca399 +9f8f93a0918688898989978a818c9fa9a4a5a3b0b6b7acb8bcc2c8c3bec2c9c2c7cbb6b1 +ac9c96928e8d90999e9fa3836587b4d1b37979afb1adb9c1c5c4c6aacab99291bad2d2a1 +5c4f98dbde995b6aadd9d8986084c1d5cdb7909fbfc4c1c3bdbac1d7e2dadbd29c88afc9 +ceb6a3a9b0a7a9af9d88818488868985839096a19c979aa1adada0a2a8b1bbb6a8bbc3b5 +c1c8b0a49f94958e858c9495a0a5a3897f91aacebba1a3baaf868ac1c7b0a6b3d2af665b +a4ccd195596ba7d3e4b57b96d1eae2c09ba9cdd5cccbb7afbfd9cdb8b8aba5c3dfdbd5bf +734979c4dcc2a0a1b1b9baafa08d909aa0968a88858a8c8f8b8d909a9e919ea9aeb4bdb2 +a1b5b7a1b4bba49895949889868e9598a3a9a28f776c90c2b6a8b0c0b07982bbbc95708d +c5965d60a2d0dab485a5d2dbded4bfc8e0e9e4d1bcb1c5d0cac6bba49ec9c5bcb3885e71 +b5d6cc97583d69c5e4c98f738babbbb3a99d9ea5aba09c918c8d8e8c7f89939a9596aaab +a5adb0a6a4a8a59aa3a89e979791928991959ba2acb19f7f5c578cb8a57f88bac1a0b0d5 +cb966a97dbac7b8cbdd9e2cec3cce1e3dad2c7b5b8cde1d1b68886b4d1c0ad85659ac3ce +b77b484f9acfcb91585f84c4d9ccb39091afc6bfb0a8a5a6a8a4aea396909b9c929a9b9e +959fada8929ea29ca0a39e999d9aa0a0968b8687969aa4a9adafa0755f89afbd996372b7 +c8b2bee0dbbba4bbeeddb3a2b7cfe9dfd0baaaafc6cfc188668dc9bea5734d81c0b89567 +5081c4ddbc6c5477a2c9cfb892919db6c6c6d6c9bbd0dbc8b3afb0b3b0b2b7ac97939fa7 +a5a7a397919db3a99fa19a93a2a6999aa19aa1a08f8882929e9da2a4a8acb0a4a1c8c8bf +a98592bdbe9097c9d0cdc3a8d8dbc7987b99d6dec6915f76aabab27a4d6fb6ba96614d74 +b1be996371aad2e2d99d7ea0b3c3d3cbb8afb0bbc5bcc6d1d4e5e0c6aba7adb3aebabcac +9ba1a2a29fa2a69a959db5afb4aaa3a1aaa597999e999b9b908f8ea1a9a9a6a8aaa6b2be +ccd0b7afbeaea1ada3686eafbfb59393a1a8a48c7983a1b1b1a18b94a9ada88d808da5a9 +9b847b80919b93858fb0cadde3d7c4bfcad4d5d0c8c2c6c9c4bcbeb6b8c1b8aa9d9f9fa8 +aaaeb2aba9ababa89fa19b88888d97928e888a8987878a88868185837b7b86989ba19fa1 +9d9ca4a4afac999695836e6463575e777e7e7982 +showpage diff --git a/graphics/psfig/unsupported/macdemo/figs/zip.ps b/graphics/psfig/unsupported/macdemo/figs/zip.ps new file mode 100644 index 0000000000..783ec71b24 --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/figs/zip.ps @@ -0,0 +1,21 @@ +%! +%%BoundingBox: 301.0 392.44 360.02 437.4 +/Times-Italic findfont 30 scalefont setfont + +/printZip { + 0 0 moveto + (Zip) show +} def +320 400 translate + +.95 -.05 0 { + setgray + printZip + -1 .5 translate +} for + +1 setgray printZip + + +showpage + diff --git a/graphics/psfig/unsupported/macdemo/lprep68.pro b/graphics/psfig/unsupported/macdemo/lprep68.pro new file mode 100644 index 0000000000..0d6510011b --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/lprep68.pro @@ -0,0 +1,446 @@ +%!Title: "Laser Prep -- The Apple PostScript Dictionary (md)" +%%Creator: Apple Software Engineering +%%CreationDate: Thursday, March 19, 1987 +%{appledict version #68 0 +% Modified by T. Darrell 1/89 [TJD] +% © CopyRight Apple Computer, Inc. 1984,1985,1986,1987,1988 All Rights Reserved. +%%EndComments +%%BeginProcSet: "(AppleDict md)" 68 0 +%%[TJD]%statusdict begin waittimeout 300 lt{0 60 300 setdefaulttimeouts}if end +%%[TJD]%currentfile statusdict begin serverdict begin product (LaserWriter II NT) eq revision 1 eq and {/setrealdevice {//setrealdevice exec 31 sendpcmd 4 eq tonerlight} bind def +%%[TJD]%/execjob {31 sendpcmd 4 eq tonerlight //execjob exec} bind def end end eexec}{end end 722{currentfile read pop pop}repeat}ifelse +%%[TJD]% HEX CODE DELETED +%%[TJD]%/sc {60 45 {abs exch abs 2 copy add 1 gt{1.0 sub dup mul exch 1.0 sub dup mul add 1.0 sub}{dup mul exch dup mul add 1.0 exch sub} +%%[TJD]%ifelse}setscreen} bind def statusdict begin product(LaserWriter II)anchorsearch end +%%[TJD]%{pop pop/letter [/letter load /exec load /sc load /exec load]cvx def/legal [/legal load /exec load /sc load /exec load]cvx def/a4 [/a4 load /exec load /sc load /exec load]cvx def/b5 [/b5 load /exec load /sc load /exec load]cvx def +%%[TJD]%/lettersmall [/lettersmall load /exec load /sc load /exec load]cvx def/a4small [/a4small load /exec load /sc load /exec load]cvx def/note [/note load /exec load /sc load /exec load]cvx def}{pop}ifelse +systemdict/currentpacking known{currentpacking true setpacking}if +%%[TJD]%/LW{save statusdict/product get(LaserWriter)anchorsearch +%%[TJD]%exch pop{length 0 eq{1}{2}ifelse}{0}ifelse exch restore}bind def +/LW{0}def +/LW+{LW 2 eq}bind def +/ok{systemdict/statusdict known dup{LW 0 gt and}if}bind def +%%[TJD]%ok{statusdict begin 9 sccinteractive 3 ne exch 0 ne or{9 0 3 setsccinteractive}if end}if +/md 250 dict def md begin +/av 0 def +/T true def/F false def/mtx matrix def/s75 75 string def/s8 8 string def/s1 ( ) def/pxs 1 def/pys 1 def +1 0 mtx defaultmatrix dtransform exch atan/pa exch def/nlw .24 def/ppr [-32 -29.52 762 582.48] def +/pgs 1 def/por true def/xb 500 array def/so true def/tso true def/fillflag false def/pnm 1 def/fmv true def +/sfl false def/ma 0 def/invertflag false def/dbinvertflag false def/xflip false def/yflip false def/noflips true def/scaleby96 false def/fNote true def/fBitStretch true def +/fg (Rvd\001\001\000\000\177) def +/bdf{bind def}bind def +/xdf{exch def}bdf +/xl{neg exch neg translate}bdf +/fp{pnsh 0 ne pnsv 0 ne and}bdf +/nop{}bdf/lnop[/nop load]cvx bdf +/vrb[ +{fp{fg 6 get 0 ne{gsave stroke grestore}{gsave 1 setlinewidth pnsh pnsv scale stroke grestore}ifelse}if newpath}bind +/eofill load +dup +/newpath load +2 index +dup +{clip newpath}bind +{}bind +dup +2 copy +]def +currentscreen/spf xdf/rot xdf/freq xdf +/doop{vrb exch get exec}bdf +/psu{/tso xdf /fNote xdf/fBitStretch xdf/scaleby96 xdf/yflip xdf/xflip xdf +/invertflag xdf/dbinvertflag invertflag statusdict begin version cvr 47.0 ge product (LaserWriter) eq not and end invertflag and {not}if def +xflip yflip or{/noflips false def}if +/pgs xdf 2 index .72 mul exch div/pys xdf div .72 mul/pxs xdf ppr astore pop/por xdf sn and/so xdf}bdf +/tab{statusdict /11x17 known{statusdict begin /11x17 load end}{statusdict /setpage known{statusdict begin 792 1224 1 setpage end}{statusdict /setpageparams known{statusdict begin 792 1224 0 1 setpageparams end}if}ifelse}ifelse}bdf +/txpose{ +%[TJD] fNote{smalls}{bigs}ifelse pgs get exec + pxs pys scale + ppr aload pop por{ + noflips{ + pop exch neg exch translate pop 1 -1 scale + }if + xflip yflip and{ + pop exch neg exch translate 180 rotate 1 -1 scale + ppr 3 get ppr 1 get neg sub neg ppr 2 get + ppr 0 get neg sub neg translate + }if + xflip yflip not and{ + pop exch neg exch translate pop 180 rotate + ppr 3 get ppr 1 get neg sub neg 0 translate + }if + yflip xflip not and{ + ppr 1 get neg ppr 0 get neg translate + }if + }{ + noflips{ + translate pop pop 270 rotate 1 -1 scale + }if + xflip yflip and{ + translate pop pop 90 rotate 1 -1 scale + ppr 3 get ppr 1 get neg sub neg ppr 2 get + ppr 0 get neg sub neg translate + }if + xflip yflip not and{ + translate pop pop 90 rotate ppr 3 get ppr 1 get + neg sub neg 0 translate + }if + yflip xflip not and{ + translate pop pop 270 rotate ppr 2 get ppr 0 get + neg sub neg 0 exch translate + }if + }ifelse + statusdict begin waittimeout 300 lt{ + /waittimeout 300 def + }if end + scaleby96{ + ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div + 2 copy translate .96 dup scale neg exch neg exch translate + }if +}bdf +/fr{4 copy ppr aload pop 3 -1 roll add 3 1 roll exch add 6 2 roll 3 -1 roll +sub 3 1 roll exch sub 3 -1 roll exch div 3 1 roll div exch scale pop pop xl}bdf +/obl{{0.212557 mul}{pop 0}ifelse}bdf +/sfd{ps fg 5 -1 roll get mul 100 div 0 ps 5 -1 roll obl ps neg 0 0 6a astore makefont setfont}bdf +/fnt{findfont sfd}bdf +/bt{sa 3 1 roll 3 index and put}bdf +/sa(\000\000\000\000\000\000\000\000\000\000)def +/fs{0 1 bt 1 2 bt 2 4 bt 3 8 bt 4 16 bt 5 32 bt 6 64 bt 7 128 bt sa exch 8 exch put}bdf +/mx1 matrix def +/mx2 matrix def +/mx3 matrix def +/bu{currentpoint currentgray currentlinewidth currentlinecap currentlinejoin currentdash exch aload length +fg 5 sfl{1}{0}ifelse put pnsv pnsh +2t aload pop 3a aload pop mx2 aload pop mx1 aload pop mtx currentmatrix aload pop +mx3 aload pop ps pm restore/ps xdf mx3 astore pop}bdf +/bn{/pm save def mx3 setmatrix newpath 0 0 moveto ct dup 39 get 0 exch getinterval cvx exec +mtx astore setmatrix mx1 astore pop mx2 astore pop 3a astore pop +2t astore pop/pnsh xdf/pnsv xdf gw +/sfl fg 5 get 0 ne def array astore exch setdash setlinejoin setlinecap +setlinewidth setgray moveto}bdf +/fc{save vmstatus exch sub 50000 lt +{(%%[|0|]%%)=print flush}if pop restore}bdf +/tc{32768 div add 3 1 roll 32768 div add 2t astore pop}bdf +/3a [0 0 0] def +/2t 2 array def +/tp{3a astore pop}bdf +/tt{mx2 currentmatrix pop currentpoint 2 copy 2t aload pop qa 2 copy translate 3a aload pop exch dup 0 eq +{pop}{1 eq{-1 1}{1 -1}ifelse scale}ifelse rotate pop neg exch neg exch translate moveto}bdf +/te{mx2 setmatrix}bdf +/th{3 -1 roll div 3 1 roll exch div 2 copy mx1 scale pop scale/sfl true def}bdf +/tu{1 1 mx1 itransform scale/sfl false def}bdf +/ts{1 1 mx1 transform scale/sfl true def}bdf +/fz{/ps xdf}bdf +/dv{dup 0 ne{div}{pop}ifelse}bdf +/pop4{pop pop pop pop}bdf +/it{sfl{mx1 itransform}if}bdf +/gm{exch it moveto}bdf/rm{it rmoveto}bdf +/lm{currentpoint sfl{mx1 transform}if exch pop sub 0 exch it rmoveto}bdf +/fm{statusdict/manualfeed known}bdf +/se{statusdict exch/manualfeed exch put}bdf +/mf{dup/ma exch def 0 gt{fm se/t1 5 st ok ma 1 gt and{/t2 0 st/t3 0 st +statusdict/manualfeedtimeout 3600 put +}if}if}bdf +/jn{/statusdict where exch pop{statusdict exch /jobname exch put}if}bdf +/pen{pnm mul/pnsh xdf pnm mul/pnsv xdf pnsh setlinewidth}bdf +/min{2 copy gt{exch}if pop}bdf +/max{2 copy lt{exch}if pop}bdf +/dh{fg 6 1 put array astore dup {1 pxs div mul exch}forall astore exch pop exch pop exch setdash}bdf +/ih[currentdash]def +/rh{fg 6 0 put ih aload pop setdash}bdf +/dl{gsave nlw pys div setlinewidth 0 setgray}bdf +/dlin{exch currentpoint currentlinewidth 2 div dup +translate newpath moveto lineto currentpoint stroke grestore moveto}bdf +/lin{fg 6 get 0 ne{exch lineto currentpoint 0 doop moveto} +{exch currentpoint/pnlv xdf/pnlh xdf gsave newpath/@1 xdf/@2 xdf fp{pnlh @2 lt{pnlv @1 ge +{pnlh pnlv moveto @2 @1 lineto pnsh 0 rlineto +0 pnsv rlineto pnlh pnsh add pnlv pnsv add lineto pnsh neg 0 rlineto} +{pnlh pnlv moveto pnsh 0 rlineto @2 pnsh add @1 lineto 0 pnsv rlineto +pnsh neg 0 rlineto pnlh pnlv pnsv add lineto}ifelse}{pnlv @1 gt +{@2 @1 moveto pnsh 0 rlineto pnlh pnsh add pnlv lineto 0 pnsv rlineto +pnsh neg 0 rlineto @2 @1 pnsv add lineto}{pnlh pnlv moveto pnsh 0 rlineto +0 pnsv rlineto @2 pnsh add @1 pnsv add lineto pnsh neg 0 rlineto +0 pnsv neg rlineto}ifelse}ifelse +closepath fill}if @2 @1 grestore moveto}ifelse}bdf +/gw{/pnm fg 3 get fg 4 get div def}bdf +/lw{fg exch 4 exch put fg exch 3 exch put gw pnsv pnsh pen}bdf +/barc{/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf +/@6 xdf/@7 xdf/@8 xdf gsave +@5 @7 add 2 div @6 @8 add 2 div translate newpath 0 0 moveto +@5 @7 sub @6 @8 sub mtx currentmatrix pop scale @1{newpath}if +0 0 0.5 @4 @3 arc @4 @3 sub abs 360 ge{closepath}if +mtx setmatrix @2 doop grestore}bdf +/ar{dup 0 eq barc}bdf +/ov{0 exch 360 exch true barc}bdf +/rc{/@t xdf currentpoint 6 2 roll newpath 4 copy 4 2 roll exch moveto +6 -1 roll lineto lineto lineto closepath @t doop moveto}bdf +/mup{dup pnsh 2 div le exch pnsv 2 div le or}bdf +/rr{/@1 xdf 2. div/@2 xdf 2. div/@3 xdf +/@4 xdf/@5 xdf/@6 xdf/@7 xdf +@7 @5 eq @6 @4 eq @2 mup or or{@7 @6 @5 @4 @1 rc} +{@4 @6 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse +@5 @7 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse +@1 0 eq{/@2 @2 pnsh 2 div 2 copy gt{sub def}{0 pop4}ifelse}if +currentpoint newpath +@4 @6 add 2. div @7 moveto +@4 @7 @4 @5 @2 arcto pop4 +@4 @5 @6 @5 @2 arcto pop4 +@6 @5 @6 @7 @2 arcto pop4 +@6 @7 @4 @7 @2 arcto pop4 +closepath @1 doop moveto}ifelse}bdf +/pr{gsave newpath/pl{exch moveto/pl{exch lineto}def}def}bdf +/pl{exch lineto}bdf +/ep{dup 0 eq{{moveto}{exch lin}{}{(%%[|1|]%%)= flush}pathforall +pop grestore}{doop grestore}ifelse currentpoint newpath moveto}bdf +/gr{64. div setgray}bdf +/pat{s8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi s8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}setscreen gr}bdf +/sg{freq rot/spf load setscreen gr}bdf +/dc{transform round .5 sub exch round .5 sub exch itransform}bdf +/sn{userdict/smooth4 known}bdf +/x8{3 bitshift}bdf +/x4{2 bitshift}bdf +/d4{-2 bitshift}bdf +/d8{-3 bitshift}bdf +/rb{15 add -4 bitshift 1 bitshift}bdf +/db{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf/@6 @5 @3 4 add mul def +dc translate scale/xdbit 1 1 idtransform abs/ydbit exch def abs def{0 0 1 ydbit add 1 10 rc clip}if +@1 0 eq @1 4 eq or{1 setgray ydbit 0 1 ydbit add 1 2 rc}if +@1 3 eq @1 7 eq or{1}{0}ifelse setgray/@9 @1 0 eq @1 1 eq @1 3 eq or or dbinvertflag xor def/@13 @6 def +@2 fBitStretch or{/@10 @4 x4 def/@11 @3 x4 def/@12 @10 rb def/@13 @12 @11 mul def/@15 1 1 dtransform abs/calcY 1 index def round cvi/@14 exch def +abs/calcX 1 index def round cvi scaleby96 not{1 add}if def/@16 @15 rb def/@17 @16 @14 mul def}if +sn @13 60000 lt and @2 fBitStretch or and{mtx currentmatrix dup 1 get exch 2 get 0. eq exch 0. eq and @17 60000 lt and fBitStretch and{@16 3 bitshift @14 @9 [calcX 0 0 calcY 0 0]{@17 string @13 string +currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4 +@10 @11 @12 dup string 5 index @15 @14 @16 dup string stretch}imagemask}{@12 x8 @11 @9 [@10 0 0 @11 0 0]{@13 string +currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4}imagemask}ifelse}{@5 3 bitshift @3 4 add @9 [@4 0 0 @3 0 2]{currentfile @6 string readhexstring pop}imagemask}ifelse +@7 restore}bdf +/multibit{/mbdeep exch def/mbY exch def/mbX exch def +save mbX mbY mbdeep[mbX 0 0 mbY 0 0]{currentfile picstr readhexstring pop}image +restore}bdf +/wd 16 dict def +/mfont 14 dict def +/mdf{mfont wcheck not{/mfont 14 dict def}if mfont begin xdf end}bdf +/cf{{1 index/FID ne{def}{pop pop}ifelse}forall}bdf/rf{/@1 exch def/@2 exch def +FontDirectory @2 known{cleartomark pop}{findfont dup begin dup length @1 add dict begin +cf{/Encoding macvec def}{Encoding dup length array copy/Encoding exch def +counttomark 2 idiv{Encoding 3 1 roll put}repeat}ifelse +pop +exec currentdict end end @2 exch definefont pop}ifelse}bdf +/bmbc{exch begin wd begin +/cr xdf +save +CharTable cr 6 mul 6 getinterval{}forall +/bitheight xdf/bitwidth xdf +.96 div/width xdf +Gkernmax add/XOffset xdf Gdescent add/YOffset xdf/rowbytes xdf +rowbytes 255 eq{0 0 0 0 0 0 setcachedevice} +{Gnormsize dup scale +width 0 XOffset YOffset bitwidth XOffset add bitheight YOffset add +setcachedevice +rowbytes 0 ne{ +XOffset YOffset translate newpath 0 0 moveto +bitwidth bitheight scale +sn{ +/xSmt bitwidth x4 def +/ySmt bitheight x4 def +/rSmt xSmt rb def +rSmt x8 ySmt true +[xSmt 0 0 ySmt neg 0 ySmt] +{rSmt ySmt mul string CharData cr get +1 index bitwidth bitheight rowbytes rSmt tso smooth4} +}{rowbytes 3 bitshift bitheight 4 add true +[bitwidth 0 0 bitheight neg 0 bitheight 2 add] +{CharData cr get} +}ifelse +imagemask +}if +}ifelse +restore +end end +}bdf +/bb{.96 exch div/Gnormsize mdf 2 index +/Gkernmax mdf 1 index/Gdescent mdf +3 index div 4 1 roll +2 index div 1. 5 2 roll +exch div 4 1 roll +4 array astore/FontBBox mdf +}bdf +/cdf{mfont/CharData get 3 1 roll put}bdf +/bf{ +mfont begin +/FontType 3 def +/FontMatrix [1 0 0 1 0 0] def +/Encoding macvec def +/BuildChar/bmbc load def +end +mfont definefont pop +}bdf +/wi LW 1 eq{{gsave 0 0 0 0 0 0 0 0 moveto lineto lineto lineto closepath clip stringwidth grestore}bind}{/stringwidth load}ifelse def +/aps{0 get 124 eq}bdf +/xc{s75 cvs dup}bdf +/xp{put cvn}bdf +/scs{xc 3 67 put dup 0 95 xp}bdf +/sos{xc 3 79 xp}bdf +/sbs{xc 1 66 xp}bdf +/sis{xc 2 73 xp}bdf +/sob{xc 2 79 xp}bdf +/sss{xc 4 83 xp}bdf +/dd{exch 1 index add 3 1 roll add exch}bdf +/smc{moveto dup show}bdf +/kwn{FontDirectory 1 index known{findfont exch pop}}bdf +/gl{1 currentgray sub setgray}bdf +/mm{/mfont 10 dict def mfont begin +/FontMatrix [1 0 0 1 0 0] def +/FontType 3 def +/Encoding macvec def +/df 4 index findfont def +/FontBBox [0 0 1 1] def +/xda xdf/mbc xdf +/BuildChar{wd begin/cr xdf/fd xdf/cs s1 dup 0 cr put def fd/mbc get exec end}def +exec end mfont definefont}bdf +/ac{dup scs kwn{exch findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall +fmv{/Encoding macvec def}if/StrokeWidth nlw 1000 mul pys div ps div dup 12 lt{pop 12}if def +/PaintType 2 def currentdict end definefont}ifelse}bdf +/mb{dup sbs kwn{exch{pop}{bbc}{}mm}ifelse sfd}bdf +/mo{dup sos kwn{exch{pop}{boc}{}mm}ifelse sfd}bdf +/ms{dup sss kwn{exch{pop}{bsc}{}mm}ifelse sfd}bdf +/ou{dup sos kwn{exch dup ac pop{scs findfont /df2 xdf}{aoc}{}mm}ifelse sfd}bdf +/su{dup sss kwn{exch dup ac pop{scs findfont /df2 xdf}{asc}{}mm}ifelse sfd}bdf +/ao{/fmv true def ou}bdf/as{/fmv true def su}bdf +/vo{/fmv false def ou}bdf/vs{/fmv false def su}bdf +/bbc{/da .03 def fd/df get setfont +gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth +cs 0 0 smc da 0 smc da da smc 0 da moveto show}bdf +/boc{/da 1 ps div def fd/df get setfont +gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth +cs 0 0 smc da 0 smc da da smc 0 da smc gl da 2. div dup moveto show}bdf +/bsc{/da 1 ps div def +/ds .05 def/da2 da 2. div def fd/df get setfont +gsave cs wi 1 index 0 ne{exch ds add da2 add exch}if grestore setcharwidth +cs ds da2 add .01 add 0 smc 0 ds da2 sub translate 0 0 smc +da 0 smc da da smc 0 da smc gl da 2. div dup moveto show}bdf +/aoc{fd/df get setfont +gsave cs wi grestore setcharwidth +gl cs 0 0 smc fd/df2 get setfont gl 0 0 moveto show}bdf +/asc{/da .05 def fd/df get setfont +gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth +cs da .01 add 0 smc 0 da translate gl 0 0 smc gl fd/df2 get setfont 0 0 moveto show}bdf +/st{1000 mul usertime add dup 2147483647 gt{2147483647 sub}if def}bdf +/the{usertime sub dup 0 lt exch -2147483648 gt and}bdf +/6a 6 array def +/2a 2 array def +/3q 3 array def +/qs{3 -1 roll sub exch 3 -1 roll sub exch}bdf +/qa{3 -1 roll add exch 3 -1 roll add exch}bdf +/qm{3 -1 roll 1 index mul 3 1 roll mul}bdf +/qn{6a exch get mul}bdf +/qA .166667 def/qB .833333 def/qC .5 def +/qx{6a astore pop +qA 0 qn qB 2 qn add qA 1 qn qB 3 qn add +qB 2 qn qA 4 qn add qB 3 qn qA 5 qn add +qC 2 qn qC 4 qn add qC 3 qn qC 5 qn add}bdf +/qp{6 copy 12 -2 roll pop pop}bdf +/qc{exch qp qx curveto}bdf +/qi{{exch 4 copy 2a astore aload pop qa .5 qm newpath moveto}{exch 2 copy 6 -2 roll 2 qm qs 4 2 roll}ifelse}bdf +/qq{{qc 2a aload pop qx curveto}{exch 4 copy qs qa qx curveto}ifelse}bdf +/pt{currentpoint newpath moveto}bdf +/qf{/fillflag true def}bdf +/ec{1 and 0 ne{0 doop}if grestore currentpoint newpath moveto/fillflag false def}bdf +/eu{currentpoint fp{0 ep}{grestore newpath}ifelse moveto/fillflag false def}bdf +/bp{currentpoint newpath 2 copy moveto}bdf +/ef{gsave fillflag{gsave eofill grestore}if}bdf +/sm{0 exch{@1 eq{1 add}if}forall}bdf +/lshow{4 1 roll exch/@1 exch def{1 index wi pop sub 1 index sm dv 0 @1 4 -1 roll widthshow}{1 index wi pop sub +1 index dup sm 10 mul exch length 1 sub add dv dup 10. mul 0 @1 4 -1 roll 0 6 -1 roll awidthshow}ifelse}bdf +/setTxMode{sa 9 2 index put 3 eq{1}{0}ifelse setgray}bdf +/SwToSym{{}mark false/Symbol/|______Symbol 0 rf 0 sa 6 get 0 ne{pop 1}{sa 7 get 0 eq{pop 2}if}ifelse +sa 1 get 0 ne/|______Symbol +sa 4 get 0 ne{vs}{sa 3 get 0 ne{vo}{fnt}ifelse}ifelse}bdf +/mc{0 3 1 roll transform neg exch pop}bdf +/ul{dup 0 ne sa 2 get 0 ne and{gsave 0 0 +/UnderlinePosition kif{mc}{ps -10 div}ifelse/UnderlineThickness kif{mc}{ps 15 div}ifelse +abs setlinewidth neg rmoveto +sa 4 get 0 ne{gsave currentlinewidth 2. div dup rmoveto currentpoint newpath moveto +2 copy rlineto stroke grestore}if +sa 3 get sa 4 get or 0 ne{gsave gl 2 copy rlineto stroke grestore rlineto strokepath nlw pys div setlinewidth}{rlineto}ifelse +stroke grestore}{pop}ifelse}bdf +/sgt{2 copy known{get true}{pop pop false}ifelse}bdf +/kif{currentfont dup/FontMatrix get exch/FontInfo sgt{true}{currentfont/df sgt +{dup/FontInfo sgt{3 1 roll/FontMatrix get mtx concatmatrix exch true}{pop pop pop false} +ifelse}{pop pop false}ifelse}ifelse{3 -1 roll sgt{exch true}{pop false}ifelse}{false}ifelse}bdf +/blank/Times-Roman findfont/CharStrings get/space get def +/macvec 256 array def +/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI +/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US +macvec 0 32 getinterval astore pop +macvec 32/Times-Roman findfont/Encoding get +32 96 getinterval putinterval macvec dup 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 +{}mark true/Courier/|______Courier 0 rf +{/Metrics 21 dict begin/zero 600 def/one 600 def/two 600 def/three 600 def/four 600 def/five 600 def/six 600 def/seven 600 def/eight 600 def +/nine 600 def/comma 600 def/period 600 def/dollar 600 def/numbersign 600 def/percent 600 def/plus 600 def/hyphen 600 def/E 600 def/parenleft 600 def/parenright 600 def/space 600 def +currentdict end def currentdict/UniqueID known{/UniqueID 16#800000 def}if/FontBBox FontBBox 4 array astore def}mark true/Helvetica/|______Seattle 1 rf +/oldsettransfer/settransfer load def +/concatprocs{/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}def +/settransfer{currenttransfer concatprocs oldsettransfer}def +/PaintBlack{{1 exch sub}settransfer gsave newpath clippath 1 setgray fill grestore}def +/od{(Rvd\001\001\000\000\177) fg copy pop txpose +1 0 mtx defaultmatrix dtransform exch atan/pa exch def +newpath clippath mark +{transform{itransform moveto}}{transform{itransform lineto}} +{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform +{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}} +{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put +10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}bdf +/cd{}bdf +/op{/sfl false def/pm save def}bdf +%%[TJD]%/cp{not{userdict/#copies 0 put}if ma 0 gt{{t1 the{exit}if}loop}if{copypage}{showpage}ifelse pm restore}bdf +/cp{ pop pop pm restore } bdf +/px{0 3 1 roll tp tt}bdf +/psb{/us save def}bdf +/pse{us restore}bdf +/ct 40 string def +/nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if} +forall clip newpath moveto}def +/kp{ct 0 2 index length 2 index 39 2 index put getinterval copy cvx exec mx3 currentmatrix pop}bdf +/av 68 def +end +LW 1 eq userdict/a4small known not and{/a4small +[[300 72 div 0 0 -300 72 div -120 3381] +280 3255 +{statusdict/jobstate (printing) put 0 setblink +margins +exch 196 add exch 304 add 8 div round cvi frametoroket +statusdict/jobstate (busy) put +1 setblink} +/framedevice load +60 45{dup mul exch dup mul add 1.0 exch sub}/setscreen load +{}/settransfer load/initgraphics load/erasepage load]cvx +statusdict begin bind end readonly def}if +md begin/bigs[lnop userdict/letter known{/letter load}{lnop}ifelse userdict/legal known{/legal load}{lnop}ifelse userdict/a4 known{/a4 load}{lnop}ifelse userdict/b5 known{/b5 load}{lnop}ifelse +lnop lnop lnop /tab load]def +/smalls[lnop userdict/lettersmall known{/lettersmall load}{userdict/note known{/note load}{lnop}ifelse}ifelse +userdict/legal known{/legal load}{lnop}ifelse userdict/a4small known{/a4small load}{lnop}ifelse +userdict/b5 known{/b5 load}{userdict/note known{/note load}{lnop}ifelse}ifelse lnop lnop lnop /tab load]def end +systemdict/currentpacking known{setpacking}if +%%[TJD]%currentfile ok userdict/stretch known not and{eexec}{flushfile}ifelse +%%[TJD]% +%%[TJD]%currentfile ok userdict/smooth4 known not and{eexec}{flushfile}ifelse +%%[TJD]% +%%EndProcSet + diff --git a/graphics/psfig/unsupported/macdemo/lprep68.procs b/graphics/psfig/unsupported/macdemo/lprep68.procs new file mode 100644 index 0000000000..5b3631c6a5 --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/lprep68.procs @@ -0,0 +1,439 @@ +%%BeginProcSet: "(AppleDict md)" 68 0 +%%[TJD]%statusdict begin waittimeout 300 lt{0 60 300 setdefaulttimeouts}if end +%%[TJD]%currentfile statusdict begin serverdict begin product (LaserWriter II NT) eq revision 1 eq and {/setrealdevice {//setrealdevice exec 31 sendpcmd 4 eq tonerlight} bind def +%%[TJD]%/execjob {31 sendpcmd 4 eq tonerlight //execjob exec} bind def end end eexec}{end end 722{currentfile read pop pop}repeat}ifelse +%%[TJD]% HEX CODE DELETED +%%[TJD]%/sc {60 45 {abs exch abs 2 copy add 1 gt{1.0 sub dup mul exch 1.0 sub dup mul add 1.0 sub}{dup mul exch dup mul add 1.0 exch sub} +%%[TJD]%ifelse}setscreen} bind def statusdict begin product(LaserWriter II)anchorsearch end +%%[TJD]%{pop pop/letter [/letter load /exec load /sc load /exec load]cvx def/legal [/legal load /exec load /sc load /exec load]cvx def/a4 [/a4 load /exec load /sc load /exec load]cvx def/b5 [/b5 load /exec load /sc load /exec load]cvx def +%%[TJD]%/lettersmall [/lettersmall load /exec load /sc load /exec load]cvx def/a4small [/a4small load /exec load /sc load /exec load]cvx def/note [/note load /exec load /sc load /exec load]cvx def}{pop}ifelse +systemdict/currentpacking known{currentpacking true setpacking}if +%%[TJD]%/LW{save statusdict/product get(LaserWriter)anchorsearch +%%[TJD]%exch pop{length 0 eq{1}{2}ifelse}{0}ifelse exch restore}bind def +/LW{0}def +/LW+{LW 2 eq}bind def +/ok{systemdict/statusdict known dup{LW 0 gt and}if}bind def +%%[TJD]%ok{statusdict begin 9 sccinteractive 3 ne exch 0 ne or{9 0 3 setsccinteractive}if end}if +/md 250 dict def md begin +/av 0 def +/T true def/F false def/mtx matrix def/s75 75 string def/s8 8 string def/s1 ( ) def/pxs 1 def/pys 1 def +1 0 mtx defaultmatrix dtransform exch atan/pa exch def/nlw .24 def/ppr [-32 -29.52 762 582.48] def +/pgs 1 def/por true def/xb 500 array def/so true def/tso true def/fillflag false def/pnm 1 def/fmv true def +/sfl false def/ma 0 def/invertflag false def/dbinvertflag false def/xflip false def/yflip false def/noflips true def/scaleby96 false def/fNote true def/fBitStretch true def +/fg (Rvd\001\001\000\000\177) def +/bdf{bind def}bind def +/xdf{exch def}bdf +/xl{neg exch neg translate}bdf +/fp{pnsh 0 ne pnsv 0 ne and}bdf +/nop{}bdf/lnop[/nop load]cvx bdf +/vrb[ +{fp{fg 6 get 0 ne{gsave stroke grestore}{gsave 1 setlinewidth pnsh pnsv scale stroke grestore}ifelse}if newpath}bind +/eofill load +dup +/newpath load +2 index +dup +{clip newpath}bind +{}bind +dup +2 copy +]def +currentscreen/spf xdf/rot xdf/freq xdf +/doop{vrb exch get exec}bdf +/psu{/tso xdf /fNote xdf/fBitStretch xdf/scaleby96 xdf/yflip xdf/xflip xdf +/invertflag xdf/dbinvertflag invertflag statusdict begin version cvr 47.0 ge product (LaserWriter) eq not and end invertflag and {not}if def +xflip yflip or{/noflips false def}if +/pgs xdf 2 index .72 mul exch div/pys xdf div .72 mul/pxs xdf ppr astore pop/por xdf sn and/so xdf}bdf +/tab{statusdict /11x17 known{statusdict begin /11x17 load end}{statusdict /setpage known{statusdict begin 792 1224 1 setpage end}{statusdict /setpageparams known{statusdict begin 792 1224 0 1 setpageparams end}if}ifelse}ifelse}bdf +/txpose{ +%[TJD] fNote{smalls}{bigs}ifelse pgs get exec + pxs pys scale + ppr aload pop por{ + noflips{ + pop exch neg exch translate pop 1 -1 scale + }if + xflip yflip and{ + pop exch neg exch translate 180 rotate 1 -1 scale + ppr 3 get ppr 1 get neg sub neg ppr 2 get + ppr 0 get neg sub neg translate + }if + xflip yflip not and{ + pop exch neg exch translate pop 180 rotate + ppr 3 get ppr 1 get neg sub neg 0 translate + }if + yflip xflip not and{ + ppr 1 get neg ppr 0 get neg translate + }if + }{ + noflips{ + translate pop pop 270 rotate 1 -1 scale + }if + xflip yflip and{ + translate pop pop 90 rotate 1 -1 scale + ppr 3 get ppr 1 get neg sub neg ppr 2 get + ppr 0 get neg sub neg translate + }if + xflip yflip not and{ + translate pop pop 90 rotate ppr 3 get ppr 1 get + neg sub neg 0 translate + }if + yflip xflip not and{ + translate pop pop 270 rotate ppr 2 get ppr 0 get + neg sub neg 0 exch translate + }if + }ifelse + statusdict begin waittimeout 300 lt{ + /waittimeout 300 def + }if end + scaleby96{ + ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div + 2 copy translate .96 dup scale neg exch neg exch translate + }if +}bdf +/fr{4 copy ppr aload pop 3 -1 roll add 3 1 roll exch add 6 2 roll 3 -1 roll +sub 3 1 roll exch sub 3 -1 roll exch div 3 1 roll div exch scale pop pop xl}bdf +/obl{{0.212557 mul}{pop 0}ifelse}bdf +/sfd{ps fg 5 -1 roll get mul 100 div 0 ps 5 -1 roll obl ps neg 0 0 6a astore makefont setfont}bdf +/fnt{findfont sfd}bdf +/bt{sa 3 1 roll 3 index and put}bdf +/sa(\000\000\000\000\000\000\000\000\000\000)def +/fs{0 1 bt 1 2 bt 2 4 bt 3 8 bt 4 16 bt 5 32 bt 6 64 bt 7 128 bt sa exch 8 exch put}bdf +/mx1 matrix def +/mx2 matrix def +/mx3 matrix def +/bu{currentpoint currentgray currentlinewidth currentlinecap currentlinejoin currentdash exch aload length +fg 5 sfl{1}{0}ifelse put pnsv pnsh +2t aload pop 3a aload pop mx2 aload pop mx1 aload pop mtx currentmatrix aload pop +mx3 aload pop ps pm restore/ps xdf mx3 astore pop}bdf +/bn{/pm save def mx3 setmatrix newpath 0 0 moveto ct dup 39 get 0 exch getinterval cvx exec +mtx astore setmatrix mx1 astore pop mx2 astore pop 3a astore pop +2t astore pop/pnsh xdf/pnsv xdf gw +/sfl fg 5 get 0 ne def array astore exch setdash setlinejoin setlinecap +setlinewidth setgray moveto}bdf +/fc{save vmstatus exch sub 50000 lt +{(%%[|0|]%%)=print flush}if pop restore}bdf +/tc{32768 div add 3 1 roll 32768 div add 2t astore pop}bdf +/3a [0 0 0] def +/2t 2 array def +/tp{3a astore pop}bdf +/tt{mx2 currentmatrix pop currentpoint 2 copy 2t aload pop qa 2 copy translate 3a aload pop exch dup 0 eq +{pop}{1 eq{-1 1}{1 -1}ifelse scale}ifelse rotate pop neg exch neg exch translate moveto}bdf +/te{mx2 setmatrix}bdf +/th{3 -1 roll div 3 1 roll exch div 2 copy mx1 scale pop scale/sfl true def}bdf +/tu{1 1 mx1 itransform scale/sfl false def}bdf +/ts{1 1 mx1 transform scale/sfl true def}bdf +/fz{/ps xdf}bdf +/dv{dup 0 ne{div}{pop}ifelse}bdf +/pop4{pop pop pop pop}bdf +/it{sfl{mx1 itransform}if}bdf +/gm{exch it moveto}bdf/rm{it rmoveto}bdf +/lm{currentpoint sfl{mx1 transform}if exch pop sub 0 exch it rmoveto}bdf +/fm{statusdict/manualfeed known}bdf +/se{statusdict exch/manualfeed exch put}bdf +/mf{dup/ma exch def 0 gt{fm se/t1 5 st ok ma 1 gt and{/t2 0 st/t3 0 st +statusdict/manualfeedtimeout 3600 put +}if}if}bdf +/jn{/statusdict where exch pop{statusdict exch /jobname exch put}if}bdf +/pen{pnm mul/pnsh xdf pnm mul/pnsv xdf pnsh setlinewidth}bdf +/min{2 copy gt{exch}if pop}bdf +/max{2 copy lt{exch}if pop}bdf +/dh{fg 6 1 put array astore dup {1 pxs div mul exch}forall astore exch pop exch pop exch setdash}bdf +/ih[currentdash]def +/rh{fg 6 0 put ih aload pop setdash}bdf +/dl{gsave nlw pys div setlinewidth 0 setgray}bdf +/dlin{exch currentpoint currentlinewidth 2 div dup +translate newpath moveto lineto currentpoint stroke grestore moveto}bdf +/lin{fg 6 get 0 ne{exch lineto currentpoint 0 doop moveto} +{exch currentpoint/pnlv xdf/pnlh xdf gsave newpath/@1 xdf/@2 xdf fp{pnlh @2 lt{pnlv @1 ge +{pnlh pnlv moveto @2 @1 lineto pnsh 0 rlineto +0 pnsv rlineto pnlh pnsh add pnlv pnsv add lineto pnsh neg 0 rlineto} +{pnlh pnlv moveto pnsh 0 rlineto @2 pnsh add @1 lineto 0 pnsv rlineto +pnsh neg 0 rlineto pnlh pnlv pnsv add lineto}ifelse}{pnlv @1 gt +{@2 @1 moveto pnsh 0 rlineto pnlh pnsh add pnlv lineto 0 pnsv rlineto +pnsh neg 0 rlineto @2 @1 pnsv add lineto}{pnlh pnlv moveto pnsh 0 rlineto +0 pnsv rlineto @2 pnsh add @1 pnsv add lineto pnsh neg 0 rlineto +0 pnsv neg rlineto}ifelse}ifelse +closepath fill}if @2 @1 grestore moveto}ifelse}bdf +/gw{/pnm fg 3 get fg 4 get div def}bdf +/lw{fg exch 4 exch put fg exch 3 exch put gw pnsv pnsh pen}bdf +/barc{/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf +/@6 xdf/@7 xdf/@8 xdf gsave +@5 @7 add 2 div @6 @8 add 2 div translate newpath 0 0 moveto +@5 @7 sub @6 @8 sub mtx currentmatrix pop scale @1{newpath}if +0 0 0.5 @4 @3 arc @4 @3 sub abs 360 ge{closepath}if +mtx setmatrix @2 doop grestore}bdf +/ar{dup 0 eq barc}bdf +/ov{0 exch 360 exch true barc}bdf +/rc{/@t xdf currentpoint 6 2 roll newpath 4 copy 4 2 roll exch moveto +6 -1 roll lineto lineto lineto closepath @t doop moveto}bdf +/mup{dup pnsh 2 div le exch pnsv 2 div le or}bdf +/rr{/@1 xdf 2. div/@2 xdf 2. div/@3 xdf +/@4 xdf/@5 xdf/@6 xdf/@7 xdf +@7 @5 eq @6 @4 eq @2 mup or or{@7 @6 @5 @4 @1 rc} +{@4 @6 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse +@5 @7 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse +@1 0 eq{/@2 @2 pnsh 2 div 2 copy gt{sub def}{0 pop4}ifelse}if +currentpoint newpath +@4 @6 add 2. div @7 moveto +@4 @7 @4 @5 @2 arcto pop4 +@4 @5 @6 @5 @2 arcto pop4 +@6 @5 @6 @7 @2 arcto pop4 +@6 @7 @4 @7 @2 arcto pop4 +closepath @1 doop moveto}ifelse}bdf +/pr{gsave newpath/pl{exch moveto/pl{exch lineto}def}def}bdf +/pl{exch lineto}bdf +/ep{dup 0 eq{{moveto}{exch lin}{}{(%%[|1|]%%)= flush}pathforall +pop grestore}{doop grestore}ifelse currentpoint newpath moveto}bdf +/gr{64. div setgray}bdf +/pat{s8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi s8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}setscreen gr}bdf +/sg{freq rot/spf load setscreen gr}bdf +/dc{transform round .5 sub exch round .5 sub exch itransform}bdf +/sn{userdict/smooth4 known}bdf +/x8{3 bitshift}bdf +/x4{2 bitshift}bdf +/d4{-2 bitshift}bdf +/d8{-3 bitshift}bdf +/rb{15 add -4 bitshift 1 bitshift}bdf +/db{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf/@6 @5 @3 4 add mul def +dc translate scale/xdbit 1 1 idtransform abs/ydbit exch def abs def{0 0 1 ydbit add 1 10 rc clip}if +@1 0 eq @1 4 eq or{1 setgray ydbit 0 1 ydbit add 1 2 rc}if +@1 3 eq @1 7 eq or{1}{0}ifelse setgray/@9 @1 0 eq @1 1 eq @1 3 eq or or dbinvertflag xor def/@13 @6 def +@2 fBitStretch or{/@10 @4 x4 def/@11 @3 x4 def/@12 @10 rb def/@13 @12 @11 mul def/@15 1 1 dtransform abs/calcY 1 index def round cvi/@14 exch def +abs/calcX 1 index def round cvi scaleby96 not{1 add}if def/@16 @15 rb def/@17 @16 @14 mul def}if +sn @13 60000 lt and @2 fBitStretch or and{mtx currentmatrix dup 1 get exch 2 get 0. eq exch 0. eq and @17 60000 lt and fBitStretch and{@16 3 bitshift @14 @9 [calcX 0 0 calcY 0 0]{@17 string @13 string +currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4 +@10 @11 @12 dup string 5 index @15 @14 @16 dup string stretch}imagemask}{@12 x8 @11 @9 [@10 0 0 @11 0 0]{@13 string +currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4}imagemask}ifelse}{@5 3 bitshift @3 4 add @9 [@4 0 0 @3 0 2]{currentfile @6 string readhexstring pop}imagemask}ifelse +@7 restore}bdf +/multibit{/mbdeep exch def/mbY exch def/mbX exch def +save mbX mbY mbdeep[mbX 0 0 mbY 0 0]{currentfile picstr readhexstring pop}image +restore}bdf +/wd 16 dict def +/mfont 14 dict def +/mdf{mfont wcheck not{/mfont 14 dict def}if mfont begin xdf end}bdf +/cf{{1 index/FID ne{def}{pop pop}ifelse}forall}bdf/rf{/@1 exch def/@2 exch def +FontDirectory @2 known{cleartomark pop}{findfont dup begin dup length @1 add dict begin +cf{/Encoding macvec def}{Encoding dup length array copy/Encoding exch def +counttomark 2 idiv{Encoding 3 1 roll put}repeat}ifelse +pop +exec currentdict end end @2 exch definefont pop}ifelse}bdf +/bmbc{exch begin wd begin +/cr xdf +save +CharTable cr 6 mul 6 getinterval{}forall +/bitheight xdf/bitwidth xdf +.96 div/width xdf +Gkernmax add/XOffset xdf Gdescent add/YOffset xdf/rowbytes xdf +rowbytes 255 eq{0 0 0 0 0 0 setcachedevice} +{Gnormsize dup scale +width 0 XOffset YOffset bitwidth XOffset add bitheight YOffset add +setcachedevice +rowbytes 0 ne{ +XOffset YOffset translate newpath 0 0 moveto +bitwidth bitheight scale +sn{ +/xSmt bitwidth x4 def +/ySmt bitheight x4 def +/rSmt xSmt rb def +rSmt x8 ySmt true +[xSmt 0 0 ySmt neg 0 ySmt] +{rSmt ySmt mul string CharData cr get +1 index bitwidth bitheight rowbytes rSmt tso smooth4} +}{rowbytes 3 bitshift bitheight 4 add true +[bitwidth 0 0 bitheight neg 0 bitheight 2 add] +{CharData cr get} +}ifelse +imagemask +}if +}ifelse +restore +end end +}bdf +/bb{.96 exch div/Gnormsize mdf 2 index +/Gkernmax mdf 1 index/Gdescent mdf +3 index div 4 1 roll +2 index div 1. 5 2 roll +exch div 4 1 roll +4 array astore/FontBBox mdf +}bdf +/cdf{mfont/CharData get 3 1 roll put}bdf +/bf{ +mfont begin +/FontType 3 def +/FontMatrix [1 0 0 1 0 0] def +/Encoding macvec def +/BuildChar/bmbc load def +end +mfont definefont pop +}bdf +/wi LW 1 eq{{gsave 0 0 0 0 0 0 0 0 moveto lineto lineto lineto closepath clip stringwidth grestore}bind}{/stringwidth load}ifelse def +/aps{0 get 124 eq}bdf +/xc{s75 cvs dup}bdf +/xp{put cvn}bdf +/scs{xc 3 67 put dup 0 95 xp}bdf +/sos{xc 3 79 xp}bdf +/sbs{xc 1 66 xp}bdf +/sis{xc 2 73 xp}bdf +/sob{xc 2 79 xp}bdf +/sss{xc 4 83 xp}bdf +/dd{exch 1 index add 3 1 roll add exch}bdf +/smc{moveto dup show}bdf +/kwn{FontDirectory 1 index known{findfont exch pop}}bdf +/gl{1 currentgray sub setgray}bdf +/mm{/mfont 10 dict def mfont begin +/FontMatrix [1 0 0 1 0 0] def +/FontType 3 def +/Encoding macvec def +/df 4 index findfont def +/FontBBox [0 0 1 1] def +/xda xdf/mbc xdf +/BuildChar{wd begin/cr xdf/fd xdf/cs s1 dup 0 cr put def fd/mbc get exec end}def +exec end mfont definefont}bdf +/ac{dup scs kwn{exch findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall +fmv{/Encoding macvec def}if/StrokeWidth nlw 1000 mul pys div ps div dup 12 lt{pop 12}if def +/PaintType 2 def currentdict end definefont}ifelse}bdf +/mb{dup sbs kwn{exch{pop}{bbc}{}mm}ifelse sfd}bdf +/mo{dup sos kwn{exch{pop}{boc}{}mm}ifelse sfd}bdf +/ms{dup sss kwn{exch{pop}{bsc}{}mm}ifelse sfd}bdf +/ou{dup sos kwn{exch dup ac pop{scs findfont /df2 xdf}{aoc}{}mm}ifelse sfd}bdf +/su{dup sss kwn{exch dup ac pop{scs findfont /df2 xdf}{asc}{}mm}ifelse sfd}bdf +/ao{/fmv true def ou}bdf/as{/fmv true def su}bdf +/vo{/fmv false def ou}bdf/vs{/fmv false def su}bdf +/bbc{/da .03 def fd/df get setfont +gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth +cs 0 0 smc da 0 smc da da smc 0 da moveto show}bdf +/boc{/da 1 ps div def fd/df get setfont +gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth +cs 0 0 smc da 0 smc da da smc 0 da smc gl da 2. div dup moveto show}bdf +/bsc{/da 1 ps div def +/ds .05 def/da2 da 2. div def fd/df get setfont +gsave cs wi 1 index 0 ne{exch ds add da2 add exch}if grestore setcharwidth +cs ds da2 add .01 add 0 smc 0 ds da2 sub translate 0 0 smc +da 0 smc da da smc 0 da smc gl da 2. div dup moveto show}bdf +/aoc{fd/df get setfont +gsave cs wi grestore setcharwidth +gl cs 0 0 smc fd/df2 get setfont gl 0 0 moveto show}bdf +/asc{/da .05 def fd/df get setfont +gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth +cs da .01 add 0 smc 0 da translate gl 0 0 smc gl fd/df2 get setfont 0 0 moveto show}bdf +/st{1000 mul usertime add dup 2147483647 gt{2147483647 sub}if def}bdf +/the{usertime sub dup 0 lt exch -2147483648 gt and}bdf +/6a 6 array def +/2a 2 array def +/3q 3 array def +/qs{3 -1 roll sub exch 3 -1 roll sub exch}bdf +/qa{3 -1 roll add exch 3 -1 roll add exch}bdf +/qm{3 -1 roll 1 index mul 3 1 roll mul}bdf +/qn{6a exch get mul}bdf +/qA .166667 def/qB .833333 def/qC .5 def +/qx{6a astore pop +qA 0 qn qB 2 qn add qA 1 qn qB 3 qn add +qB 2 qn qA 4 qn add qB 3 qn qA 5 qn add +qC 2 qn qC 4 qn add qC 3 qn qC 5 qn add}bdf +/qp{6 copy 12 -2 roll pop pop}bdf +/qc{exch qp qx curveto}bdf +/qi{{exch 4 copy 2a astore aload pop qa .5 qm newpath moveto}{exch 2 copy 6 -2 roll 2 qm qs 4 2 roll}ifelse}bdf +/qq{{qc 2a aload pop qx curveto}{exch 4 copy qs qa qx curveto}ifelse}bdf +/pt{currentpoint newpath moveto}bdf +/qf{/fillflag true def}bdf +/ec{1 and 0 ne{0 doop}if grestore currentpoint newpath moveto/fillflag false def}bdf +/eu{currentpoint fp{0 ep}{grestore newpath}ifelse moveto/fillflag false def}bdf +/bp{currentpoint newpath 2 copy moveto}bdf +/ef{gsave fillflag{gsave eofill grestore}if}bdf +/sm{0 exch{@1 eq{1 add}if}forall}bdf +/lshow{4 1 roll exch/@1 exch def{1 index wi pop sub 1 index sm dv 0 @1 4 -1 roll widthshow}{1 index wi pop sub +1 index dup sm 10 mul exch length 1 sub add dv dup 10. mul 0 @1 4 -1 roll 0 6 -1 roll awidthshow}ifelse}bdf +/setTxMode{sa 9 2 index put 3 eq{1}{0}ifelse setgray}bdf +/SwToSym{{}mark false/Symbol/|______Symbol 0 rf 0 sa 6 get 0 ne{pop 1}{sa 7 get 0 eq{pop 2}if}ifelse +sa 1 get 0 ne/|______Symbol +sa 4 get 0 ne{vs}{sa 3 get 0 ne{vo}{fnt}ifelse}ifelse}bdf +/mc{0 3 1 roll transform neg exch pop}bdf +/ul{dup 0 ne sa 2 get 0 ne and{gsave 0 0 +/UnderlinePosition kif{mc}{ps -10 div}ifelse/UnderlineThickness kif{mc}{ps 15 div}ifelse +abs setlinewidth neg rmoveto +sa 4 get 0 ne{gsave currentlinewidth 2. div dup rmoveto currentpoint newpath moveto +2 copy rlineto stroke grestore}if +sa 3 get sa 4 get or 0 ne{gsave gl 2 copy rlineto stroke grestore rlineto strokepath nlw pys div setlinewidth}{rlineto}ifelse +stroke grestore}{pop}ifelse}bdf +/sgt{2 copy known{get true}{pop pop false}ifelse}bdf +/kif{currentfont dup/FontMatrix get exch/FontInfo sgt{true}{currentfont/df sgt +{dup/FontInfo sgt{3 1 roll/FontMatrix get mtx concatmatrix exch true}{pop pop pop false} +ifelse}{pop pop false}ifelse}ifelse{3 -1 roll sgt{exch true}{pop false}ifelse}{false}ifelse}bdf +/blank/Times-Roman findfont/CharStrings get/space get def +/macvec 256 array def +/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI +/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US +macvec 0 32 getinterval astore pop +macvec 32/Times-Roman findfont/Encoding get +32 96 getinterval putinterval macvec dup 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 +{}mark true/Courier/|______Courier 0 rf +{/Metrics 21 dict begin/zero 600 def/one 600 def/two 600 def/three 600 def/four 600 def/five 600 def/six 600 def/seven 600 def/eight 600 def +/nine 600 def/comma 600 def/period 600 def/dollar 600 def/numbersign 600 def/percent 600 def/plus 600 def/hyphen 600 def/E 600 def/parenleft 600 def/parenright 600 def/space 600 def +currentdict end def currentdict/UniqueID known{/UniqueID 16#800000 def}if/FontBBox FontBBox 4 array astore def}mark true/Helvetica/|______Seattle 1 rf +/oldsettransfer/settransfer load def +/concatprocs{/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}def +/settransfer{currenttransfer concatprocs oldsettransfer}def +/PaintBlack{{1 exch sub}settransfer gsave newpath clippath 1 setgray fill grestore}def +/od{(Rvd\001\001\000\000\177) fg copy pop txpose +1 0 mtx defaultmatrix dtransform exch atan/pa exch def +newpath clippath mark +{transform{itransform moveto}}{transform{itransform lineto}} +{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform +{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}} +{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put +10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}bdf +/cd{}bdf +/op{/sfl false def/pm save def}bdf +%%[TJD]%/cp{not{userdict/#copies 0 put}if ma 0 gt{{t1 the{exit}if}loop}if{copypage}{showpage}ifelse pm restore}bdf +/cp{ pop pop pm restore } bdf +/px{0 3 1 roll tp tt}bdf +/psb{/us save def}bdf +/pse{us restore}bdf +/ct 40 string def +/nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if} +forall clip newpath moveto}def +/kp{ct 0 2 index length 2 index 39 2 index put getinterval copy cvx exec mx3 currentmatrix pop}bdf +/av 68 def +end +LW 1 eq userdict/a4small known not and{/a4small +[[300 72 div 0 0 -300 72 div -120 3381] +280 3255 +{statusdict/jobstate (printing) put 0 setblink +margins +exch 196 add exch 304 add 8 div round cvi frametoroket +statusdict/jobstate (busy) put +1 setblink} +/framedevice load +60 45{dup mul exch dup mul add 1.0 exch sub}/setscreen load +{}/settransfer load/initgraphics load/erasepage load]cvx +statusdict begin bind end readonly def}if +md begin/bigs[lnop userdict/letter known{/letter load}{lnop}ifelse userdict/legal known{/legal load}{lnop}ifelse userdict/a4 known{/a4 load}{lnop}ifelse userdict/b5 known{/b5 load}{lnop}ifelse +lnop lnop lnop /tab load]def +/smalls[lnop userdict/lettersmall known{/lettersmall load}{userdict/note known{/note load}{lnop}ifelse}ifelse +userdict/legal known{/legal load}{lnop}ifelse userdict/a4small known{/a4small load}{lnop}ifelse +userdict/b5 known{/b5 load}{userdict/note known{/note load}{lnop}ifelse}ifelse lnop lnop lnop /tab load]def end +systemdict/currentpacking known{setpacking}if +%%[TJD]%currentfile ok userdict/stretch known not and{eexec}{flushfile}ifelse +%%[TJD]% +%%[TJD]%currentfile ok userdict/smooth4 known not and{eexec}{flushfile}ifelse +%%[TJD]% +%%EndProcSet + diff --git a/graphics/psfig/unsupported/macdemo/lprep70.pro b/graphics/psfig/unsupported/macdemo/lprep70.pro new file mode 100644 index 0000000000..cd0ad2a279 --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/lprep70.pro @@ -0,0 +1,451 @@ +%!PS-Adobe-2.0 +%%BeginProcSet: "(AppleDict md)" 70 0 +statusdict begin product(LaserWriter II NT)eq revision 1 eq and +{userdict begin/oldcds/cleardictstack load def/cleardictstack{31 sendpcmd 4 eq tonerlight/oldcds load exec}bind def +end +currentfile eexec +}{save currentfile 359 string readhexstring pop pop restore}ifelse +35de8eabfc7fa5eac0431edc501ad43f5fcbdf9fdd321cce93b525f4439dd94696bf56ac13a0a2aad1e6bcf444711e941d7217138d20ae0500145f815439cc14e697ad201df728ea4ccad4ac +331aa03a7aacde10760bf4ee12bbf73c77cdcbf1796f26f0dd255d2407e1ac41 +d27489a69d6b69c6a841468b46720b75ad65650700e0c528e7af61e7e3e821b59445c44b69831ebc9deaf0e3aecc14b7a1c2e18bc1fa42a59219f1e36f236e3d6c89114b1f231999c3dbce6b43f3e2918fcb85575941a9d1e65c86aa08e6eea86cc66ce90e5e4add57f2585e +7b1c0b5203cfc46868d6e3c0d66db79174e7091e32e307679732da062e440e41dabd36a161b611a7e4523a49694026206803dbfd5be5c5fe433f0f18a40057db6f1302848c8da4a10a7f14c6 +3d512806362b1be092ad5dbd36d75fe63e4cae2ba9b72390f580cac344a08bdf6eb9e36ec45bad2a0b82829a72e0efa2d87332c482196e690361168271c55053341ab3 +end +/sc {60 45 {abs exch abs 2 copy add 1 gt{1.0 sub dup mul exch 1.0 sub dup mul add 1.0 sub}{dup mul exch dup mul add 1.0 exch sub} +ifelse}setscreen} bind def statusdict begin product(LaserWriter II)anchorsearch end +{pop pop/letter [/letter load /exec load /sc load /exec load]cvx def/legal [/legal load /exec load /sc load /exec load]cvx def/a4 [/a4 load /exec load /sc load /exec load]cvx def/b5 [/b5 load /exec load /sc load /exec load]cvx def +/lettersmall [/lettersmall load /exec load /sc load /exec load]cvx def/a4small [/a4small load /exec load /sc load /exec load]cvx def/note [/note load /exec load /sc load /exec load]cvx def}{pop}ifelse +systemdict/currentpacking known{currentpacking true setpacking}if +/LW{save statusdict/product get(LaserWriter)anchorsearch +exch pop{length 0 eq{1}{2}ifelse}{0}ifelse exch restore}bind def +/LW+{LW 2 eq}bind def +/ok{systemdict/statusdict known dup{LW 0 gt and}if}bind def +ok{statusdict begin 9 sccinteractive 3 ne exch 0 ne or{9 0 3 setsccinteractive}if end}if +/md 270 dict def md begin +/av 0 def +/T true def/F false def/mtx matrix def/s75 75 string def/sa8 8 string def/sb8 8 string def +/sc8 8 string def/sd8 8 string def/s1 ( ) def/pxs 1 def/pys 1 def +/ns false def +1 0 mtx defaultmatrix dtransform exch atan/pa exch def/nlw .24 def/ppr [-32 -29.52 762 582.48] def +/pgr [0 0 0 0] def +/pgs 1 def/por true def/xb 500 array def/so true def/tso true def/fillflag false def/pnm 1 def/fmv true def +/sfl false def/ma 0 def/invertflag false def/dbinvertflag false def/xflip false def/yflip false def/noflips true def/scaleby96 false def/fNote true def/fBitStretch true def +/4colors false def/3colors false def/2colors false def +/wtkey false def +statusdict begin/waittimeout where{pop waittimeout 300 lt{md /wtkey true put}if}if end +wtkey{statusdict begin/setdefaulttimeouts where{pop 0 60 300 setdefaulttimeouts}if end}if +/fg (Rvd\001\001\000\000\177) def +/bdf{bind def}bind def +/xdf{exch def}bdf +/xl{neg exch neg translate}bdf +/fp{pnsh 0 ne pnsv 0 ne and}bdf +/nop{}bdf/lnop[/nop load]cvx bdf +/vrb[ +{fp{fg 6 get 0 ne{gsave stroke grestore}{gsave 1 setlinewidth pnsh pnsv scale stroke grestore}ifelse}if newpath}bind +/eofill load +dup +/newpath load +2 index +dup +{clip newpath}bind +{}bind +dup +2 copy +]def +systemdict/currentcolorscreen known{currentcolorscreen/dkspf xdf/dkrot xdf/dkfreq xdf/dyspf xdf/dyrot xdf/dyfreq xdf/dmspf xdf/dmrot xdf/dmfreq xdf +/dcspf xdf/dcrot xdf/dcfreq xdf}{currentscreen/spf xdf/rot xdf/freq xdf}ifelse +/doop{vrb exch get exec}bdf +/psu{/udf xdf/tso xdf /fNote xdf/fBitStretch xdf/scaleby96 xdf/yflip xdf/xflip xdf +/invertflag xdf/dbinvertflag invertflag statusdict begin version cvr 47.0 ge product (LaserWriter) eq not and end invertflag and {not}if def +xflip yflip or{/noflips false def}if +/pgs xdf 2 index .72 mul exch div/pys xdf div .72 mul/pxs xdf ppr astore pop pgr astore pop/por xdf sn and/so xdf}bdf +/tab{statusdict /11x17 known{statusdict begin /11x17 load end}{statusdict /setpage known{statusdict begin 792 1224 1 setpage end}{statusdict /setpageparams known{statusdict begin 792 1224 0 1 setpageparams end}if}ifelse}ifelse}bdf +/a3Size{statusdict /a3 known{statusdict begin /a3 load end}{statusdict /setpageparams known{statusdict begin 842 1191 0 1 setpageparams end}if}ifelse}bdf +/txpose{fNote{smalls}{bigs}ifelse pgs get exec pxs pys scale ppr aload pop por{noflips{pop exch neg exch translate pop 1 -1 scale}if +xflip yflip and{pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if +xflip yflip not and{pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ppr 1 get neg ppr 0 get neg translate}if} +{noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{translate pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if +xflip yflip not and{translate pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{translate pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate}if}ifelse +wtkey{statusdict/waittimeout 300 put}if +scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy translate .96 dup scale neg exch neg exch translate}if}bdf +/fr{4 copy pgr aload pop 3 -1 roll add 3 1 roll exch add 6 2 roll 3 -1 roll +sub 3 1 roll exch sub 3 -1 roll exch div 3 1 roll div exch scale pop pop xl}bdf +/obl{{0.212557 mul}{pop 0}ifelse}bdf +/sfd{ps fg 5 -1 roll get mul 100 div 0 ps 5 -1 roll obl ps neg 0 0 6a astore makefont setfont}bdf +/fnt{findfont sfd}bdf +/bt{sa 3 1 roll 3 index and put}bdf +/sa(\000\000\000\000\000\000\000\000\000\000)def +/fs{0 1 bt 1 2 bt 2 4 bt 3 8 bt 4 16 bt 5 32 bt 6 64 bt 7 128 bt sa exch 8 exch put}bdf +/mx1 matrix def +/mx2 matrix def +/mx3 matrix def +/bu{currentpoint 4colors{currentcmykcolor}{currentrgbcolor}ifelse currentlinewidth currentlinecap currentlinejoin +currentdash exch aload length fg 5 sfl{1}{0}ifelse put pnsv pnsh +2t aload pop 3a aload pop mx2 aload pop mx1 aload pop mtx currentmatrix aload pop +mx3 aload pop ps pm restore/ps xdf mx3 astore pop}bdf +/bn{/pm save def mx3 setmatrix newpath 0 0 moveto ct dup 39 get 0 exch getinterval cvx exec mtx astore setmatrix mx1 astore pop mx2 astore pop 3a +astore pop 2t astore pop/pnsh xdf/pnsv xdf gw +/sfl fg 5 get 0 ne def array astore exch setdash setlinejoin setlinecap +setlinewidth 4colors{setcmykcolor}{setrgbcolor}ifelse moveto}bdf +/fc{save vmstatus exch sub 50000 lt +{(%%[|0|]%%)=print flush}if pop restore}bdf +/tc{32768 div add 3 1 roll 32768 div add 2t astore pop}bdf +/3a [0 0 0] def +/2t 2 array def +/tp{3a astore pop}bdf +/tt{mx2 currentmatrix pop currentpoint 2 copy 2t aload pop qa 2 copy translate 3a aload pop exch dup 0 eq +{pop}{1 eq{-1 1}{1 -1}ifelse scale}ifelse rotate pop neg exch neg exch translate moveto}bdf +/te{mx2 setmatrix}bdf +/th{3 -1 roll div 3 1 roll exch div 2 copy mx1 scale pop scale/sfl true def}bdf +/tu{1 1 mx1 itransform scale/sfl false def}bdf +/ts{1 1 mx1 transform scale/sfl true def}bdf +/fz{/ps xdf}bdf +/dv{dup 0 ne{div}{pop}ifelse}bdf +/pop4{pop pop pop pop}bdf +/it{sfl{mx1 itransform}if}bdf +/gm{exch it moveto}bdf/rm{it rmoveto}bdf +/lm{currentpoint sfl{mx1 transform}if exch pop sub 0 exch it rmoveto}bdf +/fm{statusdict/manualfeed known}bdf +/se{statusdict exch/manualfeed exch put}bdf +/mf{dup/ma exch def 0 gt{fm se/t1 5 st ok ma 1 gt and{/t2 0 st/t3 0 st +statusdict/manualfeedtimeout 3600 put +}if}if}bdf +/jn{/statusdict where exch pop{statusdict exch /jobname exch put}if}bdf +/pen{pnm mul/pnsh xdf pnm mul/pnsv xdf pnsh setlinewidth}bdf +/min{2 copy gt{exch}if pop}bdf +/max{2 copy lt{exch}if pop}bdf +/dh{fg 6 1 put array astore dup {1 pxs div mul exch}forall astore exch pop exch pop exch setdash}bdf +/ih[currentdash]def +/rh{fg 6 0 put ih aload pop setdash}bdf +/dl{gsave nlw pys div setlinewidth 0 setgray}bdf +/dlin{exch currentpoint currentlinewidth 2 div dup +translate newpath moveto lineto currentpoint stroke grestore moveto}bdf +/lin{fg 6 get 0 ne{exch lineto currentpoint 0 doop moveto} +{exch currentpoint/pnlv xdf/pnlh xdf gsave newpath/@1 xdf/@2 xdf fp{pnlh @2 lt{pnlv @1 ge +{pnlh pnlv moveto @2 @1 lineto pnsh 0 rlineto +0 pnsv rlineto pnlh pnsh add pnlv pnsv add lineto pnsh neg 0 rlineto} +{pnlh pnlv moveto pnsh 0 rlineto @2 pnsh add @1 lineto 0 pnsv rlineto +pnsh neg 0 rlineto pnlh pnlv pnsv add lineto}ifelse}{pnlv @1 gt +{@2 @1 moveto pnsh 0 rlineto pnlh pnsh add pnlv lineto 0 pnsv rlineto +pnsh neg 0 rlineto @2 @1 pnsv add lineto}{pnlh pnlv moveto pnsh 0 rlineto +0 pnsv rlineto @2 pnsh add @1 pnsv add lineto pnsh neg 0 rlineto +0 pnsv neg rlineto}ifelse}ifelse +closepath fill}if @2 @1 grestore moveto}ifelse}bdf +/gw{/pnm fg 3 get fg 4 get div def}bdf +/lw{fg exch 4 exch put fg exch 3 exch put gw pnsv pnsh pen}bdf +/barc{/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf +/@6 xdf/@7 xdf/@8 xdf gsave +@5 @7 add 2 div @6 @8 add 2 div translate newpath 0 0 moveto +@5 @7 sub @6 @8 sub mtx currentmatrix pop scale @1{newpath}if +0 0 0.5 @4 @3 arc @4 @3 sub abs 360 ge{closepath}if +mtx setmatrix @2 doop grestore}bdf +/ar{dup 0 eq barc}bdf +/ov{0 exch 360 exch true barc}bdf +/rc{/@t xdf currentpoint 6 2 roll newpath 4 copy 4 2 roll exch moveto +6 -1 roll lineto lineto lineto closepath @t doop moveto}bdf +/mup{dup pnsh 2 div le exch pnsv 2 div le or}bdf +/rr{/@1 xdf 2. div/@2 xdf 2. div/@3 xdf +/@4 xdf/@5 xdf/@6 xdf/@7 xdf +@7 @5 eq @6 @4 eq @2 mup or or{@7 @6 @5 @4 @1 rc} +{@4 @6 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse +@5 @7 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse +@1 0 eq{/@2 @2 pnsh 2 div 2 copy gt{sub def}{0 pop4}ifelse}if +currentpoint newpath +@4 @6 add 2. div @7 moveto +@4 @7 @4 @5 @2 arcto pop4 +@4 @5 @6 @5 @2 arcto pop4 +@6 @5 @6 @7 @2 arcto pop4 +@6 @7 @4 @7 @2 arcto pop4 +closepath @1 doop moveto}ifelse}bdf +/pr{gsave newpath/pl{exch moveto/pl{exch lineto}def}def}bdf +/pl{exch lineto}bdf +/ep{dup 0 eq{{moveto}{exch lin}{}{(%%[|1|]%%)= flush}pathforall +pop grestore}{doop grestore}ifelse currentpoint newpath moveto}bdf +/gr{64. div setgray}bdf +/savescreen{ns not{/ns true def systemdict/currentcolorscreen known{currentcolorscreen/pkspf xdf/pkrot xdf/pkfreq xdf/pyspf xdf/pyrot xdf/pyfreq xdf/pmspf xdf/pmrot xdf/pmfreq xdf +/pcspf xdf/pcrot xdf/pcfreq xdf}{currentscreen/sspf xdf/srot xdf/sfreq xdf}ifelse}if}bdf +/restorescreen{/ns false def systemdict/setcolorscreen known{pcfreq pcrot/pcspf load pmfreq pmrot/pmspf load pyfreq pyrot/pyspf load +pkfreq pkrot/pkspf load setcolorscreen}{sfreq srot/sspf load setscreen}ifelse}bdf +/pat{savescreen sa8 +copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}setscreen exch not{gr}{pop}ifelse}bdf +/sg{restorescreen gr}bdf +/cpat{savescreen 10 2 roll 7 -1 roll sa8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}8 -1 roll sb8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sb8 +exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}9 -1 roll sc8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sc8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}10 -1 roll sd8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sd8 +exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}psuedo1 dsc 4{4 -1 roll 1 exch 64 div sub}repeat setcmykcolor pop pop}bdf +systemdict/setcolorscreen known{/psuedo1 lnop bdf/dsc/setcolorscreen load def}{/psuedo1{16{pop}repeat sa8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}}bdf +/bwsc{setscreen dup gr 0 exch 0 exch 64 exch 64 exch 64 exch}bdf/dsc/bwsc load def +}ifelse +systemdict/setcmykcolor known not{/setcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat setrgbcolor pop}bdf}if +/dc{transform round .5 sub exch round .5 sub exch itransform}bdf +/sn{userdict/smooth4 known}bdf +/x8{3 bitshift}bdf +/x4{2 bitshift}bdf +/d4{-2 bitshift}bdf +/d8{-3 bitshift}bdf +/rb{15 add -4 bitshift 1 bitshift}bdf +/db{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf/@6 @5 @3 4 add mul def +dc translate scale/xdbit 1 1 idtransform abs/ydbit exch def abs def{0 0 1 ydbit add 1 10 rc clip}if +@1 0 eq @1 4 eq or{currentrgbcolor 1 setgray ydbit 0 1 ydbit add 1 2 rc setrgbcolor}if +@1 3 eq @1 7 eq or{1 setgray}{currentrgbcolor 2 index eq exch 2 index eq and exch pop{0 setgray}if}ifelse/@9 @1 0 eq @1 1 eq @1 3 eq or or dbinvertflag xor def/@13 @6 def +@2 fBitStretch or{/@10 @4 x4 def/@11 @3 x4 def/@12 @10 rb def/@13 @12 @11 mul def/@15 1 1 dtransform abs/calcY 1 index def round cvi/@14 exch def +abs/calcX 1 index def round cvi scaleby96 not{1 add}if def/@16 @15 rb def/@17 @16 @14 mul def}if +sn @13 60000 lt and @2 fBitStretch or and{mtx currentmatrix dup 1 get exch 2 get 0. eq exch 0. eq and @17 60000 lt and fBitStretch and{@16 3 bitshift @14 @9 [calcX 0 0 calcY 0 0]{@17 string @13 string +currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4 +@10 @11 @12 dup string 5 index @15 @14 @16 dup string stretch}imagemask}{@12 x8 @11 @9 [@10 0 0 @11 0 0]{@13 string +currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4}imagemask}ifelse}{@5 3 bitshift @3 4 add @9 [@4 0 0 @3 0 2]{currentfile @6 string readhexstring pop}imagemask}ifelse +@7 restore}bdf +systemdict/setcmykcolor known{/psuedo lnop bdf/di/colorimage load def}{/routines[{.3 mul add 1}bind{.59 mul add 2}bind{.11 mul add round cvi str exch i exch put/i i 1 add def 0 0}bind]def +/psuedo{/i 0 def 0 exch 0 exch{exch routines exch get exec}forall pop pop str}bdf/bwi{pop pop image}bdf/di/bwi load def}ifelse +/cdb{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf +systemdict/setcmykcolor known not{dc}if translate scale /@6 xdf +/@18 @5 dup 60000 ge{pop 60000}if string def @6 not{/str @18 0 @18 length 3 idiv getinterval def}if @4 @3 8 [@4 0 0 @3 0 0]@6{{currentfile @18 readhexstring pop}image}{{currentfile @18 readhexstring pop psuedo}false 3 di}ifelse @7 restore}bdf +/wd 16 dict def +/mfont 14 dict def +/mdf{mfont wcheck not{/mfont 14 dict def}if mfont begin xdf end}bdf +/cf{{1 index/FID ne{def}{pop pop}ifelse}forall}bdf/rf{/@1 exch def/@2 exch def +FontDirectory @2 known{cleartomark pop}{findfont dup begin dup length @1 add dict begin +cf{/Encoding macvec def}{Encoding dup length array copy/Encoding exch def +counttomark 2 idiv{Encoding 3 1 roll put}repeat}ifelse +pop +exec currentdict end end @2 exch definefont pop}ifelse}bdf +/bmbc{exch begin wd begin +/cr xdf +save +CharTable cr 6 mul 6 getinterval{}forall +/bitheight xdf/bitwidth xdf +.96 div/width xdf +Gkernmax add/XOffset xdf Gdescent add/YOffset xdf/rowbytes xdf +rowbytes 255 eq{0 0 0 0 0 0 setcachedevice} +{Gnormsize dup scale +width 0 XOffset YOffset bitwidth XOffset add bitheight YOffset add +setcachedevice +rowbytes 0 ne{ +XOffset YOffset translate newpath 0 0 moveto +bitwidth bitheight scale +sn{ +/xSmt bitwidth x4 def +/ySmt bitheight x4 def +/rSmt xSmt rb def +rSmt x8 ySmt true +[xSmt 0 0 ySmt neg 0 ySmt] +{rSmt ySmt mul string CharData cr get +1 index bitwidth bitheight rowbytes rSmt tso smooth4} +}{rowbytes 3 bitshift bitheight 4 add true +[bitwidth 0 0 bitheight neg 0 bitheight 2 add] +{CharData cr get} +}ifelse +imagemask +}if +}ifelse +restore +end end +}bdf +/bb{.96 exch div/Gnormsize mdf 2 index +/Gkernmax mdf 1 index/Gdescent mdf +3 index div 4 1 roll +2 index div 1. 5 2 roll +exch div 4 1 roll +4 array astore/FontBBox mdf +}bdf +/cdf{mfont/CharData get 3 1 roll put}bdf +/bf{ +mfont begin +/FontType 3 def +/FontMatrix [1 0 0 1 0 0] def +/Encoding macvec def +/MFontType 0 def +/BuildChar/bmbc load def +end +mfont definefont pop +}bdf +/wi LW 1 eq{{gsave 0 0 0 0 0 0 0 0 moveto lineto lineto lineto closepath clip stringwidth grestore}bind}{/stringwidth load}ifelse def +/aps{0 get 124 eq}bdf +/xc{s75 cvs dup}bdf +/xp{put cvn}bdf +/scs{xc 3 67 put dup 0 95 xp}bdf +/sos{xc 3 79 xp}bdf +/sbs{xc 1 66 xp}bdf +/sis{xc 2 73 xp}bdf +/sob{xc 2 79 xp}bdf +/sss{xc 4 83 xp}bdf +/dd{exch 1 index add 3 1 roll add exch}bdf +/smc{moveto dup show}bdf +/ndf2{udf{dup /FontType get 0 eq{/FDepVector get{dup /FontType get 0 eq{ndf2}{dup /df2 known{begin df2 0 null put end +}{pop}ifelse}ifelse}forall}{/df2 known{dup begin df2 0 null put end}if}ifelse}{pop}ifelse}bdf +/kwn{FontDirectory 1 index known{findfont dup ndf2 exch pop}}bdf +/gl{1 currentgray sub setgray}bdf +/newmm{dup /FontType get 0 eq{dup maxlength dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall currentdict end +dup /FDepVector 2 copy get[exch 6 index exch 6 index exch{newmm 3 1 roll}forall pop pop] put dup +}{/mfont 10 dict def mfont begin/FontMatrix [1 0 0 1 0 0] def +/FontType 3 def/Encoding macvec def/df 1 index def/df2 1 array def/FontBBox [0 0 1 1] def/StyleCode 2 index def +/mbc{bcarray StyleCode get}def/BuildChar{exch begin wd begin/cr exch def/cs s1 dup 0 cr put def df /MFontType known not{ +df2 0 get null eq{df dup length 2 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall +/StrokeWidth nlw 1000 mul pys div ps div dup 12 lt{pop 12}if def/PaintType 2 def currentdict end +/q exch definefont df2 exch 0 exch put}if}if mbc exec end end}def end mfont}ifelse +3 index exch definefont exch pop}bdf +/mb{dup sbs kwn{0 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf +/mo{dup sos kwn{2 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf +/ms{dup sss kwn{4 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf +/ou{dup sos kwn{mfont/df2 known{mfont begin df2 0 null put end}if 3 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf +/su{dup sss kwn{mfont/df2 known{mfont begin df2 0 null put end}if 5 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf +/ao{/fmv true def ou}bdf/as{/fmv true def su}bdf +/vo{/fmv false def ou}bdf/vs{/fmv false def su}bdf +/c{currentrgbcolor dup 4 1 roll eq 3 1 roll eq and/gray xdf}bdf +/bcarray[{/da .03 def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth +cs 0 0 smc da 0 smc da da smc 0 da moveto show}bind dup{/da 1 ps div def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth +cs 0 0 smc da 0 smc da da smc 0 da smc c gray{gl}{1 setgray}ifelse da 2. div dup moveto show}bind +{df setfont gsave cs wi grestore setcharwidth c gray{gl}{currentrgbcolor 1 setgray}ifelse cs 0 0 smc df2 0 get setfont +gray{gl}{4 1 roll setrgbcolor}ifelse 0 0 moveto show}bind +{/da 1 ps div def/ds .05 def/da2 da 2. div def df setfont gsave cs wi 1 index 0 ne{exch ds add da2 add exch}if grestore setcharwidth +cs ds da2 add .01 add 0 smc 0 ds da2 sub translate 0 0 smc da 0 smc da da smc 0 da smc c gray{gl}{1 setgray}ifelse da 2. div dup moveto show}bind +{/da .05 def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth c cs da .01 add 0 smc 0 da translate +gray{gl}{currentrgbcolor 1 setgray 4 -1 roll}ifelse 0 0 smc gray{gl}{4 1 roll setrgbcolor}ifelse df2 0 get setfont 0 0 moveto show}bind]def +/st{1000 mul usertime add dup 2147483647 gt{2147483647 sub}if def}bdf +/the{usertime sub dup 0 lt exch -2147483648 gt and}bdf +/6a 6 array def +/2a 2 array def +/3q 3 array def +/qs{3 -1 roll sub exch 3 -1 roll sub exch}bdf +/qa{3 -1 roll add exch 3 -1 roll add exch}bdf +/qm{3 -1 roll 1 index mul 3 1 roll mul}bdf +/qn{6a exch get mul}bdf +/qA .166667 def/qB .833333 def/qC .5 def +/qx{6a astore pop +qA 0 qn qB 2 qn add qA 1 qn qB 3 qn add +qB 2 qn qA 4 qn add qB 3 qn qA 5 qn add +qC 2 qn qC 4 qn add qC 3 qn qC 5 qn add}bdf +/qp{6 copy 12 -2 roll pop pop}bdf +/qc{exch qp qx curveto}bdf +/qi{{exch 4 copy 2a astore aload pop qa .5 qm newpath moveto}{exch 2 copy 6 -2 roll 2 qm qs 4 2 roll}ifelse}bdf +/qq{{qc 2a aload pop qx curveto}{exch 4 copy qs qa qx curveto}ifelse}bdf +/pt{currentpoint newpath moveto}bdf +/qf{/fillflag true def}bdf +/ec{dup 4 and 0 ne{closepath}if 1 and 0 ne{0 doop}if grestore currentpoint newpath moveto/fillflag false def}bdf +/eu{currentpoint fp{0 ep}{grestore newpath}ifelse moveto/fillflag false def}bdf +/bp{currentpoint newpath 2 copy moveto}bdf +/ef{gsave fillflag{gsave eofill grestore}if}bdf +/sm{0 exch{@1 eq{1 add}if}forall}bdf +/lshow{4 1 roll exch/@1 exch def{1 index wi pop sub 1 index sm dv 0 @1 4 -1 roll widthshow}{1 index wi pop sub +1 index dup sm 10 mul exch length 1 sub add dv dup 10. mul 0 @1 4 -1 roll 0 6 -1 roll awidthshow}ifelse}bdf +/setTxMode{sa 9 2 index put exch not{3 eq{1}{0}ifelse setgray}{pop}ifelse}bdf +/SwToSym{{}mark false/Symbol/|______Symbol 0 rf 0 sa 6 get 0 ne{pop 1}{sa 7 get 0 eq{pop 2}if}ifelse +sa 1 get 0 ne/|______Symbol +sa 4 get 0 ne{vs}{sa 3 get 0 ne{vo}{fnt}ifelse}ifelse}bdf +/mc{0 3 1 roll transform neg exch pop}bdf +/ul{dup 0 ne sa 2 get 0 ne and{gsave 0 0 +/UnderlinePosition kif{mc}{ps -10 div}ifelse/UnderlineThickness kif{mc}{ps 15 div}ifelse +abs setlinewidth neg rmoveto +sa 4 get 0 ne{gsave currentlinewidth 2. div dup rmoveto currentpoint newpath moveto +2 copy rlineto stroke grestore}if +sa 3 get sa 4 get or 0 ne{gsave currentrgbcolor dup 4 1 roll eq 3 1 roll eq and{gl}{1 setgray}ifelse 2 copy rlineto stroke grestore rlineto strokepath nlw pys div setlinewidth}{rlineto}ifelse +stroke grestore}{pop}ifelse}bdf +/sgt{2 copy known{get true}{pop pop false}ifelse}bdf +/kif{currentfont dup/FontMatrix get exch/FontInfo sgt{true}{currentfont/df sgt +{dup/FontInfo sgt{3 1 roll/FontMatrix get mtx concatmatrix exch true}{pop pop pop false} +ifelse}{pop pop false}ifelse}ifelse{3 -1 roll sgt{exch true}{pop false}ifelse}{false}ifelse}bdf +/blank/Times-Roman findfont/CharStrings get/space get def +/macvec 256 array def +/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI +/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US +macvec 0 32 getinterval astore pop +macvec 32/Times-Roman findfont/Encoding get +32 96 getinterval putinterval macvec dup 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 +{}mark true/Courier/|______Courier 0 rf +{/Metrics 21 dict begin/zero 600 def/one 600 def/two 600 def/three 600 def/four 600 def/five 600 def/six 600 def/seven 600 def/eight 600 def +/nine 600 def/comma 600 def/period 600 def/dollar 600 def/numbersign 600 def/percent 600 def/plus 600 def/hyphen 600 def/E 600 def/parenleft 600 def/parenright 600 def/space 600 def +currentdict end def currentdict/UniqueID known{/UniqueID 16#800000 def}if/FontBBox FontBBox 4 array astore def}mark true/Helvetica/|______Seattle 1 rf +/oldsettransfer/settransfer load def +/concatprocs{/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}def +/settransfer{currenttransfer concatprocs oldsettransfer}def +/PaintBlack{{1 exch sub}settransfer gsave newpath clippath 1 setgray fill grestore}def +/od{(Rvd\001\001\000\000\177) fg copy pop txpose +1 0 mtx defaultmatrix dtransform exch atan/pa exch def +newpath clippath mark +{transform{itransform moveto}}{transform{itransform lineto}} +{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform +{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}} +{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put +10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if +statusdict/processcolors known{statusdict begin processcolors end dup 4 eq{/4colors true def pop}{3 eq{/3colors true def}{/2color true def}ifelse}ifelse}{/2colors true def}ifelse}bdf +/cd{}bdf +/op{/sfl false def systemdict/currentcolorscreen known{dcfreq dcrot/dcspf load dmfreq dmrot/dmspf load dyfreq dyrot/dyspf load +dkfreq dkrot/dkspf load setcolorscreen}{freq rot/spf load setscreen}ifelse savescreen +/ns false def/pm save def}bdf +/cp{not{userdict/#copies 0 put}if ma 0 gt{{t1 the{exit}if}loop}if{copypage}{showpage}ifelse pm restore}bdf +/px{0 3 1 roll tp tt}bdf +/psb{/us save def}bdf +/pse{us restore}bdf +/ct 40 string def +/nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if} +forall clip newpath moveto}def +/kp{ct 0 2 index length 2 index 39 2 index put getinterval copy cvx exec mx3 currentmatrix pop}bdf +/av 70 def +end +LW 1 eq userdict/a4small known not and{/a4small +[[300 72 div 0 0 -300 72 div -120 3381] +280 3255 +{statusdict/jobstate (printing) put 0 setblink +margins +exch 196 add exch 304 add 8 div round cvi frametoroket +statusdict/jobstate (busy) put +1 setblink} +/framedevice load +60 45{dup mul exch dup mul add 1.0 exch sub}/setscreen load +{}/settransfer load/initgraphics load/erasepage load]cvx +statusdict begin bind end readonly def}if +md begin/bigs[lnop userdict/letter known{/letter load}{lnop}ifelse userdict/legal known{/legal load}{lnop}ifelse userdict/a4 known{/a4 load}{lnop}ifelse userdict/b5 known{/b5 load}{lnop}ifelse +lnop lnop lnop /tab load/a3Size load]def +/smalls[lnop userdict/lettersmall known{/lettersmall load}{userdict/note known{/note load}{lnop}ifelse}ifelse +userdict/legal known{/legal load}{lnop}ifelse userdict/a4small known{/a4small load}{lnop}ifelse +userdict/b5 known{/b5 load}{userdict/note known{/note load}{lnop}ifelse}ifelse lnop lnop lnop /tab load/a3Size load]def end +systemdict/currentpacking known{setpacking}if +/checkload{{currentfile eexec} {/junk save def/mystring 65000 string def +/endexec (e%endeexec) def{currentfile mystring readline not{stop}if endexec eq{exit}if}loop junk restore}ifelse}bind def +ok userdict/stretch known not and checkload +373A767D4B7FD94FE5903B7014B1B8D3BED02632C855D56F458B118ACF3AF73FC4EF5E81F5749042B5F9CF1016D093B75F250B7D8280B2EACE05A37037F7BDF6E12226D7D4E2DF2C52FAFD5FD40FE72A0D3AC4BD485D8369D4C87636E920D1DAF222D92155A9CB1667E715F0B82799B37CC8F5B32B74B39CF494536DC39C7EF04A7BCB29E2CEC79073CADCCFB23B4AA1363F876F5121B618071B7B4EB1E5DE75FAA2368A3E5DB2B198623AFE92AE9484270FE7F57A850E88C0D3EEA156611C91D8E480D4370B025CCA6929A2BF40AD3D01B2CB7EE6DFB46E12A830542337F7819B67F9765210F76DB06F34DA5B13A11759305C582E16D2B854939F6D9121F2A4F285282F5DCD3D15896D121E3D6F5BE79E087451BB0ED233CDBEF090D3B4AC2DC34B97E70C61D95FB072B8C12D2ABD843520949A39DCF99E2C1AA8FBCD025E47E0A82A8D96E75BAF40F52AD402495BBD4DE0F356C8B14E764874E639C9F045A0D1908EC6456EB6C5B8A6F826192F767EF2C55A21C58F5F9CC1F59247B55F2387828C7FE89D5E7D8484D1BC86CB6673BDBE4FE17DD9BDE95224FE645136F41330BF155A4DDE1B0A32233BF471CE58FBC660DC7E641B0A0D30018454E2191C414A3011FF3FED1C0D88FE1FF9F75DCC456D097947226FBEC92509146D3A4CFFC0471B31C53222ED9DD88566F60F6C0D705AD79DACF53B070026F083ED28B5CF757AAA0A169F6F320A75E9D2ED50ABD939AF85B6346C2ADB25D168F10508E1516D194C635E6B187FADEA0829DBF0390C0F003F0265E215BC96CA3CC13D4A8E01570BE193CA75A620728CD275ACF1986EFFB3A13419FE55EA7C4467B7E7EEDC1FC29C9F8C46A557D2CCDB914EF7B93E7530D555DFC2398AFC68CAD991F062EF85BAA1884EC166C7C5DF8543666D8C41BE267D706BD1588F1F662F705CAE4D29DC38EF66BFAA89470D8A099B6F1B4587F7B024412276106FCD3EB5AE17A5D1DF1781992DC40EA0A992F706F701304CEA9D9073E7A74F1E687D81C3E5841D31CF86855BAAAD9B5D30317C75150A857C6B114735315CDD1AEF36C26BBB0645499406DEE2F24B3B1C72FEC97C7BA31AA2CDAB25418BB1DC4C7E4757F1D625087B0FD0300C03A65F2A72CE734925735277E034CDCF599129679F70CC8B66E03878851DB75041F275E1E5761F3EC753BE1359CA364A22047AE4886217F9259FE19FF5B116E8019B98B143114B313E8BEF87EC949D85C82E0812E6F50525E73890AF362CC8EE8A85F4197E6AC18638EF12E56A808D439AF1BFD363F140314BF4E534485C42F1856688CC35288E8D770120A420FB9F1FCF8AE8BD6D6156CC23E6C51119FE4DE1B68C9DF3487E9974BF9ED31F8D3CE93FF101867319F2FF492D5D398B4F09A66F2F55BCAB34B99173B7EE89039D00DD21A7B3A52E9F028F8301B5FC12D409412E064513BC579AAC498F577EA8ECD1FE3E42DC3CC320786C7B00194FEDF344402C33FC492D4BA86992B01683F440220FFE756BC88A94223D316078D69D33560E8EAB76B24CB7AA4320CF435593D76F624324ABE00B5587A4F283C725EA24567133F25F472B5E2E4474DDB5A16AC5F2DF32350395D3E3892FE361F4D5C9A610C654C9227614FBBAFF3356A90A2266E00F66234061075491571A65616211257F160000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +e%endeexec + +ok userdict/smooth4 known not and checkload +F94E00EE41A71C59E5CAEED1EDBCF23D1DBA1EE99B9BB356492923BD8B1BA83A87CEB0E07377A31FD6241E814681118E17DC7CACE570399506E6E441B871B6043831BD03EFC11DBBD8001EE2FF8CFBD485065D455A2E15AC36F1A84AD8789FA6461199C7CD14CB9FD64D4B06452B7FC0A8FC263F70F1CCB893295D4DE70ADAB771C0F84396FA98C60B11DA02ABA157298DF0A23621853BEF167443A985ADC09BEFFD51CB4D29179E2B34609EF38A49DA61F4BFC256A3DE0732D7D29754A194857B9C9E9971227AA1DD0611FBB10E44E5FF66C062D9C24ED3290529330BC317825E876929582DB0E39B9FC5EFD20CC1D4F94920EB9C534D0DA90DE70D25BC7287319CF28602B3F46633C242CAFC8905E960317E3C2FA20AB8DB06ADBAF292FC7BA2CA14EE65DF28B99CC11666B70AD33E8E1D57D63D4B89ECC615AE5747C1CA752C833D8D6DE54CD4A0350B44310555CE3BD2C615ADD27B634CDB350AF3A432CE78AACD2909A5B586F666CD87919A36DB1CBE86B3CE281DFD01CD7E1B8A18A4B415CECBFF79A5C4390A15EA77D14D6BE12BAB5A8268C3F286D0590060647CABED674443CD258F11415E866AB330A251691B61F2422A61AFE59B6B4FBDCF85ED9BA0F8E483C034089E6877FF5923698D3A0DC0EED6B9CFD32DF0839BC4EA5F6D1FCB6DD0920391E57E84745131D02D100179F4E0A68EC0A5FF6680A6F463D038B04AF63FFA13D743B995A26A743C26D387209023C91DE43DF047A16F328AC9DDC08573B38BE9EA341EA16C78EC32F3A1B36B90D95A50610F4D050EC1C33497F3F3A81A1B4C8BEF0BA84EE2FAA32DC112DAC490AF53E1749C4A0D866CAF7B893E52383B0D38065C333FB122B700D7246F7EE87D942AE3DB5C1DD77E9E76C80CC5AD63D28DFED0E229CE604673F78CD47F258FDF5BF3A3EAEC5C9BC8E482D8DBA9D268A35DA8C095A690679ED2123E8B8F5E4826FA3B199EAA5D482D4B6AA86572E387CECEB7149C8947F41D6339328A748A17F8C4AD3B0555F1E409450BA0C564F1F488BB5096EB003568D4D5EF6489897E27409547D0EE4487D30184793B0F27BD265A64BDB3EA6761569DA955620C612E718677B77D6D81B999C6298877AFE0D1D6F6F358377A8BD2402F669C64B972B3A065EF7DD4BDEFFFE17E63DB8898FA6E69166B710AAD6BA2EA9AF61E4B8C8701638D4D6E4DFFFC192AEF6BC027095C4C72D748979675BA29FAF61E75343E14E61034602E5A79CD2519796ED6A9CC4EDEA46A9B59D4A807E786B5EE46F25B0360BC8E7C12D723122CDEEF247C9776F4C99C8EBED6828AA19744B5ADF0D07D95D98B3072372388D41B0FAB1CCE2775170679575ECDCA13B22A17FE9C6605C3445F58F1A829512DAB6C528F83580C8AA53C35D605F626F5AD0B7FC1EA87D69A835E3F53A1F450FB0AF42A5772F89D92A50D10F15BDBDA409F50C0B8AB93FE8A16D029DD8BB5C480D1466735ED4D9CAF637E5ECD6C2ECB6BF3B3EFBEE7AB936D2C568E3009D156B87CACB1FB3A48A70BC91B2EC35CC9147FFB1A524E2B2F2E4E2C1B12F1C1C63768BB95CD62FEC01CBA79B9FA282DD4DF49990F27FF8EE4E2DDE2F0ACD83BC9D4BE0090192C7A799967EC4DC2D63C0835E22D4C4B366D7FDCF3A05A4B53DF780F986EF25C79B665D5C00EFF7F17C0BB6D544F9D83A7FDAC47D9C5683A656011374253C918FF6EA64749DD971B2300DD5320033E01EC591F6318CCE94CE2B81C04322EC52B624E50643B52391CCD2AB56396A2AD8E2D3CA61B80D9D4CC363B2DF7863526958CDF3497E36648406C317E58EC563E7C26149A2A3C643ADFB39A8DD92974C6D2A2A9D7B71CDF3FEBBF32BB02E7B45CF53AAEAD5E963A4AA4AF9A149A08A4EC303D5F2369977E93F54897EEAD31B06C5845D63F49D65F8E5573962241A57CCD717CE6CA8C784A11192943616EA059B51BC38429E18D0121FCBB6FBD5D909B0D89E616C66DEF6A0F165A7030BD911A1B120468329CBB006C8D37720E531CF31E878CB4AAAC137633675C3D546F5162487AB35F470C042BDEB945E0F2532BF92AA6FD53434440221ECD3533A7AA89900CB19EFE2CD872DF8B7969AF0D3B72BF31DC5DD69CA6460966F61AB17CB507964098DBA3AF122EEC3128A9BAFE1034493F372B36BD1351205E9043A67C544402D8BCE24358C8A5CE33867A00794CF7097D59C88279A11EE9C854E7E7AAE881F9828C569D208F5F33375F59E9A3818CFA38AAD0CBFBA32F9F44A8BB79DE4C40E3886457C16DA4A27953AA1E99472E35F2323F0BAA5E37DC28CBA46FEFB73B190016055ADD4D27615D748499A0E1C4B8C7EC339C1C4D95A813A85918A8D01EEB485DDCDCEA6EA3F2C2A9D85C139CD90CCB352634F9AFE836BCAC0C274E352BA2071B5269D5DE4CCDE3FF990CBA974980C7332AE1545A9C60D5D1459D3AE95C1AC065733AF14FADB440A110DD539563B8D850CD0704C52F3F7CCCB53630D776560CBD22D8FF08F5B354487A171AEC15F5F54DE9CAB668BCAC573E788D92762EF63E76087005F4AC2D02E0CAC173C11BE62ACE5DC4D3374F2F9746C9981E125FF9AB8CAE76D13039E2C54DFD708E028A619EA1ED78E6B46F06DF0D0B74BBEDD8C190C7C0CEBDE8F7A4888CC36575313478DD2CFE392E9BB7B2416955D44B7024A3BA43FBF37293B386D64746D7748895411D243FAEC50638F2AA33337D7FA018ADDAC5835A0DDFAE99AD6299DFB4CA6872C59853E3AC12FC9E3D26629C5B49CF844C87B3C4BFBE3074E3A1CE6984758C20C661084381CD6B4582D84F19C0000B5FC0DCB42B567E396031601C095D7016283EBE5F13CD8A3A374A74DDBBABD36081149F8BC242085F2F7297CC97FD3B8BAD206D8AC9707A39ECCC7963B522E08DA391A1EF12DD4D746DBDDDCC0834F88160CF189A9645567CEC2F023A571AF0DFD15DB85B744C28C000DF53B05F8F210841F6E87A04F20C777B7C0BE6182BE2E90226E5301A12532A745F2FAAA81637CF11B78CD2B99A4D18B862D6C5DBD31793FB16A2D9AAD376D4484D75AA833D0068B1D34DB74E3302480854E3B5484D8A47E39A89A2FA927BC3641EA7F8E004FDE4C2F08D40D99F1ACB47CAF6887629BF6DFE12968D297596D28CE0CF148B12E7DCB49FB94F5ADBD214C3A6CE1E249831BA9EB8A189F2CE1ABE39A7B537253E369A508A2AF2ADB9463F9B56BBBFF31D535FF997F537C6675C196E7ECBD493F652FA7CC6D9C1CA3379BFDB5AF7513C6E834054494296B91A6EE800114363D5D5D0759F41B4DECB653B9DE3E94583579EF549ED5F3FAFB12661ABC0C57A332406517ED3454EDED34B386C60F78DC976266E0EAF54FC245FB0E3EFC8016236436B599C1C97A8C5E0AC8F7836161873C71F01ED9CC25C236420F41FD8277993D3959205912FA0927B59E3DAE7377D82079447D6E41EE5AEC0DFFF79AF8F4ED47F17EE708FEA45877860D56F8CBCE65A061E8E1CA4A5FBAF0E13429A7F0ADB6F178FA449F46CC539BBC0107E3A53B1C362A04B20E6D721E7E6E1E4976A11DDC98C7614D22B53DFBB6DAE533AC9BE882021A735C30DAA4A44AED09F49A390E8CFF59BD9C30667AF21B03EC5CEBD5C2C3AA2769E8D714191A48E7DDF50B13D1560E82EFB65FCE601AE9E8C351FBA1DED80B7351314E7F9F9A784BFE3759B7E322A84E7B51F9DC5F5D9C8050CD79B27C0A4B0DD68A3C27A948AD6858E35B960D2DEA838C479CAEA83B1A912174ACB2100E55E7A14892D7A9B3711FF0B20065C1995B49E1F23464A92DD140642E3A7B1973849E64D1A3CF60000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +e%endeexec +%% TJD hacks 6/91 to get lprep 70 and psfig to work with pageview: +md begin +/nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if} +forall % clip +newpath moveto}def +end +%%EndProcSet diff --git a/graphics/psfig/unsupported/macdemo/lprep70.procs b/graphics/psfig/unsupported/macdemo/lprep70.procs new file mode 100644 index 0000000000..4ecbfc62ec --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/lprep70.procs @@ -0,0 +1,450 @@ +%%BeginProcSet: "(AppleDict md)" 70 0 +statusdict begin product(LaserWriter II NT)eq revision 1 eq and +{userdict begin/oldcds/cleardictstack load def/cleardictstack{31 sendpcmd 4 eq tonerlight/oldcds load exec}bind def +end +currentfile eexec +}{save currentfile 359 string readhexstring pop pop restore}ifelse +35de8eabfc7fa5eac0431edc501ad43f5fcbdf9fdd321cce93b525f4439dd94696bf56ac13a0a2aad1e6bcf444711e941d7217138d20ae0500145f815439cc14e697ad201df728ea4ccad4ac +331aa03a7aacde10760bf4ee12bbf73c77cdcbf1796f26f0dd255d2407e1ac41 +d27489a69d6b69c6a841468b46720b75ad65650700e0c528e7af61e7e3e821b59445c44b69831ebc9deaf0e3aecc14b7a1c2e18bc1fa42a59219f1e36f236e3d6c89114b1f231999c3dbce6b43f3e2918fcb85575941a9d1e65c86aa08e6eea86cc66ce90e5e4add57f2585e +7b1c0b5203cfc46868d6e3c0d66db79174e7091e32e307679732da062e440e41dabd36a161b611a7e4523a49694026206803dbfd5be5c5fe433f0f18a40057db6f1302848c8da4a10a7f14c6 +3d512806362b1be092ad5dbd36d75fe63e4cae2ba9b72390f580cac344a08bdf6eb9e36ec45bad2a0b82829a72e0efa2d87332c482196e690361168271c55053341ab3 +end +/sc {60 45 {abs exch abs 2 copy add 1 gt{1.0 sub dup mul exch 1.0 sub dup mul add 1.0 sub}{dup mul exch dup mul add 1.0 exch sub} +ifelse}setscreen} bind def statusdict begin product(LaserWriter II)anchorsearch end +{pop pop/letter [/letter load /exec load /sc load /exec load]cvx def/legal [/legal load /exec load /sc load /exec load]cvx def/a4 [/a4 load /exec load /sc load /exec load]cvx def/b5 [/b5 load /exec load /sc load /exec load]cvx def +/lettersmall [/lettersmall load /exec load /sc load /exec load]cvx def/a4small [/a4small load /exec load /sc load /exec load]cvx def/note [/note load /exec load /sc load /exec load]cvx def}{pop}ifelse +systemdict/currentpacking known{currentpacking true setpacking}if +/LW{save statusdict/product get(LaserWriter)anchorsearch +exch pop{length 0 eq{1}{2}ifelse}{0}ifelse exch restore}bind def +/LW+{LW 2 eq}bind def +/ok{systemdict/statusdict known dup{LW 0 gt and}if}bind def +ok{statusdict begin 9 sccinteractive 3 ne exch 0 ne or{9 0 3 setsccinteractive}if end}if +/md 270 dict def md begin +/av 0 def +/T true def/F false def/mtx matrix def/s75 75 string def/sa8 8 string def/sb8 8 string def +/sc8 8 string def/sd8 8 string def/s1 ( ) def/pxs 1 def/pys 1 def +/ns false def +1 0 mtx defaultmatrix dtransform exch atan/pa exch def/nlw .24 def/ppr [-32 -29.52 762 582.48] def +/pgr [0 0 0 0] def +/pgs 1 def/por true def/xb 500 array def/so true def/tso true def/fillflag false def/pnm 1 def/fmv true def +/sfl false def/ma 0 def/invertflag false def/dbinvertflag false def/xflip false def/yflip false def/noflips true def/scaleby96 false def/fNote true def/fBitStretch true def +/4colors false def/3colors false def/2colors false def +/wtkey false def +statusdict begin/waittimeout where{pop waittimeout 300 lt{md /wtkey true put}if}if end +wtkey{statusdict begin/setdefaulttimeouts where{pop 0 60 300 setdefaulttimeouts}if end}if +/fg (Rvd\001\001\000\000\177) def +/bdf{bind def}bind def +/xdf{exch def}bdf +/xl{neg exch neg translate}bdf +/fp{pnsh 0 ne pnsv 0 ne and}bdf +/nop{}bdf/lnop[/nop load]cvx bdf +/vrb[ +{fp{fg 6 get 0 ne{gsave stroke grestore}{gsave 1 setlinewidth pnsh pnsv scale stroke grestore}ifelse}if newpath}bind +/eofill load +dup +/newpath load +2 index +dup +{clip newpath}bind +{}bind +dup +2 copy +]def +systemdict/currentcolorscreen known{currentcolorscreen/dkspf xdf/dkrot xdf/dkfreq xdf/dyspf xdf/dyrot xdf/dyfreq xdf/dmspf xdf/dmrot xdf/dmfreq xdf +/dcspf xdf/dcrot xdf/dcfreq xdf}{currentscreen/spf xdf/rot xdf/freq xdf}ifelse +/doop{vrb exch get exec}bdf +/psu{/udf xdf/tso xdf /fNote xdf/fBitStretch xdf/scaleby96 xdf/yflip xdf/xflip xdf +/invertflag xdf/dbinvertflag invertflag statusdict begin version cvr 47.0 ge product (LaserWriter) eq not and end invertflag and {not}if def +xflip yflip or{/noflips false def}if +/pgs xdf 2 index .72 mul exch div/pys xdf div .72 mul/pxs xdf ppr astore pop pgr astore pop/por xdf sn and/so xdf}bdf +/tab{statusdict /11x17 known{statusdict begin /11x17 load end}{statusdict /setpage known{statusdict begin 792 1224 1 setpage end}{statusdict /setpageparams known{statusdict begin 792 1224 0 1 setpageparams end}if}ifelse}ifelse}bdf +/a3Size{statusdict /a3 known{statusdict begin /a3 load end}{statusdict /setpageparams known{statusdict begin 842 1191 0 1 setpageparams end}if}ifelse}bdf +/txpose{fNote{smalls}{bigs}ifelse pgs get exec pxs pys scale ppr aload pop por{noflips{pop exch neg exch translate pop 1 -1 scale}if +xflip yflip and{pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if +xflip yflip not and{pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ppr 1 get neg ppr 0 get neg translate}if} +{noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{translate pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if +xflip yflip not and{translate pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{translate pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate}if}ifelse +wtkey{statusdict/waittimeout 300 put}if +scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy translate .96 dup scale neg exch neg exch translate}if}bdf +/fr{4 copy pgr aload pop 3 -1 roll add 3 1 roll exch add 6 2 roll 3 -1 roll +sub 3 1 roll exch sub 3 -1 roll exch div 3 1 roll div exch scale pop pop xl}bdf +/obl{{0.212557 mul}{pop 0}ifelse}bdf +/sfd{ps fg 5 -1 roll get mul 100 div 0 ps 5 -1 roll obl ps neg 0 0 6a astore makefont setfont}bdf +/fnt{findfont sfd}bdf +/bt{sa 3 1 roll 3 index and put}bdf +/sa(\000\000\000\000\000\000\000\000\000\000)def +/fs{0 1 bt 1 2 bt 2 4 bt 3 8 bt 4 16 bt 5 32 bt 6 64 bt 7 128 bt sa exch 8 exch put}bdf +/mx1 matrix def +/mx2 matrix def +/mx3 matrix def +/bu{currentpoint 4colors{currentcmykcolor}{currentrgbcolor}ifelse currentlinewidth currentlinecap currentlinejoin +currentdash exch aload length fg 5 sfl{1}{0}ifelse put pnsv pnsh +2t aload pop 3a aload pop mx2 aload pop mx1 aload pop mtx currentmatrix aload pop +mx3 aload pop ps pm restore/ps xdf mx3 astore pop}bdf +/bn{/pm save def mx3 setmatrix newpath 0 0 moveto ct dup 39 get 0 exch getinterval cvx exec mtx astore setmatrix mx1 astore pop mx2 astore pop 3a +astore pop 2t astore pop/pnsh xdf/pnsv xdf gw +/sfl fg 5 get 0 ne def array astore exch setdash setlinejoin setlinecap +setlinewidth 4colors{setcmykcolor}{setrgbcolor}ifelse moveto}bdf +/fc{save vmstatus exch sub 50000 lt +{(%%[|0|]%%)=print flush}if pop restore}bdf +/tc{32768 div add 3 1 roll 32768 div add 2t astore pop}bdf +/3a [0 0 0] def +/2t 2 array def +/tp{3a astore pop}bdf +/tt{mx2 currentmatrix pop currentpoint 2 copy 2t aload pop qa 2 copy translate 3a aload pop exch dup 0 eq +{pop}{1 eq{-1 1}{1 -1}ifelse scale}ifelse rotate pop neg exch neg exch translate moveto}bdf +/te{mx2 setmatrix}bdf +/th{3 -1 roll div 3 1 roll exch div 2 copy mx1 scale pop scale/sfl true def}bdf +/tu{1 1 mx1 itransform scale/sfl false def}bdf +/ts{1 1 mx1 transform scale/sfl true def}bdf +/fz{/ps xdf}bdf +/dv{dup 0 ne{div}{pop}ifelse}bdf +/pop4{pop pop pop pop}bdf +/it{sfl{mx1 itransform}if}bdf +/gm{exch it moveto}bdf/rm{it rmoveto}bdf +/lm{currentpoint sfl{mx1 transform}if exch pop sub 0 exch it rmoveto}bdf +/fm{statusdict/manualfeed known}bdf +/se{statusdict exch/manualfeed exch put}bdf +/mf{dup/ma exch def 0 gt{fm se/t1 5 st ok ma 1 gt and{/t2 0 st/t3 0 st +statusdict/manualfeedtimeout 3600 put +}if}if}bdf +/jn{/statusdict where exch pop{statusdict exch /jobname exch put}if}bdf +/pen{pnm mul/pnsh xdf pnm mul/pnsv xdf pnsh setlinewidth}bdf +/min{2 copy gt{exch}if pop}bdf +/max{2 copy lt{exch}if pop}bdf +/dh{fg 6 1 put array astore dup {1 pxs div mul exch}forall astore exch pop exch pop exch setdash}bdf +/ih[currentdash]def +/rh{fg 6 0 put ih aload pop setdash}bdf +/dl{gsave nlw pys div setlinewidth 0 setgray}bdf +/dlin{exch currentpoint currentlinewidth 2 div dup +translate newpath moveto lineto currentpoint stroke grestore moveto}bdf +/lin{fg 6 get 0 ne{exch lineto currentpoint 0 doop moveto} +{exch currentpoint/pnlv xdf/pnlh xdf gsave newpath/@1 xdf/@2 xdf fp{pnlh @2 lt{pnlv @1 ge +{pnlh pnlv moveto @2 @1 lineto pnsh 0 rlineto +0 pnsv rlineto pnlh pnsh add pnlv pnsv add lineto pnsh neg 0 rlineto} +{pnlh pnlv moveto pnsh 0 rlineto @2 pnsh add @1 lineto 0 pnsv rlineto +pnsh neg 0 rlineto pnlh pnlv pnsv add lineto}ifelse}{pnlv @1 gt +{@2 @1 moveto pnsh 0 rlineto pnlh pnsh add pnlv lineto 0 pnsv rlineto +pnsh neg 0 rlineto @2 @1 pnsv add lineto}{pnlh pnlv moveto pnsh 0 rlineto +0 pnsv rlineto @2 pnsh add @1 pnsv add lineto pnsh neg 0 rlineto +0 pnsv neg rlineto}ifelse}ifelse +closepath fill}if @2 @1 grestore moveto}ifelse}bdf +/gw{/pnm fg 3 get fg 4 get div def}bdf +/lw{fg exch 4 exch put fg exch 3 exch put gw pnsv pnsh pen}bdf +/barc{/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf +/@6 xdf/@7 xdf/@8 xdf gsave +@5 @7 add 2 div @6 @8 add 2 div translate newpath 0 0 moveto +@5 @7 sub @6 @8 sub mtx currentmatrix pop scale @1{newpath}if +0 0 0.5 @4 @3 arc @4 @3 sub abs 360 ge{closepath}if +mtx setmatrix @2 doop grestore}bdf +/ar{dup 0 eq barc}bdf +/ov{0 exch 360 exch true barc}bdf +/rc{/@t xdf currentpoint 6 2 roll newpath 4 copy 4 2 roll exch moveto +6 -1 roll lineto lineto lineto closepath @t doop moveto}bdf +/mup{dup pnsh 2 div le exch pnsv 2 div le or}bdf +/rr{/@1 xdf 2. div/@2 xdf 2. div/@3 xdf +/@4 xdf/@5 xdf/@6 xdf/@7 xdf +@7 @5 eq @6 @4 eq @2 mup or or{@7 @6 @5 @4 @1 rc} +{@4 @6 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse +@5 @7 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse +@1 0 eq{/@2 @2 pnsh 2 div 2 copy gt{sub def}{0 pop4}ifelse}if +currentpoint newpath +@4 @6 add 2. div @7 moveto +@4 @7 @4 @5 @2 arcto pop4 +@4 @5 @6 @5 @2 arcto pop4 +@6 @5 @6 @7 @2 arcto pop4 +@6 @7 @4 @7 @2 arcto pop4 +closepath @1 doop moveto}ifelse}bdf +/pr{gsave newpath/pl{exch moveto/pl{exch lineto}def}def}bdf +/pl{exch lineto}bdf +/ep{dup 0 eq{{moveto}{exch lin}{}{(%%[|1|]%%)= flush}pathforall +pop grestore}{doop grestore}ifelse currentpoint newpath moveto}bdf +/gr{64. div setgray}bdf +/savescreen{ns not{/ns true def systemdict/currentcolorscreen known{currentcolorscreen/pkspf xdf/pkrot xdf/pkfreq xdf/pyspf xdf/pyrot xdf/pyfreq xdf/pmspf xdf/pmrot xdf/pmfreq xdf +/pcspf xdf/pcrot xdf/pcfreq xdf}{currentscreen/sspf xdf/srot xdf/sfreq xdf}ifelse}if}bdf +/restorescreen{/ns false def systemdict/setcolorscreen known{pcfreq pcrot/pcspf load pmfreq pmrot/pmspf load pyfreq pyrot/pyspf load +pkfreq pkrot/pkspf load setcolorscreen}{sfreq srot/sspf load setscreen}ifelse}bdf +/pat{savescreen sa8 +copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}setscreen exch not{gr}{pop}ifelse}bdf +/sg{restorescreen gr}bdf +/cpat{savescreen 10 2 roll 7 -1 roll sa8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}8 -1 roll sb8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sb8 +exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}9 -1 roll sc8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sc8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}10 -1 roll sd8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sd8 +exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}psuedo1 dsc 4{4 -1 roll 1 exch 64 div sub}repeat setcmykcolor pop pop}bdf +systemdict/setcolorscreen known{/psuedo1 lnop bdf/dsc/setcolorscreen load def}{/psuedo1{16{pop}repeat sa8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}}bdf +/bwsc{setscreen dup gr 0 exch 0 exch 64 exch 64 exch 64 exch}bdf/dsc/bwsc load def +}ifelse +systemdict/setcmykcolor known not{/setcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat setrgbcolor pop}bdf}if +/dc{transform round .5 sub exch round .5 sub exch itransform}bdf +/sn{userdict/smooth4 known}bdf +/x8{3 bitshift}bdf +/x4{2 bitshift}bdf +/d4{-2 bitshift}bdf +/d8{-3 bitshift}bdf +/rb{15 add -4 bitshift 1 bitshift}bdf +/db{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf/@6 @5 @3 4 add mul def +dc translate scale/xdbit 1 1 idtransform abs/ydbit exch def abs def{0 0 1 ydbit add 1 10 rc clip}if +@1 0 eq @1 4 eq or{currentrgbcolor 1 setgray ydbit 0 1 ydbit add 1 2 rc setrgbcolor}if +@1 3 eq @1 7 eq or{1 setgray}{currentrgbcolor 2 index eq exch 2 index eq and exch pop{0 setgray}if}ifelse/@9 @1 0 eq @1 1 eq @1 3 eq or or dbinvertflag xor def/@13 @6 def +@2 fBitStretch or{/@10 @4 x4 def/@11 @3 x4 def/@12 @10 rb def/@13 @12 @11 mul def/@15 1 1 dtransform abs/calcY 1 index def round cvi/@14 exch def +abs/calcX 1 index def round cvi scaleby96 not{1 add}if def/@16 @15 rb def/@17 @16 @14 mul def}if +sn @13 60000 lt and @2 fBitStretch or and{mtx currentmatrix dup 1 get exch 2 get 0. eq exch 0. eq and @17 60000 lt and fBitStretch and{@16 3 bitshift @14 @9 [calcX 0 0 calcY 0 0]{@17 string @13 string +currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4 +@10 @11 @12 dup string 5 index @15 @14 @16 dup string stretch}imagemask}{@12 x8 @11 @9 [@10 0 0 @11 0 0]{@13 string +currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4}imagemask}ifelse}{@5 3 bitshift @3 4 add @9 [@4 0 0 @3 0 2]{currentfile @6 string readhexstring pop}imagemask}ifelse +@7 restore}bdf +systemdict/setcmykcolor known{/psuedo lnop bdf/di/colorimage load def}{/routines[{.3 mul add 1}bind{.59 mul add 2}bind{.11 mul add round cvi str exch i exch put/i i 1 add def 0 0}bind]def +/psuedo{/i 0 def 0 exch 0 exch{exch routines exch get exec}forall pop pop str}bdf/bwi{pop pop image}bdf/di/bwi load def}ifelse +/cdb{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf +systemdict/setcmykcolor known not{dc}if translate scale /@6 xdf +/@18 @5 dup 60000 ge{pop 60000}if string def @6 not{/str @18 0 @18 length 3 idiv getinterval def}if @4 @3 8 [@4 0 0 @3 0 0]@6{{currentfile @18 readhexstring pop}image}{{currentfile @18 readhexstring pop psuedo}false 3 di}ifelse @7 restore}bdf +/wd 16 dict def +/mfont 14 dict def +/mdf{mfont wcheck not{/mfont 14 dict def}if mfont begin xdf end}bdf +/cf{{1 index/FID ne{def}{pop pop}ifelse}forall}bdf/rf{/@1 exch def/@2 exch def +FontDirectory @2 known{cleartomark pop}{findfont dup begin dup length @1 add dict begin +cf{/Encoding macvec def}{Encoding dup length array copy/Encoding exch def +counttomark 2 idiv{Encoding 3 1 roll put}repeat}ifelse +pop +exec currentdict end end @2 exch definefont pop}ifelse}bdf +/bmbc{exch begin wd begin +/cr xdf +save +CharTable cr 6 mul 6 getinterval{}forall +/bitheight xdf/bitwidth xdf +.96 div/width xdf +Gkernmax add/XOffset xdf Gdescent add/YOffset xdf/rowbytes xdf +rowbytes 255 eq{0 0 0 0 0 0 setcachedevice} +{Gnormsize dup scale +width 0 XOffset YOffset bitwidth XOffset add bitheight YOffset add +setcachedevice +rowbytes 0 ne{ +XOffset YOffset translate newpath 0 0 moveto +bitwidth bitheight scale +sn{ +/xSmt bitwidth x4 def +/ySmt bitheight x4 def +/rSmt xSmt rb def +rSmt x8 ySmt true +[xSmt 0 0 ySmt neg 0 ySmt] +{rSmt ySmt mul string CharData cr get +1 index bitwidth bitheight rowbytes rSmt tso smooth4} +}{rowbytes 3 bitshift bitheight 4 add true +[bitwidth 0 0 bitheight neg 0 bitheight 2 add] +{CharData cr get} +}ifelse +imagemask +}if +}ifelse +restore +end end +}bdf +/bb{.96 exch div/Gnormsize mdf 2 index +/Gkernmax mdf 1 index/Gdescent mdf +3 index div 4 1 roll +2 index div 1. 5 2 roll +exch div 4 1 roll +4 array astore/FontBBox mdf +}bdf +/cdf{mfont/CharData get 3 1 roll put}bdf +/bf{ +mfont begin +/FontType 3 def +/FontMatrix [1 0 0 1 0 0] def +/Encoding macvec def +/MFontType 0 def +/BuildChar/bmbc load def +end +mfont definefont pop +}bdf +/wi LW 1 eq{{gsave 0 0 0 0 0 0 0 0 moveto lineto lineto lineto closepath clip stringwidth grestore}bind}{/stringwidth load}ifelse def +/aps{0 get 124 eq}bdf +/xc{s75 cvs dup}bdf +/xp{put cvn}bdf +/scs{xc 3 67 put dup 0 95 xp}bdf +/sos{xc 3 79 xp}bdf +/sbs{xc 1 66 xp}bdf +/sis{xc 2 73 xp}bdf +/sob{xc 2 79 xp}bdf +/sss{xc 4 83 xp}bdf +/dd{exch 1 index add 3 1 roll add exch}bdf +/smc{moveto dup show}bdf +/ndf2{udf{dup /FontType get 0 eq{/FDepVector get{dup /FontType get 0 eq{ndf2}{dup /df2 known{begin df2 0 null put end +}{pop}ifelse}ifelse}forall}{/df2 known{dup begin df2 0 null put end}if}ifelse}{pop}ifelse}bdf +/kwn{FontDirectory 1 index known{findfont dup ndf2 exch pop}}bdf +/gl{1 currentgray sub setgray}bdf +/newmm{dup /FontType get 0 eq{dup maxlength dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall currentdict end +dup /FDepVector 2 copy get[exch 6 index exch 6 index exch{newmm 3 1 roll}forall pop pop] put dup +}{/mfont 10 dict def mfont begin/FontMatrix [1 0 0 1 0 0] def +/FontType 3 def/Encoding macvec def/df 1 index def/df2 1 array def/FontBBox [0 0 1 1] def/StyleCode 2 index def +/mbc{bcarray StyleCode get}def/BuildChar{exch begin wd begin/cr exch def/cs s1 dup 0 cr put def df /MFontType known not{ +df2 0 get null eq{df dup length 2 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall +/StrokeWidth nlw 1000 mul pys div ps div dup 12 lt{pop 12}if def/PaintType 2 def currentdict end +/q exch definefont df2 exch 0 exch put}if}if mbc exec end end}def end mfont}ifelse +3 index exch definefont exch pop}bdf +/mb{dup sbs kwn{0 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf +/mo{dup sos kwn{2 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf +/ms{dup sss kwn{4 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf +/ou{dup sos kwn{mfont/df2 known{mfont begin df2 0 null put end}if 3 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf +/su{dup sss kwn{mfont/df2 known{mfont begin df2 0 null put end}if 5 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf +/ao{/fmv true def ou}bdf/as{/fmv true def su}bdf +/vo{/fmv false def ou}bdf/vs{/fmv false def su}bdf +/c{currentrgbcolor dup 4 1 roll eq 3 1 roll eq and/gray xdf}bdf +/bcarray[{/da .03 def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth +cs 0 0 smc da 0 smc da da smc 0 da moveto show}bind dup{/da 1 ps div def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth +cs 0 0 smc da 0 smc da da smc 0 da smc c gray{gl}{1 setgray}ifelse da 2. div dup moveto show}bind +{df setfont gsave cs wi grestore setcharwidth c gray{gl}{currentrgbcolor 1 setgray}ifelse cs 0 0 smc df2 0 get setfont +gray{gl}{4 1 roll setrgbcolor}ifelse 0 0 moveto show}bind +{/da 1 ps div def/ds .05 def/da2 da 2. div def df setfont gsave cs wi 1 index 0 ne{exch ds add da2 add exch}if grestore setcharwidth +cs ds da2 add .01 add 0 smc 0 ds da2 sub translate 0 0 smc da 0 smc da da smc 0 da smc c gray{gl}{1 setgray}ifelse da 2. div dup moveto show}bind +{/da .05 def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth c cs da .01 add 0 smc 0 da translate +gray{gl}{currentrgbcolor 1 setgray 4 -1 roll}ifelse 0 0 smc gray{gl}{4 1 roll setrgbcolor}ifelse df2 0 get setfont 0 0 moveto show}bind]def +/st{1000 mul usertime add dup 2147483647 gt{2147483647 sub}if def}bdf +/the{usertime sub dup 0 lt exch -2147483648 gt and}bdf +/6a 6 array def +/2a 2 array def +/3q 3 array def +/qs{3 -1 roll sub exch 3 -1 roll sub exch}bdf +/qa{3 -1 roll add exch 3 -1 roll add exch}bdf +/qm{3 -1 roll 1 index mul 3 1 roll mul}bdf +/qn{6a exch get mul}bdf +/qA .166667 def/qB .833333 def/qC .5 def +/qx{6a astore pop +qA 0 qn qB 2 qn add qA 1 qn qB 3 qn add +qB 2 qn qA 4 qn add qB 3 qn qA 5 qn add +qC 2 qn qC 4 qn add qC 3 qn qC 5 qn add}bdf +/qp{6 copy 12 -2 roll pop pop}bdf +/qc{exch qp qx curveto}bdf +/qi{{exch 4 copy 2a astore aload pop qa .5 qm newpath moveto}{exch 2 copy 6 -2 roll 2 qm qs 4 2 roll}ifelse}bdf +/qq{{qc 2a aload pop qx curveto}{exch 4 copy qs qa qx curveto}ifelse}bdf +/pt{currentpoint newpath moveto}bdf +/qf{/fillflag true def}bdf +/ec{dup 4 and 0 ne{closepath}if 1 and 0 ne{0 doop}if grestore currentpoint newpath moveto/fillflag false def}bdf +/eu{currentpoint fp{0 ep}{grestore newpath}ifelse moveto/fillflag false def}bdf +/bp{currentpoint newpath 2 copy moveto}bdf +/ef{gsave fillflag{gsave eofill grestore}if}bdf +/sm{0 exch{@1 eq{1 add}if}forall}bdf +/lshow{4 1 roll exch/@1 exch def{1 index wi pop sub 1 index sm dv 0 @1 4 -1 roll widthshow}{1 index wi pop sub +1 index dup sm 10 mul exch length 1 sub add dv dup 10. mul 0 @1 4 -1 roll 0 6 -1 roll awidthshow}ifelse}bdf +/setTxMode{sa 9 2 index put exch not{3 eq{1}{0}ifelse setgray}{pop}ifelse}bdf +/SwToSym{{}mark false/Symbol/|______Symbol 0 rf 0 sa 6 get 0 ne{pop 1}{sa 7 get 0 eq{pop 2}if}ifelse +sa 1 get 0 ne/|______Symbol +sa 4 get 0 ne{vs}{sa 3 get 0 ne{vo}{fnt}ifelse}ifelse}bdf +/mc{0 3 1 roll transform neg exch pop}bdf +/ul{dup 0 ne sa 2 get 0 ne and{gsave 0 0 +/UnderlinePosition kif{mc}{ps -10 div}ifelse/UnderlineThickness kif{mc}{ps 15 div}ifelse +abs setlinewidth neg rmoveto +sa 4 get 0 ne{gsave currentlinewidth 2. div dup rmoveto currentpoint newpath moveto +2 copy rlineto stroke grestore}if +sa 3 get sa 4 get or 0 ne{gsave currentrgbcolor dup 4 1 roll eq 3 1 roll eq and{gl}{1 setgray}ifelse 2 copy rlineto stroke grestore rlineto strokepath nlw pys div setlinewidth}{rlineto}ifelse +stroke grestore}{pop}ifelse}bdf +/sgt{2 copy known{get true}{pop pop false}ifelse}bdf +/kif{currentfont dup/FontMatrix get exch/FontInfo sgt{true}{currentfont/df sgt +{dup/FontInfo sgt{3 1 roll/FontMatrix get mtx concatmatrix exch true}{pop pop pop false} +ifelse}{pop pop false}ifelse}ifelse{3 -1 roll sgt{exch true}{pop false}ifelse}{false}ifelse}bdf +/blank/Times-Roman findfont/CharStrings get/space get def +/macvec 256 array def +/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI +/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US +macvec 0 32 getinterval astore pop +macvec 32/Times-Roman findfont/Encoding get +32 96 getinterval putinterval macvec dup 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 +{}mark true/Courier/|______Courier 0 rf +{/Metrics 21 dict begin/zero 600 def/one 600 def/two 600 def/three 600 def/four 600 def/five 600 def/six 600 def/seven 600 def/eight 600 def +/nine 600 def/comma 600 def/period 600 def/dollar 600 def/numbersign 600 def/percent 600 def/plus 600 def/hyphen 600 def/E 600 def/parenleft 600 def/parenright 600 def/space 600 def +currentdict end def currentdict/UniqueID known{/UniqueID 16#800000 def}if/FontBBox FontBBox 4 array astore def}mark true/Helvetica/|______Seattle 1 rf +/oldsettransfer/settransfer load def +/concatprocs{/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}def +/settransfer{currenttransfer concatprocs oldsettransfer}def +/PaintBlack{{1 exch sub}settransfer gsave newpath clippath 1 setgray fill grestore}def +/od{(Rvd\001\001\000\000\177) fg copy pop txpose +1 0 mtx defaultmatrix dtransform exch atan/pa exch def +newpath clippath mark +{transform{itransform moveto}}{transform{itransform lineto}} +{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform +{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}} +{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put +10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if +statusdict/processcolors known{statusdict begin processcolors end dup 4 eq{/4colors true def pop}{3 eq{/3colors true def}{/2color true def}ifelse}ifelse}{/2colors true def}ifelse}bdf +/cd{}bdf +/op{/sfl false def systemdict/currentcolorscreen known{dcfreq dcrot/dcspf load dmfreq dmrot/dmspf load dyfreq dyrot/dyspf load +dkfreq dkrot/dkspf load setcolorscreen}{freq rot/spf load setscreen}ifelse savescreen +/ns false def/pm save def}bdf +/cp{not{userdict/#copies 0 put}if ma 0 gt{{t1 the{exit}if}loop}if{copypage}{showpage}ifelse pm restore}bdf +/px{0 3 1 roll tp tt}bdf +/psb{/us save def}bdf +/pse{us restore}bdf +/ct 40 string def +/nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if} +forall clip newpath moveto}def +/kp{ct 0 2 index length 2 index 39 2 index put getinterval copy cvx exec mx3 currentmatrix pop}bdf +/av 70 def +end +LW 1 eq userdict/a4small known not and{/a4small +[[300 72 div 0 0 -300 72 div -120 3381] +280 3255 +{statusdict/jobstate (printing) put 0 setblink +margins +exch 196 add exch 304 add 8 div round cvi frametoroket +statusdict/jobstate (busy) put +1 setblink} +/framedevice load +60 45{dup mul exch dup mul add 1.0 exch sub}/setscreen load +{}/settransfer load/initgraphics load/erasepage load]cvx +statusdict begin bind end readonly def}if +md begin/bigs[lnop userdict/letter known{/letter load}{lnop}ifelse userdict/legal known{/legal load}{lnop}ifelse userdict/a4 known{/a4 load}{lnop}ifelse userdict/b5 known{/b5 load}{lnop}ifelse +lnop lnop lnop /tab load/a3Size load]def +/smalls[lnop userdict/lettersmall known{/lettersmall load}{userdict/note known{/note load}{lnop}ifelse}ifelse +userdict/legal known{/legal load}{lnop}ifelse userdict/a4small known{/a4small load}{lnop}ifelse +userdict/b5 known{/b5 load}{userdict/note known{/note load}{lnop}ifelse}ifelse lnop lnop lnop /tab load/a3Size load]def end +systemdict/currentpacking known{setpacking}if +/checkload{{currentfile eexec} {/junk save def/mystring 65000 string def +/endexec (e%endeexec) def{currentfile mystring readline not{stop}if endexec eq{exit}if}loop junk restore}ifelse}bind def +ok userdict/stretch known not and checkload +373A767D4B7FD94FE5903B7014B1B8D3BED02632C855D56F458B118ACF3AF73FC4EF5E81F5749042B5F9CF1016D093B75F250B7D8280B2EACE05A37037F7BDF6E12226D7D4E2DF2C52FAFD5FD40FE72A0D3AC4BD485D8369D4C87636E920D1DAF222D92155A9CB1667E715F0B82799B37CC8F5B32B74B39CF494536DC39C7EF04A7BCB29E2CEC79073CADCCFB23B4AA1363F876F5121B618071B7B4EB1E5DE75FAA2368A3E5DB2B198623AFE92AE9484270FE7F57A850E88C0D3EEA156611C91D8E480D4370B025CCA6929A2BF40AD3D01B2CB7EE6DFB46E12A830542337F7819B67F9765210F76DB06F34DA5B13A11759305C582E16D2B854939F6D9121F2A4F285282F5DCD3D15896D121E3D6F5BE79E087451BB0ED233CDBEF090D3B4AC2DC34B97E70C61D95FB072B8C12D2ABD843520949A39DCF99E2C1AA8FBCD025E47E0A82A8D96E75BAF40F52AD402495BBD4DE0F356C8B14E764874E639C9F045A0D1908EC6456EB6C5B8A6F826192F767EF2C55A21C58F5F9CC1F59247B55F2387828C7FE89D5E7D8484D1BC86CB6673BDBE4FE17DD9BDE95224FE645136F41330BF155A4DDE1B0A32233BF471CE58FBC660DC7E641B0A0D30018454E2191C414A3011FF3FED1C0D88FE1FF9F75DCC456D097947226FBEC92509146D3A4CFFC0471B31C53222ED9DD88566F60F6C0D705AD79DACF53B070026F083ED28B5CF757AAA0A169F6F320A75E9D2ED50ABD939AF85B6346C2ADB25D168F10508E1516D194C635E6B187FADEA0829DBF0390C0F003F0265E215BC96CA3CC13D4A8E01570BE193CA75A620728CD275ACF1986EFFB3A13419FE55EA7C4467B7E7EEDC1FC29C9F8C46A557D2CCDB914EF7B93E7530D555DFC2398AFC68CAD991F062EF85BAA1884EC166C7C5DF8543666D8C41BE267D706BD1588F1F662F705CAE4D29DC38EF66BFAA89470D8A099B6F1B4587F7B024412276106FCD3EB5AE17A5D1DF1781992DC40EA0A992F706F701304CEA9D9073E7A74F1E687D81C3E5841D31CF86855BAAAD9B5D30317C75150A857C6B114735315CDD1AEF36C26BBB0645499406DEE2F24B3B1C72FEC97C7BA31AA2CDAB25418BB1DC4C7E4757F1D625087B0FD0300C03A65F2A72CE734925735277E034CDCF599129679F70CC8B66E03878851DB75041F275E1E5761F3EC753BE1359CA364A22047AE4886217F9259FE19FF5B116E8019B98B143114B313E8BEF87EC949D85C82E0812E6F50525E73890AF362CC8EE8A85F4197E6AC18638EF12E56A808D439AF1BFD363F140314BF4E534485C42F1856688CC35288E8D770120A420FB9F1FCF8AE8BD6D6156CC23E6C51119FE4DE1B68C9DF3487E9974BF9ED31F8D3CE93FF101867319F2FF492D5D398B4F09A66F2F55BCAB34B99173B7EE89039D00DD21A7B3A52E9F028F8301B5FC12D409412E064513BC579AAC498F577EA8ECD1FE3E42DC3CC320786C7B00194FEDF344402C33FC492D4BA86992B01683F440220FFE756BC88A94223D316078D69D33560E8EAB76B24CB7AA4320CF435593D76F624324ABE00B5587A4F283C725EA24567133F25F472B5E2E4474DDB5A16AC5F2DF32350395D3E3892FE361F4D5C9A610C654C9227614FBBAFF3356A90A2266E00F66234061075491571A65616211257F160000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +e%endeexec + +ok userdict/smooth4 known not and checkload +F94E00EE41A71C59E5CAEED1EDBCF23D1DBA1EE99B9BB356492923BD8B1BA83A87CEB0E07377A31FD6241E814681118E17DC7CACE570399506E6E441B871B6043831BD03EFC11DBBD8001EE2FF8CFBD485065D455A2E15AC36F1A84AD8789FA6461199C7CD14CB9FD64D4B06452B7FC0A8FC263F70F1CCB893295D4DE70ADAB771C0F84396FA98C60B11DA02ABA157298DF0A23621853BEF167443A985ADC09BEFFD51CB4D29179E2B34609EF38A49DA61F4BFC256A3DE0732D7D29754A194857B9C9E9971227AA1DD0611FBB10E44E5FF66C062D9C24ED3290529330BC317825E876929582DB0E39B9FC5EFD20CC1D4F94920EB9C534D0DA90DE70D25BC7287319CF28602B3F46633C242CAFC8905E960317E3C2FA20AB8DB06ADBAF292FC7BA2CA14EE65DF28B99CC11666B70AD33E8E1D57D63D4B89ECC615AE5747C1CA752C833D8D6DE54CD4A0350B44310555CE3BD2C615ADD27B634CDB350AF3A432CE78AACD2909A5B586F666CD87919A36DB1CBE86B3CE281DFD01CD7E1B8A18A4B415CECBFF79A5C4390A15EA77D14D6BE12BAB5A8268C3F286D0590060647CABED674443CD258F11415E866AB330A251691B61F2422A61AFE59B6B4FBDCF85ED9BA0F8E483C034089E6877FF5923698D3A0DC0EED6B9CFD32DF0839BC4EA5F6D1FCB6DD0920391E57E84745131D02D100179F4E0A68EC0A5FF6680A6F463D038B04AF63FFA13D743B995A26A743C26D387209023C91DE43DF047A16F328AC9DDC08573B38BE9EA341EA16C78EC32F3A1B36B90D95A50610F4D050EC1C33497F3F3A81A1B4C8BEF0BA84EE2FAA32DC112DAC490AF53E1749C4A0D866CAF7B893E52383B0D38065C333FB122B700D7246F7EE87D942AE3DB5C1DD77E9E76C80CC5AD63D28DFED0E229CE604673F78CD47F258FDF5BF3A3EAEC5C9BC8E482D8DBA9D268A35DA8C095A690679ED2123E8B8F5E4826FA3B199EAA5D482D4B6AA86572E387CECEB7149C8947F41D6339328A748A17F8C4AD3B0555F1E409450BA0C564F1F488BB5096EB003568D4D5EF6489897E27409547D0EE4487D30184793B0F27BD265A64BDB3EA6761569DA955620C612E718677B77D6D81B999C6298877AFE0D1D6F6F358377A8BD2402F669C64B972B3A065EF7DD4BDEFFFE17E63DB8898FA6E69166B710AAD6BA2EA9AF61E4B8C8701638D4D6E4DFFFC192AEF6BC027095C4C72D748979675BA29FAF61E75343E14E61034602E5A79CD2519796ED6A9CC4EDEA46A9B59D4A807E786B5EE46F25B0360BC8E7C12D723122CDEEF247C9776F4C99C8EBED6828AA19744B5ADF0D07D95D98B3072372388D41B0FAB1CCE2775170679575ECDCA13B22A17FE9C6605C3445F58F1A829512DAB6C528F83580C8AA53C35D605F626F5AD0B7FC1EA87D69A835E3F53A1F450FB0AF42A5772F89D92A50D10F15BDBDA409F50C0B8AB93FE8A16D029DD8BB5C480D1466735ED4D9CAF637E5ECD6C2ECB6BF3B3EFBEE7AB936D2C568E3009D156B87CACB1FB3A48A70BC91B2EC35CC9147FFB1A524E2B2F2E4E2C1B12F1C1C63768BB95CD62FEC01CBA79B9FA282DD4DF49990F27FF8EE4E2DDE2F0ACD83BC9D4BE0090192C7A799967EC4DC2D63C0835E22D4C4B366D7FDCF3A05A4B53DF780F986EF25C79B665D5C00EFF7F17C0BB6D544F9D83A7FDAC47D9C5683A656011374253C918FF6EA64749DD971B2300DD5320033E01EC591F6318CCE94CE2B81C04322EC52B624E50643B52391CCD2AB56396A2AD8E2D3CA61B80D9D4CC363B2DF7863526958CDF3497E36648406C317E58EC563E7C26149A2A3C643ADFB39A8DD92974C6D2A2A9D7B71CDF3FEBBF32BB02E7B45CF53AAEAD5E963A4AA4AF9A149A08A4EC303D5F2369977E93F54897EEAD31B06C5845D63F49D65F8E5573962241A57CCD717CE6CA8C784A11192943616EA059B51BC38429E18D0121FCBB6FBD5D909B0D89E616C66DEF6A0F165A7030BD911A1B120468329CBB006C8D37720E531CF31E878CB4AAAC137633675C3D546F5162487AB35F470C042BDEB945E0F2532BF92AA6FD53434440221ECD3533A7AA89900CB19EFE2CD872DF8B7969AF0D3B72BF31DC5DD69CA6460966F61AB17CB507964098DBA3AF122EEC3128A9BAFE1034493F372B36BD1351205E9043A67C544402D8BCE24358C8A5CE33867A00794CF7097D59C88279A11EE9C854E7E7AAE881F9828C569D208F5F33375F59E9A3818CFA38AAD0CBFBA32F9F44A8BB79DE4C40E3886457C16DA4A27953AA1E99472E35F2323F0BAA5E37DC28CBA46FEFB73B190016055ADD4D27615D748499A0E1C4B8C7EC339C1C4D95A813A85918A8D01EEB485DDCDCEA6EA3F2C2A9D85C139CD90CCB352634F9AFE836BCAC0C274E352BA2071B5269D5DE4CCDE3FF990CBA974980C7332AE1545A9C60D5D1459D3AE95C1AC065733AF14FADB440A110DD539563B8D850CD0704C52F3F7CCCB53630D776560CBD22D8FF08F5B354487A171AEC15F5F54DE9CAB668BCAC573E788D92762EF63E76087005F4AC2D02E0CAC173C11BE62ACE5DC4D3374F2F9746C9981E125FF9AB8CAE76D13039E2C54DFD708E028A619EA1ED78E6B46F06DF0D0B74BBEDD8C190C7C0CEBDE8F7A4888CC36575313478DD2CFE392E9BB7B2416955D44B7024A3BA43FBF37293B386D64746D7748895411D243FAEC50638F2AA33337D7FA018ADDAC5835A0DDFAE99AD6299DFB4CA6872C59853E3AC12FC9E3D26629C5B49CF844C87B3C4BFBE3074E3A1CE6984758C20C661084381CD6B4582D84F19C0000B5FC0DCB42B567E396031601C095D7016283EBE5F13CD8A3A374A74DDBBABD36081149F8BC242085F2F7297CC97FD3B8BAD206D8AC9707A39ECCC7963B522E08DA391A1EF12DD4D746DBDDDCC0834F88160CF189A9645567CEC2F023A571AF0DFD15DB85B744C28C000DF53B05F8F210841F6E87A04F20C777B7C0BE6182BE2E90226E5301A12532A745F2FAAA81637CF11B78CD2B99A4D18B862D6C5DBD31793FB16A2D9AAD376D4484D75AA833D0068B1D34DB74E3302480854E3B5484D8A47E39A89A2FA927BC3641EA7F8E004FDE4C2F08D40D99F1ACB47CAF6887629BF6DFE12968D297596D28CE0CF148B12E7DCB49FB94F5ADBD214C3A6CE1E249831BA9EB8A189F2CE1ABE39A7B537253E369A508A2AF2ADB9463F9B56BBBFF31D535FF997F537C6675C196E7ECBD493F652FA7CC6D9C1CA3379BFDB5AF7513C6E834054494296B91A6EE800114363D5D5D0759F41B4DECB653B9DE3E94583579EF549ED5F3FAFB12661ABC0C57A332406517ED3454EDED34B386C60F78DC976266E0EAF54FC245FB0E3EFC8016236436B599C1C97A8C5E0AC8F7836161873C71F01ED9CC25C236420F41FD8277993D3959205912FA0927B59E3DAE7377D82079447D6E41EE5AEC0DFFF79AF8F4ED47F17EE708FEA45877860D56F8CBCE65A061E8E1CA4A5FBAF0E13429A7F0ADB6F178FA449F46CC539BBC0107E3A53B1C362A04B20E6D721E7E6E1E4976A11DDC98C7614D22B53DFBB6DAE533AC9BE882021A735C30DAA4A44AED09F49A390E8CFF59BD9C30667AF21B03EC5CEBD5C2C3AA2769E8D714191A48E7DDF50B13D1560E82EFB65FCE601AE9E8C351FBA1DED80B7351314E7F9F9A784BFE3759B7E322A84E7B51F9DC5F5D9C8050CD79B27C0A4B0DD68A3C27A948AD6858E35B960D2DEA838C479CAEA83B1A912174ACB2100E55E7A14892D7A9B3711FF0B20065C1995B49E1F23464A92DD140642E3A7B1973849E64D1A3CF60000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +e%endeexec +%% TJD hacks 6/91 to get lprep 70 and psfig to work with pageview: +md begin +/nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if} +forall % clip +newpath moveto}def +end +%%EndProcSet diff --git a/graphics/psfig/unsupported/macdemo/macdemo.tex b/graphics/psfig/unsupported/macdemo/macdemo.tex new file mode 100644 index 0000000000..70fd42c7d3 --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/macdemo.tex @@ -0,0 +1,19 @@ +\documentstyle[psfig]{article} +\psfigurepath{macfigs:figs} +\special{header=lprep68.pro} +\begin{document} +This is a rosette and some MacDraw output: + +\centerline{\psfig{figure=rosette.ps,height=2in}\hspace{.25in} + \psfig{figure=macdraw.fig68,height=2in}} + +This is what hacking Mac Postscript is like: + +\centerline{\psfig{figure=bullet.fig68,height=2in}} + +And now a graph: + +\centerline{\psfig{figure=dave.fig68,height=2in,clip=}} + +Thats all folks. +\end{document} diff --git a/graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.bb b/graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.bb new file mode 100644 index 0000000000..e58060028b --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.bb @@ -0,0 +1,2 @@ +%! +%%BoundingBox: 0 500 500 800 diff --git a/graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.gz b/graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.gz new file mode 100644 index 0000000000..a6212406f8 Binary files /dev/null and b/graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.gz differ diff --git a/graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.bb b/graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.bb new file mode 100644 index 0000000000..c4708324c1 --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.bb @@ -0,0 +1,2 @@ +%! +%%BoundingBox: 80 280 460 600 diff --git a/graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.gz b/graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.gz new file mode 100644 index 0000000000..343ee798ce Binary files /dev/null and b/graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.gz differ diff --git a/graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.bb b/graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.bb new file mode 100644 index 0000000000..e58060028b --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.bb @@ -0,0 +1,2 @@ +%! +%%BoundingBox: 0 500 500 800 diff --git a/graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.gz b/graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.gz new file mode 100644 index 0000000000..bb04bed03a Binary files /dev/null and b/graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.gz differ diff --git a/graphics/psfig/unsupported/macdemo/stripfonts.awk b/graphics/psfig/unsupported/macdemo/stripfonts.awk new file mode 100644 index 0000000000..b3ddd748af --- /dev/null +++ b/graphics/psfig/unsupported/macdemo/stripfonts.awk @@ -0,0 +1,5 @@ +BEGIN {p = 1} +$1 == "%%BeginFont:" { p = 0 } +{ if (p==1) print $0 } +$1 == "%%EndFont" { print "bn"; p = 1 } +$1 == "%%EndFont:" { print "bn"; p = 1 } diff --git a/graphics/psfig/unsupported/psfig-li.pro b/graphics/psfig/unsupported/psfig-li.pro new file mode 100644 index 0000000000..167e31a02a --- /dev/null +++ b/graphics/psfig/unsupported/psfig-li.pro @@ -0,0 +1,100 @@ +%! +% Psfig/TeX Release 1.2 +% dvi2ps-li version +% +% All software, documentation, and related files in this distribution of +% psfig/tex are Copyright 1987, 1988 Trevor J. Darrell +% +% Permission is granted for use and non-profit distribution of psfig/tex +% providing that this notice be clearly maintained, but the right to +% distribute any portion of psfig/tex for profit or as part of any commercial +% product is specifically reserved for the author. +% +% +% $Header: figtex.pro,v 1.5 87/07/24 20:14:50 trevor Exp $ +% $Source: $ +% +%/TeXscale { 65536 div } def +%/psfts { S 65781.76 div N } N +/TeXscale { 65781.76 div } def + +%/DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap +%currentlinejoin currentdash currentgray currentmiterlimit ] cvx def +% +% Since dvi2ps has an initgraphics at the beginning of texpre.ps, we can +% assume: +gsave initgraphics +/DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap +currentlinejoin currentdash currentgray currentmiterlimit ] cvx def +grestore + +/startTexFig { +% usage : x y bb-llx bb-lly bb-urx bb-ury startFig + /SavedState save def + userdict maxlength dict begin + currentpoint transform + + DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap + setlinewidth setmatrix + + itransform moveto + + /ury exch TeXscale def + /urx exch TeXscale def + /lly exch TeXscale def + /llx exch TeXscale def + /y exch TeXscale def + /x exch TeXscale def + + currentpoint /cy exch def /cx exch def + + /sx x urx llx sub div def % scaling for x + /sy y ury lly sub div def % scaling for y + + sx sy scale % scale by (sx,sy) + + cx sx div llx sub + cy sy div ury sub translate + + /DefFigCTM matrix currentmatrix def + + /initmatrix { + DefFigCTM setmatrix + } def + /defaultmatrix { + DefFigCTM exch copy + } def + + /initgraphics { + DocumentInitState setmiterlimit setgray setdash + setlinejoin setlinecap setlinewidth setmatrix + DefFigCTM setmatrix + } def + + /showpage { + initgraphics + } def +% /erasepage and /copypage added for MatLab support (tli) + /erasepage { + initgraphics + } def + /copypage {} def + +} def +% Args are llx lly urx ury (in figure coordinates) +/clipFig { + currentpoint 6 2 roll + newpath 4 copy + 4 2 roll moveto + 6 -1 roll exch lineto + exch lineto + exch lineto + closepath clip + newpath + moveto +} def +% doclip, if called, will always be just after a `startfig' +/doclip { llx lly urx ury clipFig } def +/endTexFig { + end SavedState restore +} def diff --git a/graphics/psfig/unsupported/psfig-li.tex b/graphics/psfig/unsupported/psfig-li.tex new file mode 100644 index 0000000000..4255bc3199 --- /dev/null +++ b/graphics/psfig/unsupported/psfig-li.tex @@ -0,0 +1,391 @@ +% Psfig/TeX Release 1.2 +% dvi2ps-li version +% +% All software, documentation, and related files in this distribution of +% psfig/tex are Copyright 1987, 1988 Trevor J. Darrell +% +% Permission is granted for use and non-profit distribution of psfig/tex +% providing that this notice be clearly maintained, but the right to +% distribute any portion of psfig/tex for profit or as part of any commercial +% product is specifically reserved for the author. +% +% $Header: psfig.tex,v 1.9 88/01/08 17:42:01 trevor Exp $ +% $Source: $ +% +% Thanks to Greg Hager (GDH) and Ned Batchelder for their contributions +% to this project. +% +\catcode`\@=11\relax +\newwrite\@unused +\def\typeout#1{{\let\protect\string\immediate\write\@unused{#1}}} +\typeout{psfig/tex 1.2-dvi2ps-li} + +%% Here's how you define your figure path. Should be set up with null +%% default and a user useable definition. + +\def\figurepath{./} +\def\psfigurepath#1{\edef\figurepath{#1}} + +% +% @psdo control structure -- similar to Latex @for. +% I redefined these with different names so that psfig can +% be used with TeX as well as LaTeX, and so that it will not +% be vunerable to future changes in LaTeX's internal +% control structure, +% +\def\@nnil{\@nil} +\def\@empty{} +\def\@psdonoop#1\@@#2#3{} +\def\@psdo#1:=#2\do#3{\edef\@psdotmp{#2}\ifx\@psdotmp\@empty \else + \expandafter\@psdoloop#2,\@nil,\@nil\@@#1{#3}\fi} +\def\@psdoloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else + #5\def#4{#2}\ifx #4\@nnil \else#5\@ipsdoloop #3\@@#4{#5}\fi\fi} +\def\@ipsdoloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil + \let\@nextwhile=\@psdonoop \else + #4\relax\let\@nextwhile=\@ipsdoloop\fi\@nextwhile#2\@@#3{#4}} +\def\@tpsdo#1:=#2\do#3{\xdef\@psdotmp{#2}\ifx\@psdotmp\@empty \else + \@tpsdoloop#2\@nil\@nil\@@#1{#3}\fi} +\def\@tpsdoloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil + \let\@nextwhile=\@psdonoop \else + #4\relax\let\@nextwhile=\@tpsdoloop\fi\@nextwhile#2\@@#3{#4}} +% +% +\def\psdraft{ + \def\@psdraft{0} + %\typeout{draft level now is \@psdraft \space . } +} +\def\psfull{ + \def\@psdraft{100} + %\typeout{draft level now is \@psdraft \space . } +} +\psfull +\newif\if@prologfile +\newif\if@postlogfile +\newif\if@noisy +\def\pssilent{ + \@noisyfalse +} +\def\psnoisy{ + \@noisytrue +} +\psnoisy +%%% These are for the option list. +%%% A specification of the form a = b maps to calling \@p@@sa{b} +\newif\if@bbllx +\newif\if@bblly +\newif\if@bburx +\newif\if@bbury +\newif\if@height +\newif\if@width +\newif\if@rheight +\newif\if@rwidth +\newif\if@clip +\newif\if@verbose +\def\@p@@sclip#1{\@cliptrue} + +%%% GDH 7/26/87 -- changed so that it first looks in the local directory, +%%% then in a specified global directory for the ps file. + +\def\@p@@sfile#1{\def\@p@sfile{null}% + \openin1=#1 + \ifeof1\closein1% + \openin1=\figurepath#1 + \ifeof1\typeout{Error, File #1 not found} + \else\closein1 + \edef\@p@sfile{\figurepath#1}% + \fi% + \else\closein1% + \def\@p@sfile{#1}% + \fi} +\def\@p@@sfigure#1{\def\@p@sfile{null}% + \openin1=#1 + \ifeof1\closein1% + \openin1=\figurepath#1 + \ifeof1\typeout{Error, File #1 not found} + \else\closein1 + \def\@p@sfile{\figurepath#1}% + \fi% + \else\closein1% + \def\@p@sfile{#1}% + \fi} + +\def\@p@@sbbllx#1{ + %\typeout{bbllx is #1} + \@bbllxtrue + \dimen100=#1 + \edef\@p@sbbllx{\number\dimen100} +} +\def\@p@@sbblly#1{ + %\typeout{bblly is #1} + \@bbllytrue + \dimen100=#1 + \edef\@p@sbblly{\number\dimen100} +} +\def\@p@@sbburx#1{ + %\typeout{bburx is #1} + \@bburxtrue + \dimen100=#1 + \edef\@p@sbburx{\number\dimen100} +} +\def\@p@@sbbury#1{ + %\typeout{bbury is #1} + \@bburytrue + \dimen100=#1 + \edef\@p@sbbury{\number\dimen100} +} +\def\@p@@sheight#1{ + \@heighttrue + \dimen100=#1 + \edef\@p@sheight{\number\dimen100} + %\typeout{Height is \@p@sheight} +} +\def\@p@@swidth#1{ + %\typeout{Width is #1} + \@widthtrue + \dimen100=#1 + \edef\@p@swidth{\number\dimen100} +} +\def\@p@@srheight#1{ + %\typeout{Reserved height is #1} + \@rheighttrue + \dimen100=#1 + \edef\@p@srheight{\number\dimen100} +} +\def\@p@@srwidth#1{ + %\typeout{Reserved width is #1} + \@rwidthtrue + \dimen100=#1 + \edef\@p@srwidth{\number\dimen100} +} +\def\@p@@ssilent#1{ + \@verbosefalse +} +\def\@p@@sprolog#1{\@prologfiletrue\def\@prologfileval{#1}} +\def\@p@@spostlog#1{\@postlogfiletrue\def\@postlogfileval{#1}} +\def\@cs@name#1{\csname #1\endcsname} +\def\@setparms#1=#2,{\@cs@name{@p@@s#1}{#2}} +% +% initialize the defaults (size the size of the figure) +% +\def\ps@init@parms{ + \@bbllxfalse \@bbllyfalse + \@bburxfalse \@bburyfalse + \@heightfalse \@widthfalse + \@rheightfalse \@rwidthfalse + \def\@p@sbbllx{}\def\@p@sbblly{} + \def\@p@sbburx{}\def\@p@sbbury{} + \def\@p@sheight{}\def\@p@swidth{} + \def\@p@srheight{}\def\@p@srwidth{} + \def\@p@sfile{} + \def\@p@scost{10} + \def\@sc{} + \@prologfilefalse + \@postlogfilefalse + \@clipfalse + \if@noisy + \@verbosetrue + \else + \@verbosefalse + \fi + +} +% +% Go through the options setting things up. +% +\def\parse@ps@parms#1{ + \@psdo\@psfiga:=#1\do + {\expandafter\@setparms\@psfiga,}} +% +% Compute bb height and width +% +\newif\ifno@bb +\newif\ifnot@eof +\newread\ps@stream +\def\bb@missing{ + \if@verbose{ + \typeout{psfig: searching \@p@sfile \space for bounding box} + }\fi + \openin\ps@stream=\@p@sfile + \no@bbtrue + \not@eoftrue + \catcode`\%=12 + \loop + \read\ps@stream to \line@in + \global\toks200=\expandafter{\line@in} + \ifeof\ps@stream \not@eoffalse \fi + %\typeout{ looking at :: \the\toks200 } + \@bbtest{\toks200} + \if@bbmatch\not@eoffalse\expandafter\bb@cull\the\toks200\fi + \ifnot@eof \repeat + \catcode`\%=14 +} +\catcode`\%=12 +\newif\if@bbmatch +\def\@bbtest#1{\expandafter\@a@\the#1%%BoundingBox:\@bbtest\@a@} +\long\def\@a@#1%%BoundingBox:#2#3\@a@{\ifx\@bbtest#2\@bbmatchfalse\else\@bbmatchtrue\fi} +\long\def\bb@cull#1 #2 #3 #4 #5 { + \dimen100=#2 bp\edef\@p@sbbllx{\number\dimen100} + \dimen100=#3 bp\edef\@p@sbblly{\number\dimen100} + \dimen100=#4 bp\edef\@p@sbburx{\number\dimen100} + \dimen100=#5 bp\edef\@p@sbbury{\number\dimen100} + \no@bbfalse +} +\catcode`\%=14 +% +\def\compute@bb{ + \no@bbfalse + \if@bbllx \else \no@bbtrue \fi + \if@bblly \else \no@bbtrue \fi + \if@bburx \else \no@bbtrue \fi + \if@bbury \else \no@bbtrue \fi + \ifno@bb \bb@missing \fi + \ifno@bb \typeout{FATAL ERROR: no bb supplied or found} + \no-bb-error + \fi + % + \count203=\@p@sbburx + \count204=\@p@sbbury + \advance\count203 by -\@p@sbbllx + \advance\count204 by -\@p@sbblly + \edef\@bbw{\number\count203} + \edef\@bbh{\number\count204} + %\typeout{ bbh = \@bbh, bbw = \@bbw } +} +% +% \in@hundreds performs #1 * (#2 / #3) correct to the hundreds, +% then leaves the result in @result +% +\def\in@hundreds#1#2#3{\count240=#2 \count241=#3 + \count100=\count240 % 100 is first digit #2/#3 + \divide\count100 by \count241 + \count101=\count100 + \multiply\count101 by \count241 + \advance\count240 by -\count101 + \multiply\count240 by 10 + \count101=\count240 %101 is second digit of #2/#3 + \divide\count101 by \count241 + \count102=\count101 + \multiply\count102 by \count241 + \advance\count240 by -\count102 + \multiply\count240 by 10 + \count102=\count240 % 102 is the third digit + \divide\count102 by \count241 + \count200=#1\count205=0 + \count201=\count200 + \multiply\count201 by \count100 + \advance\count205 by \count201 + \count201=\count200 + \divide\count201 by 10 + \multiply\count201 by \count101 + \advance\count205 by \count201 + % + \count201=\count200 + \divide\count201 by 100 + \multiply\count201 by \count102 + \advance\count205 by \count201 + % + \edef\@result{\number\count205} +} +\def\compute@wfromh{ + % computing : width = height * (bbw / bbh) + \in@hundreds{\@p@sheight}{\@bbw}{\@bbh} + %\typeout{ \@p@sheight * \@bbw / \@bbh, = \@result } + \edef\@p@swidth{\@result} + %\typeout{w from h: width is \@p@swidth} +} +\def\compute@hfromw{ + % computing : height = width * (bbh / bbw) + \in@hundreds{\@p@swidth}{\@bbh}{\@bbw} + %\typeout{ \@p@swidth * \@bbh / \@bbw = \@result } + \edef\@p@sheight{\@result} + %\typeout{h from w : height is \@p@sheight} +} +\def\compute@handw{ + \if@height + \if@width + \else + \compute@wfromh + \fi + \else + \if@width + \compute@hfromw + \else + \edef\@p@sheight{\@bbh} + \edef\@p@swidth{\@bbw} + \fi + \fi +} +\def\compute@resv{ + \if@rheight \else \edef\@p@srheight{\@p@sheight} \fi + \if@rwidth \else \edef\@p@srwidth{\@p@swidth} \fi +} +% +% Compute any missing values +\def\compute@sizes{ + \compute@bb + \compute@handw + \compute@resv +} +% +% \psfig +% usage : \psfig{file=, height=, width=, bbllx=, bblly=, bburx=, bbury=, +% rheight=, rwidth=, clip=} +% +% "clip=" is a switch and takes no value, but the `=' must be present. +\def\psfig#1{\vbox { + % do a zero width hard space so that a single + % \psfig in a centering enviornment will behave nicely + %{\setbox0=\hbox{\ }\ \hskip-\wd0} + % + \ps@init@parms + \parse@ps@parms{#1} + \compute@sizes + % + \ifnum\@p@scost<\@psdraft{ + \if@verbose{ + \typeout{psfig: including \@p@sfile \space } + }\fi + % + \special{ pstext="\@p@swidth \space + \@p@sheight \space + \@p@sbbllx \space \@p@sbblly \space + \@p@sbburx \space + \@p@sbbury \space startTexFig" \space} + \if@clip{ + \if@verbose{ + \typeout{(clip)} + }\fi + \special{ pstext="doclip \space"} + }\fi + \if@prologfile + \special{psfile=\@prologfileval \space } \fi + \special{psfile=\@p@sfile \space } + \if@postlogfile + \special{psfile=\@postlogfileval \space } \fi + \special{pstext=endTexFig \space } + % Create the vbox to reserve the space for the figure + \vbox to \@p@srheight true sp{ + \hbox to \@p@srwidth true sp{ + \hss + } + \vss + } + }\else{ + % draft figure, just reserve the space and print the + % path name. + \vbox to \@p@srheight true sp{ + \vss + \hbox to \@p@srwidth true sp{ + \hss + \if@verbose{ + \@p@sfile + }\fi + \hss + } + \vss + } + }\fi +}} +\def\psglobal{\typeout{psfig: PSGLOBAL is OBSOLETE; use psprint -m instead}} +\catcode`\@=12\relax + -- cgit v1.2.3