diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/halftone |
Initial commit
Diffstat (limited to 'fonts/halftone')
-rw-r--r-- | fonts/halftone/blurb.txt | 30 | ||||
-rw-r--r-- | fonts/halftone/boat.tex | 873 | ||||
-rw-r--r-- | fonts/halftone/halftone.mf | 45 | ||||
-rw-r--r-- | fonts/halftone/halftone.tex | 264 | ||||
-rw-r--r-- | fonts/halftone/mandy.tex | 574 | ||||
-rw-r--r-- | fonts/halftone/picture.tex | 69 | ||||
-rw-r--r-- | fonts/halftone/pix.tex | 326 | ||||
-rw-r--r-- | fonts/halftone/pixkit.post | 1817 | ||||
-rw-r--r-- | fonts/halftone/texpic.for | 1347 | ||||
-rw-r--r-- | fonts/halftone/texpic.obj | bin | 0 -> 8738 bytes |
10 files changed, 5345 insertions, 0 deletions
diff --git a/fonts/halftone/blurb.txt b/fonts/halftone/blurb.txt new file mode 100644 index 0000000000..354e2926b0 --- /dev/null +++ b/fonts/halftone/blurb.txt @@ -0,0 +1,30 @@ +This DCL archive contains all the required bits and pieces for preparing +pictures for plotting by TeX. When executed, the archive creates +the following files: + + o BLURB.TXT this file + o HALFTONE.TEX user-level documentation (for LaTeX) + o PICTURE.TEX picture from TeXPIC used by HALFTONE.TEX + o TEXPIC.FOR the software. Note that there are two versions + of TEXPIC in this file, one for VMS and another + which is a little more portable. + o HALFTONE.MF Don Knuth's halftone font + +If you intend to produce pictures of size >= 256 x 256, you'll need to +expand TeX's memory (see my article in TUGboat vol 8 no 3 for more +details). I can supply a TeX change file for VAX/VMS which effects this +change (and provides an editor interface) either by e-MAIL or on tape. +Contact me for more details. + +If you want to use this software, but you're not a TeX guru...find +someone who is! He/she will be able to generate convert the Metafont +source for the halftone font (HALFTONE.MF) to a form acceptible to +TeX, and put it in the right directories for you to use. I can supply +outline help, but the font generation process tends to be horribly +site-dependent. Sorry. + +If you have any trouble with the software, please let me know (it's not +quite the same as the version I use myself). I'm particularly keen +to receive feedback from non-VMS sites. + + `Alien' (ALIEN @UK.AC.ESSEX.ESE on JANET) diff --git a/fonts/halftone/boat.tex b/fonts/halftone/boat.tex new file mode 100644 index 0000000000..37b1bbe7f2 --- /dev/null +++ b/fonts/halftone/boat.tex @@ -0,0 +1,873 @@ + \hbox{\vbox{\halftone\offinterlineskip % machine-generated by TEXPIC. + \hbox{eaec\char94{}`ecZW`\char94{}\char92{}VU\char94{}X]c\char95{}\char92{}`\char92{}`acdghc`hjjjjjkkjdbbbcdddaYTUWZ[ZbdVW]% + `bb``cbbUMLKPUYXPONMNQRQSVVVTVWXXTQQOOOOOOOOPOOPOOPOOOOOOPOOSXSSSPOOQUTTVWWVWVTWWTTVUSQQSRUUVVTUVUSRQQQUVVRPOOOONOOPSSTRONO% + QTVZ]ab\char95{}UTW\char95{}`\char94{}`aa\char95{}\char95{}\char94{}``[]\char95{}``aa`X\char95{}bchfhggiiijjhhfZ\char94{}\char95{}% + `\char95{}a`XQPPPQQQPPPPPPPPPS} + \hbox{]PWQKTX\char92{}KHOHHIMXPWaWPSUWX]\char92{}\char95{}aZT`ddebaehgfggghggigYCD\char94{}cfdde]CCQIT`\char92{}Z`cL?=::@SK% + D=>>>??@??@@??@@A@@@AAA@@@@@AAAB@@@@@@@@@@A@@@@@@@@@@?@@@@@@@A@@@@@@AA@@AA@AAAA@@AAA@AAAAAAA@@A@AAAA@@@ADDAGKOX\char94{}`ed% + XTTYVW`adaaa\char94{}\char94{}\char95{}\char92{}\char94{}\char95{}\char95{}cd\char94{}S]`\char95{}bbd`\char95{}cggehdcf\char92{}% + MFFDLX\char95{}XKAAAA@@????????F} + \hbox{\char95{}SQOLOTYSMOMNSTYNMRLSWTXW[[`a\char95{}\char95{}ccbd\char95{}`cbefhhhggfijdSWhheefffWMI=<L\char94{}aefaYKB;Ebc% + J>=>>>>????????@?@@@@@A@@@@@@@@@@@@@AA@@@@@@@@@@A@A@A@@@@@@AAA@A@A@AAA@A@A@@@@@@@@@@@@@@A@@AA@@@@>A@@@@CJTGEOKS\char95{}aee% + b\char92{}YVWR\char95{}b`\char95{}\char94{}`]\char92{}]Z]\char95{}]\char94{}cbbffdebeabbffgfec]B>????@CMYZNA@@??????>>@R} + \hbox{`TPFHNTTVTXQSV[c]TTTQVWaZ`abdabcbcc\char95{}]cecchghhhghfed`eeeeffge\char95{}HEEI[dgg\char94{}baZFH\char95{}[F==>>>>>% + ??@???@@??@@@@@@@@@@@@A@A@@?@A@@@@@@@@@@@?@AA@@?@?@@@A@@@@@@@A@@@@@@@@@@@AAA@@@AA@@A@A@@@@@?@@@AGYWRSPNW]\char95{}bc```[Ya\char94{}% + \char94{}]\char94{}\char94{}\char94{}]\char92{}\char92{}[\char95{}XKZZ]fgfdhghfbfggeeeY>>>>??@??@GY[MC?????A>?AW} + \hbox{]IKHMTORV]TMPRMY]\char92{}\char92{}Y`Z\char94{}bdecbcaa`\char95{}\char95{}b`V`egcdgehiifhhf]aefgdge\char95{}XZa\char92{}% + N\char92{}debODHa\char94{}PE@===>>>>???@???@??@?@@@@@@@@@@@?@@@@?@@@@?A@@@@@@@@@@AA@@@@@@@@AAAAAA@@@@AA@@@@@@AA@A@@@AAA?@@@% + A@@A?@???@DNZWWKGMR\char95{}a``a\char95{}`\char92{}VWUY\char94{}[[XX\char92{}[`ba``dgedc]TQTbgfhgeeY>>???@???@?@J\char92{}[% + PKONTRHEJW} + \hbox{\char92{}EGQJRTSZ\char95{}XVSQX\char94{}bda\char94{}\char92{}]acdeddbbbZV\char92{}`a\char94{}aefdcigfjeUWdggfffgYeef\char95{}% + eie[WXMQUXELIC=<<==>=>>????????@@@?@@@@@@@@AAAAA@@@@@@@@@?A@@@??@@@@@@???@@?@@@A@A@A@@@@@@@@@@@@@@@A@A@@@@@@@@@@@@@?@@??@DV% + \char92{}XQHFJZbbaaab\char92{}OKNWa\char94{}ZRX]`a[\char94{}]\char92{}edWGIHNBH`cfehecY>>>????>??@@?AO`badebd[[T} + \hbox{cJHUMPZW\char92{}b`SMNR\char95{}ee`XT``aceeda\char95{}YUR\char95{}cd``ehdfhhhgeUYfhjifgffghjihdaVQK?Veb\char92{}\char95{}% + L<:;<==>>??@?@?@??@@@@@?@@@@@@@@@@@@@?@@@@@?@?@????????@@@@???@@@@@@@@@AA@AA@@@@AA@@@AAA@@@AAA@A@@@AAA@@?????BS`VLIICQ\char94{}% + aaba\char95{}YIHFOY\char92{}XQ]\char94{}\char95{}\char95{}XNMIOWJ=@DCBJbdfeedd`H@?>>>?????@@AFUX]\char94{}ddefe[} + \hbox{eZTSGPYYT]ZSRNT\char95{}db`SZ\char95{}[ZcgfeaVHFM[`]afegfgehiigacdhhhefhiiiihhXIFKONeghb]ZC<<<==>=>>????????@?@@??@@@% + @@@A@@@A@?@@@@@@?@@@@@@@@@A@@@@@?@@@@@@@A@AAAA@@@@@@@@@@@@AA@@@@@@@@@?@@A@@@???>?BO]a\char95{}WWTY\char94{}bb`bc]QVUWVRUV]V% + ]WYUD@FHEEC>?>NeefgfedaWZTKB?>>?>?BDEK\char94{}`]\char92{}bebZW\char92{}} + \hbox{e[Y`UT[a\char94{}YOOY\char92{}Z][W]XabY\char92{}affd\char94{}PMHMLKM\char92{}cddegegghhfeefhgfehhhed\char94{}SG@CAJah% + hj\char95{}VaZC;===>=>>????@@?@@@@@@@@@@@@@@A@@A@?@@@?@@??@@@??@@@?@@@@@???@@?@@@@@A@@@@A@A@@@@@@@@@@@@@@@A@@@@@A@@??????BE% + O\char94{}d\char92{}\char95{}`aZW]RS\char92{}]YZ\char92{}VSOS\char92{}OFLSVIA@BFIOC>>=MegefeedW>?EPYYTLABCFPQS\char94{}[TY\char95{}% + `[ICV} + \hbox{g]VHCS\char94{}c\char95{}VJHNX\char95{}YTYbdec`b\char95{}ddd`HB>SREL]cgeeegfgggfedgggbU[hhb`RGAPYF<TgkjiihcJ<;===>>>?% + >??????@@?@?@@@@@?@A@@@@??@??@????@?@@?@@@@@AA@??@@@@@@@@AA@A@@@@@@AA@@@@@@@@@@@@@@@@@@@@@@@A?ACEDAHY\char95{}\char92{}W]`Z% + NPOT]c`YWXYXQVCBHIHCA>=>?DB>>=NdefgcdcX?=>?BCLWYVIFOLGNJVQY\char92{}LDDS} + \hbox{f\char92{}YTPS\char94{}\char94{}\char94{}[QJPXaaZbfdb``b\char95{}cffdTHESZWP]cdedceefdiifYYgc]WK`h`WACGXgXV]fi\char95{}% + Pc\char94{}\char95{}VA<<==>>??????@???@@@@@@@@@@A@@?@@?@@@?@?@@?@?@@??@@?@@@@????@@@A@@@@@@@@@@@@@@AA@@AA?@@@@@@@@@@@@@@BDJ% + FFGHKCCKSGPX`]WTSV]\char95{}`VUXQSTKAAFHJJE>==>?>===PdeeddcbV@=BFGCD?FY`UJHBCCIOVNOYPY} + \hbox{f\char95{}\char95{}UPQOMIMOXWQ]fabeccebadggffa`a`UVKST\char94{}bcefffgiih[K[RH`dgjhgYR\char95{}hegkhe\char95{}TJ`c`]F% + <=<==>=>>?????????????????@???@???@@???@?@@???@???@A@?@@???@@@@@@@@@@@@@@AAA@@@@@@A?@@?@@@@@@@?@@ACHSQHOFCJHF@=BHWXQGJOY]\char94{}% + ]ZXURNE@?DMNRFABCAB====OegfccbdUA=@JQNHBCEJNUWUC=CS]VV``\char95{}} + \hbox{e]\char95{}WUXTJPVUW\char92{}\char92{}[\char95{}bcegdeeacfefcYYW[WZ\char95{}YX`ceeefeghifaMV\char94{}dhihjiighmmhjiZO% + TUEHKKBAB<<==>>>>??????????@?@?@?@@?@@???@@??@???@@?@???@@@@@??@?>????>??@@@@@@@@@@@?@@@@@?@@@@@@@????@??AEJX\char92{}ROGFH% + EA>>?GSQHDGKP\char92{}\char95{}XNZ]QD=;@GZ\char92{}WHBCNI@>===McfffddeYBAFFU\char92{}QPK@;:::HSOT`dbaccb} + \hbox{cSUUSTPHNU[\char95{}b[TYaeehedcccfgfbUQRI@?QZ]Xddd\char94{}bfhhdW\char94{}\char92{}YcggghhgddgkgcceXQYbL==@=LM@==>>>>% + ???????@???@???@@@??@?????@???????@?????@????????>??>@???@@@@@@@A@@@A@@@A@@@A@@?@@?@@@@?AEKT]a\char95{}NJNH@??=?ENUMADIPLNW% + RR\char94{}L=<=CKP]YHEHQSHA<>@Pccedcdc[NRZ\char92{}`c`\char92{}TG?998?DHRbddaaac} + \hbox{`MQUQNKOPX[acaVQ[bdgecbabegfcZXJ?=9>LM\char94{}fdffefiabbf\char95{}QOTRSRW[PKQTGLO\char94{}][SHB:;;=IG>===>?>?>?>>???% + ??????????????????@?@?????@@@@???@?@@@?@@?@?@?@??@@A@@@@A?@?@@@???@?@?@??@??@@@?CGR]\char92{}dcWLUZHD>@EJIUODFNLLIUYT[J=<?G% + WRULDBJY\char95{}QB=BGU\char94{}abecdda]X\char94{}aadba[PH=9;;@Ucb\char95{}YU\char94{}]a} + \hbox{gWUTZRSSKSW\char92{}Yca[T\char92{}bfdc`\char94{}bbefd`]VGA:>?R]`aefdhfLN\char95{}bTLD@;:<>C??MF@K\char95{}]]E;;:;;<<=% + >===>>?>????????????@?@????????@?@@@@???@????@?????@@@?@??@?@?@@?@@?@@@@@@?@@@@@@@@@@?@?@@@@@@@@@FR`]Z\char95{}OKX]ZIAAFOFT% + PIKCGUJQWUIA==BFSYOLB>CW]NEACMVW[]bcddaa]]`cdedYZXG@@DL`ec\char94{}MM]Z\char92{}} + \hbox{\char92{}BIY[\char95{}\char92{}XTV\char94{}YXcc]]T\char95{}`aa]]bedge\char95{}[ZH?9;BCI\char92{}[\char94{}deiia`\char95{}% + `E<P]PEBIIEKc\char95{}Ybgi]D;;AB=;<<==>>>>>????>???>>??>?????????????@@?@???@??@?@@????@@@@@@?@?@@@@@@@>?@A@@@@@@A@@@@@@@?@% + @@@??@@?@@DIT[OKEDIPNHKGDGEKCFB>DNDBGEE?@EKKOZYHA@BNNDHJEP[\char94{}]\char95{}\char95{}cbc\char95{}\char92{}\char92{}\char92{}% + \char94{}addccc\char95{}OHFQZbdcaUS[a\char95{}} + \hbox{ZBZ\char95{}\char94{}c\char95{}[T\char94{}`X\char92{}fgffbca[XS`ceegfd`\char92{}[NIII@M\char92{}bddff`[chg[NDHPY`[TT\char94{}% + jjjfheUMQISTB<<<====>>>>>>??>???????????@????????@@@@@@???@@@@?????@@@??@@@??@@?????@@@@@@@?@@@@@?@@@@@@@@??@??A@?DGIC@?@@B% + CFOSSJIIEC>=@C>=>BFGKONQWPLIKKIIHBNRGHQ\char94{}``abba]VY\char92{}\char95{}bdddfeaRNSY\char92{}cccabaab`} + \hbox{\char94{}T`Y\char95{}e`THR`dddfgd`b`\char95{}`[`cfeegcacc\char95{}]S><O`fhdddXPcgegbNADT\char94{}]bMIb\char95{}\char95{}% + Vaj`\char94{}g\char95{}b`J=<<=>>>>???>>?????@????@?????????????@?@@??????@??@@@?@?@@?@?@@?@@@@@?@@@@@@@@@@@@@@A@@@A@A@?@A@@% + @@??ADD@????@@?F]`XKDEG>>BEBA>CGHT[RSYPCBRWSNFAMXUKR[\char94{}\char95{}`ba`\char95{}Z]\char94{}a`bccbb]NZ\char95{}]]Z`cccca% + a]} + \hbox{bY`VZec\char92{}W\char92{}`\char94{}acgb\char92{}YYY\char92{}\char95{}bcccfegccdcb`TIGTdfedcc]HKdfgh`RYcZ`ggV`W\char92{}% + XWfhgehVG>;<<<==>>>>>>>>?>?????????@??@@@?@??@?@@@???????@@?@?@@@@A????@@@@@@@??@@@@@?@?@@@@@@@@@@@@@@@AA@@@@@@@@@@@@@????B% + QXXJ@AA>@FOTICHLFTVNQ\char92{}SIJUYTKGBJR\char94{}ZTX\char94{}]\char95{}a\char92{}[\char92{}Y]\char94{}`bbba\char94{}\char92{}% + YZ`abYRVWVbcc`\char95{}} + \hbox{aS]VV`]\char95{}[\char95{}Z\char95{}ccbXX[b\char94{}\char94{}abbbfdfgc`a\char94{}`caaT\char92{}dddeefc\char95{}X\char95{}% + ffijga\char94{}cfifYdNIICMNJPSJ@<<<===>>??>?@?????????@@@?@@???@@???????????????A@???????@?????@@@??@@?@@@?@@?@@@@@@@?@@@@@% + @A@@AA@A@@@@@@A@@?@@?>BEHJD>??>AEQ`WFHE@INRYMOMNYYVSQILV]TRY\char94{}YTTVWTQZY]aaaaZ]\char95{}[\char95{}a\char94{}XUSSZdceb% + a} + \hbox{\char94{}FPRWTQZVVVSW\char94{}]QJS\char92{}\char95{}`dedbeeeeaa``\char95{}]U\char95{}cddeefhgihghfhgjjdZcjhbgiP>8899;% + :>=;<<====>>>>>>>>>??>???@@@??@???@?@@??@?@@??????>?@??@@?@@@@?@@@?@?@@@@@@@@@@@?@@@@@????@@@@?@@@@@A@@@@@@@@@@@@@@?>?@@@>>% + >?AEGM\char92{}YRLDDFDEIOROQZ[OPYVOX[ONY]\char92{}TQVWSNYYZaabb\char95{}\char95{}YQT[\char95{}\char94{}\char92{}YW\char95{}% + `cedc} + \hbox{\char95{}OJOTHNWMZZHOYVLPNO]`bcdbdgd`[aadec`bdefdcdfhfhiiiijghgdgkh\char95{}Zg\char95{}@888=I?<;<<=<===>>?>????>?????% + @@?>@@?????@?@@??@@?????????????@???@@????????@@@@@??@????@@@@?@@@@@@@@@A@@@A@@A@@@@@@A@@@@?@@?????>?BHUQSSYSJJCBEDKKZXV]XI% + N[TRWSNUVYYNRWZ]YQZ\char95{}`a`a\char94{}TQT]ba`\char92{}VW\char92{}\char94{}dda} + \hbox{\char92{}TTIKNRZJMWSJQULRXY[a`aabbcd`\char94{}bccdcddcefdddghgejkhhiggijiid\char92{}JZ[B@A>K\char94{}O?;;<<===>>>?>>>% + >>>>>>?????>???@?>???@???????????@??????@?@@@?@??@@??@@@@??@@@@??@@@@@?@?@?@@@@@A@@@@@@@@@@@@@?@@@@??????>?>?ADT\char94{}NP% + \char92{}\char95{}ZSNFJKMTRXXW[KQ]QNNMNVSSWVRX\char92{}\char95{}\char95{}\char92{}[`beca\char95{}W[\char94{}\char95{}`baa]V% + YX`cb} + \hbox{ZWa[[ZY\char95{}ZRSYMUTMWYX\char92{}\char95{}\char94{}]X\char95{}cbbdabcedceecdgfgghheijmiijjiilmkhf\char94{}fgTMWG]e% + S@;;<<==>>>>>>?>>?>>>????@@?@@?@@????@@@@?@??@??@@???@??@@?@@??@??????@???@?@?????@@@??@??@@@??@@@@@@@@@@AAA@AA@@@@@@@@@???% + ?@AFO`XHN\char94{}]VRRV]XYRTZ\char95{}]WY]YLNMLWYUTVZ[ZY\char92{}[\char92{}\char95{}abdc]Z\char94{}]]\char95{}aab\char95{}\char94{}% + ]\char92{}Zab} + \hbox{]Q][W]QR][YWSQNDKZ\char95{}\char95{}\char92{}XX\char92{}\char94{}ccab`accbcbdegedeggggjhlihkhjjljjiijjkgecegUA::;<<==% + >>>?????>>??>????????>???????????????????????????????@?????@????@???@@@????@@@?@?@?@@@?@@@A@AA@@@A@@@@@@@@?@@?????????AHONP% + PZ`VKIS`a\char94{}XUY\char92{}W[`baYPNRV[ZZZ\char92{}\char95{}TITWY[\char95{}bcbaa`aa\char94{}abcddc\char92{}T`a} + \hbox{\char95{}PUVSSRRWWUROOKMS\char95{}bZTOW`bbbbbabcddcbgeheddfhhiihiijjiikjhkijjkhgcgkjZHC;;;<<===>>>>>>?>>>>??????>????% + ?@??@@@????????@@@??@????@??@@@@???@?@@?@@????????????@??@@@???@?@@@@@@A@@@@@@@@@@@?@??????????@CHFHV`XIIS\char92{}a\char95{}% + YWX\char92{}WW[\char95{}`\char92{}WQWY\char94{}\char92{}\char92{}[W\char92{}YTRUX\char95{}a`abbbbdc\char92{}`bbbcb[R[\char94{}% + } + \hbox{\char92{}MNTVJPORTRTXQTV[]`]YT[\char95{}dbc`ba``c`\char94{}\char94{}faebdeghhihffiiihgkklljgjihhihkkhgO>;;<===>>>>>?>% + >>>>?>?@@?????????@???????????????????????????@?@????@?????@?@???@?????@@@@@@@@@@@AA@@@A@@@@A@@@@@?>??@????>???>@C>AR[PGNST% + ZUKQX]\char94{}[[aXNQXXSX\char92{}\char92{}Z\char92{}\char94{}WT[[\char94{}`a`a\char95{}\char95{}\char95{}bcdbcabbba\char94{}% + WU]} + \hbox{`TLSYPMTRRSPQS\char92{}c`]]\char95{}\char92{}]bcbb`bab`bbcacedcadefhgfegfhhhggjlljjimkhjkjijjiS=::;<===>>>>>>>>>>>>??% + ???>?>???????>????>?>?>???????????@@?@?@??@????@@@?@@@???????????@??@@@@@A@@@@@@@A@@@@@@@????????????=>>>><?ELEBDELRVNLTZWT% + PWUOV\char92{}[UZ]Z]\char94{}\char95{}WT[\char94{}\char95{}\char94{}YZaba`baadac\char95{}]YW\char92{}]\char92{}\char94{}} + \hbox{f\char95{}QLOWTZ]WRYYZ\char94{}a\char95{}b``eabcca\char95{}\char94{}ba\char95{}]`\char94{}\char95{}abcbdddge`dhgeihjh% + hklilikklkjkkdckfE:;;<=<=>>>>???>?????@@???????@@??@????@????????@?@??????????@????@?@????@???>??????????@??@A@@@A@@@AAA@@A% + @@@A@@@@??@?@@?????>>>><=>@A<;<AEPNDIV[\char94{}SLJOUZ\char94{}\char94{}]\char94{}\char92{}\char94{}\char95{}]UIPZ`\char95{}% + MQ\char94{}\char95{}\char94{}aaebd\char92{}ab\char94{}TOW[UX} + \hbox{gbVW]\char92{}\char92{}[[OOQ\char94{}\char95{}\char94{}bdffcdbbc`]WY`aa\char94{}\char94{}aabbbbcedfc\char95{}bhedhihi% + hjhhjkkljkijljfifI<;;<<==>>>>?????????@??????@?????????>??????????@@???????@?@???@@@??@@@@?@@@?@????@@@@?@?@A@@@AAAA@A@A@@A% + @@@A@@@???@@??@????>>==<=<=?=;<DPXUNMQ]\char94{}\char94{}KDEI[a\char95{}ZX]\char95{}\char94{}`XNQY\char94{}]PDL\char92{}ac\char92{}% + Z\char95{}da\char92{}VX[XX\char92{}WV} + \hbox{\char94{}[\char92{}\char95{}\char94{}\char94{}WWRXUY`\char95{}cddefcc`V][]\char95{}[\char95{}aaa\char95{}`bbcbccdefgh% + hgecfhfjge\char94{}eiiijhlkimkljaD;;;<<<===>>>??@???@?@@??>???????@@???????????@@@@????@?@@??@@??>??????@@@??????????@@???@% + @?@@@AAA@@@@@@@@?@@@AAA@@@?@@@@@??>>====<?AFE>AIXZQLNPZ\char94{}\char94{}RFHS[a\char92{}UW]]]\char95{}VNR[\char92{}]PLN[][O% + SP\char92{}dc\char95{}\char95{}\char92{}VWXYV} + \hbox{`\char92{}`\char92{}YXYXRXccb`edd``c`YZSMU]\char94{}`cbabaa`adecffdegjgefehegfc\char95{}eb]SafkjkmmlkS?;;<<===>>>???>% + @??@?????@??@@@??@???????????@????@?????@?????????>??@?@@???@@?@?@@@@@@@??@@@@@@AAAAAA@A@@A@@@@@@A@?@???????>>>====<?EOJFFO% + []XIFKV[XTPVTS\char94{}\char92{}X\char92{}\char94{}\char95{}\char95{}\char95{}\char92{}TWTXXOF?HNRHOQJV\char94{}\char95{}eb% + VUY\char92{}\char94{}} + \hbox{d``]\char92{}Z[`]\char94{}cccdge\char95{}ZXaaZNHMNW`bcaaabbb\char95{}bcdeffeikgghghffhbYNI@@BKdjknnmdJ;:;<<<===>>>>>>% + >==;9::=?@?@@?@@?????????@???@@@??@??>@@???????@@?>=?@???@?@??????@???????@@?>:888<;?@@@@@A@@@A@AAA@@@???????==<?DGAEHOPJKO% + ]`\char95{}VQZ]\char95{}QOZ`\char95{}WZWOX\char92{}`a\char95{}\char94{}WWVVUI?;@BBCLGCDP\char92{}baZMW]`} + \hbox{eba\char95{}]]\char95{}a``b`cfddVKS[\char92{}XOQQNZaa\char95{}a]\char94{}acZW`bdbefeghffegefh`M;:9<ADJV\char94{}\char95{}% + ilk`F;;<<<<=<>>>>>>955444446?>?@A@@???????>????????????????????????????????????@????????????@???=75443448=@AAAA?>?AA@?AA@??% + @???>>==>CJRKLHISTX\char92{}]\char94{}\char95{}a]][`ZZ`\char94{}UTXTW]\char92{}\char95{}\char94{}`ZJIMUZPC>=>>?CGHCM]]\char92{}% + [c`\char94{}\char95{}} + \hbox{c\char95{}\char94{}\char95{}\char92{}[X][\char95{}adcfdfe`XW[]Z[]Y\char92{}a`baabdb]Uaaccdcc`cfdfhecbNOFF?9<>@BMO\char95{}% + ZSM=;;;<<===>>=>>9433433334766>@@@????@>??????????@??@?@?????@??@@@@???????????????@????@@???@?;6444344458?@?<6569=;:;?@@??% + ???=>>@EKIUPYRNQU\char95{}]\char92{}Z\char92{}ab\char95{}Za``[ZHEYY\char94{}\char92{}``aaTBQ]]]\char92{}SDA@>@>@B@JPRYabda`% + } + \hbox{]W\char92{}]\char95{}]ZZ]\char94{}cddfdeaZZU\char92{}\char95{}`X]`aabb`\char94{}`c\char95{}cdbaadaaadcegfhed\char95{}% + R\char95{}]cWC:::;@@A?;>::;<<<===>>==843434333333338=?@@@@@????@??????>????@@????@@@?????>>>?>>?>???????@@????@?@?@?:777434% + 33336<:533335544;@?@????>?DHSXTW]\char94{}\char92{}LOZ\char94{}a\char95{}[Yada``baXSPJ\char92{}Z]]\char92{}Z`cQBPbaYY\char92{}% + G@>?=<<>>EPY\char95{}]ac\char92{}\char92{}} + \hbox{SE\char95{}\char94{}[TVO[]\char95{}cdefbWLUZZ\char94{}[[[\char95{}ab`a\char95{}`ba\char92{}bcb`acccaeggfgfcZced\char95{}% + dfWC:9:<?<;99:;<<<<====>;543343433333333347:>@@??@????????@@?????????????????@?????????????@??@@??@@???A@=;9:74344323343333% + 233335:>>??>>=?FR[\char94{}RX\char95{}`]ZZ\char92{}\char95{}``XW\char94{}c`\char92{}[aaYUX\char94{}a[X[ZZ\char95{}a]OYb\char92{}% + JCIDA?=;;:;=FXRY\char95{}b\char95{}\char92{}U} + \hbox{SE`d\char94{}[[YS[]aZbad]UYZ]\char94{}[\char95{}\char95{}abc``bcbabcba\char95{}bcdccedfebge\char92{}TcgfcbZD999:<:999% + 9:<<<<<<=>>944333443444434343448@@@?@@????????@???@@@@?@?????????>>?????>?@??????????@@?@@@@?>;9643333233333333333334449>??% + =@IU\char94{}b\char95{}\char92{}\char95{}`YZ\char94{}]\char94{}bb]W]ca\char95{}[baa\char94{}PX\char95{}XXZ\char92{}\char92{}% + `aba\char94{}\char94{}UBBBDC<?<;;;<@HNS[\char94{}YON} + \hbox{SFb`V`baT]\char94{}c`X\char94{}dcPNTQXY\char92{}\char95{}`cda\char95{}ccbacd\char95{}abadcdeedcefhdeeefeTYF88889<:889% + 9:<;;<=====833334444344444343335;@?@B??????????????@??????????????>??????????@??????@??@@@??;7544333332333433322223321235<=% + =>FU[\char95{}a[\char94{}\char95{}UY\char95{}\char94{}]bb\char94{}W[\char94{}\char94{}]Y`bbbX]YVVZ`\char94{}\char94{}\char95{}% + cc\char95{}YVLNPNTMD=::=A@@DJURUIF} + \hbox{SGc\char94{}U]`\char94{}U`a\char95{}PY]\char95{}d[LJR]S\char94{}a`aaa\char95{}\char94{}a``bcaccccabdc`\char94{}ceb\char95{}% + ]ac[[OW@87888888889:;;<<<<==<5343344444444445443447?@@??@@????????@???>???????@@@???????????????????????@?@@>84433333332233% + 3333322222221112598<FRZW\char95{}``\char92{}WVX]bcad\char95{}\char95{}abdcc\char95{}cdc`[YYZ[\char95{}``cca\char92{}YLQUGKW% + O@;>CPHCACLKEE@} + \hbox{SHegd`\char95{}\char94{}`\char94{}OHNS[adaTHWb[\char94{}ccbaa\char92{}T]abbcdcccdbdcdcadcXR\char94{}bcQR``\char94{}F<% + :98888:::9;;;;<<<=94343344444445555444457??@@?????????>???>:7668<>>>????>>>>>?????>>????>>????@@@@>743343343332233332222233% + 3952211215HTZXU\char92{}\char94{}Y[VR[a`\char94{}ac\char94{}VW\char94{}baa``bbYW]\char92{}\char95{}baabada\char94{}WQJDDNHD% + FINWSNA>AC@?>} + \hbox{SHehfZY\char92{}`[JCSZ]\char94{}`Z[X\char92{}a[Z`d`cc\char94{}YW\char95{}a`dfbcbecdcda``WQ[`bZIUK]b]TJ<888=HHE99:::;:% + :;63333344444445555554448@@??????>??????<:8754345666;?????>>>??????>????>????>=?@?>7433433333212333322122249B96234247N``YO]% + ]Z[YZY]]a\char94{}]]W[]c[G@E[e]a\char94{}\char92{}`adbabdbaaaWICDFX]\char92{}``\char94{}NCCBB@<=} + \hbox{UJdgbRWaa\char94{}RL\char92{}cda\char94{}WNS\char92{}\char95{}[[`a\char95{}a\char95{}\char94{}QY`ccafccadfddd`WTTW`dc% + R;=>KR[e[C==AP\char94{}cR@9765432543334334444445555665458<?@@@??????????;654444444445:<=???>>?>>?>?>??>>>>><<<<=>?>95434334% + 33311233322122237IP@:9C?GKXbc\char94{}OUZ[]\char94{}\char95{}W]`][US\char95{}b\char95{}\char94{}J?BTdedfd`abcc`acccdb\char95{}% + XXUYccbec`UFEQKD<=} + \hbox{UOdfbSR\char92{}bb[S[[\char92{}YPJGPZ\char94{}\char94{}ab`\char94{}b\char94{}[Y]bdaabccacefedeb][[bb]RG?<?=IQZNTKPhll% + gV;11112224<84333444454555566555558<?@@???>>>>==;854344434444556:>??>>>??>??>>>>?>><:9;<9;99743333433211233232222213G\char92{}% + RNGRRVRY``b]\char92{}SU\char94{}`\char94{}\char94{}X`[Yac\char94{}`\char92{}VCFXge`dfefdecdbaddedac`cadefbb\char92{}XIBEVYD% + <<} + \hbox{TPcdfZMOYb`\char94{}\char92{}OOIDOKMXaaabb``\char95{}\char92{}[Yaccdb\char95{}acddfeggcb\char95{}\char92{}Xb[Z[JBKPSR% + \char92{}ejfhkklleC1367ID56IL833344445565665555544448?@@?>>>>=<;:7544444444344344;??>>?>>>>?<;<>??>=:87:9765544433343335333% + 357922139GX[[YROX[Y[`\char94{}\char94{}ZZUX[][\char94{}\char92{}``X`\char95{}]JHITafeeffefedccdbcde`dfddcdbfid\char92{}SSKH% + KRF=<} + \hbox{TTddf\char95{}JL\char95{}ceb\char94{}QC?JXULVaa\char95{}`aa`\char95{}``\char95{}\char95{}dccb]\char95{}dddffgdddb\char95{}% + UU\char94{}`c]\char92{}\char92{}]E=NgijhjliibE<NZYi\char92{}<;TM8333344566777765655544449>?>>>>>>=::75556444444443346>@????% + ???>>>>>????=;887544444433333<A?53339HM53124BUWV\char94{}VNYXU[]\char95{}YV[ZZX[]\char94{}abYM]a\char92{}\char94{}Y\char94{}% + Ya[dfggdgfeecddccf\char94{}aeeeb\char95{}dehdb\char94{}`\char94{}ZURI?<} + \hbox{RMbdffPUcfeda\char94{}PEHTZY\char92{}\char95{}`\char95{}cac`ab`a\char95{}`b``\char95{}bccffgjfefebbV]\char94{}dfebbWJ% + JZa]affeWIBUighg]ED>33333344467888886765544445:=???=>;::::8666444444454345;@??@?????????>>>>=<:86555444433333:PVB7223;SN833% + 6CKPW\char95{}XNSUST\char92{}\char94{}b]VYROVUY\char92{}\char92{}NGRacb\char95{}QJ]Zdbfiecefefeccddecedd`Z\char94{}chedfdba% + bYA;<} + \hbox{TO]]dh\char95{}[dfe\char95{}ZXUSRU\char92{}b`[UX`acaba``\char92{}\char94{}a\char94{}]acbcdehhfefddfef\char95{}ghighcJ% + ??NRYJB\char95{}bZ`lkXXDNF>54343344446788998898864454455<??@><==>=;865445444444445:>>>????????????>>;9765578544333334@YbL93% + 3:JVT=AFHILITW\char92{}SNUPR`\char95{}]ZYYNJUPMPTIIZaaWTX[Vb`cgeeceefdbPUbcgeff\char92{}a`Y\char95{}dffeb`b`XA:<} + \hbox{XW[]dhf[cc[Z]YUVVW[adbY]`cc`\char95{}`\char95{}a[\char92{}aaa`bcdeegfeficbfegffgkggcP:99>WSCPgill`FEE[F5:H?5444445789% + 9999:::96555544469<?@><<>?=:764554444444557;>????>>???=<=<<:8875455754333335=K[\char94{}K:328MVYMSUPLSNJFTWUVZYa\char94{}WM% + SVTOSUMMX]`f``Z\char94{}ffedcdeeeddfgdec[aehgffeccegeffgfcabX@=B} + \hbox{][]acge\char95{}\char95{}RWbaYWROW]`de`cefeabca`a``aa`beddeffffibbeeee`djjhdRNMENhhSR\char94{}ebXG:=7=64DaP9444455778% + 999:;::965565554447>??===;:865555444544455779=>==;<>=<;::987576654544333234=LT[UB::;=DOPRX\char95{}VRTRJLVRLQVW\char94{}\char94{}% + `YJOVVWXSKKXdeffdd`a]LQ[eeceefggY\char92{}`cfghgffegfdbghghfecXEHR} + \hbox{bV[b`\char95{}]aaW\char92{}cb[\char94{}aYYb\char94{}adcdeffcedc\char95{}]`a\char95{}bcaacdefgadgdddee\char92{}Vbhiihi% + ifeklgSKGRL32@M>;B<NdN64545567777:9:::98776654444447<>><::97766554455445566667:;::;::99:9775444444444432234>R\char92{}\char95{}% + PB9CJHFVFEPb\char95{}SVPJPXULHKR]a`\char95{}UVXV\char94{}][W`cedc\char94{}XRKRE4>WcbffffgfYKTNehggedggfedggggggfbY]`} + \hbox{bWW\char92{}`XX\char94{}]R\char92{}ecb]]\char94{}``[Ydeeeggdfcd\char95{}\char94{}b`accbabccggdefhfhgc\char94{}`acghhk% + hhgig\char95{}L]WC78>[iaR\char95{}ZTF944445667889;99::8766654554444488<<::8767655544555556665578787567779864444434443332224% + :NY]P;59QPEVJHN[abaVTT\char92{}[UORZ\char95{}ba[\char92{}VW[\char94{}\char92{}a`dca[Z]XO><53:Vddeefefg[GZQ\char95{}gfeeeghf% + giigigcfeeadb} + \hbox{dbXVZYZ\char92{}X]cffc\char95{}X`bbabfffffhdfdcbbdbbbbccacefhhfgihhfaaeeehjhjhfieh\char92{}SgfZGS`gjjigS;644445676777% + 78888886665544554445569:::87786555555555666544555776555676433333444433332235<ANPIGJX\char92{}LLNJIR\char95{}c\char95{}RV[ZY% + \char92{}[Z\char92{}`ba``\char92{}[\char92{}`a]SZWXKINICDI<56Pceeedfefb[ceaeba\char94{}aegggghgfgggeeeca} + \hbox{d\char95{}YQUXLTQ\char92{}dedbbc`ccdgeefdffegfd`bdbccaccdcefgfggffeefiffffhjkigjmllhjhgfjhfghRF9444444556677665655676% + 765445555544446876787787766655666676544444554444434333334444444442248BVWHJTU]ULMWRMOYa\char95{}Z[YUX\char94{}`a]\char94{}ac% + cbd`Y`]TUOQWNG>HZ[JDEXdeeededb`]dfadca`c\char95{}dfihggedfheddcb} + \hbox{`Z\char95{}XUSQOL[gfefdc`effd`effhhgegddb`adcbabcfhfgfeggdgefhigZbjjjidkmmkkicO\char95{}jmjjfJ54445554555566655554555% + 55544555555445555567888777655666666654444444433333333343344445:?=333<P\char95{}[G<;P]ZPN\char94{}]SKS\char95{}b\char94{}]ZR% + U\char94{}`c\char94{}\char92{}\char95{}edabc\char94{}ceb`\char94{}\char94{}Y[QHH\char92{}a[TJ\char92{}ddeffgcb\char94{}]\char94{}% + dW\char92{}\char92{}]gd\char95{}]cgfjggefefdeca} + \hbox{[P]SNO]XKXbaefecddheebbegggegecebb`abbbbbggeeeffgggfghhUI\char94{}ikjjikmmkgd\char94{}]blmllkL54445555545565675655545% + 45445665655545455555676667655566767554444444443343333333344434:KGB54>R[]J8<KWWMK\char92{}a\char92{}TO\char95{}\char94{}SXYX% + X[\char92{}\char94{}`bbdeeeedcdeba`bcQNK`d`V\char94{}cefeefccccaZa\char95{}b\char92{}bgdbX\char94{}geedeffhhdfec} + \hbox{bZXINYb\char95{}W]bcaefegfffdacfgdfghgecda]a\char95{}\char95{}`bbeefgeggfhgihifR@TgikkmlmmkjjilklmnmkQ744445555566768% + 87776554555556666665564555555666565556566666544544444433444433334334346E`P88@U\char94{}b\char92{}WLV\char94{}YQOV\char94{}X% + QOWNE@IUNRV\char95{}badecadfacbcc\char94{}]a`VLL]b\char94{}JW``addedebegeegc`deee]aghd\char95{}cfhhgedff} + \hbox{c]VQQadaV]eaZcffeedgddbdefcabfdfdccaa\char95{}abcfegefadhhfijiigffh\char95{}jklgkklkjllmhcjkfX<6444454566667889887665% + 55555676655555555555555555555566667654454444334333433344433446?RV\char92{}HADS\char95{}fgeVL\char92{}V[\char92{}YW]TCJJGG@D% + ?CGQ[[Z\char94{}\char95{}ceca\char94{}b]c\char95{}[\char94{}RZNE\char94{}c\char92{}X[bfedeeddbbacegd\char95{}e[Zbeihfc`eehh% + feefc} + \hbox{aRSVQ\char94{}aaY\char94{}fdefehfededcbbc\char95{}]TY]Z``\char95{}Z\char95{}a`\char94{}dddfgdcebhghihhhh`Vcfefhgihlbk% + kkm\char94{}MZWOI;444445556667788888777877665666655555655545445555555555666654555433434433344444444345:CN]YE>KS`dgd]\char92{}% + R\char94{}c\char92{}VXOCOUWUKD@AGNBV[\char95{}`a\char95{}]\char92{}[YRZUV\char94{}\char94{}`]\char95{}b\char95{}TUXaefeddcd% + e\char94{}EXbeg`cdegehigfbachgdefdc} + \hbox{d[Y\char92{}\char95{}]\char94{}c`\char95{}]aedche\char95{}dedb\char92{}VW\char94{}bZZQAFYNQ`bc`cdbeecdefgfgihhgYLZ]\char95{}% + ZSQ`iikekjkgH6?:54444445455677778888888888887776766556665555545555555655556555445544444444444444444444448@HS>?@HP\char92{}f% + fc\char95{}``aZWYVKQRX]\char94{}KDVZSFW`ac`NCFNQRTKX`\char94{}aaZ\char94{}]\char95{}]\char94{}beeeededdXAZfde\char94{}\char94{}% + dgiffhee`ceggcdffc} + \hbox{a]W\char92{}\char95{}]]a[RS\char95{}edbcfccea\char92{}WPLW\char95{}a\char94{}P?>JOTbebbdcedffeehggihhhggcgeRLH@GXckjj% + jj`8345534454444555778888899888898999898887777765555454555555555555444445544443444344444444444446=?6657:HWdb\char92{}ddYWS]% + [URKYXXSXPMOMXZ\char94{}a\char95{}NRP@>B[a\char95{}dceb[\char94{}XXV]bdddeccddZZ\char95{}d\char95{}\char94{}`\char94{}U\char92{}% + ggihdd\char92{}\char95{}eddefedd} + \hbox{a\char94{}a\char92{}\char95{}ab\char95{}YOJU`d``c`bf\char95{}YWZS\char92{}\char94{}b`N>@PZYaeccadfeddgfgfggfgjjiikhYC% + FICBRgjljh`=B;@83444445555567988889988899999999998788876654555555555455554444445454444444444444444444444457:E@48=N`bY\char95{}% + bcUK[\char95{}]TUWKUQJMQOSULV`VTZ\char95{}MFBIY\char92{}[R]NABFJHRabbcecccca`\char95{}\char94{}\char92{}\char92{}bb\char95{}% + bdgecadbcdcZbeeec} + \hbox{a\char92{}`a``\char92{}ZTTLL]`VOX]bd`\char95{}\char95{}a\char94{}W[\char95{}`XPU]bcabdbcdeefefghjfgjjjjkjjg\char95{}X% + Z]eeVYhjkjbP`YU=53444455655568888899988999999999998888877655555555554555444444444444444443444444444444444447DD667Pd`\char94{}% + `a[\char95{}V[ab\char94{}b]XGGFJMKKNN\char92{}[RTYVD=<J]YJIMB@EHQRX`]\char94{}\char94{}]bbbccac[SW\char95{}a[\char94{}bWVVV% + bfhfddcbdcc} + \hbox{dXUYbb[T]]TNXZYYV\char92{}`\char94{}X[`[\char95{}]\char95{}abca\char95{}\char95{}b\char95{}\char95{}`deeefeeggeghhiji% + jikjjkggjkihfikmlaWce\char94{}G8333344455545678888888888:9::::::::988887766555555555444444455444444444444444334444344343344% + 6?KK95E\char92{}cbWXZZ\char94{}befefcQB:CV[SVSU[[YIBCECGORI>CK>>=ANVPXWTNS]`\char95{}`ace`SLW`cdf]QPP\char95{}gecba`TT\char94{}% + e} + \hbox{cROP[aZV\char94{}aXOYSW\char95{}YNGTOS]\char94{}VQ]d`cba\char95{}`\char94{}`aeffghffghhegiihhjiijkhe\char94{}ikmlllkk% + kgihgX<6B9334445555666788766678999::9::::::9997777765655545554444444454444544444444444443433443344447;>737AI]a\char94{}TL[e% + egdb[I88H[\char95{}]]\char92{}Y\char92{}YI<;@DDEID<:?D><:DXXNTRTMNUYZ]\char95{}ab`\char92{}Y\char92{}]bced]VY`a`bbaea`cd} + \hbox{\char95{}KYVXYNJT[XQKHS\char95{}\char94{}VLVYZ]]LGUbacdca`abbegfgdhhhgghfijikjihbbjijkjllmkkjlkjikdZNXA53445556666777% + 7666667899:::::;;::::98878776555555544544444445444444444444344434444444444444654457K]dg\char95{}HJ\char95{}b\char95{}\char92{}% + ]V=66<K[`\char92{}SNLIA:;FPLLHD<:BE@CHUYV[URUSPQSY]]\char95{}caSU[ddfeWUV\char95{}c\char95{}[b\char92{}\char95{}cdced} + \hbox{bT\char94{}[ZRGIQX\char92{}P@JOV\char95{}WKPXXWYIHQZ\char92{}bdcbcdddeecbhgfgjigighjjkiga[eeiihjilkjjjg`\char95{}kkkf% + L855545569778876666655678899;:::::::::988776544554444444444444444454544444443444443433344444344434:S`Xdh\char92{}JEJIS\char92{}% + PG;56:JRWPKDA<::APZZUG<;CLJNPNVU\char94{}YVVTSSRU\char94{}]X\char94{}]a\char95{}\char92{}adhf\char95{}OJRac```\char94{}cdeh% + b} + \hbox{f\char92{}\char94{}\char94{}UTKQYX[VCLRYZXSNTXYSMNPX\char95{}ccab`afdddadgefffgghggiihhcUHDU`daebhfijaVL]ikliS<>A8446% + 7:8778766666667667889:::::;::::988886555444444444444444455454444444444434444444444444444349PbghgeUOMIVc\char95{}VF==>@GKYVG% + =::=AGVYZPIHHTYVJIW[[[YXUTVYV\char92{}\char95{}][[bdaabfff]UVbbaXZ\char94{}cdffd} + \hbox{c\char94{}\char92{}UYWFT\char95{}\char94{}WYMU\char95{}\char94{}V\char92{}\char92{}VOZ]XQXVZ\char94{}bc]Y\char94{}R``% + [cgghghh[bhggehhhdLE<;<BE>AG]\char94{}XcgbZckmmh`VT\char95{}C7568976676666667766678899999:;::::9998876554444444444444444445% + 44444444444444444444444444444335;T\char95{}ddaQX[NObeePNOOUYHPM@<<?DGISabaZWSTWSKGS\char92{}YVUYTWUZWZ]]SW\char94{}bbb\char92{}% + adda\char94{}[bc`QU]Z`dfc} + \hbox{bVTMPXQQ\char92{}c[PY]YVMEZ\char94{}VY\char94{}]Y]\char94{}][\char92{}`TJ\char92{}PWWTeiiihhffdccdee\char92{}[UMZEA73% + 334<CPcacjgeimmmlje\char95{}OD8667778776666677777778899999;::::::9998776554444444445444445444444444444445444444544444443444% + 7=@O\char95{}`PDUW\char95{}]`e\char94{}a]Z\char95{}bTKKRWRQW]\char92{}Z`ccaVOUYWMJPUUWZ]\char92{}YRX\char92{}]\char92{}RPLM% + X`a\char95{}b`\char92{}]\char92{}[\char92{}\char94{}ab\char95{}\char95{}\char95{}][c[} + \hbox{\char94{}VXRPZSMV``]\char94{}WPJTJ\char92{}`ZV[[Z``ZUW`\char94{}\char95{}P@7@Udffhedb`a`\char94{}acX?75ANA:223456:LUV% + \char92{}hilknonnngbYWB4455799975566667767888989:::::;;:::9:9988766555454444555555555544445554455555555555555544544446@JC?<% + DYb]YYX\char95{}]\char94{}\char92{}[VWTIIA:DP]a\char94{}\char94{}\char95{}\char92{}SMU\char94{}\char92{}VSROORW[\char92{}YU% + W[\char92{}\char92{}UQHANX`\char94{}TYYXXZ[\char95{}bbe\char94{}I@EYL} + \hbox{\char94{}U[SV\char94{}\char92{}MQ\char92{}\char92{}]cVD?R\char92{}]b`\char94{}XWaa`VU\char94{}`edTP@:Wdehicc\char92{}% + @JOOSRC7<=KJD52=74567:=L[R`llnhajk\char95{}[ESL5445466755556666677788889999::::::::9:99887666555554555655655555554455555555% + 55556666666555545559:9BIAIXFGEDMZ`bb`JBPLFDJ\char92{}ccZTY\char92{}XNRZ\char95{}`]ZWMLQSZ\char95{}YUZ\char94{}UG@?@QQ[]FHMQ% + S`\char95{}begkaXNYNQ} + \hbox{bWXIS\char94{}\char95{}ULW[ZUODHY[adedYM\char92{}\char95{}cedddee`aK>[eggicd[@?:3696458IH=CQ[=99766;DTU\char95{}V`iY@% + ITG?<9<4444444445567787676677778899999999999:999887765555555566666666555544555444544556666666666665555556F[R@B=:88@DO``XC?S% + ZZW\char92{}dfd]]``\char94{}RNV\char94{}\char95{}\char95{}]\char92{}QMQV[\char94{}`]\char92{}\char95{}YF:AQ\char95{}]]XLNQW% + X\char95{}\char92{}XWchgfc`VW} + \hbox{cUUZW\char94{}\char95{}SRTWNNUU\char95{}a`becf\char94{}Pacfghfddef`RZ\char94{}effhghe\char92{}XTMA<6676?TNFQdVVOE768F% + JQD<=[ZA=<DRM>:55444444445668876766666666677888887888998887666666656667667766666665555544444455677788777766555567?WcRC848=E% + SX[ZLIR\char95{}\char95{}a\char92{}O`eca\char94{}\char95{}aZ\char95{}UW\char94{}[\char92{}\char92{}]UOV\char92{}\char95{}`]% + \char95{}\char94{}`\char94{}[Z\char92{}abbT=?DLHOSVQEN[eed\char95{}\char94{}\char95{}} + \hbox{\char95{}NOWY\char92{}]PJQOTVVZZ\char94{}bdefgfeeeihhge`dgecbafeeffh\char95{}\char95{}cafd]KBIO\char94{}hdbag\char94{}% + WVG:;9OA:DHDPC7BA9ANSHHC544454444568886766666666655667777777888887776666656667777777777777665555554456678998888876656669=JV% + \char94{}G56@NXY\char94{}]XNW]`QOMXT\char92{}bd\char95{}\char92{}TNVWU[\char92{}ZVWWSYZb\char95{}\char92{}[\char94{}`\char94{}% + \char92{}[\char92{}\char94{}`VSMH;CRB?A@<FNZabQWa} + \hbox{[KRVYU\char94{}VS``\char94{}QK[\char94{}T[ddfghffgffehgcfffdc`bcgefh[GFGchigadgiihiihYFB=AA6<:7<GG;99HE87DEESB5444454% + 4446899666556666656566666666677777766666666666778888999988876666766667789:;;::9:9888777668<FJD;@S[c]T\char92{}]VDKIFPVNKU\char94{}% + ``WJH]VQW]ZVPVZ\char95{}`a\char95{}`\char94{}`\char95{}[WZ\char94{}[]\char95{}a\char95{}U>@SSC>==;?EGP\char92{}]\char94{}} + \hbox{]RZYYQ[`dd`\char95{}\char92{}\char92{}\char95{}b\char94{}]bceghgggffdfe\char95{}dfgfccccgffig\char95{}]\char94{}fiihi% + jijiiijibNL<9956677974449A44568@6444445454455786654455544445555566666666776676655565557889::::::988888889999999;;<<<;;;::;:% + 9::87665899@V`Z`bZ\char94{}L@B??HD;GSNSY\char92{}PN@DKSTZ\char92{}QNW[[\char92{}\char94{}bbba\char92{}Z\char92{}XYZV\char95{}% + dd\char92{}NN\char92{}aYL=;;<=<=CIX} + \hbox{bY\char92{}\char94{}\char92{}ZY[c`\char92{}`\char95{}Ubecaabeeghhihfg\char95{}[agggfecabcegfhighijjkkkjjhikjkifL<@@9:% + ;;96443344444445444444444544444455444444434444444566666667667665554555579::;;;::::::999::::;;<;;;;<<;<;<<;;:;:87655556D\char92{}% + `fgghc\char92{}UDHH?66?YURSMH?>:BMPSZUR[`[Z[\char94{}d``\char92{}Z]\char92{}PNX\char95{}ca]X\char95{}aecWA;;;:99<?B} + \hbox{]Q[b\char95{}PSWW]]dcX\char92{}bbdedgigfihgid]Pafhgeddfcceehihhjjlljjlklhijigff\char92{}W\char94{}bWHSRF8434433344444% + 44444444454544444444444544344434445667767787776655555555678<<<;;<<<;;<<<;<;<<<<<<<<<<<<<<<;;;;:98878=<C[\char95{}\char92{}a% + a\char95{}\char95{}cYABB54:DGMNMNE<@JSTHSZTQU\char92{}[]\char94{}bb`a\char92{}XZYRTZ\char92{}\char94{}\char94{}\char95{}]cd% + ce\char95{}L<<<888::<} + \hbox{`T\char94{}b]VY\char92{}ddcg`OR``bddddW`fdgighgc[hfgdeeddegghiijijlijmlkhklkjjijjgfhO>KM=4444433444444444444445444444% + 4443344444344344444677775566566766666665456;<<<<;<<;;<;<;<<<<<<<<<<<;<<<<<<;<;;::99;ESY`cSVf\char94{}\char95{}eWE=6336?@;NR% + XNGFHM\char92{}TVXSLPTX\char95{}bddc``\char92{}WUY][\char95{}\char95{}`b`cbce`J;7877789;} + \hbox{aY\char95{}]UW]\char95{}ffbec]`cc\char92{}\char95{}acbVaeechhiih\char94{}fghfdefeecegjjjikjiklkjjkkhjikkidff]TOF63444% + 33344544454444444444444344444444444443444556778765554557777777655558;<=<<<<<<<<<<<<<<<<<<<<<;<<<<<<;;;;;;::?BJTYbdfhhd`VG44% + 334?EEWHB@NQBNSQSXRSUZ\char95{}`cebcc\char95{}a\char95{}ZUQSXVV`\char95{}]abaQ?97888899;} + \hbox{dZ\char94{}YVZ\char94{}\char92{}\char95{}a`ffeedd]`dfe]\char95{}ffffghghghgffeceeb\char95{}afjkjijiikkkihkigjikkiiebP% + B83112433334455555555444444444444444444554444444556678998656666888888876665588:<<<<<<<<<<<<<<<<<<<;:::;;;;<;;:;;;;?E@=@F`fg% + eg\char95{}KL732234:@RM:58CMJIRPHNW\char95{}\char95{}bbbab`ba``a\char94{}UJRVIP\char92{}ZM\char92{}`WH:9:=>;899:} + \hbox{g\char94{}`]WZ\char95{}`dc\char95{}dgfecaSVeffbbfgffgf\char95{}ahigfededa\char92{}dfhjjihkihkkjjijfhkimjfhgZ;;>612133% + 33334556665554544455444444444444655545556667899:97777778998999877766569<<<<<<<<<<<<;;;;;;:999999:;;;;;;;;?EPK<<JU\char94{}f% + hYLL<352123=OYC7:EJED>DGLRRZ\char94{}\char94{}\char94{}Z[WU\char95{}]aba]JNXYWQQLNVYMBFJNNLG?<9;} + \hbox{f\char95{}]]\char94{}\char94{}\char95{}ebXV\char95{}bc`\char94{}acbb`]bdggghgf\char95{}]cacedgdc\char95{}Z\char95{}df% + ei`chhjiikkihhhijkfOcibBRQ93:4222234445577776555544444444444444456655545667689::98888888999:::99898767:<<<=<<=<=<<<<;::9:::% + :98888:;;;;;;;=BUcJ@AF]ifSOO<652137IZ\char92{}O<FQULBDEBGMGNVVSTPLJ[a\char95{}aa][[W[[\char92{}QXVT\char92{}ZU\char92{}\char94{}% + a\char95{}YWLD@?} + \hbox{h`bdbdddTEV\char94{}\char92{}]YZbegfc\char92{}\char95{}aghheedWN\char92{}]Za\char95{}egd\char92{}\char94{}ccffhfehhjj% + jjkjihhjjkgagjgcfX;<UH62122344446765667665544444444445556776544577789:;;;:988999::::;;:9999988:<<=<<<<<<<<<<;<;;::;:::999;;% + ;::;;;;=NchbJS\char92{}h\char94{}I\char92{}V?;5339EDRSMMVOLFA?>>HMLKSVSTUOJS`bb`\char94{}\char95{}\char95{}]\char92{}[`]]\char92{}% + ]a\char95{}aa`a\char92{}X[URSQ} + \hbox{e\char95{}dfdefbD7EXU\char92{}[YbcgfdXY`gigggaKWe\char95{}\char92{}abfgdabegiiijkjjijiijkhhjjlkkiggghheZUT=2001234444% + 554455777655554554444456667765457679:;;;;:::99:::;;;<<;;;:::99:<<<<<<<<<<<<<<<<<;;<<;;<;;;;;;:;;;:<CUb\char94{}e\char92{}Pe% + cSIHDH787=FEB>NUULBGJLGKYYRMPVYWXXSV\char94{}baa``\char95{}\char92{}]]``]\char95{}ab`\char95{}``\char92{}[WW]ab\char95{}} + \hbox{V\char92{}egdfgd@:<FNR\char94{}a\char95{}\char95{}\char95{}b\char95{}Y\char92{}ehiggfddfaF;I\char94{}egddegghhifiiihj% + ijikiikkkjklkjjjijh\char92{}:1000013444444444566677666666555556677888767778:;;<;;;;;:;;;;<<<<<<<<;::989;<<<<=<<<<<<<<<<<<<;% + ;;;;<<<;;;;;;;;:;DQ\char95{}ghZX\char94{}\char92{}ICILBOI<HYJ>J]\char94{}E>BTVWY]\char92{}VKNPPRU[WY\char95{}a]\char95{}\char95{}% + ]\char94{}\char92{}]]\char92{}\char92{}\char95{}aab\char95{}\char92{}YY\char92{}]ZZ\char92{}\char95{}ba} + \hbox{T[defiheD?B:9<L\char92{}`bcb\char94{}O]ghgggg`UbcT<E[gjhhfigjiijiifijhjlljkkkkkjllklkmkcL6123122344444444455667877777% + 7676666777899888889::;<;;;;<;;;;;<<===<<<<<:9989;<<<<==<<<<<<<<<<<<<<<;;<<<<;;;;;;::;LbgegfeXFIMHQ`]OSb\char92{}QPZ]A9>OUWZ% + XUYSONOOU\char92{}YX[[LRWUTV[YUY\char94{}aac\char94{}ZVW\char92{}\char92{}ZX\char92{}\char94{}\char95{}\char95{}} + \hbox{T\char94{}dcehicGHW=59EV\char92{}abeaSTchgggg\char94{}AO`\char94{}UWchhhhgghhhhhhhgfihlljljlkljjkkmlllmcWQKMIKKG:4443% + 444444566777777777777777788889999::::;;;;;;<;;;<<<=<=====<<;9988:;<<<<<<<<<<<<<<<<<;;<;;<;;;;;;;;;::=G\char92{}hjllhZNY\char95{}% + VQbgd\char95{}\char92{}aXY`\char94{}M><JPY\char92{}[UYURWURW\char92{}\char92{}ZZXJFVTNSXURX]ab`XWVPQVVPNV]\char92{}} + \hbox{R\char94{}defggcCEG>8:EW`aZLD>E\char94{}ggjfg\char95{}?:S\char95{}ebbghgifgih`egghjgfhjkijjlkliijjmmjlljmkiklnnhL8444% + 444445556777777777777777778878999:9988889::::;;;;;;;<<<<;:::9999:;<<<<<<<=<<<<<<<<<<<<<<<<<<;;;;;;::@Wehjmkjhcgge\char92{}a% + ebb\char94{}`ULQOE:DEHU\char92{}\char92{}WZY\char92{}]ZPTXYZ[ZULQVQQQYXW]ab]TTTNKPWUOS[[} + \hbox{U`hgggfc>98768@O\char92{}bQAFLNVfgihg\char92{}86@Fbb\char94{}gfegghhgNVhhfiihilklijkkjihdjmfdjknmnmnoopmT;54444444556% + 77777877767676677788889999888888889999:::::::;:;::;;:;::;;;<<;<<<<<<<<<<<<<<<<;<;;;;;;;;;;::;L`d\char95{}fiiighigc`\char92{}% + \char92{}bNLRC>@IJRMKRW\char94{}VWY[\char94{}]STYXX][ZURXQOTZYY\char92{}\char95{}abYUUTLMOVUQWV} + \hbox{bfjfggga>66566<FY\char94{}HEN[UOcgjgfZ96E=Occefgigfhkegiedghjjllkljje\char95{}ijknlcbknmllonoppeB55444444555677777677% + 666666666778888999888887899999::9:::;::::;;;;::::::;<<<<<<<<<<;;<<<<;;;<;;;;;;;;;;;99=EGMTZcfahiihe\char95{}X[FAMFGKU]\char95{}% + VQTZ\char92{}YZ[]Z[\char92{}\char92{}YYY[\char92{}]ZS\char92{}VQTWXLV\char95{}`aUNKZSQQXWVTR} + \hbox{cdghhff`>68;?;CJT`XXada\char94{}dbhggZ65D?;Qbdfffghijidbehheiijkjjikhegjlmmnnnnnngnompoa<4555555556667666666666666688% + 9998889989988888:;:;:::;;;;;;;;;;<<<;;;;64558;<;:89;;;;<<<;;;;;;;;;;;;;;;;:989<:<EQ\char94{}bddfe\char94{}X[QNKA9CT]b\char95{}% + RRYWY\char92{}[\char92{}]]YU[\char94{}\char92{}]\char92{}Z\char92{}TVTXWQJSKHHYYYVNPZYSPXVWVT} + \hbox{X`eggggb>7;DLISPQ\char94{}\char94{}\char92{}acacedgff\char92{}848I::RbffhggicbYI\char92{}ee`\char95{}fkjjc]iiiijmnllm% + l\char94{}monooopkS8665566666777777777777789999;;;;;::::9999999:;;;<;;;;;;;;;;;;;::;;:984444467544468;<<<<<;;;;;;;;;<<;:997% + 7658@C?Ncef``RABKROOTPQXaeb\char95{}\char95{}[V[[\char92{}Y]\char94{}VSZ\char94{}\char94{}\char92{}a`]LMOWVSQJHNPTQWRIQ\char92{}% + \char92{}WRWWSTT} + \hbox{XbgggggcB9BO]UYZYccddccegfdff\char95{}@:;JD@ReghihghPHLDLP\char94{}PNhiife[biiklmmkmjmemonoopeO@8777777778888888899::% + :::;;;;;;;;;;;;;;::;::::;;;<<;;;;;;:;;;;:656854443333333333447<<<;<;;;;<<;;;;;:99766437GVKPcbf\char95{}X[VZ\char95{}TTMMPFI% + ZbaYIOSYZ]]\char92{}\char92{}Z[]][\char92{}\char95{}aa\char95{}SMYY[\char92{}UYXUQPQNJT[\char94{}[[ZVROT} + \hbox{dehgffhcD@IY`][VS\char95{}dfgbVVdfgfgcOPK>MY]fihihhfO;=GO\char95{}cdccdYHUb\char95{}hhhhjkihillonnoonX;778899999999::% + 99::;:;;;;;;<;;;;;;;;<;;;;;;;;;;;;;<<;;<;;;;;;;;84444444334433333334459;<<<<;;<;;;;;::9887:<?8KdihdbZNBWbY[dc\char92{}OOFJR% + ``XHJX\char92{}V\char94{}\char95{}[\char94{}\char94{}]]UWX\char92{}[\char94{}\char95{}a[W]\char95{}\char94{}]]\char92{}UTRS% + SOHNU\char94{}a`\char94{}XSOU} + \hbox{gdfhgggcGBQU[[VZY]cggc`\char95{}eghggcM\char92{}\char92{}@>]cgjjihfbT;8;N`fc\char95{}GDPCF[hifcde\char95{}XYgikmljllj% + M:;@:9899::::::::768::;;;;;;;;<;;<;;99;;;;;;;;;;;;;<<;;;;;;;:;;:64444334344434333334444689<<;;;;;;;9998879@NQCUjjjicTIF\char95{}% + ffcidOAC>OZ]b`QGSUYa\char94{}X\char95{}dcaTQUVZ[\char95{}a\char95{}]\char95{}ab`\char95{}ZXXWXXSMPY]\char95{}`\char94{}ZWW[% + } + \hbox{hegfhgjcNFKWZKHRUUdecdddeiefggd`SFTcggiigge`F:@B@ZefeV<Ja\char95{}\char95{}ghY]f\char92{}G<FQTW[SNY\char94{}\char94{}% + HDO\char92{}B9899::99:::976569;;;;;;;;;;:;;9778:;;;<;;:;:;:;;<;;;;;;:;;844444444444434343334444445:;;;;;:99777767;@WdYdkkje% + acdYhjg`bX<6?PTGKZ\char92{}QQB>R[[X\char95{}dedYPVV[\char92{}\char94{}a\char94{}][\char94{}`a`\char92{}UQTXWQHPX\char92{}[\char95{}% + a\char92{}[]Z} + \hbox{eehgghecTCJZYPMQSXacabbeghghif\char94{}N=;I]ehhhhge\char94{}=35<EJZef]AEaijihf`b`IBA;:8989?EDOYc`A9999::99:8676666789% + :;:889;;:9866568:;<;;<::9768899:;;;;:766444445444433344445444444446:;<;:9766766667?VhhijjhYNbgiecUKQF@?<KT;7F@?8:FFV\char92{}% + U[a\char94{}\char94{}\char92{}\char92{}]Z\char92{}[Z``cbb`\char95{}aaZTWWORNNX\char94{}]``\char95{}]\char95{}]} + \hbox{\char94{}dfhjhgbRDKXXVWWXU\char94{}`\char95{}ddefhfggg]PIJOZeghhfgfa<9:FOCJUITQVYejhf]c\char94{}da`LCF;6657:@NQ\char92{}% + Q;8999::::99755556668:986569:9975455668;;;;9876455446:;;:85444444444443333344444444454457:;:86555544556:JX\char95{}RU\char92{}% + ROJZ]`OA?FJ?F?6=I>54432:=ANSIR\char95{}\char94{}\char92{}\char95{}cd`\char92{}TQcdcdcc`\char95{}a\char92{}UXYXRLJW\char95{}% + `\char94{}\char95{}\char95{}]]]} + \hbox{ffegghf\char94{}SHKRU]\char94{}\char95{}`\char95{}]\char95{}]`afhhhhgedbbaaaeggfggceKK\char92{}bO>857<GRbfii\char94{}% + CNLUdi`SR<699679<?<>:99999:::::8556666667775569:9864444557::;::875444444569976554444345433333444455455555566898875544334444% + 9BC=C[E:C@BA857CL;642577211013;P[`[]`\char92{}]\char94{}ddb\char94{}TQ\char94{}bcbcc`bb\char92{}UXVVUSMQZ]\char95{}]`]ZW} + \hbox{ge\char94{}dff\char95{}ZTW\char92{}VV\char94{}bbcbd]\char92{}`deghiihfecdda\char95{}cgedeg`c]`daW:2117:>K\char95{}ijf% + [Y\char92{}fhjgQQE@FM?9?998899999:99:99866666655666556876444445555678765655555544457766654434444444445444564556666667888776% + 65454445679:?LA:IM@68=9=9432113213556;Vcfe`acc\char94{}`bb`\char94{}\char92{}]\char95{}[\char94{}dbcbcb`\char92{}Z[WSYVS[\char94{}% + \char94{}\char92{}\char94{}W]\char92{}} + \hbox{hfa\char95{}ce[NLT``\char92{}aedacb\char94{}``cgggifhedcccc`cefffedcXP]L:4129EJEGRdhjkjiiiiikgbNW]TOH;888899998889875% + 56767655556446764444445555555444445655544444566654434444455565555655456766766777777676665556656?KC<?=97:>854343311116FRQRbe% + fbbadfbbcc`]bb\char94{}YZbfffdbc\char92{}Y]YVY\char94{}W\char94{}aXUZ\char92{}`a} + \hbox{fdhcee\char94{}SPT`bcddacdbcb`edggiegfaa\char95{}\char94{}c`deeefedbOQSB347CXahicgaghliiijgijkeH?R[E<8888899;99778875% + 556766666664566644444456665544444444554333334455544554444455555556755556677765555655677676765559LWH67888987656<@8658FQV`cac% + dcbaeeecefecdd`UNWbbc\char94{}[bb\char94{}\char95{}\char95{}`ab[`b\char92{}YZWZ\char94{}} + \hbox{hfgecfcb\char94{}XZ\char95{}aabddaacdaeeffgffd\char95{}SMVcabfefeedddcc\char94{}QX\char95{}bb[`dkjkjjjgiijkjjjcK>DP@8% + 78888999:9966764555556567665556554444466775443444444555444434444556555444555655555665556666776544444555566655556:;;66788888% + 77@Q]ZNNUZ`\char92{}\char95{}ee`O[bbgfddfggfge[UEGRVHH\char92{}`ec`abdede\char95{}`]\char92{}\char92{}WQ} + \hbox{fcdedcbcaa`\char92{}\char92{}\char95{}aca\char94{}]bcfdbghgffec\char92{}NObbbedddeeddba\char95{}[]\char95{}d\char94{}% + MEXebfijkhegkjkikhQ??IG8788888889997765544444445665556665555567776544434444445555444454455455655445665544556666666676544444% + 44556766545455554667778778AZeddefeggcV\char92{}N?AP\char94{}fhhgggedfcJD=:BKIVTQ`daZ]`eb`]ecWTTU} + \hbox{febbab``ba\char95{}[WbbeaUScef``efgfgd\char95{}b\char95{}ZabbegdefeeV\char92{}ZXNCOcVLMBQP`giigfikkjiliYGV[K977889988% + 9999875544454555555566666655556677655555555455555444655544455555545555455556777877676554444445677776544555333455777669CVcfj% + ihigdYQLDDKWejgfhgggebA>:888?WIK]\char95{}]cccc\char94{}[eedc\char94{}VV} + \hbox{fd`Z\char92{}\char94{}Y\char92{}\char94{}\char92{}VLN\char95{}aa]RWef\char95{}\char92{}\char95{}eehffc`cecd`afffdeee]% + ZU`[MSb`NFLJDFQa[fgikkjkjkgSYSC97798999888999975555567675556777666655655556656665555554544555555444555555545654556676778876% + 87565454556789987544443222324335666;N`\char95{}`ihjfg`STSYOOeigegefggfMFA:667KNMY]`aefhgfgbedc``} + \hbox{fa\char94{}VSZWXUPNNS[\char92{}\char94{}\char95{}Zbabb\char95{}`gjighc`Y[ccb[cegffedd\char94{}Va\char94{}QT\char94{}d% + \char95{}IHR@A<KHOejkllllkijj\char94{}A::8998999889998866676777776778877777666654566676554445555556655554455554455555545677% + 77777887776765565557899986443221122332239<9:APG[eigfgbW[\char95{}c[SahgghhggggH=:54569=JT\char94{}ea\char95{}\char94{}adfac% + ddced} + \hbox{dYURRVXVGHNTXWPXXV\char94{}\char92{}U\char92{}bcgiighf]YX\char94{}d`]cefdeecc[Safca`cbYSJUP<8CIdjmlkknnmllW>;88988999% + 8899988766665565678999888988877767778876554445555555555554565444555655667888887899988777656666899::9765332112332224?KC?CC<F% + \char92{}ggghdTYbe`L\char92{}cfghggghcA?E<5547;A:BVF>EJW`IK\char94{}ddee} + \hbox{aVUSOJVOHFHU\char95{}YMV[]]ZV[`eggfegeb\char95{}UWdeeeegegfcc\char92{}Y\char95{}eddfedY\char94{}FNO?;MTdjlmlnmnlml`B9% + 98:888899899998877665556689999999989988988999998765444554444455555554444456666779999:9999::9999977767789:;:9875442122333124% + <OPJMPBK\char95{}giihd\char92{}\char95{}ce`Y\char94{}afhgheeebGKO@84322436=:8=TSLTQZ`\char95{}dg} + \hbox{]KNURNRIMNFR`\char94{}QW]\char94{}\char92{}\char92{}UX]\char94{}]bdegdccc`bed`bdefe`b[\char95{}baceffff`ANPGCJVfiiiek% + kmlllZ?9997788888888999888776566677789999:999999989999998865554444445556655555555667788999:::;;::;;;;;;;;;:8878899987665689% + 73443237F]aV[\char95{}RR\char95{}dfiggedcebZbdffegfeedURG<4432134569;CXH;=OV\char95{}\char92{}\char95{}e} + \hbox{ZCKRTYTQKPJJZaZWZZRV[]ZWOZbcdb\char95{}bbaXV`]`beef`[bd\char94{}beeegfe]>MC>?EG[\char94{}]XNWUhljj]?<8677788888888887% + 7876456666556677::99::99999899999986655554556666666655555666677788989:999:;<;;<<<;;;987999877765;CK@84445;FNXec`eedfafffihf% + fdeacccfehfffeaYN@:56533344489=<86;CFOY\char95{}} + \hbox{]GJQ]XOLPUTJP[XQTYXV\char92{}[VTNV`\char94{}\char94{}\char95{}\char95{}\char94{}\char94{}\char92{}IN\char95{}\char92{}% + b`ddfb\char94{}`deeeeefgeWFMC639=8ANC;PQXbVXP96566777777788988777665566665455557899999988878899:987777655566777776766666566% + 666677766777899::;;;<;;:9999999888767@[OB86>GIZfefghgb`hhhijkjiifhedcdhdefggfbb\char94{}UOEBE>53344577688:CDFHM} + \hbox{\char94{}NHQ\char92{}WIPY\char94{}\char92{}QPXULR[\char94{}\char92{}]TPWZVZVKS\char95{}YT[WOaacdeeeac`eeddbOKabb]\char95{}% + P<9<I76;?>VeRF:896555667777777788888877666666544565557788899765567899766777666777777777777776767667777767777778999:::9:9999% + 999888778@XcS@@R`bgkiijhhebfihhkiihggid\char95{}echhedgffbded]VV]N>455567988=@LTQCB} + \hbox{\char95{}SEQVUX]\char95{}a`ZTWZTVSSSMSPY\char94{}Z[ZPT\char95{}a\char95{}\char95{}J;[cdc`ddcdegeeffQHbeee]G:=GZVFB?99% + C>;::997556677777777888888878776676444555544556776445668998767887878889888898889887778778888677887899999:::99999989877669DW% + bW@Xceglkiiiggccgifhlljghgea`ceffdefggdeee`]\char95{}b`J<65687888=MHB?FM} + \hbox{]OKQNLU[Y`\char95{}[TYYQTNHG<IJRXY[\char94{}[Xadb`SVaecb]\char95{}c\char94{}eghgfgfMVehg`ZL;5HZd]<9646655668@F=666666% + 667777777767777878754444433355555444678898888889999999999999989988878888889989888888889997566889988765435:Ob]L\char94{}fgjl% + jikhhiedghabkjibbfa\char92{}bdgffeffhgdddgc\char94{}ceh`VA=;A><989==76@D} + \hbox{`MIQTSRZZ\char94{}a`\char95{}\char92{}VQWTNWNYVNV]\char95{}\char94{}\char94{}\char95{}caacb\char95{}cfb\char95{}]\char92{}% + \char95{}ZceefdacYbffhfecI:NO`Z>664446545?MVE856666556777777767777878765443333345666666788888898899988899999899889988888888% + 8998999988988999854333689876433;EGTb\char95{}\char94{}dgiijjghhghfgehd`ghhaefbbcceeffdefgfdefecdfehaUMPNK@:8875545=} + \hbox{bYURZUNW[]`\char94{}]`\char92{}XRPHU\char92{}aYV]accbca\char92{}\char95{}abaceeaY[\char95{}`dfgfffdgihhhggg\char95{}Y% + MU`[@4:632697;DNXP<55556656566766666776776697553343456677766687788887888887888888889888888778778888999988888767755533334453% + 2114EY\char95{}\char92{}eifijifkjhhhigffefebZbgaZNSZdddgghefghffefheffehf\char92{}`c\char95{}L=98765555;} + \hbox{c`PLYVGMQY\char95{}\char94{}\char92{}`\char94{}YZ\char92{}X[````feddcecbbcbccdec\char92{}`ddfefehdgghggiiif``W[`\char95{}% + H8L:226@??HWWP::4557A85568665577666766;QJ;688:6556677788677777666677876788778888778887667777788889877765443334432322222103D% + QVdghkkkkjiiiidhhfbcRW\char95{}eYIR\char94{}C;JWfccgfgefgfedcfifggfgfdffeZC98777776;} + \hbox{eaXPRTQJGX\char95{}\char94{}\char92{}a\char94{}b`\char95{}\char92{}[]`beefedab``baabeddec`cdefeeegegghggfgecb]Z[\char94{}% + RAP=35IIG8;Q[]SL955;JA=A9=6556GF755665@XVB=>=C9;76666>DH76:=776666669;6779;6677777777677666777788877754323332333332222112:S% + `SeghjjhiigcigeZP\char94{}aePNPcYUM\char92{}ZORXgffgfgfffgcUV\char94{}efcfegfefhfUD:9999::8<} + \hbox{d\char94{}SNMUSMQ\char92{}\char95{}Z\char95{}`\char94{}ba\char92{}XUWZaddfdbccd]acaddefgc`cdcfffffhfeffdehgd``\char94{}% + a`G<P=4?VUVFPcfafW;@?<WSPFBM<7=@SR:567@?M\char94{}[HBBBKFPA6557ENQ:8EK9>>6;;:>EMG;6>C76767:>7778;>>766667677766522333322222% + 322226>KAZgdghkkjigfa\char94{}ehgXXdgfYUghhghhe]\char95{}YghhhgffehgcRX[\char94{}XR`dd`]\char95{}f`L<889:::::>} + \hbox{d[VNKWYVW[\char94{}]`\char95{}`a\char92{}]WTTS\char94{}ceffcbe]\char95{}a`\char95{}bdegecbbbbbedefefeffffffeccd`d\char94{}% + QVN?PZa\char92{}WO`ifk\char95{}DTXL`\char92{}\char95{}XOVONZZ]\char94{}D7BESVV\char94{}]VINNXZUP><5=U\char94{}\char92{}LBPO% + FPQ>ICFKJPQF?FG=?A66CJ96<CPXUHF8:6666654565;>>332222111212@Zeagffchhkkkjid\char95{}ff\char94{}S\char95{}\char94{}egfhhighgh% + eecdiiggfgggff\char92{}T\char95{}ZKHMUadaZXZJ:64579999:?} + \hbox{cSPNJRT[YU]`Z`]]\char94{}\char94{}ZQYTW`ddfdde`abcdddedffbeeeccdfghgbffgdfff\char95{}bhd``XVOLUZdcd\char94{}bhjjeYad]% + a\char95{}`d\char94{}YVa`\char95{}]\char94{}SCLMWYWY[\char94{}U\char94{}\char95{}\char94{}\char95{}ZUK?9E[ddbMSRMU]QWRJSLVX% + PKKKNMM:7IU:7@S[][\char94{}\char92{}@?;555546=>;IRL54425:823<729WhhhgbcfgjjkjijighgUCbggjjjihihhiieggiggefggegedXDDTO[cb[F=% + <94333445678>} + \hbox{aMLQLLV]WRZ]\char94{}b]Y]\char95{}`Z\char92{}XW\char95{}dfefdee`eeedfefeffdbbdcadffda`deffcd\char95{}afe`a\char94{}WM% + UVZ`bc\char95{}cfjga`ce`\char94{}\char94{}`gf\char94{}W`a\char95{}Y]]XYMRY\char92{}W]\char95{}X\char94{}aab]YRDAR\char94{}e% + heTTTQYa[]XRZV[]MMPJSTXC8LWBDOZ`\char94{}ZbbKOH66557JOIEWNJ:ED=COOB>ID;=Xhjjja]iejljjjdfge\char95{}`fgggiigdggghihfghiigffe% + geebce]\char94{}`TOMKD53222323444334;} + \hbox{dSPRRPXTRY]]`a`[]`\char95{}aa\char92{}Zaceefdfeadeddfgfgeefgeefdeghgdcdefefeefd\char94{}ad`[RUW[]d\char95{}bejghbdcaR% + ]cbffYO\char94{}`[U[[\char94{}\char95{}URXYW\char95{}a\char94{}b\char95{}S]\char94{}\char92{}WMPY\char95{}gjg\char94{}UWX\char92{}% + \char94{}`b\char94{}Z[WY[PRUVZZXPHURGI\char92{}``\char95{}`b\char95{}`XN;I<9GT[ST\char92{}QSKXXOSTVSMSVTL\char94{}fijkjhkii% + kiijhhgi\char94{}dihihgd\char94{}LL`\char95{}fghffhhhggfdggdJMZbcb]J8633B822333543333:} + \hbox{fTPLPKSYY\char95{}a\char95{}\char94{}``\char95{}`c``ba\char95{}bceffffhfeeffefehghhhcfcfhggfdgcegefded\char95{}`ceb\char94{}% + WUWSY`\char95{}ceiijii\char95{}\char95{}V\char92{}bded\char94{}VZ\char92{}]bd\char95{}]\char95{}TSPQZaa\char94{}d[Q\char92{}% + URXUZ\char92{}`giheYUUW]bd`WXUXYSSYY]\char92{}[TQWPFT\char94{}dcdbbaf\char92{}ZRWOIR\char92{}]\char92{}\char92{}[\char94{}\char92{}% + [\char94{}bVYWWYVPYafhhikilgjhjjkjiijkjjijjigPMHDQZY\char92{}Z]beihjhhfeefdEJU[WN;;>:3<H@53323444444:} + \hbox{e`[OENWUQ`b`[Y`a\char95{}`a\char95{}]daac`fgeeifeedeeggefhgfddaeffhfegihggeceaaccgd\char95{}\char94{}WQTX\char94{}dgg% + kfhjd\char94{}\char92{}QZbijgdZYaaa`]]\char94{}\char92{}TPV]bb\char94{}a\char94{}Z]YX[Y[[\char92{}efi\char94{}WUTWZaedXVSSW% + WQT\char92{}`\char94{}[YUW[[V[\char95{}aefged`Z\char92{}XRSSZaba\char95{}a\char95{}]\char95{}\char94{}X[ZZ\char92{}]X]djjij% + jiljiihhjjihikjgcijg\char95{}D9=JWIFL>J[ckihhhfeffcIBPYD>226BGBSOLA3433444438} + \hbox{a\char95{}\char94{}XFRXIN\char95{}a[NR]b\char95{}`ccb`]abddeeeffdefedfhfefffffcdfffgeeghgghe\char94{}ZZafacb\char95{}% + WRZXagggjijjfa\char92{}XW`hjee]\char94{}b\char95{}`\char94{}\char94{}a\char95{}\char94{}YUU\char92{}`\char95{}cdZ\char92{}\char92{}% + Y]\char95{}[[\char92{}Yagi\char94{}]XRW]cie\char94{}TPRZVNT\char92{}a\char92{}YXX]\char94{}\char92{}Z[bbfdgdeaZ]\char94{}SR% + SX\char92{}ec[WZU]c`YZ]`dhiiljjkijlklhhhijjkjkgiijic\char92{}S<>RWHPYX\char92{}adhihfgfedecG;GWVB38E;FYaTNC8E9446655B} + \hbox{]WTPOYXLO]a]Y\char95{}[\char94{}`caab\char95{}\char95{}beeefeee`adddeeeecdffgcbbedeedfifhiggfb\char95{}a`X\char95{}c`% + WQTW`dheigiida\char92{}X[adh`\char95{}YYZ\char95{}ba\char95{}`]b`WU[[]aa]]\char92{}`ab\char92{}]\char92{}Xbid][XUY\char94{}% + ehg\char94{}TUU[[UTZ\char95{}\char92{}\char92{}[Z\char92{}Z[[`deeefcddX]]RSVZ\char94{}ca[SWR]da`\char95{}`ehkihjgijiijjkhgg% + hiijjhgjkgcWWYWUYSW[cfcbfhfgffeeddaD7OYWL8<GFKWbd\char95{}H<PM:6H;:?J} + \hbox{]PMPQSVZYW\char95{}\char95{}]]]]]bbbbb][egffdcecdcccegeffdddeeade`dgefgeiiififdcdTW\char95{}\char95{}XTUY\char95{}dgg% + hjkifaZZ`chh]\char92{}Z\char92{}]ccefaba`\char95{}YZ[X`bY]\char94{}\char94{}eb\char94{}\char94{}\char92{}Tbhhb]VV[\char92{}% + chiaSZ[YZVW[\char92{}ae\char95{}Y\char95{}\char92{}\char92{}\char95{}aedcbcffhZ][SQ[\char92{}`aaZVWRXddaegighhebehihhifdfeg% + ihiiiiijja\char95{}\char92{}[\char95{}\char94{}YWS[\char94{}effeegihfgeeeddSCU[[TA@QRTW]aaXIORECSACUW} + \hbox{dZOIMQ]\char94{}]]`aYV\char92{}`\char95{}addcb\char94{}\char94{}gggfeeedcdbbeedgebaedecedbeeeehhhghhgeefe[V]XTRTT]bec% + fighaX[\char92{}bfifZTU\char94{}`acfffg\char95{}`\char94{}VWY[ad\char92{}W[`aa\char95{}`aXahfe]SVZ]djldXXZ[Y\char92{}a`]`a\char94{}% + [\char94{}YZ\char92{}\char92{}\char94{}\char94{}`]\char92{}fed\char92{}[\char94{}VX\char92{}a`dc[OOIO[[]fhhffc\char94{}Z]dh% + hb\char95{}]Wbeegejihigg`\char95{}\char95{}]\char95{}\char92{}\char94{}XWWZZbggcghhfecedeb`YSYZ[ZNNTVVW\char94{}aa[SWWRNVNV% + [\char94{}} + \hbox{c\char94{}NFMM[\char92{}\char92{}\char95{}cbYTX`\char94{}ccedddcfffgfffbcbbceefdfbdedeeecegghghhgjhhigiffe\char95{}]Y% + WX[X[\char95{}a\char94{}eiibeaV[\char94{}fhbYW[`ddigfgd]\char94{}`ZY\char95{}chdbY]b`[Z`[Wbhg\char94{}WWWY\char94{}gllcZ\char92{}% + \char94{}a`a`\char94{}[eb]\char92{}[XWV[\char95{}WW\char92{}]hdc\char95{}Wd`[cfdec]NKGKQOT\char95{}higha\char94{}bacdfd\char95{}% + ]\char92{}]\char94{}fgegfghe`]\char94{}`[\char95{}\char94{}\char92{}\char92{}\char92{}YZZbaa]`chffdebc]TQRVZXXSVUWWV\char92{}% + ``\char94{}Y\char92{}ZXQQV[Z\char95{}} + \hbox{g[JNTOU]b\char95{}a\char92{}c`\char92{}c\char95{}`eceeedfdfgfggd\char94{}]]edfc\char94{}\char95{}ddfdddeefhfhgfighhii% + fhgfh\char95{}[XTW]\char92{}\char94{}[[\char92{}ejkiggd]`geaYZ\char95{}\char94{}dhkihjebbd\char92{}\char92{}]ciga[]aca`bZ]`% + kjd]]WYchjjea\char92{}]a`[[\char95{}bea\char92{}ZVU\char92{}`\char95{}]`b]\char95{}ffebahgfhjjecYUSJKPLMXdhhb]afda\char94{}% + d`U]d\char92{}[bgfggggdcaac\char92{}T[[\char92{}\char95{}\char95{}W[RQZ\char92{}\char95{}bfghgffc]WUSKMRYT[XWVTZ\char94{}\char92{}% + \char94{}\char92{}\char95{}\char92{}XMOTZVa} + \hbox{f]WU[\char94{}]a]`\char95{}ccbcebcfddeddfgdeefgda]\char92{}`dd\char92{}T[eefeddgfffegffhfhhhhgfhghgf`[afa`YY`cijhcgfa% + bb`\char94{}\char94{}]a`aajjehdd`c\char92{}[abhhf]\char94{}ac]]\char94{}SWajhd\char95{}\char94{}VW\char94{}ehlffbbe]ZY\char95{}% + chf]XUU]\char95{}\char92{}Z\char95{}`aafiigdijijkjifcceYNUMIObhib\char95{}dfe`][QNX]\char92{}\char92{}\char95{}fgiheffebcc[% + V\char92{}\char92{}bdYNSMHKW`ddfeefecb[XUOLPWVZSVWRU\char92{}]]]\char94{}\char92{}WKOTUX\char92{}} + \hbox{i\char95{}\char92{}V[bb\char95{}[\char95{}ccbbceedeffdccdddeegcb`[Za`c`]beedfedeeffegefghihehgghhiiighjjbbW\char92{}\char95{}% + hkh`\char92{}ecfga\char94{}[\char92{}UZ\char94{}aadjkigb`eeZZ`gijb\char92{}cfcb]WY\char95{}hegc]XY[ajklfdhicY[\char94{}egfb% + ZXU[]\char94{}\char92{}XX\char94{}afjmljgglklkkhfdgebZZZQ\char95{}ghfddhcbaa]VW`dc`figgedefefd\char95{}adedcYNRTNIQ]cceca\char95{}% + []\char95{}\char94{}XPNQTXX[VVXVRX\char94{}]Z\char94{}]XSMLU[\char92{}} + \hbox{j[UYaccca\char94{}\char95{}``bdcceedcccadededgdb\char95{}YY```bbdeeeegefffeiebfhiihghgggfgeghjif\char94{}b``\char95{}% + fidbeedcf\char95{}TUZVXZ]]gfhjiaagd\char92{}\char92{}cjlh`cbdacebSZaccb`XX\char95{}dijljjikgZ[aeihh\char94{}UWZ[]ZWZ`bhjlmm% + hillllkkddihigfcafigdecfegfcc[Yaeefghggfdefegfefdc`aSPOTSRQ\char92{}cdd`\char94{}VKUXXWPOU[ZX\char92{}YYZXNTUVY\char94{}\char94{}% + XUPNPW\char94{}} + \hbox{eVW\char95{}ce\char95{}aa`\char94{}cbcedddedbc`befdeffecaWV`a``bacedeedgeeffeefghihhjijgfhegilkiafddcgigdeceaha][[Z[]% + \char95{}]efigdacgie\char94{}cikigagecab`NTdbee\char95{}VVafjikjjjdf\char92{}Zagkig[SVZa`XW[acekmnmkbklkijiidegfgiiiiigggfh% + fefbceaccfehhfgedehdhggfda\char94{}]QIRXWTNT\char92{}\char95{}a\char94{}ZXQUWVLIOZ\char94{}]][W[\char94{}YTVX[Z\char94{}\char95{}% + XYTRRTY} + \hbox{e\char94{}\char95{}bac`[\char94{}`\char95{}ccffefedddeccedeffedeabbcc\char95{}`cccdeegghhggffffhhhihjihigiigihkjiifef% + gih\char94{}\char95{}ec\char95{}g\char95{}\char95{}\char94{}[\char92{}\char95{}affhjhieafjkkbdikihdiidYY[Z]eedfb\char92{}X\char95{}% + elklkjkjf]Zdfhfe\char95{}V[``]TVZ\char92{}bdinnlkdlmlikkjhfhfhihihihgighhdegcfbcfeeffffdgghfhhgfedddWGMX[YTSSOUVW[YXVVNLP]`% + c\char95{}ZX[\char95{}]YX]][\char92{}\char95{}[WXZ[Z]} + \hbox{g\char94{}`\char95{}\char95{}d`SY\char95{}]\char95{}affdce\char95{}\char94{}[bcdgeggfddccb\char94{}`edccbdeggfegegffg% + fghgghiiiigghiiiimlkiggegge\char94{}[aa`dc`aX]a`fkhdhikegjjliiijkgefj`U]\char92{}[\char94{}ihgf\char95{}X\char94{}dgijkijli% + e\char95{}[filh\char94{}]\char94{}]``YWY`cdcjmmkkfkklljmjkghefhjiiihiiiijgfhgf\char94{}bgihgghffiihihjhhegeaQMMX\char92{}\char94{}% + VUSSXVYXSUOWUTU\char92{}\char95{}``YU]\char95{}`a\char95{}`\char94{}\char94{}\char92{}\char95{}\char95{}XY\char95{}\char95{}% + ``} + \hbox{gbaabdc\char94{}cb``acbacb`c\char95{}eccfggfedcccb[\char95{}ccecddefffeefgfghhihfhhgihigigjihglllkjjgede\char95{}\char92{}% + X]ghif]Zdfbgjieggiiginmkdjkmebii\char94{}Xaa\char92{}\char95{}hlkcYX\char94{}cgjikjjjkd\char92{}\char94{}efijab[Z\char94{}a% + ]Z\char92{}`dehikllokklklllllkkihiiljkjjkkijhkjjhdehhjhihddhhiijifgfdffcaTY`\char95{}\char92{}XSRYTUONRRXTUZZX]\char95{}[WY% + ccca`ba\char95{}\char94{}\char95{}]\char94{}baaa} + \hbox{f\char95{}cba``affddedc\char92{}ceca`]``cefedeea\char95{}Zccdddegedehefefdeggefhhggghhigigilklknmjljhe`Z\char94{}\char95{}% + \char95{}ahjjgbda[\char92{}`cehihjhghjjkkmmngfhkdfed\char92{}[glld]W\char94{}bilmlmjjh\char94{}]cccegf\char95{}TZ`YTUX\char94{}% + `dimnnlmlkmnlkkhklijkjklijkijiijhjihhfhfhhjjihhkhhgikhffbehgd\char92{}Y\char94{}\char95{}]YURWROLPXXXVWZTOR[Z\char94{}bb`\char95{}% + Z\char94{}`aa`db\char95{}cbba} + \hbox{hbcebZT]dgffdddcaYYZ]W`bbfgfedda[[dddeceeeefffhfeeefgfgfehigghjhihijkijlljjlic\char95{}b`[[bejmkb[]\char95{}\char95{}% + dfijkjjigcgkjkimjkhigcfgc[\char92{}hljf\char95{}U]ekmmjlkgf\char95{}]bfffcc]VS]XY\char92{}afdegkmmlmmkkkkklkikkjkjjkjjhijji% + jiikheffiigjiiijjkhgegghgdfgfecZY\char94{}ZUUVUQQSQQVTVXYXOQ[YXaaa`[Y]bb`bbcddbb} + \hbox{jdfffb]aedba\char94{}\char92{}ZYZVOV\char95{}cddcffffeec`\char92{}\char95{}dcededffeeeggedcffefcggjhggjiiihgjjlkkklmh% + hghf\char94{}[cjkkj\char94{}VY\char92{}`ggilkklkijoklkkjgggehjie]T]bilaPK[cjllllkccd]`fhic`aVVZX\char92{}\char92{}\char95{}% + fdggijmmllmkkllkjkjijllkkjijkijkigigieghkihiggjifhggfciifggefgebY[\char92{}SSXSRPUSRUWYZ[XUXW]\char94{}bdc`\char94{}][\char92{}% + deeededbc} + \hbox{kefffhecaNQ\char92{}WSJADKPFI\char92{}bdadcfeed\char95{}\char92{}`acdeedehfhhffefdcbdeeghhhjhfgiighiiijjjlklikjkgd]dj% + llmf\char92{}cXciikjjkmmmmnmiidkgfhckii\char95{}[YZchki[IUbhjjjjjaZ\char94{}\char94{}bejkebf\char95{}YWW\char92{}\char92{}\char95{}% + ggffhllnlkmjjlnkjijkilkjjhijjikkhhhgifgihhgfcchh`egfedfifgecefc\char95{}WSWOKMSRQWYTTYYZZ\char92{}\char95{}`\char95{}a`cedb% + \char94{}`\char94{}\char95{}bdeeddeeb} + \hbox{hffgfgfgaUMXSHJDCDMOLVcdbbbeeecVT\char94{}ccbccfefddefffffdeeegfgihhiigfegggiijijjmkjgdifebgikjilb`bgjijkljjljknlkedb% + O\char92{}`\char95{}g]a\char95{}Za\char95{}`afe]JRdafkkkmbP[\char95{}ehkjihi\char95{}WXZ\char95{}`aeheejljjkikjikkjighihkij% + igfffjifghhghechghga`\char94{}gc`dgedfefdaaded\char94{}ZRLUYNMUNLPVSY`\char95{}\char92{}X[bc\char92{}\char95{}dccc\char95{}% + ````cdffhhhec} + \hbox{ieeffeddVHADFAFLGBBLOM\char92{}aacaeded`\char94{}acdceddcfeafffffgfcgefhfiggfhihgffebdkklmnkjf\char94{}fe\char95{}\char94{}% + gkjmlnja]ckkjilmlljmnkd[gh`Y[@OFW]Zada\char95{}ggKAI\char92{}dknnlmiZISeikllfc`ZXX]adefebhkkkhfjkijic`debagfghibghffhgehgah% + dhhjj`YdgabdffcU]dfb`bb]VVYQUX[UTMMPTTZ`aa]\char95{}cddbcbdcabbdcbdegghged} + \hbox{jfgfefecE@@@AABIHKDCJIW[cfefeddc\char95{}`ceddddceffbfefgfffggiifgfgfhihfgfbceejklnhjeU]\char95{}\char95{}acdhmnom\char92{}% + K\char92{}gfjljjmmlmndcV`kc]\char94{}Ye\char95{}]\char94{}\char94{}`ghhf`TTVWaemmmmbPRX\char95{}ihijjh\char95{}[\char92{}\char95{}% + \char94{}cfdfccdiedehhifgefcecaaa\char95{}\char94{}cffgdgghihijegcghjiWH``b\char94{}\char95{}bf`U]cdfdc\char94{}WNRXTPQ\char92{}% + \char94{}[VOTWZ\char95{}abcdccffdd\char94{}b\char92{}]adededdbfgfed} + \hbox{gdfgfeeaE?@AABFOMHEBGMS[ceeffdcbbcdebdedbdfffgffhfeggggifgfhfhgifeedab`dfllja\char94{}LRU`]\char95{}[fmmliZ\char92{}\char94{}% + Y\char92{}\char95{}ijlmommohZRY\char95{}]\char92{}VZea\char92{}dfeijki`\char92{}e[Y]`ilkljTPW\char95{}hklhhh`WYa\char95{}dh% + ggc]\char94{}e][afgge\char94{}\char92{}ccbdeaab\char95{}dfjifffhhigfgggggghZP```\char94{}a`eabeffffdWLLIKTOS]\char95{}\char95{}% + \char94{}YX\char92{}\char94{}`\char95{}`cdabgfegdea\char92{}`cebdeffeffec} + \hbox{icdeefdaKGHKLJJS[OBABDDSbghgfedb`ecdeefccfgedfeggghiggggggfhgghihgfdfaeigjkjg\char94{}LJN[[\char92{}cjhgdcbe[QVcijh[g% + jeiVHFHFIKOMUSQ[ZdihhicW`]\char95{}d\char95{}dlmmXY]`dbinjjg[YZbbfhjhh`ac\char92{}]bfiidbcdcaehfcebfigggcghbbdh\char95{}bee% + icc[Vca]\char95{}[X\char95{}c`eedgfcXIFFKWYY[]`a[[`ba\char95{}ddfdeeghhhed\char95{}\char94{}\char94{}cefeffffedb} + \hbox{kdcffdeaF@ENXX][XKAAAACMbghgefdbdfcceeecdeeedfdfffgggdhgffefghgihggehhijjlklgWLINRPT]Zb\char95{}]\char94{}\char95{}WY% + M[hkl[FXTK[HHJKLNMJGQQIHL]hhe\char92{}QFIU]cffkkma\char94{}ZY`gjmnkh]acffhiihgbba\char94{}Zc`fg`eef\char95{}\char92{}bedUOK% + OVVTTY[YSW\char92{}\char94{}]\char94{}\char92{}cceYV\char92{}`U`aaadcdfeegfe\char94{}OGIPX]WOQ]`\char92{}\char92{}adbaefdcf% + gfhfeeeba]bggfdeffedd} + \hbox{jceddfdbOFESaba`]TEBBBCJ`eggdfeddebbededdgeffgeffeeefdfhfgggfgghigfghhhjkkibYHFFEHHEHP\char95{}ZURNGJL\char94{}ghfSFL% + NFJJFEDFFFGGMQKM`bggiXJEFPZ`gfakkfKGFXafjjigd]cfg\char95{}bicS[bUSYaadb`a`baeff\char94{}IEDEEEEDFDEEGGGS\char92{}`U\char95{}% + e]LTY[\char95{}UV\char92{}\char92{}]cdeddfhaWWVWX][STXTZ[`cb`cgfcefhihffedecbehgfeec`bc} + \hbox{kddefefe\char92{}[PJ\char94{}b`aaXMFDBCKadfgffg`bebeecccedefefeeeeeffgfgfghgfghihhghhfjkjjeUGFEFEFFFHZhiWIEFEMc\char95{}% + fPGGEFGGGFGHIGHHIHKHGROZiljXGGQaggdWigeLEGUV\char95{}cSeVZ\char95{}cc]R\char92{}fPIXZIOY```a[P\char95{}db`ebPEEFGDEEFEEEFFE% + EI\char92{}b`ddfZQX\char94{}\char94{}SMKT[\char95{}abffdhfd\char95{}Y]\char94{}\char92{}\char94{}[\char92{}XQ[\char95{}\char95{}% + bccefeddefggfefcefeeeffdedccb} + \hbox{kddcedda`\char94{}[X\char95{}b\char95{}aba\char95{}ZHFFNbdegfgeZ\char95{}cbdeeeccdefggeefefggfggfhhggfgfggghihijkjhUK% + LLKJGIHLW\char94{}\char95{}NGGFGPZRcLHIFHGJIHHHGGHGGGEIIJM\char94{}ljhWGHL]a`[NaJIFFEFIN[M]MXX\char95{}KJQSaPGQWILZdddcZP]Z% + W\char92{}cYMGHJKGFFFEFGFFEHHUdb\char94{}U\char94{}QNRYXMEGO[\char94{}cedc\char95{}aec`\char94{}``]\char95{}]]Y\char92{}X\char95{}% + \char95{}\char95{}aacdefceegfefddecccdgggfggdc} + \hbox{kdedecca]\char95{}\char95{}\char95{}[\char92{}\char94{}b`bbbZQX`dddedffTS[aedbdcbeeffgffefefffhgfhhfgeifhghijihklkkbZ% + \char94{}[YTPOIIIXQHILLILMLdOJMKIKKIHHFEGEEGFFHGGYgj\char95{}ZQGGHQaXPJ`JFFIGEIR]P[\char92{}\char94{}X\char92{}UORLVPFFJGLW% + cae\char95{}\char92{}MQWUbfWIEIJJHKJGFEEEEFPIU[LXLQFMMIB77>HZ\char94{}\char95{}acedce]\char94{}aaeca\char94{}]\char92{}][[\char92{}% + ]\char95{}ba\char92{}aedadededeedfca\char94{}dgifhgca} + \hbox{jcbedbdd``bdba\char95{}aaabc\char92{}QUacfeedfcPIWbgdccddedchgfhfffeeffhgfhghgghhgjjhhhklkhUFGGJFJJKFISTRRTVWWWX]\char92{}% + ZXY\char94{}b`\char95{}ZVTTPMOLGFFFHVX`LGGGFGUZSMP\char95{}ZVTVTRLRPNLKLKTQIRLVYNOMLIJPN]U\char92{}MN[U\char94{}aPLJKLHGIII% + HIGGGFJGKNJYSOFCA>63:F[acaadeedfbcffeddacb\char94{}\char94{}]Z\char94{}`c\char94{}LGU[ceecehhcde]\char95{}affhhffc\char92{}% + } + \hbox{idcbddcebbde`\char95{}\char95{}cabbc\char94{}X\char94{}acddddcdVCJbefffedgeedeeffggdfffgffehifghghkjkiijjkicMGEEDFGHE% + EEEEEFHGEGFFHHGHJMJNOJIMRMIIFGIJHIP[UKIJNHNQFEFFGGIJJKOPPPOLIFHIINNNMJKMNOQWT]U]LKUPQ\char92{}PMKIGHGHGEC@BCDGIABMPSE><?==8% + ;AGXadedddhegfefdcbcfdbb\char95{}[Ydbd[HGJ[\char95{}deefhfehebbadcfjfec\char92{}} + \hbox{icdbcdecbbddcdaa`aaaba\char94{}\char95{}bccedddZRXdhfeeccdeeddcdeceefdfgeffghhggfijklkijkkklgPDABEGGGFFFEFFFGFGGGGGHI% + HIKQOOOLHJKJIHHIIJLM]JHGGGMMFGGFFFFFGHIHHJIHFFEEEDEFEFEEGFFKQ[Z`ZTVJDISVA9;;@B;4379;>?D@CIA<<:67;?DHNU\char94{}dfhfefgfigih% + e`cefcddb]`eeb\char94{}QYWadfffgfdfhfefabbageba\char94{}} + \hbox{idfeddeeddddbdcdccbaccaabfegeee\char94{}adihhfeeceefdecdeefegeedefgefggghjlmmmkjlllnl\char92{}OIFJLLMPOOMMLKLIIJKKJKH% + IIJIJINIJHHGGFFGJLJNbZUURKMPGHGGFGGGIJNOOTOQQPPCAEHHGHGGEGGGFHLLOWVHCJKH=9::85;;;;:>JLPONUT`a\char92{}ZT\char92{}\char95{}e% + fghhhgghhghhigiigfcefcdddcefee\char92{}R`adfbdffea`deffeccbbedaa} + \hbox{hffeeffdbbeda`bdbcacbcbacfdeddcbadfgheeedfedccbbbdefeedbbdfgghhhgjjkkjllkmmmmheSHIHIHEGFEHGCFEDHIMJIFCCEFDCDDFEFEEGHG% + GIGScgfikfed[ZUXYVNMRPKMMPMLNOL>@EEECEDCCAABCBBCCOVX\char92{}\char92{}N\char92{}\char94{}SOJSP]ZYYUQZWSONP\char94{}bgefcehh% + ifhgighhhhihhjiihgfggbbcdedebd]Vbceeedd\char95{}P`ea\char95{}fcd`[bbaceb} + \hbox{hfbffgffcbeddcddacccbccccgefdddbacegghdfeececbdbbdeegefdefffeggfhhjkkjjjijjjljl`MFJKIIHKNMPHMMLIIKGHIGHJGFEFGHGHHFIKI% + MKKPRZZ]]\char92{}a\char94{}SWZ[]\char94{}VQRGFHJMIFEEBNV[IFGGFFHHIJKKIKKKOQSSUUUSTQTSSQQQOOT[QSUQ]`ffhiiiijhhhigjhhjiijjjg% + ghfffddddbaa]\char95{}\char95{}`aeeeeeebV\char95{}fc\char95{}`ca\char94{}[][Xaab} + \hbox{ffcefgffeedcfce\char95{}abddb`\char95{}ccdeecde`\char95{}cdfghfifdcdcdcbfeddgedffeheffggigijjjjjhid\char95{}ZY[NMKJJI% + IIMMJKLMQNNNQOOLKLKKKJJIKJIMKLMJPLHIJLMOMKHJIIGLOPONRNPRTWRTTVTVTSWQKMRRRWUTRSTUVVbeUROQRPQRSQRNSTROTQLMQNVaeggfgjkkigiggjh% + ghigiiiihheehfeeca\char94{}[XY\char94{}bcdggfegfa`ee\char95{}Z\char95{}a]]\char95{}YY\char95{}ab} + \hbox{gffgfhfegbccfcd\char94{}]\char94{}dca]X\char94{}cebbdeea`\char94{}deegfhffdcecfdfdedfffdgfghgghhhgihihjffh`V\char95{}% + QJJIHGGHGFGGEGGHGGHGGHHJIIJHFGHHJHHIJIHHIIGGGHHGFGGDEGEFHHGIJJIIHLOKOJJNVccRIJIJIKJJJMOYR\char94{}jeNGLPPNLLMLMLKIIEGFEFECH% + \char92{}defhgjikiiihjgfegfhhikijffgheebb\char95{}\char94{}ZZZ\char92{}bceffeehfdceee`\char95{}[YXa]\char92{}\char94{}\char94{}% + a} + \hbox{hefeeegffdbefcec\char95{}\char95{}`X]\char95{}\char94{}L\char95{}a[\char92{}cfgdaWcfdefggefbecebbdfffddedfggcghhiggij% + jkdafe\char95{}\char94{}KGGEFEEDEGEFDEGFHGGGFGHGFGGGHGFGGHGGIIJHHGFFFFGGFFGHGFFFGIGHIHHGHHIJMMILWfaPLHGHGGHIHHFGIRjdKGEGGJF% + FFFGIFEEEFFFFEEFP\char94{}c`]bhijiihghhigggggijgiefghfeced`]Y[\char92{}`adffffgfcefec`][Y\char94{}\char95{}V\char92{}TNV} + \hbox{hfgffgfe\char92{}\char95{}`dcfdcZWVMV\char92{}[O]\char94{}\char92{}\char94{}cdfa\char95{}Zcfegeeffd\char94{}bbea`deff% + ecdebhgcchghhifjijhghf[NCEFEEEEDCDEEDFFGFFEFEFFGGFGFFGFGGHHIJIKIJHGGGHGIHFGGIGFFFGFFFGHHFGHHIGIHNe\char95{}JHHFGGHHIGKIHISh% + fUNGHFFFEFEFFFFEFFFFFGFFJRZ\char92{}\char95{}ehgegkhjhijghggfghhieehgdfadca`\char92{}``\char95{}`beeefffefdc[a`\char94{}\char92{}% + \char94{}\char95{}\char92{}NKVP} + \hbox{ifgefgffXcacbde\char95{}UTVSU\char95{}`ZYY``cdeVRWddghgife`]\char95{}`dbadeeefedefedefhghigfkkkjigZIEDFEEEGFFFFEFGFHG% + GGGGGFGGFIIHFGGIIGJIIHHJKHGHGGHIIGFEHFFHGHHGJIHHHJIJIHIKQebVQHGIIIIIGHLMJNPRPSNJHLLJIGGGGGGFGGFEEDHT]bccggffhjgfhjigfhhffgg% + fefhhefec``c`ac`cbeeegdfee`Wcda\char95{}`\char94{}]\char95{}RCIT} + \hbox{jfefgeefff`accc]RSWWXWYXTY`\char94{}\char95{}be`\char92{}affiigghf\char94{}S\char95{}a`\char95{}\char95{}bccddffffgef% + gigghghkkiii\char95{}FCCDDDEHEEFFFFFFEHFFDGHJHIGIIIJIHHHHFHHHIHHHHFGGGIGIHGGGFGHGGHIHGFHGHHHHHGGIMPROKHGHGHGHHHIHHGIGHHIGFH% + IIIGHFFGIHHGEGLT\char95{}geigggdgihhhiihifggfededgfhihfed]\char95{}bdcc\char95{}\char92{}\char94{}efeedceeb\char95{}\char92{}% + XY[]``\char94{}[RHO} + \hbox{heeddeehea[\char94{}dcaa\char95{}]\char94{}\char94{}RIOUU\char92{}]]]cdfbbgfhghfgg\char95{}V`c]W\char92{}adebccdfffee% + gjigiijjjjih`NDBEDEEMKFDFFFFGGHGHHHHHIIHHIJKKHHGGHHGIHHGFGGFFFHHGFIFEFEGGGHGGGGHFFGFGHIGHHGGHHGHFGGGGFHHGHHGHIHHFHHHGJIHIJI% + HHHIISafhgghhghihhhhijihgdegffffegfggfedeaadcefb\char94{}\char95{}ddfeecfdfdedbbcaabc\char94{}ZW} + \hbox{hfggfheh\char92{}WO\char92{}`YY\char94{}`\char94{}\char95{}\char95{}[PWRQ\char94{}]abbddabghghhfffd\char95{}`ca\char92{}% + R\char95{}]cdecdgggfghijihiilmikkfdTNONTKRUJEFGDEEDEFFFGHGFGHGFHHHGHHGHGIHGHFEFFEGGIIIIJHHHGHHHGIJHIHHIHIGIIJHHIIIIHHEGIHGG% + FHGIGFGGHGGHHGHHHHIIHJHHGKYfhgffjgdfhhhiiggfdgfgfgggffgffghedfdeeeggfecfge[QTW\char94{}c]]\char92{}cddabd\char95{}ba]} + \hbox{jggegggfSOX]WJUab\char95{}\char95{}`\char95{}[\char95{}VX\char95{}cccedccbeghhggggfa]ba\char94{}]a`cdcefefggffgjjjjgk% + ljjikkjgfdhZT\char92{}UGFFFEFFEGGFEEFEFHHJIGHIHGGHHGFFGGGFFEFGHHIGHFGHGEFEFHHHFGGIHGGHHHGFGEGEFFGEFGGFFEFHFEDGGGEHHHIJHIJII% + JJHHJXaeca`ffeegjhghhhbbgff\char94{}dahggfggegfdebeefhhhhfhhe\char92{}XY\char94{}a\char94{}eggeddbccbcd\char94{}} + \hbox{jggfegdi\char95{}OU\char94{}]TXabb\char95{}adc\char92{}X\char94{}`ceeedcbddgfhigifda\char94{}aba\char94{}`\char94{}bc% + dcffefegighiljgjkjkklkklmikhZ]dXIHFFGHGHJIGCDFHGGGGGGHHGJIJHGHGHGFFDGHGHKHGFHHIHIKHJJHHIIIHGHIHFHHGGGHEGFGGHGFGHGGFGFEFFFGH% + IJMKJJIHIGIIKKNYSRPYbdgfggiijgb\char95{}eddcbVcggehhghfc`bdeffihheffihghheegfgeeca`bbcc\char95{}} + \hbox{jfgffggidZZbcaabbbb`bb`]\char94{}\char95{}`eeddc`dfffgeghgfbbbeceeddbccdeeffghhjjkljllkkmlkknomkkcaji[VVWSUUVSSIEHHJJ% + NJJHMPQQTVXWWVWWTVWUWURTVRPSUWUYVOOQRSNTWWVSUTPQSUSTTTOPQSVUTQTUSTTRSRURRSRSTX\char94{}UPGGIMTSRSRSZdabegiiiijjie\char95{}d% + cdadfdfgefggeggfedfegehhgiggggiidefhefdddc`WWad\char95{}} + \hbox{jhhggghgdbdbba]bbcb\char95{}ac\char95{}\char95{}]\char92{}\char95{}bdddecdfgfefhgfc\char95{}\char92{}`cffdfddbcdcffgg% + jiihiilljkllmjikmklmlflic\char92{}[[XXWYVUOLMORQQPNMPTTRVZ\char92{}Z\char92{}\char92{}UUX][YZVQRPNOTVXXZYSSUVTUWYYWSVTRTV[\char92{}% + \char92{}Z\char92{}ZZ\char92{}[[[XZY\char92{}ZZ[ZWUWYVMSVV[[YRPMLQQSVVW]`fgffghkjijfg`cbd\char94{}aghfffgefggffdghffgghifgf% + gggihe``fdbdeda]MN]d`} + \hbox{igfgggfgfaabcb\char95{}acb`ab`[X[\char92{}adbbddbcffgfeggfc]\char92{}abcd`ddcdffeehhiiihhhkmllkkjihhgljmoomi\char95{}% + \char95{}\char92{}Z\char92{}ZWVXY[YXYYYVWUTTUTTRSWWURNNKNTXZZUKJJPYXXVXYZVPTYZXXY\char92{}\char92{}ZXZYXY\char94{}\char94{}% + ]YYXY[ZXWWZ[]Z\char92{}]\char95{}XXVVOMLNMLLHFIIKMIILZaddgihhhhkkjjiedgcd\char92{}]cdfgdffffggefhfgfeeggfgc\char95{}cgfcdfb% + fbcddb\char92{}NZacd\char95{}} + \hbox{hheeghgffa]bddbbbcdd`a][\char94{}`caccbdcdfefeegfgeba\char95{}\char94{}aedbadgeheghgijljiilmnmh\char95{}bcgfdhhkllha\char95{}% + a\char95{}\char95{}]]ZZ[Z\char94{}\char94{}\char94{}\char95{}]\char92{}]WSXYUTQOSTTVSPKIKW]]\char95{}WHCELXZWUZ]ZTMRYY[]]\char94{}% + `\char94{}][\char92{}[]db][\char92{}]]]\char92{}\char92{}[Y\char95{}\char94{}\char94{}\char94{}\char95{}a`[XWTMFCBCBBA@@AAC% + BBLacihjhjjfijihibaehgf`YcdffefgfffgfffgfffdfeefWCEOQGKY`ghgeeca\char94{}Zcb\char95{}]} + \hbox{ifdccgfhf`W]dffdbba[Saabaccbdcecaddeeefefgeddb`ca`\char95{}aegggggfiihljiiimmlj]]bdfkaejmd]\char92{}c```\char95{}\char95{}% + \char94{}\char92{}]\char95{}`acb`a\char94{}ZWTRSUUTVWVXXWSNNU\char92{}\char94{}aZKBBI[b\char95{}\char94{}`b\char94{}VNMQTY`% + ca]]Z[]]\char94{}ddb\char95{}\char95{}a\char95{}\char94{}\char92{}]]\char94{}\char95{}bb][\char92{}WTYQNGA??>>>=>>>?@@ASaik% + hhikjgdaadeeedebe`cefefdcdfgfeeffeffdee\char92{}\char95{}`LAKFECNUDVfgfdea`[a[U\char92{}} + \hbox{igffefhigga[cgeebbb\char95{}abbeaddcbdcbbccedffefgccdcedc\char95{}cccfefgfgjghihiihjjkjhijjlme`meXX[``aca\char95{}\char94{}% + ]`a`ceeb\char95{}[SVSQOPOOSSVXXTOMOU\char94{}dc[KABL]cdccdaUMJLTY[\char94{}[ZSQQU[\char95{}dbcbbb\char95{}`][[aab`[Z\char94{}% + YQQLIEA??>>>>==>>@@AOcikiggiifSCJ\char95{}ghfhgififfgeb\char92{}\char94{}\char92{}]ffdgefeeede]JY`UZWRWU\char95{}\char94{}K% + K\char94{}fafgaaYb`Y\char92{}} + \hbox{feffggghgegeffdeadd\char95{}cddc`dedcbdc\char95{}cddfdfffgdddfeeecdbaffhgheggfggiihhhjkijjiknnkn\char92{}HLWZ\char92{}% + \char95{}aaa\char95{}\char95{}\char95{}bbffec\char95{}XSPNKLMLJILPRPMNKNS\char94{}aaWF?BM`ddfef\char94{}RJGIOUWXUSQNMSX\char94{}% + cb\char94{}`\char95{}\char95{}]\char92{}WVY\char95{}\char95{}\char94{}`XYZXOMLJE@?>?=?===>>@@@I\char95{}ikiffhhhVEP\char95{}% + efhjkkgifbbgecccagehgfceffegfacdcZO[QW\char94{}[UIW\char95{}db]\char92{}bccgbc} + \hbox{iegefgjhg`cfffffgjXZabbc\char95{}cddcecc`bdddffdfgebdeffcdcefffhghghjhhhifacfidUY\char94{}ghieheNDIQUW[\char94{}\char94{}% + ]Z\char92{}`ccdfb\char95{}ZOGDDFCFJKKJNNMJHGILX\char94{}ZQB?AP\char95{}efgcbWJBBCFMPPNKJHILTY`\char94{}\char95{}\char92{}]\char92{}% + XTRTTVWXVPOKMIKIIEA?=>===<=>>??@BYejjjikjh`K?E\char94{}egjgihhgbYchcba[ffggeceffeeeYZ`dVBHDEKEEDN]`VGCQXadgf} + \hbox{ihgggghj\char94{}]cf\char94{}Z\char94{}ahi\char94{}R\char95{}\char95{}\char95{}Y`dddddecbdcedegeffacbacedcbgeegfgggjk% + hihb\char95{}\char92{}`gdVIIQSXZVWOFAAGOVYXWXW[\char92{}]cce`\char94{}XNGDCDFEDEEHHKJGDHKPZ`\char92{}PC?BOaffebZTLA?BELNLHJ% + GCGIPW\char94{}\char92{}[WXTULLMMPRPNKHHGDDCCA?==<;;;;;===>?BI\char92{}fhkjlnjgOEJ\char94{}fhibfgigfa\char95{}fhfbaeeeegdgh% + ffedR\char95{}cceOA??A=?GFJNKHEDE\char94{}efg} + \hbox{igighhjhURXURV\char94{}cff]KQ]VK[`eccdcbbbdccdcgdeaa\char92{}]bcecbhghehgghllkeccgiihhfVFGKRTPMDA?ABJPSOSUTVY`c\char94{}% + ]\char94{}YRFA@@@BDDECEEDEEDEGRS[TKA?CP\char94{}cd``[SFA@BKOMQJHCBFKOWY]`ZXUTSJNOQTUNOJGECBBCB>><;;;;;;<<=>>@DOahklmonldOX\char94{}% + iihefgggfifiheeccededfeedgeeZ]]`bPJB>CE@G?AGOJVYQPchf} + \hbox{gdffghii]X`eggd`PHYQ[ba\char95{}`ddeebdbacdcdedfffca\char94{}ZaebcaggffghggfjiebgkjjijidZRLLNLIC?>?AFINLHNQOTXW[XSOHA% + A?@@AACDCCCEFCBBFMVWPF@?BQX\char95{}a\char92{}USPD??@CGIFCB@@AFMVX\char92{}]YTRPOMMPRSSPNJIHEEEDA@>><<<<<<<=>>?ADHVaeikmmmj% + beijkhigiiijjkjjgdddeeedddddeefda\char94{}PIIFEKFQFQGFFQY`d[Wegf} + \hbox{hfedfgiijf\char95{}WPF@?>JVJSbcb\char94{}eedceddbaadeeeffgdba`cdedchghffhfhihhgfgkjjjikijeQLNJFB>==@BDHKLMGJQTTWYSLBA% + >>??@AAAABBECA@ACGLQJD?>@KTZ\char94{}\char95{}WPKB???AHLJDA@@@BDNWY[VWPNMKLMPPNNWHGECCDC@>><<;<;;<===>?BEEIPT[ffillhjigfhih% + ikijjjliifedfdecdcebefgdg]D<>===@?FZYIH\char92{}bc`V[feb} + \hbox{ggfffhhgVG?>=>>>?DLRVUOYYdddcded`bdbdffeggcbedcbdfaehgefefgifjgfkkllihjijfSIJGC@><=?@DEGIGIOLOSUXQKC@>>>?ABCCCCDCCCBA% + CGNMHC?=?GSRTUOMIA?>@BDGCAA?>@BELTSTVONLIEIMGI>BRHJFDDCC@@>==<<<<<=<=>@ACEHLJLNGNbjjghedgggghhjg`ejjhedeebcecedcfe]df]?;<;9% + >=@Q`RL\char92{}ddgceff`} + \hbox{hfffffffKA>==>==>@BGJDIN[bedcddcaaddeefgggc`cdZ\char95{}`beffhgdggghhijijiikhhhkkh\char94{}SMHEA><=>ACGGIIIKHMPQUMFC@% + >=>?@ABBBBCBB@@ACFONFA?>BGO[VTPJEA?=?@ADEBA??ACEJPMOQNMNHEGGD?:=MCCCCEBA??=<<<=;;<<=>>?ACDGJGCB>@Wfghjgbadddiig\char92{}ON\char95{}% + gifdgdcdcdeecbaEJYfT:;A@@?>K`\char94{}]]`dhifhig} + \hbox{hgfffefcG===>=<==>>?FKACTdeeceedaccfdgghhffee[MNO][difgcdghhhhiijllmjgjjjlhiTDC@=<<>>BDEEEEHKKKMQIFB@><>?@AAACBCCBA@@% + BEIMF@>>AGOXRQQJEA?>>@BCCA@>>?BGKKLQLJJKDFDC?5=;JDBBABA@?><;;;<;<;<<==>?ACEGFDB@>E\char95{}iijic]Y]c\char94{}dh`bXIV\char95{}% + Qbgfddedddcc\char95{}H;?\char95{}`@<DBIFM[`b\char94{}cdcfjgihg} + \hbox{igfggefeG?>===<<<<==AHEJZdfeefddacceddhiffffdUJIP[VdijhefehighhijijlihihijleLFB?=;<=@BCDEDDEFHJJKHCA@=<=>?ABBAACCB@??% + ADEGC>>=@CJMNIJFA@?==?ABA@?>>?BEGFLNMKGEDDB@64>9FEBAAAAA@=<;;;;;;;;<>=>?AFOGCCGKCANegigXNZegfigfgg`RHLadecdddecdcaI;;QcU>@K% + BYMBWc``abfihjjh} + \hbox{iggggecdG>=<<<<;<<<=@BCF[ceeefebZdddfffeggeeeZZWXcbehhhgfgghggiihgljlhigijhOEB@?<;;<>@CDDCDDBDEFKDA@=<;<=?@AABCBBA@??% + @BGHDA??AELPPLJJB?>>>@ABA@@>>@CEGILKJHHEDBA:45@8DAA@?@???=<;;<;::;<<<=>?DT`XLQZcZWWRQ]`bb`igabga\char94{}MOTYcddefedbeddcWA% + >>B\char92{}cUOGP`RHR\char95{}[]Z\char94{}bfiihh} + \hbox{jghgdacdF==<=<;;;<;;<><>Vcdeeedd\char95{}deefegdffdba``ecedghhhgehheffiigimlkkjhklkRAA@><;<=>@ACCCCDDDGEECA?><<=>?@AA% + BBCBA@???BFDB@>>?DHLMGGEA@>=>@BB@?>==@ABGIKGHGFEDB=546A8GDABAA@@?=<<<<;:::;<<==?BPchbggha\char95{}U@?BHV\char94{}\char95{}`% + XCEMEF@AH[cefdegdcdfedWGONEKdgeddfebdf\char95{}dUWcfhfce} + \hbox{gffgedacF===<<;;;<;<;<=<Odeddecccdfefffgf\char94{}T\char94{}Y`b\char95{}\char95{}[`fghgffff\char92{}ciijillmlklkkkmaI% + BA=;;;==?ABBABCCDFDDBA?=<;<>>@AAAABBA???@BBCB?>>AFGLNHCCB@>=>@AAA?>==@ACEHLHGFFEE@7547@7DBBA@A@@>=<;:;;::;<<<=>?@DQZ\char94{}% + iibIDD>==>GGEGFA?@@@>>AHXdcdffddcdeg\char95{}[d`RF\char95{}ege[P]dggd`SR]eifdd} + \hbox{jgfgfbeeG=<<==<;;;<<==<=Wdecedbaceeffeffeb\char92{}\char92{}\char92{}\char94{}ZWWP\char92{}eefc\char95{}`Ubbehjjmmlml% + lljjjljcZJ=;;;<=>@A@BBBDCECBBA?=<<<=>@@AABBAA@??@ABBA?=>@ABGEEDDA?><=?@AA??>=?ABEIIIGFGDB:4348C7CB?@@AAA?>=<;;;:;;;<<>>?AAC% + HJSRMA>=<=>>>??@B@@@@???>>B`ddfgfeeceecbgf`KX\char92{}ef\char95{}Y\char95{}dge\char95{}RVV\char92{}fhhhe} + \hbox{jggggdedH<><<;<<<;<<;;;<Xdcccdab\char95{}deeffeefaWWZV\char94{}\char92{}YQX\char94{}\char95{}\char94{}\char92{}Z[SQgi% + fhklmmlmlkljjmllmP<;:;<=>@@ABBCBBDCBAA>=;;<=??@@AACAA???@@BB@>>>>@CFDECBA>=<=>@AA@>=>@BCEGHFHFFD?5335<E7CCAAAA@@?=<<::;;:;<% + <==>?@ABCBCB@>=<<<==>>?@@@?@>????>@\char95{}defgeefefhcfhfZL\char95{}ccfgfgcfba]`acdfigg} + \hbox{jffeedecF<<<<<;<<=<;<<;<Scccbdc\char95{}YbfefeedgcUPJCDGLSX]]X[a`aagigiiklkmllkkjkjlgX?<;::;;=>@@ABCCCCDBA?><<;<<??@A% + ABBB@@?@@ABAB??>?ACDEEDBA>==>?@A@@?==?@CEDFGGEFB74365BD6BBA@A@@@?=;;;;;::;;;==>?ABCBBA@??>=<<==>??@@@??>??>?>Aabefggffedfaf% + g`TR\char95{}gh`\char92{}efeggeccdba\char95{}dgg} + \hbox{jefdfdheI==<<<<<<=<;;;;:Sdcdddc]Teffffede\char92{}B?AAGKSY\char92{}]YVYafefhifgigjkljkmkiijeJ?==<:<<<>@AAABBCDDCB@?>=% + ;;;=>??@@BA@@@??@@BBA>>>>@EECDCA@>=<=?AAA??>=?@CFEHHEFD>548B8IE6>DB@AA@??>=;;;;;:;;<==>?@BCCCA@?>>==;<=>??@?????>>?>>B`effg% + edefffcgha\char92{}b]cfdcbdfgfffhfffcefh} + \hbox{jffggggeG=<;;;;;<<<;;<;;Rbccddd]Pbefggeef\char94{}JJJOSSSUXYUWU`feedhhh\char95{}TYejkkjhigbVB==><::;=>?@A@ABCCCBA@>=<% + <;<<=?@@AAAA@@>?@@BAA?>>?ACEEEDBA?>=>?A@A??>>?@CEDFEDFB757I>>KD6<AF?@@@?>><;;::;::;<==>?@ACCCBA?>=<<<=>??@A@A@?>>????B\char94{}% + defgfeeegeaeecYRWcaa]bbbehgfiggddeeh} + \hbox{igigihffG<<<<<<<<<<<<<:;Rcdceef]SdfgeefegbNOPSNORUMMUTUbccegfhbJCEJZhhbgefLI?=>=<;;;<=>AA@BCCBCBB@?><;;<>>?ABAAA@AA??% + ?AABA?=>?@@CCDCB@>><>?@@@>>>=?@BCDGFHE=6:9C;CKD6<BL@A@@??>=<<;:;;;<<=>?@AACCCAA@>=<<<<>??@@@@@?=>>??>C\char94{}bdfffeeegf]R% + STGDN]WXY\char95{}]Z\char95{}djhghfceffg} + \hbox{kefeghgdF=<<<;<<;<<<;<;;Rbccefh\char94{}WddegdeeebVNRRTRTZRMRY\char95{}ceghighdTA@AK[KU\char94{}PXCLA?<<<:;;<>??A@BBB% + BBBA@?>=<:;=>@@ABAAAA@?>=@BA?@>>?@BCEDDB@?==>?@A@@?>>?@BDEGGFD:6:>G?LMD69ENB@@@??><<<;;;;<<<==>?@ABBCB@?>=<<<=>=>@?????>>?>% + >>E`ffffeeffgfX@AA>@RY\char95{}LQPS\char95{}Q`hehgfafggi} + \hbox{kghigggeG<;<;<<<<;;<<<<<Pbdbdfe\char94{}Ydfffbdef]VYTP[VQ\char92{}[UX]adfjigghe\char95{}VE??@=AC>>?P?==<;:::<=?@A>@AB% + BBBB@?>><;;=>@@AABBBBA??@AAAA?>>?@ACDDCAA><<>?@A??>==>@ACDEFE=6556<CLMB67HOF?@@?@>==;<;;;;<<==>?@BCCBBA@>>=;<=>>?@@@????>>>% + ?>DadefhggffggW?==CNZ[\char94{}KM\char92{}\char92{}\char92{}LS]\char95{}\char92{}febfffh} + \hbox{kggggggeI;<=<<<;<<;;<;;<Sbbfbff\char95{}Yfeefccfg[QWXV\char94{}a[\char95{}`\char94{}\char94{}\char94{}bffijiiedegUC>>% + ?=>ABJR@==<<:::<=????@BCCCBB@?>=;;;=?@@@BBBAB@@>?@AA@?>>>@BDDDDB@?==>?@@@@?>??@AEEEEC964456EMMB67KOKA@A@?===;;;;<<=<>==?@AB% + BCBA@>>=<<=>?>?@@@?@@>>>>=E`ecegddcfffV?CHDLZUSLYdbZLCMYRegdffgd} + \hbox{lghggfgeJ<==<;<<;<;<;;<<Rbbddefb]efffffff[NW\char92{}\char94{}\char95{}efabbbaeghjkjhdaf`JA@?@A@OKLPA?=<::;:<=??ACB@A% + BBA@@?><;;<=>@ABBBBA@?@@@AAAA@>>?BCCDEDB@?>=>@AA@?>>=?@ACEEE?65344:MNLB66MMPB?@@?==<;;;;==<<>=??@ABBCB@??>====>>?@@A@??@???% + >?Gaddfddddege\char94{}OOES[Z[RKVdeZNDKTUdfeifif} + \hbox{kifghhieI<<=<<<<<;;<<<<<RceecffcbhfggefegaY]adadfbaeddfhhhkjihhg\char95{}IB@DCMJTWTQD===::<>==?ALVEAAABBAA@><;;=>?@@B% + CCAA@@@@@ABA@@>>?@BBDBCA@>=<>??AA>>>=>@BCDDC964446DNNLA55HLQF?@@@>>=<;<<<=<===??ABBCBBA@>>==<==?>?>@??>>>>>>=Gbeffdcddeed\char94{}% + GGRb\char95{}XVTTafaTTGI\char92{}]fgefiih} + \hbox{khgfhigdI=<<<;<<<<<<<<<<Pdegefefggfegfgfg[YcacbdcdeefefdeghefighfWTIDOVXZ[[KA@=><=BQ?>?L]eH@AABBA@?>=;;=>>@ABBBBAA@@@% + @ABB@?>?A@CEFCCB@@>=>@@@@@>=>?@BCDE@76456<LNNK?45EKOK@@@?=><<;;;<<==>=>?@BBBBBA@?@=>===?>@@@?@?>>>==>HbegfcefeffeT@BUaaYOQ\char92{}% + dhaLIBB`dgiijjih} + \hbox{mihfghheK=<<<<<<;<<<<<;<VefgegffghfedggefW]``\char95{}ZVVWeghhfVUa\char94{}]dgfihcZGDR]V`d`PFRQE?<G`PMFSaiP@BBBAA@?>=% + <;=>?@AAAABCAAA@@@AB@?>>@ABCCDCA@?><=?A@@??=>>?ABCD<64558FNNML>44@INOA@@?>==<;;<<<<<>>>?@BCBBBAA@>====>?>@@@@??>=====Icdfee% + ehggfeRAEYZMFL`ddcYMEJO\char94{}dZcgjgih} + \hbox{khihiikfI<;<<<<<<<;<;<;=UehhgffgfgfefgffeFQWYMBCCJcgihiTLYZU\char95{}fb\char94{}a\char94{}OKNaf`bgh\char94{}\char95{}% + \char92{}TAE@?L]`QNdjW@AA@AA>>>=<<==>@A@ABBAAA@AAAAA@>>>?@CCDDCA@??>>?AAA?>>>>ABBCB85457>LLLJJ<55>IMNG@@?>=<<;;;;<=<==>?@AC% + BCCB@?>=<==>IN@@@???>==>==Ldfgfecggggf]KQZLAP\char92{}S[[TJGACTQb\char94{}Yfighg} + \hbox{kijhiiigJ<<<<==<;<;==<==WefggggfggfgfijgeE>CELCABMbfhfcVTT[b`edbbaRUdjjghigZa[XTQ[FPcdYR[[D@@AAA@?>?=;;<>?@AAAABAAAA@% + ABBA@@???ACDDDCC@@???@AAA??>??@ACD?7446:FMLKII:64:GLMMA???=<=<<<;<===>?@BBBDCBB@A?>>===GYGA@@@??>>>>>KegfggffghheQBDMHCGFEE% + IF@@@?NI]Z\char94{}fhghh} + \hbox{khjiihigH<==<<<;<<;<<;<=WddfghfffhghjhhfeC=>AEIABMdhhfVDMKVabeeffgbUbjhghhhdieWZ\char95{}[P[\char92{}cRBFB@BAA@@@?>==% + ;;<=??@ABCBBA@@@@AA@??>>>ADDDCCB@?>=>?@A@>????ACDC<7546=KLKKKE854:ELNOC@A?>>=<<<<====>?@@BBBBBAA?>====?KYSCA@@?A?>=>>Lehhfg% + fgiiihU@ADSYE@@?@A@@A@QYee\char95{}gigfe} + \hbox{jhihiiieI<<<<<<<<=<<<<<=WefefffhghihiihhbA?@@ALFAOdghgRCJBDOafcafhgbbhijiikijcTVaeWdeXC@@@?@@A??@?>=<;;==?@BAAAAAAAAA% + ABBB@???@@BCEDDCB?>>?@BB@@>?>?@ACA85449FLKJJI>6439BHKKG@@>===<<<<<===>?AABCBCCBA@?>===>AFQ\char94{}UWY]\char95{}\char92{}VH% + A@NdfhdfhgigggVBCNSP@>??@>@@@@RQYc`gcdbe} + \hbox{lhggkjifJ<===<==>=<==<<=Vfgffgggiijhhjhha@=?A@DLBLeghhVHIBBPee\char95{}bgijhiiijjjjjkgZ\char92{}ficba[K?@@?@AA@@?>?=<% + ;<=>?AAABCBBAAA@AABA@?>>?AABCCCC@?>>>@BBA?>?>@BBB>6446BKJLIHE85439?HJJHA?>>===<<=<>=>>?@@BCCBABA?>>===>??AP\char95{}`[TTWcg% + c[\char95{}ffffffgggggM?L\char94{}V@>>@??@@?@@QMP\char92{}\char94{}b[Z\char95{}b} + \hbox{liigjjifI><<=<<<=<<<<=<=Xehffghghjjikjhg`?=?FMFKDJgfhfOLQFDJ\char95{}ecffgiijiiiiijkjia`gkk]CCB=>>?A@?@A?====;<==>@AB% + BBAB@@@A@BCBA@?>?ABCECCC@?>>?ABAA?@?>?AA@:446CIHIIHF;54338<EGJIA>>>==<<<;<==>>?@@ACCCBA@@>>====>@@@BA@??KROQW\char94{}gggfe% + gghhgeN?AJI?>>?@@???@DQFAPSOZUZT} + \hbox{liigjifdG><<=<<;<=<<;<;<Teffffffghjfjhih\char95{}?=>ACEPKKcghfMOWQLOXbdhhgiiijkjkiikjkiffcfWC><==>?@@@KVH>=<====>?ABB% + CBBBAAAABABBA????@ABBDCB@@>?@@AAA????@@@>746CGGFIGC;643338;CGHGF>=?>=<<<<<=>>?@@ABCBBBBA@?>=>>>??@@@A@@??>=?>OehggffggfhgM>% + >@>>=>?EFCCDFQIHGJPFJS[W} + \hbox{lhkikiheG==<<<;<=<<<;;<<Sdffffhggghhighh\char95{}>>??BACRMefgeJOTHJS[bfiihhifijkiihkiiheYHGC;;<<=>>?CKYgPE?<<<<<>@AAB% + BAABAA@ABBAAA@>>?@BCECBB@@?>?@AAA@@>??A@<66CHFECB>75433237:@CEEF@>>=<=<<<<==>??@AABBBBB@@>>===>??@AA@@@@?>=>>PehhgefhfihfM?% + >?>>>>?@@@DFINCDDFLLJVWN} + \hbox{lgiijkigG==<<=<<<<====<<Wddeegfggffghgie[>=?@ACBMPdhheHMPLRN[cigigfhhigjhkjjjhidE;9:<;<<==>>F[`dTYC;:;<<>@@BABBBBBBAA% + BABBA?>>@ACBCCDBA@??A?AAA@@@?@A?:8?CAA@<64433222269>ADEE@>>>>==<====>?@?@BBDCBBA@?>==>??@AAAAA@@@?>==OdgihhfhggffL=>>=>==>=% + ?EFCJIAHGFOHHRQJ} + \hbox{jghhkiihH=====<<<=<=<<<=Xcddedehgghhghhg[=<>?ABBCXdgheIL[P[WT\char92{}dfgfghijghhhjkkhjbSIBF=;<;<>@AET[VV\char95{}C=;% + :;<=?@@ABBAAAAABAABAB??>?@ABCBBAA@??@@AAB@??@@@>AD>;864422322222269=@ABCC>>>>==<<==>=>??@@CCBBB@@?>?>>???ABAA@@?>>>=>Oeeggi% + fhgggfL>>>?>>=>=@DABGOBCBEDCCMVQ} + \hbox{igjihjffG<=<<<;;<<<;;;<=WdecedfgiggjhiigX=>>?ABAARbgfdGCXGR\char94{}PN\char95{}ghhhjiihhghjmjhihfcKG>:;:;=HUXS\char94{}% + \char92{}Z\char94{}OR?;;<=?A@AABA@A@AA@ACA@@>>?@ACDCBBB??@A@BAA@@@@@@AA<87643332222332259;===@B?>====<<<=>>>?@AABCCAAB??>>=% + ??@@BABA@@A?@@??RcgfgggihghfM>>>?>=??>B@@CFGBCCBABCJKR} + \hbox{ihjiihdfG=<<<<=<<;<<<;<<UdgfedfggffiiiieV=>>?ABABIcggdFJWOJVSUabfggihhihehkjiiijkhWD;:9:<?S`bSXf\char92{}HVU@;;==@ABB% + BBBA@@AAAAAA??>>?ABCBBBA@??@@@AA@@@@@@AFC??>??>ASA<=<=>:788;;::<??>>><=<==>>=>?@@@AABBAB@?>>>???@AABAAA???@>>QeffhhfhghhgS=% + >?=>==>>@??BEGAADFCADKNP} + \hbox{iiijjhhfG>====>==<<<;;<=VeedhegfcbfhiihfS=>>@ABBCOcfebEIUDFXaf]cfihghfhhhihghgjklkgO<::<BEYY\char94{}XXc\char94{}V`Y@% + <==>>@@BBBBBAAAAABAB@?>>@A@CCCCB@@B@@@AAA@@?>@AAAAAAA@?A`G==???>?AA;::9:<D?>>=<<<==>>??@@BABBBBA@@??>>?@AABAA@@@A@???Rehhgf% + ghgghfS>?>?>>>>>??BDAFBBCDBBEFLL} + \hbox{ijighhieG>==<;<==<<==<;>UddeeeeeeggiihhfT<=>@ACEIXghgdGLN@A[gffghiggffgghigggdgjkkgI<9>LY\char95{}\char92{}XXXXcaZ\char94{}% + dYLKIJA@BCBCBBBBBAABBB@B???@ACBDDCB?@@AAAAAA@@??@BBAAAA@@HUQ??>>?>=DJ;;:::;GC>==<<===>>???@BBCBBBA????>==?@ABAA@@@??>==Qfgg% + hhgfggigS>??>>??>???@DEGDCBCBCEIOP} + \hbox{jjjghihfF<=<<<<<<=<=<<<?ScecfffddfhhigggU=>>@CCBLVfgffV[LBKdegffhggfefhgghgghffgfgbKKNTceihcebbcVR]fdb][[C?ABBCBAABBB% + BDDCBC?AABCFEDEDBBABAABBBA@A@AABEC>>>=<;GI>:89767?A>GMNSW\char92{}F====<===>>>@@@ABBBBB@??>>>>??@AA@@@@@?@?>>RegghghhgihfN>% + >>>???????@ADLFCCCDDFYaX} + \hbox{ijjhhhhfE=>=<;<===<<<==<QdeeecfdddfghgggY?@ABCABCKdggf`bLUbehghhiggfgggfffefhhjg\char92{}fb\char94{}cefechljidcg`YXae% + he[M@@BABDCABABABCBAAA?@@ABDECCCCABABBBCBBBBBECACCCCDDGHJMPQSTRVYXX[\char94{}\char94{}[`cZA>==<=<<=>>?@@BAABCBBA@@>>=?@@@AA% + AAA@?>?@??SeggggfffghfO>@?>>?>>????@@ABACDCDHTYV} + \hbox{hhiihhfdF>>====>>>>><<==Rdeffegdeefghhii`C?@ABBCCHbghfacWcadfgghghhihfghfffhjijhjjjidhhd`gijifcefdU[bjZG@@BCAACCABBBA% + BBBBB@>??@ACCECAA@@?@AAAA??@@ACWcba`\char95{}\char94{}]\char92{}\char92{}\char92{}[[`\char94{}]``\char95{}]]]]`\char95{}\char94{}% + L>>===>==>??@@@AABBBBBA@@?>>??@?AAA?A@@>@@A@SefffgghgfgfO>@?>??A@@?@@AAACCCDCDDHJN} + \hbox{ghjghhidE>>==<<==>?>>???Qbddffeffdfggffh\char92{}?@@BABCBFaghfgggbdcdifghhihihfihgihggiiifigijjgdhjjghgeedcaaeYC>?ABB% + BBAA@AABBAAAA?>>@@ABCCA@A@@???@@@>>=@BBZhigfefgbbd`bcfeefeedcbfbJ=>>=>====>>>?@@AAABCCAA@@?????@@AAA@BB@AA?@@SeghghgggghfP>% + ??>>?@?@@@ABBBBCCCCCDCEG} + \hbox{ghhfgggeC<==>=<<>=<<>>><SdeddffffdedghfeT=??ABABBFbgiiiidcfdfihhgiihigehghiiccchhebjjjkkfc\char92{}a\char92{}\char95{}% + d\char92{}\char92{}bhffbPACBBB@@@?@AAA@BABAAAA@ABCDECCFEBCEDCDEEFCCEFCRabbdbfdedffegighhijhhfifUD??>>>>>>=>>@@AABBBBCCAAA?@% + @?>@AA@AAA@@??@@?VdhhhhffhghgN?@??>?@@??@AABABCCDCCDDEF} + \hbox{hghfhhhdB=>=>>=<=<===>=>SdefededdddchgefR=>>@BABBEaghhhe\char94{}`gfegghhjjhifhhgijddahkkklkklikbVI`g[\char94{}ebfihe% + FFWUGB@>??@@AAABAA@A@@@@AACBBBCCCB@BBCCCABBBAABEMPPQUVY\char92{}\char94{}\char94{}\char95{}`acbaeefeeffffVA>==>>>>>?@@@AABB% + AACC@A@?????@ABAA@A@@?@?@@WgfhhffefggeP@@@?>???>?@AAABABBDDCCDDC} + \hbox{ihgghfgcD>>?>>=>==>=>>>>QdfedeeffedfhgdfO>@@ABCBBC\char95{}hfhg]Z\char95{}ccdfgiiikkjhfcefhfjhkkkjljkkkji`Wbifaggggca% + K]kbQL??>?@@A@AAAA@@@@>?>@AACBBBBA@AAABBBBAAACBDDBAAAEFOWLKJKLLORWXQUVSZ\char94{}]D@??>>=>>>@@@AABBBBCCAA@@@>?@AA@AB@@B@?@@% + ??VgffgfeffgfeR>?@@??@?>?@A@@AAABCDDCDDD} + \hbox{jghggghbD>>===>>>=<<====PdfeedffgdefghefM>@?AABBBC\char95{}ggf]\char94{}c\char95{}bacfghihkllhhfhihiiijhjljikjkljkfhj% + deigebg\char92{}SfllaN????@@?@@BCBAA@@?>>@@@BBCBABAABBA@BBBBABCDDBBBABBHQC@@A@CCBJLJOOQUXXC??>=>>=>?@@AABBDCBDBA@@?@???@@@A% + AAAAAA@@@@XehegghehgfeQ?????>??>@@BBABABBDDDCDDF} + \hbox{jjiiegfbB==>=>>=???>>=>?PceedfeeeccdgihfK?@@@ABBCC\char94{}ffgSRU`cgfgehjijijihgfhjighkikijjjjkijjihcW`idfebHUP\char95{}% + igI>?@?@AA@ABABAA@?@???ABBBBBCBBAAA@@@AA@@A@DDDCDBCBHNEB@@CBBAJUNRUUXYKA>>?>==????@AABCCCBBAABAA@@?@AABABABAA@@@@@Yeheghffh% + hfeT?>??>????@@ABBAABBCCCDCDE} + \hbox{hijggefcD=>>?>==?>>>=>>>NdfefdfffeffgiheL>@?@ABBBFaghfUEIKXdffcbgeaYbjjghhjhghkijjjkilljkljgihfidbbg\char92{}NIMYQ@@A% + @ABAAAABB@A@@????@BCBDACCAA?ABCAAA@ABAABHHGGFFGKPFDDDCCBAHQOSVVXSFC?>>>>>>>??@@@ABCBCAAA@@@@?@@@ABAABBA@A?@@C\char92{}fffhg% + fegfgdS?@@@@??@@AB@BBBBCBDCCDEEE} + \hbox{fiihfghcC===>>==>>=>===?NdffedfdedffffifL=>ABABBBF`iifRACBFS]Y\char94{}caUEAQefffjigiiihiijjjkkkijgbccdifcW]N>>>?@BAA% + BCBCABABBABBA@@?@AABBDCBABAAAACBAA@BBBABHLLLOLLMTIEGEDBA@JQSUUVUJC@??==>?>>?@?@AAABBBCCBAA@@@@@@AABAAAAA@?@@AZfghjgffgfeeQ>% + @?@????@ABABBBBCBBCBCEFE} + \hbox{iiihfgfdD>=<<=<=>=<====?NcfhffgegffggiicJ??@ABBABGahhfQBABABDF\char92{}\char94{}MB>AAGVcfiiihhgihijhjimljjaRcc\char92{}% + aeVBD?;<=<?@BABCCCACBAABAA@@?>?@A@CDABBAAABBBAAA@@BBBCHMPPPQNPRNMJECDBAGRVXXYTHB??>>>>>>??@AAAAABABBBBAA@@@AA@@B@A@@A@@?@?@% + [fehhgffgegdQ>?>@??A@@ACACBBCBCBBEDEEE} + \hbox{iihgfgfcD>>><;>>><=>>>==NdeghgfghhgggiidG>??@BBBCGagggTAABABBJYTC>>>=>H`gihjdeeihjjgkjkmlkjfjgd\char94{}ccX]MF@<?>>@B% + BB@@AAAAAA@AA@?@A@ABCCCCBAABBBACCBBCBABCFPQRTTTSSQOLIGEBAHSW[[YLE@>??>>>>>>?@AABAABBCCBBBABABA@@ABBAAAA@??@@B\char92{}ggggg% + gfgeggO>???@@ABA@BCBCCCCCCDEDEEF} + \hbox{jggfgggbC=<==<====<<>=>=MdgfffegghgffjgeH>@AA@ABBE`gffXBABAACSVSKEG?==BWfhijgihilkjjkjlmmklkkkgfhddfhfOAFOAAAAA@ABABA% + BAAAA????@ABBCBABABAABAABBAAAAABEORRQSSTWTSPPJHFALTZ\char94{}\char92{}WLC?>>>>?>>??@?BAAABBCDCBBAAAAAAA@AAA@AABA@@AAC\char92{}% + fghhhgggghgQ@??>@A@AABBBBDDDCDEFFEEDF} + \hbox{hgffhggcE??>><=<==>=>=>=OcgddeedfffggghdG@?A?@BBAEafggWABDJJDFHY\char95{}bbTQA>Kcgeghggjkljjlkkjjijjhkhfa\char94{}Wci% + ifbbPGA@AAAAAABBA@@@?@@??ABBDDCBBCBBAAABBCBABABCEJQTQSSSWVTSTOMEBMWZ\char94{}YSFDA>>>>=>?????@ABBBBBCCBCCA@ABBBAB@ABABBA@@B% + BC\char92{}eihgggeffggT@@?@@?@AABBCCDDCDDEDEDFEE} + \hbox{igggghhaE??===>=>===>>>=NcgggddggegffhhdH??@A@BBBE`fhgVADRYWUYU\char95{}ghea\char92{}PMNfhchhghjkklklkjjiiihhijhi`Zej% + kjkkfeNA@AABBBAAABAA@@>>?ABBDCCBBCBCBAAABCCAA@BBEFNRRSSTVVXVVSMFALXZ]VLGB>====>=>>??AABBBCBBDCCCCABBCBABBBABBBABBA@@C]dgfgg% + hegfieU@@@?@ABBBCCCCCDBCDDEFEFFE} + \hbox{iggggegeF>>=<<<=>>=>>?@>KdgggegfggfghihcH????@AABHbggg\char94{}HCYaY\char95{}eb`afd]gfggjhehhigikkkjklkiijhhiijhhcfjl% + kllmlb[C@?@ABAAA@AA@@?????@AACBAABBB@A@@ABBABBBBCDLOQQSUWXXWVUOFDNX[ZUICA>>>>==>????@BBABBCBBCBBBBA@AAAAABCB@BA@AA?@C]ehgeh% + gffggfT@ABAA@ABCCCCCCCCEEEEEEEEE} + \hbox{igggfgheF?=<;<=>??>==;>=IbfeeegefeegfhgbF??@AAAACScfgd\char94{}OIWc[cffcXcc[dgfhhghighijjiikjlikijiihjiigddhhgeidfdTA% + AABA@@@B@AAA@@??>@ACBCCCCBABBBAAABAAACCBBDILNQRSWZ[YXTPIDRY]YKDB@?>==<<<=>>?@@ABBBBCCBBCCBAA@@AACDCCBBBA@@A@C\char95{}egggg% + ggdfffU@@ABAAABCCCBCCDCCEEFEEEFE} + \hbox{ihggcbheG??=<=>?>?@?>?@=KcgfegggddehhifcJAAAAAAAAOdgef`QJO\char94{}bbcehiafZSbfggiiiihjklikjlkijllkjhjijeggfb\char92{}% + \char92{}TJJGBAAAA@@ABCAAA@A??@@@AACBBBAA@AA@AABAABCBCCCEHLJPSTWWZYYTOKGTYZRIBA?@>>===>>??@@@ACCBBCBCBABAAAA@@AACCBBAAAA@?@% + C]efefeeeegggWA@@@ABCCCCCBCCDCCEDFDEDEF} + \hbox{jgggffhcD==><==>@>>?>===JdfhfeehdfeihfgdF@@AAABBAJcgeebWX\char92{}`\char94{}a`efcbff\char95{}bfgfiijiijjkjkikjkklkjjg% + iighgjga`cZWD@?@@@?@AAAA@@A?@?>??@@ABBCDABACBACBBBBCBAABBCHMLOPRUUVWXUQKIRWVQICCA?===<==>>>>?ABAABCCBBBBBABDBBAABBBCBAABA@@% + @C\char92{}ehggfeeegggVAABACBBBDBCECDEDCEEEEDEFG} + \hbox{iccghiieE??>>>>??>>>>>=<JdegfdgdhghiificD?@ECCHGCLbfgf`X[\char92{}Z[bedbe\char95{}`gghhiiijiiikkiilkijjjkkhkigihfchd`% + \char95{}`PH?A@AA@@@@BBAA@?>????>>@AACABAACBBA>ABBBBAAA@ACCGJOPQRSVZWUQLGOUUQFAA?====>==???@@BBAAABABDECEDDDBAAAAABCAAAAAA@% + ?A\char94{}efedfeedggfXABBBABBBBCCCDECCBDEEEFFEH} + \hbox{ggdhigidF><===>=<=>?>>?=IcggfehgggiijfhbA?CPIHPONWcgfg`RV\char92{}XT\char94{}eca\char94{}\char95{}[Q[fhgijhhhkijhjjjj% + knljmhllhhgfbe\char94{}VXZ[UAA?@@AA@BAABA?A??>>>>@BABAABBCDBA@@AACBAAABBABCFJOQRSUWYWWRLJQVSOLH@@?=>==>>>??@B@AAABCDCACBBBB% + AB@@ABBCBABBA@@A@B\char94{}dfdefbbefefV@BDBBABBCEDDDDEDEEEDEDEFG} + \hbox{igfhghgdE><<==>==>??==><Jcffcghhhehiegg`C?@FVUMOZXdcefa\char94{}SW\char94{}Wccb]S\char92{}[ZZbbhikkedjhijjkjkkllhkijj% + khijjhihb\char95{}h\char95{}E?@?@AA@AAABBAA@?>>?@AAABB@ACBBAAABAABBA@BBCABCILLNRSTVXYWSLLPRRGE@>=?>=<<>=>=????@?ABBCCDEBCB@% + ABB@AABCBBCBBAA@AD\char94{}bdffcebdffeXAAABBBBBCDCCCCEEDDEDEEFGG} + \hbox{iiggehgdE=>??@?@@@??>=><GcfdchghhhhihigcFEIHU]ZRYXdcefca\char92{}]de\char95{}[SYZSRRFXagikgefjkklhjllkjkjmhhdhiiedW\char95{}% + cfgcbOA@AAAAAAA@@@?AA?>>?>??@ABCDACCDBBCBBCBBABCDCDFHJLOPSUVXWVVLJNPOJDA?=>>><<==>?@AB@BAACDDCAABBBAA@?@@@@AAABBAAAA@D\char95{}% + ddefccbedegXBBBBBBBBFFCDDDDEEFFFFEEFG} + \hbox{hgggegidG??=??>?@====>>>Fbeeefggifijhhg`BCRYZY]UX[fgfgd`]bddZNKVTOPLNWfjikhghklmlijljllkiljkiggj\char92{}\char94{}[UG% + LLEK??A@?@A@@ABAB@CB?>?@?>?@CBAB@ABBAC@AB@@AACEDDDDBGJLPRSVXWUSMHMPLF@A@>><<<;===>???ACBCCDA@AAACBBAAA@@AABBACBBAA@AD\char95{}% + eeefedcdddeWBAAABCBCCCCCEDEEFFEEEEDED} + \hbox{iffgdiihI>?>??>@??>>??>>EbfdhfhgfefhfgfaB=BR[SSPFQchedc\char94{}ZZ\char94{}WNQNDI[\char95{}WX]fjhljgelmklkiiikkmkljkj% + hieYV`\char95{}VUD?@??AAAB@ABCBAAA@@?==>?@??@@@BA?@A@@?@A?>>@ACABA@ABEMQTSTXUWSNJKIME@A@><<;<<==>?@>?@BBADDABBBBB@BBBAAAAAA% + BBAAAAA@AC]egeefefddefV@ACCDCBDCDDDEEDEEEEEEFEFD} + \hbox{ififfhifF==<?>==?@>@??=<Gbdfigffggfgfeg\char95{}B?@DJCBCANdfdfc\char94{}]VSNZYOCG\char92{}XR\char92{}X]cfhgfgjkljjjeh% + ijljjlikkigb]\char95{}gjhP??>@@@?AB@@A@@?@@?????@?BA@>AAABBBBCA???>?@ACCB@BBCCGPSRSVWWUMLLGNGCA@><=>=<;<>???@@@CBBCCBABAA@A% + ABBBBAABCCABAAAAAC\char94{}dffeddddddeX@BDDDAABCDDEEDFEEFFEEFFEC} + \hbox{jggdgiifF>>=@?=>>>>??>?@Iafeghhijghffgf\char94{}B@@@AABFNYffgfcXXYFEJDC?BRMN\char94{}\char95{}]\char95{}djhgfilmlhdai% + jklmlimlkhkh`illjQ@??A@?@@?@?AAB?@@@>=??==??>??@?@A@BBAA???@@@@@@AABBCBIMPVWYYWQIJGHADA>==<<;;=>>??@BAABABCCBBCBABCDBABCBBB% + BCBAA@@BAEaeeeefefeecfXAABABCDCCDEDDEEEEDFEFEEEC} + \hbox{jhfegiidD>>???@@A???>==?Gdffeihgghfeehg\char92{}A@@@AABW]SdgggbKLMDBBBB@BONXZWWYejihfghjldceihjljjlmlkkmbS\char95{}dj% + [C>>?@@@@?AA@@BA@>?@>>====@@>>>@?AA@@@??A@AABAACCBABCBEHJMSTWUVPHHEC@@A?<<<<<;<=>?>?@@BBBABAAAA@BBAACBBCCBBCCAA@AACCFadegfe% + deddcd[A@BBCBDDDDDDDEFFFFFEFFGFC} + \hbox{ihfdgghbC>>>@>>>@?>>?==JVfgfhfgfhheffegZ@@ABBBCINE\char95{}egfdSRFDBBCCBAFPZZN[Zaigh\char92{}\char94{}\char95{}Q`iihg% + ikgadlmljejjge[[F==>@A>?@@BA@AAABA@???@@?@A@BC??>ADBAA@?CBBACBAB@ACBABEGGMQSUVTSIC@>A?=><<<=?IB?A@>?AACBAADEDCBBDCABCAABABB% + BBAABCBBAE`eddfgdedddd\char92{}AABCBCBDEFEFEDDEFGFEEFFFA} + \hbox{igggeiicD??==>>>>???>=>O\char92{}fgghggghhfffghZ@@AABBBCCG`gfig\char92{}OCCCCBFB@?AKWMX]\char94{}hhg\char94{}[PET`ehh% + ke\char94{}W`jjkmifd\char95{}adX@>>>>@@CB@??@AAB???@A==>=?@APQDB@@?@@BBOSMA=?BBD@@CDADEEGMPRUURMKCB?>=;<=<;=FVQC>>?BCCC>ABB% + CCBBBBAAACBABBBABBBCBABCCF\char95{}ddgeegedefd\char94{}B@BBBCCDDDDDDEGEEFFGFFFFA} + \hbox{jhgfhhggF=>==>???@@@>?KX]fgffffhhgefgigV?AAAAABGQUdgggdNDABBCAAA?AECNRVSUfifdaQUZ\char95{}aijj\char95{}\char94{}YUW\char95{}% + fjiZJAELD>??@CB@AAA@AABB@?@BA@@@>=?ES]\char95{}UOQE>>CIHZ[UNCACCCCABEAACDGKMTVVSNFFD@<>?><;<=L[TG?=>?AAA@ADAACCBACBBCCBBCCA% + BCCDCBCBBBG\char95{}eefededccefcEABCCDDCDDDDDDEFDEEFEEEFB} + \hbox{ighhigifE>??==>>???>?GUX\char94{}dgeffgghgegiigV?@AAAABBOZefggbDBAABCBA@?@LPL\char92{}\char92{}Y\char95{}hhfhg\char95{}% + \char92{}\char94{}X[a\char94{}]X]daWSORUSCD>>A@??@@???@AAA@@A@AA?@@>>=>?G[ad\char94{}[\char92{}SD?CST[`\char94{}WSGA@@A@@A?% + BABCFJNTURMGB@A>?===<=?P]\char95{}MAA@?@ACCBCBBCCCCEBBDCBBCCAABCBBBBCBAG`dededfdccdedIAACDCBCCDEEEEGFEFEEEEFFB} + \hbox{jihggggeE>????@>????>K\char94{}V[cfeefgeghefhhgV@@@A@AABDTdfgfaDBABBBABA@@DX]]b`]gghecQAN\char95{}dYWZY\char95{}jifdZ% + PTZ\char92{}cQ>=>>?@@?@?@A@?AA??A>>?>>>?=>?M`e`a`ZLFNXZ\char94{}bea[E?@?@@???AA?@?GLORNJJHB>>===>?GGEX[LGGA@AAA@@@BCBBBBBAB% + ABABCECBCDCCABCCAHaddeefdedccedHAABCBCDDEDCDDFFFFEEFGFEB} + \hbox{jihhhhheE=BCB@A@@???BR\char95{}\char92{}ZdfeeffghgghgggVB@ABABAABIbfhf\char95{}CDCABBBA???@S]\char94{}e]QadgbZI;D\char94{}% + fibaUVgjihfceihjdG=>>?A?@A?@BC@@A@@CA?>=>@AAJEI[aZ\char92{}bcYMOQXadd[KE??>=?@@ABDILBIMOQPJKD?<>?<;@BERLRRT\char95{}UDDA@BC% + BAABBBDDBBCBABAACBCBECCCCBBCK\char95{}cbceeeddceedLABBBDDCCDCCCDDEFEEEEEFEG} + \hbox{kiihijhdHCHKHCAB@>@ERV\char94{}\char94{}\char94{}dedeffggggihfh`IFAA@@BBBHcghgaDABBBCCB@@ABR[Q[QAVegaNHA@ENhhe]a\char94{}% + cdfiigaci`H@>????@@?AAA@@@@@@AA?=>>>@MSX[ZY[\char95{}ddZVN]\char94{}e[IJMB?@@FG??DIO[JDILMNLRE><>>;:?IEEUVMX]UKJEBCCBDDBBAB% + BBDCBBBBAABCCDDBCDCBBK`cdedeedbccecQAABDDCCDDDDEEHGEFEEEEEEJ} + \hbox{jjjjiiigUPTTNLABBAAJWVU]aegfehggggghighePH@@AAAAAIcefgbDACCBBCAA@>?FJFWN@Qdf\char94{}=<<=:@dibWadiice`bIJVJQH?@@???@A% + BAB@??@???>?BVD?@BS\char92{}[[S\char92{}efedXTSS\char95{}UQUE>>@FRTBFLXWbVDEGMQX\char92{}M<<>;99:GHBDNW]KHTECABBCBBACEEDDDC% + CCABBBBBBBDCCCCBBI\char95{}dddeeecedcccSABCCDCCCDFDDDDEDDEEEEEEI} + \hbox{jjijiihg]WWSVSBLGDBIUYZY`bgfgfgehghggfeaG@?A@BA@AJdffhcFCIDAABCA@?ABB@DA=Lcg\char95{}>>=;=E]ab\char92{}bdddbfbPCC><D@% + ??@@@?@AA@?AAAA@@@?=JeJ?IECLYZTVdgbcaWX\char92{}bSMUJCAFONYL[YWU\char94{}YLLILS\char92{}`UB=;:::;<<GLSZTG>B?@?@ABABCDDCCCDB% + CBABBAABCCBDCCBBAJbcddedebcdcccRABCDECCDEEEEDDDEEFEEEFFI} + }}% diff --git a/fonts/halftone/halftone.mf b/fonts/halftone/halftone.mf new file mode 100644 index 0000000000..d93a540e5e --- /dev/null +++ b/fonts/halftone/halftone.mf @@ -0,0 +1,45 @@ +% halftone font with 65 levels of gray, characters "0" (white) to "p" (black) + +pair p[]; % the pixels in order (first p0 becomes black, then p1, etc) +p0=(1,1); +p8=(2,0); +p16=(1,0); +p24=(0,0); +p32=(3,-1); +p40=(2,-1); +p48=(1,-1); +p56=(2,-2); +transform r; r=identity rotatedaround ((1.5,1.5),90); + +for i=0 step 8 until 56: + p[i+2]=p[i] transformed r; + p[i+6]=p[i+2] transformed r; + p[i+5]=p[i+6] transformed r; + p[i+1]=p[i] shifted (4,4); + p[i+3]=p[i+2] shifted (4,4); + p[i+7]=p[i+6] shifted (4,4); + p[i+4]=p[i+5] shifted (4,4); + endfor + +for i=32 step 1 until 63: + p[i] := (xpart p[i] mod 8, ypart p[i] mod 8); +endfor + +mode_setup; +designsize:=64/pt; % that's 64 pixels + +def makebox(text t)= enddef; % shut off boxes + +picture prevchar; + +prevchar=nullpicture; +for i=0 upto 64: + beginchar(i+ASCII"0",designsize/8,designsize/8,0); + currentpicture:=prevchar; + if i>0: fill unitsquare shifted p[i-1]; fi + prevchar:=currentpicture; + endchar; + endfor + +font_quad=designsize/8; +end diff --git a/fonts/halftone/halftone.tex b/fonts/halftone/halftone.tex new file mode 100644 index 0000000000..9e247fd128 --- /dev/null +++ b/fonts/halftone/halftone.tex @@ -0,0 +1,264 @@ +% --- ------------------------------------------------------------------ +% --- halftone.tex +% --- Format me with LaTeX, print me with an inch of top and left margin +% --- ------------------------------------------------------------------ + +\font\halftone=halftone + +\def\|#1|{{\tt#1}} +\def\mmax{M_{\hbox{\scriptsize max}}} +\def\SYSDEP#1{\marginpar{\scriptsize site\\ specific}} +\def\TL{{\tt\TeX lase}} +\def\TV{{\tt\TeX view}} +\def\VAX{\leavevmode\hbox{V\kern-.12em A\kern-.1em X}} +\def\VMS{\leavevmode\hbox{V\kern-.06em MS}} + +\def\mc{\small} +\def\FORTRAN{{\mc FORTRAN}} + +\nofiles +\documentstyle[11pt]{article} +\advance\textheight by 21mm + +\title{Halftone Output From \TeX\footnote{Taken from the {\sl \VAX/\VMS\ \TeX\ + User's Guide}}} +\author{Dr. Adrian F. Clark\\ + Department of Electronic Systems Engineering\\ + University of Essex} + +\begin{document} +\maketitle + +\section{Introduction} + +This note describes how image data can be converted to a form suitable +for \TeX\ and then typeset in documents. Pictures are prepared for \TeX\ +in a somewhat different way to normal text---the hard work is done outside +the \TeX\ input file; incorporating the image into the \TeX\ document is +then quite straightforward. + +The image data must be converted from the binary representation used in Image +Processing and Pattern Recognition work to a series of characters which \TeX\ +can map into pseudo grey-levels via a special font. A user-callable \FORTRAN\ +\|SUBROUTINE| called \|TEXPIC| is available for this purpose. \|TEXPIC| +converts a picture held in memory to a text file containing \TeX\ input. (You +can look at this file if you like, but it is unlikely to make much sense.) +There are a few additional routines which can be used with \|TEXPIC| to produce +particular effects: for example, the picture may be plotted as a positive or +negative image. + +The special font for setting pictures is +defined to have some 65~grey levels. This does not necessarily imply that all +the grey levels are distinguishable, nor even that they are strictly monotonic +on laser printers. However, the quality of the output is certainly adequate for +run-of-the-mill technical reports. + +An example of an image typeset with \|TEXPIC| and \TeX\ is shown in +Figure~1. This is the ``girl'' picture from the image database +distributed by the Signal and Image Processing Institute of the University of +Southern California, which is widely used to demonstrate image processing +techniques. This representation is some $64 \times 64$~pixels. + +\begin{figure} + \centering + \fbox{\input picture\relax} + \caption{Example of an Image Typeset using \|TEXPIC| and \TeX} +\end{figure} + +\section{The \|TEXPIC| Routine} + +To generate a file containing the image data in a form suitable for input to +\TeX, you simply invoke \|TEXPIC| from a program. \|TEXPIC| is called as +follows: + +\begin{verbatim} + CALL TEXPIC( ARRAY, M, N, FILE ) +\end{verbatim} + +\noindent where \|ARRAY| is a \|M| $\times$ \|N| \|REAL| array containing the +picture to be plotted and \|FILE| is a quoted string or \|CHARACTER| variable +containing the name of the file to receive the data. If you omit a filetype +(``extension'') from \|FILE|, \|TEXPIC| will use \|.TEX|. You can call +\|TEXPIC| as many times as you want from a program; a separate output file will +be generated for each picture. + +Due to problems with the controlling micro-processor in the standard \|LN03| +printer, pictures with $\|N| > \approx 64$ will come out with white bands +across them, rendering them effectively useless. However, this problem has been +overcome on the \|LN03+| device, which can print images up to a full \|A4| +page in size. + + +\section{Associated Routines} + +\|TEXPIC| normally maximises the contrast of pictures by determining the range +of grey levels in the image and scaling the output to make use of them. This +behaviour can be overridden by invoking the routine \|ZRANGE| before \|TEXPIC|. +\|ZRANGE| requires two \|REAL| arguments, the minimum and maximum grey level +values to be output: + +\begin{verbatim} + CALL ZRANGE( ZMIN, ZMAX ) + CALL TEXPIC( ARRAY, M, N, FILE ) +\end{verbatim} + +\noindent where \|ZMIN| $\le$ \|ZMAX|. +\|TEXPIC| then uses the supplied extrema, rather than values +determined from the image, for scaling the data. Values which lie {\em +outside\/} these extrema are clipped. Hence, if \|ZRANGE| is used with values +which are outside the values of the pixels in \|ARRAY|, the contrast of the +data generated by \|TEXPIC| is {\em reduced.\/} The converse is also true. The +extrema set up by \|ZRANGE| remain in effect until another call is made to +\|ZRANGE|, superseding the previous limits, or \|ZAUTO| is invoked, which +restores the default behaviour. + +\|TEXPIC| normally plots positive pictures---i.e.,\ pixels which contain +low values come out darker than pixels with high values. It can also produce +negatives, however; you do this by invoking the routine \|DONEG| before +\|TEXPIC|. Normal, positive picture-plotting is restored by calling \|DOPOS|. +As with \|ZRANGE| and \|ZAUTO|, \|DOPOS| and \|DONEG| remain in effect until +explicitly cancelled. +You can, of course, use the routines in conjunction to produce any +required effect. + +There is a limit, $\mmax$, to the number of pixels that \|TEXPIC| can fit +across a page of output. For +pictures with $\|M| \le \mmax$, the data are written out exactly as supplied. +However, when pictures have $\|M| > \mmax$, the image is interpolated so +that the data written out form a $\mmax$-pixel image. +The same interpolation factor is used in both dimensions so that the aspect +ratio of the picture remains correct. The interpolation technique used is +a context-sensitive three-point bilinear method due to {\sc +Smith}.\footnote{There is also a version which uses standard four-point +bilinear interpolation.} This produces marginally better results in the +vicinity of edges in the picture. + +The default value of $\mmax$ is~256. You can alter this (for example, when +producing pictures for a document with the text set in narrow columns) by +invoking \|TEXMAX| before \|TEXPIC|, as follows: + +\begin{verbatim} + CALL TEXMAX( MV ) +\end{verbatim} + +\noindent This sets $\mmax$ to \|MV|. Obviously, $\|MV| \ge 2$. + +\|TEXPIC| and the support routines are all to be found in the algorithm +library, \verb|ESE$LIB:ALG|. \SYSDEP{Location of \\TEXPIC| and utility.} +There is also a stand-alone program which you can use for images stored in the +standard formats on disc. This program is \verb"ESE$PROGRAMS:V159". + + +\section{Inserting the Picture into Your \TeX\ Document} + +This is quite easy, although there are a few steps in the process. +The procedure you follow depends on which macro package you are using with +\TeX. Most people use ``plain \TeX,'' the default macro package, but \LaTeX\ +is also in widespread use. If you use a customised \TeX\ but don't know exactly +what is different about it, try the plain \TeX\ procedure. + +Whichever version of \TeX\ you use, there are a few things you should know. +\TeX\ must hold the whole image in memory, so the maximum image size is +obviously limited to \TeX's memory capacity. Since \TeX\ was designed for +typesetting rather than image hard-copy, its memory capacity isn't +large enough to hold dozens of pictures, although it should be adequate +for reasonable use. + +\|TEXPIC| tells \TeX\ to use a special font, a {\em halftone\/} font, for +setting the picture. You have to tell \TeX\ to load this font. To do this, +you type the following command at the top of your document: + +\begin{verbatim} + \font\halftone=halftone +\end{verbatim} + +\noindent This works with both plain \TeX\ and \LaTeX. + +We shall now consider the procedure for telling \TeX\ to typeset your picture. +In the examples that follow, it is assumed that the picture produced by +\|TEXPIC| is in the file \|PICTURE.TEX|. + +\subsection{Procedure for Use with Plain \TeX} +The first thing you must do is to create an input file for \TeX\ which contains +the document to be typeset. At the point where you want the picture to +appear, you type: + +\begin{verbatim} + \centerline{\input picture} +\end{verbatim} + +\noindent For \TeX{}perts, the image is set as a single \verb|\hbox|. + +The picture can be put into a ``floating'' insert, which will cause the +picture to be held in \TeX's memory until there is enough free space on +the page to hold it. For example, to set the picture in a \verb"\midinsert", +the relevant \TeX\ input would be: + +\begin{verbatim} + \midinsert + \centerline{\input picture} + \endinsert +\end{verbatim} + +\noindent This command sequence should be typed between paragraphs, +when \TeX\ is in `vertical mode.' Typing \verb"\goodbreak" immediately +before the \verb"\midinsert" may help \TeX's page-breaking mechanism. (In +practise, you'll probably want to add a title to the picture, too.) + +There is one other thing you might want to do and that is to draw a border +around the picture. You would do this by defining a \TeX\ macro, \|border|, +as follows: + +\begin{verbatim} + \def\border#1{\vbox{\hrule\hbox{\vrule\kern3pt + \vbox{\kern3pt#1\kern3pt}\kern3pt\vrule}\hrule}} +\end{verbatim} + +\noindent You would then set the picture with + +\begin{verbatim} + \centerline{\border{\input picture}} +\end{verbatim} + +\noindent instead of simply \verb"\centerline{\input picture}". + +\subsection{Procedure for Use with \LaTeX} +The most sensible way to plot pictures with \LaTeX\ is in the \|figure| +environment ({\em not\/} the \|picture| environment). This generates +a ``floating'' figure, which usually surfaces at the top of the following +page of output. The \verb|\centering| declaration causes the picture to +be centred in the page. + +\begin{verbatim} + \begin{figure} + \centering + \mbox{\input picture\relax} + \caption{Figure Title} + \end{figure} +\end{verbatim} + +\noindent The \verb|\relax| following the filename in the \verb|\mbox| command +is required for \LaTeX\ to know where the filename ends. To draw a border +around your picture, you simply replace the \verb|\mbox| command with +\verb|\fbox|. + +\section{Producing the Output} + +Having inserted the appropriate commands into your document, you run \TeX\ in +the normal way. If it exits with a ``memory capacity exceeded'' error message, +you've either tried to set images which are too big or you're holding too +many in memory at once. The only solution to this problem is to re-format your +document. \LaTeX\ users may be able to cure the problem by strategically +inserting \verb"\clearpage" commands into the manuscript. + +You run \TV\ or \TL\ on the \TeX\ output file as normal, although the \TV\ +display bears little relationship to the grey levels produced by \TL. Note that +you must use \TL\ version~10 to send output to the \|LN03|, since earlier +versions cannot read the halftone font file. (When you invoke \TL\, it outputs +a short introductory message which includes its version number.) + +The current version of \TeX\ 2.0 has a larger-than-usual memory capacity, +\SYSDEP{Size of \TeX's memory.} +large enough for four $256 \times 256$ images to be held in memory. + +\end{document} diff --git a/fonts/halftone/mandy.tex b/fonts/halftone/mandy.tex new file mode 100644 index 0000000000..44979c90e8 --- /dev/null +++ b/fonts/halftone/mandy.tex @@ -0,0 +1,574 @@ + \hbox{\vbox{\halftone\offinterlineskip % machine-generated by TEXPIC. + \hbox{GZW]QMEVY\char95{}Q\char94{}WQZI\char92{}T\char94{}ROGLIA@JKPUSJ\char92{}dXKXbUZQKIKPIVQSMNKOOZWMVOc\char95{}bc\char92{}% + FSfWSNHL\char94{}SaSVRFOKIWL][MEPacQRI\char92{}PQ[L]N\char94{}\char94{}UXT\char92{}IL[]PHPQSJbU]HYCSNIZIQXV\char92{}U`\char95{}% + MVNL[]TNTYRP[O`UAPIEQI\char94{}TDORTUUORY]EC<QJI=NPT;>RPDKDQINGH>DAF\char94{}\char95{}I\char94{}P} + \hbox{\char92{}ZTZ`a\char92{}Ua\char92{}ATMVHZVKJ\char95{}X[VFSRQGK[RQGV\char94{}ZG]ZGG[\char95{}KPBP`SNBUWWRUUUTHS`WWX\char92{}% + RY[R]XKXYVPPM[UZXYQXWQQa`]UYZW\char94{}NFW[[[X[Y\char95{}UKVLQXY[UPaV\char94{}VVZPWLSU][RKYSc]\char94{}\char94{}]YRa]SLNZPS% + \char95{}OJSWZKL[MUZGLOXRNOHITONYHTJSGGIFPCMORIKM[@HZ[WLYUU} + \hbox{XRT]WScUc\char94{}OH\char92{}DRHY@FFY]Q<FFLWJYKGHQ\char94{}DHWKDSCQGNCXBIQLXVO\char95{}Qa\char95{}a]ZR[KC\char95{}I]N% + [ONSPQaZaSW][YYe\char94{}UZ\char95{}c\char94{}]XZYScaZP\char94{}]XTXKQ[SVYWTaZ\char92{}OSP[[P]\char95{}ZW[`Wb\char94{}W]X[Y% + [[aRc[NXVFGIEVMQMc\char95{}PQUSG\char94{}OMN@IIBLHMCPL?Y@WSUHGMP]BJQUZU[MBFVURWS} + \hbox{bPM\char92{}GWYRWNOHWZPOQWZDDRKT?VOZ[WJPVMJMTCRY\char94{}MP[FNWLUQCA\char92{}\char92{}[W\char94{}VX\char95{}[DVILR]C]% + XIQ]WRYV`b\char95{}]VX[bOY[STS\char92{}\char94{}\char94{}\char95{}b`]TT`QVdZ]][WXVWaaTV``ZUSJZ`\char94{}]\char94{}VT[X\char95{}% + aY`]`\char92{}]V\char95{}TPWZUJTUUTZT\char92{}ULNLSZHEOJZVHRQFGHQGJ<INRXDI[RJGPSIWIHFIASI[TR} + \hbox{b\char95{}\char92{}X?GSXNNLJGOQ]MX>EWMG@CaTBRYPGMU]OaXV`KSXTRLETWOSKTWKU\char95{}YUG\char94{}\char92{}WSPIb`]ZRTV[\char92{}% + MS][V\char95{}a\char92{}\char94{}W\char95{}\char92{}X\char94{}]W`\char92{}ba\char92{}abaWb\char95{}X\char94{}\char94{}\char95{}% + \char92{}Q`V[\char94{}]\char95{}a[\char95{}a\char95{}\char92{}[TS\char92{}XL\char92{}[\char94{}\char95{}``\char95{}LU\char92{}% + [XOTPQWTMOMRNFaIHVT\char95{}MK@VMVZ\char92{}KSNXVMVHZL@RCRFAHHFMDHGPLHID?MSJ\char94{}U[[} + \hbox{cOKMQ[DUIFKBKL9XWTLCOQCNXUFICCOGU\char92{}[XHFOJb\char94{}WWGOUP\char92{}\char95{}YU[]N\char94{}NWMVQ[RYbZU]YUMQXVWP\char92{}% + bg]\char94{}\char92{}X[V]d```bc\char94{}\char95{}a]]\char95{}\char95{}ae`]\char92{}`XS[aYb\char94{}VV[V`XT\char92{}\char92{}% + ]aX][XcXKY\char92{}VU\char95{}S]\char94{}WVYLHUG[LWOHVP\char94{}ZYSJLSYSOURGH?SPJ[FPLXQUPFGF@IWODSZW\char94{}ZZINNRMF\char92{}% + N} + \hbox{TRWcU\char95{}V]C\char92{}KGKaGRTPIFNVHHP\char92{}XVERGKPUYFKSXLQOP`VR\char92{}PKUXVZXPNSST[]aaW\char95{}]WeddY\char95{}% + Y`X\char94{}\char95{}`aa`US\char92{}\char95{}ZZ\char95{}``\char92{}]cb`\char92{}]aade\char95{}b`]]]\char92{}[YYY]QUXYUMPY\char94{}% + QWWW\char92{}IRO[\char95{}UR\char94{}QSSSTTFIYNOVGOSWUP\char92{}XUQVXRYaPEJOJZQCNP<GTLNBD?SMDAI@JESNJAF@NWGRVT} + \hbox{\char95{}\char92{}VZW\char92{}WS`XXZPFC=CWOEL@XCJZZD<FbZLIYB=DZO\char92{}WMGOHaZKKMXYNUNYUZV\char95{}VS`UX\char94{}\char95{}% + [\char95{}NSY\char95{}[]`[WQM\char94{}\char92{}]b]W\char92{}d\char95{}\char94{}OXabab]f\char94{}d\char95{}]`Z]cRXZSQOKH[WNT% + WWUK\char92{}OX\char92{}\char92{}UZOIKSBMKVU?OORK\char95{}SSPQQSVTX]aVa[R\char95{}`OS\char92{}YL?TXLGKBL\char94{}GJQaRRKDFW% + EGFNWPCFVVNIFF} + \hbox{F\char94{}Z\char94{}NU]VUJQLJMEJDSTHITNQJbNKMKIWT\char92{}S@S`QUP[T\char94{}EP]\char92{}KZUTU][[Y\char95{}\char94{}YR% + VUQ\char94{}YY[]W\char94{}`\char92{}T[WTVZMXQY]\char95{}\char94{}TZa\char95{}\char94{}YX\char94{}YacYYSZ\char95{}\char94{}Y% + U[OSWNORPJPLGY\char94{}X`Yc[XKPTIRNMNVNMNV[QXMUWYY[YW\char92{}[RWQVLY\char92{}VSXOPWWX[QTBBJVJGMQTMQXSXTPFFO\char92{}YOVVSW% + U]W[Q} + \hbox{[\char94{}`\char94{}URY?LGAD@ATK@NOP;AEJKCTDQPOJMEFFa\char94{}U\char92{}L\char94{}UWY\char94{}\char94{}VP\char94{}Z\char92{}% + b\char92{}S\char92{}QMTLPOX\char92{}TZN`aab]\char94{}bZWTZJ[R\char95{}KZb]]VWZ\char92{}a[SS`a\char92{}PU`VVUTUIULNECPVJO[RN% + K[\char92{}SSY\char92{}[ORORQIWVUVNKDSZWYYYZQTP\char92{}\char92{}ZWS`\char94{}\char92{}OY]K]\char92{}\char94{}P]]KGV\char92{}% + VQ>IQJRELKZOBOVKIEUNH?QTTVDR} + \hbox{MT[MLX`\char94{}MHXNPiOGTJ>FQEKQKQJFFFCKROMMMZUKRZS`[`XRYU[OS\char92{}UTVPL]VQXW[RQ\char94{}]SM]ZZYX\char92{}S\char92{}% + YVSLPWVTLLMOMSRX`\char94{}aNLTROIXPJUEQMQVV[a\char95{}`\char92{}bdc[YVW\char94{}TXTZU]Z\char95{}XZ\char94{}\char94{}\char95{}% + TX`[X`a\char95{}]\char92{}[XZ[YWXKUa\char94{}INOM]\char95{}MRa\char94{}]WMDPJDDJINBHN@DEJG<@KOORXR[W} + \hbox{N\char92{}\char92{}PQWBDVRX[T[\char92{}FLKWXPFRMZMYMRI[WVR][X[L\char94{}FNXXYOQJ]\char94{}bQ]PZQYY\char94{}ZX]\char92{}% + caW\char92{}`]XSWba\char94{}a\char92{}a\char92{}]\char92{}RO[UURHKQBSD\char92{}[\char95{}[XRM\char92{}W]STLPXMPOIV[[\char94{}% + X\char92{}aaa]\char94{}[\char92{}[X```Z]\char95{}[b\char95{}YZ\char95{}\char94{}Vb`a\char94{}\char94{}]ZY]]]\char92{}XZ\char94{}% + \char95{}\char92{}]Z\char95{}Y]SYPL[]YP@MSXV[SFDBFGKRNLWKFMLLSR]VWXZ} + \hbox{[YaRXPZR\char92{}NIUNSaXODHIIVcWYYIHOVGUVVOX`TY\char95{}\char95{}ZTS]QX``\char92{}X][b`\char94{}NY\char92{}S`[WXa\char95{}% + `\char95{}`aX]\char94{}cZ\char95{}e\char95{}bZaXWVj\char95{}NZYNVOEX\char94{}T`]UVRUSSHMV\char95{}NQY`[[\char94{}\char94{}]% + `c\char94{}\char95{}\char95{}\char95{}X]]UX\char92{}VT`\char95{}`ca`[`\char94{}]d]\char92{}S\char95{}Z\char94{}]WdcUaY\char94{}% + \char95{}Zc\char95{}\char92{}aQNXZaZWVQPY\char92{}J]HSKFAAEDEES\char92{}EDBCDFLQUUXZ} + \hbox{]XG[UWROZXCUJGWJFAYCLBFYLCHMMTVPX]ababY\char94{}RV[``]`X[\char92{}\char95{}\char94{}\char92{}`\char95{}[\char95{}\char95{}% + \char95{}ZadaXaZZVXV\char92{}]`XZdb\char94{}b`\char94{}`a]XUXPW\char92{}ZXWGRUS\char92{}Z\char92{}`]\char94{}\char95{}XRSQY% + VYYa\char94{}\char94{}\char92{}`a[]\char95{}\char92{}Z\char92{}]]\char94{}\char94{}\char94{}a\char94{}\char92{}[\char94{}\char95{}% + \char92{}]\char92{}Z`[\char95{}\char94{}\char92{}`aa\char94{}\char95{}\char95{}aZ`a``TVSZ\char94{}[XRJUa\char94{}TNMGTGMMCC% + DE?KLFGKTONMWcNEIVWYPL} + \hbox{]TRNaPDGJ[H?]VKR@NNEATRXUV>ARUQ\char94{}e]acUN[YN]Z[Ob\char92{}\char95{}]cZ[\char95{}]b`[\char94{}\char95{}ca```dadfa% + \char94{}[Z\char95{}daa\char92{}\char95{}aba\char92{}a\char92{}]YSZ`\char92{}O[`XP]Xa\char95{}b`YM\char94{}\char95{}W][Z[V`% + \char94{}Z]]ab[Z\char95{}X\char94{}]\char92{}\char95{}`bfdc[]]Z\char94{}\char95{}[\char94{}\char94{}ac`a[`cRa\char94{}]Z]\char94{}% + \char94{}\char94{}ace\char95{}MSc``OTY]IOCNNREQ@FWHURUWPIEP\char92{}[YCJGHNMQQ} + \hbox{]\char94{}ZXWTULHGZGIMQYSCMQOJULXGKS\char92{}\char92{}XQKLXL`cb]V\char92{}Y\char94{}\char92{}\char92{}][\char95{}`[\char95{}% + b\char94{}X`\char94{}\char94{}````\char94{}]]`\char95{}``\char92{}]Z\char94{}\char92{}]]]`\char94{}\char95{}\char95{}ad\char94{}% + \char95{}\char94{}XNY`ZYa\char94{}a\char94{}\char94{}TccaYTWP[]\char94{}``\char94{}b\char95{}\char95{}``\char92{}\char94{}Z% + \char94{}[a\char92{}\char94{}\char92{}]\char94{}eb`aaaa\char94{}\char94{}\char95{}\char92{}`\char95{}\char92{}\char94{}`]\char94{}% + ``\char94{}XXe`\char92{}]\char92{}b`\char95{}\char94{}\char95{}\char95{}\char92{}b\char92{}\char92{}\char92{}Y\char95{}ZVWQ% + OJIJUHULQJCDC<FVVEWNPCY\char92{}ZZON} + \hbox{\char94{}DEM\char92{}WbQ?TJ\char92{}LFQG`K@LA>ZUBKGJ\char92{}LOIZ\char95{}S\char94{}K`aZSf[X\char94{}W``ce]c`cbd`db[\char95{}% + e\char94{}\char92{}Z\char94{}d\char92{}c\char95{}\char92{}\char94{}`\char94{}\char94{}\char94{}\char94{}bb\char95{}Z\char92{}% + [`bbX\char94{}\char94{}[ZYa`\char95{}b\char92{}b\char94{}`cVaaa\char92{}b[[`bW\char95{}Y\char94{}`\char92{}`\char94{}`b`X`f% + cbed\char95{}acefbbf\char95{}\char95{}Z]\char94{}bYa]\char95{}ZY\char94{}]\char95{}UU[\char94{}\char94{}UY\char94{}]YRNLLLG% + YNNHOLI>BVFJTGIPEJ?CU\char92{}NBRTYHRRGV} + \hbox{bJSDNL\char95{}KJZZYUOGHCJ@P\char92{}PIJDMV\char92{}UPYSOY\char95{}R\char94{}Xcb\char95{}c\char95{}\char95{}c``b]c\char94{}% + ]b[aa\char95{}\char94{}bdabc\char94{}\char94{}abc\char95{}\char95{}`\char95{}\char95{}\char95{}[\char92{}``a\char94{}a\char94{}% + ba\char92{}SY\char95{}\char94{}\char95{}WT\char92{}[\char95{}]]\char95{}`bb\char94{}``]\char95{}\char95{}]Z]ab`\char95{}\char94{}% + aafbb\char92{}``ca[V\char92{}TNHKISMOV\char94{}efcdeaX\char95{}Y``\char94{}b`a\char95{}`a\char95{}[]\char95{}b`[\char92{}\char92{}% + \char94{}`UUMPVWUWSQMGCTGEH@>EOJGOTMJRHNRbZ} + \hbox{\char92{}Q[V\char92{}VbRFBVIR\char94{}FO@>JCD[CDHEKYPP\char95{}]\char95{}\char95{}cb\char94{}IK`Q`aZXV\char92{}Wbb\char94{}% + Z``\char95{}dba`bdbd`\char95{}\char95{}cfedba`\char92{}bb\char95{}`a`b\char95{}\char95{}\char95{}b\char94{}\char94{}a\char94{}% + \char95{}ca`\char94{}\char92{}V]\char95{}baacdacd`YZbbcfe\char95{}aLWRYbcbWNLGRF<987;BF?KVcd`caabb\char92{}\char92{}W\char95{}% + a\char94{}\char95{}[\char94{}\char95{}ZY[\char95{}ZZXSUXUSSUXKKPJ@KG?JXVELSEHZTXTRLIVUUL\char94{}} + \hbox{eVVQZXNSSFKNMIEHPTCNK\char94{}\char94{}KEFKQNSMDOLWdVPadc[Sac\char92{}cc\char94{}]]]Y\char94{}][bb\char95{}affc`deceb% + ddedeb\char95{}degcdcbba`b`acba\char94{}\char94{}`[UPS]XYX\char92{}]\char94{}\char94{}``cfc]KVQ]U[\char95{}bg[SGBB?<FCF?;?@% + @EVNgfcb\char95{}UQ]\char95{}bca\char92{}\char92{}``\char94{}a[[X\char94{}[TXLMQPNEXYQSQPEFOTSJGFALD>=JZZ`\char92{}NCV[[} + \hbox{YZXNZWOWUCCH[GSNFRSKCIJQGTBILGHJSJU\char95{}\char95{}[Wcd`][]bcaca`ac\char95{}fcagfe`[SBGD79;AAGJAMRbbc\char92{}aggdf% + acbaeda`\char92{}`b\char94{}\char94{}\char94{}]GT][[]`b`aaYFP[PVQ\char95{}cegWJB<>>IY`cOA;?DBKNfce`VPS[[\char95{}\char94{}\char94{}% + ]]b\char95{}\char92{}`XW\char94{}SXQ]\char95{}\char95{}L@FJQXQGEEV[TRPBBBFOKOCCM\char94{}VRB]UTM} + \hbox{``EEINLOJTFEcWAESU\char94{}ZUMLIAIJBNM`TKM]FR\char92{}\char92{}T`]``LgaZVX\char94{}``\char94{}ee\char94{}cfhXRDBA;>HT% + PP@=IBDYgeZTSbagefba\char95{}\char95{}d\char95{}\char95{}\char92{}d`\char95{}\char94{}eb\char95{}[YZ`aag\char95{}QFPIYSX]ae% + \char95{}bVI@=A>MK@LaC:@EGFO[cVI[VOQXa\char95{}XX\char92{}`X[]@WXPXSSB>YQWWPYMIT[WDDFFH][QGHLWSDIMHGRLHF} + \hbox{PU[LLLMAL:LQMENC>FZRCD@DAPTNS[LMS]a`\char95{}\char95{}f[\char92{}Cda]``\char95{}d\char95{}\char92{}\char94{}\char94{}% + ]ZadffcWE=B<;FfcUaQ?D@BJ\char95{}da\char92{}U\char95{}YQeefedcaae`a`\char94{}\char92{}]ba]]``baYTYPLPOYQ\char94{}`\char95{}% + eePDA??<H\char92{}cedE=?>>HR[\char95{}b]RSMMRW\char95{}\char92{}[YY\char95{}\char94{}[]NPXJ]WWKHIUOSJGAEISNFECYZYRGJJBEELL[% + S\char95{}ZHD} + \hbox{LVMCJUU[ZFSRDJHR5;ALBSAQII=@AIOH\char94{}NQOQ\char92{}bb\char95{}\char92{}[VaY\char95{}gcSf`\char95{}]]eehciUL@C;?Tf`% + IgOCG==H[fbc[cQDHbfcfc\char94{}\char92{}Y\char95{}`Y\char92{}bddh]`cea[UWCMVLZedediccUFA@@=:>FIC=8;A@NLcbbMXMEEKWSYY[UW[\char92{}% + RM[S\char92{}XPFQOF?AAWHTPQPKRPPNODFKDFIQUTSJVJZa[} + \hbox{\char92{}V]LD?W[K\char92{}XKGGHELQDKGIGCGBPYEMNRUUUW\char92{}\char94{}QNVS]`a[\char95{}]`]\char95{}Y]ZZVLSidWE>A;5<Vc% + bVEDC>?J[hffdV[NN\char92{}\char94{}ggbb\char95{}`bc\char95{}`b]\char92{}Z\char94{}caeb\char94{}ROV\char92{}LL\char92{}`fefh% + fgdWEA;9:57979>EDCURhhc\char92{}PNDMSUS][\char92{}\char94{}W\char92{}][OPJVYT\char94{}VIFKWMFJHBGVUJSWUSYYUHRACHNSWP]XY\char95{}% + } + \hbox{NH\char95{}KEMH\char92{}QAK\char95{}\char95{}XUXMLLK?ADLVCKB?ELFS]TX]XI\char92{}P`\char95{}Z\char92{}``a`UUSVTVfaddcP% + L@<>96;@>>;=B?BPjgege`YNXQ\char94{}cdga`aa`ZZT\char95{}`\char92{}a\char94{}`a\char95{}VWU\char94{}QEN\char95{}ajfeefgeVNA?:% + 9:9;?C><DLPeec]\char94{}TSHKERTRYX[FXMWG[QQNRIPNENSRa[WA@DEFNRCCUVMIKHRYUU[NY]ZJ} + \hbox{W\char92{}UG\char94{}KPXU\char94{}UDJPMEDICCBKQKE?JJDQEOBHMUDUUSV\char92{}[\char95{}UZ`\char92{}`OSKSSPccbfeY]C:=:88;% + 67;D?CD\char92{}jgidhf\char92{}OLSW\char95{}fafahca\char95{}cZ\char95{}adabdb\char95{}UW]ZOQ\char95{}\char95{}Rcddddgfc[IA?% + ::>?D?=COU\char94{}fddWSMFUKPRPQVZZSWYUUJQSVZPDCOUUVQQROEFJDNTAHMJKID[RMHOVUXQWT} + \hbox{LIV`FHH\char95{}MHOWFFOZ\char95{}\char94{}NCFAGQOCIBAKRYKKLIUBJJ[PLXW\char95{}XXYTELKOMcb\char95{}fhdTTC>;=<=?>==?INf% + ccgcHheUPYZ`\char95{}`gdeac\char95{}]`c[T]`\char94{}a\char92{}KXUMN]adXe\char92{};cacgcdZSGD><<?>HVWbfcb]`UFFJKQXX\char94{}% + VS\char94{}][HXXY\char95{}OWRPVZ[[RNTSQLDLTAAHKXNC?IMYX[GBDKCPZU} + \hbox{BKSXPMMEYKKEGXMUPJ>GHIN@BOJUXNWKGNIWVFTTZU\char92{}\char95{}\char95{}U`ZXYSMKN\char94{}[bcgggfbXI<::<;:=<CQff`fb`\char94{}% + Caa\char92{}Vd\char95{}a\char95{}eddb]d][\char95{}RX`W\char94{}aXWCTLZ\char95{}eUUTTTabeeecfa\char92{}YMIJLX]afieT[aIJQKGT\char92{}% + SMS`V\char92{}RQVSJ]HSMUPL@CBGDCMOJVTICBEANITKDM[OHNPKMVIER} + \hbox{O\char92{}CXVZ]IS\char92{}WAE@?UJOLKOLEOWJ<COMFEZTSYQPOFLESVQ`Y\char92{}`TTLXW\char95{}VbXggghi`bSIB==DFR[jieddc``LV\char94{}% + S\char95{}Z\char92{}Z`d\char95{}facaQDU\char92{}\char95{}ae[PXMTXXTe\char95{}c7?W\char94{}\char95{}ddebcdhhggfde`gig`J[`UVH% + FGUR[U\char94{}VM[SPYHWb\char92{}VJHMRHFMP[ZJMRYRF?BRJNQLOSOT?@]UQWSX]`]} + \hbox{>JW[IT9JIPP<CCLRVPKDGKULRHWG>QDDQM[A\char95{}ODNW]CXNZZQUYVJS[PZ\char94{}\char94{}\char95{}ehedece`\char94{}[bVeghhee% + cjfcTTMbYS\char92{}YVafaSXa\char95{}c\char95{}dX[TBNY\char92{}VWSZXYXaZL[e`dhedfheghjihRTjhQBX[JTXSSNUV\char92{}WW\char94{}% + U[VUVR\char94{}VDKKM[WVJULEKOSGNCJRLJLHABHIVDDJS\char94{}\char95{}VSUSJY} + \hbox{GT]ZHUTVKNKRGEFO@@:CAEPEFKMGT[USIDPYJOYYWQTMV[TVS\char92{}PONPPLUW\char94{}Z[feehgdhdfddhihikhOKQMO`ZXSQRX\char94{}a`% + ecX]abb[WYTTCYVM]bhebb\char92{}RR]\char95{}W\char94{}eedegffghf`[XXaaQLWLPCQHUYU[cW\char92{}NX]R`TMS`[UFDVUTLHBBHIFEJOKAEMB% + BRTPNTUUGGKNIPPK} + \hbox{PQ\char94{}VI\char92{}`\char92{}KD[WRLNWUSHVI=ISIWMKNFAEN\char92{}cMR\char95{}MAEXDVRP\char95{}SgONO`]cKF]Y`X[Xfhijfh% + ggiekiifidbaRR\char95{}\char94{}SXeZPeiYDH[YNV\char95{}IWPMQfTbaNed`\char92{}JIWJRUn[TV[hXMX\char94{}MEL`d[PPRKRBDHGUQe\char94{}% + dOeQ\char95{}UW\char95{}VLaP\char94{}\char94{}LGBNONPQOA@DJKTGQXTDNZTNNMKLEVSSKUV\char94{}K} + \hbox{HV\char92{}\char92{}[JEGVUIRV@BEDJSBIAEAM?GGM@??KDGIRSJRIFP]YMN[aVR]RZUXSSY\char92{}Zb\char95{}W[\char95{}c`afiff``c\char92{}% + WTLOEIA?FPe\char92{}\char94{}e\char95{}TPY\char92{}VUQNWRMXWJLNdbega]]OSNZWQ\char95{}a]R\char94{}T\char92{}cbgfhcTIDNSUMWM\char95{}% + V\char92{}`ZVPWUILY[Y]VJGZYTJEFEKPUQIFAHMLRGUKKCCIJJOWRKJWKFMVTQ} + \hbox{[Z\char92{}UIKNSH@IPLH<?TXVKCKTEITRKLXEDNQKWVUNV\char95{}QOUNRGRYXWXSc\char92{}UO]]]TKchf\char95{}SUKVONOUXUZYHXLJONQ% + Wbcegf`ISPWEO]UTBULWSIWahZZb]\char94{}PWTTG\char95{}WTGY\char94{}ab\char92{}T\char92{}WKFDIRSZHLQS\char94{}a`Y`]RcN]\char92{}% + NUPC\char94{}\char95{}]SQOHDHP[MPAD<HUL@LRXSPTQZQEKBMMMGXXGS]X} + \hbox{Sc]WLHHLCMMQFFIEFNWNDKNJ?TQOOS?BJM]RIOIMWRO?OSSZNW\char94{}T[SU`TURTPWPQRaWZ`\char94{}\char95{}\char92{}deYZ\char92{}% + XZNFVXRc\char95{}ehcb[]OT[XVPEGUOOHBFLCX`QE\char95{}]bURQEUULRQW\char92{}[\char92{}\char92{}XYXLDDJD>CN\char92{}V`[VUURW`VU% + NZZYZP\char92{}VSYTKOELIOCDC>BKKKSPD@HGMJJJIOKOGEPVZTVZ[} + \hbox{\char95{}OVIULLDGCJTa]NHBAWRYQFDELNKNMGANORU[VMNR\char94{}GK\char92{}IRMHTVT]W\char92{}NY]NQYaa[\char92{}RJWYPOMLMP\char92{}% + [OLYaVMXRc`\char94{}bdW]NKZ\char95{}a\char95{}LKQRPRRUSQN\char92{}aaY[g\char95{}VY`VUJXQOCBECMKHFG@C=MKTW\char94{}\char94{}% + YWU\char95{}\char94{}[\char92{}TNX\char92{}SZ[OXQHPUNGXOOPEKGOSTKNC>D@PYL>ADHFOICCS[GMQSS} + \hbox{\char94{}UISU\char92{}RUWHWGHHLONGKIHHGJIE?CAJRN@=LIT][IWIXVSHZNZXGSXJM[\char92{}STXSTNWUOS]XVWZVMQZULPMUW]]\char92{}% + \char95{}[Rcg\char95{}NEJPOM\char92{}LNN>EFHIVUM\char92{}VUXVaZ\char92{}TR\char94{}\char95{}`X\char95{}XUPOFQMIJCLZ[Y]X\char94{}% + ]PYaY\char92{}IXSGOT\char94{}PJ?HJYU`OXXF?CFS[USMGTSGLOUSBW[SPLH\char92{}[\char94{}UQV?LZV\char92{}} + \hbox{RYFTTUUMPECR]HCHEKCBMVMDCFNFHGMVLCFV\char92{}NOREQTKEVV[OZXJRZWX[dab\char92{}P[QQIKKRVJLLKE>NZS]`\char95{}Zc`R\char92{}% + \char94{}`cVSUWQMMKCALMCIEJaMQ]T[ZdYTQ]`dWVPRXWU\char92{}Z\char95{}RV\char95{}YZ\char94{}`c`]][XWZ]Z[ZS`MLR\char95{}ES[V[YX% + XWHMXWVVJGM@AHKHFEFQUD?DRC?RFLSRSQZUKV} + \hbox{]]\char95{}Y\char94{}UVRXVFQKMTNLR`V?HGBDJCQbVJHMZRF?[QcTPVMZa\char94{}Y`HQR]BVT\char95{}`bh\char94{}[UQFVL`IFESR\char94{}% + VNUNYXGOb\char94{}VYZfcZ]]LHMUWU:<TSSE@OW\char92{}NRIPLbhdge`\char92{}[aZYYWZ\char94{}[U\char92{}X][Ycibd[]\char95{}Z[T[SYW% + X`Y\char95{}]HV[VVBWQTYUIBTSYRYLNF;?EMGCHPFJ@>;EWQDJLZRZQ\char95{}M} + \hbox{\char95{}\char94{}`NMFBLXQOSQIHLUGFKGSIJDDHRMLKJ?QHMGFKOOIHMXVWLESM\char95{}KUUTZWacdfe[\char95{}WGW\char94{}[\char92{}% + \char95{}VO[\char95{}[[XYccU]bc\char94{}bc`MDWEW\char94{}TV<>@CHN@BTbVMUT]feb[XVVWXUQRPTTYYWX\char94{}`hfdd\char95{}\char95{}% + Z[\char94{}[VRLR\char92{}TL[T\char94{}JKQRZ[SOKLDY]UJLQPJ>D@IFPLFHPQHGADLTMJMJQVMSQ\char95{}} + \hbox{PMG]ES8PSZIDM;HCMBQZFQ>=HDRGDSLLXYX\char94{}NTGMT\char94{}HIFMPPONZW`O]V\char94{}aZWaVd\char95{}faVcgdadTZ\char94{}]\char95{}% + ]W\char94{}dfidh`\char94{}`UYKQPPSU\char92{}]@>LAJC?ILNIY\char95{}Y`c[JSTSQTSRUMRTOQSUUUTRX\char95{}\char94{}]\char95{}\char94{}% + e\char95{}WRFPS\char92{}QBP[LYZKW\char94{}QGDGIPKPTBBLL[?AAKUOUJRLF@GOMJGTaY@DJPGEU} + \hbox{\char94{}Q\char94{}bOIGKILJCJ>NX[ME?GGMaOLHHBJNPMGHM>LY]MAVUMTUVeMRcO`QIM\char94{}W]\char95{}Z\char94{}adc\char92{}`a% + `da`[YZSXNKWTaejg`ZXSIKCCYZVHAB?FD@D@M]aX\char95{}\char94{}dc\char95{}USSRSPRSQMHNPORRVWVYVXVYZ`Y\char94{}OQbYW\char95{}X]\char94{}% + PUKXRVXPY[OAKKNTH@DGKHOECILDHG?ARLQLJ@<CEHJLQXUW} + \hbox{XIUXRAKFJVRNPXWUJP\char92{}H@DCD\char92{}UNI@@ABBISGRMOEX[Y[[WKP]HR]\char92{}[X\char92{}]g`b`d\char95{}dba]\char94{}]% + [Y[ZXXXYXYMMHHTchdeNKQA@M\char92{}\char95{}\char94{}ULB?JAFAKDJ`b\char92{}ec\char94{}\char95{}SUQJFFJFFEGMOPRWSXZ[]][Z[\char95{}% + a[[VY`YWaPO\char95{}``UYWZ\char92{}GCLWWKPKOK<BGABPJH??CGMRDP=GFPMUM\char94{}`[QM[U} + \hbox{cQbP]]RKNJVVJC=GJRVM>=@TWURKL??CI[JCDQJELaW`WZQZTWPR`gW\char95{}d``ee``]\char92{}\char92{}YWXUUUYWWTTWUPNOLHTbbaRAGGM% + E\char95{}\char95{}ZQLBCF@>BD9G[cZ]cb[WPOHJCAIKGISUVZYZWYZ[\char94{}af`Vcc\char94{}[ZTRSM[UQWW[ZHGTOLPELQIEAJNBADHKJRLKFCA?% + JRL@EUYN\char94{}VPPXNO\char95{}} + \hbox{XWLAHMQV]TNIB>HGK\char92{}WVNQTSJEB@NPY\char94{}LRXGNDEMFX\char92{}S\char92{}bWOU\char94{}HSXQUWRe`a\char95{}]db`[YXR% + XYXTUPPRXRRPSNMO[`\char95{}VKNC@NSUWSCDOE86C@8;Uc\char94{}fdbXOMJB?CEHMIQUVXWZWWXXXZ[Z]\char94{}]\char94{}Y\char95{}[aZ[YFW% + ]SMRHLJOMVPYLPQSY\char95{}QBGNMA>MNLKCHJ@DFKJLV\char92{}VKJJUIHT} + \hbox{`LZWHP\char94{}SOLRUH>@MCA?IH@?OFQBFJKEFIQOOT\char94{}VEHFZTVO\char92{}W]\char95{}TcSRc\char95{}ZVZheeaha]\char92{}Y\char92{}% + XSUQSSTNNOMRMUKJY`IQOE9CMOMSYHDC65?I>FDQbdbZXXLIC>FKKJRQQSQPPUVX]\char94{}ZXYX[\char92{}\char95{}Y\char95{}`VYa`[POc[NGZWVD% + PUWWAAIFEPKFLUFDFMHBDPQMGSULNVUWKKRVQS\char92{}T} + \hbox{VQHBRIJY\char92{}@IRTHRIPUUGIGINHDFGLABAJPOZPNLTEAYD]Pb\char94{}YNV\char94{}Z\char94{}WVY\char95{}bfb]\char95{}\char92{}% + \char92{}[XYZYTVROQTKOMLFLKPIK\char95{}YPJ<=DRSTPNB>923<B@??DPd`UYJJF@?HFNONMLORRSVWXY[WTWZYVZYWZXRKXXY[X[UR[W[WQZKOMELSNVQ% + BEHQINUKRQQTPKNRMKNHADUOYLPZN} + \hbox{MSP\char94{}MEOJAgRRFTQMIbKAI:>QM@IJQRJMHMHYbKCAEdD<FQTVb[[Kce\char95{}]eZU\char95{}`X\char92{}\char92{}]\char94{}[]Y% + YUWPQPTOHMMTIJFPV[\char95{}aO<>DHOLME:63258?D;=<C`\char94{}ZVKGL@CMRJHILOLNSTZSQVTYXWWX\char92{}W]ZYW[`[\char94{}S\char95{}% + \char95{}PASPHJ[P:LOTIKKXUXIJ?FLNGCIH>>MCBU[Y`O\char94{}YPTXVVKO} + \hbox{`\char95{}\char94{}ZOMOXXaJPOSODRQ[MNKX[QLSZOE?AFYCNSLOVOJWOQJ\char94{}a]ZUZXNW\char95{}]f\char94{}\char92{}\char92{}% + Z[\char92{}XYRUYZXSQPKKMNIQMGDI?L\char94{}ZTD=<:TPPNHF;224=ANFD?FSYWUNL@HOQKHHIKMQSSRTSWYVWWUWN]]\char92{}]\char95{}`]\char92{}% + XZQ\char95{}RL[\char94{}\char92{}ZURPWZSODFHT[SLMA@GIHFFEDHHO@KGEHHB>GLQOHNX} + \hbox{a`QBNPGLQE??GXBKDLAC?E@:JL]RBCCLAOFRDOQRSFSA:NK\char94{}dTW\char94{}\char95{}\char95{}b\char94{}`f[cZV[`X\char92{}]YN% + WWVTQQIGMJIARDE:EaP?<834<NP;9:5323:K><88>WXVSKILTGOMOHNGMNNRQTTZWURWYVYVYZZXbaTNTO`bTF`d\char95{}HNVLWABMWTTO?HJEJKUEEKH@AF% + H@R>[ME9D>@YWObT} + \hbox{KSZ]S[JWN@XZTNNWVMLDGNPIE@IQLKLILXVMOPLZQOLGKF]\char95{}`Za\char94{}b`d\char94{}da\char95{}c]XXYWVWUTUTXUOKIHGHMGKJHD% + DTV:8:58BOJGA;74446:7;9:7BXIIONPHNJIJILKPLROPRWYYRRTYYRWVYW[\char94{}[\char92{}\char92{}XKQVR]]\char94{}`WJJWRNTJ@OONDDGNRP% + CBPQOEIGJNJMGPVRYZQRSKHG} + \hbox{]\char94{}YT[\char92{}RVWXOGGFUS>IFMJQVNMMFISROIFXW?QSIDU`NbPUXZ\char94{}O\char94{}X][]c\char95{}\char94{}YX[XYXWVSTT% + VUQSOJICEGIINLF9<NM?C;79HIKD>H:43347A>;77=YTSLKHEFKFGHJLMKHMRXXTTSURURTQSUXYZ]XVZY\char92{}\char95{}cUQQ[[YLOVVYZUFNHHSKEPN% + QMINHUTA;CSaYWDBMWSKLKWZ} + \hbox{U]\char95{}RT\char92{}NLGXQWRJOPNILHDFJK\char95{}\char92{}XRNNUNXUCIKMANSOdXU\char95{}c\char95{}bbdca\char94{}S\char95{}% + \char94{}YURT\char95{}ZZY[QSQQPTTRPLIEMFGMOH88CK;;<8;ALB>8;96754657;=9@REMQPLEDJIFJKLUHQOYYVSXVRUQVXPUUX\char92{}ZWZTNNW\char94{}% + VYSUTW[YUHFNKXMJGMPIHNRWWRHQQLEFJDJWPYVHMSY]][Y} + \hbox{VYYVPWLENHXLNOUICSRF==XXRDCLLRSFIUQQHOLYSZ\char94{}S]WMEPWS[bZ]XZVYUTX\char92{}ZURTQORPQQRLIJBGEKILF<;H@8;54:CFJQ@<;8% + 5344557=<<HKQROIHHDIKKFKGLNZTTUWWSVUVWWWUVX[X\char95{}\char94{}ZQPSXSW\char92{}SQMWVKGRMKQHHJNUPCRIHFEIPRNMGBGIDHDOMGPISY\char92{}% + \char94{}} + \hbox{[QXJX[`]TVJLH[OFHPUTL]UKPF?JB@VZOTAOELD\char92{}YV[\char95{}\char95{}WQV]ULY[\char94{}bY[YXSRT[YTSOQOKRRPQRLECBFIEPF7% + =P8=<447;ECF;E87533459;6<7@DHQLMHGJEJHIEFL[TQQWYXUPTVYVTSYWZ\char92{}XXWRUZTYZSQT[]b\char95{}ZLOCALRIOMYWJUNMDAABJOJDUHSZQR% + \char92{}P>EKLT[} + \hbox{QJGNSSSV\char92{}\char92{}]XOJIOSH=PDK@HOUTIRSOWUPYWPVaaUQWRMQMU[ZRd]dbVYUVPQUV[XUUPRLOMKKOJHDABDGHD6:=66543:A;:9@?83% + 6433555657ALLKMHKHEKJFAGITTQOSPRUTXXTXYX\char92{}WRU\char92{}\char94{}TRXZ]TUNOV[Y]UOIXLBG@GPTQQVKMFBNINJIDAAIKTXTUSJBOW[MU% + } + \hbox{aRNNJQA<TTIC]\char92{}VL\char94{}\char94{}LHMVa]VQIEHMSDEYSYSSDAZPYOPB\char95{}SO\char94{}QXab`YYPPVTQPRZR\char92{}QS% + QNHGKMQNE@BDFED7?;>7658658?53373123354654<9GIXNLBFHHIC>KNPORXPTXVTTYYXVVPRXT\char95{}caWMM[WRQXNNSGIKGKS[SGEMHFKH?:IQWCIWRM% + ZEBLLMDAEQCY\char92{}ZPI} + \hbox{YPLR]c\char92{}XLMLRYWWWVUKOZMINLOJPMDUTZS\char92{}VKCOWTEHOTROZ\char92{}\char92{}`Yb\char94{}]YXRRRPPPRXUUOJQOPLLLHK% + FA@BFGB:FI764476;@A<75422482358698AKNUKJKIKIGDEMNQNSRTNTTXVTWXURRSWV[[[VZWSVLU\char92{}XMQTIKTORPIPNKKKJ?KNDBHIEHEKENENJTUR% + NDRNTPPY} + \hbox{V\char92{}YMSUZUTNFMaWHEBBTH@N\char95{}[SETYSJIFQUDIISQIMTDUWGMEXYY\char92{}da][ZSWTPNNPYXSPLOONIKLIHGC>@LKD8;854224<% + 9:G975633355544466:DNOMOIJCE@EKLMOSNQRSRNTVXXUUSPOTWZ\char92{}\char94{}XZTWIOW\char92{}XSQWSNMQC?ERYLCCLIHECDEGMPCQEA>E`\char94{}% + XQBDFWVUb\char94{}} + \hbox{WPVNDZPHR]VJ>MX\char94{}SHCFQTQSEDQRPEPNOPSFEHLFLRVJRVYORIYZZ\char92{}[VWVXSTMPPR]WVOOQMMKKELJBCACOC>?6775437896>5674% + 343222647<8:MKLKHBE@AGJPIMNMMTVOQSX\char92{}WSSPSPQY[YZZZVU[W]RUPLOZWQWLLOKEOLNECNGD@MWJDGJ@HOUVPEKRJLNVRUR} + \hbox{TWK[QK]]LAAMUOKPSQKDGHSKHQB@BQURNTVXWVDHSJYSWZPNSRTP\char92{}][]TVRNQNNNJUVPMNMJJHKJHKGDJFC>:?554336@=;94868773224643% + 579CKNLOJFCCCJFJILLLOQSSTVXVTVRQQTUTU\char92{}XUUUHWXV]UWTJSUYIHMFHGAJSOCM@FSPMIIHEEHH=?QVPVPWZVRQ\char94{}} + \hbox{R\char94{}\char95{}WNEDRY\char92{}]KAEFNPFOLHLQSVNFKFBIM[KUV]PPDJJLTXWTVWSMRRXV[WZRSVJPPOS[NLPONPLMKMNFADFK@:6854348@% + A9347;;656435239677;FMMIHGECDEMHDLONNRTPURWRSPNNSQUZ[ZYZVPFNTQOPVH\char94{}VZRFJPILPQVTNQCFJDQRQLGSURRL@CPWPBI[`WXU} + \hbox{NOc\char94{}YSRZPKUS[ZOUSTXTQMOU]Wa[SKHFLCENGGFNXVNVHSQWFQ\char92{}X[WV[YZWVUUNKMPNTSQOONPLNLIJHDFF@754435769=6344654% + 42333445678<MHKJHCIEFINMKJLMNPNOTZVXQRQRRTSXZZ[YWZYUSQLUIEKRHPSJRRRODBAGLGYRC>FRTTMKPNTOQRVI\char94{}[QFINN} + \hbox{Y\char94{}YRVbLMVbV[OBNTVOVWPE\char94{}PJKTNVK[ONX\char92{}LIQVJ=RIUZGKYa]Z`ZUS[USSTMSOHONRWQJLHTTOJQJIJCGFA633363488% + 7443459354344445676=OMLDBA?CKNJKEKHKPUOPXYOLTRTPRPSZZXXTNNTV[\char92{}RHNBWUXWNINHXWTPIHEDCRWWOUKIU\char94{}WKULPOKVLSKQV]W% + } + \hbox{X\char92{}XNVWaXRVWOUNBVWUUUUHFHQSSDNKJIGHERTNLQOMVZHIWbZ[R\char92{}WZUZVWXZUSPJHNOTRPHGKLLOKHIGAEFE74543225@54333334% + 43343455757?PNIID@CBGMKJKKMQMRPTUQNQNSRTOTZZUUWY[ZTWRSRUKTSMIDLKQKJSPGJGCFMPKBIIM?N@CILV\char92{}YPKGFNQTZ\char95{}} + \hbox{`UXXZ\char92{}R[TESV\char95{}aWH=AN\char92{}f[WUGONNabYKHT=FDSDLFNKMVRM`]\char95{}e[WYUV`UTYUQQJQMIPTPLHLMIKHPINGBC<4% + 344334656331235:5734455769@ERMGC@??BKJKHGLLIKLNXROMNQQ[RYWXXYUYU[STJSSQRSSMNUTUPPERPWGHMCGFUIENEWPEMIX]JQOLTSYZYXAF} + \hbox{Z\char92{}LOTV\char95{}ZQMGLIL\char92{}TRKREKMS\char92{}WWRLSXTSENH[WJJMXOJOSZ\char92{}d\char94{}df`TXU\char92{}[TSRO% + RLPILLOUMLLJOMTLOMHJGK<544342354:433345733355555668AOKFD>?@FLGHIKPOKJPTQNMLMQQPRSZWZRUWZZVXSS\char92{}XLTKILLFITNG@FCHNPPKO% + UPOLOOMJBDMJPNLPRTVOY\char92{}SW} + \hbox{KYQZ\char94{}MPRSZQTV\char95{}`HSTMJNCKTSFQNPQFDKPNGETHIPVTGOXZ`\char95{}\char92{}W]YWUW]YTWQPQMKLILMRMJKOJNMJMHGEH94% + 4345425763745:6433333436778BPJDB>@HOJHIGUNKLNPQOQLOORTPSWUUVVWYVZ\char94{}\char95{}SSYYX\char92{}TXO\char92{}TRD?@@MNMSTLD<% + E@IINOQOHNPTETNJQY\char92{}HHN\char92{}[} + \hbox{TVOX\char92{}SRSJISUUHTNAFFCLJMKH@IQFK@HPHHGS\char92{}YYMQR`YZ]a[]XY\char95{}TRR\char92{}XSUNNQNKIMKPPNMJJKLNGILJEG<4% + 233426345495755444435334445BMKGB=CJKDHFLKLIMMPOMSLNNRTUVQXZWUVWXW[W[[SFU\char92{}SMDGNIKAFKUJPRTERWJMOLMSJDWVPLPQUUR]XZUPZS% + } + \hbox{APKLRSMKJJUISSOUQPDFY[TVSZ\char92{}VEAFKHGPIKKHIKS]\char92{}]V]\char92{}\char94{}\char95{}\char95{}\char92{}YSQQYYWVV% + PPOMJJLSOOKJJMMKJKJKIG:4445443356555555434322323587CMDC@?CNIHIINJKILNOLNJLMLRTUXUYZQZYWWUUZZ\char94{}ZYXY\char92{}UTSJLRUSL% + IEEFLOEFLOTSJGTYUUTNRKNQUSSYWU]\char92{}} + \hbox{RR\char94{}VbXOV]RY[Y]PPUFOXPNGGJIOGKNPJJCCKKOR`RQQ]]]UQW`[ZWTOPX\char94{}YRURSRPMMKSLMGJCOLOOMLNLG833333357683466576% + 43233233347ANKFACNKIGKMMEJFKOOJKNJOPORNWZWQSQUZXX]ZP\char94{}MSM\char94{}UKXCFOKI??DKHPIWXL=BSNPTBFFMSRJEPPVW]e\char95{}WXX% + } + \hbox{QTHPMPSUYUWRMTFIKX[[XNBJAEOGCSWSTLALPYRK\char94{}`ZEROX[gc\char94{}ZVUTQO[VOTUPNPMPRMLLIHFLHRLMLKGG933222234753345544% + 64242224548BMFCBFMHILMJHEFIMRLKKJKNNRPVYUXNQUUX][[[\char95{}UNLNJRMPKOPSTOACCJWMAEDMPOQEFMTVKMYVOLIJQYTV\char92{}YP} + \hbox{GVUJFRaZZZYKHBUWKLPH[YFAED?@RIAJOQIJT\char95{}TZ\char94{}[bWRXL\char92{}\char94{}ga[RSPPPV\char95{}QWQMOLMJNMKJREFIFJ% + LMKJLF93223843466335556445222233387ALBADLKCDHNKDMJKKNNNMJJOVQPUUYYRWOUXYX[\char95{}[P]\char92{}QX@ITJTV\char92{}YRWNBPKRNIL% + GCNLLXMPNTBINSZYNQO]``\char94{}Z} + \hbox{NTS\char92{}XVNWZ[\char94{}\char95{}]WNL]YRBLQLPWUAPNRWUTRURO=FZOKJRRSWY\char95{}eYWXWSNRW\char95{}VUXQNMMLJLLGMHFFHP% + MLNLJD73323335854478667946334343456BHHDBMDIGIIFFDKMLKMLHIMOQUTVUYYTSXVTZUXWWYW[QORTX\char92{}NDOUVHQIJMSKE@LJOQSQJISYSQPTSK% + VY[U\char95{}\char92{}[\char94{}} + \hbox{MZQGP]\char95{}SY`LICLSUJLYWNOHXKIJM;LGLUQLFZ]XKGCKEXa\char95{}g\char95{}\char94{}\char92{}`UPWNSU\char92{}YXRURORLEJ% + JKLIIPLKNHJPPG5333323553435686566233345446<JJCBGOKFKP?IGGFKLJKJKONPPOJQY\char94{}TXTSUPZYU[TLVQ[VPQX\char94{}OXIRN@UIHIHQSD% + >=BSPXSNPWYRSUX[HHNXE\char92{}`Z} + \hbox{V[RY]YRKKRT\char92{}aRQSDRZ[NLRKLPSNKINQNNOWSVNX\char95{}PPT]e`]]\char94{}Z\char92{}WQNQRR]VUVSRMQSLINOHJMFEKRLILJA73% + 434224435445:8686343332436<MKDCQKHHJQHGEJKKLNIFAGHJRLOY]\char92{}TSQ[UXWX]\char95{}`]]WUNQLXMRXQRIJBGKKYSIQPRVSHNJKSTRQTOPZ% + SXY\char92{}YTUa} + \hbox{PWUIYSKKY\char92{}``Ra`[ZYVRO\char92{}TKRLCQ\char92{}ZILBOLLKKMX?JSYOQafd\char95{}[\char92{}TRUQOQYYXVSOMQKLHNKGICEHK% + ILMHL?5555432444344566653233353346;LLHEPIGGFFHFGJMMNNLIILLNQQRR[[URQVUX[\char94{}aaba\char95{}UGNXKVV\char92{}QROOIUNJQSXSE% + GFNQQWSKIFVZ[USVR[YW\char92{}]XY} + \hbox{TZYOKQSQSTXY[Z\char92{}]OMSRZULLJ]X]MIRDGMMKL\char94{}KFIOIGLe]\char94{}a\char95{}Z\char92{}YTWXQPS[VSQMJNLILMKGICBCJ% + JKONOA56444222643565:9:754335532378IFCFMLHNMJGCHHIKONNIGNKPOPRSXZSSTSSXZ]Z\char94{}Y]]VXQZ\char92{}MPOIJNSLLRM=MKQJQWRUSRG@% + NPUSMONYRSY\char92{}]U[Z} + \hbox{XISYZWWMN]]\char92{}\char94{}[Y\char95{}XRT[VURBE]TWQNGKCFCQUKOMXHWJ`[\char94{}\char94{}f\char95{}[\char92{}[WVVUTT[X% + VPINPMMJMJKHC@FINKMMLA54542233443457<:7744434443447HFDMKILOOLFDJJHLMLMDILHMQROTYTUSSSVYW\char92{}\char94{}\char92{}YYZYXZSR% + JIWUEBMRLMOONBCBMPRIOXLELRVXRIHQVNOXVWUX} + \hbox{f]P\char94{}ab\char92{}ZKBYiffbNFNXDGOOKPJZNJJCDGRIEKDFUX\char92{}\char92{}\char92{}db]a`Y[\char94{}\char94{}VSPNNLV[% + TOKLQKGIDJMHIEAEKHKIM<44434313542487896544444344348GHFOLNMLJKBDFFPQIJKINLJLNNRUWNUROSQYW\char92{}Z\char92{}\char95{}XQXOKJU% + VLKRKEARXXQCMYYYWYPJELOUUOYYa\char92{}Y[cQWQUWYR} + \hbox{\char95{}OU\char95{}``\char95{}[[USWRVZVQRKIRKOUGHURP\char94{}\char92{}KIMNMPWOGLWSX[`db\char92{}[W][TSTOQMO[VROLLJLF% + GEMGDCCDIMNLJ>533332234334687:7965444556357HGGQLIKLHB@FHKLLGGGMOMQNRTWRROOQSVTVX\char92{}\char94{}\char95{}YY[\char95{}\char94{}% + ]\char94{}QSQ[TS]XTJQWXMMLJTUOOV\char92{}Y]OSUZPWWOLNRTUT\char92{}U} + \hbox{OVUOT[[\char92{}XOILWN]YHeda\char94{}SKIPTDJO\char92{}ZNO@HIO\char92{}PcP]ISVadbdQYa]TVPOIKPUYOUMKJKJHJGLD@HCFILMG;53% + 232333333458;:5656444333657HGNQLKLHI?@JIKOKLIKLKKLNNRTSQJPTSXQOZYVVSW\char95{}PWNGVXIJIPRKFYUNEJQPLNORRPNMMNYXXWYRVY\char95{}% + ZYW[[Y} + \hbox{OQXRPOPOTO[\char95{}TTFEJUdXXQXMLWYRYXRILODJVYUR\char95{}d\char94{}Y\char95{}P\char95{}b]WX[[XPOJQJOU]SROLKKJJKKKA??D% + HKJPJ;5343333323359<<=9:44444433246EGINIILHD>DFGKPLKKNMLPKQTY\char92{}TSMJPRTNT\char92{}\char92{}\char94{}b[\char94{}\char92{}% + \char94{}\char92{}a[QPGOVUJD?JPNLLRNQTOMLLMQV[WU\char92{}ZVUX[\char92{}[VLV\char92{}X} + \hbox{KIOOVLN]YZYWaYXYVXX]\char95{}ZYW]SIHOSV\char94{}\char95{}WTFXV\char94{}bcWWFP\char94{}R]\char94{}XS[\char95{}WQRJPNQR% + TOQQLKGJJEJMB@AAILJLH<7343223343458?A@:655434433245FJPMLLKFABDAKNJKGJHMMRQQOXTSNRMRUWSSY\char95{}\char95{}d`JX\char95{}bZKD% + B?ETYZYXD=EJOXRRZZUQGKWWXHLWNHRZZ[\char92{}PWWTU} + \hbox{KMKLTVRTUXaWVRQ]LTRLaa[]\char95{}TGPRUNNT[][FHQcR\char94{}TZOT\char95{}f]ZXV\char95{}XVWOMLISWYPLIHHFJIHJG@??FMOMK:43% + 242233253879@@<655433444336FGONLOKFBACFGRMLHKIJOPKRRWSWNIHOSWSWWUa\char94{}TY\char94{}]\char95{}`ZSITONMPMVPOEHOVTUXNJGSZYX% + XRZOW\char94{}YTTUVUX[RW} + \hbox{HKNNQLMRYKIW\char94{}[Wb\char92{}QZ`ST\char92{}\char92{}SJJMSJZ\char95{}UWJMKUM\char94{}b\char94{}WWVTf`[WVR[YXTTNLNZ% + RXPLMEDDDGHMK@?>EMPNN;9543223333458A><<;74333444345EFSOMJKG=CFIHLKHFIJKNNNRVTRLKPROOYZY[\char95{}\char92{}Za\char95{}[S\char92{}% + VKHWZUOQSMHIQTYJMRWRUSKNRSVMTRQZTSTXV[\char92{}]ZXO} + \hbox{GDLVUVOGPSVOXac\char95{}`X]T\char92{}BEZSZY\char92{}`L`bdV\char95{}XPCSKccPMVSWfc]VS]YYTQNIEN[WUMNKHDBELHI?@>DIOPJ<85% + 4323331366:<<=<765433433446BFPOMKLD=DFCLIJLIDKLLROWVMPMJLPRUTTVZ\char94{}`\char95{}\char92{}X]VOV\char92{}``[[SOPVSSTPVSVOG% + HLQZPOPVVTX[XVVXRUUWWVVT} + \hbox{NVVSLSJRUT\char94{}cb[QXg`a\char95{}XZVW]\char95{}[Y]Y`SU][\char95{}XVN\char95{}UX]c`\char94{}\char95{}ei[NV[`\char92{}% + TROOLRLTYPPIFFCGJKNG=@@IHJI:5444332234466;@>=765433443346BDOOKKGA=FIKKIHFHFJNMMQWQMMGOONUWVW[Z\char95{}`c`\char95{}WXYLSRWR% + OVRBLUQMVULVWUYVUNTTWX\char92{}\char92{}]WNXSUYUWVXYYR} + \hbox{WY\char95{}\char92{}b\char92{}WOMa[\char94{}RFN\char95{}``\char92{}c\char92{}UOXc]b\char94{}UOQKKU\char95{}`b\char92{}% + \char94{}SZeXX\char95{}ffieYSWV`XXWVPKQPWSXLGECGGHLNHBB>EJNF:4563223323649?:<?775433434357IFRLLII?@FFNHDGGDEFKJMTVOIMHELMTS% + SX[XZ\char94{}dcYX\char95{}RSYHM\char92{}VTRSLQVLQYZYXNYZYJS[X[ZZUUVVUL]XPWW[QU} + \hbox{WWOPYQQT[[][\char95{}[WfXQ\char94{}`XXWXV``f\char92{}\char95{}PLU\char95{}]ZZb]U[`\char92{}MU\char95{}ddc\char92{}WUS% + \char94{}XXSJHPILMSWPGDDFGLKNMADCCJKG845432223434697;?:965433433446EHOLNMH=CJLIFFECBCKGIOPSPQIHHMNRRUY[]\char94{}\char95{}b% + SWWLQSLKYWU\char95{}\char95{}YSRVRRNNVTVRNLYPXWUPNMTYUX\char92{}YWVSNQRX} + \hbox{MQ[a\char94{}bZ]X\char94{}SLKYKGbWgcULXOWUPXSXGDEFV`adcZa\char94{}V\char94{}\char92{}]UeeVVPN\char95{}b\char95{}UQPMO% + JKMNPPHBHDLHKLCC?FHEG732331234354557<?;;83433333348JKNGFLG?DGNIEHC>DGGBNSOQWJPFIRQQLS][\char95{}`]\char95{}a\char94{}`\char94{}% + XLTZUNJIQQVGSRJHPWHPZQGN\char92{}\char94{}W\char92{}RVTY[\char95{}XNY\char92{}\char94{}V\char92{}SXZ} + \hbox{HLQRTOPZZNYaZ\char95{}ZZUYY\char95{}\char95{}`YZVO\char94{}ddb]VVSNRYVXXdc\char92{}Ucfedj`YTSZ\char95{}XZTUQKIQPRSQFG% + ECJLLOACAGIJJ833412133468:888;?666534333447DEMLOG@?IFKKHE@@@CFGNSQRPHIHJMPQTT[[ca\char95{}\char92{}\char92{}`\char94{}WYQQS% + TIMSSUOWTRRPTZWTU[W`YVUSU[W[ZWZ[XXSSZXUZ} + \hbox{HMNMMMSYVQ\char94{}edWPTZZ`b[`]UMZQL[ZabQW]V\char95{}]\char92{}[[\char92{}]`bdfdg\char95{}TPQVZ]XYVSLJLNNSQICGGIKKPK?% + @GJMI534322223334788;>=865533433346HJLLPEAACMJJE?@?BCEHPVPLLJHPNPSQSUXW\char95{}[]XZ`\char94{}\char92{}RXZ]]YWVQWZXWIRVZYTV% + ]WZX]TXSX\char92{}\char92{}[\char94{}]UQRUUZ[[ZV} + \hbox{STWS\char92{}SSRS[VYV`d`\char92{}\char92{}UWQKW]\char94{}efZc`[VOa`Za\char92{}YWc]LM]ejigbYUVRW\char95{}Z\char92{}VPG% + HMJHIVLDADFGKOH@?EHNL74322223344468:;?>754433443456EGOLLE?CHLJJCAABEEJNSRSPEINMMMNOUS[\char95{}\char95{}b\char95{}\char95{}% + VXPYT\char92{}\char95{}`VYOOT\char92{}MTROSPQYWIMUZX]\char94{}\char94{}\char94{}TV\char92{}\char92{}\char92{}WSWX\char94{}[% + ]YY]X} + \hbox{SVSLIKLPQQTWYW`[YIK\char92{}\char94{}b[aa\char95{}]aab][`\char94{}]YZabZc`bdcfdkhaWSSRP\char94{}\char94{}YWRIJKLLMLNG% + FAAJJOLC@FLMJ7322322333446;;<<::63333333357GKOLLDADJOKGAABDGEKPUPPNNEKNQRNQTVZ[\char92{}dd\char92{}W[`PU]\char92{}\char95{}% + YWUXORQPPW\char92{}SLPU[QWVV\char94{}]ZSMYXU[[YW[V[ZTZ][} + \hbox{WYUNJMRRNPJSOXQPWU[`aWX[\char92{}YZY\char94{}`\char92{}V`WX]U]QPe][Z\char94{}\char94{}fhjhUWSQQY\char95{}ZVVKJLLNGQMF% + EDCEKONGC?HJG9341133224659@;?AC;45333335448EHKIHB@FLKLG@?BEABJRPSRHKGEKTMKPZUSZ][\char92{}]NRWXYZVWNZORWPWQFJTWNDNXXZVYYOQV% + \char92{}ZT\char94{}\char94{}ZSUV]\char92{}[X]\char92{}[} + \hbox{STRQSMMJLVQOIS][[[TVY\char94{}\char92{}V\char92{}`d`]`c`Y\char92{}Sa\char92{}d\char94{}\char95{}baYbZbgidf\char92{}QT% + VMR]XTSQJNKLKKTKJFFAGNOGACFNK;422222334757>HG?9:95423444348IKNJEGCCJIGDACFAAALSMPOJHMPSUMSTYY[[\char92{}\char95{}\char95{}X% + \char94{}]]]Z\char95{}Z[URWUTZ]TZTSQQYVS]ZVVZXSRYY[ZY\char94{}RVZWXXYZ]\char94{}} + \hbox{HNKNICIFRRRNQSTR\char92{}ZTHWb]]\char94{}[S`acRRQLac\char92{}\char92{}bdfe`a\char92{}V`ili[XPQRUY\char92{}VRSILFJIMSK% + DBHDGKPKAAKME:32123333467::AD>>?9232224334:HHRMFCCIQGICCID@@IQILPJMGNQQOQQSUVZ\char94{}Z`c\char94{}V]\char94{}][bYM\char92{}% + WV\char92{}Y\char94{}YVZY[\char94{}UUV[XYQQRSYXW\char94{}]]Z[]\char95{}XZX[\char94{}XQY} + \hbox{KGIHHIKDEFGQQMOKSQQYW[VZ\char92{}Z]X\char95{}c\char95{}]X`\char95{}bdX]]ZT\char94{}afcgllka[PTNIR[TRRKFJIHNQPGIKICFRL% + D@DEJA32232222249;:DD=@>>933334334:KOMHHAEKNKGBKLA?DMNITJGFJLPVROQYXW\char92{}]X\char94{}\char94{}VWYWWV[VP\char92{}VOWXVKR% + VZ\char92{}[ZPT\char92{}[YRRW[SOUVZbWOVZ\char94{}\char94{}[ZZ]Z\char92{}} + \hbox{HLIMNLRXIFMSQKFLQSHOKGLQZRNTdYNO[Zde\char94{}Z\char92{}WVP]a\char95{}\char94{}\char92{}ag\char94{}a\char94{}YUSJQ[TKS% + GFDFKLROIINNEILOC@BDFE421222234348;;>==>:723332344<EJTHI@BRNJEBCF>@NSPEMEDCLMSSTMTXXW\char94{}`[c[\char94{}\char95{}N\char95{}% + WZ\char92{}`][c`bJZW[WSOXSU[YZ[SXWV]WYW[`[[UTQX\char94{}][\char92{}`[} + \hbox{GEEGGKIGCKINIVMHLGLMTUNWWU]a\char92{}[\char92{}\char95{}a[b[[]\char95{}O\char95{}`cccbbjnif]\char94{}YSLSVZPNKDGJHKMS% + MIONHMMOIDBBLI421224434568?A??A>?953222344CJSKKDDFOIIJIDD>BLQKKFHKIHMVTOQUYT[]`[\char92{}b\char94{}[VVRVXZYUUV\char94{}PQWZ% + XX\char92{}XTW[[WaYY[\char92{}YUWS[]ZY\char92{}\char95{}Y[a\char95{}\char92{}\char94{}][} + \hbox{CCDDKQKFIFDFNNHJPWXRa\char95{}TSX[]ZOX]b\char95{}PWcdcdZVTTP\char94{}\char95{}efdj[\char92{}]UQJPUXTOQHEKHIHNLIGMLKMK% + OADJIJ532124323357:=@>@><942333445CEMKKE>DMMK@FF@?IRMJMJDHGJORUSSXRTZb`\char95{}`a`\char94{}\char92{}[[ZWXTWWU[cVV[NT[a]VX\char94{}% + TUYVXWPVXYZXV\char92{}Z]\char94{}X]\char95{}[\char95{}\char95{}\char92{}} + \hbox{D?BCFAEIGIHNQQSOVQ]OVQVWUOVb\char94{}Z\char95{}\char95{}hgfaa[Z[`baT`cgjkfec\char92{}VQNMVZQTPHAHLFFLNGGGLHROQI>HFJ73% + 222444458<??B@<=>;63324637JKQOFBBMOKKCDF>@OSMGHDEHGPOSSUUXSVY`c\char95{}a[ZUb\char92{}YOZXZRSSPUZTZb]b`\char94{}VT\char94{}% + RWVYVVWXV]\char94{}WXXYX\char94{}`V[]\char94{}a]} + \hbox{DCHABFBCIDIHHEFINKGJKLPTMV\char94{}R]bdZefca`ba\char95{}ca]`ca`gikfc]ZVQGPXVPNJDEGLINPIGGFGMORKBCFI932123333456=>??;:% + ;:5342364;DFMIE?AMLKEDFB>FTQOMGE?HNQSQNRYVPV]b`bc\char95{}Y\char92{}b`VOQVZYUPTV\char92{}PY\char92{}TM\char92{}UYTW\char94{}% + \char95{}YTXYRZVZ[RT[\char92{}\char94{}\char94{}][\char92{}\char94{}\char92{}][} + \hbox{OD@BBEECOFLKICCDPKNMMGQOMUX\char94{}\char95{}gibaa[NRZ`\char94{}e`eacffabe[a\char94{}[ZTGMYZUTHDBGJKNKI@AFFJKNK@JLK>3% + 1114433466>@><>9:66343234AAELHB@FRGJBFK??KVOPNEC@FLQQLRTXRWYfb\char92{}jcce\char92{}c`\char94{}`]\char92{}Y[]XPQX\char94{}V% + Z\char94{}VUW[\char94{}\char95{}Z\char92{}T[[YUbVUWXY\char92{}XW\char92{}\char95{}Z[\char92{}`d\char94{}} + \hbox{>EBEIGDAIJFIGGKFLGHFGIJHNT\char92{}bada`a\char94{}[]Ya\char94{}aZU`]ddfbmlh\char95{}\char92{}Z[WGFV\char92{}UOHGGCGIN% + PDAGKCDKLPACCEB41224424568:>A<>=:54333537FHLMI@AIMJEBIH?>NPMNG?>@IMONQOU[OSVb`b[`bZ\char92{}\char94{}a\char94{}]\char95{}X\char92{}% + \char92{}ZZZVXXRWTWLTXUX`WUT[YWX\char92{}XZVZ]]]\char92{}[YZ\char92{}]\char92{}[} + \hbox{IDFE@?B>KGFEBAACDAHGGIMIMLWda`\char94{}Y`bccc\char95{}`g\char92{}`dfcabddkmc`\char95{}[UKEL\char94{}YSIDBDCIHMG@BKC@D% + NOH@HGF63324333566<;>@A9754323338JFNOFA@MPHGFFACLVLCIA<@ALKMNOSTMQW\char94{}fa]d`W[\char95{}`\char92{}\char92{}\char92{}]Z\char92{}% + b`RX\char94{}W\char95{}VV[YNO]Z\char94{}[XNWZ\char95{}VX[]VSZRX\char94{}`[\char95{}`b`\char94{}d} + \hbox{HGDEECCCB@A@CHHDBGEIDIS\char92{}a\char95{}bkdhfbbbb\char94{}YYheaa\char95{}\char95{}e`fgbgia\char94{}]XYTLJUXQODBCJII% + OL@?DG>CMMG?FGF5422423355797;B;786423334>EBMLG?DPLIECHB@JNQHB=<?DINOOLQWRUZbaYaX\char94{}V]`\char92{}XY\char95{}\char92{}Z]% + [dYUTZQZVXYYU\char92{}\char94{}ZTYZX]\char95{}YVZYZTWXXVYY\char94{}Y\char92{}ZX]} + \hbox{JQG>=>?A@DCD@@FEAGNLS[\char94{}\char95{}\char95{}ec\char92{}d\char92{}\char94{}\char92{}b\char92{}babheifb[ad`gfiikd\char95{}% + `YXVODRWSOG@?DDJTPD?AHADKOH@AGE:5322334569:<=>A;55333335DGDOIA?FUMIABDFCPNGOE>>EDILKLOVROTY\char94{}TYab`adb\char95{}`YU[c]% + U\char94{}\char92{}WUKSTVWSZ[Z]\char94{}UT[\char92{}\char95{}]\char92{}\char92{}TXYYYUYXW\char92{}\char92{}\char92{}]Z][} + \hbox{GDFCA?ABABGGGIGRSRSTV\char95{}aX\char94{}]]\char94{}X`\char95{}ffad\char95{}Z\char95{}Xd`b\char94{}``dhgbifa]`]XWVMPY% + XTLB@AGFPPF>AH@>HKLEBGE=43343435688:?=<843222349GCFLKACORGIBFBEGROHF@?@GHNKJQQ`XRU]gfZadae]Z\char94{}\char92{}[]\char94{}\char94{}% + WQUYV]\char94{}WXRWT\char95{}[W\char94{}\char95{}YZWW[[Y[aUYYYWYY[[]Z[Z\char95{}\char92{}} + \hbox{BE@AA>?ABGADJCIHRQTZZ\char95{}]]]Y\char94{}\char92{}\char95{}agdbc\char94{}cddeb`ac\char95{}\char95{}gebgehe]\char92{}% + `]XVMERVQKA=?FIJSR@BBGBFKLD@CHC5334543568::=<;963333349ABOHH@EOPJEAFBGEPNJJCDBKPLKPSWSRUWaaZ\char95{}abad\char94{}]aZ\char95{}% + `ZWZ[QYZW\char95{}\char94{}ZX]X]ZZX[WY]\char94{}`ZYXV[Y[[WX]YVZY]]Y[} + \hbox{F><<?AEMIGGBFCNIDMNSOMYPQW[\char95{}SdXcc\char95{}]d\char92{}\char95{}ccaddac\char95{}Tgiigk]\char94{}b\char95{}WSNMP% + ZUNH@=CHPOMHB@F@DPSHB@JI8443433569:9;::563323359DBMLHEFTNIEEHFAKQJQID?DQONPUTTONW[ZWdfb`Zc``]d`\char95{}\char95{}W\char94{}% + \char95{}ZXVZZ\char92{}\char94{}XWYUSR`XWU`W]XUVY[\char92{}\char92{}XW]Y[WYW[Z\char92{}\char92{}} + \hbox{GDBA@=>?A@?BECGKJPOMHPOQRQSZ\char95{}Tbhe`daaeegefbcdcahnhaa\char95{}YX\char92{}WUOGKXVSP><AGGTPFJHLBDKNCAFFH:4334434% + 79;<;:9642223358AENHH@ISJFBAFDBPZMOH>?KPOOMTWRTSX[cccdecb\char95{}a]\char94{}[]a\char95{}YXYWQ\char95{}\char94{}V\char92{}Y% + ZVUWQQV]]ZWXZYYZ\char94{}Z\char94{}YWUZZWXXWX\char92{}[]} + \hbox{==:?==<?>D@AFOJIF@EEMSXVQce\char92{}hbed``aceigi`eeddbgigijikYW\char92{}UVPHFTZUOF=EGPXOFGPQKJJIN>CIG?5443334868;;746% + 5423235>@IJHJENXJFHFEEERRMJDCCQRMNUVYMTTV\char92{}[aabaefa\char94{}a[`]]]]VXZYZ\char92{}RWT]XX\char92{}\char95{}YUX\char92{}% + [X\char92{}WW][V\char92{}\char92{}\char92{}XY\char95{}]]X\char92{}YUWZX} + \hbox{<<?@>=>?A?BDICNHDFEEQRQZYfjeZcabbefhdcdcfccdaaafih\char94{}\char95{}d\char94{}[\char94{}[XSKFN\char92{}TPI@CJISPJGFJP% + MLNKJGGDA7334435757:9<744333246>CNMJDKTMHILIHHNQSSD@BKQTPMPVWOOSY\char94{}eadbedca\char94{}\char92{}\char95{}]b\char95{}[VX% + WSSV]\char94{}[\char94{}Y\char95{}Y[VWYVZYZ\char92{}\char95{}XXUXY\char92{}ZZX[ZX\char92{}XXZ\char92{}[Y} + \hbox{@E=@><>>GKHBE>CAAILIC[YG]adYh`e]cghgfhbQRT\char94{}de`bjihgikbVV]XWKMKXZWKELFINXNC?BDJIJLCGGF?533643477:;99473333347@% + DKKCBNUNFMKBBDSVOL?CDOROMWXVTKYX]``ceg\char94{}P\char94{}U\char94{}\char95{}\char94{}\char95{}edZ\char95{}URb]QXXXUcXZ[\char92{}% + \char92{}RUZLYUYYWPXX\char94{}WZ[[VZXX[ZV\char94{}Y} + \hbox{@:<?AA@@?>D?=@>AGJLMNF@O\char94{}`\char94{}\char92{}`\char94{}[ebd`aefcfbX[c\char95{}\char92{}fdghfbdc\char94{}]\char95{}% + YWSMISWQNMGBIOSWG@@BBOHPGEHE=555544679:;>:743433447BJKHDJOXHJFHCFLVVOMDAGPQSUQ]TINUYb`\char92{}\char95{}ccdd`b\char95{}a]\char95{}% + S`XVXVW[]\char95{}[VWYY\char94{}\char95{}WXXVWZZY\char92{}\char92{}WVWYWW]]YZZZUZW[X\char92{}} + \hbox{=>?@>>B==A>><;AMMJKJR\char95{}VVGUX[\char94{}bc`addffd\char95{}`hheS\char94{}d\char95{}\char94{}\char95{}\char95{}Uci% + bc\char94{}Z\char94{}TRQGQ]SURHIJQQPHCADBIGNLEFF=544654467:=<8653323447@JGEAKQULJLIDENPUQK>ETPUWRYYBPTV]\char95{}ae`a\char95{}% + cccba`a]ca\char95{}\char94{}\char94{}]]Z\char92{}\char92{}Z\char92{}][[XYZLONX[XTSYWWXYVVZV[\char92{}[ZYXZ[YW} + \hbox{>?>ABA>ADC=?ADFDLDKXPTUMNVRP\char95{}d\char94{}`d\char95{}`ce\char92{}\char92{}jfcfh\char95{}N\char92{}h`bijibd\char95{}% + PXYTRHL]WOJIMORRPF@AFMHELNJFC65645553679;::964354548@JHA>OXTLGKF@JOYYRHBKSSVSRYNMUPYX\char94{}\char95{}eaa`cd\char94{}`cUQP% + OOKMRW\char92{}SX`T]\char94{}b\char94{}YY\char94{}YWXUUZSTTYYSY[YY\char92{}\char94{}\char94{}XYYZYX\char92{}Y} + \hbox{?@A?CEA??ADCCEDDDJJTPWPKOWQ]JX`hebefcagdcfgeefdZYdijig]\char94{}W[[VSSKW[URMHNOUSNB@DGLDINGF>5465663559::;9853244556@% + KDCBRZNKFIAFJTYWNEFNPSTVU\char92{}WRTUX\char95{}\char94{}]`fb`d\char95{}SIU\char95{}cab\char95{}X\char92{}\char95{}\char95{}% + UGLY\char94{}Y\char94{}\char94{}\char95{}]ZSVXYVWZWWXRUSUY\char94{}]W\char94{}]\char94{}\char92{}[[`ZYZ} + \hbox{A?><@?;>@>>?CBHKKLILSOOSNNSNcaXOgfji\char94{}bjd\char95{}Z`dc\char94{}ihidLVhmc`Z[\char94{}]TSQNZUQRGOSTRPFDLOQIOOKI@% + 7455543445:99:953344466>FCEHTVIHGNFHPVXWKILPUUOP\char92{}ULWPXa[``b]YQS\char94{}\char95{}\char95{}ca`\char94{}a]`[[S[dbVSR\char92{}% + ZWX[\char92{}\char92{}\char95{}XYYXVURUWWUSVUX]\char92{}T[YY`[XY} + \hbox{>==><>>=<;@EFDFJOMMMINOHKNTWbfebLXfhYiig`SUU]bbehjcc\char92{}gf\char92{}]\char92{}][XUWNY[QPOLOSUTPGNJJLJKMC<76543433% + 366898634445755=GECIYSHHKHLJRWYSDMRRVUXVXVVYWZYT\char94{}aa[T]a```\char95{}``b\char92{}\char94{}\char95{}\char94{}a\char94{}% + X\char94{}W\char94{}\char95{}`OOUXX[S[`\char92{}V[VZWRUVWUVSWZ\char92{}Z[]X\char92{}X[Z} + \hbox{;<<>=@=>CBA?=EESMFMJQJHBLW]]gdelfb]YWfdNWabkd\char94{}`dedcjfeZcb\char92{}R\char95{}YRUQU[WOXSNQXVNMKFHIJLE?:75433344% + 356::8743534565:AHJM[SMKLILMSVZZLJUVPUWWQPQY\char92{}aW[aT[dae\char95{}\char95{}]d\char95{}\char94{}[]V]\char94{}a[\char92{}% + Z\char95{}V][TTU[P[\char95{}]WTZXXSY\char94{}ZXYW[XUXZZ\char92{}S\char95{}a[[[[} + \hbox{=<;<<<<>?C@>DHOOIIFGHCKOTT`bfdgcgdded\char95{}UOW`aUWXUVTac`eehfb\char94{}S]]ZUSQ\char94{}]XTMJQRYPCLJJJHML;887642344% + 479995543435565<EHLLZTLMRKMPWZZMQSTPMYXYEMS[]\char92{}UZ\char95{}\char94{}][`\char92{}bb\char95{}\char94{}a\char95{}\char95{}% + b\char92{}\char95{}aZ]XVYS[S[\char95{}WVVR\char94{}\char92{}VYVX[YWXTUVWTZXZZXXYZ[[X\char92{}Z} + \hbox{>@B>>>@HCFBBGNTG;FFFEBGKW\char95{}\char92{}b\char92{}`\char92{}]e]UXYdgk\char95{}a``afdhc]jid`mkbdZY\char92{}[XROV[RV% + NJTSXOLEBHLLIL:77544343447<:77444424643:DKMW[RLPLILQVT\char94{}UTRUQTX\char92{}TKXY[bVQ]R\char92{}aYY\char94{}Y\char94{}bb\char95{}% + \char92{}\char95{}]b\char92{}`d]\char92{}LTW\char92{}\char95{}U]\char95{}[Z]\char94{}[[[ZURQSVONZU\char92{}XRUUY[SV]VZbV} + \hbox{<;9<;;<>==BHFC<@CDGKGJGPW]\char92{}`\char95{}eccfbeggefbc\char94{}]`ac\char94{}dhheZZ\char92{}gda[]WU\char92{}XRMWZZV% + UOTZYSKHHDOIHF97554223333658644434356458@FKTZOHADFQSYZVTUVVPNYZLQU]c]U\char92{}cT\char94{}W[\char94{}b[]Z\char92{}\char94{}% + aa\char95{}]b`[LN\char95{}Z]]]\char92{}Z[\char94{}YZ\char92{}[SWWUU[TTTTYU[XWXX\char94{}\char92{}XYY\char92{}X]X} + \hbox{::;<:9;=?ABE@;>ADCKJGKQTXZ]b`cgeb\char92{}`ecdfigjd\char95{}b`eddbed\char94{}cdefZ\char92{}Z[]YWUW\char92{}ZWWNPW[TMG% + FJLIG?74444333344678753343354455:BHUYPHBDKRWWZQVVWULS\char92{}XLOYZYVZZ]YXWZ]\char95{}Y[]Z[\char95{}bb\char95{}\char95{}[TS% + \char92{}`]Z[YZY[Y\char92{}Z\char94{}ZOUUURVYZXZUWYYWUWW\char92{}WYXTSTV} + \hbox{;<:::9@;=>F;;@H>AIE?EHKQd\char92{}ad\char94{}`\char92{}\char92{}a\char95{}\char94{}bba`d]][\char94{}c]`befcaeafd\char95{}% + \char94{}][]X]XZSXZWXIIUXYUGJNPG>9542533333335665434343643347DM\char92{}XOHBIMT\char94{}\char94{}UNNVSRQU[QQS\char95{}d\char94{}% + TZSS`V\char94{}YXZ]\char95{}\char95{}LRVWZ[MU\char92{}]`U]XY]]WWY\char94{}]\char94{}\char92{}]ZYYTR]Y[XZW[]TQVUVVWRXTTT} + \hbox{::;;;==?;>><<<;A@EAEDCHb\char95{}\char92{}\char94{}\char95{}]fhcbehbf\char95{}aRUTXSV\char94{}ab\char95{}igcddbed`\char92{}% + \char94{}QR`WZXU\char92{}RQMKVYSQONKHB;6434433432346765445543433336>QYPKEFLLX\char92{}[PPPURNQZYPU[aZQU\char92{}e\char92{}X% + W[\char95{}]cY\char94{}\char94{}\char92{}U\char92{}\char94{}ZSYXZ]\char92{}\char92{}\char92{}XXWZ\char94{}WX\char92{}Z[X\char92{}% + ZY\char92{}\char92{}YSXZVWUYWXYXRUSWVXWTS} + \hbox{<::;<;;:<<@=<B;=A>B;:ALXQ`\char94{}dcedd[Z]\char94{}ifiiehiXHQX[\char92{}Z\char92{}VPc`bee][Z\char92{}b\char94{}\char94{}% + YVaXPNKRRS]IKGD>85435432322353555436433432345<SLDJDLHM[[VJNUUMJX\char94{}RTYbaVPW`b\char94{}bW\char94{}S[\char94{}]\char94{}% + c[\char95{}YTad]bY\char92{}WYZZVZ[Z[X]`\char92{}\char94{}`\char92{}\char94{}\char92{}Y][Z]XTUUTQXVVYRTQTXWT} + \hbox{==;::;:;=D<<;==<?AA=CHPSYZ\char95{}kia]Y[VUOIFHLKHAEFEHK\char95{}hfig\char95{}bab\char92{}`[YNVc][V[\char92{}YTSR\char92{}% + WQKIC>864434334443445665445433323246;CD@HGKLMZZNIQVSPUZROW\char95{}c\char92{}O[]`]aa\char94{}]Y\char94{}[\char92{}]\char94{}% + [bb[RY`[\char95{}\char92{}XYZZ\char92{}YZYWZY\char92{}X\char92{}\char94{}V[XYXXUZ[YXXY[WVTUTUXURRV} + \hbox{<;<9;;;:<><==;99<A=BGFFIBH?MQ\char92{}]ca\char95{}UbnhfY\char94{}CQRWcdaedkg\char94{}a\char94{}]X]biYWWf\char92{}\char94{}% + N\char95{}\char94{}\char92{}]XW\char94{}UGJC=96444434344333646546565333233357>AEHGMNTZUMQXUTTVVUM\char95{}\char94{}cSVZ[WPV% + Z\char94{}\char92{}]d`[\char94{}`X`[]`ZOaUa]UXZRXZ]a[\char92{}[WYbRUR\char92{}URUZXWWZVW\char94{}VORRQTWWUS} + \hbox{;:;;:<;<;;:;:99:;>=BECPLPY\char94{}bf\char94{}fgee[cVPV\char95{}C\char92{}]YVPRPPVWVOKK][\char95{}[b\char94{}U[\char92{}% + a\char95{}Uc\char92{}\char94{}UNTRLGA<6433533433345445555545444433334469<AFHMJOZZPORWSU[YUX`\char95{}VPVZZ[\char92{}[Z\char95{}% + ]\char92{}`Z\char92{}`W\char95{}\char95{}\char94{}`a\char95{}]OQ\char92{}YYVW]WW\char92{}OU[[X\char92{}XXUV\char94{}a`Y\char92{}% + XVY\char92{}XUWVVUUXSVWRP} + \hbox{;<;;;:;::9:;:99::><@DKWUO\char92{}\char94{}``dbgRU[Z``RCWXRPFX[cihfcagg\char92{}\char95{}aY\char94{}]\char95{}RZbZZY\char92{}% + RKKKG?:7444433333344345565654444544433345547=BFIKO[VNRTSPY\char95{}WSY[\char94{}T[\char94{}cUU\char94{}SCM]``\char94{}``\char94{}% + bd[]\char95{}[]]]OWVVUW\char92{}\char92{}[\char92{}Z\char94{}[WX\char92{}XYZ]ZYSVX[SZZXTSUUSUXWXWT} + \hbox{8:;:9:9899:;:899:9<CPL[NUVTVSUSRNFFNMNFPOPMIHMNT[edfa\char94{}\char95{}[\char94{}[X\char92{}[]]]][TNJB@;9864343323232% + 344334445564444344344433334359BHJKTRMPRUSXXSW[]YX[Z[WYYe]b[PGO]\char94{}\char92{}\char95{}]\char95{}]]\char92{}\char92{}YYW% + VMRVXXX[[\char92{}\char94{}X\char92{}WSQ[ZY[\char92{}Z[WXXSRVWRSWQTUUVQR} + \hbox{::99::;999:;999:9;?DFKKTVQ\char94{}\char92{}RZc`[\char94{}TLMRKCIOJNLQ\char92{}]Xfc`]\char94{}`[\char92{}bbY\char94{}% + [[\char94{}]PAA;876654334433323345444555556455433434322333333359>GLOLQPSWYWOTWXSX\char92{}]Y\char95{}]a[\char94{}a]]]`JQXW\char92{}% + \char95{}\char94{}\char94{}\char94{}\char92{}XZ]YYXKX\char92{}YYYXXVZ][WVa\char94{}Z]W\char94{}[ZY\char94{}WWXUSTZZYQTSU} + \hbox{:<;9<;99;;99::7:89<FIFOQPIRVXdbbY\char92{}RGQLLJKHMTNJNPHY]c\char95{}\char95{}[YXZRY\char94{}\char92{}\char94{}VSD:88% + 6555532332222133534444455465554243332222333343337:=EGPURTXYXY\char92{}XWW\char95{}XSPVVTQTKXVabZOQ\char92{}\char94{}\char92{}% + \char95{}TLJZRSQVUWHTQIIO\char92{}Z\char92{}[WVURUZ[X\char94{}YYZ[ZZVXROW\char92{}QUTV} + \hbox{:;:99999:9:998998<<FFMPYKR[Z[c\char94{}\char95{}ZMDGFEHIGICBELR]caUZ\char94{}a`idfbZ\char92{}YYTI>8777864543333332343% + 445535754554544443232222333332322368=GORT[[U\char94{}ZRZTT\char92{}`]\char95{}\char94{}aa[]\char94{}`XY]\char95{}SEUMTXNUNP% + RWZX\char95{}\char92{}LTW[VSOQXZVX\char92{}X[ZX[]ZYYXYWRRTTRQSUT} + \hbox{;<;8889:899988898:9EIAUJGVUYZfYORSDL@DEHEUPXXCAHTXcbb]W`\char95{}\char94{}e`\char94{}aZJC;:66865666433434234455533455% + 365434322332221122133222223239CPQU\char95{}PYZVWYUYXY\char92{}TY[\char94{}UXVcZVOTJLUX[YYTSRIILOLQULRYVU[]XOaY\char94{}]ZYX% + ZZZVX\char94{}WSNSWSRRUT} + \hbox{;99988999:88888998=BGPTJGQTZZ\char92{}a\char92{}QJHNHGIOLNGDHOUW]ikfcaa[]Z]]XRNE=:97878766666444433445554454566433433% + 32333323323444454333348GNOVRRVYWWU\char92{}TWZ\char92{}YZ\char92{}[]UWXdbUX\char95{}QX]]Y\char94{}\char94{}Z[\char92{}aZNMQ% + QVQTYV[XYSY]\char95{}YZUX[YYXXWUTQUVUPTS} + \hbox{:97;9999:867889:78>BFPRJNRY\char92{}deZHGVMJHLIREEGKNMIO`agWdh\char92{}aa`XXXSRB9965588977576655753543554455764435533% + 24233344545467775364224:=IOP]SX[UPSRWR\char94{}YWW\char92{}X\char94{}ZRW\char94{}V]V[PMJMGMHFIPMZYY\char94{}XCDWZZZUX\char92{}% + ZY\char94{}UYU[UYYXZ\char92{}XLRXXRPQ} + \hbox{88::8;;8978767:9;<=ACKGGQSSXVQGNOQDIKAF?FCILRHNM\char94{}`cbc\char95{}c\char95{}X`WXVMF;75545789865677899666654544455% + 66545544333334677888876765465423=FLUWSQWUX[]]VR]ZWRWX\char92{}YW\char92{}Y]\char95{}\char94{}\char92{}[VWSTZUWYVRMMNY\char92{}% + YPJIPUTYY[VY[YVZZWWXXSPPVWPSS} + \hbox{89<:::99999777889>:;AKORTYVY]Ic\char92{}QIGJF@EBEIFBHNKLMOLENUWTX]\char94{}WRHD:5434569:;9::87779::895666556656544545% + 5435579:88766666654444223<CRSSXYZZUUWX[SZVXVYZY]\char95{}[X\char95{}]\char92{}OTUQXWUXTSVZYXUCV\char94{}]NUFQZ[Z[\char92{}[% + \char92{}VYVVWSRROOPTTQQ} + \hbox{:<;:9;9888877878:::<LSJNQTR`SRMMIVHM@GNTADDHFFJIG[i`YY\char95{}Wa\char94{}ZZNJ?64323469?GDBA>:88898:89887565566546667% + 857:9997776766565544343227?EKTUTTXUXWXXW]US\char95{}XNPb\char92{}WUTVZ[[\char92{}URTQRPSXUVSWTWSQUTVYU[ZXXWWQ\char92{}ZSWRQ% + URPRRQQR} + \hbox{:<:<;98998987877;9=?HGNOMTR`]ab]MJKFRSDBHKLLLFEUNJTbeaZY]\char95{}[VOF;532223469>GTTXUH9667987887788787758879:8787656% + 57::>=865543444424;>HTYTVWVXSZ[XQTXJZV\char92{}IN]`QYZ\char92{}VVUXXRUVTUVSTQWXYZQMWYYXX[YXTSSWVTQOUTQPTQQQ} + \hbox{<<;:98:99788997688??KCMPVLRXNW\char94{}R]FGNCHGIHKCDA>IO`b\char92{}Yhoh]a]Z\char94{}LF943322533444>HT][Q9656788888:7;% + ;:86989:76544548MWZXRVM<56542233228DBRSRUSYUWSZUWP\char92{}ZYTDNUQRRUXUWYTRTTTVZUQUSYOZ\char92{}XZURK[\char92{}]WNUUTWRUTSS% + SSPNPQOR} + \hbox{<;9999989887987798;CCGPYTRVKPYWVXCEEJMNKJFF@BMGHP[XZQS\char95{}a]XZVH@75332333473345;NV]K86678769889;;8:89977544348?W% + \char92{}\char92{}MD>=A;75422212125;BOWZWXOSWXU[[[b[W\char92{}\char92{}XFZUWXTOURORSYVUTUUTRRWUWZVXXTINV[VUTTSUWWVTSTTRNQQP% + } + \hbox{<;89:9;998887877:99?JEQMWZUOQLQU@IFFFE@IHBBJOQMTJCJT`\char95{}ZQS[dWM@8543233445465657CTZM:666658979<9798776563435GWQ% + HB:86754333123121118BLPTVYWWW`[\char92{}Z\char92{}Z\char92{}UZbc]WN[WZWVQT\char94{}WSPZUUSVOVLVVVW\char92{}ZUUWGZYXSVVSWVRP% + SSQSOPOO} + \hbox{:;;;;::887997988999@EJGEQPXMTOYOKKFFDCECBEDDJIJJESaRU\char92{}\char95{}`]\char94{}\char92{}[HD95332333344454356;P\char94{}% + D8666555689898665444555C[F<98554454343222210137ASMXZYPJSZ]\char95{}\char94{}XYW]RNUYW\char94{}MZc]URNKMOMSJLPSQNVVSUVSUY\char92{}% + ]WMWYYUUPTTSRRROKMLMO} + \hbox{9==::;;968879877;7;?=HDI\char92{}YTZO[cBH>JI=LQ?JMUA?K<ZSW\char92{}g]\char92{}hcjaY\char95{}FF944323334345445445:I[J7% + 8754555866674444446FPG7845553334331222321139KJSFSYY\char94{}ZGSSYZRZW\char95{}[PPc][WVK`bRFNTNXTWNHSPURUROUXWZW\char95{}SG[% + XYWPPUWNVORPNPQQ} + \hbox{<<<<<;998888:879:8;B<JEV[]GIORCRENULEICAGBJAEKINOSU]PUc`\char95{}]OLL>:6433344544444555336AL>774444555454445446<E:755% + 44323444232112212249BNZZUMTWa]ONS]\char92{}S[QWYWLOU\char92{}PWZTXWPTPRSRTRMMKNTXRVYYWYWWVXVVUUISTVRQONMOOQ} + \hbox{<<=>;:998888898889:E;BHIOMP\char95{}]ZHOGHCADHBA?@@@CIFQZFGFX\char92{}\char92{}aPOa[OB963334445445568733434=K:7643455% + 4444455568?644434333232221121231114;CQNV\char92{}UKIVdY]J\char94{}]][[ZY`V]NLKFPZSTRTYPQSTLJMPMQFLRWZYUZZVVTVUTQPTSTRPQNNPQ% + } + \hbox{<?<=;998999:979;89<J<FJFOLV`RPIGHHBHIWHDJ@EGKNPNRGPKYdSN\char92{}ff\char94{}OA:653434454645674344445;=:86556645445788% + 8844433223322222121222210359GQSXRZ\char92{}XSN`eZWNJOZO[\char92{}W\char94{}cbSFOQWRVTUQLQWWQMNJLMTHPFMUVUVTWQQUSOQSTSLROMMP% + } + \hbox{=;<;9;999::998:;;:?A<DDGSPPZSEIMNEFBMJFFE@DDGEGM@SVMTPTTdYWUQM>8433455467768446443434;@;876765545789:6432333322222112% + 11211111246<ELOTUU`Z[ZFU`]La\char95{}JJ\char92{}[TRYY]\char92{}JKOSSKSOMQQQQNPROPSVV[YLLSVVSLSTTRQSRPPOPPOL} + \hbox{>;:9<:899:::99:99<=;<DLOWOURFURDHJKCXZHKNDCBUBLLVKHSRTaOZT``PJD?5535544446554444444535=B;8766455689<75443343332222113% + 1221011146;@JNWVYTabRRbQ]YUVb][ML]\char94{}YGP\char92{}\char92{}QDKOHMOIOLQQSQMLNOPQVXTZ[SORQRUSRQRQONNPPNM} + \hbox{<<<=;:;;::99989;;:<:?ACKKYRS@OPNKFJEAFFHA@>E@GDNJOODKKHKUadbOLJD84444444435443333333235@?;86777689;755344433322222111% + 1100111246:DJSTWZWN[\char94{}K[]RPZTZ]]bUQWM]MNTSPULFHJLMNNMORJONNORQPSSTYVWVORSQPORQOOMONM} + \hbox{=@;<:;<9:;<;9;998<@:??CDM]\char95{}JBRKHOAGFALHOJ=CLKJEMS>LWVMBNUdagcLLE@5344433233323233322433;<98778998:63333435522% + 221121211111112376:CJRYZYU`Z\char92{}Tb][TF[M]ScUULIJQNCTWPQXMPGDDLHJKMIISQRRSTWUXYTSOXUHPNQSOPMMMO} + \hbox{>>=;=<<9;<;::;><;;::><?AIYX>DMLGERXN>KE@EBBBBCIHPMKMUHN[d`QJ\char92{}RG@;83332232133312233442346:78768767753343233333% + 33232223211101246:?DQSYSTVS\char95{}bVEUe\char94{}SDGHX\char94{}QOOMFZ[RIMPITOMLKJIKEFFJKJMPRQUTTXUSUXUTTMHPQOQJOON} + \hbox{==><<<<:=<<;9><>;:=:;;@DIMV?EPIAROMBAK@D=A?>EEHKAAVDOMTbSDXQOCPD>9753333322333333433434797655456753346344444333433212% + 11010125<BJDUYUZOZSE`\char95{}\char92{}NFb\char95{}\char95{}CLBEQIIMIAS\char95{}SDSPDDFPFIJFOMHLLLRONQTTUUVVUVPSTPNHPNQLMNN% + } + \hbox{=?=<==<:==:;;<<E=<=><:=CRLM?IFOJWDJIII;<>>BFFMGCAIHUGOUCJ\char94{}YINYNLD=6543432223332223322333654454444433322334533% + 4332334211111136:CGRCQ\char95{}PTVWWOXRaSI\char92{}Y[J\char94{}DFNJ>MNOZOLGLKDOHFIGJHIKLGHOTTTSSPVROSXQRQPORMKQOOPP} + \hbox{B==>>=;<<;=;<=C>>;;<:>DAOGHFMKHIEIIOEA=B=J@BBMVCAJPQCK?E[UGT[TNLC@;64333222222222312222355333333432223333433454332321% + 111223479DIVZCYVTYYW\char95{}PMIc\char92{}VTOAGBJJOUSLJJPQCNHOGOJBFAHGHGKLOSRPRSRSURQRNSRPMNQOMNLPO} + \hbox{<>?===:<<>=;=AA><;:;?@AHMC?GKKPCLLF?@@D<B?K@@I=AAKPAEDIIHHGUVPOKJ=<65546432222322212122246544344433334333333543322311% + 11111348=KUN\char92{}KDZ[\char92{}T\char95{}U]RKJTXKL@E@DKOc\char92{}\char94{}MGPI[FHIGKHMHCGGFIMJSRSQLPTUUSQWPQSQMNQMMOKKP% + } + \hbox{?>@=>=><><=><<><;;<;@C?MK>?LGRGJMHJHA@?CFMPG@CGCHRDHJGHDDGRTXKTPMB@:67:6321112322221221255545434322322334333332221111% + 21127449ANZQT\char94{}TKY]RTT`UGMBUPCHCAEUSX\char95{}\char95{}RDKGQFGFDIIKGCBEKFHMMMNOQTVWUUVSRRRPQOQOPPKLO} + \hbox{BD@>===D====<??<==<;<@@LL=CMLGNLGB?IPBIA=KDSENYDOJQE[GA@EELFQ[EP\char92{}FBI><953312223321221222487785442211212122322% + 222212101022379ERKH]HWWOL`]aY\char92{}VUKI?HMJLNDSLV\char92{}bWWJHSJCKJKIIFCJHKCILLNOTRRUWUURSRQOSNOTPNMMNN} + \hbox{B?>>=AA??=??@@;=>;<<==BGG@C@FGLLSGNL<FEKGDEC?LHCHEEV]DHSCHCIPGTUKOBN?8775442222222221112489:8642222100111222222121112% + 132448?CLUSEG[TVKHT\char95{}\char92{}TNM?HHOTIFKINRKW]WQJDGONAJICAIMGIFCDGKMPQOQURUTTQRSRQQORQQOMLO} + \hbox{???;@C?=@=@>>>>?B<;=D?BI>@DB@ITIIGALJTBCIUC>AIXF@DX\char92{}ZLMKJACCEEEN[IWL=;9656=632321311120259><:7422221112211110% + 12121112234459IOHKWOAMYUIABLRRSFODQD]VTKUAS@YYMMGJIJIG>KIH?@?HEHHIJQMNOPNRTYSTOSTQOOPRSXQJO} + \hbox{@?>?@?>@>>@??<;>=:?@A@@C=EE>FCJIRL?MIA?BAE@BNAFAKMFFNGGCJBCCCHKIBNWBIED;=@9567524222212238>;;742112111111221112235252% + 2256:FJRKHN[VCPVQeGLDGBBFD@IKXRPRIKEHOPMDLMEGIHAFKIFDCCGJGJKNSNNRPTURRRROPQOONPVQNO} + \hbox{=@E?>AAE>@??><<>:;@??=@;?EB?GCIOKBEEAMPBAC@GB@BENKADKDBX\char92{}CEIBCJ@OOIKJI?D;9<976334624224377<:98543222211111222% + 12213233369<=IMSTUJQJK@\char92{}TFGQ@BCEF@VHSLYUJGLRGBNKJHHMKIKEGEGMRLIGFHJKOQTORUSTTRURONQRPPQRSQM} + \hbox{BBA@A>>?AC?A>=>>>>BC<=@;AKCAEKOLIEHGIKMGQKCBBD>GNHGHB>QZHONJDE@EHHHNIE@@C>B?;7558534134569>87664422331311223522223557% + 8<BFCFNTSQTHQCOCXPFAA@NPHRIOKTUaVWGCJKGCMOLDHHDFGFEDCBCGDHIPNMPPPRRRRTQSOORRQMORRQN} + \hbox{@A@D@@@AFD>>>?=>?@<=>=<=BCF?IJJICIKLNQMKB>HGCB?IGKLDAUNDUUWD@BJBBGEIODDLFB@=;779548435786:>9::85632222112212332245556% + 9B>LNBBUPTGSGCDP>GAFB>IMSLREFZT\char94{}K\char92{}GPDOKFFHKEJJHHHDECBJNMNONGMMNPRQRRSRPOPNORPQOPNTQ} + \hbox{E@D??CCDA??@?@??=@A<;==>DCH?LIMJFKJWQLDBFJDBKDBHDIMFFEBVXJDGECLDDCMACHGRHAAJ?=<;69777697:;:;<995763223225531372248776% + 9?JRSO?FIUUIQ>G@F>ADEDCNQOPNFHJUGZQRHHROIIKMDIDDGHHDBCFOIDQLJHRTQPTQRRRSRMQRSQPMOUT} + \hbox{@@C@DBCCA@??AAB@>B@>=B=HDCGCDDHPEMZKHNKHBG@I?EEBKJBECCODCEKD@OGHM@>>FJBJNNH?C@@@??;?6=<>9<<;=;97:65485233533446568;;;% + A@QDTICCIFKGA?BAE<<@LC@AZ[T`QAYPIXOKQ@NLPIJFIIMQOMLMJHGMNLONKONRSRQQQRPQSPNRSRPMPTQ} + \hbox{B?>BCBDB>=AJDBJA@??=?IDFEDCEEHNMEGLJLK@MC?AN?=CEEE?NEMADKNOSFLDNKCEDHDG@KFAH@DLIA@C?DA;:>A==@;:9=8;6:7536947:9;98;FA@% + HLKEKTBJEFFDC>;A>HF@LUEFL\char95{}SUQDJYIKVOVLGTRNNHLPMKLILHFGKKTHPSOOUVNQORSRVQSNNQUUTOPTQ} + \hbox{DFDHDEB>CDDA?ECF@D?=>?AIBCDG@IMMGGLGJEOLIGFACCCHEBDJBIIKLOQDIRALADDDCBBCDFE@ETFL@GEBM@@@F@@=C@;=@;;;?<8<<;78?;<8;=JH>% + INGQBKFBB@@CAD?B>DEACVCRDO[a\char94{}SHHKRNKPOCLNKIGIHDGFJJLHFSFRRPPPQRUPSPQRQSSRSQNRTTQQRQ} + \hbox{IIEIGD>CCFECDDFFDD?A<C?DHKFAEHSKGIJFLKPJEMGGC?O>?GWECIRFQWPFAEIMANBE@C?FEB?DCHBFNIONJGLGICCJFEEFCDC?F@<;G>9?;>E=AAJJE% + AFDEBCB<FC>?>G=?<?O>ABKKMVI`\char92{}ZPPKUMQRLKANSKGGTOHFEIPIPF@MPOOLNQSQRPQSUUOVPPONVPNUQQ} + \hbox{IGGGCADGDHFAFHMEH@A?@?DMJL@GLHGKDHJFSHHDRJDBJIMDIHEEHHFHTRCE@CJDJHEAA?BBE@BAEGG@LCGOGMDOHGEIGALJEED?P?BII??C@EI@FFEJB% + @CL>D@?AA>=@>=CCATMS@KVESTVNOMUNIRJLHKOEIHFGGGEKEIIKNMOMFMORSRRTQSRRTWSSSQQTOSQRQRP} + \hbox{HGEDFFGDBEDGLIGIB?@>=CIFKEAIIDFJCFBIPDGMG@HIUDCFEAEILEDKBGIHACEJNFDNN>@AC@B>DFEDKA@GCIAECIJBH@FCBICFE@@LIF@NEPFDGBEDC% + BFED@=AA>??BABFB?GWSDGKB]\char92{}DUL\char95{}\char95{}GXOKSLPQOALJJMKGHHHIAGKMKFPTQSRPSRRSSQSSURQRSRQUTROP} + \hbox{FEEFJLFEFFBJGMCBDB@@ABCFEBCJFELDCGIGHHBFLLBSMIFCAALEBBHKLUEG@S>SCMHRJM@AB?A>@D?HADAG?DDDCIHBHBHGBI@EBBDGCTBSCPFME@FAB% + ?@??@@@@?D?AGHDGLBXR[I@G]ZDMQYZYOLNHKMJMCFHIGHKMHLNOMNPPHUQRPRQTQQURSQOVRRTSQPSVTQO} + \hbox{LDDIKJCEFBJKLKBBCBBC@EIJIHBHGKIAEFLHHLCGSSLTVAJ@OFBFBCHGFCBE@JHLLQPX?ECHC>@=>>?F@?>C?BDB?BCFFEEF@B@>BCF@?E?DCE?H@?A<>% + ?>=;@?=>AC>GBSCFR?U`QUHF\char92{}U\char95{}JPS\char92{}TJSJJLIJNOBJKNNLKMOLNIROQKPNTSSRUSUPSRQTUTTSTRPTUUSR} + \hbox{BEILNGDIGFGNJE=CACB=?DMFEEBGCMFCDKOGJEJIMCSPJDEE@OLDCJADGK?C@I\char92{}PROQG@KKSI?A>9=@DC@@B?B@F@BABJHDB>A@>CBB<B>A@?% + @<B<A>:<=>=<?B?>LEDEEIPDQLP\char92{}O\char92{}LTFX\char95{}VLONOJQDGLNERIIANOJNOLPNOLIMMNPPQUSRRTRTQSRSOWTTUTPTVVUU} + \hbox{EKMLIGGECEJPKFFDGDA?DJLKLCEDGFFHDMJINHNQZUDRDFOHHFHCABGDFJBE@LQGLKBBAGTKA?>?<<=@AA?><;=D@@BBBEAB>A@>??@=?;><=;==;><=:% + =;<>@BA@GETEALVOHPEV\char95{}K]HCR]RVSUMPHEIKKKGJJNJNJIHHMEOOPNPPTPTQUQRTTSTQRUSSRSRSPOSUUV} + \hbox{JLKKKECCLEIOCJHFEB@ADMPIIHCFEIFLGIIPFJOYSbOGNOJEHEV@HBAOGF?EADEFNLQ?BHUE?A?A@BA@CC??98;?<>@A@A@=<<=<=>@<=:=9;9<::?<=9% + ==<BALFEJGMOCNQTKXEDMYTTASSWIQNGGGGKJMGHGE@@ONHGGHHRJKRORPQRTQQQYSUOSPMQRWQQRTRVTUX} + \hbox{LKHIIIGHKHNHKHEEGBDAHNLKKKEHHLJKGHLKGKNQIA@ESKSCOOIE?CKDECCHBKABHOFCDGFBIDNSE=AB@?@=979<;<:?9;<;8;<<8;;;<;=9;9<9;:;;9% + =>C>?ON?BGUOTFYNOCSCFVOaTOMSKPMSHBGNKNMNKMFFGHHNOVRPOPOLSSQQSRPSTTSPRRSTRRRTTTSUUUV} + \hbox{OJFFKMFKMJPIHEEHHFBAJNKLICIJIGHNGIPIFLSNB?NRLKDJMPHI@AI?HBJ?CBDDBBCCCIGLICJI?D@?FCE?97699;;<8::968::7:688;=8:8<:<::;;% + >@E?DJWB?HLQRIHXNHNBKSUSONYPLKNQSDLMGLQPOLLHGMKMKLOPNNOSMVUURSTUTUSQRTSSSSRUVTTTUTS} + \hbox{LDINNHGNLILJFFIEDEDGKKHGGMMKKHLPCGFHRMOXNISPHODPHGGDAD?EDDCGFBEDDFGFCFEIGHHEFBDA>@C@;;:79=99797778<86:77<=<:<9=:<<;<;% + >DCJCDVHGGDSRUFNXNKJCXPS[FXQNHLGPDNOGHDKINPQRJNRPPTQOOPPOSWUUSOPVTSQRQQOTTRTTTTSTUS} + \hbox{GHOKLIJLKHKJEIFGGCFILIJJFKLLJFNIEEGMNIQKTMONLSLSHM@GAE@CCF@FA@EABEBBBGEFBILGCECCCF@B:89<?:;9;98779<87:799;;=;9==<=ACB% + CJLPABMGAQBSRYHIQVKGIK\char92{}UPKMNNEIPPPIMNGGKIFHPMOQPRRVWSPPTRTVSQSTOSVTSTRPPRSQTUUSRSSU} + \hbox{IJNNIOJIJHKMHFKACIGMLKFKIJKKJGOGEGKPWVLPQQWQSNUSKIF?@BEEFDF@BED@DCCDCDECKG?FCJEBBCDBBA;::<AB=::68;<9<:9:8<:?<<;@?E@H?% + JNOJFHELJNUERUKSLRKDGRWRQLGKMBXMJTLHIGKIILRMLLHIJNPSRPLRNUUVURRORSVUTSSNOTQTUXUTVWV} + \hbox{IOMLLOKMNKMKFFEGHHFHHJJMJHJJJHQFGHLOTRMOPJWKUJROFOGN?GAFLCG@CFDAAABBABABDBEIEFCBFIBD??=;>:;<;9;::=<;;;9;;A<@=<=BAHAJB% + EDOQLODHHHWLISGVPFTEDNMPHKKIOKIQJUMOQPJFMHKNOMSUSRRRQUSPPSUWQSTOPUURSTRQRRRSUYRSTUT} + \hbox{LRPLPJPJLJJPFHGEKKHEJGIJOJLMNMNLLGEPQMOLJTVNTSSLDUFOCHGCM@ID?AACDABG?@DBCGGKHBGB?GMGBBF>==;98=;:@??<=;=>@C;ABE?CEFFLI% + APMRPFIAHLTKRJRLSUGLKFFFIHLILIBFNSPLQQSQQNNPUPQRYTSPRPVQTOR[UUVSNSTRPYSPQTUUQUVVUUT} + \hbox{MQNKILRMMJKKHFJGJJJMLJIOJHKOHILHKKNOPSMJR\char92{}QKT\char92{}NGT\char95{}BKFDIBCEACBB@DAA>CAC@CEFDBBFCBAA>DHIEAE@?:<% + ;?=D??@D;===?<@CKDCMENHLCLGMPGTFGIRJOQLJOLNHICKIFKIGFGDEISNFMRNQTLMLNOORQNSPTWVQQTXYURTNRTVLUTVVTUVUSWY\char92{}YVU} + \hbox{IQPMMPRPQHLJJHHIEJIJOLMNLMGOHGMLMKNVMNMPPURPWTJ]X\char92{}BSIEBNFDE?AEAE>@EA@A@AECFAHDBA;@BA?HHDIA?DC=>:@ABDK?BFBB@BC% + KBHGAEBHC?GMMDFM@LRGJNNNINAFE?JJFBKGOFBHKQG@GPWSRRQKNVOUQURTTRVVQT\char92{}[YYUQSTSQRSTXXTYWSXZ\char95{}YVV} + \hbox{QLMTORTOLKMMKFJJGMMNLONKKLLILOOMNJROMPNSTVVGMWMZUTHQFFICD?ABCBB@BDGA@>JH@D@BCBDA>A>?>>@?CH>=C??A?FBIC=ACD?BD@@??BB@BC% + D?AFIHJPBEMHNJPK?CFD@FGCHIFKNNEDPFIMKURNRRLNRROQRPRVWWXWSV[YWWVSTPSNUUWWYXSWVUY\char92{}\char95{}ZY} + \hbox{POQMOSQRMMMKMLLJKLONORRMMOKKMPQNQKRPPNPVUSLPUQLYWT[SMIMKBJADAC@AC@AA?DCAAAA?@B@BGA?@@@@A>=@CCC=?@F@EB?@@@=;<>==?@??A?% + @AB?FHGNEFBIEFECC@EFE@>BGHADNOIGNLMJMOUTTQPQNURQRUSQTVVXRSTWYXXQRPNSTTVY\char92{}WUVUVW\char92{}]\char94{}[} + \hbox{RRONQQORMMNPSNMOLONLQPQLPILPPOPLPLPQOLPVWLUKJSKRTWZLNJPLFHCA??ABCDCA@AACAB?@C??@@BCCD@@AA?@BB?=@AAAC@@@>A><<=?@A????A% + ?@CADDBCBEEC?FC?B?@EBG@BCHHEINOLFILLHLTUUTUUVVWPRUVVYUZ\char92{}RUVTZWZRVROVYRX\char92{}XVUVYX[]XW[} + \hbox{ONROPPSQMHOTOONQLOROMNLOOMOMPPPORNONPQSVMSSPWULVQUYKPLEJIPK@CC@BB@?@DAA@AAA@AA?@ECA@@AAA?AA@@A>>@@?@?@?@??><>A??>>>>@% + ??BCGHFA@?A@A@A@AAA@ACD>FEEBHGMMMLRLIPYXTVWWTXXUVTVUVRYXVTYUYY[UUUQUZXWXUVXUSXZ\char92{}\char92{}\char92{}\char92{}} + \hbox{ORPSROUONJRRMMNPPRPNNNMNNPLNPPQMNQTPMPTORVWPW]I[NMZOPRIPFOECEEA@ABEDA@A>A?C?ABC>?@@@?AAA??B@A?C>@>?==?>>>?>>>>=>==>>B% + A?=E@BB@?@>>@@B>BC>A>FEAFCECPDLKPGMLJKXYX\char92{}VVTV]\char92{}VXYZVXYVZWWTYXQVUVRQ[ZW[VWZWVYZVX[Z} + \hbox{SRPRRTQORQSONNQONSPNLMKNNMNOSQLLOOSRORSSPSTORYRWNN[RBTVOJICABA>@B@@ABA?AAB@CAA>A@??@?AA@@>AF@?ABB@??@?>??>>=>>>=>>>?>% + ?>@??@@@@@?@?C@@??@>@EBCBJCKMBLQNMKLNSVWU[WYWYZ\char92{}][XVSXW\char92{}ZWUUYZQ[ZUTRW]XVX[Y\char92{}RUXZXVZ} + \hbox{YNTSTRQSONQPLOORNQPPHLQNOSOKPXOJOQOOTPPQPYVPUST[MKTPJO]TLCPCA@?>?BE@>@?@??A?A?@>C>>@B>A@B?@>A=@EKAC=@@?=>?==>>><@?=>=% + =@AC@>???>B>@B?<@?@A?EACCLHKJMMITNLPTVV\char92{}Z[YYWV[\char94{}\char94{}`ZTRTY\char95{}ZYSYYYS]YXRTTXV\char92{}\char92{}]b% + ZXX\char92{}Z\char92{}VY} + \hbox{RSUUUSPNPQPMROSTRSPPPLMNONSPRTSPNOTQWRPVSNTQTTZXROJOPFcKOHTGE@@@?D?@C@A?@?@B>A????>>@???@??>@>>>?@??>@@??>???>?>>=>?>% + >A??=?CB?>==D=<??=>>@B?CFLLQFKQPTQQQVV]\char92{}X\char92{}\char95{}\char92{}[W\char92{}X\char92{}Y\char92{}WRX[\char94{}XTV% + ZW[YZZVTXWZYY]\char92{}ZY[X[Z[Z[} + }}% diff --git a/fonts/halftone/picture.tex b/fonts/halftone/picture.tex new file mode 100644 index 0000000000..2cf4fee005 --- /dev/null +++ b/fonts/halftone/picture.tex @@ -0,0 +1,69 @@ + \hbox{\vbox{\halftone\offinterlineskip % machine-generated by TEXPIC. + \def\BHT{\hbox\bgroup\ignorespaces} + \catcode`\^=12 \catcode`\_=12 \catcode`\.=\active \let.=\egroup + \catcode`\,=\active \let,=\BHT \catcode`\/=0 \catcode`\\=12 + ,ccdggfcbabbcfeeddeccehhlmkkklljdejceggiagjfgbecbbadiiXNQLEHDGHJL. + ,dcdggfbbbaadeddcddbdfghkmkkkklljjicfhiiaiiggbddac`fkcQLQLEGGGHKL. + ,ecbfffcbbabdeedecddfgfglmkkkjkllmgc`ghgcjhfdbebaaahk\NLQLGGHGKMN. + ,cccfgfdaaaadddddceffdcekmkkkj_PI?GME;FNckfgfbbb`_djgVLLQMGIIGJNM. + ,dddggfbbbbbeedcdcedcccdjmkkk\GHEMHEJH><86Fcfdcc`_glaQOMPLHIHFJNL. + ,ddcggfcbaabdedddcdbbbbdjmkfHH?GQLQNLNNLB<@=NedbaaikZMLMQKGJHGJNM. + ,dbdffebaabbddeddddccabbjlgWSLLFKIRQLJMTKMHKDKda_dkhUILNQJIKJILPN. + ,dbeggfdbbbbdfddddcccbbchdJFGISKTMPWRQLWYVOKGDBaahlaTRQUWOKMRNQUT. + ,ebdggecbaabdddcedccbcbaUHAIKNPTUNROORQYXYUWVPIOdij[TWWYZTSSWWY\\. + ,edegfebabbadeedddccbbbRRVOJLHCJOOPSVT^WY]XTTTLDakbQKONNRMOST[\^\. + ,dcdfgeabcbaceddcdbccbZ[VWYJJMWMTRLS]]bZ_a`Z^QTQ9l^HHMNONJRYYYZ\\. + ,ecdgffcaaabdecdcdccb_d\YVQUWQ^a_Yf`^^lkha^_^SLWB\YHHLNONGPXXVWZ[. + ,ebdgfebaabbdeddccbcd^bYZQ[W]VZbjaijgdgonhhiiWJJEWOJJLNOLHQXVVTY\. + ,ebegffcbabbdecdbcbba^X`a\WC`hjdbekleknnopjkifXGRRMHIMLPNIQVVWUX\. + ,ecdgffbaaabdedcdbba^_ef_`iegcfglnneihlnonmlii\KQULGHKJOONUTVUTY[. + ,fcdggebbaacdddcddbb^_gbhllfiknhnoinlmlllmmlih`Q]SKILJLPQTXTUVTVZ. + ,ecdgfecbbabdedddddba\ehjljiklmlmnnmilkghcjgicb\YUJJJMRYTQYXUVWWZ. + ,dcdgfeab`bbedddcdcb\a]flmjijldecnommjf]jcTf\bdbbELLNSU^TPWYWWWWX. + ,fcfggeababbedddcdbc]^g`gm_fa]hgaemkgjhgj_UhIb^f^SMJQXY]TQYXZYVYZ. + ,fbeffebabbbdecdcdcbb`ZSbg]b\Ya_b^gjijgjibajWdY]ZLNJRXZ]SNY][YWW[. + ,fbeffdcbaabdddddcbabhgi_b`]^bbhdb`dgfdjaagjjbV[ZLMLWXV\QR[^^\XY[. + ,ebdffdcabbbededdccc`mlnmjecfihhijjikkdj^efije_]_NNPWXYZRU^]^[WUZ. + ,fcegfdbbbbcdddddccbbinonnjhgkinkmnlnmiidegfkggjZVWVYY\\UW]^\ZVU\. + ,ebdffecbacceeeddcccbginnijjjkkkjklnnnijjiihmjjfdRUV^^^aY\_^]]][^. + ,gdeggdbbbbcdededddbcggYNVWX\]ii_`b_cmljlkkhkibi\NKQYY\_SW_ZZ^[^]. + ,fdegfebabbceeeeddddcdh]diZYZYYfjgacllihnkmjbifhSNKNTY_^RV^^^^]^]. + ,fbfggeccdceeddddeddcceghggaZ\be_fefjljhjjmnkjegQKKIOY^_RT_^^^\\\. + ,fcegffdbcbdeddedeecbchnZm]dNVgggjmpohfeeiglljkZNJHFPW^^RT^\^YY[^. + ,fcfhfdbccbcfeeeddddcdcZgibUO[]RcWelifcegijigflLLJIIOU\_VT_]\ZY\^. + ,edfgfebccddeeeedeeedcbTYXRUP^\XTbdd\`a_ggekebPQLLJHMOX^VW][]\YY\. + ,edfgfedcdcdfeeffeededdTQOOVU_\WOQTW[_afkflhaSOQJLMKNRZ^UY[[_^YV]. + ,fdfgfeddccdeefeeeeefbeTOKYSY`aWJQVY]afeklihbSNMJJKLMT\^UY]\_b\Z^. + ,fdgfgfdccddfeffdfffeedTTTaQZbd^TSUW]bg`_fgfQUPLLLJKOQX]UX]\\]Z[^. + ,fdgggedccdcfefeefededc\Zaa_jij^^XY\`de^[X\VPRORPLKJLNU\VX^[\[VY^. + ,fdfgffcdcbdfedefefeeee_bg\W^Z[[_ab_ciadXUNVVYWWUQLJMOW\TY\YZZYZ_. + ,fdfggfdcecdeeefeeefedfebaidVY\]abbdfidaZXNWTWVVTQJKNOXXTZ[Z\]ZY\. + ,fdfggedddddffeefeedeejj_[Y`KHYlok`degfa]`QYWYWVTSNORW\\T]]]a^WVZ. + ,fcgggfddddeffeeffeeeegie^YaYV]ecZ]bfgda_`PZ[ZZ[WUQNRV^[Z_bb`]ZZ^. + ,fdghgfededffffffeeedc[jh`\]]_acaa_fggcfhaXURTVYUMLKMR\_Y_cba]Z]a. + ,ffhhhgedddfggffffgfee_cil]UTQWX]^bfhhjhi`XRSRPURKHJKQ[\UZ]]_\[\\. + ,gfgjihfeffgiggfgggfegnlimo[VUY\abdhjkiiiaMQTUPTSJILPRVWRTVUWVSRR. + ,ggjjjiggfgfhhhggggffjljjmojbabdgjllljhjj_GRUVQURLJPURXWRQSRQQPPQ. + ,fikjjjhgfgfghghghhfhmnjgjnfgZlnnmlkjiiiiaRGPWQSRKKVWV[ZRTVSURSRQ. + ,chkjjjggggffghghhgfjnnmlmdliiY^lljjjjiiib`d[^_TQKNWWV][RWVVVUTSS. + ,]`gkkjihghhhjjjjjjijmnoldfijhkXY\gijid_]fjihffe`QMWUV[ZQUVTSTTRT. + ,\^]ejllkkjjjllmmlmlllnfcdfghijk\]][\\[gkmhjhhgfda]`^X_]TYWVYYUUW. + ,ab[\cegihgffhjjkkkkibecddfhfljjofgfhikiiiljigfiijkklg\[UZYY]]ZYZ. + ,d```a``cfeffijjjj`^edegdfgjfkijnogfhhhgiihijjjklmnoobnYQWYY\[ZYV. + ,hifiie__egggijj]cbfeecegfflgfnjinofggiiihhhfgiljjndhdhbRXZZ][XXX. + ,hklllic]ageeffNYcfgfgffggfkifijihmjhhhiiiijjjijlmmmiZQESY\^][[[[. + ,hghlmkib^cdeYY^dchhffgeggfhmhiiignjihihhijijjkllnoni`YXFDYZ\WWYZ. + ,a]bkmkigdjmc^`bbdigfggfhgggoiijjkhljjhijijjjklmnonheddaXRHK]YUXY. + ,c^`knihighl[__adgjhffghiiiiimjjikkjjiikikkkllmooihhgfgec[XOHc_ac. + ,gbbjnllmkjk[^_baiiggehiijiiholnomlklknmikklmmoohgghgfiifea_[W^^_. + ,kghllnooona^___gcliijkddfhiijommihnnmnhipomnoniggghhhhhijjced]ZZ. + ,nonmlmopppd``a`lgakifhghijjjjjllmjlklkkjanlkiggihiiiiiihlkiZha]Z. + ,pponlloppo`a`bdllkgfddgijgebblkmilimmkUACG8@iiihghiiihhnmiifWg\W. + ,pponllmopmabacdlllkkkkjie^bcbfajominXlk`=L=3BEbfgiihhgjnjijj`W[U. + ,ponmlllnolbbbadkmllkklkfdhbhdghimmkiaO?HO>G8?CELhjihghkoiklje[YY. + ,onnmlmmmocdcbacjlmmlmmlcgiijgefkjopooonNA>7=BBDC<jhghlooillki`QX. + ,nmnmnmmmobcbbbbjlmmmmjjkljlgiielilio\[IZWPRS?D4BDWghilokilllkg\[. + ,mmlkllklneddbbbjmmmllfhjkillkgjjb\TYpKTVO;JJ<7I;3FkRmoohlnnnlkcT. + ,lllllllnnc`dbcbblmmmmlgijiggfhhkR@TCYI[HghUWS?@DCFBBEA?mnoonmkf\. + ,pponmmnnjb\kjfdekklkkijkjijhiigiILAP<LIL^VNSHGKLBABJ>BGbooonnmia. + }}% diff --git a/fonts/halftone/pix.tex b/fonts/halftone/pix.tex new file mode 100644 index 0000000000..5e0a469535 --- /dev/null +++ b/fonts/halftone/pix.tex @@ -0,0 +1,326 @@ +% --- ------------------------------------------------------------------ +% --- Halftone Output from TeX. +% --- ------------------------------------------------------------------ + +% --- This file should be formatted by LaTeX and printed with an half an +% --- inch of top and an inch of left margin. The page layout should be +% --- compatible with TUGboat. + + +% --- ------------------------------------------------------------------ +% --- Macros and mnemonics. +% --- ------------------------------------------------------------------ + +\def\|#1|{{\tt#1}} % teletype text +\def\cmd#1{{\tt\char92#1}} % for `\command' +\def\fig#1{Fig.~#1} % references to figures + +\def\mc{\small} % medium caps + +\def\ASCII{{\mc ASCII}} +\def\bigTeX{{big \large\TeX}} +\def\FTN{{\mc FORTRAN}} + +\def\VAX{\leavevmode\hbox{V\kern-.12em A\kern-.1em X}} +\def\VMS{\leavevmode\hbox{V\kern-.06em MS}} + +% --- ------------------------------------------------------------------ +% --- Document style. +% --- ------------------------------------------------------------------ + +\nofiles +\font\halftone=halftone % the halftone font + +\documentstyle[tugboat]{article} + +% --- ------------------------------------------------------------------ +% --- The title. +% --- ------------------------------------------------------------------ + +\title{Halftone Output from \TeX} +\author{Adrian F. Clark} + +% --- ------------------------------------------------------------------ +% --- The article itself. +% --- ------------------------------------------------------------------ + +\begin{document} + \maketitle + +\noindent Don Knuth's article in \TUB\ volume~8 number~2 described the +development of a number of fonts which allow halftone +output---pictures---to be incorporated into \TeX\ documents. This +article chronicles the author's experiments into halftone production on +a particular computer/laser printer combination, \VAX/\VMS\ and the +LN03. It is important to understand that the picture is actually {\em +typeset,\/} not just inserted into the final output by some +printer-specific \cmd{special} command; the following results can, in +principle, be achieved on {\em any\/} output device using a perfectly +normal implementation of \TeX. + +In the image processing field, where the author works, technical reports +are invariably crammed with halftone output. The conventional method of +reproducing pictures is photographically. This is slow and +expensive, particularly for internal reports with small distributions. +Moreover, unless great care is taken over the photographs---using a +flat-screen {\mc CRT}, calibrating films, standardising the processing, +and so on---much of the visual impact can be lost. Hence, the +possibility of incorporating imagery into \TeX\ document without +recourse to a dark room is very attractive. + +A great deal of work has been carried out into the properties of the human eye. +One result is that the eye is only really capable of distinguishing about +64~grey levels, although it is very good at detecting boundaries between +regions of slightly differing grey level (see, for example, {\sl ``Digital +Image Processing''\/} by R.~C.~Gonzalez and P.~Wintz, published by +Addison-Wesley in 1977). Another result is that the eye is much more sensitive +to boundaries in dark regions than in light regions. + +The halftone font used here is more or less the same as the `double-dot' +font described by Knuth. It has some 65~different grey levels, +represented by the \ASCII\ characters `{\tt 0}' (white) to `{\tt p}' +(black). In principle, all one needs to do is to convert the grey +levels of the individual pixels (``picture elements'') of an image +to the appropriate characters of the halftone font and sprinkle in +a few \TeX\ commands to ensure that the lines of the image are lined +up in the output. + +The only minor complication is that this sequence of characters includes +`\verb"\"', `\verb"^"' and `\verb"_"', which have special meanings to \TeX. +These must be treated specially. Knuth's approach was to delimit the picture +data between macros, \cmd{beginhalftone} and \cmd{endhalftone} which disable +the special characters in a similar way to the `verbatim' macros in Appendix~E +of {\sl ``The \TeX book''.\/} The approach developed by the author is much less +elegant and builds larger disc files, but does not require special-purpose +macros. + +Each line of the image is built up as a single \cmd{hbox}. These +lines are stacked into a \cmd{vbox}, with the inter-line skip turned +off. Finally, the \cmd{vbox} is enclosed in another \cmd{hbox}, which makes +it easier to handle the picture in constructs such as +\cmd{centerline}. The scheme can be summarised as: + +\begin{verbatim} +\hbox{ \vbox{ \halftone + \offinterlineskip + \hbox{...} + ... + \hbox{...} +}} +\end{verbatim} + +\noindent The \cmd{halftone} command is used to select the halftone +font, which would be loaded with a command such as + +\begin{verbatim} +\font\halftone=hf300 +\end{verbatim} + +\noindent assuming the {\mc TFM} file is called {\tt HF300.TFM}. + +A \FTN\ \|SUBROUTINE|, \|TEXPIC|, was written to output images to files +in this format. The image is represented as a \|REAL| array dimensioned +as \|(M,N)|, where \|M| is the number of pixels per line and \|N| the +number of lines. (The use of a \|REAL| array to hold data which are +usually 8-bit may seem a little strange, but this representation has +many advantages---for example, when Fourier transforming an image.) + +Since we would normally like our pictures to have the best contrast, +\|TEXPIC| scans through the image to find its minimum and maximum, then +scales the output to make full use of the grey levels in the halftone +font. For most purposes, a single + +\begin{verbatim} + CALL TEXPIC( PIC, M, N, FN ) +\end{verbatim} + +\noindent is sufficient. (\|FN| is a \|CHARACTER| variable or quoted +string holding the output filename.) + +Of course, there are occasions when we would like to compare pictures, +so fixing the contrast is sometimes desirable; hence, \|TEXPIC| has +associated routines to fix the range of intensities (\|ZRANGE|) and +re-select automatic intensity scaling (\|ZAUTO|), which must be invoked +before \|TEXPIC| to have an effect. Similarly, \|TEXPIC| can plot +negative pictures as well as positive ones: \|DONEG| tells it to output +subsequent pictures as negatives and \|DOPOS| returns it to the default +state. + +Inserting the picture into a document prepared with plain \TeX\ is +quite simple, using commands to generate a `float', such as + +\begin{verbatim} +\midinsert + \centerline{\input picture} +\endinsert +\end{verbatim} + +\noindent assuming the picture is in the file {\tt PICTURE.TEX}. +This command sequence should be typed between paragraphs, when \TeX\ +is in `vertical mode'. To draw a border around the picture, as for +the examples presented here, one would define a macro \cmd{border} + +\begin{verbatim} +\def\border#1{\vbox{\hrule\hbox{ + \vrule\kern3pt\vbox{\kern3pt#1 + \kern3pt}\kern3pt\vrule}\hrule}} +\end{verbatim} + +\noindent The picture would then be set with + +\begin{verbatim} +\centerline{\border{\input picture}} +\end{verbatim} + +The procedure with \LaTeX\ is somewhat different. The most sensible +approach is to use the {\tt figure} environment ({\em not\/} the {\tt +picture} environment) + +\begin{verbatim} +\begin{figure} + \centering + \mbox{\input picture\relax} + \caption{...} +\end{figure} +\end{verbatim} + +\noindent This generates a `floating' figure, which usually surfaces at +the top of the next page of output. The \cmd{relax} following the +filename in the \cmd{mbox} command ensures that \LaTeX\ knows where the +filename ends. To draw a border around the picture, replace the +\cmd{mbox} with a \cmd{fbox}. + +It is traditional to test out new image processing techniques on the +`girl' picture from the image database of the University of Southern +California's Signal and Image Processing Institute. She is shown +in \fig{1} ($64 \times 64$ pixels). The output was plotted on a standard +{\tt LN03} laser printer using version~10 of Flavio Rose's {\tt +DVI2LN3}. For those unfamiliar with the {\tt LN03}, it is a 300~dpi, +white-writing laser printer based a Ricoh mechanism, supporting the +down-loading of fonts into on-board and plug-in RAM cartridges. The +quality of the picture does not appear to be particularly good, but this +is due to the comparatively low spatial resolution of the image data: +$256 \times 256$ pixels are needed to give a visually satisfying +result---as we shall see. + +\begin{figure} + \centering + \fbox{\input picture\relax} + \caption{The Ubiquitous `Girl' Image} +\end{figure} + +Unfortunately, the standard \|LN03| will not output images much greater +than 64~pixels wide: if one tries to do so, it generates ``band too +complex'' errors and produced broad white bands in the output. The +actual cause of this is not known; however, it seems to be because the +\|LN03| buffers the plotting commands internally rather than writing +dark pixels into a bitmap. When the print operation actually starts, +the driving microprocessor cannot translate the commands sufficiently +quickly. + +However, the \|LN03+| device (a field-installable hardware and firmware +upgrade) has a full-page bitmap, and is quite capable of printing off +large pictures. (However, a little care is needed in setting up the +terminal line to which the printer is attached.) + +The is another problem in producing these large pictures, and it +concerns \TeX\ itself. Since \TeX\ was designed for typesetting text +rather than pictures, its memory capacity is too small. Increasing the +size of the memory (i.e., \verb"mem_size") is obviously feasible, at +least on \VAX en, but there is a snag: \TeX\ was written to use 16-bit +integers for subscripts into the memory arrays. However, the change file +mechanism of {\mc WEB} and the careful way in which \TeX\ was written, +makes the conversion of 16-bit integers to 32-bit integers quite +straightforward. (It is also necessary to disable some of \TeX's initial +consistency checking.) + +When the author did this, producing a ``\bigTeX'', he found that the +16-bit and 32-bit versions of \TeX\ were identical in almost every +respect. The executable file was a few percent bigger, probably due to +the increased memory space rather than the different integer +representation. Likewise, the string pool and format files were slightly +larger. However, there is {\em no\/} perceivable impact on execution +times. (In fact, the author replaced the 16-bit version with \bigTeX\ +without telling users---and no-one noticed any difference!) + +This may seem a little surprising at first, but an examination of the +(pseudo-) assembler generated by the {\mc PASCAL} compiler provides the +answer. The machine code generated for variables declared as \|0..65535| +(or, indeed, \|0..255|) is {\em identical\/} to that for, say +\|0..262144|; 32-bit integers are used in all cases. (This does, of +course, not apply to {\bf packed array}s.) +\TeX\ is very frugal in the way it handles its memory arrays, +always re-using the same region if possible; this keeps the page fault +rate low. Since the \VAX\ initialises all memory to be `demand-zero' +when a program is loaded, there is no increase in the system overhead +due to unused regions of \TeX's memory. + +\begin{figure*} + \centering + \fbox{\input boat\relax} + \caption{A $256 \times 256$ Lake Scene} +\end{figure*} + +The version of \TeX\ at the author's site has a large enough memory +capacity for four $256 \times 256$ pictures (or one $512 \times 512$ +picture!) in addition to the usual text, fonts and macro definitions. +This allows users to put a few images into floating figures, as +described above, without overflowing \TeX's memory. A $256 \times 256$ +picture is shown in \fig{2}. + +Indeed, to a certain extent, the physical size of a picture on the +printed page determines the maximum number of pixels which can be +plotted. Images of $512 \times 512$ pixels are more or less standard in +the image processing community, while satellite images used in remote +sensing applications have several thousand pixels on a side! Hence, if +the image size exceeds a proscribed maximum (256~pixels, say), +\|TEXPIC| must {\em interpolate} between pixels to reduce the size of an +image. Another associated \|SUBROUTINE|, \|TEXMAX|, is used to tell +\|TEXPIC| the maximum number of pixels which can be output. If the \|M| +dimension of an image exceeds this value, the image is interpolated down +to this plottable maximum number of pixels. + +\begin{figure*} + \centering + \fbox{\input mandy\relax} + \caption{Mandrill Image, Reduced to $200 \times 200$ + Pixels from $512 \times 512$ Pixels} +\end{figure*} + +There are many ways to perform the interpolation. The theoretical +optimum is to use a $\sin x / x$ interpolation function (usually +achieved via Fourier transformation), but this is slow. Cubic or linear +interpolators tend to be used in practise. Recognising that \TeX\ output +of a reduced $4000 \times4000$~pixel image will inevitably be +inaccurate, \|TEXPIC| uses a linear interpolation scheme. However, since +linear interpolators usually blur edges (a particularly undesirable +effect), it attempts to reduce the blur by using a {\em +context-sensitive\/} interpolator. This interpolates between triplets of +pixels at right angles and selects the value of the line with maximum +gradient. For example, \fig{3} is a $200 \times 200$~pixel image, reduced +from a $512 \times 512$ image in this way. + +All the software described here is available. \|TEXPIC| and supporting +routines exist in both standard \FTN\ and \VAX\ \FTN; the \VAX\ version +does clever things with filenames and channel numbers. The \bigTeX\ +change file is, of course, specific to \VMS, but may be useful for +people making similar enhancements on other machines. + + +\subsection*{Enhancements to the Software} + +Since this article was submitted to \TUB, a few improvements have been made +to \|TEXPIC|. Firstly, the code used an \|ASSIGN|ed \|GO~TO|, which is no +longer a part of the \FTN\ standard. The latest version of the routine has this +section of code in both the places where it is needed. The second improvement +is to output the picture in a more concise format, along the lines of Don +Knuth's macros in \TUB\ volume~8 number~1. The files written in this new format +are fully compatible with existing \TeX\ documents. There has been no +perceivable change in execution time. + +Another support routine has been written, too: \|ZSAME| tells \|TEXPIC| that +subsequent pictures should be scaled with the same factors as the last picture. +(An error message is generated if no previous picture has been plotted.) Thanks +to Guy Facius of SFEBP Paris for this suggestion. + +\end{document} diff --git a/fonts/halftone/pixkit.post b/fonts/halftone/pixkit.post new file mode 100644 index 0000000000..2e7ee5ea20 --- /dev/null +++ b/fonts/halftone/pixkit.post @@ -0,0 +1,1817 @@ +$! Archive name: DRA1:[TEX.PIX]PIXKIT.POST; +$! +$! This file is a ``DCL archive``, a VAX/VMS DCL command procedure, analogous +$! to a ``shell archive`` on UNIX systems. It is intended primarily for +$! sending a set of files across a network in a format which allows them +$! to be restored. On VMS systems, the archive is restored simply by typing: +$! +$! $ @archive-name +$! +$! The format of the archive is as follows: +$! +$! 1. As you start reading the file, lines which start with a dollar ($) +$! are DCL commands. +$! 2. On DCL commands, an exclaimation mark (!) marks the beginning of +$! a comment. In the DCL archive, this only occurs as the second character +$! on a line. +$! 3. Each file to be created is preceded by a ``CREATE`` command. The +$! text following the word `CREATE' is the name of the file to be created. +$! If your system allows it, you should create a new version of the file. +$! 4. Filenames consist of two parts, the name itself and the extension. +$! Either part may contain zero to 39 characters, which must be dollar, +$! underscore (_), hyphen (-) or alphanumeric; a hyphen may not be the +$! first character of a name. +$! 5. The `CREATE' command is followed by a line containing `$DECK' only. +$! Lines of text following the `$DECK' should be copied verbatim to +$! the output file. +$! 6. The end of the output file is delimited by a line containing only +$! `$EOD'. +$! +$! Note that lines starting with a dollar may occur within `$DECK'..`$EOD'. +$! +$! The following two lines contain the ASCII character sequence from +$! exclaination mark to the end of the upper case letters, followed by +$! the remaining characters up to #126: +$! !"#$%^&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ +$! [\]^_`abcdefghijklmnopqrstuvwxyz{|}~ +$! +$! This archive was created using DCLAR version 0.00--0 +$! on 15-JAN-1988 14:52:26.56. +$! under VAX/VMS V4.5 +$! DCLAR was written by Dr. Adrian F. Clark (``Alien``), Essex University. +$! +$WRITE SYS$OUTPUT "creating BLURB.TXT" +$CREATE BLURB.TXT +$DECK +This DCL archive contains all the required bits and pieces for preparing +pictures for plotting by TeX. When executed, the archive creates +the following files: + + o BLURB.TXT this file + o HALFTONE.TEX user-level documentation (for LaTeX) + o PICTURE.TEX picture from TeXPIC used by HALFTONE.TEX + o TEXPIC.FOR the software. Note that there are two versions + of TEXPIC in this file, one for VMS and another + which is a little more portable. + o HALFTONE.MF Don Knuth's halftone font + +If you intend to produce pictures of size >= 256 x 256, you'll need to +expand TeX's memory (see my article in TUGboat vol 8 no 3 for more +details). I can supply a TeX change file for VAX/VMS which effects this +change (and provides an editor interface) either by e-MAIL or on tape. +Contact me for more details. + +If you want to use this software, but you're not a TeX guru...find +someone who is! He/she will be able to generate convert the Metafont +source for the halftone font (HALFTONE.MF) to a form acceptible to +TeX, and put it in the right directories for you to use. I can supply +outline help, but the font generation process tends to be horribly +site-dependent. Sorry. + +If you have any trouble with the software, please let me know (it's not +quite the same as the version I use myself). I'm particularly keen +to receive feedback from non-VMS sites. + + `Alien' (ALIEN @UK.AC.ESSEX.ESE on JANET) +$EOD +$WRITE SYS$OUTPUT "creating HALFTONE.TEX" +$CREATE HALFTONE.TEX +$DECK +% --- ------------------------------------------------------------------ +% --- halftone.tex +% --- Format me with LaTeX, print me with an inch of top and left margin +% --- ------------------------------------------------------------------ + +\font\halftone=halftone + +\def\|#1|{{\tt#1}} +\def\mmax{M_{\hbox{\scriptsize max}}} +\def\SYSDEP#1{\marginpar{\scriptsize site\\ specific}} +\def\TL{{\tt\TeX lase}} +\def\TV{{\tt\TeX view}} +\def\VAX{\leavevmode\hbox{V\kern-.12em A\kern-.1em X}} +\def\VMS{\leavevmode\hbox{V\kern-.06em MS}} + +\def\mc{\small} +\def\FORTRAN{{\mc FORTRAN}} + +\nofiles +\documentstyle[11pt]{article} +\advance\textheight by 21mm + +\title{Halftone Output From \TeX\footnote{Taken from the {\sl \VAX/\VMS\ \TeX\ + User's Guide}}} +\author{Dr. Adrian F. Clark\\ + Department of Electronic Systems Engineering\\ + University of Essex} + +\begin{document} +\maketitle + +\section{Introduction} + +This note describes how image data can be converted to a form suitable +for \TeX\ and then typeset in documents. Pictures are prepared for \TeX\ +in a somewhat different way to normal text---the hard work is done outside +the \TeX\ input file; incorporating the image into the \TeX\ document is +then quite straightforward. + +The image data must be converted from the binary representation used in Image +Processing and Pattern Recognition work to a series of characters which \TeX\ +can map into pseudo grey-levels via a special font. A user-callable \FORTRAN\ +\|SUBROUTINE| called \|TEXPIC| is available for this purpose. \|TEXPIC| +converts a picture held in memory to a text file containing \TeX\ input. (You +can look at this file if you like, but it is unlikely to make much sense.) +There are a few additional routines which can be used with \|TEXPIC| to produce +particular effects: for example, the picture may be plotted as a positive or +negative image. + +The special font for setting pictures is +defined to have some 65~grey levels. This does not necessarily imply that all +the grey levels are distinguishable, nor even that they are strictly monotonic +on laser printers. However, the quality of the output is certainly adequate for +run-of-the-mill technical reports. + +An example of an image typeset with \|TEXPIC| and \TeX\ is shown in +Figure~1. This is the ``girl'' picture from the image database +distributed by the Signal and Image Processing Institute of the University of +Southern California, which is widely used to demonstrate image processing +techniques. This representation is some $64 \times 64$~pixels. + +\begin{figure} + \centering + \fbox{\input picture\relax} + \caption{Example of an Image Typeset using \|TEXPIC| and \TeX} +\end{figure} + +\section{The \|TEXPIC| Routine} + +To generate a file containing the image data in a form suitable for input to +\TeX, you simply invoke \|TEXPIC| from a program. \|TEXPIC| is called as +follows: + +\begin{verbatim} + CALL TEXPIC( ARRAY, M, N, FILE ) +\end{verbatim} + +\noindent where \|ARRAY| is a \|M| $\times$ \|N| \|REAL| array containing the +picture to be plotted and \|FILE| is a quoted string or \|CHARACTER| variable +containing the name of the file to receive the data. If you omit a filetype +(``extension'') from \|FILE|, \|TEXPIC| will use \|.TEX|. You can call +\|TEXPIC| as many times as you want from a program; a separate output file will +be generated for each picture. + +Due to problems with the controlling micro-processor in the standard \|LN03| +printer, pictures with $\|N| > \approx 64$ will come out with white bands +across them, rendering them effectively useless. However, this problem has been +overcome on the \|LN03+| device, which can print images up to a full \|A4| +page in size. + + +\section{Associated Routines} + +\|TEXPIC| normally maximises the contrast of pictures by determining the range +of grey levels in the image and scaling the output to make use of them. This +behaviour can be overridden by invoking the routine \|ZRANGE| before \|TEXPIC|. +\|ZRANGE| requires two \|REAL| arguments, the minimum and maximum grey level +values to be output: + +\begin{verbatim} + CALL ZRANGE( ZMIN, ZMAX ) + CALL TEXPIC( ARRAY, M, N, FILE ) +\end{verbatim} + +\noindent where \|ZMIN| $\le$ \|ZMAX|. +\|TEXPIC| then uses the supplied extrema, rather than values +determined from the image, for scaling the data. Values which lie {\em +outside\/} these extrema are clipped. Hence, if \|ZRANGE| is used with values +which are outside the values of the pixels in \|ARRAY|, the contrast of the +data generated by \|TEXPIC| is {\em reduced.\/} The converse is also true. The +extrema set up by \|ZRANGE| remain in effect until another call is made to +\|ZRANGE|, superseding the previous limits, or \|ZAUTO| is invoked, which +restores the default behaviour. + +\|TEXPIC| normally plots positive pictures---i.e.,\ pixels which contain +low values come out darker than pixels with high values. It can also produce +negatives, however; you do this by invoking the routine \|DONEG| before +\|TEXPIC|. Normal, positive picture-plotting is restored by calling \|DOPOS|. +As with \|ZRANGE| and \|ZAUTO|, \|DOPOS| and \|DONEG| remain in effect until +explicitly cancelled. +You can, of course, use the routines in conjunction to produce any +required effect. + +There is a limit, $\mmax$, to the number of pixels that \|TEXPIC| can fit +across a page of output. For +pictures with $\|M| \le \mmax$, the data are written out exactly as supplied. +However, when pictures have $\|M| > \mmax$, the image is interpolated so +that the data written out form a $\mmax$-pixel image. +The same interpolation factor is used in both dimensions so that the aspect +ratio of the picture remains correct. The interpolation technique used is +a context-sensitive three-point bilinear method due to {\sc +Smith}.\footnote{There is also a version which uses standard four-point +bilinear interpolation.} This produces marginally better results in the +vicinity of edges in the picture. + +The default value of $\mmax$ is~256. You can alter this (for example, when +producing pictures for a document with the text set in narrow columns) by +invoking \|TEXMAX| before \|TEXPIC|, as follows: + +\begin{verbatim} + CALL TEXMAX( MV ) +\end{verbatim} + +\noindent This sets $\mmax$ to \|MV|. Obviously, $\|MV| \ge 2$. + +\|TEXPIC| and the support routines are all to be found in the algorithm +library, \verb|ESE$LIB:ALG|. \SYSDEP{Location of \\TEXPIC| and utility.} +There is also a stand-alone program which you can use for images stored in the +standard formats on disc. This program is \verb"ESE$PROGRAMS:V159". + + +\section{Inserting the Picture into Your \TeX\ Document} + +This is quite easy, although there are a few steps in the process. +The procedure you follow depends on which macro package you are using with +\TeX. Most people use ``plain \TeX,'' the default macro package, but \LaTeX\ +is also in widespread use. If you use a customised \TeX\ but don't know exactly +what is different about it, try the plain \TeX\ procedure. + +Whichever version of \TeX\ you use, there are a few things you should know. +\TeX\ must hold the whole image in memory, so the maximum image size is +obviously limited to \TeX's memory capacity. Since \TeX\ was designed for +typesetting rather than image hard-copy, its memory capacity isn't +large enough to hold dozens of pictures, although it should be adequate +for reasonable use. + +\|TEXPIC| tells \TeX\ to use a special font, a {\em halftone\/} font, for +setting the picture. You have to tell \TeX\ to load this font. To do this, +you type the following command at the top of your document: + +\begin{verbatim} + \font\halftone=halftone +\end{verbatim} + +\noindent This works with both plain \TeX\ and \LaTeX. + +We shall now consider the procedure for telling \TeX\ to typeset your picture. +In the examples that follow, it is assumed that the picture produced by +\|TEXPIC| is in the file \|PICTURE.TEX|. + +\subsection{Procedure for Use with Plain \TeX} +The first thing you must do is to create an input file for \TeX\ which contains +the document to be typeset. At the point where you want the picture to +appear, you type: + +\begin{verbatim} + \centerline{\input picture} +\end{verbatim} + +\noindent For \TeX{}perts, the image is set as a single \verb|\hbox|. + +The picture can be put into a ``floating'' insert, which will cause the +picture to be held in \TeX's memory until there is enough free space on +the page to hold it. For example, to set the picture in a \verb"\midinsert", +the relevant \TeX\ input would be: + +\begin{verbatim} + \midinsert + \centerline{\input picture} + \endinsert +\end{verbatim} + +\noindent This command sequence should be typed between paragraphs, +when \TeX\ is in `vertical mode.' Typing \verb"\goodbreak" immediately +before the \verb"\midinsert" may help \TeX's page-breaking mechanism. (In +practise, you'll probably want to add a title to the picture, too.) + +There is one other thing you might want to do and that is to draw a border +around the picture. You would do this by defining a \TeX\ macro, \|border|, +as follows: + +\begin{verbatim} + \def\border#1{\vbox{\hrule\hbox{\vrule\kern3pt + \vbox{\kern3pt#1\kern3pt}\kern3pt\vrule}\hrule}} +\end{verbatim} + +\noindent You would then set the picture with + +\begin{verbatim} + \centerline{\border{\input picture}} +\end{verbatim} + +\noindent instead of simply \verb"\centerline{\input picture}". + +\subsection{Procedure for Use with \LaTeX} +The most sensible way to plot pictures with \LaTeX\ is in the \|figure| +environment ({\em not\/} the \|picture| environment). This generates +a ``floating'' figure, which usually surfaces at the top of the following +page of output. The \verb|\centering| declaration causes the picture to +be centred in the page. + +\begin{verbatim} + \begin{figure} + \centering + \mbox{\input picture\relax} + \caption{Figure Title} + \end{figure} +\end{verbatim} + +\noindent The \verb|\relax| following the filename in the \verb|\mbox| command +is required for \LaTeX\ to know where the filename ends. To draw a border +around your picture, you simply replace the \verb|\mbox| command with +\verb|\fbox|. + +\section{Producing the Output} + +Having inserted the appropriate commands into your document, you run \TeX\ in +the normal way. If it exits with a ``memory capacity exceeded'' error message, +you've either tried to set images which are too big or you're holding too +many in memory at once. The only solution to this problem is to re-format your +document. \LaTeX\ users may be able to cure the problem by strategically +inserting \verb"\clearpage" commands into the manuscript. + +You run \TV\ or \TL\ on the \TeX\ output file as normal, although the \TV\ +display bears little relationship to the grey levels produced by \TL. Note that +you must use \TL\ version~10 to send output to the \|LN03|, since earlier +versions cannot read the halftone font file. (When you invoke \TL\, it outputs +a short introductory message which includes its version number.) + +The current version of \TeX\ 2.0 has a larger-than-usual memory capacity, +\SYSDEP{Size of \TeX's memory.} +large enough for four $256 \times 256$ images to be held in memory. + +\end{document} +$EOD +$WRITE SYS$OUTPUT "creating PICTURE.TEX" +$CREATE PICTURE.TEX +$DECK + \hbox{\vbox{\halftone\offinterlineskip % machine-generated by TEXPIC. + \def\BHT{\hbox\bgroup\ignorespaces} + \catcode`\^=12 \catcode`\_=12 \catcode`\.=\active \let.=\egroup + \catcode`\,=\active \let,=\BHT \catcode`\/=0 \catcode`\\=12 + ,ccdggfcbabbcfeeddeccehhlmkkklljdejceggiagjfgbecbbadiiXNQLEHDGHJL. + ,dcdggfbbbaadeddcddbdfghkmkkkklljjicfhiiaiiggbddac`fkcQLQLEGGGHKL. + ,ecbfffcbbabdeedecddfgfglmkkkjkllmgc`ghgcjhfdbebaaahk\NLQLGGHGKMN. + ,cccfgfdaaaadddddceffdcekmkkkj_PI?GME;FNckfgfbbb`_djgVLLQMGIIGJNM. + ,dddggfbbbbbeedcdcedcccdjmkkk\GHEMHEJH><86Fcfdcc`_glaQOMPLHIHFJNL. + ,ddcggfcbaabdedddcdbbbbdjmkfHH?GQLQNLNNLB<@=NedbaaikZMLMQKGJHGJNM. + ,dbdffebaabbddeddddccabbjlgWSLLFKIRQLJMTKMHKDKda_dkhUILNQJIKJILPN. + ,dbeggfdbbbbdfddddcccbbchdJFGISKTMPWRQLWYVOKGDBaahlaTRQUWOKMRNQUT. + ,ebdggecbaabdddcedccbcbaUHAIKNPTUNROORQYXYUWVPIOdij[TWWYZTSSWWY\\. + ,edegfebabbadeedddccbbbRRVOJLHCJOOPSVT^WY]XTTTLDakbQKONNRMOST[\^\. + ,dcdfgeabcbaceddcdbccbZ[VWYJJMWMTRLS]]bZ_a`Z^QTQ9l^HHMNONJRYYYZ\\. + ,ecdgffcaaabdecdcdccb_d\YVQUWQ^a_Yf`^^lkha^_^SLWB\YHHLNONGPXXVWZ[. + ,ebdgfebaabbdeddccbcd^bYZQ[W]VZbjaijgdgonhhiiWJJEWOJJLNOLHQXVVTY\. + ,ebegffcbabbdecdbcbba^X`a\WC`hjdbekleknnopjkifXGRRMHIMLPNIQVVWUX\. + ,ecdgffbaaabdedcdbba^_ef_`iegcfglnneihlnonmlii\KQULGHKJOONUTVUTY[. + ,fcdggebbaacdddcddbb^_gbhllfiknhnoinlmlllmmlih`Q]SKILJLPQTXTUVTVZ. + ,ecdgfecbbabdedddddba\ehjljiklmlmnnmilkghcjgicb\YUJJJMRYTQYXUVWWZ. + ,dcdgfeab`bbedddcdcb\a]flmjijldecnommjf]jcTf\bdbbELLNSU^TPWYWWWWX. + ,fcfggeababbedddcdbc]^g`gm_fa]hgaemkgjhgj_UhIb^f^SMJQXY]TQYXZYVYZ. + ,fbeffebabbbdecdcdcbb`ZSbg]b\Ya_b^gjijgjibajWdY]ZLNJRXZ]SNY][YWW[. + ,fbeffdcbaabdddddcbabhgi_b`]^bbhdb`dgfdjaagjjbV[ZLMLWXV\QR[^^\XY[. + ,ebdffdcabbbededdccc`mlnmjecfihhijjikkdj^efije_]_NNPWXYZRU^]^[WUZ. + ,fcegfdbbbbcdddddccbbinonnjhgkinkmnlnmiidegfkggjZVWVYY\\UW]^\ZVU\. + ,ebdffecbacceeeddcccbginnijjjkkkjklnnnijjiihmjjfdRUV^^^aY\_^]]][^. + ,gdeggdbbbbcdededddbcggYNVWX\]ii_`b_cmljlkkhkibi\NKQYY\_SW_ZZ^[^]. + ,fdegfebabbceeeeddddcdh]diZYZYYfjgacllihnkmjbifhSNKNTY_^RV^^^^]^]. + ,fbfggeccdceeddddeddcceghggaZ\be_fefjljhjjmnkjegQKKIOY^_RT_^^^\\\. + ,fcegffdbcbdeddedeecbchnZm]dNVgggjmpohfeeiglljkZNJHFPW^^RT^\^YY[^. + ,fcfhfdbccbcfeeeddddcdcZgibUO[]RcWelifcegijigflLLJIIOU\_VT_]\ZY\^. + ,edfgfebccddeeeedeeedcbTYXRUP^\XTbdd\`a_ggekebPQLLJHMOX^VW][]\YY\. + ,edfgfedcdcdfeeffeededdTQOOVU_\WOQTW[_afkflhaSOQJLMKNRZ^UY[[_^YV]. + ,fdfgfeddccdeefeeeeefbeTOKYSY`aWJQVY]afeklihbSNMJJKLMT\^UY]\_b\Z^. + ,fdgfgfdccddfeffdfffeedTTTaQZbd^TSUW]bg`_fgfQUPLLLJKOQX]UX]\\]Z[^. + ,fdgggedccdcfefeefededc\Zaa_jij^^XY\`de^[X\VPRORPLKJLNU\VX^[\[VY^. + ,fdfgffcdcbdfedefefeeee_bg\W^Z[[_ab_ciadXUNVVYWWUQLJMOW\TY\YZZYZ_. + ,fdfggfdcecdeeefeeefedfebaidVY\]abbdfidaZXNWTWVVTQJKNOXXTZ[Z\]ZY\. + ,fdfggedddddffeefeedeejj_[Y`KHYlok`degfa]`QYWYWVTSNORW\\T]]]a^WVZ. + ,fcgggfddddeffeeffeeeegie^YaYV]ecZ]bfgda_`PZ[ZZ[WUQNRV^[Z_bb`]ZZ^. + ,fdghgfededffffffeeedc[jh`\]]_acaa_fggcfhaXURTVYUMLKMR\_Y_cba]Z]a. + ,ffhhhgedddfggffffgfee_cil]UTQWX]^bfhhjhi`XRSRPURKHJKQ[\UZ]]_\[\\. + ,gfgjihfeffgiggfgggfegnlimo[VUY\abdhjkiiiaMQTUPTSJILPRVWRTVUWVSRR. + ,ggjjjiggfgfhhhggggffjljjmojbabdgjllljhjj_GRUVQURLJPURXWRQSRQQPPQ. + ,fikjjjhgfgfghghghhfhmnjgjnfgZlnnmlkjiiiiaRGPWQSRKKVWV[ZRTVSURSRQ. + ,chkjjjggggffghghhgfjnnmlmdliiY^lljjjjiiib`d[^_TQKNWWV][RWVVVUTSS. + ,]`gkkjihghhhjjjjjjijmnoldfijhkXY\gijid_]fjihffe`QMWUV[ZQUVTSTTRT. + ,\^]ejllkkjjjllmmlmlllnfcdfghijk\]][\\[gkmhjhhgfda]`^X_]TYWVYYUUW. + ,ab[\cegihgffhjjkkkkibecddfhfljjofgfhikiiiljigfiijkklg\[UZYY]]ZYZ. + ,d```a``cfeffijjjj`^edegdfgjfkijnogfhhhgiihijjjklmnoobnYQWYY\[ZYV. + ,hifiie__egggijj]cbfeecegfflgfnjinofggiiihhhfgiljjndhdhbRXZZ][XXX. + ,hklllic]ageeffNYcfgfgffggfkifijihmjhhhiiiijjjijlmmmiZQESY\^][[[[. + ,hghlmkib^cdeYY^dchhffgeggfhmhiiignjihihhijijjkllnoni`YXFDYZ\WWYZ. + ,a]bkmkigdjmc^`bbdigfggfhgggoiijjkhljjhijijjjklmnonheddaXRHK]YUXY. + ,c^`knihighl[__adgjhffghiiiiimjjikkjjiikikkkllmooihhgfgec[XOHc_ac. + ,gbbjnllmkjk[^_baiiggehiijiiholnomlklknmikklmmoohgghgfiifea_[W^^_. + ,kghllnooona^___gcliijkddfhiijommihnnmnhipomnoniggghhhhhijjced]ZZ. + ,nonmlmopppd``a`lgakifhghijjjjjllmjlklkkjanlkiggihiiiiiihlkiZha]Z. + ,pponlloppo`a`bdllkgfddgijgebblkmilimmkUACG8@iiihghiiihhnmiifWg\W. + ,pponllmopmabacdlllkkkkjie^bcbfajominXlk`=L=3BEbfgiihhgjnjijj`W[U. + ,ponmlllnolbbbadkmllkklkfdhbhdghimmkiaO?HO>G8?CELhjihghkoiklje[YY. + ,onnmlmmmocdcbacjlmmlmmlcgiijgefkjopooonNA>7=BBDC<jhghlooillki`QX. + ,nmnmnmmmobcbbbbjlmmmmjjkljlgiielilio\[IZWPRS?D4BDWghilokilllkg\[. + ,mmlkllklneddbbbjmmmllfhjkillkgjjb\TYpKTVO;JJ<7I;3FkRmoohlnnnlkcT. + ,lllllllnnc`dbcbblmmmmlgijiggfhhkR@TCYI[HghUWS?@DCFBBEA?mnoonmkf\. + ,pponmmnnjb\kjfdekklkkijkjijhiigiILAP<LIL^VNSHGKLBABJ>BGbooonnmia. + }}% +$EOD +$WRITE SYS$OUTPUT "creating TEXPIC.FOR" +$CREATE TEXPIC.FOR +$DECK +C --- ----------------------------------------------------------------- +C --- T e X P I C +C --- ----------------------------------------------------------------- +C +C --- These routines are used to generate an input file to TeX which, +C --- when processed, gives a halftone representation of the grey-level +C --- image. TEXPIC is the main picture-plotting routine: it requires a +C --- M x N pixel array ARRAY. The TeX commands are written to the file +C --- FN. These routines are taken from a general-purpose library of +C --- image processing software developed by the author, which explains +C --- why most of the variables in the COMMON blocks are not used. The +C --- Fortran is also machine-generated, which may account for some odd +C --- line breaks in the code. (No line, even in comments, has more +C --- than 72 characters in it.) +C +C --- The image representation used here conforms to the one adopted by +C --- the Numerical Algorithms Group (NAG) for their ``Image Processing +C --- Algorithm Library'' IPAL, although the coding does not (it does +C --- not allow a sub-region to be plotted). +C +C --- There are two versions of TEXPIC in this file: the first is VAX- +C --- specific, while the second should be fairly portable. Note that +C --- both routines declare the BLOCK DATA module ALGINI as EXTERNAL; +C --- this usually forces the linker to build it into executable files. +C +C --- TEXPIC's support routines are: +C +C --- TEXMAX set the maximum pixel width across the page +C --- ZRANGE fix the contrast for subsequent TEXPIC calls +C --- ZAUTO subsequent pictures have their contrast determined +C --- from the data +C --- ZSAME subsequent pictures are plotted with the same +C --- contrast as the previous one +C --- DOPOS subsequent pix have low pixel values plotted black +C --- DONEG subsequent pix have low pixel values plotted white +C --- MINMAX determines the range of the data +C --- ALGERR outputs error messages +C --- ABANDN VAX-specific ^C trap routine +C --- ALGINI block data module +C +C --- Details of the invocations are given in the comments associated +C --- with each routine. There is also a separate document which gives +C --- user-level documentation and examples. This is available as part +C --- of the ``VAX/VMS TeX User's Guide'', written by the author, or as +C --- a separate document. +C +C --- As supplied, TEXPIC uses a three-point contextual bilinear method +C --- to interpolate between pixels. The results it produces should be +C --- marginally better than using standard four-point interpolation; +C --- however, the author can detect no difference. If you'd prefer to +C --- use four-point interpolation, the line to change is marked in the +C --- TEXPIC source code. +C +C --- Since you get TEXPIC free of charge, there is no formal guarantee +C --- given by Essex University OR the author that the software works +C --- or that the documentation agrees with the code. Nevertheless, the +C --- author would be pleased to hear of any problems. +C +C --- TEXPIC and associated routines were written by: +C +C --- Dr. Adrian F. Clark (``Alien'') +C --- of Department of Electronic Systems Engineering +C --- University of Essex +C --- Wivenhoe Park +C --- Colchester +C --- Essex C04 3SQ +C --- United Kingdom +C --- Tel: Colchester (0206) 872432 (direct) +C --- JANET: user ALIEN @UK.AC.ESSEX.ESE +C +C --- If you write, please mark the envelope with ``TeX''. +C +C --- Acknowledgements in any published work that uses TEXPIC would be +C --- appreciated. +C +C --- ENJOY! +C +C --- ----------------------------------------------------------------- + SUBROUTINE TEXPIC( ARRAY, M, N, FN ) +C --- ----------------------------------------------------------------- +C +C --- TEXPIC version 0.1 was written by Alien in Fortran-77. +C +C --- This routine writes out the M x N image ARRAY into the file FN +C --- in a form which is suitable for insertion into a TeX document. +C --- If FN has no filetype (``extension''), .TEX is used. +C +C --- By default, the range of the data is determined and used to +C --- maximise the contrast of the output image. This can be +C --- overridden by pre-setting the range of data values with a call +C --- to ZRANGE. ZAUTO restores the default behaviour. Similarly, +C --- TEXPIC will produce negated images on output if DONEG has +C --- previously been invoked. DOPOS sets it to produce positive +C --- pictures again. +C +C --- USAGE: CALL TEXPIC( ARRAY, M, N, FN ) +C +C --- PARAMETERS +C --- ARRAY REAL image to be output to the file +C --- M INTEGER first dimension of ARRAY +C --- N INTEGER second dimension of ARRAY +C --- FN CHARACTER*(*) name of file to which ARRAY will +C --- be written +C +C --- RESTRICTIONS +C --- If N is greater than MMAX, the image will be sub-sampled in both +C --- directions to make the result MMAX x MMAX. The interpolation +C --- technique used is due to P.R. Smith (Ultramicroscopy vol 6, pp +C --- 201--204, 1981). +C +C --- COMMONS +C --- /ALG/, /ALGTEX/ +C +C --- SUBPROGRAMS INVOKED +C --- MINMAX, LIB$GET_LUN, LIB$FREE_LUN +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER LEVELS, MINIDX, CMAX + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) + PARAMETER( LEVELS=65, MINIDX=48, CMAX=132 ) +C + CHARACTER*(*) FN + INTEGER M, N + REAL ARRAY(M,N) +C + CHARACTER*(CMAX) C + CHARACTER*6 RUTNAM + INTEGER NMAX, I, J, IC, IV, LUN, IOS, ILO, JLO, IHI, JHI + INTEGER LIB$GET_LUN, LIB$FREE_LUN + LOGICAL POS + REAL RANGE, INC + REAL X, Y, DX, DY, DX1, DY1, VAL +C + INTEGER*2 CHAN + LOGICAL ABFLAG + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL + INTEGER MMAX +C + COMMON /ALG_ABANDN/ ABFLAG, CHAN + SAVE /ALG_ABANDN/ + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ + COMMON/ALGTEX/ MMAX + SAVE /ALGTEX/ + EXTERNAL ALGINI + DATA RUTNAM/'TEXPIC'/ +C +C --- Find the range of the data if we're in auto mode; otherwise, +C --- use the specified ranges. +C + IF( .NOT. ZFIX ) THEN + CALL MINMAX( ARRAY, M, N, ZMIN, ZMAX ) + IF( ZMIN .EQ. ZMAX ) ZMAX = ZMIN + 1 + END IF +C +C --- We can't print more than MMAX columns across the TeX output. +C --- If the user passes an array bigger than this, we'll interpolate +C --- it down to MMAX. +C + IF( M .GT. MMAX ) THEN + INC = FLOAT(M) / FLOAT(MMAX) + NMAX = NINT( FLOAT(N) / INC ) + ELSE + INC = 0 + END IF +C +C --- Get a free channel number and open the output file. +C + IOS = LIB$GET_LUN( LUN ) + IF( .NOT. IOS ) CALL EXIT( IOS ) +C + OPEN( UNIT=LUN, FILE=FN, STATUS='NEW', RECL=CMAX+1, IOSTAT=IOS, + & DEFAULTFILE='.TEX', CARRIAGECONTROL='LIST' ) + IF( IOS .EQ. 0 ) THEN +C +C --- Calculate the scaling factor. +C + POS = .NOT. NEG + RANGE = FLOAT(LEVELS-1) / (ZMAX-ZMIN) +C +C --- Output the introduction. +C + WRITE( LUN, 100 ) +C +C --- Output the image without interpolation if INC is zero. +C + IF( ABS(INC) .LT. TOL ) THEN + DO 2 J = 1, N + IF( ABFLAG ) GO TO 5 + IC = 1 + C(1:1) = ',' + DO 1 I = 1, M + VAL = ARRAY(I,J) + IF( VAL .LT. ZMIN ) VAL = ZMIN + IF( VAL .GT. ZMAX ) VAL = ZMAX + IV = NINT((VAL-ZMIN) * RANGE) + IF( POS ) IV = (LEVELS-1) - IV + IC = IC + 1 + C(IC:IC) = CHAR( IV + MINIDX ) + IF( IC .GE. CMAX-1 ) THEN + WRITE( LUN, 200 ) C(1:IC) + IC = 1 + C(1:1) = ' ' + END IF + 1 CONTINUE + IF( IC .GT. 0 ) WRITE(LUN, 300) C(1:IC) + 2 CONTINUE + ELSE +C +C --- Interpolate the output. +C + Y = 1 + DO 4 J = 1, NMAX + IF( ABFLAG ) GO TO 5 + DY = Y - INT(Y) + DY1 = 1 - DY + JLO = MOD( INT(Y-1), N ) + 1 + JHI = MOD( JLO, N ) + 1 + X = 1 + IC = 1 + C(1:1) = ',' + DO 3 I = 1, MMAX + DX = X - INT(X) + DX1 = 1 - DX + ILO = MOD( INT(X)-1, M ) + 1 + IHI = MOD( ILO, M ) + 1 +C +C --- Smith's three-point contextual bilinear interpolation. +C + IF( ABS(ARRAY(ILO,JLO)-ARRAY(IHI,JHI)) .GT. + & ABS(ARRAY(IHI,JLO)-ARRAY(ILO,JHI)) ) THEN + VAL = (DX-DY)*ARRAY(IHI,JLO) + DX1*ARRAY(ILO,JLO) + + & DY*ARRAY(IHI,JHI) + ELSE + VAL = (DX1-DY)*ARRAY(ILO,JLO) + DX*ARRAY(IHI,JLO) + + & DY*ARRAY(ILO,JHI) + END IF + X = X + INC + IF( VAL .LT. ZMIN ) VAL = ZMIN + IF( VAL .GT. ZMAX ) VAL = ZMAX + IV = NINT((VAL-ZMIN) * RANGE) + IF( POS ) IV = (LEVELS-1) - IV + IC = IC + 1 + C(IC:IC) = CHAR( IV + MINIDX ) + IF( IC .GE. CMAX-1 ) THEN + WRITE( LUN, 200 ) C(1:IC) + IC = 1 + C(1:1) = ' ' + END IF + 3 CONTINUE + IF( IC .GT. 0 ) WRITE(LUN, 300) C(1:IC) +C + Y = Y + INC + 4 CONTINUE + END IF +C +C --- Close off the file. +C + 5 CONTINUE + WRITE( LUN, 400 ) + CLOSE( UNIT=LUN ) + ELSE + CALL ALGERR( RUTNAM, 'Cannot open specified output file:', + & FN ) + END IF +C +C --- Release the channel. +C + IOS = LIB$FREE_LUN( LUN ) + IF( .NOT. IOS ) CALL EXIT( IOS ) +C + RETURN + 100 FORMAT(' \hbox{\vbox{\halftone\offinterlineskip ', + & '% machine-generated by TEXPIC.'/ + & ' \def\BHT{\hbox\bgroup\ignorespaces}'/ + & ' \catcode`\^=12 \catcode`\_=12 \catcode`\.=\active', + & ' \let.=\egroup'/ ' \catcode`\,=\active \let,=\BHT', + & ' \catcode`\/=0 \catcode`\\=12') + 200 FORMAT(1X,A,'%') + 300 FORMAT(1X,A,'.') + 400 FORMAT(' }}%') + END +C --- ----------------------------------------------------------------- + SUBROUTINE TEXPIC( ARRAY, M, N, FN ) +C --- ----------------------------------------------------------------- +C +C --- TEXPIC version 0.1 was written by Alien in Fortran-77. +C +C --- This routine writes out the M x N image ARRAY into the file FN +C --- in a form which is suitable for insertion into a TeX document. +C +C --- By default, the range of the data is determined and used to +C --- maximise the contrast of the output image. This can be +C --- overridden by pre-setting the range of data values with a call +C --- to ZRANGE. ZAUTO restores the default behaviour. Similarly, +C --- TEXPIC will produce negated images on output if DONEG has +C --- previously been invoked. DOPOS sets it to produce positive +C --- pictures again. +C +C --- USAGE: CALL TEXPIC( ARRAY, M, N, FN ) +C +C --- PARAMETERS +C --- ARRAY REAL image to be output to the file +C --- M INTEGER first dimension of ARRAY +C --- N INTEGER second dimension of ARRAY +C --- FN CHARACTER*(*) name of file to which ARRAY will +C --- be written +C +C --- RESTRICTIONS +C --- If N is greater than MMAX, the image will be sub-sampled in both +C --- directions to make the result MMAX x MMAX. The interpolation +C --- technique used is due to P.R. Smith (Ultramicroscopy vol 6, pp +C --- 201--204, 1981). +C +C --- COMMONS +C --- /ALG/, /ALGTEX/ +C +C --- SUBPROGRAMS INVOKED +C --- MINMAX +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT CHARACTER*1 (A-Z) +C + INTEGER LEVELS, MINIDX, CMAX + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) + PARAMETER( LEVELS=65, MINIDX=48, CMAX=132 ) +C + CHARACTER*(*) FN + INTEGER M, N + REAL ARRAY(M,N) +C + CHARACTER*(CMAX) C + CHARACTER*6 RUTNAM + INTEGER NMAX, I, J, IC, IV, LUN, IOS, ILO, JLO, IHI, JHI + LOGICAL POS + REAL RANGE, INC + REAL X, Y, DX, DY, DX1, DY1, VAL +C + LOGICAL ABANDN + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL + INTEGER MMAX +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ + COMMON/ALGTEX/ MMAX + SAVE /ALGTEX/ + EXTERNAL ALGINI + DATA RUTNAM/'TEXPIC'/ +C +C --- Find the range of the data if we're in auto mode; otherwise, +C --- use the specified ranges. +C + IF( .NOT. ZFIX ) THEN + CALL MINMAX( ARRAY, M, N, ZMIN, ZMAX ) + IF( ZMIN .EQ. ZMAX ) ZMAX = ZMIN + 1 + END IF +C +C --- We can't print more than MMAX columns across the TeX output. +C --- If the user passes an array bigger than this, we'll interpolate +C --- it down to MMAX. +C + IF( M .GT. MMAX ) THEN + INC = FLOAT(M) / FLOAT(MMAX) + NMAX = NINT( FLOAT(N) / INC ) + ELSE + INC = 0 + END IF +C +C --- We always open the output file on channel 7 (fix me!). +C + LUN = 7 + OPEN( UNIT=LUN, FILE=FN, STATUS='NEW', RECL=CMAX+1, IOSTAT=IOS ) + IF( IOS .EQ. 0 ) THEN +C +C --- Calculate the scaling factor. +C + POS = .NOT. NEG + RANGE = FLOAT(LEVELS-1) / (ZMAX-ZMIN) +C +C --- Output the introduction. +C + WRITE( LUN, 100 ) +C +C --- Output the image without interpolation if INC is zero. +C + IF( ABS(INC) .LT. TOL ) THEN + DO 2 J = 1, N + IF( ABANDN(0) ) GO TO 5 + IC = 1 + C(1:1) = ',' + DO 1 I = 1, M + VAL = ARRAY(I,J) + IF( VAL .LT. ZMIN ) VAL = ZMIN + IF( VAL .GT. ZMAX ) VAL = ZMAX + IV = NINT((VAL-ZMIN) * RANGE) + IF( POS ) IV = (LEVELS-1) - IV + IC = IC + 1 + C(IC:IC) = CHAR( IV + MINIDX ) + IF( IC .GE. CMAX-1 ) THEN + WRITE( LUN, 200 ) C(1:IC) + IC = 1 + C(1:1) = ' ' + END IF + 1 CONTINUE + IF( IC .GT. 0 ) WRITE(LUN, 300) C(1:IC) + 2 CONTINUE + ELSE +C +C --- Interpolate the output. +C + Y = 1 + DO 4 J = 1, NMAX + IF( ABANDN(0) ) GO TO 5 + DY = Y - INT(Y) + DY1 = 1 - DY + JLO = MOD( INT(Y-1), N ) + 1 + JHI = MOD( JLO, N ) + 1 + X = 1 + IC = 1 + C(1:1) = ',' + DO 3 I = 1, MMAX + DX = X - INT(X) + DX1 = 1 - DX + ILO = MOD( INT(X)-1, M ) + 1 + IHI = MOD( ILO, M ) + 1 +C +C --- Smith's three-point contextual bilinear interpolation. +C + IF( ABS(ARRAY(ILO,JLO)-ARRAY(IHI,JHI)) .GT. + & ABS(ARRAY(IHI,JLO)-ARRAY(ILO,JHI)) ) THEN + VAL = (DX-DY)*ARRAY(IHI,JLO) + DX1*ARRAY(ILO,JLO) + + & DY*ARRAY(IHI,JHI) + ELSE + VAL = (DX1-DY)*ARRAY(ILO,JLO) + DX*ARRAY(IHI,JLO) + + & DY*ARRAY(ILO,JHI) + END IF + X = X + INC + IF( VAL .LT. ZMIN ) VAL = ZMIN + IF( VAL .GT. ZMAX ) VAL = ZMAX + IV = NINT((VAL-ZMIN) * RANGE) + IF( POS ) IV = (LEVELS-1) - IV + IC = IC + 1 + C(IC:IC) = CHAR( IV + MINIDX ) + IF( IC .GE. CMAX-1 ) THEN + WRITE( LUN, 200 ) C(1:IC) + IC = 1 + C(1:1) = ' ' + END IF + 3 CONTINUE + IF( IC .GT. 0 ) WRITE(LUN, 300) C(1:IC) +C + Y = Y + INC + 4 CONTINUE + END IF +C +C --- Close off the file. +C + 5 CONTINUE + WRITE( LUN, 400 ) + CLOSE( UNIT=LUN ) + ELSE + CALL ALGERR( RUTNAM, 'Cannot open specified output file:', + & FN ) + END IF +C +C + RETURN + 100 FORMAT(' \hbox{\vbox{\halftone\offinterlineskip ', + & '% machine-generated by TEXPIC.'/ + & ' \def\BHT{\hbox\bgroup\ignorespaces}'/ + & ' \catcode`\^=12 \catcode`\_=12 \catcode`\.=\active', + & ' \let.=\egroup'/ ' \catcode`\,=\active \let,=\BHT', + & ' \catcode`\/=0 \catcode`\\=12') + 200 FORMAT(1X,A,'%') + 300 FORMAT(1X,A,'.') + 400 FORMAT(' }}%') + END +C --- ----------------------------------------------------------------- + SUBROUTINE TEXMAX( MV ) +C --- ----------------------------------------------------------------- +C +C --- TEXMAX version 0.0 was written by Alien in Fortran-77. +C +C --- This routine sets the maximum number of pixels across a picture +C --- which TEXPIC will output to a file. Pictures which have their +C --- first dimension greater than MMAX are interpolated down to MMAX +C --- pixels. +C +C --- USAGE: CALL TEXMAX( MMAX ) +C +C --- PARAMETERS +C --- MMAX INTEGER maximum number of pixels to be plotted by +C --- TEXPIC +C +C --- RESTRICTIONS +C --- none +C +C --- COMMONS +C --- /ALGTEX/ +C +C --- SUBPROGRAMS INVOKED +C --- none +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) +C + INTEGER MV +C + CHARACTER*(MAXICH) BUF +C + INTEGER MMAX +C + COMMON/ALGTEX/ MMAX + SAVE /ALGTEX/ +C + IF( MV .GE. 2 ) THEN + MMAX = MV + ELSE + WRITE( BUF, 100 ) MV + CALL ALGERR( 'TEXMAX', + & 'Too few pixels selected across page:'//BUF, + & 'You must have two or more pixels across the page' ) + END IF +C + RETURN + 100 FORMAT(I11) + END +C --- ------------------------------------------------------------------ + SUBROUTINE ZRANGE( ZVMIN, ZVMAX ) +C --- ------------------------------------------------------------------ +C +C --- ZRANGE version 0.0 was written by Alien in Fortran-77. +C +C --- This routine fixes the range of the Z-axis for subsequent +C --- graphical plots. +C +C --- USAGE: CALL ZRANGE( ZMIN, ZMAX ) +C +C --- PARAMETERS +C --- ZMIN REAL minimum value to appear on the Z-axis +C --- ZMAX REAL maximum value to appear on the Z-axis +C +C --- RESTRICTIONS +C --- ZMIN must be smaller than ZMAX. +C --- Note that the range of values actually produced on graphs may be +C --- slightly greater than those specified. +C +C --- SUBPROGRAMS INVOKED +C --- ALGERR +C +C --- COMMONS +C --- ZFIX, ZMIN, ZMAX in /ALG/ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) +C + REAL ZVMIN, ZVMAX +C + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ +C + IF( ZVMIN .LT. ZVMAX ) THEN + ZMIN = ZVMIN + ZMAX = ZVMAX + ZFIX = .TRUE. + ELSE + CALL ALGERR('ZRANGE','Zmin was not smaller than Zmax.',' ') + END IF +C + RETURN + END +C --- ------------------------------------------------------------------ + SUBROUTINE ZAUTO +C --- ------------------------------------------------------------------ +C +C --- ZAUTO version 0.0 was written by Alien in Fortran-77. +C +C --- This routine causes the Z-axis of subsequent graphical plots +C --- to be scaled according to the data being plotted. +C +C --- USAGE: CALL ZAUTO +C +C --- PARAMETERS +C --- none +C +C --- RESTRICTIONS +C --- none +C +C --- SUBPROGRAMS INVOKED +C --- none +C +C --- COMMONS +C --- ZFIX in /ALG/ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ +C + ZFIX = .FALSE. +C + RETURN + END +C --- ------------------------------------------------------------------ + SUBROUTINE ZSAME +C --- ------------------------------------------------------------------ +C --- ZSAME version 0.0 +C +C --- Written by Alien in Fortran-77. +C +C --- This routine causes the range of the Z-axis on subsequent +C --- graphical plots to be the same as those used on the previous +C --- invocation. +C +C --- USAGE: CALL ZSAME +C +C --- PARAMETERS +C --- none +C +C --- RESTRICTIONS +C --- none +C +C --- SUBPROGRAMS INVOKED +C --- |ALGERR| +C +C --- COMMONS +C --- |ZFIX|, |ZMIN|, |ZMAX| in |/ALG/| +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) +C + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ +C + IF( ZMIN .LT. ZMAX ) THEN + ZFIX = .TRUE. + ELSE + CALL ALGERR('ZSAME','Zmin was not smaller than Zmax.', + & 'Call ignored.' ) + END IF +C + RETURN + END +C --- ----------------------------------------------------------------- + SUBROUTINE DONEG +C --- ----------------------------------------------------------------- +C +C --- DONEG version 0.0 was written by Alien in Fortran-77. +C +C --- This routine causes subsequent grey-level pictures to be drawn +C --- with negative contrast. +C +C --- USAGE: CALL DONEG +C +C --- PARAMETERS +C --- none +C +C --- RESTRICTIONS +C --- none +C +C --- SUBPROGRAMS INVOKED +C --- none +C +C --- COMMONS +C --- NEG in /ALG/ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ +C +C + NEG = .TRUE. +C + RETURN + END +C --- ----------------------------------------------------------------- + SUBROUTINE DOPOS +C --- ----------------------------------------------------------------- +C +C --- DOPOS version 0.0 was written by Alien in Fortran-77. +C +C --- This routine causes subsequent grey-level pictures to be drawn +C --- with negative contrast. +C +C --- USAGE: CALL DOPOS +C +C --- PARAMETERS +C --- none +C +C --- RESTRICTIONS +C --- none +C +C --- SUBPROGRAMS INVOKED +C --- none +C +C --- COMMONS +C --- NEG in /ALG/ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ +C +C + NEG = .FALSE. +C + RETURN + END +C --- ------------------------------------------------------------------ + SUBROUTINE MINMAX( ARRAY, M, N, LOWEST, HIEST ) +C --- ------------------------------------------------------------------ +C +C --- MINMAX version 0.0 was written by Alien in Fortran-77. +C +C --- This routine determines the smallest and largest values of an +C --- array. If an interrupt is detected during the estimation of the +C --- limits of the data, the currently-detected limits are returned. +C +C --- USAGE: CALL MINMAX( ARRAY, M, N, MIN, MAX ) +C +C --- PARAMETERS +C --- ARRAY REAL array of which the limits are to be +C --- determined +C --- M INTEGER first dimension of ARRAY +C --- N INTEGER second dimension of ARRAY +C --- MIN REAL minimum value found in ARRAY (returned) +C --- MAX REAL maximum value found in ARRAY (returned) +C +C --- RESTRICTIONS +C --- If interrupts are to be detected, interrupt detection must have +C --- been enabled by the calling program---see ABANDN for more +C --- details. +C +C --- SUBPROGRAMS INVOKED +C --- ABANDN +C +C --- COMMONS +C --- none +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) +C + INTEGER M, N + REAL ARRAY(M*N), LOWEST, HIEST +C + INTEGER I, J, JM + REAL VAL, LO, HI + INTEGER*2 CHAN + LOGICAL ABFLAG +C + COMMON /ALG_ABANDN/ ABFLAG, CHAN + SAVE /ALG_ABANDN/ + EXTERNAL ALGINI +C +C --- We have declared ARRAY as a 1-D array, but will still access +C --- it via two DO-loops. This is so that ABANDN is only invoked once +C --- per "row" of ARRAY. +C + LO = ARRAY(1) + HI = LO +C + DO 1 J = 1, N + JM = (J-1) * M + IF( ABFLAG ) GO TO 2 + DO 1 I = 1, M + VAL = ARRAY(I+JM) + IF( VAL .LT. LO ) LO = VAL + IF( VAL .GT. HI ) HI = VAL + 1 CONTINUE +C + 2 CONTINUE + LOWEST = LO + HIEST = HI +C + RETURN + END +C --- ------------------------------------------------------------------ + SUBROUTINE ALGERR( NAME, MESS, EXTRA ) +C --- ------------------------------------------------------------------ +C +C --- ALGERR version 0.0 was written by Alien in Fortran-77. +C +C --- This routine reports errors generated by other routines. NAME is +C --- the name of the invoking routine while MESS and EXTRA form the +C --- message to be reported to the user. MESS is the text of the +C --- message. EXTRA, if non-blank, contains extra information about +C --- the error; leading and trailing blanks are removed from EXTRA +C --- before it is output. The current version of this routine simply +C --- outputs the message text on the error output channel -- future +C --- versions will be more sophisticated. +C +C --- USAGE: CALL ALGERR( NAME, MESS, EXTRA ) +C +C --- PARAMETERS +C --- NAME CHARACTER*(*) name of the invoking routine +C --- MESS CHARACTER*(*) message to be output +C --- EXTRA CHARACTER*(*) additional text for the message +C +C --- RESTRICTIONS +C --- The total length of the message must be less than the output +C --- line length (usually 132 characters) -- this means that the +C --- lengths of NAME and MESS, when added together, must come to less +C --- then 110 characters. +C +C --- SUBPROGRAMS INVOKED +C --- none +C +C --- COMMONS +C --- /ALG/ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + CHARACTER*1 BLANK + PARAMETER( BLANK=' ' ) +C + CHARACTER*(*) NAME, MESS, EXTRA +C + INTEGER NEXTRA, FC, LC, NMESS, LM +C + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ + EXTERNAL ALGINI +C + NMESS = LEN( MESS ) + DO 1 LM = NMESS, 1, -1 + IF( MESS(LM:LM) .NE. BLANK ) GO TO 2 + 1 CONTINUE + LM = 1 + 2 CONTINUE +C + IF( EXTRA .EQ. BLANK ) THEN + WRITE( ELUN, 100 ) NAME, MESS(1:LM) + ELSE + NEXTRA = LEN( EXTRA ) + DO 3 FC = 1, NEXTRA + IF( EXTRA(FC:FC) .NE. BLANK ) GO TO 4 + 3 CONTINUE + 4 CONTINUE + DO 5 LC = NEXTRA, FC, -1 + IF( EXTRA(LC:LC) .NE. BLANK ) GO TO 6 + 5 CONTINUE + 6 CONTINUE + WRITE( ELUN, 100 ) NAME, MESS(1:LM) + WRITE( ELUN, 101 ) EXTRA(FC:LC) + END IF +C + RETURN + 100 FORMAT(1X,A,': error -- ',A) + 101 FORMAT(10X,A) + END +C --- ------------------------------------------------------------------ + LOGICAL FUNCTION ABANDN( OP ) +C --- ------------------------------------------------------------------ +C +C --- ABANDN version 0.1 was written by Alien in Fortran-77. +C +C --- This LOGICAL function is used to detect whether the user has +C --- tried to interrupt execution. +C +C --- The method of specifying an interrupt varies from system to +C --- system, but is typically by typing a control character +C --- (control-C on the VAX). ABANDN is used with OP = 0 to TEST +C --- whether the user has signalled an interrupt -- the value TRUE is +C --- returned as the value of the function if this is the case. +C --- ABANDN is used with OP = 1 to SET or CLEAR the interrupt trap; +C --- this must be done by the calling program. Note that ABANDN +C --- returns the value TRUE if an error occurred while setting or +C --- clearing the interrupt trap. +C +C --- USAGE: <logical variable> = ABANDN( OP ) +C +C --- PARAMETERS +C --- OP INTEGER operation 0 ==> test, 1 ==> set +C +C --- RESTRICTIONS +C --- Interrupts will not be trapped before the first invocation of +C --- ABANDN(1). +C --- After the user has signalled an interrupt, subsequent +C --- invocations of ABANDN(0) will return TRUE until ABANDN(1) is +C --- used to clear it. +C --- If the user generates interrupts very quickly (for example, by +C --- letting the ^C auto-repeat), they may be delivered so quickly +C --- that ABANDN does not manage to reset its trap in time; in this +C --- case, it will actually interrupt program execution. +C --- This version of ABANDN requires VAX/VMS 3.0 or later. +C +C --- SUBPROGRAMS INVOKED +C --- ALG_ABANDN_AST (condition handler) +C +C --- COMMONS +C --- /ALG_ABANDN/ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INCLUDE '($IODEF)' +C + INTEGER ABSET, ABTEST + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) + PARAMETER( ABSET=1, ABTEST=0 ) +C + INTEGER OP +C + CHARACTER*(MAXICH) CODE + INTEGER F + INTEGER IOS, VAL, SYS$GETDVI, SYS$ASSIGN, SYS$QIOW, SYS$DASSGN + INTEGER DVIBLK(4)/ '40004'X, 0, 0, 0/ + INTEGER*2 IOSB(4) + LOGICAL FIRST/.TRUE./ + EXTERNAL ALG_ABANDN_AST + INTEGER*2 CHAN + LOGICAL ABFLAG +C + COMMON /ALG_ABANDN/ ABFLAG, CHAN + SAVE /ALG_ABANDN/ +C +C --- Branch according to the value of OP. +C + IF( OP .EQ. ABTEST ) THEN + ABANDN = ABFLAG + ELSE IF( OP .EQ. ABSET ) THEN + ABANDN = .FALSE. + IF( FIRST ) THEN +C +C --- Check that we're using a terminal. +C + DVIBLK(2) = %LOC( VAL ) + IOS = SYS$GETDVI( ,, 'TT', DVIBLK, ,,, ) + IF( .NOT. IOS ) CALL EXIT( IOS ) + IF( VAL .EQ. '42'X ) THEN +C +C --- If we're using a terminal, assign a channel to the device and set +C --- the trap; failure from any of the system services is taken as a +C --- fatal error. We will only return a failure code to the user if +C --- IOSB(1) indicates an error. +C + IOS = SYS$ASSIGN( 'TT', CHAN,, ) + IF( .NOT. IOS ) CALL EXIT( IOS ) + IOS = SYS$QIOW(, %VAL(CHAN), %VAL(IO$_SETMODE.OR.IO$M_CTR + &LCAST), + & IOSB, ,, ALG_ABANDN_AST, ,,,, ) + IF( .NOT. IOS ) CALL EXIT( IOS ) + IF( IOSB(1) ) THEN + FIRST = .FALSE. + ELSE +C +C --- We didn't succeed in setting the interrupt trap, heaven knows why! +C --- Set the function to return an error code, then close the channel +C --- we +C --- have so carefully opened. +C + ABANDN = .TRUE. + IOS = SYS$DASSGN( %VAL(CHAN) ) + IF( .NOT. IOS ) CALL EXIT( IOS ) + END IF + END IF + END IF + ABFLAG = .FALSE. + ELSE + STOP 'ABANDN: Illegal argument value.' + END IF +C + RETURN + 100 FORMAT(I11) + END +C --- ------------------------------------------------------------------ + SUBROUTINE ALG_ABANDN_AST +C --- ------------------------------------------------------------------ +C +C --- This routine is the condition handler which is used in the +C --- implementation of ABANDN for VAX/VMS. It is called by the system +C --- when the user types ^C at his terminal; its main purpose is to set +C --- ABFLAG in common /ALG_ABANDN/, to be tested by ABANDN(ABTEST). +C --- However, because VMS ^C condition handlers are one-shot affairs, +C --- we must also re-impose the trap. This is done by invoking the +C --- simple routine ALG_ABANDN_RESET_TRAP. +C + INTEGER*2 CHAN + LOGICAL ABFLAG +C + COMMON /ALG_ABANDN/ ABFLAG, CHAN + SAVE /ALG_ABANDN/ +C +C --- Set ABFLAG. +C + ABFLAG = .TRUE. +C +C --- And reset the trap. +C + CALL ALG_ABANDN_RESET_TRAP +C + RETURN + END +C --- ------------------------------------------------------------------ + SUBROUTINE ALG_ABANDN_RESET_TRAP +C --- ------------------------------------------------------------------ +C +C --- This routine resets the ^C trap for ALG_ABANDN_AST, because the +C --- Fortran compiler will not allow ALG_ABANDN_AST to be used in the +C --- $QIOW call inside its own code. +C + INCLUDE '($IODEF)' + INTEGER*2 IOSB(4) + INTEGER IOS, SYS$QIOW + EXTERNAL ALG_ABANDN_AST +C + INTEGER*2 CHAN + LOGICAL ABFLAG +C + COMMON /ALG_ABANDN/ ABFLAG, CHAN + SAVE /ALG_ABANDN/ +C + IOS = SYS$QIOW(, %VAL(CHAN), %VAL(IO$_SETMODE.OR.IO$M_CTRLCAST), + & IOSB, ,, ALG_ABANDN_AST, ,,,, ) + IF( .NOT. IOS ) CALL EXIT( IOS ) +C + RETURN + END +C --- ------------------------------------------------------------------ + B L O C K D A T A A L G I N I +C --- ------------------------------------------------------------------ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C +C --- The following definitions are used to allow expressions to be +C --- typed for the initial values of variables. +C + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI + INTEGER ORDRED, RNDOM, STRAIT +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) + PARAMETER( ORDRED=1, RNDOM=2, STRAIT=0 ) + INTEGER MOUT1, MSTAT + PARAMETER (MOUT1=MAXOUT-1, MSTAT=MAXSTV+1) +C +C --- Include all the common variables and blocks. +C + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL + INTEGER*2 CHAN + LOGICAL ABFLAG + CHARACTER*1 BLANK, VMARK, HMARK, TICK + CHARACTER*(MAXOUT) LPBUF + INTEGER LPHT, LPWID + LOGICAL FF + REAL ASPECT + LOGICAL USEM, EXACT, KNOWEM(0:MAXSTV) + REAL MINS(0:MAXSTV), MAXS(0:MAXSTV), MEANS(0:MAXSTV), + & SDS(0:MAXSTV) + INTEGER MMAX + INTEGER METHOD +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ + COMMON /ALG_ABANDN/ ABFLAG, CHAN + SAVE /ALG_ABANDN/ + COMMON /LPC/ LPBUF, BLANK, VMARK, HMARK, TICK + COMMON /LPN/ ASPECT, LPHT, LPWID, FF + SAVE /LPC/, /LPN/ + COMMON /STAT/ MINS, MAXS, MEANS, SDS, USEM, KNOWEM, EXACT + SAVE /STAT/ + COMMON/ALGTEX/ MMAX + SAVE /ALGTEX/ + COMMON /V80/ METHOD +C +C --- / A L G / +C + DATA LOGX/.FALSE./, LOGY/.FALSE./, LOGZ/.FALSE./, LOGR/.FALSE./ + DATA XMIN/0.0/, XMAX/0.0/, YMIN/0.0/, YMAX/0.0/, ZMIN/0.0/, + & ZMAX/0.0/, RMIN/0.0/, RMAX/0.0/, TMIN/0.0/, TMAX/0.0/ + DATA XFIX/.FALSE./, YFIX/.FALSE./, ZFIX/.FALSE./ + DATA RFIX/.FALSE./, TFIX/.FALSE./ + DATA VRBOSE/.FALSE./, NEG/.FALSE./ + DATA MIDORG/.TRUE./, FTNRML/.FALSE./ + DATA GLUN/6/, PLUN/6/, ELUN/6/, POLHIS/GRFGRF/ + DATA TOL/1.0E-8/ + DATA FTFWD/0.0/, FTREV/0.0/ +C +C --- / A B A N D N / +C + DATA ABFLAG/.FALSE./ +C +C --- / A L G T E X / +C + DATA MMAX/256/ +C +C --- / L P C / +C + DATA BLANK/' '/, VMARK/'|'/, HMARK/'-'/, TICK/'+'/ +C +C --- / L P N / +C + DATA FF/.TRUE./ + DATA LPHT/62/, LPWID/MOUT1/ + DATA ASPECT/ 0.604 / +C +C --- / S T A T / +C + DATA USEM/NOUSEM/, KNOWEM/MSTAT*.FALSE./, EXACT/.FALSE./ + DATA MEANS/MSTAT*0.0/, SDS/MSTAT*0.0/ + DATA MINS/MSTAT*0.0/, MAXS/MSTAT*0.0/ +C +C --- / V 8 0 / +C + DATA METHOD/STRAIT/ +C + END +$EOD +$WRITE SYS$OUTPUT "creating HALFTONE.MF" +$CREATE HALFTONE.MF +$DECK +% halftone font with 65 levels of gray, characters "0" (white) to "p" (black) + +pair p[]; % the pixels in order (first p0 becomes black, then p1, etc) +p0=(1,1); +p8=(2,0); +p16=(1,0); +p24=(0,0); +p32=(3,-1); +p40=(2,-1); +p48=(1,-1); +p56=(2,-2); +transform r; r=identity rotatedaround ((1.5,1.5),90); + +for i=0 step 8 until 56: + p[i+2]=p[i] transformed r; + p[i+6]=p[i+2] transformed r; + p[i+5]=p[i+6] transformed r; + p[i+1]=p[i] shifted (4,4); + p[i+3]=p[i+2] shifted (4,4); + p[i+7]=p[i+6] shifted (4,4); + p[i+4]=p[i+5] shifted (4,4); + endfor + +for i=32 step 1 until 63: + p[i] := (xpart p[i] mod 8, ypart p[i] mod 8); +endfor + +mode_setup; +designsize:=64/pt; % that's 64 pixels + +def makebox(text t)= enddef; % shut off boxes + +picture prevchar; + +prevchar=nullpicture; +for i=0 upto 64: + beginchar(i+ASCII"0",designsize/8,designsize/8,0); + currentpicture:=prevchar; + if i>0: fill unitsquare shifted p[i-1]; fi + prevchar:=currentpicture; + endchar; + endfor + +font_quad=designsize/8; +end +$EOD diff --git a/fonts/halftone/texpic.for b/fonts/halftone/texpic.for new file mode 100644 index 0000000000..2fa5f8b246 --- /dev/null +++ b/fonts/halftone/texpic.for @@ -0,0 +1,1347 @@ +C --- ----------------------------------------------------------------- +C --- T e X P I C +C --- ----------------------------------------------------------------- +C +C --- These routines are used to generate an input file to TeX which, +C --- when processed, gives a halftone representation of the grey-level +C --- image. TEXPIC is the main picture-plotting routine: it requires a +C --- M x N pixel array ARRAY. The TeX commands are written to the file +C --- FN. These routines are taken from a general-purpose library of +C --- image processing software developed by the author, which explains +C --- why most of the variables in the COMMON blocks are not used. The +C --- Fortran is also machine-generated, which may account for some odd +C --- line breaks in the code. (No line, even in comments, has more +C --- than 72 characters in it.) +C +C --- The image representation used here conforms to the one adopted by +C --- the Numerical Algorithms Group (NAG) for their ``Image Processing +C --- Algorithm Library'' IPAL, although the coding does not (it does +C --- not allow a sub-region to be plotted). +C +C --- There are two versions of TEXPIC in this file: the first is VAX- +C --- specific, while the second should be fairly portable. Note that +C --- both routines declare the BLOCK DATA module ALGINI as EXTERNAL; +C --- this usually forces the linker to build it into executable files. +C +C --- TEXPIC's support routines are: +C +C --- TEXMAX set the maximum pixel width across the page +C --- ZRANGE fix the contrast for subsequent TEXPIC calls +C --- ZAUTO subsequent pictures have their contrast determined +C --- from the data +C --- ZSAME subsequent pictures are plotted with the same +C --- contrast as the previous one +C --- DOPOS subsequent pix have low pixel values plotted black +C --- DONEG subsequent pix have low pixel values plotted white +C --- MINMAX determines the range of the data +C --- ALGERR outputs error messages +C --- ABANDN VAX-specific ^C trap routine +C --- ALGINI block data module +C +C --- Details of the invocations are given in the comments associated +C --- with each routine. There is also a separate document which gives +C --- user-level documentation and examples. This is available as part +C --- of the ``VAX/VMS TeX User's Guide'', written by the author, or as +C --- a separate document. +C +C --- As supplied, TEXPIC uses a three-point contextual bilinear method +C --- to interpolate between pixels. The results it produces should be +C --- marginally better than using standard four-point interpolation; +C --- however, the author can detect no difference. If you'd prefer to +C --- use four-point interpolation, the line to change is marked in the +C --- TEXPIC source code. +C +C --- Since you get TEXPIC free of charge, there is no formal guarantee +C --- given by Essex University OR the author that the software works +C --- or that the documentation agrees with the code. Nevertheless, the +C --- author would be pleased to hear of any problems. +C +C --- TEXPIC and associated routines were written by: +C +C --- Dr. Adrian F. Clark (``Alien'') +C --- of Department of Electronic Systems Engineering +C --- University of Essex +C --- Wivenhoe Park +C --- Colchester +C --- Essex C04 3SQ +C --- United Kingdom +C --- Tel: Colchester (0206) 872432 (direct) +C --- JANET: user ALIEN @UK.AC.ESSEX.ESE +C +C --- If you write, please mark the envelope with ``TeX''. +C +C --- Acknowledgements in any published work that uses TEXPIC would be +C --- appreciated. +C +C --- ENJOY! +C +C --- ----------------------------------------------------------------- + SUBROUTINE TEXPIC( ARRAY, M, N, FN ) +C --- ----------------------------------------------------------------- +C +C --- TEXPIC version 0.1 was written by Alien in Fortran-77. +C +C --- This routine writes out the M x N image ARRAY into the file FN +C --- in a form which is suitable for insertion into a TeX document. +C --- If FN has no filetype (``extension''), .TEX is used. +C +C --- By default, the range of the data is determined and used to +C --- maximise the contrast of the output image. This can be +C --- overridden by pre-setting the range of data values with a call +C --- to ZRANGE. ZAUTO restores the default behaviour. Similarly, +C --- TEXPIC will produce negated images on output if DONEG has +C --- previously been invoked. DOPOS sets it to produce positive +C --- pictures again. +C +C --- USAGE: CALL TEXPIC( ARRAY, M, N, FN ) +C +C --- PARAMETERS +C --- ARRAY REAL image to be output to the file +C --- M INTEGER first dimension of ARRAY +C --- N INTEGER second dimension of ARRAY +C --- FN CHARACTER*(*) name of file to which ARRAY will +C --- be written +C +C --- RESTRICTIONS +C --- If N is greater than MMAX, the image will be sub-sampled in both +C --- directions to make the result MMAX x MMAX. The interpolation +C --- technique used is due to P.R. Smith (Ultramicroscopy vol 6, pp +C --- 201--204, 1981). +C +C --- COMMONS +C --- /ALG/, /ALGTEX/ +C +C --- SUBPROGRAMS INVOKED +C --- MINMAX, LIB$GET_LUN, LIB$FREE_LUN +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER LEVELS, MINIDX, CMAX + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) + PARAMETER( LEVELS=65, MINIDX=48, CMAX=132 ) +C + CHARACTER*(*) FN + INTEGER M, N + REAL ARRAY(M,N) +C + CHARACTER*(CMAX) C + CHARACTER*6 RUTNAM + INTEGER NMAX, I, J, IC, IV, LUN, IOS, ILO, JLO, IHI, JHI + INTEGER LIB$GET_LUN, LIB$FREE_LUN + LOGICAL POS + REAL RANGE, INC + REAL X, Y, DX, DY, DX1, DY1, VAL +C + INTEGER*2 CHAN + LOGICAL ABFLAG + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL + INTEGER MMAX +C + COMMON /ALG_ABANDN/ ABFLAG, CHAN + SAVE /ALG_ABANDN/ + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ + COMMON/ALGTEX/ MMAX + SAVE /ALGTEX/ + EXTERNAL ALGINI + DATA RUTNAM/'TEXPIC'/ +C +C --- Find the range of the data if we're in auto mode; otherwise, +C --- use the specified ranges. +C + IF( .NOT. ZFIX ) THEN + CALL MINMAX( ARRAY, M, N, ZMIN, ZMAX ) + IF( ZMIN .EQ. ZMAX ) ZMAX = ZMIN + 1 + END IF +C +C --- We can't print more than MMAX columns across the TeX output. +C --- If the user passes an array bigger than this, we'll interpolate +C --- it down to MMAX. +C + IF( M .GT. MMAX ) THEN + INC = FLOAT(M) / FLOAT(MMAX) + NMAX = NINT( FLOAT(N) / INC ) + ELSE + INC = 0 + END IF +C +C --- Get a free channel number and open the output file. +C + IOS = LIB$GET_LUN( LUN ) + IF( .NOT. IOS ) CALL EXIT( IOS ) +C + OPEN( UNIT=LUN, FILE=FN, STATUS='NEW', RECL=CMAX+1, IOSTAT=IOS, + & DEFAULTFILE='.TEX', CARRIAGECONTROL='LIST' ) + IF( IOS .EQ. 0 ) THEN +C +C --- Calculate the scaling factor. +C + POS = .NOT. NEG + RANGE = FLOAT(LEVELS-1) / (ZMAX-ZMIN) +C +C --- Output the introduction. +C + WRITE( LUN, 100 ) +C +C --- Output the image without interpolation if INC is zero. +C + IF( ABS(INC) .LT. TOL ) THEN + DO 2 J = 1, N + IF( ABFLAG ) GO TO 5 + IC = 1 + C(1:1) = ',' + DO 1 I = 1, M + VAL = ARRAY(I,J) + IF( VAL .LT. ZMIN ) VAL = ZMIN + IF( VAL .GT. ZMAX ) VAL = ZMAX + IV = NINT((VAL-ZMIN) * RANGE) + IF( POS ) IV = (LEVELS-1) - IV + IC = IC + 1 + C(IC:IC) = CHAR( IV + MINIDX ) + IF( IC .GE. CMAX-1 ) THEN + WRITE( LUN, 200 ) C(1:IC) + IC = 1 + C(1:1) = ' ' + END IF + 1 CONTINUE + IF( IC .GT. 0 ) WRITE(LUN, 300) C(1:IC) + 2 CONTINUE + ELSE +C +C --- Interpolate the output. +C + Y = 1 + DO 4 J = 1, NMAX + IF( ABFLAG ) GO TO 5 + DY = Y - INT(Y) + DY1 = 1 - DY + JLO = MOD( INT(Y-1), N ) + 1 + JHI = MOD( JLO, N ) + 1 + X = 1 + IC = 1 + C(1:1) = ',' + DO 3 I = 1, MMAX + DX = X - INT(X) + DX1 = 1 - DX + ILO = MOD( INT(X)-1, M ) + 1 + IHI = MOD( ILO, M ) + 1 +C +C --- Smith's three-point contextual bilinear interpolation. +C + IF( ABS(ARRAY(ILO,JLO)-ARRAY(IHI,JHI)) .GT. + & ABS(ARRAY(IHI,JLO)-ARRAY(ILO,JHI)) ) THEN + VAL = (DX-DY)*ARRAY(IHI,JLO) + DX1*ARRAY(ILO,JLO) + + & DY*ARRAY(IHI,JHI) + ELSE + VAL = (DX1-DY)*ARRAY(ILO,JLO) + DX*ARRAY(IHI,JLO) + + & DY*ARRAY(ILO,JHI) + END IF + X = X + INC + IF( VAL .LT. ZMIN ) VAL = ZMIN + IF( VAL .GT. ZMAX ) VAL = ZMAX + IV = NINT((VAL-ZMIN) * RANGE) + IF( POS ) IV = (LEVELS-1) - IV + IC = IC + 1 + C(IC:IC) = CHAR( IV + MINIDX ) + IF( IC .GE. CMAX-1 ) THEN + WRITE( LUN, 200 ) C(1:IC) + IC = 1 + C(1:1) = ' ' + END IF + 3 CONTINUE + IF( IC .GT. 0 ) WRITE(LUN, 300) C(1:IC) +C + Y = Y + INC + 4 CONTINUE + END IF +C +C --- Close off the file. +C + 5 CONTINUE + WRITE( LUN, 400 ) + CLOSE( UNIT=LUN ) + ELSE + CALL ALGERR( RUTNAM, 'Cannot open specified output file:', + & FN ) + END IF +C +C --- Release the channel. +C + IOS = LIB$FREE_LUN( LUN ) + IF( .NOT. IOS ) CALL EXIT( IOS ) +C + RETURN + 100 FORMAT(' \hbox{\vbox{\halftone\offinterlineskip ', + & '% machine-generated by TEXPIC.'/ + & ' \def\BHT{\hbox\bgroup\ignorespaces}'/ + & ' \catcode`\^=12 \catcode`\_=12 \catcode`\.=\active', + & ' \let.=\egroup'/ ' \catcode`\,=\active \let,=\BHT', + & ' \catcode`\/=0 \catcode`\\=12') + 200 FORMAT(1X,A,'%') + 300 FORMAT(1X,A,'.') + 400 FORMAT(' }}%') + END +C --- ----------------------------------------------------------------- + SUBROUTINE TEXPIC( ARRAY, M, N, FN ) +C --- ----------------------------------------------------------------- +C +C --- TEXPIC version 0.1 was written by Alien in Fortran-77. +C +C --- This routine writes out the M x N image ARRAY into the file FN +C --- in a form which is suitable for insertion into a TeX document. +C +C --- By default, the range of the data is determined and used to +C --- maximise the contrast of the output image. This can be +C --- overridden by pre-setting the range of data values with a call +C --- to ZRANGE. ZAUTO restores the default behaviour. Similarly, +C --- TEXPIC will produce negated images on output if DONEG has +C --- previously been invoked. DOPOS sets it to produce positive +C --- pictures again. +C +C --- USAGE: CALL TEXPIC( ARRAY, M, N, FN ) +C +C --- PARAMETERS +C --- ARRAY REAL image to be output to the file +C --- M INTEGER first dimension of ARRAY +C --- N INTEGER second dimension of ARRAY +C --- FN CHARACTER*(*) name of file to which ARRAY will +C --- be written +C +C --- RESTRICTIONS +C --- If N is greater than MMAX, the image will be sub-sampled in both +C --- directions to make the result MMAX x MMAX. The interpolation +C --- technique used is due to P.R. Smith (Ultramicroscopy vol 6, pp +C --- 201--204, 1981). +C +C --- COMMONS +C --- /ALG/, /ALGTEX/ +C +C --- SUBPROGRAMS INVOKED +C --- MINMAX +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT CHARACTER*1 (A-Z) +C + INTEGER LEVELS, MINIDX, CMAX + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) + PARAMETER( LEVELS=65, MINIDX=48, CMAX=132 ) +C + CHARACTER*(*) FN + INTEGER M, N + REAL ARRAY(M,N) +C + CHARACTER*(CMAX) C + CHARACTER*6 RUTNAM + INTEGER NMAX, I, J, IC, IV, LUN, IOS, ILO, JLO, IHI, JHI + LOGICAL POS + REAL RANGE, INC + REAL X, Y, DX, DY, DX1, DY1, VAL +C + LOGICAL ABANDN + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL + INTEGER MMAX +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ + COMMON/ALGTEX/ MMAX + SAVE /ALGTEX/ + EXTERNAL ALGINI + DATA RUTNAM/'TEXPIC'/ +C +C --- Find the range of the data if we're in auto mode; otherwise, +C --- use the specified ranges. +C + IF( .NOT. ZFIX ) THEN + CALL MINMAX( ARRAY, M, N, ZMIN, ZMAX ) + IF( ZMIN .EQ. ZMAX ) ZMAX = ZMIN + 1 + END IF +C +C --- We can't print more than MMAX columns across the TeX output. +C --- If the user passes an array bigger than this, we'll interpolate +C --- it down to MMAX. +C + IF( M .GT. MMAX ) THEN + INC = FLOAT(M) / FLOAT(MMAX) + NMAX = NINT( FLOAT(N) / INC ) + ELSE + INC = 0 + END IF +C +C --- We always open the output file on channel 7 (fix me!). +C + LUN = 7 + OPEN( UNIT=LUN, FILE=FN, STATUS='NEW', RECL=CMAX+1, IOSTAT=IOS ) + IF( IOS .EQ. 0 ) THEN +C +C --- Calculate the scaling factor. +C + POS = .NOT. NEG + RANGE = FLOAT(LEVELS-1) / (ZMAX-ZMIN) +C +C --- Output the introduction. +C + WRITE( LUN, 100 ) +C +C --- Output the image without interpolation if INC is zero. +C + IF( ABS(INC) .LT. TOL ) THEN + DO 2 J = 1, N + IF( ABANDN(0) ) GO TO 5 + IC = 1 + C(1:1) = ',' + DO 1 I = 1, M + VAL = ARRAY(I,J) + IF( VAL .LT. ZMIN ) VAL = ZMIN + IF( VAL .GT. ZMAX ) VAL = ZMAX + IV = NINT((VAL-ZMIN) * RANGE) + IF( POS ) IV = (LEVELS-1) - IV + IC = IC + 1 + C(IC:IC) = CHAR( IV + MINIDX ) + IF( IC .GE. CMAX-1 ) THEN + WRITE( LUN, 200 ) C(1:IC) + IC = 1 + C(1:1) = ' ' + END IF + 1 CONTINUE + IF( IC .GT. 0 ) WRITE(LUN, 300) C(1:IC) + 2 CONTINUE + ELSE +C +C --- Interpolate the output. +C + Y = 1 + DO 4 J = 1, NMAX + IF( ABANDN(0) ) GO TO 5 + DY = Y - INT(Y) + DY1 = 1 - DY + JLO = MOD( INT(Y-1), N ) + 1 + JHI = MOD( JLO, N ) + 1 + X = 1 + IC = 1 + C(1:1) = ',' + DO 3 I = 1, MMAX + DX = X - INT(X) + DX1 = 1 - DX + ILO = MOD( INT(X)-1, M ) + 1 + IHI = MOD( ILO, M ) + 1 +C +C --- Smith's three-point contextual bilinear interpolation. +C + IF( ABS(ARRAY(ILO,JLO)-ARRAY(IHI,JHI)) .GT. + & ABS(ARRAY(IHI,JLO)-ARRAY(ILO,JHI)) ) THEN + VAL = (DX-DY)*ARRAY(IHI,JLO) + DX1*ARRAY(ILO,JLO) + + & DY*ARRAY(IHI,JHI) + ELSE + VAL = (DX1-DY)*ARRAY(ILO,JLO) + DX*ARRAY(IHI,JLO) + + & DY*ARRAY(ILO,JHI) + END IF + X = X + INC + IF( VAL .LT. ZMIN ) VAL = ZMIN + IF( VAL .GT. ZMAX ) VAL = ZMAX + IV = NINT((VAL-ZMIN) * RANGE) + IF( POS ) IV = (LEVELS-1) - IV + IC = IC + 1 + C(IC:IC) = CHAR( IV + MINIDX ) + IF( IC .GE. CMAX-1 ) THEN + WRITE( LUN, 200 ) C(1:IC) + IC = 1 + C(1:1) = ' ' + END IF + 3 CONTINUE + IF( IC .GT. 0 ) WRITE(LUN, 300) C(1:IC) +C + Y = Y + INC + 4 CONTINUE + END IF +C +C --- Close off the file. +C + 5 CONTINUE + WRITE( LUN, 400 ) + CLOSE( UNIT=LUN ) + ELSE + CALL ALGERR( RUTNAM, 'Cannot open specified output file:', + & FN ) + END IF +C +C + RETURN + 100 FORMAT(' \hbox{\vbox{\halftone\offinterlineskip ', + & '% machine-generated by TEXPIC.'/ + & ' \def\BHT{\hbox\bgroup\ignorespaces}'/ + & ' \catcode`\^=12 \catcode`\_=12 \catcode`\.=\active', + & ' \let.=\egroup'/ ' \catcode`\,=\active \let,=\BHT', + & ' \catcode`\/=0 \catcode`\\=12') + 200 FORMAT(1X,A,'%') + 300 FORMAT(1X,A,'.') + 400 FORMAT(' }}%') + END +C --- ----------------------------------------------------------------- + SUBROUTINE TEXMAX( MV ) +C --- ----------------------------------------------------------------- +C +C --- TEXMAX version 0.0 was written by Alien in Fortran-77. +C +C --- This routine sets the maximum number of pixels across a picture +C --- which TEXPIC will output to a file. Pictures which have their +C --- first dimension greater than MMAX are interpolated down to MMAX +C --- pixels. +C +C --- USAGE: CALL TEXMAX( MMAX ) +C +C --- PARAMETERS +C --- MMAX INTEGER maximum number of pixels to be plotted by +C --- TEXPIC +C +C --- RESTRICTIONS +C --- none +C +C --- COMMONS +C --- /ALGTEX/ +C +C --- SUBPROGRAMS INVOKED +C --- none +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) +C + INTEGER MV +C + CHARACTER*(MAXICH) BUF +C + INTEGER MMAX +C + COMMON/ALGTEX/ MMAX + SAVE /ALGTEX/ +C + IF( MV .GE. 2 ) THEN + MMAX = MV + ELSE + WRITE( BUF, 100 ) MV + CALL ALGERR( 'TEXMAX', + & 'Too few pixels selected across page:'//BUF, + & 'You must have two or more pixels across the page' ) + END IF +C + RETURN + 100 FORMAT(I11) + END +C --- ------------------------------------------------------------------ + SUBROUTINE ZRANGE( ZVMIN, ZVMAX ) +C --- ------------------------------------------------------------------ +C +C --- ZRANGE version 0.0 was written by Alien in Fortran-77. +C +C --- This routine fixes the range of the Z-axis for subsequent +C --- graphical plots. +C +C --- USAGE: CALL ZRANGE( ZMIN, ZMAX ) +C +C --- PARAMETERS +C --- ZMIN REAL minimum value to appear on the Z-axis +C --- ZMAX REAL maximum value to appear on the Z-axis +C +C --- RESTRICTIONS +C --- ZMIN must be smaller than ZMAX. +C --- Note that the range of values actually produced on graphs may be +C --- slightly greater than those specified. +C +C --- SUBPROGRAMS INVOKED +C --- ALGERR +C +C --- COMMONS +C --- ZFIX, ZMIN, ZMAX in /ALG/ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) +C + REAL ZVMIN, ZVMAX +C + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ +C + IF( ZVMIN .LT. ZVMAX ) THEN + ZMIN = ZVMIN + ZMAX = ZVMAX + ZFIX = .TRUE. + ELSE + CALL ALGERR('ZRANGE','Zmin was not smaller than Zmax.',' ') + END IF +C + RETURN + END +C --- ------------------------------------------------------------------ + SUBROUTINE ZAUTO +C --- ------------------------------------------------------------------ +C +C --- ZAUTO version 0.0 was written by Alien in Fortran-77. +C +C --- This routine causes the Z-axis of subsequent graphical plots +C --- to be scaled according to the data being plotted. +C +C --- USAGE: CALL ZAUTO +C +C --- PARAMETERS +C --- none +C +C --- RESTRICTIONS +C --- none +C +C --- SUBPROGRAMS INVOKED +C --- none +C +C --- COMMONS +C --- ZFIX in /ALG/ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ +C + ZFIX = .FALSE. +C + RETURN + END +C --- ------------------------------------------------------------------ + SUBROUTINE ZSAME +C --- ------------------------------------------------------------------ +C --- ZSAME version 0.0 +C +C --- Written by Alien in Fortran-77. +C +C --- This routine causes the range of the Z-axis on subsequent +C --- graphical plots to be the same as those used on the previous +C --- invocation. +C +C --- USAGE: CALL ZSAME +C +C --- PARAMETERS +C --- none +C +C --- RESTRICTIONS +C --- none +C +C --- SUBPROGRAMS INVOKED +C --- |ALGERR| +C +C --- COMMONS +C --- |ZFIX|, |ZMIN|, |ZMAX| in |/ALG/| +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) +C + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ +C + IF( ZMIN .LT. ZMAX ) THEN + ZFIX = .TRUE. + ELSE + CALL ALGERR('ZSAME','Zmin was not smaller than Zmax.', + & 'Call ignored.' ) + END IF +C + RETURN + END +C --- ----------------------------------------------------------------- + SUBROUTINE DONEG +C --- ----------------------------------------------------------------- +C +C --- DONEG version 0.0 was written by Alien in Fortran-77. +C +C --- This routine causes subsequent grey-level pictures to be drawn +C --- with negative contrast. +C +C --- USAGE: CALL DONEG +C +C --- PARAMETERS +C --- none +C +C --- RESTRICTIONS +C --- none +C +C --- SUBPROGRAMS INVOKED +C --- none +C +C --- COMMONS +C --- NEG in /ALG/ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ +C +C + NEG = .TRUE. +C + RETURN + END +C --- ----------------------------------------------------------------- + SUBROUTINE DOPOS +C --- ----------------------------------------------------------------- +C +C --- DOPOS version 0.0 was written by Alien in Fortran-77. +C +C --- This routine causes subsequent grey-level pictures to be drawn +C --- with negative contrast. +C +C --- USAGE: CALL DOPOS +C +C --- PARAMETERS +C --- none +C +C --- RESTRICTIONS +C --- none +C +C --- SUBPROGRAMS INVOKED +C --- none +C +C --- COMMONS +C --- NEG in /ALG/ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ +C +C + NEG = .FALSE. +C + RETURN + END +C --- ------------------------------------------------------------------ + SUBROUTINE MINMAX( ARRAY, M, N, LOWEST, HIEST ) +C --- ------------------------------------------------------------------ +C +C --- MINMAX version 0.0 was written by Alien in Fortran-77. +C +C --- This routine determines the smallest and largest values of an +C --- array. If an interrupt is detected during the estimation of the +C --- limits of the data, the currently-detected limits are returned. +C +C --- USAGE: CALL MINMAX( ARRAY, M, N, MIN, MAX ) +C +C --- PARAMETERS +C --- ARRAY REAL array of which the limits are to be +C --- determined +C --- M INTEGER first dimension of ARRAY +C --- N INTEGER second dimension of ARRAY +C --- MIN REAL minimum value found in ARRAY (returned) +C --- MAX REAL maximum value found in ARRAY (returned) +C +C --- RESTRICTIONS +C --- If interrupts are to be detected, interrupt detection must have +C --- been enabled by the calling program---see ABANDN for more +C --- details. +C +C --- SUBPROGRAMS INVOKED +C --- ABANDN +C +C --- COMMONS +C --- none +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) +C + INTEGER M, N + REAL ARRAY(M*N), LOWEST, HIEST +C + INTEGER I, J, JM + REAL VAL, LO, HI + INTEGER*2 CHAN + LOGICAL ABFLAG +C + COMMON /ALG_ABANDN/ ABFLAG, CHAN + SAVE /ALG_ABANDN/ + EXTERNAL ALGINI +C +C --- We have declared ARRAY as a 1-D array, but will still access +C --- it via two DO-loops. This is so that ABANDN is only invoked once +C --- per "row" of ARRAY. +C + LO = ARRAY(1) + HI = LO +C + DO 1 J = 1, N + JM = (J-1) * M + IF( ABFLAG ) GO TO 2 + DO 1 I = 1, M + VAL = ARRAY(I+JM) + IF( VAL .LT. LO ) LO = VAL + IF( VAL .GT. HI ) HI = VAL + 1 CONTINUE +C + 2 CONTINUE + LOWEST = LO + HIEST = HI +C + RETURN + END +C --- ------------------------------------------------------------------ + SUBROUTINE ALGERR( NAME, MESS, EXTRA ) +C --- ------------------------------------------------------------------ +C +C --- ALGERR version 0.0 was written by Alien in Fortran-77. +C +C --- This routine reports errors generated by other routines. NAME is +C --- the name of the invoking routine while MESS and EXTRA form the +C --- message to be reported to the user. MESS is the text of the +C --- message. EXTRA, if non-blank, contains extra information about +C --- the error; leading and trailing blanks are removed from EXTRA +C --- before it is output. The current version of this routine simply +C --- outputs the message text on the error output channel -- future +C --- versions will be more sophisticated. +C +C --- USAGE: CALL ALGERR( NAME, MESS, EXTRA ) +C +C --- PARAMETERS +C --- NAME CHARACTER*(*) name of the invoking routine +C --- MESS CHARACTER*(*) message to be output +C --- EXTRA CHARACTER*(*) additional text for the message +C +C --- RESTRICTIONS +C --- The total length of the message must be less than the output +C --- line length (usually 132 characters) -- this means that the +C --- lengths of NAME and MESS, when added together, must come to less +C --- then 110 characters. +C +C --- SUBPROGRAMS INVOKED +C --- none +C +C --- COMMONS +C --- /ALG/ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + CHARACTER*1 BLANK + PARAMETER( BLANK=' ' ) +C + CHARACTER*(*) NAME, MESS, EXTRA +C + INTEGER NEXTRA, FC, LC, NMESS, LM +C + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ + EXTERNAL ALGINI +C + NMESS = LEN( MESS ) + DO 1 LM = NMESS, 1, -1 + IF( MESS(LM:LM) .NE. BLANK ) GO TO 2 + 1 CONTINUE + LM = 1 + 2 CONTINUE +C + IF( EXTRA .EQ. BLANK ) THEN + WRITE( ELUN, 100 ) NAME, MESS(1:LM) + ELSE + NEXTRA = LEN( EXTRA ) + DO 3 FC = 1, NEXTRA + IF( EXTRA(FC:FC) .NE. BLANK ) GO TO 4 + 3 CONTINUE + 4 CONTINUE + DO 5 LC = NEXTRA, FC, -1 + IF( EXTRA(LC:LC) .NE. BLANK ) GO TO 6 + 5 CONTINUE + 6 CONTINUE + WRITE( ELUN, 100 ) NAME, MESS(1:LM) + WRITE( ELUN, 101 ) EXTRA(FC:LC) + END IF +C + RETURN + 100 FORMAT(1X,A,': error -- ',A) + 101 FORMAT(10X,A) + END +C --- ------------------------------------------------------------------ + LOGICAL FUNCTION ABANDN( OP ) +C --- ------------------------------------------------------------------ +C +C --- ABANDN version 0.1 was written by Alien in Fortran-77. +C +C --- This LOGICAL function is used to detect whether the user has +C --- tried to interrupt execution. +C +C --- The method of specifying an interrupt varies from system to +C --- system, but is typically by typing a control character +C --- (control-C on the VAX). ABANDN is used with OP = 0 to TEST +C --- whether the user has signalled an interrupt -- the value TRUE is +C --- returned as the value of the function if this is the case. +C --- ABANDN is used with OP = 1 to SET or CLEAR the interrupt trap; +C --- this must be done by the calling program. Note that ABANDN +C --- returns the value TRUE if an error occurred while setting or +C --- clearing the interrupt trap. +C +C --- USAGE: <logical variable> = ABANDN( OP ) +C +C --- PARAMETERS +C --- OP INTEGER operation 0 ==> test, 1 ==> set +C +C --- RESTRICTIONS +C --- Interrupts will not be trapped before the first invocation of +C --- ABANDN(1). +C --- After the user has signalled an interrupt, subsequent +C --- invocations of ABANDN(0) will return TRUE until ABANDN(1) is +C --- used to clear it. +C --- If the user generates interrupts very quickly (for example, by +C --- letting the ^C auto-repeat), they may be delivered so quickly +C --- that ABANDN does not manage to reset its trap in time; in this +C --- case, it will actually interrupt program execution. +C --- This version of ABANDN requires VAX/VMS 3.0 or later. +C +C --- SUBPROGRAMS INVOKED +C --- ALG_ABANDN_AST (condition handler) +C +C --- COMMONS +C --- /ALG_ABANDN/ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C + INCLUDE '($IODEF)' +C + INTEGER ABSET, ABTEST + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) + PARAMETER( ABSET=1, ABTEST=0 ) +C + INTEGER OP +C + CHARACTER*(MAXICH) CODE + INTEGER F + INTEGER IOS, VAL, SYS$GETDVI, SYS$ASSIGN, SYS$QIOW, SYS$DASSGN + INTEGER DVIBLK(4)/ '40004'X, 0, 0, 0/ + INTEGER*2 IOSB(4) + LOGICAL FIRST/.TRUE./ + EXTERNAL ALG_ABANDN_AST + INTEGER*2 CHAN + LOGICAL ABFLAG +C + COMMON /ALG_ABANDN/ ABFLAG, CHAN + SAVE /ALG_ABANDN/ +C +C --- Branch according to the value of OP. +C + IF( OP .EQ. ABTEST ) THEN + ABANDN = ABFLAG + ELSE IF( OP .EQ. ABSET ) THEN + ABANDN = .FALSE. + IF( FIRST ) THEN +C +C --- Check that we're using a terminal. +C + DVIBLK(2) = %LOC( VAL ) + IOS = SYS$GETDVI( ,, 'TT', DVIBLK, ,,, ) + IF( .NOT. IOS ) CALL EXIT( IOS ) + IF( VAL .EQ. '42'X ) THEN +C +C --- If we're using a terminal, assign a channel to the device and set +C --- the trap; failure from any of the system services is taken as a +C --- fatal error. We will only return a failure code to the user if +C --- IOSB(1) indicates an error. +C + IOS = SYS$ASSIGN( 'TT', CHAN,, ) + IF( .NOT. IOS ) CALL EXIT( IOS ) + IOS = SYS$QIOW(, %VAL(CHAN), %VAL(IO$_SETMODE.OR.IO$M_CTR + &LCAST), + & IOSB, ,, ALG_ABANDN_AST, ,,,, ) + IF( .NOT. IOS ) CALL EXIT( IOS ) + IF( IOSB(1) ) THEN + FIRST = .FALSE. + ELSE +C +C --- We didn't succeed in setting the interrupt trap, heaven knows why! +C --- Set the function to return an error code, then close the channel +C --- we +C --- have so carefully opened. +C + ABANDN = .TRUE. + IOS = SYS$DASSGN( %VAL(CHAN) ) + IF( .NOT. IOS ) CALL EXIT( IOS ) + END IF + END IF + END IF + ABFLAG = .FALSE. + ELSE + STOP 'ABANDN: Illegal argument value.' + END IF +C + RETURN + 100 FORMAT(I11) + END +C --- ------------------------------------------------------------------ + SUBROUTINE ALG_ABANDN_AST +C --- ------------------------------------------------------------------ +C +C --- This routine is the condition handler which is used in the +C --- implementation of ABANDN for VAX/VMS. It is called by the system +C --- when the user types ^C at his terminal; its main purpose is to set +C --- ABFLAG in common /ALG_ABANDN/, to be tested by ABANDN(ABTEST). +C --- However, because VMS ^C condition handlers are one-shot affairs, +C --- we must also re-impose the trap. This is done by invoking the +C --- simple routine ALG_ABANDN_RESET_TRAP. +C + INTEGER*2 CHAN + LOGICAL ABFLAG +C + COMMON /ALG_ABANDN/ ABFLAG, CHAN + SAVE /ALG_ABANDN/ +C +C --- Set ABFLAG. +C + ABFLAG = .TRUE. +C +C --- And reset the trap. +C + CALL ALG_ABANDN_RESET_TRAP +C + RETURN + END +C --- ------------------------------------------------------------------ + SUBROUTINE ALG_ABANDN_RESET_TRAP +C --- ------------------------------------------------------------------ +C +C --- This routine resets the ^C trap for ALG_ABANDN_AST, because the +C --- Fortran compiler will not allow ALG_ABANDN_AST to be used in the +C --- $QIOW call inside its own code. +C + INCLUDE '($IODEF)' + INTEGER*2 IOSB(4) + INTEGER IOS, SYS$QIOW + EXTERNAL ALG_ABANDN_AST +C + INTEGER*2 CHAN + LOGICAL ABFLAG +C + COMMON /ALG_ABANDN/ ABFLAG, CHAN + SAVE /ALG_ABANDN/ +C + IOS = SYS$QIOW(, %VAL(CHAN), %VAL(IO$_SETMODE.OR.IO$M_CTRLCAST), + & IOSB, ,, ALG_ABANDN_AST, ,,,, ) + IF( .NOT. IOS ) CALL EXIT( IOS ) +C + RETURN + END +C --- ------------------------------------------------------------------ + B L O C K D A T A A L G I N I +C --- ------------------------------------------------------------------ +C +C --- Copyright (C) Alien 1987 -- All rights reserved. +C + IMPLICIT NONE +C +C --- The following definitions are used to allow expressions to be +C --- typed for the initial values of variables. +C + INTEGER GRFGRF, GRFHIS, GRFPOL + INTEGER MAXICH, MAXRCH + INTEGER MINLUN, MAXLUN + INTEGER MAXOUT, MAXARR, MAXAFT, MAXCH + INTEGER MAXSTV, NOUSEM + REAL PI + INTEGER ORDRED, RNDOM, STRAIT +C + PARAMETER( GRFGRF=0, GRFHIS=1, GRFPOL=2 ) + PARAMETER( MAXICH=11, MAXRCH=11 ) + PARAMETER( MINLUN=1, MAXLUN=99 ) + PARAMETER( MAXOUT=133, MAXARR=512, MAXAFT=(9*MAXARR)/4+1 ) + PARAMETER( MAXCH=16 ) + PARAMETER( MAXSTV=3, NOUSEM=-1 ) + PARAMETER( PI=3.1415926535897932384626433 ) + PARAMETER( ORDRED=1, RNDOM=2, STRAIT=0 ) + INTEGER MOUT1, MSTAT + PARAMETER (MOUT1=MAXOUT-1, MSTAT=MAXSTV+1) +C +C --- Include all the common variables and blocks. +C + INTEGER GLUN, PLUN, ELUN, POLHIS + LOGICAL XFIX, YFIX, ZFIX, RFIX, TFIX, LOGX, LOGY, LOGZ, LOGR + LOGICAL VRBOSE, NEG, MIDORG, FTNRML + REAL XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, TMIN, TMAX, + & FTFWD, FTREV + REAL TOL + INTEGER*2 CHAN + LOGICAL ABFLAG + CHARACTER*1 BLANK, VMARK, HMARK, TICK + CHARACTER*(MAXOUT) LPBUF + INTEGER LPHT, LPWID + LOGICAL FF + REAL ASPECT + LOGICAL USEM, EXACT, KNOWEM(0:MAXSTV) + REAL MINS(0:MAXSTV), MAXS(0:MAXSTV), MEANS(0:MAXSTV), + & SDS(0:MAXSTV) + INTEGER MMAX + INTEGER METHOD +C + COMMON /ALG/ XMIN, XMAX, YMIN, YMAX, ZMIN, ZMAX, RMIN, RMAX, + & TMIN, TMAX, TOL, FTFWD, FTREV, XFIX, YFIX, ZFIX, RFIX, TFIX, + & LOGX, LOGY, LOGZ, LOGR, NEG, GLUN, PLUN, ELUN, POLHIS, MIDORG, + & FTNRML, VRBOSE + SAVE /ALG/ + COMMON /ALG_ABANDN/ ABFLAG, CHAN + SAVE /ALG_ABANDN/ + COMMON /LPC/ LPBUF, BLANK, VMARK, HMARK, TICK + COMMON /LPN/ ASPECT, LPHT, LPWID, FF + SAVE /LPC/, /LPN/ + COMMON /STAT/ MINS, MAXS, MEANS, SDS, USEM, KNOWEM, EXACT + SAVE /STAT/ + COMMON/ALGTEX/ MMAX + SAVE /ALGTEX/ + COMMON /V80/ METHOD +C +C --- / A L G / +C + DATA LOGX/.FALSE./, LOGY/.FALSE./, LOGZ/.FALSE./, LOGR/.FALSE./ + DATA XMIN/0.0/, XMAX/0.0/, YMIN/0.0/, YMAX/0.0/, ZMIN/0.0/, + & ZMAX/0.0/, RMIN/0.0/, RMAX/0.0/, TMIN/0.0/, TMAX/0.0/ + DATA XFIX/.FALSE./, YFIX/.FALSE./, ZFIX/.FALSE./ + DATA RFIX/.FALSE./, TFIX/.FALSE./ + DATA VRBOSE/.FALSE./, NEG/.FALSE./ + DATA MIDORG/.TRUE./, FTNRML/.FALSE./ + DATA GLUN/6/, PLUN/6/, ELUN/6/, POLHIS/GRFGRF/ + DATA TOL/1.0E-8/ + DATA FTFWD/0.0/, FTREV/0.0/ +C +C --- / A B A N D N / +C + DATA ABFLAG/.FALSE./ +C +C --- / A L G T E X / +C + DATA MMAX/256/ +C +C --- / L P C / +C + DATA BLANK/' '/, VMARK/'|'/, HMARK/'-'/, TICK/'+'/ +C +C --- / L P N / +C + DATA FF/.TRUE./ + DATA LPHT/62/, LPWID/MOUT1/ + DATA ASPECT/ 0.604 / +C +C --- / S T A T / +C + DATA USEM/NOUSEM/, KNOWEM/MSTAT*.FALSE./, EXACT/.FALSE./ + DATA MEANS/MSTAT*0.0/, SDS/MSTAT*0.0/ + DATA MINS/MSTAT*0.0/, MAXS/MSTAT*0.0/ +C +C --- / V 8 0 / +C + DATA METHOD/STRAIT/ +C + END diff --git a/fonts/halftone/texpic.obj b/fonts/halftone/texpic.obj Binary files differnew file mode 100644 index 0000000000..ec1c7acb87 --- /dev/null +++ b/fonts/halftone/texpic.obj |