Category : Various Text files
Archive   : OOARTPS2.ZIP
Filename : ARTICLE2.PS

 
Output of file : ARTICLE2.PS contained in archive : OOARTPS2.ZIP
%!
/GlSave save def /TeXDict 200 dict def TeXDict begin /Resolution 300 def /Inch
{Resolution mul}def /Mtrx 6 array def /@letter{72 Resolution div dup neg scale
310 -3005 translate Mtrx currentmatrix pop}def /@copies{/#copies exch def}def
/@restore /restore load def /restore{vmstatus pop dup @VMused lt{pop @VMused}
if exch pop exch @restore /@VMused exch def}def /@pri{( )print
( )cvs print}def /@FontMatrix[1 0 0 -1 0
0]def /@FontBBox[0 0 1 1]def /dmystr(ZZf@@)def /newname{dmystr cvn}def /df{
/fontname exch def dmystr 2 fontname cvx(@@@)cvs putinterval newname 7 dict
def newname load begin /FontType 3 def /FontMatrix @FontMatrix def /FontBBox
@FontBBox def /BitMaps 256 array def /BuildChar{CharBuilder}def /Encoding 256
array def 0 1 255{Encoding exch /.undef put}for end fontname{/foo setfont}2
array copy cvx def fontname load 0 dmystr 5 string copy cvn cvx put}def /dfend
{newname newname load definefont setfont}def /ch-image{ch-data 0 get}def
/ch-width{ch-data 1 get}def /ch-height{ch-data 2 get}def /ch-xoff{ch-data 3
get}def /ch-yoff{ch-data 4 get}def /ch-tfmw{ch-data 5 get}def /CharBuilder{
save 3 1 roll exch /BitMaps get exch get /ch-data exch def ch-data null ne{
ch-tfmw 0 ch-xoff neg ch-yoff neg ch-width ch-xoff sub ch-height ch-yoff sub
setcachedevice ch-width ch-height true[1 0 0 1 ch-xoff ch-yoff]{ch-image}
imagemask}if restore}def /dc{/ch-code exch def dup 0 get length 2 lt{pop[<00>
1 1 0 0 8.00]}if /ch-data exch def newname load /BitMaps get ch-code ch-data
put newname load /Encoding get ch-code dup( )cvs cvn put}def /bop{erasepage
initgraphics Mtrx setmatrix /SaveImage save def 0 0 moveto}def /eop{showpage
SaveImage restore}def /@start{@letter vmstatus pop /@VMused exch def pop}def
/@end{(VM used: )print @VMused @pri(. Unused: )print vmstatus @VMused sub @pri
pop pop(\n)print flush end GlSave restore}def /p{show}def /v{/dy exch neg def
/dx exch def /x1 currentpoint /y1 exch def def newpath x1 y1 moveto dx 0
rlineto 0 dy rlineto dx neg 0 rlineto closepath fill x1 y1 moveto}def /li{
lineto}def /rl{rlineto}def /rc{rcurveto}def /np{/SaveX currentpoint /SaveY
exch def def newpath}def /st{stroke SaveX SaveY moveto}def /fi{fill SaveX
SaveY moveto}def /dot{/myY exch def /myX exch def /deltax currentlinewidth 2
div def np myX deltax sub myY moveto myX deltax add myY lineto st}def /ellipse
{/endangle exch def /startangle exch def /yrad exch def /xrad exch def /myY
exch def /myX exch def /savematrix matrix currentmatrix def myX myY translate
xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}def /a{
moveto}def /delta 0 def /b{exch p dup /delta exch def 0 rmoveto}def /c{p delta
4 sub dup /delta exch def 0 rmoveto}def /d{p delta 3 sub dup /delta exch def 0
rmoveto}def /e{p delta 2 sub dup /delta exch def 0 rmoveto}def /f{p delta 1
sub dup /delta exch def 0 rmoveto}def /g{p delta 0 rmoveto}def /h{p delta 1
add dup /delta exch def 0 rmoveto}def /i{p delta 2 add dup /delta exch def 0
rmoveto}def /j{p delta 3 add dup /delta exch def 0 rmoveto}def /k{p delta 4
add dup /delta exch def 0 rmoveto}def /l{p -4 0 rmoveto}def /m{p -3 0 rmoveto}
def /n{p -2 0 rmoveto}def /o{p -1 0 rmoveto}def /q{p 1 0 rmoveto}def /r{p 2 0
rmoveto}def /s{p 3 0 rmoveto}def /t{p 4 0 rmoveto}def /w{0 rmoveto}def /x{0
exch rmoveto}def /y{3 -1 roll p moveto}def /bos{/section save def}def /eos{
section restore}def /@MacSetUp{userdict /md known{userdict /md get type
/dicttype eq{md begin /letter{}def /note{}def /legal{}def /od{txpose 1 0 mtx
defaultmatrix dtransform exch atan/pa exch def newpath clippath mark{
transform{itransform moveto}}{transform{itransform lineto}}{6 -2 roll
transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll
itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall
newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2
F/|______Courier fnt invertflag{PaintBlack}if}def /txpose{pxs pys scale ppr
aload pop por{noflips{pop exch neg exch translate pop 1 -1 scale}if xflip
yflip and{pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1
get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not
and{pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg
0 translate}if yflip xflip not and{ppr 1 get neg ppr 0 get neg translate}if}{
noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{translate
pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0
get neg sub neg translate}if xflip yflip not and{translate pop pop 90 rotate
ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{translate
pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate}if}ifelse
scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy
translate .96 dup scale neg exch neg exch translate}if}def /cp{pop pop
showpage pm restore}def end}if}if}def /psf$TeXscale{65536 div}def
/DocumentInitState[matrix currentmatrix currentlinewidth currentlinecap
currentlinejoin currentdash currentgray currentmiterlimit]cvx def /startTexFig
{/psf$SavedState save def userdict maxlength dict begin currentpoint transform
DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap
setlinewidth setmatrix itransform moveto /psf$ury exch psf$TeXscale def
/psf$urx exch psf$TeXscale def /psf$lly exch psf$TeXscale def /psf$llx exch
psf$TeXscale def /psf$y exch psf$TeXscale def /psf$x exch psf$TeXscale def
currentpoint /psf$cy exch def /psf$cx exch def /psf$sx psf$x psf$urx psf$llx
sub div def /psf$sy psf$y psf$ury psf$lly sub div def psf$sx psf$sy scale
psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub translate
/DefFigCTM matrix currentmatrix def /initmatrix{DefFigCTM setmatrix}def
/defaultmatrix{DefFigCTM exch copy}def /initgraphics{DocumentInitState
setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix
DefFigCTM setmatrix}def /showpage{initgraphics}def /erasepage{initgraphics}
def /copypage{}def}def /clipFig{currentpoint 6 2 roll newpath 4 copy 4 2 roll
moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath
moveto}def /doclip{psf$llx psf$lly psf$urx psf$ury clipFig}def /endTexFig{end
psf$SavedState restore}def end statusdict /waittimeout 300 put
TeXDict begin @start bos /fa df[<000000FFC00000000007FFF8000000003FFFFE000000
00FFC01F80000003FE0003C0000007F80000E000000FE000003000001F8000001800007F000000
0C0000FE000000060000FE000000070001FC000000030003F8000000018007F8000000018007F0
00000000C00FF000000000C01FE000000000C01FE000000000603FE000000000603FC000000000
603FC000000000607FC000000000607FC000000000607F8000000000007F800000000000FF8000
00000000FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000
FF800000000000FF800000000000FF800000000000FF800000000000FF8000000000007F800000
0000007F8000000000607FC000000000607FC000000000603FC000000000603FC000000000E03F
E000000000E01FE000000000E01FE000000000E00FF000000001E007F000000001E007F8000000
03E003F800000003E001FC00000007E000FC00000007E000FE0000000FE0007F0000001FE0001F
8000003FE0000FE0000077E00007F80001E3E00003FE000783E00000FFC01F01E000003FFFFE00
E0000007FFF80060000000FFC00060>51 61 -5 1 62]67 dc[ 000000FFFFFFFFFFE0000000FFC0003FF00000007F800007FC0000007F800001FE0000007F8000
007F0000007F8000003FC000007F8000001FC000007F8000000FE000007F80000007F000007F80
000003F800007F80000003F800007F80000001FC00007F80000001FE00007F80000001FE00007F
80000000FF00007F80000000FF00007F80000000FF00007F800000007F80007F800000007F8000
7F800000007F80007F800000007F80007F800000007FC0007F800000007FC0007F800000007FC0
007F800000007FC0007F800000007FC0007F800000007FC0007F800000007FC0007F800000007F
C0007F800000007FC0007F800000007FC0007F800000007FC0007F800000007FC0007F80000000
7F80007F800000007F80007F800000007F80007F800000007F80007F80000000FF00007F800000
00FF00007F80000000FF00007F80000000FE00007F80000001FE00007F80000001FC00007F8000
0003FC00007F80000003F800007F80000007F800007F80000007F000007F8000000FE000007F80
00001FC000007F8000003F8000007F8000007F0000007F800001FE0000007F800007FC000000FF
C0003FF00000FFFFFFFFFFC00000FFFFFFFFFF000000FFFFFFFFF8000000>58 59 -2 0 66]68
dc[<000000000001FC00FFFFFFC0000FFF00FFFFFFC0003F8380FFFFFFC0007F00C000FFC00000
FF0060007F800001FE0060007F800003FE0030007F800003FE0030007F800007FC0030007F8000
07FC0030007F800007FC0000007F800007FC0000007F800007FC0000007F800007FC0000007F80
0007FC0000007F800007FC0000007F800007F80000007F800007F80000007F800007F80000007F
800007F80000007F800007F80000007F800007F80000007F800007F00000007F80000FF0000000
7F80000FE00000007F80001FC00000007F80001F800000007F80003F000000007F8000FE000000
007F8003F8000000007FFFFFE0000000007FFFFFF8000000007F8001FE000000007F80003F8000
00007F80000FE00000007F800007F00000007F800003F80000007F800001FC0000007F800001FE
0000007F800001FF0000007F800000FF0000007F800000FF8000007F800000FF8000007F800000
FF8000007F800000FF8000007F800000FF8000007F800000FF8000007F800000FF8000007F8000
00FF0000007F800001FF0000007F800001FE0000007F800001FE0000007F800003FC0000007F80
0007F80000007F80000FF00000007F80003FE0000000FFC001FF800000FFFFFFFFFE000000FFFF
FFFFF8000000FFFFFFFF80000000>60 60 -2 1 63]82 dc[<007F800F8003FFE01FE00FE0703F
F01F80187E383F000C7C187F0006F80C7E0006F80CFE0003F80CFE0003F80CFE0001F80CFE0001
F80CFE0001F80C7E0001F80C7F0001F8007F0001F8003F8001F8001F8001F8000FC001F80007F0
01F80003F801F80000FF01F800003FF9F8000007FFF80000001FF800000001F800000001F80000
0001F800000001F8000F0001F8001F8001F8003FC001F0003FC003F0003FC003F0003FC003E000
1F8007C0001E000F80000E001F000007C07E000001FFF80000003FC00000>38 40 -4 1 43]97
dc[<00000FE0000001803FFC000001C0F03F000001E1C00FC00001E30003E00001F60001F00001
FC0000F80001FC0000FC0001F800007C0001F800007E0001F800003F0001F800003F0001F80000
3F8001F800001F8001F800001F8001F800001FC001F800001FC001F800001FC001F800001FC001
F800001FC001F800001FC001F800001FC001F800001FC001F800001FC001F800001F8001F80000
1F8001F800003F8001F800003F0001F800003F0001F800003E0001F800007E0001FC00007C0001
FC0000F80001FE0001F00001FB0003E00001F9C007C00001F8F01F000001F83FFE000001F80FF0
000001F80000000001F80000000001F80000000001F80000000001F80000000001F80000000001
F80000000001F80000000001F80000000001F80000000001F80000000001F80000000001F80000
000001F80000000001F80000000001F80000000001F80000000007F800000000FFF800000000FF
F800000000FFF80000000001F800000000>42 61 -2 1 48]98 dc[<0001FE0000000FFF800000
3F01E000007800700001F000180003E0000C0007C00006000FC00003000F800003001F80000180
3F000001803F000001807F000000007F000000007E000000007E00000000FE00000000FE000000
00FE00000000FE00000000FE00000000FFFFFFFF80FFFFFFFF80FE00001F80FE00001F807E0000
1F807E00001F807F00001F003F00001F003F00001F001F00003F001F80003E000F80003E0007C0
007C0003E000780001E000F00000F801E000007E07C000001FFF00000003FC0000>33 40 -2 1
38]101 dc[<0007FF8000003FFFF00001FC00FE0003E0001F000F800007C01F000003E03E0000
01F07C000000F87C000000F8F80000007CF80000007CF80000007CF80000007CF80000007C7800
00007C7C000000F83C000000F83E000001F81F000007F00780003FE003FFFFFFC000FFFFFF8001
FFFFFF0003FFFFFC0007FFFFC00007C00000000F000000000F000000000E000000000E00000000
0E0000000006000000000607F00000073FFE0000037C1F000001F007800001E003C00003C001E0
0007C001F0000FC001F8000F8000F8001F8000FC001F8000FC001F8000FC001F8000FC001F8000
FC001F8000FC001F8000FC000F8000F8000FC001F80007C001F00003C001E00801E003E01C00F0
07F03E007C1F1E3E003FFE0FFC0007F001F8>39 57 -2 19 43]103 dc[ 03FC0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F800
01F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F800
01F80001F80001F80001F80007F8007FF8007FF8007FF80001F800000000000000000000000000
00000000000000000000000000000000000000000001C00003F00007F8000FF8000FF8000FF800
07F80003F00001C000>19 58 -1 0 23]105 dc[ 01F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F800
01F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F800
01F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F800
01F80001F80001F80001F80001F80001F80001F80001F80001F80001F80007F800FFF800FFF800
FFF80001F800>20 60 -1 0 23]108 dc[ 07F80001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F000
01F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F800
03F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F000
01F80003F00001F80003F00001F80003F00001F80003F00001FC0003F00001FC0003F00001FC00
03F00001FE0003F00001FB0003E00001FB0007E00007F98007C000FFF8E00F8000FFF8781F0000
FFF81FFE000001F807F80000>43 38 -2 0 48]110 dc[ 00FC000700FC000380F80003C0F00001C0F00001E0E00001E0E00001E0E00001E0E00001E0C000
03E0C00007E040000FC000001FC00000FF80001FFF8001FFFF0003FFFE000FFFFC001FFFF0003F
FFC0007FFC00007F800000FE000000F8000180F8000180F0000180F0000180F000018070000380
7000038038000780380007801E001F800F807F8003FFE380007F8180>27 40 -3 1 34]115 dc[
<0001FE03F000000FFF83FFE0001F81E3FFE0003E0073FFE0007C001BFC0000FC001BF00000F8
000FF00000F8000FF00001F80007F00001F80007F00001F80007F00001F80003F00001F80003F0
0001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F8
0003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F0
0001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F8
0003F00001F80003F00007F8000FF000FFF801FFF000FFF801FFF000FFF801FFF00001F80003F0
00>43 39 -2 1 48]117 dc dfend /fb df[ F0>20 7 -1 -12 27]45 dc[<7FFFFFF07FFFFFF07FFFFFF0003FE000003FE000003FE000003F
E000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE00000
3FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000
003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE0
00003FE000003FE000E03FE000FFBFE000FFFFE0001FFFE000007FE000000FE0000003E0000001
E000>28 46 -6 0 41]49 dc[ FFFE07FFFFFE03FFFFFE01C0001E00F0000E0078000E003C000F001E0007000F00070007800700
03E0000001F0000001F8000000FE0000007F0000003F8000001FC000001FE000000FF000000FF8
000007FC000007FC000003FE000003FE000003FF3F0003FF7F8003FF7F8003FFFFC003FFFFC003
FFFFC003FEFFC007FE7F8007FE7F0007FC3C000FF81E001FF00FC07FE007FFFF8001FFFE00003F
F000>32 46 -4 0 41]50 dc[<001FFC000001FFFF800007FFFFE0000FE01FF8001F0007FC003F
0003FE007F8003FF00FFC003FF00FFE001FF80FFE001FF80FFE001FFC0FFE001FFC07FC001FFC0
7FC001FFC03F8001FFC00E0001FFC0000001FF80000001FF80000003FF00000003FE00000003FC
00000007F80000001FF000001FFF8000001FFC0000001FFE000000007F800000001FC00000001F
E00000000FF00000000FF800018007FC0007E007FC000FF007FC001FF807FE001FF807FE001FF8
07FE001FF807FE001FF007FE000FF007FC000FE007FC00070007F80003C00FF00001F01FE00000
7FFF8000000FFC0000>34 46 -3 0 41]51 dc[<000FFFFFF0000FFFFFF0000FFFFFF000000FF8
0000000FF80000000FF80000000FF80000000FF80000000FF80000000FF80000000FF80000000F
F800FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0F00007F800780007F8003C0007F8001E0007F8000F00
07F8000F0007F800078007F80003C007F80001E007F80000F007F800007007F800007807F80000
3C07F800001E07F800000F07F800000707F800000787F8000003C7F8000001E7F8000000F7F800
000077F80000007FF80000003FF80000001FF80000000FF800000007F800000007F800000003F8
00000001F800000000F8000000007800>36 46 -2 0 41]52 dc[<003FE00001FFFE0007FFFF80
0FC07FC01E001FE03C000FF07C0007F87F0007FCFF8003FEFF8003FEFFC003FEFFC003FFFF8003
FF7F8003FF3F0003FF1E0003FF000003FF000003FF000003FE000003FE000003FC0E0007FC0F00
07F80F800FF00FF01FE00FFFFFC00F7FFF000F0FF8000F0000000F0000000F0000000F0000000F
0000000F0000000F0000000FFF00000FFFF0000FFFFC000FFFFE000FFFFF800FFFFFC00FFFFFE0
0FFFFFF00FFFFFF80FC003F80C000038>32 46 -4 0 41]53 dc[<0007FC0000003FFF800000FF
FFE00001FC0FF00003F803F80007F001FC000FE001FE001FE000FF001FE000FF803FC000FF803F
C000FF803FC000FFC07FC000FFC07FC000FFC07FC000FFC07FC000FFC0FFC000FFC0FFC000FFC0
FFC000FFC0FFE000FF80FFE000FF80FFE000FF80FFF000FF00FFF001FE00FFF801FC00FFDC03F8
00FFCFBFF000FFC7FFE000FFC3FF80007FC00000007FC00000007FC00000003FC00000003FE000
7C003FE000FE001FE001FF000FE001FF000FF001FF0007F001FF0003F800FF0001F8007E0000FC
001E00007F001C00001FC078000007FFF00000007F8000>34 46 -3 0 41]54 dc[<000E000000
003F800000003F800000007FC00000007FC00000007FC00000007FC00000007FC00000007FC000
00007FC00000007FC00000003FC00000003FC00000003FC00000003FC00000003FC00000001FC0
0000001FC00000001FC00000000FE00000000FE000000007E000000007E000000003E000000003
F000000001F000000001F000000000F800000000F8000000007C0000E0003E0000E0001E0000E0
000F0000F0000F8000700007C000700003E000780001F0007FFFFFF0007FFFFFF8007FFFFFFC00
7FFFFFFE007FFFFFFF003FFFFFFF803FFFFFFFC03FFFFFFFC03FFFFFFFC03E0000000038000000
00>34 48 -5 0 41]55 dc[<001FFC000000FFFF800003FFFFE0000FF803F8001FC0007C003F00
001E007F00001F007E00000F007E00000F80FC00000F80FC00000FC0FC00000FC0FC00001FC0FC
00001FC0FC00007FC07E0000FFC07E0003FFC03F000FFF803F003FFF801F807FFF000FE1FFFF00
03F7FFFE0001FFFFFC00007FFFF80000FFFFE00001FFFFC00003FFFF800007FFFFC0000FFFF7E0
000FFFE1F0000FFF81F8001FFE00FC001FF800FC001FE0007E001FC0007E001FC0007E001F8000
7E000F80007E000F80007E000F8000FC00078000FC0003C001F80001E003F00000F80FE000003F
FF80000007FC0000>34 46 -3 0 41]56 dc[<000003FF80000000003FFFF800000001FFFFFE00
000007FF003F8000001FF80003E000003FE00000F00000FF800000780001FF0000003C0003FE00
00001E0007FC0000000E0007FC00000007000FF800000007001FF800000007801FF00000000380
3FF000000003803FF000000003807FF000000003807FE000000000007FE000000000007FE00000
000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FF
E00000000000FFE00000000000FFE00000000000FFE000000000007FE000000000007FE0000000
00007FE000000007807FF000000007803FF000000007803FF000000007801FF00000000F801FF8
0000000F800FF80000001F8007FC0000001F8007FC0000003F8003FE0000003F8001FF0000007F
8000FF800000FF80003FE00003FF80001FF8000FBF800007FF007F1F800001FFFFFC0F8000003F
FFF00380000003FF800180>49 49 -5 0 60]67 dc[ FFFFE00000FFC0007FF00000FFC0000FFC0000FFC00003FE0000FFC00001FF0000FFC00000FF80
00FFC000007FC000FFC000003FE000FFC000003FE000FFC000001FF000FFC000001FF800FFC000
001FF800FFC000000FF800FFC000000FFC00FFC000000FFC00FFC000000FFC00FFC000000FFC00
FFC000000FFE00FFC000000FFE00FFC000000FFE00FFC000000FFE00FFC000000FFE00FFC00000
0FFE00FFC000000FFE00FFC000000FFE00FFC000000FFE00FFC000000FFE00FFC000000FFE00FF
C000000FFC00FFC000000FFC00FFC000000FFC00FFC000000FFC00FFC000000FF800FFC000001F
F800FFC000001FF000FFC000001FF000FFC000003FE000FFC000003FE000FFC000007FC000FFC0
0000FF8000FFC00001FF0000FFC00007FE0000FFC0000FFC0000FFC000FFF000FFFFFFFFFFC000
FFFFFFFFFF0000FFFFFFFFF00000>55 49 -2 0 63]68 dc[ FFF0000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC00000
0000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FF
C007000000FFC007000000FFC007000000FFC007000000FFC007000000FFC00F000000FFC01F00
0000FFC03F000000FFFFFF000000FFFFFF000000FFFFFF000000FFC03F000000FFC01F000000FF
C00F000000FFC007000000FFC007000000FFC007000000FFC007001C00FFC007001C00FFC00000
1C00FFC000001C00FFC000003800FFC000003800FFC000003800FFC000007800FFC000007800FF
C00000F800FFC00000F800FFC00003F800FFC00007F800FFC0003FF0FFFFFFFFFFF0FFFFFFFFFF
F0FFFFFFFFFFF0>46 49 -2 0 52]70 dc[ FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC000
00FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC0
0000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FF
C00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000FFC00000
FFC00000FFC000FFFFFFC0FFFFFFC0FFFFFFC0>26 49 -2 0 31]73 dc[ FFFFC0FFFFFFFFFFC000FFC003FFC000FFC0007FC000FFC0001FE000FFC0000FE000FFC00007E0
00FFC00003E000FFC00003E000FFC00001E000FFC00001E000FFC00000E000FFC00000E000FFC0
0000F000FFC00000F000FFC000007000FFC000007000FFC000007000FFC000000000FFC0000000
00FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0
00000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0000000
00FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0
00000000FFC000000000FFC000000000FFC000000000FFC000000000FFC0000000FFFFFFF00000
FFFFFFF00000FFFFFFF00000>44 49 -2 0 50]76 dc[<00000FFE0000000000FFFFE000000007
FFFFFC0000001FFC07FF0000003FE000FF800000FFC0007FE00001FF80003FF00003FF00001FF8
0007FE00000FFC000FFC000007FE000FFC000007FE001FF8000003FF001FF8000003FF003FF000
0001FF803FF0000001FF807FF0000001FFC07FF0000001FFC07FE0000000FFC07FE0000000FFC0
FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE00000
00FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE07F
E0000000FFC07FE0000000FFC07FE0000000FFC03FF0000001FF803FF0000001FF803FF0000001
FF801FF0000001FF001FF8000003FF000FF8000003FE0007FC000007FC0007FC000007FC0003FE
00000FF80001FF00001FF00000FF80003FE000003FE000FF8000001FFC07FF00000007FFFFFC00
000000FFFFE0000000000FFE000000>51 49 -5 0 62]79 dc[ FFFFC0000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000
000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000
FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000
000000FFFFFFE00000FFFFFFFE0000FFFFFFFF8000FFC001FFE000FFC0003FF000FFC0001FF800
FFC0000FFC00FFC0000FFC00FFC00007FE00FFC00007FE00FFC00007FF00FFC00007FF00FFC000
07FF00FFC00007FF00FFC00007FF00FFC00007FF00FFC00007FF00FFC00007FE00FFC00007FE00
FFC0000FFC00FFC0000FFC00FFC0001FF800FFC0003FF000FFC001FFE0FFFFFFFFFF80FFFFFFFF
FE00FFFFFFFFE000>48 49 -2 0 56]80 dc[ 03FFFF8000FFC00007FF83C000FFC0000FFF01C000FFC0000FFE00E000FFC0001FFE00E000FFC0
001FFC00E000FFC0001FFC004000FFC0001FFC000000FFC0001FFC000000FFC0001FFC000000FF
C0001FF8000000FFC0001FF8000000FFC0001FF8000000FFC0001FF8000000FFC0001FF8000000
FFC0001FF0000000FFC0003FF0000000FFC0003FE0000000FFC0007FE0000000FFC000FFC00000
00FFC003FF00000000FFFFFFFE00000000FFFFFFFC00000000FFFFFFFF80000000FFC001FFE000
0000FFC0003FF0000000FFC0000FFC000000FFC00007FC000000FFC00007FE000000FFC00003FF
000000FFC00003FF000000FFC00003FF800000FFC00003FF800000FFC00003FF800000FFC00003
FF800000FFC00003FF800000FFC00003FF800000FFC00003FF000000FFC00003FF000000FFC000
07FE000000FFC00007FC000000FFC0000FFC000000FFC0003FF0000000FFC001FFE00000FFFFFF
FFFF800000FFFFFFFFFC000000FFFFFFFFC0000000>59 49 -2 0 62]82 dc[ FFE000F1FFFFF800FFFC01FC00FFC0007E00FF00003F00FC00001F80F800001F80F000000FC0F0
00000FC0E000000FC0E000000FE0E000000FE0E000000FE06000001FE00000001FE00000003FE0
0000003FE0000000FFE0000007FFC00000FFFFC0001FFFFF80007FFFFF8001FFFFFF0003FFFFFE
000FFFFFFC001FFFFFF8001FFFFFF0003FFFFFC0007FFFFE00007FFFE000007FFC000000FFE000
0000FF80000000FF00000380FF00000380FE00000380FE00000780FE000007807E000007807E00
000F803E00000F803F00001F801F00007F800F8001FF8007F00FFF8003FFFFC78000FFFF038000
1FF00180>35 49 -5 0 46]83 dc[<007FFFFFFF8000007FFFFFFF8000007FFFFFFF800000000F
FC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC000000
00000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC
00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000
000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00
000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC000000E000
0FFC0001C0E0000FFC0001C0E0000FFC0001C0E0000FFC0001C070000FFC00038070000FFC0003
8070000FFC00038070000FFC00038078000FFC00078078000FFC0007807C000FFC000F807E000F
FC001F807F000FFC003F803FE00FFC01FF003FFFFFFFFFFF003FFFFFFFFFFF003FFFFFFFFFFF00
>50 48 -3 0 57]84 dc[<00FF800FF807FFF03FF80FFFF87FF83FF03CFF007FC00EFE007F8003
FE00FF0003FE00FF0001FE00FF0001FE00FF0001FE00FF0001FE007F8001FE003F8001FE001FC0
01FE000FF001FE0007FE01FE0001FFF1FE00003FFFFE000001FFFE00000001FE00000001FE0001
0001FE0007C001FE000FE001FE001FF001FE001FF003FC001FF003F8001FF007F0000FE01FE000
07FFFFC00003FFFF0000007FF80000>37 32 -2 0 40]97 dc[<07001FE00007807FFE0007C1FF
FF0007E3E07FC007F7001FE007FE0007F007FC0007F807F80003FC07F80003FC07F80001FE07F8
0001FE07F80001FE07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07
F80001FF07F80001FF07F80001FE07F80001FE07F80001FE07F80003FC07F80003FC07F80003F8
07FE0007F007FF000FE007FFE03FC007F9FFFF8007F87FFE0007F80FF00007F800000007F80000
0007F800000007F800000007F800000007F800000007F800000007F800000007F800000007F800
000007F800000007F800000007F80000000FF8000000FFF8000000FFF8000000FFF800000001F8
000000>40 50 -2 0 46]98 dc[<0007FC00007FFF8000FFFFE003FF01F007F800780FF0001C1F
E0001C3FE0000E3FC0000E7FC000007FC000007F800000FF800000FF800000FF800000FF800000
FF800000FF800000FF800000FF8000007F8000007F8000407FC001F03FC003F83FC007FC1FE007
FC0FE007FC07F007FC03FC03F800FFFFF0007FFFE00007FF00>31 32 -3 0 37]99 dc[<000FF0
1FFF007FFE1FFF01FFFF9FFF03FC07DFF007F001FFE00FE0007FE01FC0003FE03FC0001FE03FC0
001FE07F80001FE07F80001FE07F80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF
80001FE0FF80001FE0FF80001FE0FF80001FE07F80001FE07F80001FE07F80001FE03FC0001FE0
3FC0001FE01FE0001FE00FE0003FE007F800FFE003FE03FFE001FFFFDFE0007FFF1FE0000FF81F
E00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE0000000
1FE00000001FE00000001FE00000001FE00000001FE00000001FE00000003FE0000003FFE00000
03FFE0000003FFE000000007E0>40 50 -3 0 46]100 dc[<0003FF0000003FFFE00000FFFFF8
0003FE00FC0007F8001E000FF0000F001FE00007801FC00003803FC00003803FC00000007F8000
00007F80000000FF80000000FF80000000FF80000000FFFFFFFF80FFFFFFFF80FFFFFFFF80FF80
003F80FF80003F807F80003F807F80003F007FC0003F003FC0003F003FC0007E001FE0007E000F
E000FC0007F801F80003FC07F00000FFFFE000003FFF80000007FC0000>33 32 -2 0 38]101
dc[<7FFFF0007FFFF0007FFFF00003FC000003FC000003FC000003FC000003FC000003FC000003
FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0000
03FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00
00FFFFF800FFFFF800FFFFF80003FC000003FC000003FC000003FC000003FC000003FC000003FC
000003FC01C003FC03E003FC07F001FC0FF801FE0FF800FE0FF8007F0FF8003FC7F0001FFFE000
07FFC00000FF00>29 50 -2 0 25]102 dc[<001FFF800000FFFFF00007FFFFFE000FF801FF00
1FC0003F803F00000FC07E000007E0FC000003F0FC000003F0FC000003F0FC000003F0FC000007
F07E00000FF03F00007FE01FFFFFFFE007FFFFFFC003FFFFFF8007FFFFFF000FFFFFFE000FFFFF
F8001FFFFFC0001F800000001F000000001E000000001E000000000E000000000E1FF0000006FF
FE000007FFFF000007F83FC0000FE00FE0000FE00FE0001FC007F0001FC007F0003FC007F8003F
C007F8003FC007F8003FC007F8003FC007F8001FC007F0001FC007F0600FE00FE0F00FE00FE1F8
07F83FF1F801FFFF7FF800FFFE3FF0001FF007E0>37 47 -2 15 41]103 dc[ FFC1FFFF80FFFFC1FFFF8007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000F
F00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007
F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000F
F00007F8000FF00007FC000FF00007FC000FF00007FE000FF00007FE000FF00007FB000FE00007
F9C01FE00007F8F03FC00007F87FFF800007F83FFF000007F807F8000007F80000000007F80000
000007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000007
F80000000007F80000000007F80000000007F80000000007F8000000000FF800000000FFF80000
0000FFF800000000FFF80000000001F800000000>41 50 -3 0 46]104 dc[ FF8007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007
F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8000FF800FF
F800FFF800FFF80001F80000000000000000000000000000000000000000000000000003C0000F
F0000FF0001FF8001FF8001FFC001FF8001FF8000FF0000FF00003C000>17 51 -3 0 23]105
dc[<03FC001FFF003FFFC07F0FF0FF87F8FF83F8FF83FCFF81FC7F01FE3E01FE1C01FE0001FE00
01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
01FE0001FE0001FE0003FE003FFE003FFE003FFE0000FE00000000000000000000000000000000
00000000000000000000E00003F80007FC0007FC000FFE000FFE000FFE0007FC0007FC0003F800
00E0>23 65 4 14 25]106 dc[ 07F0007FC007F000FF8007F000FF0007F001FF0007F003FE0007F007FC0007F00FF80007F01FF0
0007F81FE00007FE3FE00007FF7FC00007FFFF800007FBFF000007F9FE000007F87C000007F83E
000007F81F000007F807800007F803E00007F801F00007F800780007F8003E0007F8001F0007F8
001FC007F8007FFC07F8007FFC07F8007FFC07F800000007F800000007F800000007F800000007
F800000007F800000007F800000007F800000007F800000007F800000007F800000007F8000000
07F80000000FF8000000FFF8000000FFF8000000FFF800000001F8000000>40 50 -2 0 44]
107 dc[ 0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8
0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8
0007F80007F80007F80007F80007F80007F80007F8000FF800FFF800FFF800FFF80001F800>18
50 -3 0 23]108 dc[ 001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000F
F0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F800
0FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8
000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007FC000FF8001FE007
FC000FF8001FE007FE000FFC001FE007F6000FFC001FE007F3000FE6001FC00FF1C01FE3803FC0
FFF0F03FC1E07F80FFF07FFF80FFFF00FFF03FFF007FFE0003F007F8000FF000>64 32 -3 0 69
]109 dc[ F00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007
F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000F
F00007F8000FF00007F8000FF00007F8000FF00007FC000FF00007FC000FF00007FE000FF00007
F6000FF00007F3000FE0000FF1C01FE000FFF0F03FC000FFF07FFF8000FFF03FFF000003F007F8
0000>41 32 -3 0 46]110 dc[<0007FE0000003FFFC00001FFFFF80003FE07FC0007F801FE00
0FE0007F001FE0007F803FC0003FC03FC0003FC07F80001FE07F80001FE07F80001FE0FF80001F
F0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF80001FF07F8000
1FE07F80001FE07F80001FE03FC0003FC03FC0003FC01FC0003F800FE0007F0007F000FE0003FC
03FC0000FFFFF000003FFFC0000007FE0000>36 32 -2 0 41]111 dc[ FFE00007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80000
07F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007FC00
8007FC03E007FC07F007FE0FF807F60FF807F70FF80FF38FF8FFF3C7F0FFF1FFE0FFF07FC003F0
3F00>29 32 -2 0 34]114 dc[ 000780F00007C0E00007C0E00007C060000FC000001FC00000FFC0001FFF8001FFFF8007FFFF00
0FFFFE003FFFFC003FFFF0007FFFC000FFF80000FF000000FC000700F8000700F8000700F80007
0078000F003C001F003F007F001FFFFF0007FFEF0000FF8700>26 32 -3 0 33]115 dc[<000F
E0007FF000FFF801FE1C03FC0E03F80E07F80707F80707F80707F80707F80707F80707F80707F8
0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8
0007F80007F800FFFFFEFFFFFEFFFFFE1FF80007F80003F80001F80000F80000F8000078000078
00007800003800003800003800003800003800>24 46 -2 0 32]116 dc[<000FFC0FFF80007F
FF0FFF8000FFFF8FFF8001FE03CFF80003F8006FF00003F8003FF00007F8001FF00007F8001FF0
0007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8
000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF0
0007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF0000FF8
001FF000FFF801FFF000FFF801FFF000FFF801FFF00001F80003F000>41 32 -3 0 46]117 dc[
<0000E0000E00000001E0000F00000001F0001F00000003F0001F80000003F8003F80000007F8
003FC0000007FC007FC0000007FC007FC000000FFC007FE000000FFE00FEE000001FFE00FEF000
001FEF01FC7000001FE701FC7000003FC701FC3800003FC383F83800007FC383F83C00007F83C7
F01C00007F81C7F01C0000FF01C7F00E0000FF00EFE00E0001FF00EFE00F0001FE00FFC0070003
FE007FC0078003FC007FC0038003FC003F80038007F8003F8003C007F8007F0001C00FF8007F00
01E00FF0007E0001F0FFFF0FFFF01FFEFFFF0FFFF01FFEFFFF0FFFF01FFE>55 32 -2 0 60]
119 dc[<0FC00000003FF80000007FFC0000007A3E000000FF0F000000FF07800000FF03800000
FF01C000007E01E000003C00E000000000F0000000007000000000700000000038000000003800
0000007C000000007C00000000FE00000000FE00000001FF00000001FF00000003FF80000003FF
80000007FFC0000007F9C000000FF9E000000FF0E000000FF0E000001FE07000001FE07000003F
E03800003FC03800007FC03C00007F801C0000FF801E0000FF000E0001FF000F0001FE00070003
FE00078003FC00038007FC0003C007F80001C007F80003E0FFFF801FFEFFFF801FFEFFFF801FFE
>39 46 -2 14 44]121 dc dfend /fc df[17 6
-1 -11 23]45 dc[<1C003E007F00FF80FF80FF807F003E001C00>9 9 -5 0 19]46 dc[<7FFF
FE7FFFFE7FFFFE00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
0000FE0000FE0000FE0000FE0000FE00F8FE00FFFE00FFFE0007FE00007E00001E00000E00>23
39 -5 0 34]49 dc[ 01C0038001C001C001C000E000E0007000E0003C00E0001E0000000F0000000780000003E00000
03F0000001F8000000FC000000FE0000007F0000007F8000003FC000003FC000003FE03C003FE0
7E001FE0FF001FE0FF001FE0FF003FE0FF003FC0FE003FC07C007F803800FF001F03FE000FFFFC
0003FFF00000FF8000>27 39 -3 0 34]50 dc[<00FF800007FFF0001FFFFC003F01FE007C007F
007E007F80FF007FC0FF003FC0FF003FE0FF003FE07E003FE03C003FE000003FE000003FE00000
3FC000003FC000007F8000007F0000007E000001FC0000FFF00000FFC0000007F0000001F80000
01FC000000FE000000FF000000FF000F007F801F807F803F807F803F807F803F807F803F80FF00
1F00FF000F81FE0007FFFC0003FFF000007F8000>27 39 -3 0 34]51 dc[<007FFFF8007FFFF8
007FFFF80000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00FFFFFF
F8FFFFFFF8FFFFFFF8E0007E0070007E0038007E001C007E000E007E000E007E0007007E000380
7E0001C07E0000E07E0000E07E0000707E0000387E00001C7E00000E7E00000E7E0000077E0000
03FE000001FE000000FE000000FE0000007E0000003E0000001E0000000E00>29 39 -2 0 34]
52 dc[<00FF800003FFF0000FFFF8001F01FE003C007F0078003F8078003F80FC001FC0FE001F
C0FE001FE0FE001FE0FE001FE07C001FE018001FE000001FE000001FE000001FC000001FC00000
1F800C003F000E003E000F80FC000FFFF8000E7FC0000E0000000E0000000E0000000E0000000E
0000000E0000000FFE00000FFFC0000FFFE0000FFFF0000FFFF8000FFFFC000FFFFE000F803F00
0C000300>27 39 -3 0 34]53 dc[<003FC00000FFF00003FFFC0007E07E000FC03F001F803F80
1F801FC03F001FC03F001FE07F001FE07F001FE07F001FE07F001FE0FF001FE0FF001FE0FF001F
E0FF001FC0FF801FC0FF801F80FFC03F00FFC03E00FF707C00FF3FF800FF0FC000FF0000007F00
00007F0000007F0000003F8000003F801F001F803F801FC03F800FC03F8007E03F8003F01F8001
FC0F0000FFFE00003FFC000007F000>27 39 -3 0 34]54 dc[ FE001FFFFE01C00000FF0001C00000FF0001E00001FF0000E00001FE0000E00001FE0000700003
FC0000700003FC0000780007FC00003FFFFFF800003FFFFFF800001FFFFFF000001C000FF00000
1E001FF000000E001FE000000E003FE0000007003FC0000007003FC0000007807FC0000003807F
80000003C0FF80000001C0FF00000001C0FF00000000E1FE00000000E1FE00000000F3FE000000
0073FC0000000073FC000000003FF8000000003FF8000000003FF8000000001FF0000000001FF0
000000000FE0000000000FE0000000000FE00000000007C00000000007C00000000003800000>
47 41 -2 0 52]65 dc[ FC0003F80003FE0003F80001FF0003F80000FF0003F80000FF8003F80000FF8003F80000FF8003
F80000FF8003F80000FF8003F80000FF8003F80000FF0003F80000FF0003F80001FE0003F80001
FE0003F80003FC0003F80007F00003FFFFFFE00003FFFFFE000003F800FFC00003F8001FE00003
F8000FF00003F80007F80003F80003FC0003F80003FC0003F80003FE0003F80001FE0003F80001
FE0003F80001FE0003F80003FE0003F80003FC0003F80003FC0003F80007FC0003F8000FF80003
F8001FF000FFFFFFFFC000FFFFFFFF8000FFFFFFF80000>41 41 -3 0 49]66 dc[<00003FF800
000003FFFF0000000FFFFFC000003FF007E00000FF8000F80001FE00003C0003FC00001E0007F0
00000E000FF0000007001FE0000007001FE0000003803FC0000003803FC0000003807FC0000003
807F80000000007F8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80
00000000FF8000000000FF8000000000FF8000000000FF80000000007F80000000007F80000003
807FC0000003803FC0000003803FC0000007801FE0000007801FE0000007800FF000000F8007F0
00001F8003FC00003F8001FE00007F8000FF8001FF80003FF007DF80000FFFFF87800003FFFE03
8000003FF00180>41 41 -4 0 50]67 dc[ FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000
03FC03800003FC03800003FC03800003FC03800003FC07800003FC07800003FC1F800003FFFF80
0003FFFF800003FFFF800003FC1F800003FC07800003FC07800003FC03800003FC03807003FC03
807003FC03807003FC0000F003FC0000E003FC0000E003FC0000E003FC0001E003FC0001E003FC
0003E003FC000FE003FC003FC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0>36 41 -3 0 43]70 dc[<
FFFFFCFFFFFCFFFFFC01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00FFFFFC
FFFFFCFFFFFC>22 41 -2 0 26]73 dc[ 00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003
FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FFFFFE00
03FFFFFF8003FC003FE003FC000FF003FC0007F803FC0007FC03FC0003FC03FC0003FE03FC0003
FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FC03FC0007FC03FC00
07F803FC000FF003FC003FE0FFFFFFFFC0FFFFFFFF00FFFFFFF800>39 41 -3 0 47]80 dc[ FFF0003FF0FFFFF001FFF8FFFFF003FE1C03FC0007F80E03FC000FF80703FC001FF80703FC001F
F00703FC001FF00003FC001FF00003FC001FF00003FC001FE00003FC001FE00003FC001FE00003
FC001FE00003FC001FE00003FC001FC00003FC003F800003FC003F800003FC007F000003FC00FC
000003FFFFF0000003FFFFFE000003FC007FC00003FC001FE00003FC0007F80003FC0007F80003
FC0003FC0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003
FE0003FC0003FC0003FC0007FC0003FC0007F80003FC000FF00003FC007FE000FFFFFFFF8000FF
FFFFFE0000FFFFFFE00000>48 41 -3 0 52]82 dc[ 0007C0FC0003E0F80003F0F00001F0F00001F0E00001F8E00001F8E00001F8600001F8000003F8
000007F800000FF800007FF00007FFF000FFFFE003FFFFE007FFFFC00FFFFF801FFFFE003FFFFC
007FFFE0007FFE0000FFC00000FF000000FE0000E0FE0000E0FC0000E0FC0001E0FC0001E07C00
01E07C0003E03E0007E01F001FE00F807FE007FFF9E003FFF0E0007F8060>29 41 -4 0 38]83
dc[<007FFFFFE000007FFFFFE000007FFFFFE00000003FC0000000003FC0000000003FC0000000
003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0
000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000
003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC00000E0003FC0
00E0E0003FC000E0E0003FC000E0E0003FC000E0E0003FC000E0F0003FC001E0F0003FC001E070
003FC001C078003FC003C078003FC003C07E003FC007C07F803FC03FC07FFFFFFFFFC07FFFFFFF
FFC07FFFFFFFFFC0>43 40 -2 0 48]84 dc[<00000E00000700000000001F00000F8000000000
1F00000F80000000001F80001F80000000003F80001FC0000000003F80001FC0000000003FC000
3FC0000000007FC0003FE0000000007FC0003FE000000000FFE0007FF000000000FFE0007FF000
000000FFF000FFF000000001FE7000FF3800000001FE7000FF3800000001FE7801FF3800000003
FC3801FE1C00000003FC3801FE1C00000007FC1C03FC1E00000007F81C03FC0E00000007F81E07
FC0E0000000FF00E07F8070000000FF00E07F8070000001FF00F0FF0078000001FE0070FF00380
00001FE0070FF0038000003FE0039FE003C000003FC0039FE001C000003FC003FFE001C000007F
8001FFC000E000007F8001FFC000E00000FF8000FF8000F00000FF0000FF8000700000FF0000FF
8000700001FF0000FF0000780001FE0000FF0000380001FE0001FF0000380003FC0001FE00001C
0003FC0001FE00001C00FFFFE07FFFF007FFF0FFFFE07FFFF007FFF0FFFFE07FFFF007FFF0>68
41 -1 0 71]87 dc[<01FC03FC0FFF0FFC3F839FFC7F00DF807E007F80FE003F80FE003F80FE00
3F80FE003F807F003F803F003F803F803F800FE03F8007FC3F8000FFFF80000FFF8000003F8000
003F8000003F8007003F800F803F801FC03F001FC07E001FC07E000F81F80007FFF00001FF8000
>30 27 -2 0 33]97 dc[<0E01FC00000F07FF80000F9E07E0000FF803F0000FF001F8000FE000
FC000FE000FE000FE0007F000FE0007F000FE0007F000FE0007F800FE0007F800FE0007F800FE0
007F800FE0007F800FE0007F800FE0007F800FE0007F000FE0007F000FE0007F000FE000FE000F
E000FC000FF000F8000FF801F0000FFE07E0000FE7FF80000FE1FE00000FE00000000FE0000000
0FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000
000FE00000000FE0000000FFE0000000FFE0000000FFE0000000>33 42 -2 0 38]98 dc[<001F
E00000FFFC0003F01E0007E007000FC003801F8001C03F8001C07F8000007F0000007F000000FF
000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F0000007F800E00
3F801F001F803F800FC03F8007E03F8003F01F0000FFFE00001FF800>26 27 -2 0 31]99 dc[<
003FC3FF8000FFF3FF8003F03BFF8007C00FF8000F8007F8001F8003F8003F8003F8007F0003F8
007F0003F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003
F800FF0003F8007F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000FC007F80007E0
0FF80003F03FF80000FFFBF800001FE3F800000003F800000003F800000003F800000003F80000
0003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F800
00003FF80000003FF80000003FF800>33 42 -2 0 38]100 dc[<001FF00000FFFE0003F81F00
07E003800FC001C01F8000E03F8000E07F0000007F0000007F000000FF000000FF000000FF0000
00FFFFFFE0FFFFFFE0FF0007E0FF0007E07F0007E07F0007C07F000FC03F800FC01F800F800F80
1F8007C01F0003F07E0001FFF800003FE000>27 27 -2 0 32]101 dc[<7FFF807FFF807FFF80
07F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000
07F00007F00007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F000
07F00007F00007F00007F00007F00007F03E07F07F03F07F03F87F01F87F00FE3E003FFC0007F0
>24 42 -2 0 21]102 dc[<007FF00003FFFE000FC01F801F0007C03C0001E07C0001F0F80000
F8F80000F8F80000F8F80000F87C0001F83E0007F01FFFFFF007FFFFE00FFFFFC01FFFFF801FFF
FF003FFFF8003E0000003C000000380000003800000018FF80001FFFE0000FC1F8001F80FC001F
007C003F007E007F007F007F007F007F007F007F007F007F007F007F007F003F007E101F007C38
1F80FC7C0FC1FE7C03FFE7F800FF81F0>30 40 -2 13 34]103 dc[ FE3FFF800FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800
0FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
000FE003F8000FF003F8000FF003F8000FF803F8000FF803F0000FEE03F0000FE787E0000FE1FF
C0000FE07F00000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0
0000000FE00000000FE00000000FE00000000FE00000000FE0000000FFE0000000FFE0000000FF
E0000000>33 42 -3 0 38]104 dc[ E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFE0FFE0FFE00000000000000000
00000000000007000FC01FE03FE03FE03FE01FE00FC00700>15 43 -3 0 20]105 dc[ FEFFFC3FFEFFFC3FFE0FC00FE00FC00FC00FC01FC00FC03F800FC07F000FC07F000FC0FE000FC1
FC000FE3F8000FF3F8000FFFF0000FFFE0000FEFE0000FE7C0000FE3C0000FE0E0000FE078000F
E03C000FE01E000FE00F000FE007800FE01FFC0FE01FFC0FE01FFC0FE000000FE000000FE00000
0FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00000FFE000
00FFE00000FFE00000>31 42 -2 0 36]107 dc[ 0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFE0FFE0FFE0>15 42 -3 0 20]108 dc[<
FFFE1FFFC3FFF8FFFE1FFFC3FFF8FFFE1FFFC3FFF80FE001FC003F800FE001FC003F800FE001FC
003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800F
E001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC00
3F800FE001FC003F800FE001FC003F800FF001FE003F800FF001FE003F800FD801FF003F800FCC
01F9803F000FC603F8C07F00FFC383F0707E00FFC1FFE03FFC00FFC07F800FF000>53 27 -3 0
58]109 dc[ F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0
03F8000FE003F8000FE003F8000FE003F8000FE003F8000FF003F8000FF003F8000FD803F8000F
D803F0000FCE03F000FFC787E000FFC1FFC000FFC07F0000>33 27 -3 0 38]110 dc[<003FE0
0001FFFC0007F07F000FC01F801F800FC03F800FE03F800FE07F0007F07F0007F0FF0007F8FF00
07F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F07F0007F03F
0007E03F800FE01F800FC00FC01F8003F07E0001FFFC00003FE000>29 27 -2 0 34]111 dc[<
FFFE000000FFFE000000FFFE0000000FE00000000FE00000000FE00000000FE00000000FE00000
000FE00000000FE00000000FE00000000FE00000000FE1FC00000FE7FF80000FFE0FE0000FF803
F0000FF001F8000FE001FC000FE000FE000FE000FF000FE000FF000FE0007F000FE0007F800FE0
007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F000FE0007F000F
E000FF000FE000FE000FE000FC000FF001F8000FF803F000FFFE07E000FFE7FF8000FFE1FE0000
>33 39 -2 12 38]112 dc[ 0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FF01C0FF03E0FF07F
0FD87F0FD87FFFCE3EFFC7FCFFC1F0>24 27 -2 0 28]114 dc[ F80038F00038F0003CE0003C60007C0000FC0003FC00FFF807FFF81FFFF03FFFE07FFF807FFE00
FFE000FC0000F80070F00070F000707000703800F01E03F00FFFF003FE30>22 27 -2 0 27]
115 dc[<001F8000FFC001F86003F87003F03807F03807F03807F03807F03807F03807F03807F0
0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000FFFF
F0FFFFF01FFFF007F00003F00003F00001F00000F00000F00000F0000070000070000070000070
00>21 38 -1 0 27]116 dc[<003FC3FF8001FFF3FF8003F03BFF8007E00FF80007E007F8000F
E007F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800
0FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
000FE003F8000FE003F8000FE003F800FFE03FF800FFE03FF800FFE03FF800>33 27 -3 0 38]
117 dc[<0001C000000003E000000003E000000007F000000007F00000000FF80000000FF80000
000FF80000001FDC0000001FDC0000003FDE0000003F8E0000007F8F0000007F070000007F0700
0000FE03800000FE03800001FC01C00001FC01C00003FC01E00003F800E00007F800F00007F000
700007F0007000FFFE03FF80FFFE03FF80FFFE03FF80>33 27 -1 0 36]118 dc[<00078003C0
0000078003C000000FC007E000000FC007E000000FC007E000001FE00FF000001FE00FF000003F
F01FF800003FF01FB800003FF01FB800007F783F3C00007F383F1C0000FF383F1E0000FE1C7E0E
0000FE1C7E0E0001FE1EFC0F0001FC0EFC070001FC0EFC070003F807F8038003F807F8038007F8
07F803C007F003F001C007F003F001C00FE007E000E0FFFE7FFC0FFEFFFE7FFC0FFEFFFE7FFC0F
FE>47 27 -1 0 50]119 dc[ E01FE00000F01FC00000783F8000003C7F0000001EFE0000001FFE0000000FFC00000007F80000
0007F00000000FF00000000FF00000001FF00000003FF80000007F3C000000FF1E000000FE0F00
0001FC07800003F807800007F003C000FFFC0FFF00FFFC0FFF00FFFC0FFF00>33 27 -1 0 36]
120 dc[<0FC00000003FE00000007C78000000FE3C000000FE1E000000FE0E000000FE0F000000
7C070000003807800000000380000000038000000001C000000001C000000003E000000003E000
000007F000000007F00000000FF80000000FF80000000FF80000001FDC0000001FDC0000003FDE
0000003F8E0000007F8F0000007F070000007F07000000FE03800000FE03800001FC01C00001FC
01C00003FC01E00003F800E00007F800F00007F000700007F0007000FFFE03FF80FFFE03FF80FF
FE03FF80>33 39 -1 12 36]121 dc dfend /fd df[<4020101008040404020202027AFEFEFC
FC78>7 18 -5 12 17]44 dc[15 3 -1 -12 20]45 dc[<78FCFCFCFC78>6 6
-5 0 17]46 dc[ 00000E00000E00000E000007000007000007000003800003800003800001C00001C00001C00000
E00000E00000E000007000007000007000003800003800001C00001C00001C00000E00000E0000
0E000007000007000007000003800003800003800001C00001C00001C00000E00000E00000E000
007000007000003800003800003800001C00001C00001C00000E00000E000006>23 60 -3 15
30]47 dc[<7FFFE07FFFE001F80000F00000F00000F00000F00000F00000F00000F00000F00000
F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000
F00000F00000F00000F00000F00000F00000F00000F00000F00000F000F0F000FEF0000FF00001
F000007000001000>19 40 -5 0 30]49 dc[ 0406000403000201800200C000006000007000003800001C00000E000007000007800003C00001
E00001F00000F80000F800007C00007C00007E78007EFC003EFC003EFC003EFC007EF8007E4000
7C40007C2000F82001F81803F00E07E007FF8000FE00>23 40 -3 0 30]50 dc[<007F000001FF
C00003C0F000070078000E003C001E001E001C001E003C000F003C000F007C000F8078000F8078
000F8078000F80F8000F80F8000F80F8000F80F8000F80F8000F00FC000F00FC001E00FC001E00
FA001C00F9003800F9807000F840E000F83F000078000000780000007C0000003C0000003C0000
001C0000001E0000000E001C000F003E0007803E0003801E0001E00C0000F81C00003FF800000F
E000>25 41 -2 1 30]54 dc[<007F000003FFE0000F80F0001E00380038000C00780006007000
0700F0000300E0000380E0000380E0000380E0000380E00007807000078070000F0030003F0038
007E001C01FE000603FC00030FF80000FFE000007FC00001FF000003FF800007F8C0000FF06000
1FC038001F8018003E001C003C000E003C000E0038000E0038000E0038000E0018000E001C001C
000C003C00060078000381F00001FFC000007F0000>25 41 -2 1 30]56 dc[<03F800000FFE00
001C0780001801C0003C00E0003E0070003E0078001C003C0000003C0000001E0000001E000000
1E0000000F0000000F0000000F00007E0F8003810F800700CF800E004F801C002F803C001F803C
001F8078001F8078000F80F8000F80F8000F80F8000F80F8000F80F8000F00F8000F00F8000F00
F8000F0078001E0078001E003C001C001C003C001E0038000F00700007C1E00001FFC000007F00
00>25 41 -2 1 30]57 dc[ 000F800100000F800100000F800080001F000080001F000080001F000040003E000040003E0000
7FFFFE00003FFFFC000020007C00002000FC00001000F800001000F800001801F800000801F000
000801F000000403E000000403E000000403E000000207C000000207C000000207C00000010F80
0000010F800000011F800000009F000000009F00000000FF000000007E000000007E000000003C
000000003C000000003C0000000018000000001800000000180000>40 42 -2 0 45]65 dc[ FFFFE000FFFFFFF80007E000FE0003E0003F0003E0001F8003E0000FC003E00007E003E00007E0
03E00003F003E00003F003E00003F003E00003F003E00003F003E00003F003E00003E003E00007
E003E00007C003E0000F8003E0001F0003E0003E0003E000F80003FFFFE00003E001F80003E000
7C0003E0003E0003E0001F0003E0001F8003E0000F8003E0000FC003E0000FC003E0000FC003E0
000FC003E0000FC003E0000F8003E0000F8003E0001F8003E0003F0003E0007E0007E000FC00FF
FFFFF000FFFFFF8000>36 41 -2 0 42]66 dc[<0000FF80000007FFE000001FC03800003E000E
0000F800030001F000018003E000008007C00000400F800000600F800000201F000000203F0000
00103E000000103E000000107E000000107E000000007C00000000FC00000000FC00000000FC00
000000FC00000000FC00000000FC00000000FC00000000FC00000000FC000000007C000000007E
000000107E000000103E000000103E000000303F000000301F000000300F800000700F80000070
07C00000F003E00001F001F00003F000F80006F0003E000C70001FC078300007FFE0300000FF00
10>36 43 -3 1 43]67 dc[ 0007C003E00003E003E00001F003E00000F803E00000F803E000007C03E000007C03E000007E03
E000003E03E000003E03E000003F03E000003F03E000003F03E000003F03E000003F03E000003F
03E000003F03E000003F03E000003F03E000003F03E000003E03E000003E03E000003E03E00000
7C03E000007C03E000007C03E00000F803E00000F003E00001F003E00003E003E00007C003E000
0F8003E0003F0007E000FC00FFFFFFF800FFFFFFC000>40 41 -2 0 46]68 dc[ FFFFFFC007E0001FC003E00003C003E00001E003E00000E003E000006003E000006003E0000020
03E000002003E000002003E000002003E000001003E001001003E001001003E001001003E00100
0003E003000003E003000003E00F000003FFFF000003FFFF000003E00F000003E003000003E003
000003E001000003E001000003E001002003E001002003E000002003E000004003E000004003E0
00004003E000004003E00000C003E00000C003E00001C003E000078007E0001F80FFFFFFFF80FF
FFFFFF80>36 41 -2 0 41]69 dc[ 0003E000000003E000000003E000000003E000000003E000000003E000000003E000000003E000
000003E002000003E002000003E002000003E002000003E002000003E006000003E00E000003FF
FE000003FFFE000003E00E000003E006000003E002000003E002000003E002000003E002004003
E002004003E000004003E000008003E000008003E000008003E000008003E000018003E0000180
03E000038003E000070007E0003F00FFFFFFFF00FFFFFFFF00>34 41 -2 0 39]70 dc[ FFFF8007F00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E000
03E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E000
03E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00007F000FFFF80
FFFF80>17 41 -2 0 22]73 dc[<03F0000C3C00300E00200F00400780F807C0FC03C0FC03E0FC
03E07803E03003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E000
03E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E000
03E00003E00003E00003E00003E00007E003FFFF03FFFF>24 42 -3 1 31]74 dc[<0001FF0000
000F01E000003C0078000078003C0000F0001E0003E0000F8007C00007C007800003C00F800003
E01F000001F01F000001F03F000001F83E000000F87E000000FC7E000000FC7E000000FC7C0000
007CFC0000007EFC0000007EFC0000007EFC0000007EFC0000007EFC0000007EFC0000007EFC00
00007EFC0000007E7C0000007C7C0000007C7E000000FC7E000000FC3E000000F83E000000F81F
000001F01F000001F00F800003E007800003C003C000078001E0000F0000E0000E000078003C00
003C007800000F01E0000001FF0000>39 43 -3 1 46]79 dc[ 000003E000000003E000000003E000000003E000000003E000000003E000000003E000000003E0
00000003E000000003E000000003E000000003E000000003E000000003E000000003E000000003
E000000003E000000003FFFFE00003E001F80003E0003E0003E0001F0003E0000F8003E0000FC0
03E00007C003E00007E003E00007E003E00007E003E00007E003E00007E003E00007E003E00007
C003E0000FC003E0000F8003E0001F0003E0003E0007E000FC00FFFFFFF000FFFFFF8000>35 41
-2 0 41]80 dc[<00000000FC00FFFF8003C200FFFF8007C10007F0000F810003E0001F808003
E0003F808003E0003F008003E0003F000003E0003F000003E0003F000003E0003F000003E0003E
000003E0003E000003E0003E000003E0003E000003E0003C000003E0007C000003E00078000003
E000F0000003E001E0000003E00780000003FFFE00000003E003E0000003E000F8000003E0003C
000003E0001E000003E0001F000003E0000F800003E0000FC00003E0000FC00003E0000FC00003
E0000FC00003E0000FC00003E0000FC00003E0000F800003E0001F800003E0001F000003E0003E
000003E000FC000007E003F00000FFFFFFC00000FFFFFE000000>41 42 -2 1 44]82 dc[<803F
C000C1FFF000C3C07800EE001C00F8000E00F0000700E0000780C0000380C0000380C00003C080
0003C0800003C0800003C0800003C0000007C0000007C000000F8000001F8000007F000007FF00
007FFE0003FFFC0007FFF8000FFFE0001FFF00003FE000007F0000007C000000FC000000F80001
00F8000100F0000100F0000300F0000300F0000300700007007800070038000F003C001F001E00
37000F81E30003FF830000FE0100>26 43 -3 1 33]83 dc[<00007F00000001FFE0000007C070
00001F001800003C000C000078000200007800030000F000010001F000008001F000008001E000
008003E000004003E000004003E000004003E000004003E000004003E000004003E000004003E0
00004003E000004003E000004003E000004003E000004003E000004003E000004003E000004003
E000004003E000004003E000004003E000004003E000004003E000004003E000004003E0000040
03E000004003E000004003E000004003E000004003E00000E007F00001F0FFFF801FFFFFFF801F
FF>40 42 -2 1 45]85 dc[<07F80F001F063FC03C013C407C00F820F800F820F8007820F80078
20F8007820780078207C0078003E0078001F0078000F80780003E07800007FF800000078000000
780000007800080078001C0078003E0078003E00F0003C00E0001001C0000E07800001FC0000>
27 26 -2 0 30]97 dc[<0407E00006181C0007200E000740078007C003C0078001C0078001E0
078001F0078000F0078000F0078000F8078000F8078000F8078000F8078000F8078000F8078000
F8078000F0078000F0078001E0078001E007C003C007A0038007B00700078C1C000783F0000780
000007800000078000000780000007800000078000000780000007800000078000000780000007
800000078000000F800000FF800000FF80000007800000>29 42 -1 0 33]98 dc[<007F0001C0
C00780200F00101E00083C00043C00047C0000780000F80000F80000F80000F80000F80000F800
00F80000F800007800007C00103C00383C007C1E007C0F003C07800801C070007F80>22 26 -2
0 27]99 dc[<007E0FF801C18FF807004F800E002F001E001F003C000F003C000F0078000F0078
000F00F8000F00F8000F00F8000F00F8000F00F8000F00F8000F00F8000F0078000F0078000F00
7C000F003C000F001C000F001E001F000F001F0003802F0001C0CF00003F0F0000000F0000000F
0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
0F0000001F000001FF000001FF0000000F00>29 42 -2 0 33]100 dc[<007F0001C0C0070020
0E00101E00083C00043C00047C0000780000F80000F80000F80000F80000F80000FFFFFCF8003C
F8003C78003C78003C3C00383C00781C00700E00F00700E003C380007E00>22 26 -2 0 27]
101 dc[ 00078000078000078000078000078000078000078000078000078000078000078000078000FFFE
00FFFE000780000780000780000780000780000780000780000780000780000780800381C003C3
E001C3E000E1E00070C0001F00>19 42 -1 0 18]102 dc[<00FF80000780F0000C0018003800
0E007000070070000700E0000380E0000380E0000380E0000380600003807000070030000F001C
003E0007FFFC000FFFF8001FFFC0001C0000003800000030000000300000003000000011FC0000
170700000E0380001E03C0003C01E0003C01E0007C01F0007C01F0007C01F0007C01F0007C01F0
003C01E0003C01E0001E03C0800E03C1C0070721C001FC184000000780>26 40 -2 13 30]103
dc[ 800780078007800780078007800780078007800780078007800780078007800780078007800780
07C0078007C0078007A0078007A0070007900E00078C1C000783F8000780000007800000078000
000780000007800000078000000780000007800000078000000780000007800000078000000F80
0000FF800000FF80000007800000>30 42 -1 0 33]104 dc[ 800780078007800780078007800780078007800780078007800780078007800F807F807F800780
00000000000000000000000000000000000007000F801F801F800F800700>13 41 -1 0 17]
105 dc[<1F8060C0F070F870F8387038003C003C003C003C003C003C003C003C003C003C003C00
3C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C007C07FC07FC
007C000000000000000000000000000000000000007800FC00FC00FC00FC0078>14 53 2 12 18
]106 dc[ 078007800780078007800780078007800780078007800780078007800780078007800780078007
8007800F80FF80FF800780>14 42 -1 0 17]108 dc[ 01E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E007
8003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C001E0078003C0
01E0078003C001E0078003C001E0078003C001E007C003E001E007C003E001E007A003D001E00F
A0079003C0FF98070C0380FF860E0307000781F800FC00>48 26 -1 0 51]109 dc[ FFFCFFFC0780078007800780078007800780078007800780078007800780078007800780078007
80078007800780078007800780078007800780078007800780078007800780078007C0078007C0
078007A007800FA00700FF900E00FF8C1C000783F800>30 26 -1 0 33]110 dc[<007F000001
C1C000070070000E0038001E003C003C001E003C001E0078000F0078000F00F8000F80F8000F80
F8000F80F8000F80F8000F80F8000F80F8000F80F8000F8078000F0078000F003C001E003C001E
001C001C000E0038000700700001C1C000007F0000>25 26 -2 0 30]111 dc[ 000007800000078000000780000007800000078000000780000007800000078000000780000007
8000000787E00007983C0007A00E0007C0078007C003C0078003C0078001E0078001F0078001F0
078000F0078000F8078000F8078000F8078000F8078000F8078000F8078000F8078001F0078001
F0078001E0078003E007C003C007A00780FFB00F00FF8C1C000783F000>29 38 -1 12 33]112
dc[ 800007800007800007800007800007800007800007C00007C0E007C1F00FA1F0FF91F0FF98E007
87C0>20 26 -1 0 23]114 dc[<83F800C40700F80180F001C0E000C0C000E0C000E0C000E080
01E08001E00007C0003FC003FF800FFF003FFE007FF0007E0000F80000F00040E00040E0004060
00C06000C03001C01C06C007F840>19 26 -2 0 24]115 dc[<003E0000E10001C08003C08007
804007804007804007804007804007804007804007800007800007800007800007800007800007
8000078000078000078000078000078000078000FFFF801FFF800F800007800003800003800001
8000018000018000008000008000008000008000>18 37 -1 0 23]116 dc[<003F87FC00E047
FC01C027C00380178007800F8007800F8007800780078007800780078007800780078007800780
078007800780078007800780078007800780078007800780078007800780078007800780078007
8007800F800F80FF80FF80FF80FF8007800780>30 26 -1 0 33]117 dc[<0002000000070000
0007000000070000000F8000000F8000001E4000001E4000003E6000003C2000003C2000007810
000078100000F8180000F0080000F0080001E0040001E0040003E0020003C0020003C002000780
0100078003800F8003C0FFF00FF8FFF00FF8>29 26 -1 0 32]118 dc[<1F00000060800000F0
400000F8200000F8100000F8100000700800000008000000040000000400000004000000020000
00020000000700000007000000070000000F8000000F8000001E4000001E4000003E6000003C20
00003C2000007810000078100000F8180000F0080000F0080001E0040001E0040003E0020003C0
020003C0020007800100078003800F8003C0FFF00FF8FFF00FF8>29 38 -1 12 32]121 dc
dfend /fe df[<3078FCFC78300000000000000000003078FCFC7830>6 21 -10 0 26]58 dc[<
7F01FCFF83FE7F01FC1C00700E00E00E00E00E00E00E00E00FFFE007FFC007FFC00701C00701C0
03838003838003838003838001C70001C70001C70001C70000C60000C60000EE0000EE0000EE00
006C00007C00007C00003800>23 30 -1 0 26]65 dc[ C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C00001C00001C00001C00001C00001C00001C00001C00001C000FFFF80FFFF80FFFF80>17 30
-4 0 26]73 dc[<7FFFFCFFFFFC7FFFFC0E001C0E001C0E001C0E001C0E001C0E00000E00000E
00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
00000E00000E00000E00007FE000FFF0007FE000>22 30 -1 0 26]76 dc[<03FF8003FF8003FF
800038000038000038000038000038000038000038000038000038000038000038000038000038
00003800003800003800003800003800003800003800E0380EE0380EE0380EE0380EFFFFFEFFFF
FE7FFFFE>23 30 -1 0 26]84 dc[<007C0001FF0003FF800783C00701C00E00E00E00E01C0070
1C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C0070
1C00701C00701C00701C00701C00701C0070FF83FEFF83FEFF83FE>23 30 -1 0 26]85 dc[<07
F0FC1FFDFC3FFFFC780F80700780E00380E00380E003807003807803803F83801FFF8007FF8000
7F80000380000380300700780F007FFE003FFC001FF000>22 21 -3 0 26]97 dc[<00FE0003FF
C00FFFE01F01F03C0070780070700000700000E00000E00000E00000E00000E000007000007000
007800003C00C01F01E00FFFE003FFC000FF80>20 21 -3 0 26]99 dc[<01F1FC07FDFC1FFFFC
3E0FC03807C07003C07003C0E001C0E001C0E001C0E001C0E001C0E001C0E001C07001C07803C0
3C07C01E0FC00FFFC007FDC001F1C00001C00001C00001C00001C00001C00001C0001FC0001FC0
001FC0>22 30 -2 0 26]100 dc[<00FE0003FFC00FFFE01F01F03C0070780070700000700000
E00000FFFFF0FFFFF0FFFFF0E00070E000707000E07800E03C01C01E07C00FFF8007FF0001F800
>20 21 -3 0 26]101 dc[<7FFF80FFFFC07FFF8000E00000E00000E00000E00000E00000E000
00E00000E00000E00000E00000E00000E00000E00000E00000E0007FE0007FE0007FE000000000
00000000000000000000000000000000C00001E00001E00000C000>18 31 -4 0 26]105 dc[<
1FC07FF0FFF8F038601C001C000E000E000E000E000E000E000E000E000E000E000E000E000E00
0E000E000E000E000E000E000E000E000E000E0FFE0FFE0FFE000000000000000000000000000C
001E001E000C>15 42 -2 11 26]106 dc[ 00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
00E00000E00000E00000E00000E00000E00000E000FFE000FFE000FFE000>19 30 -3 0 26]
108 dc[<7F1F1F00FF9F9F807F1F1F001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C
001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001E1E1C001E1E1C001F1F1C007FFF
F800FFFBF8007CE0E000>25 21 0 0 26]109 dc[ 0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00F00E00F80E00FC1C0FFFFC0
FEFF80FE3E00>23 21 -1 0 26]110 dc[<01F00007FC001FFF003E0F803C07807803C07001C0
F001E0E000E0E000E0E000E0E000E0E000E0E000E07001C07803C03C07803E0F801FFF0007FC00
01F000>19 21 -3 0 26]111 dc[ 0E00000E00000E00000E3E000EFF800FFFC00FC1E00F80F00F00780F00380E001C0E001C0E001C
0E001C0E001C0E001C0E001C0E00380F00380F80700FC1F0FFFFE0FEFF80FE3E00>22 32 -1 11
26]112 dc[<7FFF00FFFF007FFF00038000038000038000038000038000038000038000038000
03800003800003C00003C00003E00003F01803FC3C7FBFFCFF8FF87F83F0>22 21 -2 0 26]
114 dc[ 007FC000780000E00380E00380E003807807807FFF801FFF8007FB80>18 21 -4 0 26]115 dc[
<001F00007FC000FFE000E0E001C07001C07001C07001C07001C00001C00001C00001C00001C0
0001C00001C00001C00001C00001C000FFFFE0FFFFE07FFFE001C00001C00001C00001C00001C0
0001C00000C000>20 28 -1 0 26]116 dc[<003800007C00007C0000EE0000EE0000EE0001C7
0001C70001C7000383800383800383800701C00701C00701C00E00E00E00E00E00E07F83FCFFC7
FE7F83FC>23 21 -1 0 26]118 dc[<1E00003F80007FC00071E00078E0003070000070000070
00003800003800003800003C00003C00003C00006E0000660000E60000E70000E70001C70001C3
8003C3800383800381C00781C00701C00700E00E00E00E00E07FC3FCFFC7FE7FC3FC>23 32 -1
11 26]121 dc[ 00007800003C00001E00000F00E00780E003C0E001E0FFFFF0FFFFF07FFFF0>21 21 -2 0 26]
122 dc dfend /ff df[<00FE0007FFC00F83E01F01F03E00F83E00F87C007C7C007C7C007CFC
007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC
007C7C007C7C007C7C007C3E00F83E00F81F01F00F83E007FFC000FE00>23 32 -2 0 28]48 dc
[<7FFFE07FFFE001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8
0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8
0001F800FFF800FFF80001F800007800001800>19 32 -4 0 28]49 dc[ 3FFFF01FFFF00FFFF00E003807001803801801C01800E018007000003800003E00001F00000F80
0007C00007E00003F00003F00003F83803F87C01F8FE01F8FE03F8FE03F8FE03F07C07F07007E0
3C1FC00FFF0003FC00>21 32 -3 0 28]50 dc[<01FE000FFFC01E07F07801F87E01FCFF00FCFF
00FEFF00FEFF00FE7E00FE3C00FE0000FC0000FC0001F80001F00007C001FF0001FE00001F8000
07C00003E00003F01F03F01F03F83F81F83F81F83F81F83F03F01E03F00F07E007FFC000FE00>
23 32 -2 0 28]51 dc[<00FFFE00FFFE0007E00007E00007E00007E00007E00007E00007E0FF
FFFEFFFFFEE007E07007E03807E01807E00C07E00E07E00707E00307E00187E001C7E000E7E000
77E00037E0001FE0001FE0000FE00007E00003E00003E00001E00000E0>23 32 -2 0 28]52 dc
[<03F8000FFF001C1F803007C07007E0FC03F0FC03F0FE03F8FE03F87C03F83803F80003F80003
F80003F00003F01803E01807E01E0FC01FFF0019FC001800001800001800001800001BC0001FF8
001FFE001FFF001FFF801FFFC01E01E0100020>21 32 -3 0 28]53 dc[<00FF0003FFC00783E0
0F00F01E00F83E007C3C007C7C007E7C007E7C007EFC007EFC007EFC007EFC007EFE007CFE007C
FF00F8FD80F0FCFFE0FC7FC0FC08007C00007C00007E00F03E01F83E01F81F01F80F01F807C0F0
03F07000FFE0001F80>23 32 -2 0 28]54 dc[<01E00003F00003F00003F00003F00003F00003
F00003F00001F00001F00001F00000F00000F00000F000007800007800003800001800001C0000
0C00000600C00300C00300C00180E000C0E000607FFFF07FFFF87FFFF87FFFFC7FFFFE7FFFFE78
0000600000>23 34 -3 0 28]55 dc[<01FF000FFFC01F01F03C0038780038F8001CF0001CF000
1EF0001EF0003EF000FE7801FE7807FC3C1FFC1E7FF807FFF003FFE007FFC00FFF801FFFC01FF9
E03FE0F03F80783F00783E00783C00781C00781C00F00E00F00703E003FFC000FE00>23 32 -2
0 28]56 dc[<03F8000FFE001C0F801E03C03F01E03F00F03F00F83F00F81E007C00007C00007C
00207E07FC7E0FFE7E1E037E3E01FE7C00FE7C00FEFC007EFC007EFC007EFC007EFC007CFC007C
FC007C7C00787C00F83E00F01E01F00F83E007FF8001FE00>23 32 -2 0 28]57 dc[ F0FFFF803FF807F000FF0C07F000FE0607F001FC0607F001FC0007F001FC0007F001FC0007F001
FC0007F001FC0007F001FC0007F001FC0007F001FC0007F003F80007F007F00007F00FE00007FF
FF800007FFFFC00007F007F00007F001F80007F000FC0007F0007E0007F0007F0007F0007F0007
F0007F0007F0007F0007F0007F0007F0007F0007F0007E0007F000FC0007F001F80007F007F000
FFFFFFC000FFFFFE0000>39 34 -2 0 42]82 dc[<00FF0003FFC00FC0701F00303E00187E0000
7C00007C0000FC0000FC0000FC0000FFFFF8FFFFF8FC00F8FC00F87C00F87C00F03E01F01E01E0
0F87C007FF8000FE00>21 22 -2 0 26]101 dc[ 1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
001F001F001F001F00FF00FF00>11 35 -2 0 16]108 dc[<01FC3FC007FF3FC00F81BE001F00
FE001F007E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F
003E001F003E001F003E001F003E001F003E001F003E001F003E00FF01FE00FF01FE00>26 22
-2 0 31]117 dc dfend /fg df[<3C07C00000620C300000F31E180000F19E0C0000718E0600
0001C007000000C003000000E003000000E003800000E00380000060038000007001C000007001
C000007001C000007001C000003801C000003800E000003800E000003800E000003800E000001C
00E000001C007000001C007000001C007000001C007000001C007000000E003800000E00380000
0E003800000E00380000FFFFFFC00007001C000007001C000007001C000007001C000007001C00
0003800E000003800E000003800E000001800E000001C0660C0000C0F71E0000E0F31E00003071
8E00000FC0F8>39 45 2 10 30]11 dc[<804020100804040202021D3F3F1E0C>8 15 -11 -20
15]39 dc[<0010000000180000001800000018000000180000000C0000000C0000000C0000000C
00000006000000060000000600000006000000030000FFFFFFFCFFFFFFFC000300000001800000
01800000018000000180000000C0000000C0000000C0000000C000000060000000600000006000
0000600000002000>30 30 -6 3 37]43 dc[<804020100808040402021E1E1E1E0E>7 15 -3
10 15]44 dc[12 3 -4 -9 17]45 dc[5 5 -6 0 15]46 dc[<
1F000030E000607000E03800E01C00E01C00E00E00E00F00E00700E00780E00780F00380F003C0
F003C0F003C07801E07801E07801E07801E03C00F03C00F03C00F01C00F01E00701E00700E0070
0F007007007003007003807001C07000E0600030C0000F80>20 34 -6 1 25]48 dc[<1F800020
F000403800801C00800E00800700E00780F00380F003C06003C00003C00001C00001C00001C000
038000038000070000FC000007000001C000006007007008C03808403808201C08201C08201C04
401C04000C02001C01001C00C018003070000FC0>22 34 -5 1 25]51 dc[<0F800030E0006030
00601800E01C00E00E00E00F00E00700E00780E00780E00780F003C0F003C0F003C0F803C07803
C07801C07C03807A03803D03003C86001C7C001E00001E00000E000007000007000003803001C0
7800C078006038003808000C100003E0>21 34 -6 1 25]54 dc[<01800003C00003C00003E000
01E00001E00001E00000F00000F00000F000007800007800003800003C00001C00001C00000E00
000E000006000007000003000003808001804000806000C02000403000601803A01E04700F0C18
0FFC0807FC0404FC04027802>23 34 -7 1 25]55 dc[<0FC000303000600800C00600C00200C0
0100C00180C00080C000C0C000C06000C06001C03001C01803C00C07C0061F80033F0000FE0000
FC0001FE0003F18007E0C007C06007003007001007001806001803000C03000C01000800801800
4010003060000FC0>22 34 -5 1 25]56 dc[ 0000000000000000000000000E000F000F800F800700>9 21 -6 0 15]58 dc[<3800003C0000
3E00003E00001C00000000000000000000000000000000000E0000198000104000104000182000
1C00001E00000F000007800001E00000F000E07800F03C00F01E00E00700400300400380400180
200180100180100180080180040180020100018200007C00>17 36 -9 0 25]63 dc[ 3C0007C00C0003C0040003C0040003C0020003C0030003C0010003C0008003C0008007C0004007
C0007FFF8000200780003007800010078000080780000807800004078000040780000207800002
078000010780000087800000878000004F8000004F0000002F0000002F0000001F0000000F0000
000F0000000700000007000000030000000300>30 35 -3 0 36]65 dc[ 800700078003C0078001E0078000F003C000F003C0007803C0007803C0007801E0003C01E0003C
01E0003801E0007800F0007800F000F000F001E000FFFF8000780780007801E0007800F0007800
78003C003C003C001E003C001E003C000E001E000F001E000F001E000F001E000E000F001E000F
001C000F003800FFFFE0>32 34 -3 0 34]66 dc[<00FE0000000381C0000006003000001C0008
00001800040000380002000070000100007000008000F000008000E000004000E000004000E000
002000E000002000E000000000F000000000F000000000F000000000F000000000F00000000078
00000000780000000078000000003C000008003C000004001E000004000E000004000F00000400
0700000E000380000E0001C0000E0000E0000E000070001F000038002700000E00630000038081
0000007F0080>33 36 -7 1 35]67 dc[ 00E000078000700003C000380003C0003C0003C0001C0003C0000E0001E0000F0001E000070001
E000078001E000078000F00003C000F00003C000F00003C000F00003C000780001E000780001E0
00780001E000780001E0003C0001E0003C0001E0003C0001E0003C0001C0001E0001C0001E0001
C0001E000380001E000380000F000700000F000E00000F003C0000FFFFF000>35 34 -3 0 37]
68 dc[ 03C000100003C000080003C000080001E000080001E008040001E008000001E008000000F00C00
0000F00C000000F00C000000FFFC000000780E0000007806000000780200000078020000003C01
0000003C010100003C000100003C000100001E000100001E000100001E000180001E000180000F
000180000F000180000F00078000FFFFFF80>33 34 -3 0 33]69 dc[ 000007800000078000000780000003C0000003C0000003C0000003C0000001E0000001E0080001
E0080001E0080000F00C0000F00C0000F00C0000FFFC0000780E00007806000078020000780200
003C0100003C0102003C0002003C0002001E0002001E0002001E0003001E0003000F0003000F00
03000F000F00FFFFFF>32 34 -3 0 32]70 dc[<00FE0000000381C1000006002300001C001380
0018000F800038000780007000078000700003C000F00003C000E00003C000E00003C000E00001
E000E00001E000E00001E000F0003FFC00F000000000F000000000F000000000F0000000007800
000000780000000078000000003C000008003C000004001E000004000E000004000F0000040007
00000E000380000E0001C0000E0000E0000E000070001F000038002700000E0063000003808100
00007F0080>33 36 -7 1 38]71 dc[ C000078003C00003C001E00003C001E00003C001E00003C001E00001E000F00001E000F00001E0
00F00001E000F00000F000780000F000780000F000780000FFFFF8000078003C000078003C0000
78003C000078003C00003C001E00003C001E00003C001E00003C001E00001E000F00001E000F00
001E000F00001E000F00000F000780000F000780000F00078000FFF87FFC>38 34 -3 0 36]72
dc[ E00001E00000F00000F00000F00000F000007800007800007800007800003C00003C00003C0000
3C00001E00001E00001E00001E00000F00000F00000F0000FFF8>21 34 -3 0 19]73 dc[ 0FFE000F8001F000078001E000078001E000078001E000078003C00003C003C00003C003C00003
C007800003C007800001E00F800001E00F000001E00F000001F01F000000F81E000000F41E0000
00F23C000000F0BC000000787C0000007838000000781800000078080000003C040000003C0100
00003C008000003C004000001E002000001E001000001E000400001E000200000F000100000F00
01C0000F0001E000FFF807FC>38 34 -3 0 37]75 dc[ 078001000780018003C0008003C0008003C0004003C0004001E0002001E0002001E0000001E000
0000F0000000F0000000F0000000F0000000780000007800000078000000780000003C0000003C
0000003C0000003C0000001E0000001E0000001E0000001E0000000F0000000F0000000F800000
FFFC00>27 34 -3 0 31]76 dc[ 00F003C0000400F803C0000200F801E0000200F401E0000200F201E0000200F201E0000101E100
F0000101E100F0000101E080F0000101E040F0000081E04078000081E02078000081E020780000
81E01078000041E0083C000043C0083C000043C0043C000043C0043C000023C0021E000023C001
1E000023C0011E000023C0009E000013C0008F000013C0004F000013C0002F00001780002F0000
0F80001780000F80001780000F80000F8000FF800007FC>46 34 -3 0 44]77 dc[<01FC000007
0380000E00E0001C00380038001C0078000E0070000700F0000780F00003C0E00001C0E00001E0
E00000F0E00000F0E0000078F0000078F0000078F000003CF000003CF000003C7800001E780000
1E7800001E3C00001E3C00001E1C00001E1E00001E0F00001E0700001C0380001C01C0001C00E0
00380070003800380070000C00E0000783800000FE00>31 36 -7 1 37]79 dc[ 00000780000007800000078000000780000003C0000003C0000003C0000003C0000001E0000001
E0000001E0000001E0000000F0000000F0000000FFFE0000F003C0007800E0007800780078003C
0078001E003C001E003C000F003C000F003C000F001E0007001E0007001E0007001E0007000F00
0E000F001E000F003800FFFFE0>32 34 -3 0 33]80 dc[<000000F0FFF8038C0F800702078007
0207800F0107800F0107800F0003C0078003C0078003C0078003C0078001E003C001E003C001E0
03C001E003C000F0038000F0070000F00E0000FFFC0000780780007801E0007800700078003800
3C003C003C001E003C001E003C001E001E000F001E000F001E000E001E000E000F001C000F003C
000F007000FFFFC0>32 35 -3 1 36]82 dc[<81FC0000C6070000C80180007000C00070006000
60003000600038002000180020001C0020001C0020001C0000001E0000001E0000001E0000003C
0000007C000003FC00001FF800007FF00000FFE00001FF000001F8000003E0000003C0000003C0
000003C0010003C0010001C0018001C0018000C0018000E00180006001C0003001C0001802C000
0E0C400001F020>27 36 -3 1 27]83 dc[ E0000000F0000000F0000000F0000000F0000000780000007800000078000000780000003C0000
003C0000003C0000003C0000001E0000001E0000001E0000001E0000000F0000800F0010800F00
10400F0010400780104007801020078018200780183003C0181803C0181E03C0381FFFFFF8>29
34 -9 0 35]84 dc[<03F000000E0C000018020000380180003000400070004000700020007000
1000F0001000F000080070000800780004007800040078000400780004003C0002003C0002003C
0002003C0002001E0001001E0001001E0001001E0001000F0000800F0000800F0000800F000080
0780004007800040078000400780004003C0002003C0006003C000783FFE03FF>32 35 -9 1 36
]85 dc[<0C00020000000C00030000000E00030000000E00038000000F00038000000F0003C000
000F8003E000000FC003E000000F4003D000000F2003D000000F2003C800000F1003C800000F10
03C400000F0803C400000F0807C200000F0407C200000F04078100000F02078100000F02078080
000F010780C0000F01078040000F00878020000F00C78020000F00478010000F00278010000F00
278008001F00178008001F00178004001E000F8004001E000F8002001E00078002001E00078001
001E00078001801F0007C003C0FFF03FF80FF8>45 35 -10 1 49]87 dc[<70F8FCFCB8804040
20201008040201>8 15 -10 -20 15]96 dc[<0F0780308C40305C40703C20701C20F01C20F00E
10F00E00F00E00F00E007807007807007807003807003C03801C03800E03800E03800705C00185
C000F8C0>20 21 -5 0 25]97 dc[<1F0031C060E06070E038E038E03CE01EE01EE01E700F700F
700F700F380F380738073C061E0E1D0C1CF81C000E000E000E000E000700070007000700038003
8003803F8003C0>16 35 -5 0 22]98 dc[<0FC000183000300C00700200700100F00100F00000
F00000F00000F000007800007800007800003800003C00001C07800E078007038003018001C100
007E00>17 21 -5 0 22]99 dc[<0F0780308C40305C40703C20701C20F01C20F00E10F00E00F0
0E00F00E007807007807007807003807003C03801C03800E03800E03800705C00185C000F9C000
01C00000E00000E00000E00000E00000700000700000700000700000380000380000380003F800
003C>22 35 -5 0 25]100 dc[<0F80306070186004E002E002E000E000E000E000F000F000FF
E0F018780438023C021C020E02038400F8>15 21 -6 0 22]101 dc[<3C0000620000F30000F1
800071800001C00001C00000C00000E00000E00000E00000E00000700000700000700000700000
7000003800003800003800003800003800001C00001C00001C00001C00001C00000E00000E0000
0E0000FFF0000E0000070000070000070000070000070000038000038000038000018600018F00
00CF00004700003E>24 45 2 10 15]102 dc[<3F800060E000F03000F01800701C00000E0000
0E00000E0000070000070001E700061700060B800E07800E03801E03801E01C01E01C01E01C01E
01C00F00E00F00E00F00E00700E007807003807001C07001C07000E0B80030B8001F18>21 31
-2 10 22]103 dc[<6003C0E00620700610700E10700E08700708380704380380380380380380
1C01C01C01C01C01C01C01C00E00E00E00E00F00E00F00E007C0C0072180071F00070000038000
03800003800003800001C00001C00001C00001C00000E00000E00000E0000FE00000F000>22 35
-3 0 25]104 dc[<1C00320071007080708070803840380038001C001C001C000E000E00870087
0087004300430023001C000000000000000000000000000000000001C001C001E000C0>11 33
-5 0 15]105 dc[<3C0000630000F18000F0C00070E00000700000700000700000380000380000
3800003800001C00001C00001C00001C00000E00000E00000E00000E0000070000070000070000
0700010380010380008380008380004380002300001E0000000000000000000000000000000000
00000000000000000000C00001E00001E00000E0>19 43 2 10 15]106 dc[<600F00E0188070
1880703840703840703840381C20381C003838003838001C70001FC0001E00001D80000E40000E
20600E10F00E10F0070C700702100701E007000003800003800003800003800001C00001C00001
C00001C00000E00000E00000E0000FE00000F000>20 35 -3 0 22]107 dc[<38006400E200E2
00E200E200710070007000700038003800380038001C001C001C001C000E000E000E000E000700
070007000700038003800380038001C001C001C01FC001E0>11 35 -4 0 12]108 dc[<300300
1E00700700310038038030803803807080380380704038038038401C01C038201C01C01C001C01
C01C001C01C01C000E00E00E000E00E00E000E00E00E000E00E00E008700700700870070070087
80780700878078070047606606002610C10C001C0F80F800>35 21 -5 0 40]109 dc[<3003C0
700620380610380E10380E083807081C07041C03801C03801C03800E01C00E01C00E01C00E01C0
8700E08700E08780E08780E04740C02631C01C0F00>22 21 -5 0 27]110 dc[<07C000187000
301800700C00700E00700700F00780F00380F003C0F003C07801E07801E07801E03801E03C01E0
1C01E00E01C00701C003818001C300007E00>19 21 -5 0 25]111 dc[ 1C00000E00000E00000E00000E0000070000070000071E0007238003C1C003C0E0038070038070
01C07801C03C01C03C01C03C00E01E00E01E00E01E00E01E08701E08700E08700E08780C04741C
02621801C1F0>23 31 -1 10 25]112 dc[<3000007000003800003800003800003800001C0000
1C00001C00001C00000E00000E00000E00000E00008700008701808703C08783C04741C0262080
1C1F00>18 21 -5 0 21]114 dc[<1FC000203000400800E00400F00600F00600700700000700
000F00003E0003FE0007FC000FF0000F00000C00000C03000C038004018002008001830000FC00
>17 21 -3 0 20]115 dc[<1E003100708070407020702038103800380038001C001C001C001C
000E000E000E000E0007000700FFF80700038003800380038001C001C001C001C000C0>13 31
-4 0 16]116 dc[<07C3C00C26201C1E201C0E10180E101C0E101C07081C07001C07001C07000E
03800E03800E03800703808701C08701C08381C04381C04380E02300E01E0060>21 21 -5 0 26
]117 dc[<03C0000C30001C08001C08001C04001C02001C02001C01001C01001C01000E00800E
00800E00800700808700C08700C08381C04383C04387C02307C01E0380>18 21 -5 0 22]118
dc[<03E0F00006138C000C0F02001C0F01001C0701001C0700801C0700801C0700401C0700401C
0700400E0380200E0380200E038020070380208701C0308701C0308381C0704381C0F04380E1F0
2300E1F01E0060E0>28 21 -5 0 32]119 dc[<383C00446200E2C100F1C080F1C04061C04000
E02000E00000E00000E0000070000070000070000070002038002038602038F0103CF008347004
621003C1E0>20 21 -3 0 22]120 dc[<3E000043800080C000E06000F03000F03800601C0000
1C00000E00000E0003CE000C3E001C0F001C07001C07001C07001C03801C03801C03801C03800E
01C00E01C00E01C00701C08700E08700E08380E04380E04380702300701E0030>20 31 -5 10
24]121 dc[<80700040F80061FC003F0600100300080100040080020000010000008000004000
002000001000000800000400080200080100041F8007F8C003F06001E020>19 21 -3 0 20]
122 dc dfend /fh df[<0F01C018C620302620701E10700E10F00E10F00708F00700F00700F0
07007803807803807803803803803C01C01C01C00E01C00601C00302E001C4E0007860>21 21
-2 0 26]97 dc[<0F000030C000307000603800601C00E01C00E01E00E00F00E00F00E00F0070
07807007807007807007803807803803803803803C07001E07001D8E001C78001C00000E00000E
00000E00000E00000700000700000700000700000380000380000380003F800003C000>17 35
-3 0 21]98 dc dfend /fi df[<7FE3FF80070078000700700007007000070070000700700007
007000070070000700700007007000070070000700700007007000070070000700700007007000
07007000070070000700700007007000FFFFFFC007007000070070000700700007007000070070
00070070000700700007007000070070000380F0780180F87800C07C7800706E30001F83E0>29
35 0 0 28]11 dc[<7FE1FF800700380007003800070038000700380007003800070038000700
380007003800070038000700380007003800070038000700380007003800070038000700380007
0038000700380007007800FFFFF800070000000700000007000000070000000700000007000000
070000000700300007007800038078000180380000C0100000702000001FC000>25 35 0 0 27]
12 dc[<7FF3FF8007003800070038000700380007003800070038000700380007003800070038
000700380007003800070038000700380007003800070038000700380007003800070038000700
380007003800FFFFF8000700380007003800070038000700380007003800070038000700380007
00380007003800038078000180780000C0780000703800001FD800>25 35 0 0 27]13 dc[<7F
F1FFCFFE07001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E0
07001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00
E007001C00E007001C00E007001C00E007001C01E0FFFFFFFFE007001C000007001C000007001C
000007001C000007001C000007001C000007001C000007001C00C007003C01E003803E01E00180
1E00E000E00B0040007031C080000FC07F00>39 35 0 0 41]14 dc[<40202010100810080804
08040402040204020402743AFC7EFC7EF87C7038>15 15 -2 -20 24]34 dc[<0400003C000C00
004200060000C100030001810003000380800180030080018003004000C0070040006007004000
60070040003007004000180700400018070040000C070040000603004000060300800003038080
0003018100000180C1000000C042000780C03C0018406000001820300000301030000070101800
006010180000E0080C0000E008060000E008060000E008030000E008018000E008018000E00800
C000E0080060006013FF6000701C00B000301000700018200018001840000C000780000C00>34
40 -3 3 41]37 dc[<4020101008080404040474FCFCF870>6 15 -4 -20 14]39 dc[<002000
40008001000300060004000C000C00180018003000300030007000600060006000E000E000E000
E000E000E000E000E000E000E000E000E000E000E0006000600060007000300030003000180018
000C000C000400060003000100008000400020>11 50 -4 13 19]40 dc[<8000400020001000
18000C000400060006000300030001800180018001C000C000C000C000E000E000E000E000E000
E000E000E000E000E000E000E000E000E000C000C000C001C00180018001800300030006000600
04000C0018001000200040008000>11 50 -3 13 19]41 dc[<00800000800000800000800000
8000C08180E08380388E000C980003E00001C00003E0000C9800388E00E08380C0818000800000
8000008000008000008000>17 21 -3 -16 24]42 dc[<00018000000180000001800000018000
000180000001800000018000000180000001800000018000000180000001800000018000000180
000001800000018000FFFFFFFEFFFFFFFE00018000000180000001800000018000000180000001
800000018000000180000001800000018000000180000001800000018000000180000001800000
018000>31 34 -3 5 38]43 dc[<4020101008080404040474FCFCF870>6 15 -4 10 14]44 dc
[11 2 -1 -10 16]45 dc[<70F8F8F870>5 5 -4 0 14]46 dc[ 00006000006000006000003000003000003000001800001800001800000C00000C00000C000006
000006000006000003000003000003000001800001800001800001800000C00000C00000C00000
6000006000006000003000003000003000001800001800001800000C00000C00000C0000060000
0600000600000300000300000300000180000180000080>17 49 -3 12 24]47 dc[<01F00007
1C000C06001C07003803803803807803C07001C07001C07001C0F001E0F001E0F001E0F001E0F0
01E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E07001C07001C07001C070
01C03803803803801803000C0600071C0001F000>19 34 -2 1 24]48 dc[ 038003800380038003800380038003800380038003800380038003800380038003800380038003
8003800380038003800380F3800F8003800080>15 33 -4 0 24]49 dc[ 30004018006008002004002002002001000001800000C000006000003000001800001C00000E00
0007000007800003C00003C00003E02003E0F801E0F801E0F801E0F003E08003E04003C04003C0
2007801007000C1C0003F000>19 33 -2 0 24]50 dc[<03F0000C1C00100F0020078040078040
03C0F003C0F803E0F803E07003E02003E00003E00003C00003C0000780000780000F00001C0003
F000003800000E00000F000007000007800007803807C07807C07803C07807C04007C020078010
07000C1E0003F800>19 34 -2 1 24]51 dc[<01FFF0001F00000E00000E00000E00000E00000E
00000E00000E00FFFFF8800E00400E00200E00200E00100E00100E00080E00040E00040E00020E
00020E00010E00008E00008E00004E00004E00002E00001E00001E00000E00000E000006000002
00>21 33 -1 0 24]52 dc[<03F0000C1C001006002007004003804003C08001C0E001C0F001E0
F001E07001E00001E00001E00001E00001E00001C00001C0100380180380140700130E0010F800
10000010000010000010000010000010000013E0001FF8001FFE001FFF001E0700100080>19 34
-2 1 24]53 dc[<01F000070C000C06001C03001803803801C03801C07001E07001E07001E0F0
01E0F001E0F001E0F001E0F001E0F001C0F801C0F80380F40300F40600F30C00F0F80070000070
00007800003800003800001801801C03C00E03C00601C003008001C100007E00>19 34 -2 1 24
]54 dc[<01800003C00003C00003C00003C00003C00003C00003C00003C00001C00001C00001C0
0001C00000C00000C00000E0000060000060000060000020000030000010000008000008000004
00800200800200800100C001004000807FFFC07FFFC07FFFE0600000400000>19 35 -3 1 24]
55 dc[<03F0000E0E001803003000806000C0600040C00060C00060C00060C00060C000E06000
E06001C03007C0100F80083F80067F0003FC0003F8000FF8001FC4003F02003E01007801807000
C06000C06000C06000C02000C0200180100180080300060E0001F800>19 34 -2 1 24]56 dc[<
0FC000103000201800700C007806007807003003000003800003800001C00001C00001C003E1E0
0619E00C05E01805E03803E07003E07001E0F001E0F001E0F001E0F001E0F001E0F001C0F001C0
F001C07003807003803803801807000C0600060C0001F000>19 34 -2 1 24]57 dc[<70F8F8F8
70000000000000000000000070F8F8F870>5 21 -4 0 14]58 dc[<4040201010100808080878
F8F8F870000000000000000000000070F8F8F870>5 31 -4 10 14]59 dc[ 0000000000000000000000000000000000000000000000000000000000000000FFFFFFFEFFFFFF
FE>31 12 -3 -6 38]61 dc[<038007C007C007C0038000000000000000000000010001000100
01000100010001800080008000C000C0006000300038001C000E000FF00FF00FF00F800F400E20
1C183807E0>16 35 -3 0 23]63 dc[ E0040003E0020003C0020003C0030007C0010007800100078000FFFF0000800F0000800F000040
1E0000401E0000401E0000203C0000203C0000203C0000107800001078000010F8000008F00000
08F000000DF0000005E0000005E0000003C0000003C0000003C000000180000001800000018000
>32 35 -2 0 37]65 dc[ 078000F8078000F8078000F8078000F8078000F8078000F0078001F0078001E0078003C0078007
8007FFFE0007803E0007800F80078007C0078003E0078001E0078001F0078001F0078001F00780
01F0078001F0078001E0078003E0078003C0078007800F800E00FFFFF800>29 34 -2 0 35]66
dc[<0007E00000381C0000E0020001C0010003800080070000400E0000401E0000201C0000203C
0000103C0000107C0000107800001078000000F8000000F8000000F8000000F8000000F8000000
F8000000F8000000F800000078000010780000107C0000103C0000303C0000301C0000301E0000
700E000070070000F0038000F001C0017000E00630003818300007E010>28 36 -3 1 35]67 dc
[ 007C0780003C0780003C0780003E0780003E0780003E0780003E0780003E0780003E0780003E07
80003E0780003E0780003C0780003C0780003C0780007C0780007807800078078000F0078000E0
078001C0078003C0078007000F801E00FFFFF000>31 34 -2 0 37]68 dc[ 078000E00780007007800030078000300780001007800010078000100780000807800008078020
08078020000780200007802000078060000780E00007FFE0000780E00007806000078020000780
20000780200007802020078000200780002007800020078000600780004007800040078000C007
8001C00F8007C0FFFFFFC0>29 34 -2 0 33]69 dc[ 800000078000000780000007800000078000000780000007800000078020000780200007802000
07802000078060000780E00007FFE0000780E00007806000078020000780200007802000078020
20078000200780002007800020078000600780004007800040078000C0078001C00F8007C0FFFF
FFC0>27 34 -2 0 32]70 dc[<0007F000003C0C0800E0031801C000B8038000B8070000780F00
00781E0000781E0000783C0000783C0000787C00007878000078780000F8F8001FFFF8000000F8
000000F8000000F8000000F8000000F8000000F800000078000008780000087C0000083C000018
3C0000181E0000181E0000380F00003807000078038000F801C001B800E00218003C0C180007F0
08>32 36 -3 1 38]71 dc[ E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E00780
01E007FFFFE0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E007
8001E0078001E0078001E0078001E0078001E0078001E00FC003F0FFFC3FFF>32 34 -2 0 37]
72 dc[ 80078007800780078007800780078007800780078007800780078007800FC0FFFC>14 34 -2 0
18]73 dc[<07C000187000203800401C00F01E00F80E00F80F00F80F00700F00000F00000F0000
0F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000
0F00000F00000F00000F00000F00000F00000F00000F00000F00001F0003FFF0>20 35 -2 1 25
]74 dc[ 078007C000078007800007800F000007800F000007801E000007803C000007C03C000007A07800
000790F000000788F000000789E000000787E000000783C0000007818000000780800000078040
000007802000000780100000078008000007800400000780020000078001000007800080000780
00400007800060000FC000F800FFFC03FF00>33 34 -2 0 38]75 dc[ 0F0007800300078003000780010007800180078001800780008007800080078000800780008007
800000078000000780000007800000078000000780000007800000078000000780000007800000
078000000780000007800000078000000780000007800000078000000780000007800000078000
000FC00000FFFE0000>25 34 -2 0 30]76 dc[ E00400F801E00400F801E00400F801E00401E401E00401E401E00401E401E00403C201E00403C2
01E004078101E004078101E004078101E0040F0081E0040F0081E0040F0081E0041E0041E0041E
0041E0043C0021E0043C0021E0043C0021E004780011E004780011E004780011E004F00009E004
F00009E004F00009E005E00005E005E00005E007C00003E00FC00003F0FFC00003FF>40 34 -2
0 45]77 dc[ 0007A004000F2004000F2004001E2004003E2004003C20040078200400F8200400F0200401E020
0401E0200403C0200407802004078020040F0020041F0020041E0020043C0020047C0020047800
2004F0002004F0002005E0002007C0007007C000F8FF8007FF>32 34 -2 0 37]78 dc[<000FE0
0000783C0000E00E0003C00780078003C00F0001E00F0001E01E0000F03E0000F83C0000787C00
007C7C00007C7800003CF800003EF800003EF800003EF800003EF800003EF800003EF800003EF8
00003EF800003E7800003C7800003C7C00007C7C00007C3C0000783C0000781E0000F00E0000E0
0F0001E0078003C003C0078000E00E0000783C00000FE000>31 36 -3 1 38]79 dc[ 0FC000000780000007800000078000000780000007800000078000000780000007800000078000
00078000000780000007800000078000000780000007FFF00007803C0007800F00078007800780
07C0078003C0078003E0078003E0078003E0078003E0078003E0078003E0078003C0078007C007
80078007800F000F803C00FFFFF000>27 34 -2 0 33]80 dc[<000001E0000003F8000007F800
0007FC000007FC00000F0E00000E0600000C0200000C02000FEC02007C3C0200E80E0003C81780
078813C00F0801E00E0420E01E0380F03C0000783C0000787C00007C7C00007C7800003CF80000
3EF800003EF800003EF800003EF800003EF800003EF800003EF800003EF800003E7800003C7800
003C7C00007C7C00007C3C0000783E0000F81E0000F00E0000E00F0001E0078003C003C0078000
E00E0000783C00000FE000>31 45 -3 10 38]81 dc[<0000007C00FFFC01E2000FC003C10007
8007C08007800FC08007800F808007800F800007800F800007800F800007800F000007800F0000
07800F000007800F000007800E000007801E000007801C00000780380000078070000007FFE000
0007803C000007800E00000780078000078007C000078003C000078003E000078003E000078003
E000078003E000078003E000078003C000078007C000078007800007800E00000F803C0000FFFF
E00000>33 35 -2 1 36]82 dc[<81FC00C60700C80180F000C0E000C0C00060C0006080007080
00708000708000700000700000F00000F00001E00007E0003FC003FF800FFF001FFE003FF0007F
0000780000F00000F00000E00020E00020E00020E00060E000606000607000E03001E01802600C
0C6003F020>20 36 -3 1 27]83 dc[<03FFFF00000FC000000780000007800000078000000780
000007800000078000000780000007800000078000000780000007800000078000000780000007
800000078000000780000007800000078000000780000007800000078000800780048007800480
07800480078004C007800C40078008400780084007800860078018780780787FFFFFF8>30 34
-2 0 35]84 dc[<0003F000001C0800003006000060010000E0008001C0008003C0004003C000
400380004007800020078000200780002007800020078000200780002007800020078000200780
002007800020078000200780002007800020078000200780002007800020078000200780002007
80002007800020078000200780002007800020078000700FC000F8FFFC07FF>32 35 -2 1 37]
85 dc[<0000C000000000C000000000C000000001E000000001E000000003F000000003D00000
0003D0000000078800000007880000000F8C0000000F040000000F040000001F020000001E0200
00001E020000003C010000003C010000007C0180000078008000007800800000F000400000F000
400000F000400001E000200001E000200003E000300003C000100003C000100007800008000780
0008000780000C000F00000C001F80001F00FFF0007FC0>34 35 -1 1 37]86 dc[<0002000080
0000030001800000070001C00000070001C00000070001C000000F8003E000000F8003E000000F
8003E000001E40079000001E40079000001E40079000003C200F0800003C200F0800003C200F08
00007C101E04000078101E04000078101E040000F8183E060000F0083C020000F0083C020000F0
083C020001E00478010001E00478010001E00478010003C002F0008003C002F0008003C002F000
80078001E00040078001E00040078001E000400F0003C000200F0003C000200F0003C000701F80
07E000F8FFF03FFC03FE>47 35 -1 1 50]87 dc[ F000010001F000008001E00000C003E000004007C000002007800000300F800000101F00000008
1E0000000C3E000000047C000000027800000003F800000001F000000001E000000003E0000000
07C000000007A00000000FB00000001F100000001E080000003E0C0000007C0400000078020000
00F803000000F001000001E000800003E000C00003C000E00007E001F8007FF807FF00>34 34
-1 0 37]88 dc[<003FFF00000003E000000001E000000001E000000001E000000001E0000000
01E000000001E000000001E000000001E000000001E000000001E000000001E000000001E00000
0003E000000003D000000007D800000007880000000F840000001F040000001E020000003E0100
00003C010000007C00800000F800C00000F000400001F000200001E000200003E000100007C000
180007800008000F80000C001F80001F00FFF0007FC0>34 34 -1 0 37]89 dc[ C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
C0C0FEFE>7 49 -5 12 14]91 dc[<381C7C3EFC7EFC7EB85C8040804080408040402040202010
201010080804>15 15 -6 -20 24]92 dc[ 0606060606060606060606060606060606060606060606060606FEFE>7 49 -1 12 14]93 dc[<
387CFCFCB880808080404020201008>6 15 -3 -20 14]96 dc[<0FC1E03C2390781708F00F08
F00708F00708F007087007007807003C07001E070007C70000FF00000700000700000700180700
3C0E003C0C001838000FE000>21 21 -2 0 24]97 dc[<083F000C41C00C80600F00700E00380E
003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E001C0E003C0E00380F00300E
80600E61C00E1F000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
00001E0000FE00000E0000>23 35 -1 0 27]98 dc[<01F8000706000C01001C00803800407800
40700000F00000F00000F00000F00000F00000F00000F000007000007800003803001C07800C07
8007030001FE00>18 21 -2 0 22]99 dc[<01F0FE070CF00C02E01801E03800E07800E07000E0
F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E03800E01C01E00C02E00704E0
01F8E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00001E0
000FE00000E0>23 35 -2 0 27]100 dc[<00FC000703000E00801C0040380020780020700000
F00000F00000F00000F00000F00000FFFFE0F000E07000E07801E03801C01C01C00C0380070700
01FC00>19 21 -1 0 22]101 dc[<7FF807800700070007000700070007000700070007000700
07000700070007000700070007000700FFF8070007000700070007000700070007000700030F03
8F018F00C6003C>16 35 0 0 15]102 dc[<03FE000E03803800E0600030600030C00018C00018
C000184000186000303800F00FFFE00FFFC01FFE0018000018000010000010000019F0000F1C00
0E0E001C07001C07003C07803C07803C07803C07801C07001C07000E0E18071E1801F198000070
>21 33 -1 11 24]103 dc[ 0E00700E00700E00700E00700E00700E00700E00700F00700F00700E80E00E60C00E1F800E0000
0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00001E0000FE00000E0000
>24 35 -1 0 27]104 dc[ 000E000E000E000E001E00FE000E00000000000000000000000000000000001C001E003E001E00
1C00>10 34 -1 0 14]105 dc[<3E006180F180F0C060E000E000E000E000E000E000E000E000
E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E001E00FE001E00000
000000000000000000000000000001C003E003E003E001C0>11 44 2 10 15]106 dc[ 0E00F80E00F00E01E00E01C00E03C00E07800E07000E0E000E1E000F1C000EF8000E38000E1000
0E08000E04000E02000E01800E01C00E01F00E03FC0E00000E00000E00000E00000E00000E0000
0E00000E00000E00000E00000E00001E0000FE00000E0000>23 35 -1 0 26]107 dc[ 000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
0E000E000E000E000E000E000E000E000E000E000E001E00FE000E00>11 35 -1 0 14]108 dc[
00E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E00
3800E00F003C00E00F003C00E01E807201C0FE60E183800E1FC07F00>39 21 -1 0 42]109 dc[
700E00700E00700E00700F00700F00701E80E0FE60C00E1F80>24 21 -1 0 27]110 dc[<01FC
000707000E03801C01C03800E07800F0700070F00078F00078F00078F00078F00078F00078F000
787000707000703800E01800C00C018007070001FC00>21 21 -1 0 24]111 dc[ 000E00000E00000E00000E00000E00000E00000E00000E00000E3F000E41C00E80E00F00700E00
380E003C0E003C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E001C0E003C0E00380F00
700E8060FE61C00E1F00>23 31 -1 10 27]112 dc[<000FFE0000E00000E00000E00000E00000
E00000E00000E00000E00000E001F0E0070CE00C02E01C01E03801E07800E07000E0F000E0F000
E0F000E0F000E0F000E0F000E0F000E07800E07800E03801E01C01600E026007046001F820>23
31 -2 10 26]113 dc[ 000F000F060F0F1E8FFE460E3C>16 21 -1 0 19]114 dc[<8FC0D030E018C008C00C800C800C
801C003C01F80FF03FE07F80F000E008C008C008C018601830780F88>14 21 -2 0 19]115 dc[
<01F0030807080E040E040E040E040E040E040E000E000E000E000E000E000E000E000E000E00
0E00FFF83E001E000E000600060006000200020002000200>14 31 -1 0 19]116 dc[<00FC7F
0382780601700E00F00E00F00E00700E00700E00700E00700E00700E00700E00700E00700E0070
0E00700E00700E00700E00701E00F0FE07F00E0070>24 21 -1 0 27]117 dc[<001000003800
00380000380000740000740000E20000E20000E20001C10001C100038080038080038080070040
0700400E00200E00200E00301E0078FFC1FE>23 21 -1 0 26]118 dc[<006006000060060000
60060000F00F0000F00F0000F00D0001C81C8001C81C8001C81880038438400384384003843040
0702702007027020070260200E01E0100E01E0100E01C0181C01C0181E01E03CFF8FF8FF>32 21
-1 0 35]119 dc[ 380000780000780000E40001C2000383000381000700800E00C01F01F0FF83FE>23 21 -1 0 26
]120 dc[<3C0000430000F18000F08000F0400000400000200000200000200000100000100000
380000380000380000740000740000E20000E20000E20001C10001C10003808003808003808007
00400700400E00200E00200E00301E0078FFC1FE>23 31 -1 10 26]121 dc[ 01803800801C00800E00C00F004007004003804001C00001E00000E000007000403800403C0040
1C00600E002007003007803803803FFFC0>18 21 -1 0 22]122 dc[23 1 0 -12 24]
123 dc[48 1 0 -12 49]124 dc dfend /fj df[ 0000FE00060000FC00060001FC00030001F800030001F800018003F000018003F00001FFFFF000
00FFFFE00000C007E00000600FC00000600FC00000701FC00000301F800000303F800000183F00
0000183F0000000C7E0000000C7E0000000EFE00000006FC00000006FC00000003F800000003F8
00000001F000000001F000000001F000000000E000000000E00000>35 31 -2 0 40]65 dc[<0F
E07E3FF8FE7E0DE0FC05E0F803E0F803E0F803E07C03E03C03E01F03E007FBE0007FE00003E00C
03E03F03E03F03E03F07C03F0F801FFF0007FC00>23 20 -1 0 25]97 dc[<181F801C7FE01EC1
F81F807C1F007C1F003E1F003E1F003F1F003F1F003F1F003F1F003F1F003F1F003E1F003E1F00
7E1F807C1FE0F81F7FF01F1FC01F00001F00001F00001F00001F00001F00001F00001F00001F00
001F0000FF0000FF0000>24 32 -2 0 29]98 dc[<01FC0007FF001F81C03F00C03E00607E0000
7C0000FC0000FC0000FC0000FC0000FC0000FC00007C03007C0FC03E0FC03E0FC01F0FC007FF80
01FE00>19 20 -2 0 23]99 dc[ 00001F00001F00001F00001F00001F03001F8FC01E8FC01E8FC01ECFC0FE7F80FE3E00>18 20
-2 0 22]114 dc[ 06600E701E3FFE0FE6>16 20 -2 0 21]115 dc[<01F003F807CC0F860F860F860F860F860F80
0F800F800F800F800F800F800F800F800F80FFFCFFFC3F800F8007800380038003800180018001
80>15 29 -1 0 20]116 dc dfend /fk df[<7FE3FF0007007000070070000700700007007000
070070000700700007007000070070000700700007007000070070000700700007007000070070
0007007000070070000700700007007000FFFFFF80070070000700700007007000070070000700
700007007000070070000300F0300380F87801C0787800F06E30001F83E0>29 32 0 0 27]11
dc[<40201010080804040474FCFCF870>6 14 -4 9 13]44 dc[10 2 -1 -9 15]
45 dc[<70F8F8F870>5 5 -4 0 13]46 dc[ 07800780078007800780078007800780078007800780078007800780078007800780078007800F
C0FFFC>14 31 -1 0 16]73 dc[<001F800000F0F00001C0380007801E000F000F000E0007001E
0007803C0003C03C0003C07C0003E07C0003E0780001E0F80001F0F80001F0F80001F0F80001F0
F80001F0F80001F0F80001F0F80001F0F80001F0780001E0780001E07C0003E03C0003C03C0003
C01E0007800E0007000F000F0007801E0001C0380000F0F000001F8000>28 33 -3 1 35]79 dc
[<81F800CE0C00F00600E00300C00380C001808001C08001C08001C08001C00001C00003C00003
C0000780001F8003FF000FFE001FFC003FF0007F0000780000F00000F00000E00080E00080E000
80E001806001806001803003801007800C198007E080>18 33 -3 1 25]83 dc[<07FFFE00001F
8000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000
800F0010800F0010800F0010800F0010C00F0030400F0020400F0020600F0060780F01E07FFFFF
E0>28 31 -2 0 33]84 dc[<0F83C0386720781E10F01E10F00E10F00E10F00E10780E00380E00
1E0E00078E0000FE00000E00000E00000E00300E00781C007818003030001FE000>20 20 -2 0
23]97 dc[<083E000CC3000D01C00F00E00E00E00E00700E00700E00780E00780E00780E00780E
00780E00780E00700E00700E00E00F00E00F01C00EC3800E3E000E00000E00000E00000E00000E
00000E00000E00000E00000E00000E0000FE00000E0000>21 32 -1 0 25]98 dc[<03F00E0C1C
023801380170007000F000F000F000F000F000F00070007000380C381E1C1E0E0C03F8>16 20
-2 0 20]99 dc[<03E3F80E1B801C0780380780380380700380700380F00380F00380F00380F0
0380F00380F003807003807003803803803803801C0780061B8003E38000038000038000038000
0380000380000380000380000380000380000380003F80000380>21 32 -2 0 25]100 dc[<01
F8000706000C0100180080380080700000700000F00000F00000F00000FFFF80F00380F0038070
03807007003807003807001C0E000E1C0003F000>17 20 -1 0 20]101 dc[<7FF00700070007
00070007000700070007000700070007000700070007000700070007000700FFF0070007000700
07000700070007000706038F018F00C6007C>16 32 0 0 14]102 dc[<03FC001C03803000C060
0060C00030C00030C00030C000306000703001E00FFFC01FFF803FFE0030000030000020000020
000033E0001E38001C1C00380E00780F00780F00780F00780F00780F00380E001C1C300E3C3003
E3300000E0>20 31 -1 10 23]103 dc[ 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00F01C00F01C00E81800E43000E3E000E
00000E00000E00000E00000E00000E00000E00000E00000E00000E0000FE00000E0000>22 32
-1 0 25]104 dc[ 000E000E007E000E000000000000000000000000001C001E003E001E001C00>10 31 0 0 12]
105 dc[<3F006180F0C0F060607000700070007000700070007000700070007000700070007000
700070007000700070007000700070007000F007F0007000000000000000000000000000E001F0
01F001F000E0>12 40 2 9 14]106 dc[ 1E000E1C000F38000EF8000E70000E30000E10000E08000E04000E02000E03000E03C00E0FF00E
00000E00000E00000E00000E00000E00000E00000E00000E00000E0000FE00000E0000>21 32
-1 0 24]107 dc[ 000E000E000E000E000E000E000E000E000E000E000E000E000E000E00FE000E00>11 32 0 0
12]108 dc[ 0E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00
E00E000F00F00E000F00F00E000E81C81C00FE618618000E1F01F000>35 20 -1 0 38]109 dc[
C00E01C00E01C00F01C00F01C00E8180FE43000E3E00>22 20 -1 0 25]110 dc[<01F800070E
001C03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E07000
E03801C03801C01C0380070E0001F800>20 20 -1 0 23]111 dc[ 000E00000E00000E00000E00000E00000E3E000EC3000F01C00F01E00E00E00E00F00E00700E00
780E00780E00780E00780E00780E00780E00700E00F00E00E00F00E00F01C0FEC3800E3E00>21
29 -1 9 25]112 dc[ 000F0C0F1E0F1EFE8C0E78>15 20 -1 0 18]114 dc[<8F80D060E030C018C018801880188038
00700FF03FE07F807800E000C010C010C010403030701F90>13 20 -2 0 18]115 dc[<01E003
1006100E080E080E080E080E080E000E000E000E000E000E000E000E000E000E000E00FFF83E00
0E000E0006000600020002000200>13 28 -1 0 18]116 dc[<01F1FC030DC00603C00E03C00E
01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E
01C0FE1FC00E01C0>22 20 -1 0 25]117 dc[<00200000700000700000700000E80000E80001
EC0001C40001C4000382000382000382000701000701000E00800E00800E00801C00C01E01E0FF
83F8>21 20 -1 0 24]118 dc[<004008000060180000E01C0000E01C0000F03C0001D03A0001
D0320003C8730003887100038861000704E0800704C0800707C0800E03C0400E0380400E038040
1C0380201C0300603C078070FF9FE1FC>30 20 -1 0 33]119 dc[<3C0000620000F10000F080
00F0800000400000400000400000200000200000700000700000700000E80000E80001EC0001C4
0001C4000382000382000382000701000701000E00800E00800E00801C00C01E01E0FF83F8>21
29 -1 9 24]121 dc dfend /fl df[<7F87F80E01C00E01C00E01C00E01C00E01C00E01C00E01
C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E00000E00000E00
000E00000E00000E01800E03C00703C003018001C180007E00>21 29 0 0 23]12 dc[<808040
402020101010100808080808086868F8F8F0F06060>13 12 -1 -17 21]34 dc[<804020101008
080868F8F060>5 12 -4 -17 12]39 dc[<004000800100020006000C000C0018001800300030
007000600060006000E000E000E000E000E000E000E000E000E000E000E000E000600060006000
700030003000180018000C000C0006000200010000800040>10 42 -3 11 16]40 dc[<800040
002000100018000C000C000600060003000300038001800180018001C001C001C001C001C001C0
01C001C001C001C001C001C0018001800180038003000300060006000C000C0018001000200040
008000>10 42 -2 11 16]41 dc[<000600000006000000060000000600000006000000060000
00060000000600000006000000060000000600000006000000060000FFFFFFE0FFFFFFE0000600
000006000000060000000600000006000000060000000600000006000000060000000600000006
00000006000000060000>27 28 -2 4 32]43 dc[<804020201010101070F0F060>4 12 -4 8
12]44 dc[11 2 0 -8 14]45 dc[<60F0F060>4 4 -4 0 12]46 dc[<07E00C3018
18300C300C700E60066006E007E007E007E007E007E007E007E007E007E007E007E007E0076006
6006700E300C300C18180C3003C0>16 29 -2 1 21]48 dc[ 07000700070007000700070007000700070007000700070007000700070007000700C7003F0007
000300>13 28 -4 0 21]49 dc[ 38001C001C000E000E000F7007F807F807F80FF00F400E400C201C183007C0>16 28 -2 0 21]
50 dc[<07E01830201C401CF00EF80FF80FF80F700F000F000F000E001C001C003007E0006000
300018001C001C381E781E780E781E201C201C183007E0>16 29 -2 1 21]51 dc[<01FFC0001C
00001C00001C00001C00001C00001C00001C00FFFFC0C01C00401C00201C00301C00101C00081C
000C1C00041C00021C00031C00011C00009C0000DC00005C00003C00003C00001C00000C00000C
00>18 28 -1 0 21]52 dc[<03E00C301818300C300E700660076007E007E007E007E007E007E0
06F00EF00CE818E430E3E0600070007000300C301E181E0C0E0604030C00F0>16 29 -2 1 21]
54 dc[<0300000780000780000780000780000780000780000380000380000380000380000180
0001800001C00000C00000C0000040000060000020000010000010008008008004008004004002
007FFF007FFF007FFF80400000>17 29 -2 1 21]55 dc[<07E01C10300C60046002C003C003C0
03C003C007600F601E307E18FC07F807F01FE03FB03E08780C70066006600660062006200C1008
0C3003E0>16 29 -2 1 21]56 dc[<0F8030C0203070107818780C300C000E0006000607C70C27
1817300F700F6007E007E007E007E007E007E006E006600E700C300C18180C3003C0>16 29 -2
1 21]57 dc[<60F0F0600000000000000000000060F0F060>4 18 -4 0 12]58 dc[<003FF000
00C01F80030001E0040000000800000010000000201F0F002070988040E0784040C0384041C038
208180382083803820838038208380382083803820838038208180382041C0384040C0384040E0
404020708080201F00801000010008000200040004000300180000C06000003F8000>27 29 -2
0 32]64 dc[ 007C0001FFF800010078000180F8000080F0000080F0000041E0000041E0000041E0000023C000
0023C0000023C000001780000017800000178000000F0000000F0000000F000000060000000600
0000060000>28 29 -1 0 31]65 dc[ 0F0F000F0F000F0F000E0F001E0F003C0F00780FFFE00F01F00F00780F003C0F001C0F001E0F00
1E0F001E0F001E0F001C0F003C0F00380F00F0FFFFC0>24 28 -2 0 29]66 dc[<001FC00000E0
300001800800070004000E0002001C0001001C00010038000080780000807800008070000080F0
000000F0000000F0000000F0000000F0000000F0000000F0000000F00000007000008078000080
78000080380001801C0001801C0003800E000380070007800180198000E06180001F8080>25 30
-2 1 30]67 dc[ C00F0001C00F0001C00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F00
01E00F0001C00F0001C00F0003C00F0003800F0007000F0007000F000E000F003C000F00F000FF
FFC000>27 28 -2 0 32]68 dc[ 000F000F000F000F000F000F000F000F000F000F000F000F000F000F00FFF0>12 28 -1 0 15]
73 dc[ 000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00
000F00000F8000FFF800>21 28 -2 0 26]76 dc[<83F800CC0C00D00200E00300C00180C00180
8001C08001C08001C00001C00003C00007C0000F8000FF8007FF001FFE003FF8007FC0007C0000
F80000F00000E00080E00080E00080E001806001807003803005801C198007E080>18 30 -2 1
23]83 dc[<03FFFC00001F8000000F0000000F0000000F0000000F0000000F0000000F0000000F
0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
0F0000800F0020800F0020800F0020C00F0020400F0040400F0040600F00C0700F01C07FFFFFC0
>27 28 -1 0 30]84 dc[<001F00000070C00000C0200001801000038010000780080007000800
0F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004
000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F00
04000F000E00FFF07FC0>26 29 -2 1 31]85 dc[<001800180000180018000018001800003C00
3C00003C003C00003C003C00003E007C00007A007A00007A007A00007900FA0000F100F10000F1
00F10000F100F10001E081E08001E081E08001E081E08003E043C04003C043C04003C043C04003
C02780400780278020078027802007801F00200F001F00100F001F00100F001F00101E001E0018
1F001F003CFFE0FFE0FF>40 29 -1 1 43]87 dc[ 3C0001007C000080780000C0F8000041F0000021E0000023E0000013C000000F8000000F800000
0F0000001F0000001E0000003D0000007D80000078800000F0400001F0600001E0200003E01000
03C01800078018000FC03E007FF0FFC0>28 28 -1 0 31]88 dc[ C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE>7 41 -4 10 12]91 dc
[<30307878F8F8B0B080808080808040404040202010100808>13 12 -6 -17 21]92 dc[ 06060606060606060606060606060606060606060606060606060606060606060606060606FEFE
>7 41 0 10 12]93 dc[<1F8700304E80603C40E01C40E01C40E01C40601C00701C00381C000F
1C0001FC00001C00001C00301C00781C007838003070001FC000>18 18 -2 0 21]97 dc[<10F8
001906001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C00C01C01
C01C01801E03001D86001C7C001C00001C00001C00001C00001C00001C00001C00001C00001C00
001C0000FC0000>19 29 -1 0 23]98 dc[<07C00C301808300470046000E000E000E000E000E0
00E00060007030307818780C3007E0>14 18 -2 0 18]99 dc[<07C7E00C3700180F0030070070
0700600700E00700E00700E00700E00700E00700E00700600700700700300700180F000C170003
E700000700000700000700000700000700000700000700000700000700000700003F00>19 29
-2 0 23]100 dc[<03E00C181804300270026000E000E000E000E000FFFEE0066006700E300C18
180C3003E0>15 18 -1 0 18]101 dc[<7FE00E000E000E000E000E000E000E000E000E000E00
0E000E000E000E000E000E00FFE00E000E000E000E000E000E000E0C061E071E018C00F8>15 29
0 0 13]102 dc[<07F8001C0E00300300600180C000C0C000C0C000C06001C03003801FFF801F
FF001FF80018000030000010000013C0000C30001C3800181800381C00381C00381C00381C0018
18001C38800C38C003C4C0000380>18 28 -1 9 21]103 dc[ 03801C03801C03801C03801C03801C03801C03801C03801C03801C03801E03801D03001C87001C
7C001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0000FC0000>20 29
-1 0 23]104 dc[ 001C00FC00000000000000000000000000000018003C003C001800>9 29 -1 0 12]105 dc[<3E
006180F1C0F0C060E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E00FE0000000000000000000000000000000C001E001E000C0>11 37 3 8
13]106 dc[ 1C40001C20001C10001C08001C0C001C0F001C3FC01C00001C00001C00001C00001C00001C0000
1C00001C00001C00001C0000FC0000>19 29 -1 0 22]107 dc[ 1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C
001C001C00FC00>9 29 -1 0 12]108 dc[ 01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00
1C01C01C001C01C01C001E01E01C001D019018001C83883800FC7E07E000>33 18 -1 0 36]
109 dc[ 801C03801C03801E03801D03001C8700FC7C00>20 18 -1 0 23]110 dc[<03F0000E1C001806
00300300700380600180E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806
000E1C0003F000>18 18 -1 0 21]111 dc[ 001C00001CF8001D06001E03001C01801C01C01C01C01C00E01C00E01C00E01C00E01C00E01C00
E01C00C01C01C01C01801E03001D8600FC7C00>19 26 -1 8 23]112 dc[ 1C001C001C001C001C001C001C001C001C001C301E781E781D30FCE0>13 18 -1 0 16]114 dc[
<8FC0D060E010C018C0188018803800F80FF03FE07F80F800E010C010C010403030701F90>13
18 -1 0 16]115 dc[<03C00E200C101C101C101C101C101C101C001C001C001C001C001C001C
001C001C00FFE03C001C000C000C000400040004000400>12 26 -1 0 16]116 dc[<03E3F00E
1B800C07801C07801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
03801C03801C0380FC1F80>20 18 -1 0 23]117 dc[<00400000E00000E00000E00001D00001
D00003D8000388000388000704000704000704000E02000E02001C01001C01003C0380FF07E0>
19 18 -1 0 22]118 dc[<008020000180300001C0700001C0700003C0680003A0E80003A0E800
0720C4000711C4000711C4000E1182000E0B82000E0B82001C0B01001C0701001C0701803C0F03
80FF3FCFE0>27 18 -1 0 30]119 dc[ F80000780000700000F00001D80001C8000384000702000F03000F03807F8FF0>21 18 0 0 22]
120 dc[<3C0000660000F30000F10000F0800000800000800000400000400000E00000E00000E0
0001D00001D00003D8000388000388000704000704000704000E02000E02001C01001C01003C03
80FF07E0>19 26 -1 8 22]121 dc[ C040E040F04070603870387FFC>14 18 -1 0 18]122 dc dfend /fm df[<7FF0070007000700
07000700070007000700070007000700070007000700070007000700FF0007000300>12 21 -2
0 18]49 dc[ 388030407030E00F80>13 21 -2 0 18]50 dc[<0FE030304018C00CE00EE00E000E000E000C00
18003007E0006000380018001C701C701C601830300FE0>15 21 -1 0 18]51 dc[<03FE007000
70007000700070FFFEC0704070207010701870087004700270017001F000F0007000300030>15
21 -1 0 18]52 dc dfend /fn df[<0F0030C0606060604020C030C030C030C030C030C030C0
30C030C03040206060606030C00F00>12 19 -2 0 17]48 dc[ 000C000C000C000C000C000C000C000C000C00EC001C000C00>10 19 -3 0 17]49 dc[ E020201010081004000200018001C000C00060007000706030F030F070606060C01F00>12 19
-2 0 17]50 dc[<1FC06070E038F018F01C601C001C0018003800700FC000E000300038703870
38703830700FC0>14 19 -1 0 17]51 dc[<03FC00600060006000600060FFFCC0606060206010
6008600C6006600260016000E000E00060>14 19 -1 0 17]52 dc dfend bop 420 396 a fa
(Designing)31 b(Reuseable)f(Classes)721 544 y fd(Ralph)20 b(E.)f(Johnson)799
619 y(Brian)i(F)-5 b(o)r(ote)518 768 y(Departmen)n(t)19 b(of)h(Computer)g(Sci\
ence)415 843 y(Univ)n(ersit)n(y)e(of)i(Illinois,)e(Urbana-Champaign)411 918 y
(Journal)i(of)g(Ob)s(ject-Orien)n(ted)i(Programming)752 993 y(June/July)d(198\
8)743 1109 y(August)h(26,)f(1991)855 1344 y fj(Abstract)315 1426 y fk(Ob)s
(ject-orien)o(ted)13 b(programming)e(is)i(as)f(m)o(uc)o(h)g(a)g(di\013eren)o
(t)g(w)o(a)o(y)g(of)f(designing)246 1483 y(programs)17 b(as)g(it)h(is)g(a)f
(di\013eren)o(t)h(w)o(a)o(y)e(of)h(designing)i(programming)e(languages.)246
1539 y(This)h(pap)q(er)f(describ)q(es)i(what)d(it)h(is)h(lik)o(e)g(to)e(desig\
n)i(systems)e(in)i(Smalltalk.)26 b(In)246 1596 y(particular,)15 b(since)g(a)e
(ma)s(jor)g(motiv)m(ation)h(for)f(ob)s(ject-orien)o(ted)h(programming)f(is)
246 1652 y(soft)o(w)o(are)k(reuse,)i(this)g(pap)q(er)g(describ)q(es)h(ho)o
(w)e(classes)h(are)f(dev)o(elop)q(ed)j(so)d(that)246 1709 y(they)e(will)h(b)q
(e)e(reuseable.)125 1875 y fb(1)82 b(In)n(tro)r(duction)125 1984 y fi(Ob)s
(ject-orien)o(ted)9 b(programming)g(is)i(often)g(touted)g(as)g(promoting)f
(soft)o(w)o(are)h(reuse[Fis87].)125 2045 y(Languages)16 b(lik)o(e)c(Smalltalk)
h(are)h(claimed)e(to)i(reduce)g(not)g(only)h(dev)o(elopmen)n(t)d(time)g(but)
125 2105 y(also)19 b(the)g(cost)g(of)h(main)o(tenance,)d(simplifying)f(the)j
(creation)g(of)g(new)g(systems)f(and)i(of)125 2165 y(new)c(v)o(ersions)g(of)h
(old)f(systems.)21 b(This)16 b(is)h(true,)e(but)i(ob)s(ject-orien)o(ted)e(pro\
gramming)g(is)125 2225 y(not)h(a)g(panacea.)22 b(Program)16 b(comp)q(onen)o
(ts)f(m)o(ust)g(b)q(e)h(designed)g(for)g(reuseabilit)o(y)l(.)j(There)125 2285
y(is)f(a)h(set)f(of)h(design)f(tec)o(hniques)f(that)i(mak)o(es)e(ob)s(ject-or\
ien)o(ted)g(soft)o(w)o(are)i(more)e(reuse-)125 2346 y(able.)41 b(Man)o(y)22 b
(of)i(these)e(tec)o(hniques)g(are)h(widely)f(used)h(within)f(the)h(ob)s(ject-\
orien)o(ted)125 2406 y(programming)14 b(comm)o(unit)n(y)l(,)e(but)k(few)g(of)
g(them)e(ha)o(v)o(e)h(ev)o(er)f(b)q(een)i(written)f(do)o(wn.)22 b(This)125
2449 y 665 2 v 181 2480 a fn(0)199 2495 y fl(Authors')11 b(address:)17 b(Depa\
rtmen)o(t)10 b(of)g(Computer)f(Science,)j(1304)d(W)m(est)i(Spring\014eld)f
(Av)o(e.,)g(Urbana)125 2545 y(IL)j(61801)181 2579 y fn(0)199 2594 y fl(T)m
(elephone:)19 b(\(217\))13 b(244-0093,)e(\(217\))j(333-3411)181 2629 y fn(0)
199 2644 y fl(e-mail:)i([email protected],)e(fo)q([email protected])943 2769 y
fi(1)g eop bop 125 195 a fi(article)21 b(describ)q(es)i(and)g(organizes)h(the\
se)e(tec)o(hniques.)40 b(It)22 b(uses)i(Smalltalk)c(v)o(o)q(cabu-)125 255 y
(lary)l(,)f(but)h(most)f(of)h(what)h(it)e(sa)o(ys)h(applies)f(to)h(other)g
(ob)s(ject-orien)o(ted)f(languages.)32 b(It)125 315 y(concen)o(trates)15 b
(on)i(single)f(inheritance)f(and)i(sa)o(ys)f(little)f(ab)q(out)i(m)o(ultiple)
c(inheritance.)198 376 y(The)22 b(\014rst)h(second)f(of)h(the)f(pap)q(er)h
(describ)q(es)e(the)h(attributes)h(of)f(ob)s(ject-orien)o(ted)125 436 y(langu\
ages)c(that)f(promote)f(reusable)h(soft)o(w)o(are.)23 b(Data)18 b(abstraction)
g(encourages)f(mo)q(d-)125 496 y(ular)22 b(systems)g(that)h(are)f(easy)h(to)g
(understand.)41 b(Inheritance)22 b(allo)o(ws)g(sub)q(classes)i(to)125 556 y
(share)12 b(metho)q(ds)f(de\014ned)h(in)f(sup)q(erclasses,)i(and)g(p)q(ermits)
d(programming-b)o(y-di\013erence.)125 616 y(P)o(olymorphism)e(mak)o(es)i(it)h
(easier)g(for)h(a)g(giv)o(en)e(comp)q(onen)o(t)h(to)h(w)o(ork)f(correctly)f
(in)i(a)f(wide)125 677 y(range)16 b(of)h(new)f(con)o(texts.)21 b(The)16 b(com)
o(bination)e(of)j(these)f(features)g(mak)o(es)e(the)i(design)h(of)125 737 y
(ob)s(ject-orien)o(ted)e(systems)g(quite)g(di\013eren)o(t)g(from)g(that)i(of)
g(con)o(v)o(en)o(tional)d(systems.)198 797 y(The)22 b(middle)d(section)i(of)i
(the)e(pap)q(er)h(discusses)g(framew)o(orks,)g(to)q(olkits,)h(and)f(the)125
857 y(soft)o(w)o(are)c(lifecycle.)27 b(A)18 b(framew)o(ork)f(is)i(a)g(set)g
(of)g(classes)g(that)g(em)o(b)q(o)q(dies)f(an)h(abstract)125 917 y(design)e
(for)h(solutions)h(to)f(a)g(family)e(of)i(related)f(problems,)f(and)j(supp)q
(orts)g(reuses)e(at)i(a)125 978 y(larger)e(gran)o(ularit)o(y)f(than)i(classes\
.)24 b(During)17 b(the)g(early)f(phases)i(of)g(a)f(system's)f(history)l(,)125
1038 y(a)h(framew)o(ork)e(mak)o(es)g(hea)o(vier)h(use)h(of)g(inheritance)f
(and)h(the)g(soft)o(w)o(are)f(engineer)g(m)o(ust)125 1098 y(kno)o(w)i(ho)o
(w)h(a)f(comp)q(onen)o(t)g(is)g(implem)o(en)n(ted)e(in)h(order)i(to)g(reuse)f
(it.)27 b(As)18 b(a)g(framew)o(ork)125 1158 y(b)q(ecomes)d(more)g(re\014ned,)
h(it)g(leads)h(to)g("blac)o(k)f(b)q(o)o(x")i(comp)q(onen)o(ts)d(that)j(can)e
(b)q(e)h(reused)125 1218 y(without)f(kno)o(wing)g(their)g(implem)o(en)o(tati)
o(ons.)198 1279 y(The)c(last)g(section)f(of)h(the)g(pap)q(er)h(giv)o(es)e(a)h
(set)g(of)g(design)g(rules)g(for)g(dev)o(eloping)f(b)q(etter,)125 1339 y(more)
21 b(reusable)h(ob)s(ject-orien)o(ted)f(programs.)40 b(These)22 b(rules)h(can)
f(help)g(the)g(designer)125 1399 y(create)15 b(standard)j(proto)q(cols,)e(abs\
tract)h(classes,)f(and)h(ob)s(ject-orien)o(ted)e(framew)o(orks.)198 1459 y
(As)f(with)h(an)o(y)g(design)g(task,)f(designing)h(reusable)g(classes)g(requi\
res)e(judgemen)o(t,)g(ex-)125 1519 y(p)q(erience,)20 b(and)i(taste.)37 b(Ho)o
(w)o(ev)o(er,)21 b(this)g(pap)q(er)h(has)g(organized)f(man)o(y)f(of)i(the)f
(design)125 1579 y(tec)o(hniques)14 b(that)i(are)f(widely)g(used)h(within)f
(the)g(ob)s(ject-orien)o(ted)g(programming)f(com-)125 1640 y(m)o(unit)o(y)f
(so)k(that)g(new)f(designers)g(can)h(acquire)e(those)i(skills)e(more)g(quic)o
(kly)l(.)125 1806 y fb(2)82 b(Ob)5 b(ject-Orien)n(ted)26 b(Programming)125
1916 y fi(An)15 b(ob)s(ject)h(is)g(similar)e(to)j(a)f(v)m(alue)g(in)g(an)h
(abstract)g(data)g(t)o(yp)q(e|it)e(encapsulates)h(b)q(oth)125 1976 y(data)22 b
(and)g(op)q(erations)h(on)f(that)g(data.)39 b(Th)o(us,)23 b(ob)s(ject-orien)o
(ted)d(languages)j(pro)o(vide)125 2036 y(mo)q(dularit)o(y)13 b(and)j(informat\
ion-hiding,)e(lik)o(e)g(other)h(mo)q(dern)f(languages.)23 b(T)l(o)q(o)16 b
(m)o(uc)o(h)d(is)125 2096 y(made)g(of)j(the)e(similarities)e(of)k(data)f(abst\
raction)h(languages)g(and)g(ob)s(ject-orien)o(ted)e(lan-)125 2156 y(guages.)
23 b(In)16 b(our)h(opinion,)f(all)h(mo)q(dern)e(languages)j(should)f(pro)o
(vide)f(data)h(abstraction)125 2217 y(facilities.)k(It)c(is)f(therefore)h(mor\
e)f(imp)q(ortan)o(t)g(to)h(see)g(ho)o(w)g(ob)s(ject-orien)o(ted)f(languages)
125 2277 y(di\013er)g(from)f(con)o(v)o(en)o(tional)g(data)i(abstraction)g(lan\
guages.)198 2337 y(There)i(are)h(t)o(w)o(o)f(features)h(that)g(distinguish)g
(an)g(ob)s(ject-orien)o(ted)e(language)j(from)125 2397 y(one)h(based)g(on)h
(abstract)f(data)h(t)o(yp)q(es:)33 b(p)q(olymorphism)19 b(caused)k(b)o(y)e
(late-binding)h(of)125 2457 y(pro)q(cedure)17 b(calls)g(and)h(inheritance.)24
b(P)o(olymorphism)15 b(leads)i(to)h(the)f(idea)g(of)h(using)g(the)125 2518 y
(set)g(of)g(messages)g(that)g(an)h(ob)s(ject)e(understands)i(as)g(its)f(t)o
(yp)q(e,)f(and)i(inheritance)e(leads)125 2578 y(to)f(the)g(idea)g(of)h(an)f
(abstract)h(class.)22 b(Both)16 b(are)g(imp)q(ortan)o(t.)943 2769 y(2)g eop
bop 125 195 a fc(2.1)69 b(P)n(olymorphism)125 287 y fi(Op)q(erations)14 b(are)
h(p)q(erformed)e(on)i(ob)s(jects)f(b)o(y)f(\\sending)i(them)e(a)i(message")
1537 269 y fm(1)1556 287 y fi(.)20 b(Messages)125 348 y(in)d(a)h(language)g
(lik)o(e)e(Smalltalk)f(should)k(not)f(b)q(e)f(confused)h(with)f(those)h(in)g
(distributed)125 408 y(op)q(erating)f(systems.)k(Smalltalk)14 b(messages)i
(are)h(just)g(late-b)q(ound)g(pro)q(cedure)g(calls.)k(A)125 468 y(message)13 b
(send)i(is)f(implem)o(en)o(te)o(d)e(b)o(y)i(\014nding)h(the)f(correct)g(metho)
q(d)g(\(pro)q(cedure\))g(in)g(the)125 528 y(class)e(of)g(the)g(receiv)o(er)e
(\(the)i(ob)s(ject)f(to)i(whic)o(h)e(the)h(message)g(is)g(sen)o(t\),)g(and)h
(in)o(v)o(oking)e(that)125 588 y(metho)q(d.)28 b(Th)o(us,)20 b(the)f(expressi\
on)g fh(a)12 b fi(+)h fh(b)19 b fi(will)f(in)o(v)o(ok)o(e)f(di\013eren)o(t)h
(metho)q(ds)h(dep)q(ending)125 649 y(up)q(on)e(the)f(class)g(of)h(the)f(ob)s
(ject)f(in)h(v)m(ariable)g fh(a)p fi(.)198 709 y(Message)h(sending)g(causes)h
(p)q(olymorphism.)j(F)l(or)c(example,)e(a)i(metho)q(d)f(that)i(sums)125 769 y
(the)f(elemen)o(ts)f(in)h(an)i(arra)o(y)f(will)f(w)o(ork)h(correctly)e(whenev)
o(er)h(all)h(the)g(elemen)o(ts)d(of)j(the)125 829 y(arra)o(y)i(understand)i
(the)e(addition)h(message,)g(no)g(matter)f(what)h(classes)g(they)f(are)h(in.)
125 889 y(In)e(fact,)h(if)f(arra)o(y)g(elemen)o(ts)e(are)j(accessed)f(b)o(y)g
(sending)h(messages)f(to)h(the)f(arra)o(y)l(,)h(the)125 950 y(pro)q(cedure)g
(will)g(w)o(ork)h(whenev)o(er)e(it)i(is)f(giv)o(en)g(an)i(argumen)o(t)d(that)
i(understands)h(the)125 1010 y(arra)o(y)16 b(accessing)g(messages.)198 1070 y
(P)o(olymorphism)k(is)j(more)e(p)q(o)o(w)o(erful)i(than)h(the)f(use)g(of)g
(generic)f(pro)q(cedures)h(and)125 1130 y(pac)o(k)m(ages)18 b(in)f(Ada[Sei87)
o(].)25 b(A)17 b(generic)f(can)i(b)q(e)g(instan)o(tiated)f(b)o(y)g(macro)f
(substitution,)125 1190 y(and)24 b(the)f(resulting)g(pro)q(cedure)g(or)h(pac)
o(k)m(age)g(is)f(not)h(at)g(all)e(p)q(olymorphic.)42 b(On)23 b(the)125 1251 y
(other)g(hand,)j(a)f(Smalltalk)c(ob)s(ject)i(can)h(access)g(an)g(arra)o(y)g
(in)g(whic)o(h)f(eac)o(h)g(elemen)o(t)125 1311 y(is)e(of)g(a)h(di\013eren)o
(t)e(class.)36 b(As)21 b(long)h(as)g(all)f(the)g(elemen)o(t)o(s)e(understand)
j(the)f(same)f(set)125 1371 y(of)h(messages,)g(the)f(ob)s(ject)h(can)g(in)o
(teract)f(with)g(the)h(elemen)o(ts)d(of)j(the)g(arra)o(y)g(without)125 1431 y
(regard)c(to)h(their)f(class.)25 b(This)18 b(is)f(particularly)f(useful)h(in)
h(windo)o(wing)f(systems,)f(where)125 1491 y(the)d(arra)o(y)h(could)f(hold)h
(a)g(list)f(of)h(windo)o(ws)g(to)g(b)q(e)g(displa)o(y)o(ed.)19 b(This)14 b
(could)f(b)q(e)h(sim)o(ulated)125 1551 y(in)j(Ada)h(using)g(v)m(arian)o(t)g
(records)g(and)g(explicitely)d(c)o(hec)o(king)h(the)i(tag)g(of)g(eac)o(h)g
(windo)o(w)125 1612 y(b)q(efore)11 b(displa)o(ying)f(it,)i(th)o(us)f(ensuring)
g(that)h(the)f(correct)f(displa)o(y)h(pro)q(cedure)g(w)o(as)g(called.)125 1672
y(Ho)o(w)o(ev)o(er,)i(this)i(kind)f(of)i(programming)e(is)h(dangerous,)h(b)q
(ecause)f(it)g(is)g(easy)g(to)h(forget)g(a)125 1732 y(case.)25 b(It)17 b(lead\
s)h(to)f(soft)o(w)o(are)h(that)g(is)g(hard)g(to)g(reuse,)f(since)g(minor)f
(mo)q(di\014cations)h(are)125 1792 y(lik)o(ely)8 b(to)k(add)g(more)e(cases.)
20 b(Since)10 b(the)h(tag)h(c)o(hec)o(ks)e(will)g(b)q(e)h(widely)f(distribute\
d)h(through)125 1852 y(the)18 b(program,)h(adding)g(a)g(case)g(will)f(require)
f(wide-spread)i(mo)q(di\014cations)f(b)q(efore)h(the)125 1913 y(program)d(can)
g(b)q(e)g(reused.)125 2057 y fc(2.2)69 b(Proto)r(col)125 2149 y fi(The)17 b
(sp)q(eci\014cation)g(of)g(an)h(ob)s(ject)e(is)h(giv)o(en)g(b)o(y)f(its)h fg
(pr)n(oto)n(c)n(ol)p fi(,)f(i.e.)23 b(the)17 b(set)g(of)g(messages)125 2210 y
(that)22 b(can)g(b)q(e)h(sen)o(t)e(to)i(it.)38 b(The)22 b(t)o(yp)q(e)g(of)g
(the)g(argumen)o(ts)f(of)i(eac)o(h)e(message)h(is)f(also)125 2270 y(imp)q(ort\
an)o(t,)13 b(but)h(\\t)o(yp)q(e")g(should)h(b)q(e)f(though)o(t)h(of)f(as)h
(proto)q(col)g(and)f(not)h(as)g(class.)20 b(F)l(or)15 b(a)125 2330 y(discussi\
on)c(of)g(t)o(yp)q(es)g(in)g(Smalltalk,)f(see)g([Joh86)q(].)19 b(Ob)s(jects)
11 b(with)g(iden)o(tical)e(proto)q(col)j(are)125 2390 y(in)o(terc)o(hangeable\
.)18 b(Th)o(us,)12 b(the)g(in)o(terface)e(b)q(et)o(w)o(een)g(ob)s(jects)i(is)
f(de\014ned)g(b)o(y)h(the)f(proto)q(cols)125 2450 y(that)18 b(they)g(exp)q
(ect)f(eac)o(h)g(other)h(to)h(understand.)27 b(If)18 b(sev)o(eral)f(classes)h
(de\014ne)f(the)h(same)125 2494 y 665 2 v 181 2525 a fn(1)199 2540 y fl(The)c
(ob)r(ject-orien)o(ted)g(programming)c(comm)o(unit)o(y)g(do)q(es)j(not)h(ha)o
(v)o(e)f(a)f(standardized)i(v)o(o)q(cabulary)m(.)125 2590 y(While)d(\\sending)
i(a)g(message")f(is)g(the)i(most)d(common)f(term,)i(and)g(is)h(used)h(in)e
(the)h(Smalltalk)d(and)i(Lisp)125 2639 y(comm)o(uni)o(ties,)f(C++)k(programme\
rs)d(refer)j(to)e(this)h(as)g(\\calling)e(a)i(virtual)f(function".)943 2769 y
fi(3)g eop bop 125 195 a fi(proto)q(col)15 b(then)g(ob)s(jects)g(in)g(those)h
(classes)f(are)g(\\plug)h(compatible".)j(Complex)13 b(ob)s(jects)125 255 y
(can)f(b)q(e)g(created)f(b)o(y)h(in)o(terconnecting)f(ob)s(jects)g(from)g(a)i
(set)f(of)g(compatible)e(comp)q(onen)o(ts.)125 315 y(This)i(giv)o(es)g(rise)g
(to)h(a)g(st)o(yle)f(of)h(programming)e(called)g fg(building)16 b(to)n(ol)e
(kits)p fi(,)f(of)g(whic)o(h)f(more)125 376 y(will)j(b)q(e)h(said)h(later.)
198 436 y(Although)g(proto)q(cols)i(are)f(imp)q(ortan)o(t)e(for)i(de\014ning)
g(in)o(terfaces)e(within)h(programs,)125 496 y(they)d(are)h(ev)o(en)f(more)g
(imp)q(ortan)o(t)g(as)h(a)h(w)o(a)o(y)f(for)g(programmers)e(to)j(comm)o(uni)o
(cate)c(with)125 556 y(other.)42 b(Shared)24 b(proto)q(cols)g(create)f(a)h
(shared)g(v)o(o)q(cabulary)f(that)h(programmers)e(can)125 616 y(reuse)e(to)h
(ease)f(the)g(learning)h(of)g(new)f(classes.)34 b(Just)21 b(as)g(mathematicia\
ns)d(reuse)i(the)125 677 y(names)15 b(of)i(arithmetic)d(op)q(erations)j(for)g
(matrices,)d(p)q(olynomials,)i(and)h(other)f(algebraic)125 737 y(ob)s(jects,)
d(so)h(Smalltalk)d(programmers)h(use)i(the)f(same)f(names)h(for)h(op)q(eratio\
ns)g(on)g(man)o(y)125 797 y(kinds)k(of)h(classes.)29 b(Th)o(us,)19 b(a)g(prog\
rammer)e(will)g(kno)o(w)i(the)f(meaning)g(of)h(man)o(y)e(of)i(the)125 857 y
(comp)q(onen)o(ts)c(of)i(a)f(new)h(program)f(the)g(\014rst)g(time)e(it)i(is)g
(read.)198 917 y(Standard)24 b(proto)q(cols)g(are)f(giv)o(en)f(their)h(p)q
(o)o(w)o(er)g(b)o(y)f(p)q(olymorphism.)40 b(Languages)125 978 y(with)12 b(no)
g(p)q(olymorphism)e(at)j(all,)f(lik)o(e)e(P)o(ascal,)j(discourage)f(giving)g
(di\013eren)o(t)g(pro)q(cedures)125 1038 y(the)18 b(same)f(name,)h(since)g
(they)g(then)g(cannot)h(b)q(e)g(used)f(in)g(the)h(same)e(program.)28 b(Th)o
(us,)125 1098 y(man)o(y)15 b(P)o(ascal)h(programs)h(use)g(a)g(large)g(n)o(um)
o(b)q(er)d(of)j(sligh)o(tly)f(di\013eren)o(t)g(names,)f(suc)o(h)h(as)125 1158
y(MatrixPlus,)i(ComplexPlus,)f(P)o(olynomialPlus,)g(etc.)27 b(Languages)21 b
(that)e(use)g(generics)125 1218 y(and)g(o)o(v)o(erloading)f(to)h(pro)o(vide)f
(a)h(limited)d(form)i(of)h(p)q(olymorphism)d(can)j(b)q(ene\014t)g(from)125
1279 y(the)g(use)h(of)h(standard)g(proto)q(cols,)h(but)e(the)g(b)q(ene\014ts)
g(do)h(not)f(seem)f(large)h(enough)h(to)125 1339 y(ha)o(v)o(e)13 b(forced)g
(wide)h(use)f(of)i(them.)748 1321 y fm(2)786 1339 y fi(In)f(Smalltalk,)d(ho)o
(w)o(ev)o(er,)i(there)g(are)h(a)g(wide)g(n)o(um)o(b)q(er)125 1399 y(of)j(w)o
(ell-kno)o(wn)f(standard)i(proto)q(cols,)g(and)g(all)f(exp)q(erienced)e(progr\
ammers)g(use)j(them)125 1459 y(hea)o(vily)l(.)198 1519 y(Standard)c(proto)q
(cols)g(form)e(an)i(imp)q(ortan)o(t)e(part)i(of)f(the)g(Smalltalk)e(culture.)
19 b(A)13 b(new)125 1579 y(programmer)19 b(\014nds)j(it)g(m)o(uc)o(h)d(easier)
i(to)h(read)g(Smalltalk)e(programs)h(once)h(standard)125 1640 y(proto)q(cols)
17 b(are)g(learned,)f(and)h(they)f(form)g(a)h(standard)h(v)o(o)q(cabulary)f
(that)g(ensures)g(that)125 1700 y(new)f(comp)q(onen)o(ts)f(will)g(b)q(e)i(com\
patible)d(with)i(old.)125 1844 y fc(2.3)69 b(Inheritance)125 1937 y fi(Most)
15 b(ob)s(ject-orien)o(ted)f(programming)f(languages)k(ha)o(v)o(e)d(another)i
(feature)e(that)i(di\013er-)125 1997 y(en)o(tiates)h(them)f(from)h(other)h
(data)h(abstraction)g(languages;)h(class)e(inheritance.)25 b(Eac)o(h)125 2057
y(class)e(has)g(a)h(sup)q(erclass)f(from)f(whic)o(h)g(it)h(inherits)f(op)q
(erations)i(and)g(in)o(ternal)e(struc-)125 2117 y(ture.)33 b(A)19 b(class)i
(can)f(add)h(to)g(the)f(op)q(erations)h(it)f(inherits)g(or)g(can)h(rede\014ne)
e(inherited)125 2177 y(op)q(erations.)j(Ho)o(w)o(ev)o(er,)14 b(classes)i(cann\
ot)h(delete)e(inherited)g(op)q(erations.)198 2238 y(Class)22 b(inheritance)f
(has)i(a)g(n)o(um)o(b)q(er)d(of)i(adv)m(an)o(tages.)41 b(One)21 b(is)h(that)h
(it)f(promotes)125 2298 y(co)q(de)14 b(reuse,)h(since)f(co)q(de)g(shared)i
(b)o(y)e(sev)o(eral)f(classes)i(can)g(b)q(e)g(placed)f(in)g(their)g(common)
125 2358 y(sup)q(erclass,)g(and)h(new)e(classes)h(can)h(start)f(o\013)h(ha)o
(ving)f(co)q(de)g(a)o(v)m(ailable)f(b)o(y)g(b)q(eing)i(giv)o(en)e(a)125 2418 y
(sup)q(erclass)k(with)g(that)g(co)q(de.)24 b(Class)17 b(inheritance)f(supp)q
(orts)i(a)f(st)o(yle)f(of)h(programming)125 2478 y(called)11 b fg(pr)n(o)n
(gr)n(amming-by-di\013er)n(enc)n(e)p fi(,)h(where)g(the)g(programmer)f(de\014\
nes)h(a)h(new)f(class)g(b)o(y)125 2539 y(pic)o(king)17 b(a)j(closely)e(relate\
d)g(class)h(as)h(its)f(sup)q(erclass)g(and)h(describing)e(the)h(di\013erences)
125 2582 y 665 2 v 181 2613 a fn(2)199 2628 y fl(Bo)q(o)q(c)o(h)c(sho)o(ws)f
(ho)o(w)f(standard)i(proto)q(cols)f(migh)o(t)e(b)q(e)i(used)h(in)e(Ada.[Bo)q
(o87)o(])943 2769 y fi(4)g eop bop 125 195 a fi(b)q(et)o(w)o(een)21 b(the)h
(old)g(and)h(new)f(classes.)40 b(Class)23 b(inheritance)e(also)h(pro)o(vides)
g(a)h(w)o(a)o(y)f(to)125 255 y(organize)14 b(and)h(classify)f(classes,)h(sinc\
e)f(classes)g(with)h(the)f(same)g(sup)q(erclass)h(are)f(usually)125 315 y(clo\
sely)h(related.)198 376 y(One)g(of)h(the)g(imp)q(ortan)o(t)f(b)q(ene\014ts)g
(of)i(class)e(inheritance)g(is)g(that)i(it)e(encourages)h(the)125 436 y(dev)o
(elopmen)n(t)g(of)j(the)g(standard)h(proto)q(cols)g(that)f(w)o(ere)f(earlier)
g(describ)q(ed)g(as)h(making)125 496 y(p)q(olymorphism)h(so)j(useful.)40 b
(All)22 b(the)g(sub)q(classes)i(of)e(a)i(particular)e(class)h(inherit)e(its)
125 556 y(op)q(erations,)26 b(so)e(they)f(all)g(share)g(its)h(proto)q(col.)43
b(Th)o(us,)26 b(when)d(a)h(programmer)e(uses)125 616 y(programming-b)o(y-di\
\013erence)e(to)i(rapidly)g(build)g(classes,)i(a)f(family)e(of)i(classes)f
(with)125 677 y(a)g(standard)i(proto)q(col)f(results)e(automatically)l(.)38 b
(Th)o(us,)23 b(class)g(inheritance)e(not)h(only)125 737 y(supp)q(orts)h(soft)
o(w)o(are)e(reuse)h(b)o(y)f(programming-b)o(y-di\013erence,)f(it)h(also)i(hel\
ps)e(dev)o(elop)125 797 y(standard)c(proto)q(cols.)198 857 y(Another)e(b)q
(ene\014t)g(of)h(class)f(inheritance)g(is)g(that)h(it)e(allo)o(ws)i(extension\
s)f(to)h(b)q(e)f(made)125 917 y(to)j(a)h(class)g(while)e(lea)o(ving)h(the)g
(original)g(co)q(de)h(in)o(tact.)27 b(Th)o(us,)19 b(c)o(hanges)g(made)e(b)o
(y)h(one)125 978 y(programmer)d(are)h(less)h(lik)o(ely)d(to)k(a\013ect)f(anot\
her.)23 b(The)17 b(co)q(de)g(in)g(the)f(sub)q(class)i(de\014nes)125 1038 y
(the)11 b(di\013erences)g(b)q(et)o(w)o(een)h(the)f(classes,)i(acting)f(as)g
(a)h(history)f(of)g(the)g(editing)f(op)q(erations.)198 1098 y(Not)19 b(all)h
(ob)s(ject-orien)o(ted)e(programming)g(languages)j(allo)o(w)f(proto)q(col)g
(and)g(inher-)125 1158 y(itance)e(to)h(b)q(e)h(separated.)30 b(Languages)21 b
(lik)o(e)d(C++[Str86])h(that)g(use)g(classes)h(as)f(t)o(yp)q(es)125 1218 y
(require)c(that)i(an)g(ob)s(ject)f(ha)o(v)o(e)f(the)h(righ)o(t)h(sup)q(erclas\
s)g(to)f(receiv)o(e)f(a)h(message,)g(not)h(just)125 1279 y(that)e(it)g(ha)o
(v)o(e)f(the)h(righ)o(t)g(proto)q(col.)22 b(Of)15 b(course,)g(languages)h(wit\
h)f(m)o(ultiple)d(inheritance)125 1339 y(can)k(solv)o(e)f(this)i(problem)d
(b)o(y)i(asso)q(ciating)h(a)g(sup)q(erclass)g(with)f(ev)o(ery)f(proto)q(col.)
125 1483 y fc(2.4)69 b(Abstract)23 b(Classes)125 1576 y fi(Standard)d(proto)q
(cols)g(are)f(often)g(represen)o(ted)f(b)o(y)h fg(abstr)n(act)h(classes)g fi
([GR83].)29 b(An)19 b(ab-)125 1636 y(stract)12 b(class)h(nev)o(er)e(has)j(ins\
tances,)e(only)h(its)f(sub)q(classes)i(ha)o(v)o(e)d(instances.)20 b(The)13 b
(ro)q(ots)h(of)125 1696 y(class)e(hierarc)o(hies)g(are)h(usually)f(abstract)i
(classes,)f(while)f(the)g(leaf)h(classes)g(are)g(nev)o(er)e(ab-)125 1756 y
(stract.)20 b(Abstract)15 b(classes)g(usually)f(do)h(not)g(de\014ne)g(an)o
(y)f(instance)h(v)m(ariables.)20 b(Ho)o(w)o(ev)o(er,)125 1816 y(they)15 b(de\
\014ne)g(metho)q(ds)g(in)g(terms)f(of)i(a)g(few)g(unde\014ned)f(metho)q(ds)g
(that)h(m)o(ust)e(b)q(e)i(imple-)125 1876 y(men)o(ted)g(b)o(y)j(the)g(sub)q
(classes.)30 b(F)l(or)20 b(example,)d(class)i(Collection)f(is)h(abstract,)h
(and)g(de-)125 1937 y(\014nes)15 b(a)h(n)o(um)o(b)q(er)e(of)i(metho)q(ds,)e
(including)h fe(select:)p fi(,)d fe(collect:)p fi(,)h(and)j fe(inject:int)o
(o:)o fi(,)125 1997 y(in)g(terms)f(of)h(an)h(iteration)g(metho)q(d,)e fe(do:)
p fi(.)21 b(Sub)q(classes)c(of)g(Collection,)e(suc)o(h)h(as)h(Arra)o(y)l(,)
125 2057 y(Set,)k(and)h(Dictionary)l(,)g(de\014ne)f fe(do:)30 b fi(and)22 b
(are)g(then)f(able)g(to)g(use)h(the)f(metho)q(ds)g(that)125 2117 y(they)c(inh\
erited)g(from)h(Collection.)26 b(Th)o(us,)19 b(abstract)g(classes)f(can)h(b)q
(e)f(used)h(m)o(uc)o(h)d(lik)o(e)125 2177 y(program)h(sk)o(eletons,)g(where)g
(the)h(user)f(\014lls)h(in)f(certain)g(options)h(and)h(reuses)e(the)h(co)q
(de)125 2238 y(in)d(the)h(sk)o(eleton.)198 2298 y(A)i(class)h(that)h(is)f(not)
g(abstract)h(is)f fg(c)n(oncr)n(ete)p fi(.)30 b(In)19 b(general,)g(it)f(is)h
(b)q(etter)g(to)g(inherit)125 2358 y(from)k(an)i(abstract)g(class)f(than)h
(from)e(a)i(concrete)f(class.)45 b(A)24 b(concrete)g(class)g(m)o(ust)125 2418
y(pro)o(vide)16 b(a)h(de\014nition)f(for)h(its)g(data)h(represen)o(tation,)e
(and)h(some)f(sub)q(classes)i(will)d(need)125 2478 y(a)j(di\013eren)o(t)f(rep\
resen)o(tation.)26 b(Since)17 b(an)h(abstract)h(class)f(do)q(es)h(not)f(ha)o
(v)o(e)f(to)h(pro)o(vide)g(a)125 2539 y(data)e(represen)o(tation,)f(future)h
(sub)q(classes)g(can)g(use)g(an)o(y)g(represen)o(tation)f(without)h(fear)125
2599 y(of)g(con\015icting)g(with)g(the)g(one)g(that)h(they)f(inherited.)943
2769 y(5)g eop bop 198 195 a fi(Creating)12 b(new)h(abstract)g(classes)f(is)g
(v)o(ery)f(imp)q(ortan)o(t,)h(but)g(is)g(not)h(easy)l(.)20 b(It)12 b(is)g(alw)
o(a)o(ys)125 255 y(easier)17 b(to)i(reuse)f(a)h(nicely)e(pac)o(k)m(aged)i(abs\
traction)g(than)g(to)g(in)o(v)o(en)o(t)d(it.)28 b(Ho)o(w)o(ev)o(er,)16 b(the)
125 315 y(pro)q(cess)f(of)g(programming)f(in)g(Smalltalk)f(mak)o(es)g(it)h
(easier)h(to)g(disco)o(v)o(er)e(the)i(imp)q(ortan)o(t)125 376 y(abstractions.)
33 b(A)20 b(Smalltalk)d(programmer)i(alw)o(a)o(ys)g(tries)h(to)g(create)f(new)
h(classes)g(b)o(y)125 436 y(making)11 b(them)g(b)q(e)h(sub)q(classes)i(of)e
(existing)g(ones,)h(since)f(this)g(is)h(less)f(w)o(ork)g(than)h(creating)125
496 y(a)20 b(class)h(from)e(scratc)o(h.)33 b(This)20 b(often)g(results)g(in)g
(a)h(class)f(hierarc)o(h)o(y)f(whose)i(top-most)125 556 y(class)14 b(is)f(con\
crete.)20 b(The)14 b(top)h(of)f(a)g(large)g(class)g(hierarc)o(h)o(y)f(should)
h(almost)g(alw)o(a)o(ys)f(b)q(e)h(an)125 616 y(abstract)k(class,)f(so)h(the)f
(exp)q(erienced)f(programmer)g(will)g(then)h(try)g(to)h(reorganize)f(the)125
677 y(class)i(hierarc)o(h)o(y)f(and)h(\014nd)h(the)f(abstract)h(class)f(hidde\
n)g(in)g(the)g(concrete)g(class.)30 b(The)125 737 y(result)13 b(will)f(b)q
(e)i(a)g(new)g(abstract)g(class)g(that)g(can)g(b)q(e)g(reused)f(man)o(y)f(tim\
es)g(in)h(the)h(future.)198 797 y(An)e(example)e(of)j(a)g(Smalltalk)e(class)i
(that)g(needs)f(to)h(b)q(e)g(reorganized)f(is)h(View,)f(whic)o(h)125 857 y
(de\014nes)18 b(a)h(user-in)o(terface)f(ob)s(ject)g(that)i(con)o(trols)e(a)i
(region)e(of)i(the)e(screen.)28 b(View)18 b(has)125 917 y(27)i(sub)q(classes)
g(in)f(the)h(standard)h(image,)d(but)i(is)f(concrete.)31 b(A)19 b(careful)f
(examination)125 978 y(rev)o(eals)d(a)j(n)o(um)o(b)q(er)d(of)i(assumptions)g
(made)f(in)g(View)g(that)i(most)e(of)h(its)g(sub)q(classes)g(do)125 1038 y
(not)j(use.)32 b(The)20 b(most)f(imp)q(ortan)o(t)g(is)h(that)g(eac)o(h)f(view)
g(will)g(ha)o(v)o(e)g(sub)o(views.)32 b(In)19 b(fact,)125 1098 y(most)13 b
(sub)q(classes)i(of)g(View)f(implem)o(e)o(n)o(t)e(views)h(that)i(can)g(nev)o
(er)e(ha)o(v)o(e)h(sub)o(views.)20 b(Quite)125 1158 y(a)f(bit)f(of)i(co)q(de)
f(in)f(View)g(deals)h(with)g(adding)g(and)h(p)q(ositioning)f(sub)o(views,)g
(making)e(it)125 1218 y(v)o(ery)12 b(di\016cult)g(for)h(the)h(b)q(eginning)f
(programmer)f(to)i(understand)g(the)f(k)o(ey)f(abstractions)125 1279 y(that)
17 b(View)f(represen)o(ts.)23 b(The)17 b(solution)h(is)f(simple:)j(split)d
(View)f(in)o(to)h(t)o(w)o(o)g(classes,)g(one)125 1339 y(\(View\))d(of)i(whic)
o(h)f(is)h(the)f(abstract)i(sup)q(erclass)f(and)h(the)e(other)h(\(ViewWithSub)
o(views\))125 1399 y(of)i(whic)o(h)f(is)h(a)g(concrete)f(sub)q(class)i(that)g
(implem)o(e)o(n)o(ts)c(the)j(abilit)o(y)e(to)j(ha)o(v)o(e)e(sub)o(views.)125
1459 y(The)f(result)g(is)g(m)o(uc)o(h)e(easier)h(to)i(understand)g(and)g(to)f
(reuse.)125 1604 y fc(2.5)69 b(Inheritance)22 b(vs.)31 b(decomp)r(osition)125
1696 y fi(Since)21 b(inheritance)h(is)g(so)h(p)q(o)o(w)o(erful,)g(it)g(is)f
(often)h(o)o(v)o(erused.)39 b(F)l(requen)o(tly)21 b(a)h(class)h(is)125 1756 y
(made)18 b(a)j(sub)q(class)f(of)h(another)f(when)g(it)g(should)g(ha)o(v)o(e)f
(had)i(an)f(instance)g(v)m(ariable)g(of)125 1816 y(that)f(class)h(as)g(a)g
(comp)q(onen)o(t.)30 b(F)l(or)20 b(example,)d(some)i(ob)s(ject-orien)o(ted)f
(user-in)o(terface)125 1876 y(systems)e(mak)o(e)f(windo)o(ws)j(b)q(e)g(a)f
(sub)q(class)i(of)e(Rectangle,)g(since)f(they)h(are)h(rectangular)125 1937 y
(in)e(shap)q(e.)23 b(Ho)o(w)o(ev)o(er,)15 b(it)h(mak)o(es)f(more)h(sense)h
(to)g(mak)o(e)e(the)h(rectangle)g(b)q(e)h(an)g(instance)125 1997 y(v)m(ariabl\
e)i(of)g(the)h(windo)o(w.)31 b(Windo)o(ws)20 b(are)f(not)h(necessarily)e(rect\
angular,)i(rectangles)125 2057 y(are)c(b)q(etter)g(though)o(t)g(of)h(as)f(geo\
metric)e(v)m(alues)j(whose)f(state)h(cannot)f(b)q(e)h(c)o(hanged,)e(and)125
2117 y(op)q(erations)i(lik)o(e)d(mo)o(ving)h(mak)o(e)f(more)h(sense)i(on)f
(a)h(windo)o(w)f(than)h(on)g(a)g(rectangle.)198 2177 y(Beha)o(vior)12 b(can)h
(b)q(e)g(easier)g(to)g(reuse)g(as)g(a)h(comp)q(onen)o(t)e(than)h(b)o(y)g(inhe\
riting)f(it.)19 b(There)125 2238 y(are)j(at)g(least)g(t)o(w)o(o)g(go)q(o)q
(d)i(examples)c(of)j(this)f(in)g(Smalltalk-80.)38 b(The)22 b(\014rst)g(is)g
(that)h(a)125 2298 y(parser)d(inherits)g(the)h(b)q(eha)o(vior)f(of)h(the)f
(lexical)f(analyzer)h(instead)h(of)g(ha)o(ving)f(it)g(as)i(a)125 2358 y(comp)
q(onen)o(t.)28 b(This)19 b(caused)g(problems)e(when)i(w)o(e)f(w)o(an)o(ted)h
(to)g(place)g(a)g(\014lter)f(b)q(et)o(w)o(een)125 2418 y(the)h(lexical)g(anal\
yzer)g(and)i(the)f(parser)g(without)g(c)o(hanging)h(the)f(standard)h(compiler\
.)125 2478 y(The)i(second)g(example)f(is)h(that)g(scrolling)g(is)g(an)h(inher\
ited)e(c)o(haracteristic,)h(so)h(it)f(is)125 2539 y(di\016cult)15 b(to)j(con)
o(v)o(ert)e(a)i(class)g(with)f(v)o(ertical)e(scrolling)i(in)o(to)g(one)h(with)
f(no)h(scrolling)f(or)125 2599 y(with)g(b)q(oth)i(horizon)o(tal)e(and)i(v)o
(ertical)d(scrolling.)25 b(While)17 b(m)o(ultiple)d(inheritance)j(migh)o(t)
943 2769 y(6)g eop bop 125 195 a fi(solv)o(e)15 b(this)h(problem,)f(it)h(has)
h(problems)e(of)h(its)g(o)o(wn.)22 b(Moreo)o(v)o(er,)15 b(this)h(problem)f
(is)h(easy)125 255 y(to)c(solv)o(e)g(b)o(y)f(making)g(scrollbars)i(b)q(e)f
(comp)q(onen)o(ts)f(of)i(ob)s(jects)f(that)h(need)e(to)i(b)q(e)f(scrolled.)
198 315 y(Most)20 b(ob)s(ject-orien)o(ted)e(applications)h(ha)o(v)o(e)g(man)o
(y)f(kinds)h(of)h(hierarc)o(hies.)30 b(In)19 b(ad-)125 376 y(dition)g(to)h
(class)f(inheritance)f(hierarc)o(hies,)h(they)g(usually)g(ha)o(v)o(e)g fg(ins\
tanc)n(e)i(hier)n(ar)n(chies)125 436 y fi(made)13 b(up)h(of)h(regular)f(ob)s
(jects.)21 b(F)l(or)14 b(example,)e(a)j(user-in)o(terface)e(in)h(Smalltalk)f
(consists)125 496 y(of)h(a)h(tree)f(of)h(views,)f(with)g(eac)o(h)g(sub)o(view)
g(b)q(eing)h(a)g(c)o(hild)e(of)i(its)f(sup)q(erview.)20 b(Eac)o(h)15 b(com-)
125 556 y(p)q(onen)o(t)g(is)g(an)g(instance)g(of)g(a)g(sub)q(class)h(of)g(Vie\
w,)d(but)i(the)g(ro)q(ot)h(of)g(the)e(tree)g(of)i(views)e(is)125 616 y(an)i
(instance)f(of)h(StandardSystemView.)k(As)15 b(another)i(example,)c(the)i(Sma\
lltalk)f(com-)125 677 y(piler)i(pro)q(duces)j(parse)f(trees)g(that)g(are)g
(hierarc)o(hies)f(of)h(parse)g(no)q(des.)27 b(Although)18 b(eac)o(h)125 737 y
(no)q(de)d(is)g(an)h(instance)f(of)h(a)f(sub)q(class)i(of)e(P)o(arseNo)q(de,)
g(the)g(ro)q(ot)i(of)e(the)g(parse)h(tree)e(is)h(an)125 797 y(instance)e(of)i
(Metho)q(dNo)q(de,)g(whic)o(h)e(is)h(a)h(particular)f(sub)q(class.)21 b(Th)o
(us,)15 b(while)e(View)g(and)125 857 y(P)o(arseNo)q(de)g(are)h(the)f(abstract)
h(classes)g(at)g(the)f(top)h(of)g(the)f(class)h(hierarc)o(h)o(y)l(,)e(the)h
(ob)s(jects)125 917 y(at)i(the)h(top)g(of)f(the)h(instance)f(hierarc)o(h)o
(y)f(are)h(instances)h(of)f(StandardSystemView)f(and)125 978 y(Metho)q(dNo)q
(de.)198 1038 y(This)f(distinction)f(seems)g(to)h(confuse)g(man)o(y)f(new)h
(Smalltalk)e(programmers.)18 b(There)125 1098 y(is)e(often)g(a)h(phase)g(when)
g(a)f(studen)o(t)h(tries)e(to)i(mak)o(e)e(the)h(class)h(of)f(the)g(no)q(de)i
(at)e(the)h(top)125 1158 y(of)e(the)g(instance)g(hierarc)o(h)o(y)e(b)q(e)i
(at)h(the)f(top)g(of)h(the)e(class)i(hierarc)o(h)o(y)l(.)j(Once)14 b(the)h
(disease)125 1218 y(is)i(diagnosed,)i(it)f(can)g(b)q(e)g(easily)f(cured)h(b)o
(y)f(explaining)g(the)h(di\013erences)f(b)q(et)o(w)o(een)g(the)125 1279 y(ins\
tance)e(and)i(class)g(hierarc)o(hies.)125 1445 y fb(3)82 b(Soft)n(w)n(are)27 b
(reuse)125 1554 y fi(One)11 b(of)g(the)g(reasons)i(that)f(ob)s(ject-orien)o
(ted)e(programming)g(is)h(b)q(ecoming)f(more)g(p)q(opular)125 1615 y(is)k(tha\
t)h(soft)o(w)o(are)g(reuse)g(is)g(b)q(ecoming)e(more)h(imp)q(ortan)o(t.)20 b
(Dev)o(eloping)14 b(new)h(systems)e(is)125 1675 y(exp)q(ensiv)o(e,)k(and)i
(main)o(taining)f(them)f(is)h(ev)o(en)g(more)f(exp)q(ensiv)o(e.)28 b(A)18 b
(recen)o(t)g(study)g(b)o(y)125 1735 y(Wilma)g(Osb)q(orne)i(of)g(the)g(Nationa\
l)g(Bureau)g(of)g(Standards)h(suggests)g(that)f(60)h(to)f(85)125 1795 y(p)q
(ercen)o(t)13 b(of)i(the)f(total)h(cost)g(of)g(soft)o(w)o(are)f(is)h(due)f
(to)h(main)o(tenance)d([LS80)q(].)20 b(Clearly)l(,)14 b(one)125 1855 y(w)o
(a)o(y)k(to)g(reuse)g(a)h(program)g(is)f(to)h(enhance)f(it,)g(so)h(main)o(tai\
nance)d(is)j(a)f(sp)q(ecial)g(case)h(of)125 1916 y(soft)o(w)o(are)c(reuse.)21
b(Both)16 b(require)e(programmers)g(to)j(understand)f(and)g(mo)q(dify)f(soft)
o(w)o(are)125 1976 y(written)g(b)o(y)h(others.)22 b(Both)16 b(are)g(di\016cul\
t.)198 2036 y(Ev)o(olutionary)22 b(lifecycles)d(are)j(the)g(rule)f(rather)i
(than)f(the)g(exception.)38 b(Soft)o(w)o(are)125 2096 y(main)o(tenance)9 b
(can)k(b)q(e)f(categorized)f(as)i(correctiv)o(e,)d(adaptiv)o(e,)i(and)h(p)q
(erfectiv)o(e.)18 b(Correc-)125 2156 y(tiv)o(e)d(main)o(tenance)g(is)i(the)g
(pro)q(cess)g(of)g(diagnosing)i(and)e(correcting)g(errors.)23 b(Adaptiv)o(e)
125 2217 y(main)o(tenance)15 b(consists)j(of)g(those)g(activities)e(that)i
(are)g(needed)f(to)h(prop)q(erly)g(in)o(tegrate)125 2277 y(a)j(soft)o(w)o(are)
h(pro)q(duct)g(with)f(new)g(hardw)o(are,)i(p)q(eripherals,)f(etc.)36 b(P)o
(erfectiv)o(e)19 b(main)o(te-)125 2337 y(nance)h(is)g(required)g(when)h(a)g
(soft)o(w)o(are)f(pro)q(duct)h(is)g(successful.)34 b(As)20 b(suc)o(h)g(a)h
(pro)q(duct)125 2397 y(is)c(used,)h(pressure)g(is)g(brough)o(t)g(to)h(b)q(ear)
f(on)h(the)e(dev)o(elop)q(ers)g(to)i(enhance)e(and)i(extend)125 2457 y(the)12
b(functionalit)o(y)g(of)h(that)g(pro)q(duct.)21 b(Osb)q(orne)13 b(rep)q(orts)
h(that)f(p)q(erfectiv)o(e)e(main)o(tenance)125 2518 y(accoun)o(ts)i(for)g(60)
g(p)q(ercen)o(t)g(of)g(all)f(main)o(tenance,)f(while)h(adaptiv)o(e)h(and)g
(correctiv)o(e)e(main-)125 2578 y(tenance)i(eac)o(h)g(accoun)o(t)h(for)g(ab)q
(out)h(20)f(p)q(ercen)o(t)f(of)h(main)o(tenance.)k(Since)13 b(60%)h(of)g(main\
-)125 2638 y(tenance)19 b(activit)o(y)g(is)g(p)q(erfectiv)o(e,)g(an)i(ev)o
(olutionary)e(phase)h(is)g(an)h(imp)q(ortan)o(t)e(part)i(of)943 2769 y(7)g eop
bop 125 195 a fi(the)16 b(lifecycle)d(of)j(a)h(successful)f(soft)o(w)o(are)g
(pro)q(duct.)198 255 y(W)l(e)f(ha)o(v)o(e)f(already)h(seen)g(that)g(ob)s(ject\
-orien)o(ted)f(programming)g(languages)i(encour-)125 315 y(age)i(soft)o(w)o
(are)f(reuse)h(in)f(a)h(n)o(um)o(b)q(er)e(of)i(w)o(a)o(ys.)25 b(Class)18 b
(de\014nitions)g(pro)o(vide)f(mo)q(dularit)o(y)125 376 y(and)k(information)f
(hiding.)34 b(Late-binding)21 b(of)g(pro)q(cedure)g(calls)f(means)g(that)h
(ob)s(jects)125 436 y(require)f(less)h(information)f(ab)q(out)j(eac)o(h)e(oth\
er,)i(so)f(ob)s(jects)f(need)g(only)h(to)f(ha)o(v)o(e)g(the)125 496 y(righ)o
(t)13 b(proto)q(col.)22 b(A)13 b(p)q(olymorphic)g(pro)q(cedure)h(is)g(easier)
g(to)g(reuse)g(than)h(one)f(that)h(is)f(not)125 556 y(p)q(olymorphic,)h(b)q
(ecause)i(it)g(will)e(w)o(ork)i(with)g(a)h(wider)e(range)i(of)f(argumen)o(ts.)
22 b(Class)c(in-)125 616 y(heritance)13 b(p)q(ermits)f(a)j(class)f(to)h(b)q
(e)f(reused)g(in)g(a)g(mo)q(di\014ed)f(form)h(b)o(y)f(making)g(sub)q(classes)
125 677 y(from)18 b(it.)31 b(Class)21 b(inheritance)d(also)i(helps)g(form)e
(the)i(families)d(of)j(standard)h(proto)q(cols)125 737 y(that)16 b(are)h(so)f
(imp)q(ortan)o(t)g(for)g(reuse.)198 797 y(These)21 b(features)g(are)g(also)h
(useful)e(during)i(main)o(tenance.)33 b(Mo)q(dularit)o(y)21 b(mak)o(es)e(it)
125 857 y(easier)12 b(to)h(understand)h(the)f(e\013ect)f(of)i(c)o(hanges)f
(to)g(a)g(program.)20 b(P)o(olymorphism)11 b(reduces)125 917 y(the)20 b(n)o
(um)o(b)q(er)g(of)h(pro)q(cedures,)h(and)g(th)o(us)f(the)g(size)f(of)h(the)g
(program)g(that)h(has)f(to)h(b)q(e)125 978 y(understo)q(o)q(d)f(b)o(y)e(the)h
(main)o(tainer.)29 b(Class)21 b(inheritance)d(p)q(ermits)h(a)h(new)f(v)o(ersi\
on)h(of)g(a)125 1038 y(program)c(to)g(b)q(e)h(built)e(without)i(a\013ecting)f
(the)g(old.)198 1098 y(Man)o(y)k(of)i(the)e(tec)o(hniques)g(for)h(reusing)g
(soft)o(w)o(are)g(written)f(in)h(con)o(v)o(en)o(tional)f(lan-)125 1158 y(guag\
es)k(are)e(paralleled)g(b)o(y)g(ob)s(ject-orien)o(ted)g(tec)o(hniques.)39 b
(F)l(or)23 b(example,)f(program)125 1218 y(sk)o(eletons)e(are)i(en)o(tirely)e
(subsumed)h(b)o(y)g(abstract)h(classes.)38 b(Cop)o(ying)21 b(and)i(editing)e
(a)125 1279 y(program)14 b(is)h(subsumed)f(b)o(y)g(inheriting)g(a)h(class)g
(and)g(o)o(v)o(erriding)f(some)f(of)i(its)g(metho)q(ds.)125 1339 y(The)e(ob)s
(ject-orien)o(ted)f(tec)o(hniques)g(ha)o(v)o(e)h(the)g(adv)m(an)o(tage)h(of)g
(giving)f(the)g(new)h(class)f(only)125 1399 y(the)g(di\013erences)f(b)q(et)o
(w)o(een)g(it)h(and)h(the)f(old,)g(making)f(it)h(easier)g(to)g(determine)e
(ho)o(w)i(a)h(new)125 1459 y(program)g(di\013ers)h(from)f(the)h(old.)21 b(Th)
o(us,)15 b(a)g(set)g(of)g(sub)q(classes)h(preserv)o(es)e(the)h(history)g(of)
125 1519 y(c)o(hanges)i(made)e(to)i(the)g(sup)q(erclass)g(b)o(y)f(its)h(sub)q
(classes.)24 b(Conditionalizing)16 b(a)h(program)125 1579 y(b)o(y)g(adding)h
(\015ag)h(parameters)e(or)h(v)m(arian)o(t)g(tag)h(tests)f(can)g(almost)f(alw)
o(a)o(ys)h(b)q(e)g(replaced)125 1640 y(b)o(y)f(making)g(a)h(sub)q(class)h(for)
g(eac)o(h)e(v)m(arian)o(t)h(and)h(ha)o(ving)f(the)g(sub)q(classes)h(o)o(v)o
(erride)d(the)125 1700 y(metho)q(ds)f(making)g(the)h(tests.)198 1760 y(Soft)o
(w)o(are)e(reuse)f(do)q(es)i(not)f(happ)q(en)h(b)o(y)e(acciden)o(t,)g(ev)o
(en)g(with)h(ob)s(ject-orien)o(ted)e(pro-)125 1820 y(gramming)20 b(languages.)
39 b(System)20 b(designers)i(m)o(ust)f(plan)h(to)g(reuse)g(old)g(comp)q(onen)
o(ts)125 1880 y(and)15 b(m)o(ust)e(lo)q(ok)i(for)g(new)g(reuseable)f(comp)q
(onen)o(ts.)20 b(The)14 b(Smalltalk)f(comm)o(unit)n(y)f(prac-)125 1941 y(tice\
s)g(reuse)h(v)o(ery)f(successfully)l(.)19 b(The)14 b(k)o(eys)e(to)i(successfu\
l)f(soft)o(w)o(are)g(reuse)g(are)h(attitude,)125 2001 y(to)q(ols,)i(and)h(tec)
o(hniques.)198 2061 y(Smalltalk)e(programmers)g(ha)o(v)o(e)i(a)g(di\013eren)o
(t)f(attitude)h(than)h(other)f(programmers.)125 2121 y(There)j(is)i(no)f(sham\
e)g(in)g(b)q(orro)o(wing)h(system)e(classes)h(or)h(classes)f(in)o(v)o(en)o
(ted)e(b)o(y)i(other)125 2181 y(progammers.)e(Rewriting)c(an)i(old)f(class)g
(to)g(mak)o(e)e(it)i(easier)f(to)i(reuse)e(is)h(as)h(imp)q(ortan)o(t)125 2242
y(as)i(in)o(v)o(en)o(ting)d(a)j(new)g(class[CB86].)28 b(A)18 b(new)h(class)f
(that)h(is)g(not)g(compatible)e(with)h(old)125 2302 y(classes)d(is)g(lo)q(ok)
o(ed)g(do)o(wn)h(up)q(on.)22 b(Smalltalk)13 b(programmers)h(exp)q(ect)h(to)g
(sp)q(end)h(as)g(m)o(uc)o(h)125 2362 y(time)j(reading)j(old)g(co)q(de)g(to)g
(see)g(ho)o(w)g(to)g(reuse)g(it)f(as)h(writing)g(new)g(co)q(de.)38 b(In)21 b
(fact,)125 2422 y(writing)d(a)h(Smalltalk)e(program)h(is)h(v)o(ery)e(similar)
g(to)i(main)o(taining)e(programs)i(written)125 2482 y(in)14 b(other)h(languag\
es,)h(in)f(that)g(it)g(is)g(just)g(as)h(imp)q(ortan)o(t)e(for)h(the)g(new)g
(soft)o(w)o(are)g(to)g(\014t)g(in)125 2543 y(as)h(it)g(is)g(for)h(it)f(to)g
(b)q(e)h(e\016cien)o(t)d(and)j(easy)f(to)g(understand.)198 2603 y(The)22 b
(most)f(imp)q(ortan)o(t)g(attitude)h(is)g(the)g(imp)q(ortance)f(giv)o(en)g
(to)h(the)g(creation)g(of)943 2769 y(8)g eop bop 125 195 a fi(reuseable)22 b
(abstractions.)43 b(Ken)o(t)23 b(Bec)o(k)e(describ)q(es)i(the)g(di\016cult)o
(y)f(in)g(\014nding)i(reuse-)125 255 y(able)e(abstractions)h(and)h(the)e(imp)
q(ortance)f(placed)h(on)h(them)e(b)o(y)i(sa)o(ying)f(\\Ev)o(en)h(our)125 315 y
(researc)o(hers)16 b(who)i(use)f(Smalltalk)e(ev)o(ery)h(da)o(y)h(do)g(not)h
(often)f(come)f(up)h(with)g(generally)125 376 y(useful)f(abstractions)j(from)
d(the)h(co)q(de)g(they)g(use)g(to)h(solv)o(e)f(problems.)23 b(Useful)16 b(abs\
trac-)125 436 y(tions)e(are)g(usually)f(created)g(b)o(y)h(programmers)e(with)
i(an)g(obsession)h(for)f(simplicit)o(y)-5 b(,)11 b(who)125 496 y(are)21 b(wil\
ling)f(to)h(rewrite)f(co)q(de)i(sev)o(eral)e(times)f(to)i(pro)q(duce)h(easy-t\
o-understand)g(and)125 556 y(easy-to-sp)q(ecialize)16 b(classes.")25 b(Later)
18 b(he)f(states:)24 b(\\Decomp)q(osing)17 b(problems)f(and)i(pro-)125 616 y
(cedures)d(is)g(recognized)g(as)h(a)g(di\016cult)f(problem,)e(and)k(elab)q
(orate)f(metho)q(dologies)f(ha)o(v)o(e)125 677 y(b)q(een)k(dev)o(elop)q(ed)g
(to)g(help)g(programmers)f(in)h(this)h(pro)q(cess.)32 b(Programmers)18 b(who)
i(can)125 737 y(go)d(a)g(step)f(further)h(and)g(mak)o(e)e(their)g(pro)q(cedur\
al)i(solutions)g(to)g(a)g(particular)g(problem)125 797 y(in)o(to)e(a)i(generi\
c)e(library)h(are)g(rare)g(and)h(v)m(aluable."[OBHS86)o(])198 857 y(The)h(Sma\
lltalk)e(programming)h(en)o(vironmen)o(t)f(includes)h(a)i(n)o(um)o(b)q(er)e
(of)h(to)q(ols)i(that)125 917 y(mak)o(e)10 b(it)i(easier)h(to)g(reuse)f(class\
es.)20 b(There)12 b(is)h(a)g(bro)o(wser)g(for)f(examining)f(and)i(organizing)
125 978 y(classes,)i(cross)g(reference)f(to)q(ols,)i(and)g(a)f(to)q(ol)h(for)
g(c)o(hange)f(managemen)o(t)e(and)j(detecting)125 1038 y(con\015icts)21 b(b)q
(et)o(w)o(een)g(v)o(ersions[Gol84].)38 b(Although)22 b(exp)q(erience)e(has)i
(sho)o(wn)h(the)e(need)125 1098 y(for)c(impro)o(v)o(em)o(en)n(ts)e(to)i(these)
g(to)q(ols)h(and)g(has)f(generated)g(ideas)g(for)h(new)f(to)q(ols[Ro)q(c86)q
(,)125 1158 y(BC86b,)f(BC86a)q(,)g(GB81],)g(the)g(existing)f(to)q(ols)i(great\
ly)f(aid)g(reuse)g(in)g(Smalltalk.)198 1218 y(T)l(ec)o(hniques)e(that)i(impro)
o(v)o(e)d(reuse)j(in)f(Smalltalk)f(can)i(b)q(e)g(divided)e(in)o(to)i(the)f
(co)q(ding)125 1279 y(rules)k(and)i(the)f(design)g(rules.)33 b(Ro)q(c)o(hat)
21 b(discusses)f(co)q(ding)h(rules)f(for)g(Smalltalk)f(that)125 1339 y(mak)o
(e)f(programs)i(easier)g(to)g(understand)h(and)g(reuse[Ro)q(c86].)33 b(The)20
b(sixth)g(section)g(of)125 1399 y(this)13 b(article)g(describ)q(es)h(design)f
(rules.)20 b(These)14 b(rules)g(are)g(based)g(on)h(the)e(fact)h(that)g(useful)
125 1459 y(abstractions)h(are)f(usually)f(designed)h(from)f(the)h(b)q(ottom)g
(up,)g(i.e.)19 b(they)14 b(are)g(disco)o(v)o(ered,)125 1519 y(not)h(in)o(v)o
(en)o(ted.)k(W)l(e)14 b(create)g(new)h(general)g(comp)q(onen)o(ts)f(b)o(y)h
(solving)f(sp)q(eci\014c)h(problems,)125 1579 y(and)h(then)f(recognizing)g
(that)i(our)f(solutions)g(ha)o(v)o(e)f(p)q(oten)o(tially)f(broader)j(applicab\
ilit)o(y)l(.)125 1640 y(The)i(design)g(rules)f(in)h(this)g(pap)q(er)g(are)g
(a)h(w)o(a)o(y)e(of)i(con)o(v)o(erting)d(sp)q(eci\014c)i(solutions)g(in)o(to)
125 1700 y(reuseable)12 b(abstractions,)i(not)f(a)g(w)o(a)o(y)g(of)g(deducing)
f(abstractions)i(from)e(\014rst)h(principles.)125 1866 y fb(4)82 b(T)-7 b(o)r
(olkits)28 b(and)f(F)-7 b(ramew)n(orks)125 1976 y fi(One)18 b(of)g(the)g(most)
g(imp)q(ortan)o(t)f(kinds)h(of)h(reuse)f(is)g(reuse)g(of)g(designs.)28 b(A)18
b(collection)f(of)125 2036 y(abstract)k(classes)f(can)h(b)q(e)f(used)h(to)g
(express)f(an)h(abstract)g(design.)34 b(The)20 b(design)h(of)g(a)125 2096 y
(program)e(is)h(usually)g(describ)q(ed)g(in)f(terms)g(of)i(the)e(program's)h
(comp)q(onen)o(ts)g(and)g(the)125 2156 y(w)o(a)o(y)14 b(they)h(in)o(teract.)
20 b(F)l(or)15 b(example,)d(a)k(compiler)c(can)k(b)q(e)f(describ)q(ed)f(as)i
(consisting)f(of)h(a)125 2217 y(lexer,)e(a)j(parser,)f(a)g(sym)o(b)q(ol)f(tab\
le,)h(a)g(t)o(yp)q(e)g(c)o(hec)o(k)o(er,)d(and)k(a)g(co)q(de)f(generator.)198
2277 y(An)g(ob)s(ject-orien)o(ted)g(abstract)h(design,)f(also)i(called)d(a)j
fg(fr)n(amework)p fi(,)d(consists)i(of)g(an)125 2337 y(abstract)f(class)g(for)
g(eac)o(h)f(ma)s(jor)g(comp)q(onen)o(t.)1001 2319 y fm(3)1041 2337 y fi(The)h
(in)o(terfaces)f(b)q(et)o(w)o(een)g(the)g(comp)q(o-)125 2397 y(nen)o(ts)f(of)
i(the)f(design)g(are)g(de\014ned)g(in)g(terms)e(of)j(sets)f(of)g(messages.)21
b(There)14 b(will)g(usually)125 2457 y(b)q(e)20 b(a)g(library)g(of)g(sub)q
(classes)h(that)g(can)f(b)q(e)g(used)h(as)f(comp)q(onen)o(ts)g(in)g(the)f(des\
ign.)33 b(A)125 2518 y(compiler)16 b(framew)o(ork)h(w)o(ould)h(probably)h(ha)
o(v)o(e)f(some)g(concrete)f(sym)o(b)q(ol)h(table)g(classes)125 2561 y 665 2 v
181 2592 a fn(3)199 2607 y fl(Apparen)o(tly)c(the)h(name)d(for)i(framew)o(ork\
s)f(at)g(Xero)o(x)i(Information)c(Systems)j(is)g(\\teams".)943 2769 y fi(9)g
eop bop 125 195 a fi(and)21 b(some)e(classes)i(that)g(generate)f(co)q(de)h
(for)f(common)f(mac)o(hines.)32 b(In)20 b(theory)l(,)h(co)q(de)125 255 y(gene\
rators)c(could)g(b)q(e)g(mixed)d(with)j(man)o(y)f(di\013eren)o(t)g(parsers.)
23 b(Ho)o(w)o(ev)o(er,)15 b(parsers)i(and)125 315 y(lexers)d(w)o(ould)i(b)q
(e)f(closely)g(matc)o(hed.)k(Th)o(us,)c(some)g(parts)h(of)g(a)g(framew)o(ork)
e(place)h(more)125 376 y(constrain)o(ts)h(on)h(eac)o(h)f(other)g(than)h(other\
s.)198 436 y(MacApp)k(is)h(a)g(framew)o(ork)e(for)i(Macin)o(tosh)g(applicatio\
ns[Sc)o(h86)o(].)38 b(An)21 b(abstract)125 496 y(MacApp)14 b(application)g
(consists)h(of)g(one)g(or)f(more)g(windo)o(ws,)h(one)f(or)h(more)f(do)q(cumen)
o(ts,)125 556 y(and)20 b(an)g(application)f(ob)s(ject.)31 b(A)19 b(windo)o
(w)h(con)o(tains)g(a)g(set)f(of)h(views,)g(eac)o(h)f(of)h(whic)o(h)125 616 y
(displa)o(ys)f(part)h(of)g(the)f(state)h(of)g(a)h(do)q(cumen)o(t.)30 b(MacApp)
19 b(also)h(con)o(tains)g(commands,)125 677 y(whic)o(h)10 b(automate)h(the)f
(undo/redo)j(mec)o(hanism)o(,)c(and)j(prin)o(ter)e(handlers,)h(whic)o(h)g(pro)
o(vide)125 737 y(device)16 b(indep)q(enden)o(t)i(prin)o(ting.)27 b(Most)19 b
(application)g(classes)f(do)h(little)e(b)q(esides)h(de\014ne)125 797 y(the)h
(class)h(of)g(their)g(do)q(cumen)o(t.)30 b(They)20 b(inherit)f(a)h(command)e
(in)o(terpreter)g(and)j(men)o(u)125 857 y(options.)h(Most)16 b(do)q(cumen)o
(t)f(classes)h(do)h(little)e(b)q(esides)h(de\014ne)g(their)f(windo)o(w)i(and)
g(ho)o(w)125 917 y(to)d(read)g(and)g(write)g(do)q(cumen)o(ts)e(to)j(disk.)20 b
(They)14 b(inherit)e(men)o(u)g(options)j(for)f(sa)o(ving)g(the)125 978 y(do)q
(cumen)o(ts)i(and)j(to)q(ols)g(for)f(selecting)f(whic)o(h)g(do)q(cumen)o(t)f
(to)j(op)q(en)f(next.)26 b(An)17 b(a)o(v)o(erage)125 1038 y(programmer)k(rare\
ly)i(mak)o(es)f(new)i(windo)o(w)g(classes,)h(but)f(usually)f(has)h(to)g(de\
\014ne)g(a)125 1098 y(view)19 b(class)i(that)g(renders)g(an)g(image)e(of)i
(a)g(do)q(cumen)o(t.)33 b(MacApp)20 b(not)i(only)e(ensures)125 1158 y(that)15
b(programs)f(meet)f(the)h(Macin)o(tosh)h(user-in)o(terface)e(standard,)j(but)
f(mak)o(es)e(it)h(m)o(uc)o(h)125 1218 y(easier)h(to)i(write)f(in)o(teractiv)o
(e)d(programs.)198 1279 y(Other)i(framew)o(orks)f(include)f(the)i(Lisa)h(T)l
(o)q(olkit[A)o(C84],)f(whic)o(h)f(w)o(as)i(used)f(to)h(build)125 1339 y(appli\
cations)10 b(for)h(the)g(Lisa)h(desktop)f(en)o(vironmen)o(t,)d(and)k(the)e
(Smalltalk)f(Mo)q(del/View/Con)o(troller)125 1399 y(\(MV)o(C\),)g(whic)o(h)h
(is)h(a)g(framew)o(ork)e(for)i(constructing)g(Smalltalk-80)f(user)h(in)o(terf\
aces[Gol84)o(].)125 1459 y(Although)i(these)h(framew)o(orks)e(are)i(concerned)
f(primarily)e(with)j(implem)o(en)n(ting)d(a)j(stan-)125 1519 y(dard)i(user)h
(in)o(terface,)d(framew)o(orks)h(are)h(b)o(y)g(no)h(means)e(limited)e(to)k
(the)f(user)g(in)o(terface.)125 1579 y(F)l(or)k(example,)f(the)h(Battery)g
(Sim)o(ulation[F)l(o)q(o88)o(])g(is)g(a)h(framew)o(ork)e(for)i(constructing)
125 1640 y(realtime)13 b(psyc)o(hoph)o(ysiological)j(exp)q(erimen)o(ts.)198
1700 y(F)l(ramew)o(orks)11 b(are)h(useful)g(for)g(reusing)g(more)f(than)i(jus\
t)f(mainline)e(application)i(co)q(de.)125 1760 y(They)h(can)i(also)g(describ)
q(e)e(the)h(abstract)h(designs)g(of)f(library)f(comp)q(onen)o(ts.)20 b(The)14
b(abilit)o(y)125 1820 y(of)k(framew)o(orks)e(to)j(allo)o(w)e(the)h(extension)
f(of)h(existing)g(library)f(comp)q(onen)o(ts)g(is)h(one)g(of)125 1880 y(their)
d(principal)g(strengths.)198 1941 y(F)l(ramew)o(orks)g(are)i(more)e(than)i
(w)o(ell)f(written)g(class)h(libraries.)k(A)c(go)q(o)q(d)h(example)d(of)125
2001 y(a)20 b(set)h(of)f(library)g(utilit)o(y)e(class)j(de\014nitions)f(is)g
(the)g(Smalltalk)f(Collection)g(hierarc)o(h)o(y)l(.)125 2061 y(These)e(classe\
s)h(pro)o(vide)f(w)o(a)o(ys)h(of)h(manipulating)d(collections)h(of)h(ob)s(jec\
ts)g(suc)o(h)g(as)g(Ar-)125 2121 y(ra)o(ys,)e(Dictionaries,)g(Sets,)g(Bags,)h
(and)g(the)g(lik)o(e.)k(In)16 b(a)i(sense,)e(these)g(to)q(ols)i(corresp)q(ond)
125 2181 y(to)h(the)g(sorts)h(of)f(to)q(ols)h(one)f(migh)o(t)e(\014nd)j(in)e
(the)h(supp)q(ort)h(library)f(for)g(a)g(con)o(v)o(en)o(tional)125 2242 y(prog\
ramming)f(system.)31 b(Eac)o(h)21 b(comp)q(onen)o(t)e(in)g(suc)o(h)h(a)h(libr\
ary)e(can)i(serv)o(e)e(as)h(a)h(dis-)125 2302 y(crete,)c(stand-alone,)i(con)o
(text)f(indep)q(enden)o(t)f(part)i(of)g(a)g(solution)f(to)h(a)g(large)f(range)
h(of)125 2362 y(di\013eren)o(t)c(problems.)20 b(Suc)o(h)c(comp)q(onen)o(ts)f
(are)i(largely)e(application)h(indep)q(enden)o(t.)198 2422 y(A)e(framew)o(ork\
,)f(on)h(the)h(other)f(hand,)h(is)f(an)h(abstract)g(design)g(for)g(a)f(partic\
ular)g(kind)125 2482 y(of)k(application,)g(and)g(usually)g(consists)g(of)g
(a)h(n)o(um)o(b)q(er)d(of)i(classes.)27 b(These)18 b(classes)g(can)125 2543 y
(b)q(e)e(tak)o(en)g(from)f(a)i(class)f(library)l(,)f(or)h(can)h(b)q(e)f(appli\
cation-sp)q(eci\014c.)198 2603 y(F)l(ramew)o(orks)i(can)h(b)q(e)h(built)e(on)
i(top)g(of)g(other)f(framew)o(orks)f(b)o(y)h(sharing)h(abstract)930 2769 y
(10)g eop bop 125 195 a fi(classes.)29 b(F)o(OIBLE)18 b(is)h(a)g(framew)o(ork)
f(for)h(building)g(\\device)e(programming")h(systems)125 255 y(in)e(Smalltalk\
[Eri87)n(].)24 b(It)17 b(lets)f(the)h(user)g(edit)g(a)g(picture)g(consisting)
g(of)g(a)h(collection)e(of)125 315 y(in)o(terconnected)d(devices.)19 b(These)
c(devices)e(ha)o(v)o(e)i(computational)f(meaning,)f(so)j(editing)125 376 y
(the)i(picture)f(is)h(a)h(form)e(of)h(programming.)26 b(F)o(OIBLE)18 b(uses)g
(the)g(MV)o(C)g(framew)o(ork)f(to)125 436 y(implem)o(e)o(n)o(t)c(the)k(editor\
,)e(but)i(adds)g(T)l(o)q(ols)g(and)g(F)l(oibles)f(to)h(implem)o(en)n(t)d(the)
i(seman)o(tics)125 496 y(of)g(the)h(picture)e(and)j(the)e(visual)g(represen)o
(tation)g(of)h(comp)q(onen)o(ts.)22 b(Th)o(us,)16 b(F)o(OIBLE)g(is)125 556 y
(built)f(on)i(top)g(of)f(MV)o(C.)198 616 y(F)l(ramew)o(orks)i(pro)o(vide)h
(a)i(w)o(a)o(y)e(of)h(reusing)g(co)q(de)g(that)g(is)g(resistan)o(t)g(to)g(mor\
e)f(con-)125 677 y(v)o(en)o(tional)14 b(reuse)i(attempts.)21 b(Application)15
b(indep)q(enden)o(t)g(comp)q(onen)o(ts)g(can)i(b)q(e)f(reused)125 737 y(rathe\
r)g(easily)l(,)f(but)h(reusing)h(the)f(edi\014ce)f(that)h(ties)g(the)g(comp)q
(onen)o(ts)g(together)g(is)g(usu-)125 797 y(ally)g(p)q(ossible)h(only)g(b)o
(y)g(cop)o(ying)g(and)h(editing)e(it.)24 b(Unlik)o(e)15 b(sk)o(eleton)i(progr\
ams,)g(whic)o(h)125 857 y(is)f(the)g(con)o(v)o(en)o(tional)f(approac)o(h)i
(to)g(reusing)f(this)h(kind)f(of)g(co)q(de,)h(framew)o(orks)e(mak)o(e)f(it)
125 917 y(easy)g(to)g(ensure)g(the)g(consistency)f(of)i(all)f(comp)q(onen)o
(ts)f(under)h(c)o(hanging)g(requiremen)o(ts.)198 978 y(Since)j(framew)o(orks)
f(pro)o(vide)h(for)h(reuse)g(at)g(the)g(largest)g(gran)o(ularit)o(y)l(,)f(it)
g(is)h(no)g(sur-)125 1038 y(prise)g(that)h(a)g(go)q(o)q(d)i(framew)o(ork)c
(is)i(more)e(di\016cult)g(to)i(design)g(than)g(a)h(go)q(o)q(d)g(abstract)125
1098 y(class.)f(F)l(ramew)o(orks)10 b(tend)h(to)g(b)q(e)g(application)g(sp)q
(eci\014c,)g(to)h(in)o(terlo)q(c)o(k)d(with)i(other)g(frame-)125 1158 y(w)o
(orks)20 b(b)o(y)f(sharing)i(abstract)f(classes,)h(and)f(to)g(con)o(tain)g
(some)f(abstract)i(classes)f(that)125 1218 y(are)14 b(sp)q(ecialized)f(for)h
(the)g(framew)o(ork.)19 b(Designing)c(a)f(framew)o(ork)f(requires)g(a)i(great)
f(deal)125 1279 y(of)j(exp)q(erience)e(and)i(exp)q(erimen)o(tation,)d(just)j
(lik)o(e)e(designing)i(its)f(comp)q(onen)o(t)g(abstract)125 1339 y(classes.)
125 1483 y fc(4.1)69 b(White-b)r(o)n(x)22 b(vs.)31 b(Blac)n(k-b)r(o)n(x)23 b
(F)-6 b(ramew)n(orks)125 1576 y fi(One)19 b(imp)q(ortan)o(t)f(c)o(haracterist\
ic)g(of)i(a)g(framew)o(ork)e(is)i(that)g(the)f(metho)q(ds)g(de\014ned)g(b)o
(y)125 1636 y(the)h(user)g(to)g(tailor)g(the)g(framew)o(ork)f(will)g(often)i
(b)q(e)f(called)f(from)g(within)h(the)g(frame-)125 1696 y(w)o(ork)14 b(itself\
,)g(rather)g(than)h(from)f(the)g(user's)h(application)f(co)q(de.)21 b(The)15 b
(framew)o(ork)e(often)125 1756 y(pla)o(ys)20 b(the)h(role)f(of)i(the)e(main)g
(program)h(in)f(co)q(ordinating)i(and)g(sequencing)e(applica-)125 1816 y(tion)
h(activit)o(y)l(.)33 b(This)21 b(in)o(v)o(ersion)f(of)h(con)o(trol)g(giv)o
(es)f(framew)o(orks)g(the)h(p)q(o)o(w)o(er)g(to)g(serv)o(e)125 1876 y(as)f
(extensible)e(sk)o(eletons.)30 b(The)20 b(metho)q(ds)f(supplied)g(b)o(y)g(the)
g(user)h(tailer)f(the)g(generic)125 1937 y(algorithms)c(de\014ned)h(in)g(the)
g(framew)o(ork)f(for)h(a)h(particular)f(application.)198 1997 y(A)21 b(framew)
o(ork's)e(application)i(sp)q(eci\014c)g(b)q(eha)o(vior)g(is)g(usually)g(de\
\014ned)h(b)o(y)e(adding)125 2057 y(metho)q(ds)g(to)g(sub)q(classes)i(of)f
(one)f(or)h(more)e(of)i(its)f(classes.)34 b(Eac)o(h)21 b(metho)q(d)f(added)h
(to)125 2117 y(a)c(sub)q(class)h(m)o(ust)e(abide)h(b)o(y)g(the)g(in)o(ternal)
f(con)o(v)o(en)o(tions)g(of)i(its)f(sup)q(erclasses.)25 b(W)l(e)17 b(call)125
2177 y(these)e fg(white-b)n(ox)i fi(framew)o(orks)d(b)q(ecause)i(their)e(impl\
em)o(en)o(tation)f(m)o(ust)h(b)q(e)h(understo)q(o)q(d)125 2238 y(to)h(use)g
(them.)198 2298 y(A)e(go)q(o)q(d)j(example)12 b(is)j(the)f(MV)o(C)g(Con)o(tro\
ller)g(class,)h(whic)o(h)f(maps)g(user)g(actions)h(in)o(to)125 2358 y(message\
s)h(to)g(the)h(application.)k(When)c(the)f(mouse)f(mo)o(v)o(es)g(in)o(to)h
(the)g(region)h(of)g(a)g(con-)125 2418 y(troller,)10 b(it)h(is)g(sen)o(t)g
(the)h fe(startUp)c fi(message,)j(whic)o(h)g(causes)h(the)f(con)o(troller)f
(to)i(b)q(e)f(sen)o(t)g(the)125 2478 y fe(controlIn)o(it)o(ial)o(ize)o fi(,)h
fe(controlLoop)o fi(,)g(and)k fe(controlTerm)o(ina)o(te)c fi(messages,)j(in)g
(that)125 2539 y(order.)k(The)12 b(b)q(eha)o(vior)g(of)g(a)h(con)o(troller)e
(when)h(it)f(is)h(selected)e(and)j(deselected)d(is)i(c)o(hanged)125 2599 y
(b)o(y)e(rede\014ning)h fe(controlInit)o(ial)o(ize)d fi(and)k fe(controlTe)o
(rmi)o(na)o(te)p fi(.)k(The)c(default)f(b)q(eha)o(v-)930 2769 y(11)g eop bop
125 195 a fi(ior)16 b(of)h fe(controlLoo)o(p)d fi(is)i(to)h(rep)q(eatedly)f
(send)h(the)f(con)o(troller)g(the)g fe(controlActi)o(vit)o(y)125 255 y fi(mes\
sage)h(un)o(til)g(the)g(mouse)g(mo)o(v)o(es)f(out)i(of)h(the)e(region)h(of)g
(the)g(con)o(troller.)25 b(Th)o(us,)18 b(the)125 315 y(reaction)12 b(of)h(a)g
(con)o(troller)e(to)i(mouse)e(mo)o(v)o(emen)n(t,)f(mouse)i(button)h(clic)o
(ks,)e(and)i(k)o(eyb)q(oard)125 376 y(ev)o(en)o(ts)h(is)j(determined)c(b)o
(y)j(the)g(de\014nition)g(of)g(the)g fe(controlActi)o(vit)o(y)p fi(.)198 436 y
(The)c(ma)s(jor)e(problem)h(with)g(suc)o(h)h(a)g(framew)o(ork)e(is)i(that)g
(ev)o(ery)e(application)i(requires)125 496 y(the)17 b(creation)g(of)g(man)o
(y)f(new)h(sub)q(classes.)25 b(While)17 b(most)f(of)i(these)f(new)g(sub)q(cla\
sses)h(are)125 556 y(simple,)d(their)h(n)o(um)o(b)q(er)g(can)h(mak)o(e)f(it)h
(di\016cult)f(for)i(a)f(new)h(programmer)d(to)j(learn)f(the)125 616 y(design)
f(of)g(an)h(application)f(w)o(ell)f(enough)i(to)g(c)o(hange)f(it.)198 677 y
(A)i(second)g(problem)f(is)h(that)h(a)g(white-b)q(o)o(x)f(framew)o(ork)f(can)
i(b)q(e)g(di\016cult)e(to)h(learn)125 737 y(to)e(use,)g(since)f(learning)h
(to)h(use)f(it)g(is)g(the)g(same)f(as)i(learning)f(ho)o(w)h(it)f(is)g(constru\
cted.)198 797 y(Another)e(w)o(a)o(y)h(to)g(customize)e(a)i(framew)o(ork)e(is)
i(to)g(supply)f(it)h(with)f(a)h(set)g(of)g(comp)q(o-)125 857 y(nen)o(ts)e(tha\
t)h(pro)o(vide)e(the)i(application)f(sp)q(eci\014c)g(b)q(eha)o(vior.)20 b(Eac)
o(h)14 b(of)g(these)f(comp)q(onen)o(ts)125 917 y(will)j(b)q(e)i(required)e
(to)i(understand)g(a)g(particular)f(proto)q(col.)26 b(All)16 b(or)i(most)f
(of)h(the)f(com-)125 978 y(p)q(onen)o(ts)22 b(migh)o(t)f(b)q(e)h(pro)o(vided)
f(b)o(y)h(a)h(comp)q(onen)o(t)e(library)l(.)38 b(The)22 b(in)o(terface)f(b)q
(et)o(w)o(een)125 1038 y(comp)q(onen)o(ts)16 b(can)h(b)q(e)g(de\014ned)g(b)o
(y)g(proto)q(col,)g(so)h(the)f(user)g(needs)g(to)g(understand)h(only)125 1098
y(the)h(external)g(in)o(terface)g(of)h(the)g(comp)q(onen)o(ts.)31 b(Th)o(us,)
21 b(this)f(kind)f(of)h(a)h(framew)o(ork)d(is)125 1158 y(called)d(a)h fg(blac\
k-b)n(ox)j fi(framew)o(ork.)198 1218 y(There)c(is)g(a)i(set)e(of)h(blac)o(k-b)
q(o)o(x)f(comp)q(onen)o(ts)g(of)h(MV)o(C)f(called)g(the)g fg(pluggable)k(view\
s)p fi(.)125 1279 y(These)24 b(comp)q(onen)o(ts)f(w)o(ere)g(designed)h(with)g
(the)g(realization)f(that)i(the)f(ma)s(jorit)o(y)e(of)125 1339 y(MV)o(C)15 b
(classes)h(that)g(w)o(ere)f(created)g(w)o(ere)h(con)o(trollers)f(with)g(a)i
(customized)d(men)o(u.)19 b(The)125 1399 y(pluggable)24 b(views)f(let)h(con)o
(trollers)f(tak)o(e)g(the)h(men)o(us)f(as)i(parameters,)f(th)o(us)g(greatly)
125 1459 y(reducing)17 b(the)h(need)f(to)h(create)g(new)f(con)o(troller)g(cla\
sses.)26 b(Most)19 b(of)f(the)f(programming)125 1519 y(to)q(ols)h(in)f(the)g
(latest)g(v)o(ersions)f(of)i(Smalltalk-80,)e(suc)o(h)h(as)h(the)f(bro)o(wser,)
g(\014le)g(to)q(ol,)g(and)125 1579 y(debugger,)12 b(use)f(pluggable)h(views)f
(and)h(do)g(not)g(require)e(an)o(y)h(new)h(user)f(in)o(terface)f(classes.)125
1640 y(The)i(metho)q(d)f(that)i(in)o(v)o(ok)o(es)d(a)j(to)q(ol)f(will)f(creat\
e)h(instances)g(of)g(the)g(v)m(arious)h(comp)q(onen)o(ts,)125 1700 y(send)24 b
(messages)f(to)i(them)d(to)j(customize)d(them)g(for)i(the)g(to)q(ol,)i(and)f
(connect)f(them)125 1760 y(together.)198 1820 y(Blac)o(k-b)q(o)o(x)19 b(frame\
w)o(orks)h(lik)o(e)f(the)h(pluggable)h(views)f(are)h(easier)f(to)h(learn)g
(to)g(use)125 1880 y(than)h(white-b)q(o)o(x)h(framew)o(orks,)f(but)g(are)g
(less)g(\015exible.)38 b(Pluggable)22 b(views)g(are)g(usu-)125 1941 y(ally)c
(su\016cien)o(t)g(to)i(describ)q(e)f(user)h(in)o(terfaces)e(that)i(displa)o
(y)f(only)g(text,)g(but)h(the)f(user)125 2001 y(who)f(w)o(an)o(ts)g(a)g(more)
f(graphical)h(user)g(in)o(terface)e(will)h(ha)o(v)o(e)g(to)h(use)g(the)f(orig\
inal)h(MV)o(C)125 2061 y(framew)o(ork.)i(F)l(ortunately)l(,)c(pluggable)h(vie\
ws)f(\014t)g(in)o(to)g(the)h(MV)o(C)e(framew)o(ork)h(w)o(ell,)e(so)125 2121 y
(the)i(user)g(only)g(has)h(to)g(create)f(comp)q(onen)o(ts)g(to)g(handle)h(the)
f(graphical)g(asp)q(ects)i(of)e(the)125 2181 y(in)o(terface.)198 2242 y(One)g
(w)o(a)o(y)g(of)g(c)o(haracterizing)f(the)i(di\013erence)e(b)q(et)o(w)o(een)g
(white-b)q(o)o(x)h(and)h(blac)o(k-b)q(o)o(x)125 2302 y(framew)o(orks)g(is)i
(to)g(observ)o(e)f(that)i(in)e(white-b)q(o)o(x)h(framew)o(orks,)f(the)g(state)
i(of)f(eac)o(h)f(in-)125 2362 y(stance)j(is)h(implicit)o(ly)d(a)o(v)m(ailable)
i(to)h(all)f(the)g(metho)q(ds)h(in)f(the)h(framew)o(ork,)f(m)o(uc)o(h)e(as)
125 2422 y(the)f(global)h(v)m(ariables)g(in)f(a)h(P)o(ascal)g(program)f(are.)
29 b(In)18 b(a)h(blac)o(k-b)q(o)o(x)g(framew)o(ork,)e(an)o(y)125 2482 y(infor\
mation)c(passed)i(to)g(constituen)o(ts)f(of)h(the)f(framew)o(ork)f(m)o(ust)g
(b)q(e)i(passed)g(explicitly)l(.)125 2543 y(Hence,)j(a)i(white-b)q(o)o(x)f
(framew)o(ork)f(relies)g(on)i(the)f(in)o(tra-ob)s(ject)g(scop)q(e)h(rules)e
(to)i(allo)o(w)125 2603 y(it)e(to)h(ev)o(olv)o(e)e(without)i(forcing)g(it)f
(to)h(subscrib)q(e)g(to)g(an)h(explicit,)d(rigid)h(proto)q(col)i(that)930 2769
y(12)g eop bop 125 195 a fi(migh)o(t)14 b(constrain)j(the)f(design)g(pro)q
(cess)h(prematurely)l(.)198 255 y(A)e(framew)o(ork)f(b)q(ecomes)g(more)g(reus\
eable)h(as)h(the)f(relationship)h(b)q(et)o(w)o(een)e(its)h(parts)125 315 y
(is)i(de\014ned)h(in)g(terms)e(of)j(a)f(proto)q(col,)h(instead)f(of)g(using)h
(inheritance.)25 b(In)18 b(fact,)g(as)g(the)125 376 y(design)e(of)h(a)f(syste\
m)f(b)q(ecomes)h(b)q(etter)g(understo)q(o)q(d,)h(blac)o(k-b)q(o)o(x)f(relatio\
nships)h(should)125 436 y(replace)f(white-b)q(o)o(x)i(ones.)26 b(Blac)o(k-b)q
(o)o(x)16 b(relationships)i(are)f(an)i(ideal)d(to)o(w)o(ards)j(whic)o(h)e(a)
125 496 y(system)d(should)j(ev)o(olv)o(e.)125 640 y fc(4.2)69 b(T)-6 b(o)r
(olkits)125 733 y fi(An)12 b(ob)s(ject-orien)o(ted)f(application)h(constructi\
on)g(en)o(vironmen)o(t,)e(or)j(to)q(olkit,)f(is)g(a)h(collec-)125 793 y(tion)
i(of)g(high)g(lev)o(el)e(to)q(ols)j(that)g(allo)o(w)f(a)g(user)g(to)h(in)o
(teract)e(with)h(an)g(application)g(frame-)125 853 y(w)o(ork)20 b(to)h(con\
\014gure)h(and)f(construct)g(new)g(applications.)35 b(Examples)19 b(of)i(to)q
(olkits)g(are)125 913 y(Alexander's)9 b(Glazier)h(system)f(for)i(constructing)
g(Smalltalk-80)f(MV)o(C)g(applications[Ale87)o(],)125 974 y(and)h(Smith's)f
(Alternate)g(Realit)o(y)g(Kit[Smi87)n(].)19 b(All)10 b(to)q(olkits)h(are)h
(based)f(on)h(one)g(or)f(more)125 1034 y(framew)o(orks.)198 1094 y(One)18 b
(of)g(the)h(adv)m(an)o(tages)g(of)g(blac)o(k-b)q(o)o(x)f(framew)o(orks)f(is)h
(that)h(they)f(are)h(b)q(etter)f(at)125 1154 y(serving)i(as)h(the)g(foundatio\
n)g(of)g(a)g(to)q(olkit.)35 b(It)20 b(is)g(easy)h(to)g(build)f(a)h(to)q(ol)g
(that)g(lets)g(a)125 1214 y(user)16 b(c)o(ho)q(ose)h(prebuilt)f(comp)q(onen)o
(ts)g(and)h(connect)g(them)e(together,)h(and)h(a)h(successful)125 1275 y(blac)
o(k-b)q(o)o(x)11 b(framew)o(ork)f(p)q(ermits)h(most)g(applications)h(to)g(b)q
(e)g(constructed)g(that)g(w)o(a)o(y)l(.)19 b(An)125 1335 y(example)10 b(of)k
(suc)o(h)f(a)g(to)q(ol)h(is)f(Glazier[Ale87)n(],)g(whic)o(h)f(builds)h(an)h
(application)f(within)f(the)125 1395 y(Mo)q(del/View/Con)o(troller)j(framew)o
(ork)g(using)h(pluggable)h(views.)198 1455 y(F)l(ramew)o(orks)f(mak)o(e)f(it)
h(easier)h(to)h(de\014ne)e(sp)q(ecialized)g(programs)h(for)h(constructing)125
1515 y(classes.)45 b(F)l(or)24 b(example,)f(a)i(compiler)d(migh)o(t)g(pro)o
(vide)i(to)q(ols)h(for)f(building)g(parsers,)125 1576 y(lexers,)14 b(and)i
(co)q(de)g(generators.)22 b(It)15 b(is)g(easier)h(to)g(build)f(a)h(to)q(ol)g
(for)g(constructing)g(classes)125 1636 y(with)21 b(w)o(ell)f(de\014ned)h(in)o
(terfaces)g(than)h(it)f(is)g(to)h(build)f(a)h(general)f(purp)q(ose)i(automati\
c)125 1696 y(programming)14 b(system.)125 1862 y fb(5)82 b(Lifecycle)125 1972
y fi(The)19 b(lifecycle)d(of)k(a)g(Smalltalk)d(application)i(is)g(not)h(neces\
sarily)e(di\013eren)o(t)g(from)h(that)125 2032 y(of)g(other)h(programs)f(dev)
o(elop)q(ed)g(using)g(rapid)h(protot)o(yping.)31 b(Ho)o(w)o(ev)o(er,)18 b(the)
h(lifecycle)125 2092 y(of)g(classes)g(di\013ers)g(mark)o(edly)e(from)h(that)i
(of)f(program)g(comp)q(onen)o(ts)g(in)f(con)o(v)o(en)o(tional)125 2152 y(lang\
uages,)f(since)e(classes)h(ma)o(y)f(b)q(e)h(reused)g(in)g(man)o(y)f(applicati\
ons.)198 2213 y(Classes)j(usually)e(start)i(out)g(b)q(eing)g(application)f
(dep)q(enden)o(t.)23 b(It)17 b(is)g(alw)o(a)o(ys)g(w)o(orth-)125 2273 y(while)
f(to)i(examine)d(a)j(nearly-complete)d(pro)s(ject)i(to)g(see)g(if)g(new)h(abs\
tract)g(classes)f(and)125 2333 y(framew)o(orks)e(can)h(b)q(e)g(disco)o(v)o
(ered.)k(They)c(can)g(probably)h(b)q(e)f(reused)g(in)g(later)g(pro)s(jects,)
125 2393 y(and)i(their)f(presence)g(in)g(the)h(curren)o(t)e(pro)s(ject)i(will)
e(mak)o(e)g(later)h(enhancemen)o(ts)f(m)o(uc)o(h)125 2453 y(easier.)24 b(Th)o
(us,)18 b(creating)f(abstract)h(classes)f(and)h(framew)o(orks)f(is)g(b)q(oth)
h(a)g(w)o(a)o(y)f(of)h(sca)o(v-)125 2514 y(enging)c(comp)q(onen)o(ts)f(for)i
(later)f(reuse)g(and)g(a)h(w)o(a)o(y)f(of)g(cleaning)g(up)g(a)h(design.)21 b
(The)14 b(\014nal)125 2574 y(class)g(hierarc)o(h)o(y)e(is)i(a)h(description)e
(of)h(ho)o(w)h(the)f(system)e(ough)o(t)j(to)f(ha)o(v)o(e)g(b)q(een)g(designed\
,)125 2634 y(though)j(it)f(ma)o(y)e(b)q(ear)j(little)e(relation)g(to)i(the)f
(original)g(design.)930 2769 y(13)g eop bop 198 195 a fi(One)17 b(of)h(the)f
(reasons)h(that)g(Smalltalk)e(is)h(go)q(o)q(d)i(for)f(protot)o(yping)g(is)f
(that)h(the)f(pro-)125 255 y(grammer)c(can)i(b)q(orro)o(w)h(co)q(de)g(from)e
(an)o(ywhere)h(in)g(the)g(system.)k(Ho)o(w)o(ev)o(er,)13 b(this)j(should)125
315 y(nev)o(er)i(b)q(e)h(mistak)o(en)e(for)j(go)q(o)q(d)h(design.)30 b(It)19 b
(is)g(almost)f(alw)o(a)o(ys)i(necessary)e(at)i(the)f(end)125 376 y(of)h(a)i
(pro)s(ject)e(to)h(reorganize)f(the)g(class)h(hierarc)o(h)o(y)l(.)33 b(Unfort\
unately)l(,)21 b(few)f(to)q(ols)i(help)125 436 y(this)d(task.)30 b(Section)19
b(6)h(will)e(discuss)h(ho)o(w)h(to)f(recognize)g(class)g(hierarc)o(hies)f(tha\
t)h(need)125 496 y(to)h(b)q(e)f(reorganized.)32 b(Suggestions)21 b(for)f(to)q
(ols)g(to)g(aid)g(reorganization)g(will)f(app)q(ear)h(in)125 556 y(Section)15
b(7.)198 616 y(One)d(sign)h(that)h(a)f(go)q(o)q(d)i(abstraction)e(has)h(b)q
(een)e(found)i(is)f(that)g(co)q(de)g(size)f(decreases,)125 677 y(indicating)j
(that)i(co)q(de)f(is)g(b)q(eing)g(reused.)21 b(Man)o(y)16 b(Smalltalk)d(pro)s
(jects)j(ha)o(v)o(e)g(p)q(erio)q(ds)g(in)125 737 y(whic)o(h)j(the)h(size)f
(of)h(the)g(co)q(de)g(increases)g(at)g(a)g(steady)g(rate,)h(follo)o(w)o(ed)e
(b)o(y)h(p)q(erio)q(ds)g(in)125 797 y(whic)o(h)h(little)f(c)o(hange)i(o)q(ccu\
rs)g(to)h(the)e(co)q(de,)j(follo)o(w)o(ed)d(b)o(y)g(a)h(sharp)h(decrease)f
(in)f(the)125 857 y(size)15 b(of)i(the)g(co)q(de.)22 b(Co)q(de)c(size)e(incre\
ases)g(as)h(the)g(programmers)e(add)i(new)g(classes)f(and)125 917 y(new)22 b
(metho)q(ds)g(to)g(old)h(classes.)39 b(Ev)o(en)o(tually)21 b(the)h(programmer\
s)f(realize)g(that)h(they)125 978 y(need)g(to)h(rearrange)g(the)g(class)g(hie\
rarc)o(h)o(y)l(.)39 b(They)22 b(sp)q(end)i(a)f(bit)f(of)h(time)e(in)h(debate)
125 1038 y(and)16 b(exp)q(erimen)o(tation)e(and)i(then)g(mak)o(e)f(the)g(nece\
ssary)h(c)o(hanges,)g(usually)g(creating)g(a)125 1098 y(new)j(abstract)h(clas\
s)g(or)g(t)o(w)o(o.)31 b(Since)19 b(Smalltalk)e(programs)j(tend)f(to)h(b)q
(e)g(compact,)e(it)125 1158 y(is)e(feasible)g(to)g(rewrite)g(a)h(system)e(man)
o(y)g(times)g(during)i(its)f(dev)o(elopmen)o(t.)j(The)d(result)125 1218 y(is)
22 b(m)o(uc)o(h)f(easier)h(to)h(understand)h(and)g(main)o(tain)d(than)i(t)o
(ypical)f(nonob)s(ject-orien)o(ted)125 1279 y(systems.)198 1339 y(There)14 b
(are)h(man)o(y)f(w)o(a)o(ys)g(that)i(classes)e(can)h(b)q(e)g(reorganized.)21 b
(Big,)14 b(complex)f(classes)125 1399 y(can)19 b(b)q(e)g(split)g(in)o(to)f
(sev)o(eral)g(smaller)g(classes.)29 b(A)19 b(common)e(sup)q(erclass)j(can)f
(b)q(e)g(found)125 1459 y(for)g(a)g(set)g(of)g(related)f(classes.)29 b(Concre\
te)19 b(sup)q(erclasses)g(can)g(b)q(e)g(made)f(abstract.)29 b(An)125 1519 y
(white-b)q(o)o(x)17 b(framew)o(ork)e(can)j(b)q(e)f(con)o(v)o(erted)e(in)o(to)
i(a)h(blac)o(k-b)q(o)o(x)e(framew)o(ork.)23 b(All)15 b(these)125 1579 y(c)o
(hanges)h(mak)o(e)e(classes)j(more)e(reuseable)g(and)i(main)o(tainable.)198
1640 y(Ev)o(ery)10 b(class)i(hierarc)o(h)o(y)d(o\013ers)k(the)e(p)q(ossibilit)
o(y)f(of)i(b)q(ecoming)e(a)i(framew)o(ork.)18 b(Since)11 b(a)125 1700 y(white\
-b)q(o)o(x)k(framew)o(ork)f(is)h(just)h(a)g(set)f(of)h(con)o(v)o(en)o(tions)e
(for)i(o)o(v)o(erriding)e(metho)q(ds,)h(there)125 1760 y(is)20 b(no)i(\014ne)
f(line)e(b)q(et)o(w)o(een)h(a)i(white-b)q(o)o(x)f(framew)o(ork)e(and)j(a)f
(simple)e(class)i(hierarc)o(h)o(y)l(.)125 1820 y(In)f(its)h(simplest)e(form,)
h(a)h(white-b)q(o)o(x)g(framew)o(ork)f(is)g(a)i(program)e(sk)o(eleton,)h(and)
g(the)125 1880 y(sub)q(classes)c(are)f(the)g(additions)h(to)f(the)g(sk)o(elet\
on.)198 1941 y(Ideally)l(,)g(eac)o(h)h(framew)o(ork)g(will)f(ev)o(olv)o(e)g
(in)o(to)h(a)i(blac)o(k-b)q(o)o(x)e(framew)o(ork.)24 b(Ho)o(w)o(ev)o(er,)125
2001 y(it)14 b(is)h(often)g(hard)h(to)f(tell)f(in)g(adv)m(ance)i(ho)o(w)f(an)
h(white-b)q(o)o(x)f(framew)o(ork)e(will)h(ev)o(olv)o(e)f(in)o(to)125 2061 y
(a)19 b(blac)o(k-b)q(o)o(x)g(framew)o(ork,)f(and)i(man)o(y)e(framew)o(orks)g
(will)g(not)h(complete)e(the)i(journey)125 2121 y(from)c(sk)o(eleton)g(to)i
(blac)o(k-b)q(o)o(x)e(framew)o(orks)g(during)i(their)e(lifetimes.)198 2181 y
(White-b)q(o)o(x)g(inheritance)f(framew)o(orks)f(should)j(b)q(e)f(seen)g(as)h
(a)f(natural)h(stage)f(in)g(the)125 2242 y(ev)o(olution)i(of)i(a)g(system.)26
b(Because)18 b(they)g(are)h(a)g(middle)d(ground)j(b)q(et)o(w)o(een)f(a)h(part\
icu-)125 2302 y(lar)c(application)h(and)g(an)g(abstract)h(design,)e(white-b)q
(o)o(x)h(inheritance)f(framew)o(orks)f(pro-)125 2362 y(vide)h(an)i(indisp)q
(ensable)f(path)g(along)h(whic)o(h)f(applications)g(ma)o(y)f(ev)o(olv)o(e.)k
(A)d(white-b)q(o)o(x)125 2422 y(framew)o(ork)d(will)i(sometime)d(b)q(e)j(a)h
(w)o(a)o(ystation)g(in)f(the)g(ev)o(olution)f(of)i(a)g(lo)q(ose)f(collection)
125 2482 y(of)22 b(metho)q(ds)f(in)o(to)g(a)h(discrete)f(set)g(of)h(comp)q
(onen)o(ts.)37 b(A)o(t)21 b(other)h(times,)f(a)h(white-b)q(o)o(x)125 2543 y
(framew)o(ork)12 b(will)h(b)q(e)i(a)f(\014nished)g(pro)q(duct.)22 b(A)13 b
(useful)h(design)h(strategy)f(is)g(to)h(b)q(egin)f(with)125 2603 y(a)23 b(whi\
te-b)q(o)o(x)f(approac)o(h.)41 b(White-b)q(o)o(x)23 b(framew)o(orks,)g(as)g
(a)g(result)f(of)h(their)f(in)o(ternal)930 2769 y(14)g eop bop 125 195 a fi
(informalit)o(y)l(,)16 b(are)k(usually)e(relativ)o(ely)f(easy)i(to)h(design.)
30 b(As)19 b(the)g(system)e(ev)o(olv)o(es,)h(the)125 255 y(designer)d(can)i
(then)f(see)g(if)g(additional)g(in)o(ternal)f(structure)h(emerges.)198 315 y
(Barbara)23 b(Lisk)o(o)o(v,)f(in)g(a)h(k)o(eynote)e(address)i(giv)o(en)e(at)h
(the)g(OOPSLA)h('87)f(confer-)125 376 y(ence)17 b(in)g(Orlando,)h(distinguish\
ed)g(b)q(et)o(w)o(een)f(inheritance)f(as)j(an)f(implem)o(en)o(tation)d(aid)
125 436 y(\(whic)o(h)k(she)h(dismissed)f(as)i(unimp)q(ortan)o(t\))e(and)i(inh\
eritance)e(for)i(extending)e(the)h(ab-)125 496 y(stract)e(functionalit)o(y)f
(of)h(an)h(ob)s(ject)f([Lis87].)27 b(Lisk)o(o)o(v)18 b(claims)e(that)j(in)f
(the)g(later)f(case,)125 556 y(only)e(the)h(abstract)h(sp)q(eci\014cation,)e
(and)i(not)f(the)g(in)o(ternal)f(represen)o(tation)g(of)i(the)e(par-)125 616 y
(en)o(t)20 b(ob)s(ject,)i(should)f(b)q(e)h(inherited.)34 b(She)21 b(w)o(as)h
(in)f(e\013ect)g(adv)o(o)q(cating)h(that)f(only)g(the)125 677 y(blac)o(k-b)q
(o)o(x)14 b(framew)o(ork)f(st)o(yle)g(should)i(b)q(e)f(emplo)o(y)o(ed.)k(Suc)
o(h)c(a)h(p)q(ersp)q(ectiv)o(e)e(ignores)i(the)125 737 y(v)m(alue)c(of)h(whit\
e-b)q(o)o(x)g(framew)o(orks.)18 b(Prohibiting)12 b(white-b)q(o)o(x)g(framew)o
(orks)e(ignores)i(b)q(oth)125 797 y(their)19 b(v)m(alue)g(in)h(their)f(o)o
(wn)h(righ)o(ts,)h(and)f(their)f(v)m(alue)h(as)h(the)e(progenitors)i(of)f(mat\
ure)125 857 y(comp)q(onen)o(ts.)198 917 y(Finding)c(new)h(abstractions)h(is)f
(di\016cult.)23 b(In)16 b(general,)h(it)f(seems)g(that)h(an)h(abstrac-)125 978
y(tion)c(is)h(usually)g(disco)o(v)o(ered)e(b)o(y)h(generalizing)g(from)g(a)h
(n)o(um)o(b)q(er)e(of)i(concrete)f(examples.)125 1038 y(An)i(exp)q(erienced)e
(designer)i(can)h(sometimes)c(in)o(v)o(en)o(t)i(an)i(abstract)g(class)f(from)
g(scratc)o(h,)125 1098 y(but)e(only)g(after)g(ha)o(ving)h(implem)o(e)o(n)o
(ted)c(concrete)j(v)o(ersions)g(for)g(sev)o(eral)f(other)i(pro)s(jects.)198
1158 y(This)i(is)g(probably)g(una)o(v)o(oidable.)23 b(Humans)16 b(think)g(b)q
(etter)h(ab)q(out)h(concrete)e(exam-)125 1218 y(ples)j(then)h(ab)q(out)i(abst\
ractions.)33 b(W)l(e)20 b(can)h(think)e(w)o(ell)g(ab)q(out)i(abstractions)g
(suc)o(h)f(as)125 1279 y(in)o(tegers)c(or)h(parsers)g(only)g(b)q(ecause)g(w)o
(e)f(ha)o(v)o(e)g(a)i(lot)f(of)g(exp)q(erience)e(with)h(them.)22 b(Ho)o(w-)
125 1339 y(ev)o(er,)17 b(new)i(abstractions)g(are)g(v)o(ery)e(imp)q(ortan)o
(t.)27 b(A)18 b(designer)h(should)g(b)q(e)g(v)o(ery)e(happ)o(y)125 1399 y(whe\
nev)o(er)e(a)h(go)q(o)q(d)i(abstraction)f(is)g(found,)f(no)h(matter)e(ho)o
(w)h(it)g(w)o(as)h(found.)125 1565 y fb(6)82 b(Design)27 b(metho)r(dology)125
1675 y fi(The)21 b(pro)q(duct)g(of)h(an)f(ob)s(ject-orien)o(ted)f(design)h
(is)g(a)h(list)e(of)h(class)h(de\014nitions.)35 b(Eac)o(h)125 1735 y(class)20
b(has)g(a)h(list)e(of)h(op)q(erations)h(that)g(it)e(de\014nes)h(and)g(a)h(lis\
t)e(of)h(ob)s(jects)g(with)g(whic)o(h)125 1795 y(its)j(instances)g(comm)o(uni\
cate.)40 b(In)23 b(addition,)i(eac)o(h)e(op)q(eration)i(has)f(a)g(list)f(of)h
(other)125 1855 y(op)q(erations)17 b(that)h(it)e(will)g(in)o(v)o(ok)o(e.)k
(A)d(design)g(is)f(complete)f(when)i(ev)o(ery)e(ob)s(ject)h(that)h(is)125 1916
y(referenced)12 b(has)j(b)q(een)f(de\014ned)g(and)g(ev)o(ery)f(op)q(eration)i
(is)f(de\014ned.)20 b(The)14 b(design)g(pro)q(cess)125 1976 y(incremen)o(tal)
o(ly)f(extends)j(an)h(incomplete)c(design)j(un)o(til)g(it)f(is)h(complete.)
198 2036 y(Ob)s(ject-orien)o(ted)k(design)i(starts)g(with)g(ob)s(jects.)37 b
(Bo)q(o)q(c)o(h)22 b(suggests)h(that)f(the)g(de-)125 2096 y(signer)15 b(start)
i(with)f(a)g(natural)h(language)g(description)e(of)i(the)e(desired)h(system)e
(and)j(use)125 2156 y(the)f(nouns)i(as)f(a)h(starting)f(p)q(oin)o(t)g(for)g
(the)f(classes)h(of)g(ob)s(jects)g(to)g(b)q(e)g(designed[Bo)q(o86)q(].)125
2217 y(Eac)o(h)c(v)o(erb)g(is)h(an)g(op)q(eration,)h(either)e(one)g(impleme)o
(n)o(ted)e(b)o(y)i(a)h(class)g(\(when)g(the)f(class)h(is)125 2277 y(the)g(dir\
ect)f(ob)s(ject\))h(or)h(one)g(used)g(b)o(y)f(the)g(class)h(\(when)f(the)h
(class)f(is)h(the)f(sub)s(ject\).)20 b(The)125 2337 y(resulting)e(list)g(of)h
(classes)g(and)g(op)q(erations)h(can)f(b)q(e)f(used)h(as)h(the)e(start)h(of)g
(the)g(design)125 2397 y(pro)q(cess.)198 2457 y(Op)q(erations)e(on)g(an)g(ob)
s(ject)f(are)g(alw)o(a)o(ys)h(though)o(t)g(ab)q(out)h(from)d(the)h(ob)s(ject'\
s)g(p)q(oin)o(t)125 2518 y(of)24 b(view.)43 b(Th)o(us,)26 b(instead)e(of)g
(displa)o(ying)g(an)g(ob)s(ject,)h(an)g(ob)s(ject)e(is)h(ask)o(ed)f(to)i(dis-)
125 2578 y(pla)o(y)17 b(itself.)24 b(Metho)q(ds)18 b(are)g(receiv)o(er-cen)o
(tri)o(c|m)o(an)o(y)c(of)k(the)g(commen)n(ts)d(in)j(the)f(stan-)125 2638 y
(dard)i(Smalltalk-80)e(image)g(use)i(the)f(w)o(ord)h(\\I")g(to)g(refer)f(to)g
(the)h(receiv)o(er.)25 b(This)19 b(is)f(in)930 2769 y(15)g eop bop 125 195 a
fi(stark)14 b(con)o(trast)g(to)g(other)h(w)o(a)o(ys)e(of)i(programming,)d(whe\
re)i(\\The)g(use)g(of)g(an)o(throp)q(omor-)125 255 y(phic)g(terminology)f(whe\
n)j(dealing)e(with)h(computer)f(systems)g(is)g(a)i(sign)f(of)g(professional)
125 315 y(imm)o(aturit)o(y"[Di)o(j82)n(].)198 376 y(Bo)q(o)q(c)o(h's)i(design)
h(metho)q(dology)f(de\014nes)g(classes)g(for)h(ob)s(jects)f(in)f(the)i(proble\
m)d(do-)125 436 y(main.)k(Ho)o(w)o(ev)o(er,)12 b(classes)h(are)h(often)g(need\
ed)f(for)h(op)q(erations)g(in)g(the)f(problem)f(domain.)125 496 y(F)l(or)17 b
(example,)e(compiling)h(a)h(program)h(can)f(b)q(e)h(though)o(t)g(of)g(as)g
(an)g(op)q(eration)g(on)g(pro-)125 556 y(grams.)i(Ho)o(w)o(ev)o(er,)12 b(b)q
(ecause)i(compilation)f(is)h(so)h(complex,)d(it)h(is)h(b)q(est)h(to)f(ha)o
(v)o(e)g(separate)125 616 y(compiler)d(ob)s(jects)j(to)g(represen)o(t)f(compi\
lation.)19 b(The)14 b fg(c)n(ompile)g fi(op)q(eration)h(on)g(programs)125 677
y(w)o(ould)k(mak)o(e)e(a)i(new)g(compiler)d(ob)s(ject)j(and)g(use)g(it)g(to)g
(mak)o(e)e(a)j(compiled)c(v)o(ersion)j(of)125 737 y(the)d(program.)198 797 y
(It)i(can)g(b)q(e)h(di\016cult)e(to)i(decide)e(whether)i(an)g(op)q(eration)g
(should)g(b)q(e)g(implem)o(e)o(n)o(ted)125 857 y(as)c(a)h(metho)q(d)e(in)h
(a)h(class)f(or)h(as)g(a)f(separate)h(class.)21 b(Halb)q(ert)14 b(and)i(O'Bri\
en)e(discuss)h(this)125 917 y(problem)h(at)i(length[HO87)o(].)26 b(In)17 b
(general,)h(there)f(is)g(no)i(absolute)f(w)o(a)o(y)f(to)h(decide,)f(but)125
978 y(p)q(ositiv)o(e)d(answ)o(ers)h(to)h(the)e(follo)o(wing)h(questions)g(all)
g(indicate)f(that)h(a)g(new)g(class)h(should)125 1038 y(b)q(e)g(created.)184
1139 y(1.)24 b(Is)17 b(the)f(op)q(eration)h(a)f(meaningful)f(abstraction?)184
1241 y(2.)24 b(Is)17 b(the)f(op)q(eration)h(lik)o(ely)c(to)k(b)q(e)f(shared)h
(b)o(y)f(sev)o(eral)f(classes?)184 1343 y(3.)24 b(Is)17 b(the)f(op)q(eration)
h(complex?)184 1445 y(4.)24 b(Do)q(es)17 b(the)e(op)q(eration)i(mak)o(e)c(lit\
tle)h(use)i(of)f(the)h(represen)o(tation)f(of)g(its)h(op)q(erands?)184 1546 y
(5.)24 b(Will)15 b(relativ)o(ely)f(few)i(users)h(of)f(the)g(class)h(w)o(an)o
(t)f(to)g(use)h(the)f(op)q(eration?)125 1648 y(The)i(compiler)f(example)f(sho)
o(ws)k(that)f(it)f(is)g(p)q(ossible)h(to)g(mak)o(e)e(an)i(op)q(eration)h(b)q
(oth)g(a)125 1708 y(class)e(and)h(a)g(metho)q(d)f(b)o(y)g(ha)o(ving)g(the)g
(metho)q(d)g(mak)o(e)f(an)i(ob)s(ject)f(of)h(the)f(class.)28 b(This)125 1768 y
(separates)13 b(the)g(implem)o(e)o(n)o(tation)d(of)j(the)g(op)q(eration)h(fro\
m)d(that)j(of)f(the)f(class)h(and)h(mak)o(es)125 1829 y(it)j(more)g(reuseable\
,)h(but)g(p)q(ermits)f(the)h(user)g(to)g(con)o(tin)o(ue)f(to)i(think)f(of)g
(the)g(op)q(eration)125 1889 y(as)e(a)h(metho)q(d.)198 1949 y(It)12 b(can)i
(also)f(b)q(e)g(di\016cult)f(to)h(decide)f(whic)o(h)h(class)g(should)g(implem\
e)o(n)o(t)d(an)k(op)q(eration.)125 2009 y(Op)q(erations)h(with)f(sev)o(eral)g
(argumen)o(ts)g(can)h(frequen)o(tly)d(b)q(e)j(implem)o(en)o(te)o(d)d(as)k(met\
ho)q(ds)125 2069 y(in)g(the)g(classes)g(of)h(an)o(y)f(of)h(its)f(argumen)o
(ts.)21 b(The)16 b(rules)g(listed)f(ab)q(o)o(v)o(e)i(can)f(also)h(b)q(e)g(use\
d)125 2130 y(to)f(mak)o(e)e(this)h(decision.)20 b(F)l(or)c(example,)e(if)h
(an)h(op)q(eration)h(do)q(es)f(not)g(send)g(messages)g(to)125 2190 y(an)h(ob)
s(ject)f(or)h(access)g(its)g(instance)f(v)m(ariables)h(then)g(it)f(should)h
(not)h(b)q(e)f(in)f(the)h(ob)s(ject's)125 2250 y(class.)198 2310 y(W)l(e)f
(are)g(not)h(implying)d(that)j(classes)f(can)g(b)q(e)h(reorganized)f(mec)o
(hanically)l(.)i(A)e(class)125 2370 y(should)h(represen)o(t)e(a)i(w)o(ell-de\
\014ned)f(abstraction,)h(not)g(just)g(a)g(bundle)f(of)h(metho)q(ds)f(and)125
2430 y(v)m(ariable)22 b(de\014nitions.)42 b(Human)23 b(judgemen)o(t)e(is)i
(needed)g(to)g(decide)f(when)i(and)g(ho)o(w)125 2491 y(a)d(class)g(hierarc)o
(h)o(y)e(is)i(to)g(b)q(e)g(reorganized.)35 b(Nev)o(ertheless,)19 b(the)i(foll\
o)o(wing)g(rules)f(will)125 2551 y(frequen)o(tly)14 b(p)q(oin)o(t)j(out)h(the)
e(need)h(for)g(a)g(reorganization)g(and)h(suggest)f(ho)o(w)h(it)e(is)h(to)g
(b)q(e)125 2611 y(accomplished.)930 2769 y(16)g eop bop 125 195 a fc(6.1)69 b
(Rules)21 b(for)j(Finding)e(Standard)j(Proto)r(cols)125 287 y fi(It)18 b(is)h
(v)o(ery)f(imp)q(ortan)o(t)h(that)h(the)f(design)g(pro)q(cess)h(result)f(in)f
(standard)j(proto)q(cols.)31 b(In)125 348 y(other)11 b(w)o(ords,)i(man)o(y)e
(of)h(the)f(classes)h(should)g(ha)o(v)o(e)f(nearly)g(iden)o(tical)f(external)
h(in)o(terfaces)125 408 y(and)16 b(there)g(should)h(b)q(e)f(sets)h(of)f(op)q
(erations)h(that)g(man)o(y)e(classes)h(implem)o(en)o(t.)198 468 y(Standard)d
(proto)q(cols)f(are)g(dev)o(elop)q(ed)f(b)o(y)g(c)o(ho)q(osing)i(names)d(care\
fully)l(.)19 b(The)11 b(need)h(for)125 528 y(standard)k(proto)q(cols)g(is)f
(one)g(reason)h(wh)o(y)f(it)g(tak)o(es)g(a)g(long)h(time)d(to)i(b)q(ecome)f
(an)h(exp)q(ert)125 588 y(Smalltalk)10 b(programmer.)19 b(Man)o(y)12 b(of)i
(the)f(more)e(imp)q(ortan)o(t)i(proto)q(cols)h(are)f(describ)q(ed)f(in)125 649
y(the)j(Blue)h(Bo)q(ok[GR83],)g(but)g(just)g(as)h(man)o(y)e(are)h(not)h(do)q
(cumen)o(ted)d(an)o(ywhere)i(except)125 709 y(in)11 b(the)h(source)g(co)q(de.)
20 b(Th)o(us,)12 b(the)g(only)f(w)o(a)o(y)h(to)g(learn)g(these)f(proto)q(cols)
i(is)f(b)o(y)f(exp)q(erience.)198 769 y(There)24 b(are)g(a)h(n)o(um)o(b)q(er)
e(of)h(rules)g(of)h(th)o(um)o(b)e(that)h(will)g(help)f(dev)o(elop)h(standard)
125 829 y(proto)q(cols.)36 b(A)21 b(programmer)e(practicing)i(these)g(rules)f
(is)h(more)f(lik)o(ely)f(to)i(k)o(eep)f(from)125 889 y(giving)d(di\013eren)o
(t)h(names)f(to)h(the)g(same)f(op)q(eration)i(in)f(di\013eren)o(t)f(classes.)
27 b(These)18 b(rules)125 950 y(help)k(minim)o(ize)d(the)k(n)o(um)o(b)q(er)e
(of)i(di\013eren)o(t)f(names)g(and)i(maximiz)o(e)c(the)j(n)o(um)o(b)q(er)e
(of)125 1010 y(names)15 b(shared)i(b)o(y)e(a)i(set)f(of)h(classes.)125 1118 y
ff(Rule)g(1)25 b fg(R)n(e)n(cursion)16 b(intr)n(o)n(duction.)125 1227 y fi
(If)f(one)g(class)h(comm)o(unicates)d(with)i(a)h(n)o(um)o(b)q(er)e(of)i(other)
g(classes,)f(its)g(in)o(terface)f(to)i(eac)o(h)125 1287 y(of)e(them)e(should)
i(b)q(e)g(the)g(same.)19 b(If)13 b(an)i(op)q(eration)f(X)g(is)f(implem)o(en)o
(ted)d(b)o(y)k(p)q(erforming)f(a)125 1347 y(similar)d(op)q(eration)j(on)f(the)
g(comp)q(onen)o(ts)g(of)h(the)e(receiv)o(er,)g(then)h(that)g(op)q(eration)i
(should)125 1408 y(also)i(b)q(e)g(named)f(X.)g(Ev)o(en)g(if)g(the)h(name)f
(of)h(the)g(op)q(eration)g(has)h(to)f(b)q(e)g(c)o(hanged)g(to)g(add)125 1468 y
(more)i(argumen)o(ts,)486 1450 y fm(4)526 1468 y fi(it)i(mak)o(es)f(sense)h
(to)g(mak)o(e)f(the)h(names)f(similar)f(so)j(that)g(readers)125 1528 y(of)f
(the)h(program)f(will)g(note)h(the)f(connection.)34 b(The)21 b(result)f(is)h
(that)g(a)g(metho)q(d)f(for)h(a)125 1588 y(message)e(sends)j(that)f(same)e
(message)h(to)h(other)g(ob)s(jects.)34 b(If)20 b(the)h(other)g(ob)s(jects)f
(are)125 1648 y(in)d(the)h(same)f(class)h(as)h(the)e(sender)h(then)g(the)g
(metho)q(d)f(is)h(recursiv)o(e.)24 b(Ev)o(en)17 b(if)h(no)g(real)125 1709 y
(recursion)h(exists,)g(the)g(metho)q(d)g(app)q(ears)h(recursiv)o(e,)e(so)i
(w)o(e)f(call)g(this)g(rule)g fg(r)n(e)n(cursion)125 1769 y(intr)n(o)n(ductio\
n)p fi(.)198 1829 y(Recursion)k(in)o(tro)q(duction)g(can)h(help)f(decide)g
(the)g(class)h(in)f(whic)o(h)g(an)h(op)q(eration)125 1889 y(should)e(b)q(e)h
(a)f(metho)q(d.)39 b(Consider)22 b(the)g(problem)f(of)h(con)o(v)o(erting)g
(a)g(parse)h(tree)e(in)o(to)125 1949 y(mac)o(hine)15 b(language.)25 b(In)16 b
(addition)i(to)f(an)h(ob)s(ject)f(represen)o(ting)f(the)h(parse)g(tree,)g(the\
re)125 2010 y(will)23 b(b)q(e)h(an)h(ob)s(ject)e(represen)o(ting)g(the)h(\014\
nal)h(mac)o(hine)d(language)j(pro)q(cedure.)45 b(The)125 2070 y(\\generate)21
b(co)q(de")i(message)e(could)g(b)q(e)h(sen)o(t)f(to)h(either)f(ob)s(ject.)37 b
(Ho)o(w)o(ev)o(er,)20 b(the)i(b)q(est)125 2130 y(design)15 b(is)g(to)g(implem)
o(en)o(t)d(the)j(generate)g(co)q(de)g(message)g(in)g(the)g(parse)g(tree)g(cla\
ss,)g(since)125 2190 y(a)j(parse)g(tree)f(will)g(consist)h(of)g(man)o(y)f(par\
se)h(no)q(des,)h(and)f(a)h(parse)f(no)q(de)g(will)f(generate)125 2250 y(mac)o
(hine)e(co)q(de)j(for)g(itself)f(b)o(y)h(recursiv)o(ely)d(asking)j(its)g(subt\
rees)g(to)g(generate)g(co)q(de)g(for)125 2311 y(themselv)o(e)o(s.)125 2408 y
ff(Rule)f(2)25 b fg(Eliminate)18 b(c)n(ase)g(analysis.)125 2506 y fi(It)f(is)
h(almost)e(alw)o(a)o(ys)i(a)g(mistak)o(e)e(to)i(explicitly)d(c)o(hec)o(k)h
(the)i(class)g(of)g(an)g(ob)s(ject.)25 b(Co)q(de)125 2566 y(of)16 b(the)g(for\
m)125 2599 y 665 2 v 181 2629 a fn(4)199 2644 y fl(Smalltalk)11 b(message)i
(names)h(indicate)f(the)i(n)o(um)o(b)q(er)e(of)g(argumen)o(ts)g(to)h(the)h
(message.)930 2769 y fi(17)g eop bop 125 196 a fi(anOb)s(ject)15 b(class)i
(==)f(ThisClass)h(ifT)l(rue:)j([anOb)s(ject)c(fo)q(o])767 256 y(ifF)l(alse:)k
([anOb)s(ject)15 b(fee])125 358 y(should)h(b)q(e)h(replaced)e(with)i(a)f(mess\
age)g(to)h(the)f(ob)s(ject)g(whose)h(class)f(is)g(b)q(eing)h(c)o(hec)o(k)o
(ed.)125 418 y(Metho)q(ds)e(will)f(ha)o(v)o(e)g(to)h(b)q(e)g(created)g(in)f
(the)h(v)m(arious)g(p)q(ossible)g(classes)g(of)h(the)e(ob)s(ject)h(to)125 478
y(resp)q(ond)h(to)h(the)f(message,)e(and)j(eac)o(h)e(metho)q(d)h(will)f(con)o
(tain)g(one)i(of)f(the)g(cases)g(that)g(is)125 538 y(b)q(eing)g(replaced.)198
598 y(Case)d(analysis)g(of)g(the)g(v)m(alues)g(of)g(v)m(ariables)g(is)g(usual\
ly)f(a)i(bad)f(idea,)g(to)q(o.)21 b(F)l(or)13 b(exam-)125 659 y(ple,)i(a)i
(parse)g(tree)f(migh)o(t)f(con)o(tain)i(no)q(des)g(that)g(represen)o(t)f(inst\
ance)g(v)m(ariables,)h(global)125 719 y(v)m(ariables,)12 b(metho)q(d)g(argume\
n)o(ts,)g(and)i(temp)q(orary)e(v)m(ariables.)20 b(The)12 b(Smalltalk-80)g(com\
-)125 779 y(piler)17 b(uses)h(one)h(class)f(to)h(represen)o(t)e(all)h(these)f
(kinds)h(of)h(v)m(ariables)f(and)h(di\013eren)o(tiates)125 839 y(b)q(et)o(w)o
(een)14 b(them)g(on)j(the)e(v)m(alue)g(of)h(an)h(instance)e(v)m(ariable.)21 b
(It)15 b(w)o(ould)h(b)q(e)f(b)q(etter)h(to)g(ha)o(v)o(e)125 899 y(a)g(separat\
e)h(class)f(for)h(eac)o(h)e(kind)h(of)h(v)m(ariable.)198 960 y(Eliminating)d
(case)j(analysis)g(is)f(more)f(di\016cult)g(when)i(the)f(cases)h(are)g(access\
ing)f(in-)125 1020 y(stance)k(v)m(ariables,)i(but)f(it)f(is)g(no)i(less)e(imp)
q(ortan)o(t.)34 b(If)20 b(instance)g(v)m(ariables)h(are)g(b)q(eing)125 1080 y
(accessed)16 b(then)h fg(self)g fi(will)f(need)g(to)h(b)q(e)g(an)g(argumen)o
(t)f(to)h(the)f(message)g(and)i(more)d(mes-)125 1140 y(sages)i(ma)o(y)d(need)
i(to)h(b)q(e)f(de\014ned)g(to)h(access)f(the)g(instance)g(v)m(ariables.)125
1242 y ff(Rule)h(3)25 b fg(R)n(e)n(duc)n(e)16 b(the)i(numb)n(er)g(of)f(ar)n
(guments.)125 1344 y fi(Messages)i(with)g(half)g(a)g(dozen)g(or)g(more)f(argu\
men)o(ts)g(are)g(hard)i(to)f(read.)29 b(Except)19 b(for)125 1404 y(instance)i
(creation)g(messages,)h(a)g(message)e(with)i(this)f(man)o(y)f(argumen)o(ts)h
(should)h(b)q(e)125 1464 y(rede\014ned.)40 b(When)23 b(a)g(message)f(has)i
(a)f(smaller)e(n)o(um)o(b)q(er)g(of)i(argumen)o(ts)f(it)h(is)f(more)125 1524 y
(lik)o(ely)17 b(to)j(b)q(e)g(similar)e(to)i(some)f(other)h(message,)g(th)o
(us)g(increasing)f(the)h(p)q(ossibilit)o(y)f(of)125 1584 y(giving)d(them)e
(the)i(same)f(name.)198 1644 y(The)h(n)o(um)o(b)q(er)f(of)i(argumen)o(ts)e
(can)i(b)q(e)f(reduced)g(b)o(y)g(breaking)g(a)h(message)f(in)o(to)g(sev-)125
1705 y(eral)21 b(smaller)e(messages)i(or)h(b)o(y)f(creating)g(a)h(new)f(class)
h(that)g(represen)o(ts)e(a)i(group)h(of)125 1765 y(argumen)o(ts.)31 b(F)l(req\
uen)o(tly)17 b(there)j(will)e(b)q(e)i(sev)o(eral)f(kinds)h(of)g(messages)f
(that)h(pass)h(the)125 1825 y(same)13 b(set)i(of)g(ob)s(jects)g(around.)22 b
(This)15 b(set)f(of)i(ob)s(jects)e(is)h(essen)o(tially)e(a)i(new)g(ob)s(ject,)
f(and)125 1885 y(the)k(design)g(can)h(b)q(e)g(c)o(hanged)g(to)f(re\015ect)g
(that)h(fact)g(b)o(y)f(replacing)g(the)g(set)g(of)h(ob)s(jects)125 1945 y(wit\
h)d(an)g(ob)s(ject)g(that)h(con)o(tains)f(them.)125 2060 y ff(Rule)h(4)25 b fg
(R)n(e)n(duc)n(e)16 b(the)i(size)g(of)f(metho)n(ds.)125 2174 y fi(W)l(ell-des\
igned)e(Smalltalk)g(metho)q(ds)h(are)h(almost)f(alw)o(a)o(ys)h(small.)22 b
(It)16 b(is)h(easier)f(to)h(sub-)125 2234 y(class)11 b(a)g(class)h(with)f(sma\
ll)e(metho)q(ds,)i(since)g(its)g(b)q(eha)o(vior)g(can)g(b)q(e)g(c)o(hanged)h
(b)o(y)e(rede\014ning)125 2294 y(a)18 b(few)f(small)g(metho)q(ds)g(instead)h
(of)g(mo)q(difying)f(a)h(few)g(large)f(metho)q(ds.)26 b(A)17 b(thirt)o(y)g
(line)125 2354 y(metho)q(d)e(is)h(large)g(and)h(probably)f(needs)g(to)h(b)q
(e)f(brok)o(en)g(in)o(to)f(pieces.)20 b(Often)c(a)h(metho)q(d)125 2414 y(in)e
(a)h(sup)q(erclass)g(is)f(split)g(when)g(a)h(sub)q(class)h(is)e(made.)20 b
(Most)c(of)f(the)h(inherited)e(metho)q(d)125 2475 y(is)k(correct,)h(but)g(one)
h(part)f(needs)g(to)g(b)q(e)h(c)o(hanged.)30 b(Instead)19 b(of)g(rewriting)g
(the)f(en)o(tire)125 2535 y(metho)q(d,)c(it)i(is)g(split)f(in)o(to)h(pieces)f
(and)h(the)g(one)g(piece)f(that)h(has)h(c)o(hanged)f(is)g(rede\014ned.)125
2595 y(This)g(c)o(hange)g(lea)o(v)o(es)f(the)h(sup)q(erclass)h(ev)o(en)e(easi\
er)h(to)g(sub)q(class.)930 2769 y(18)g eop bop 848 529 a fi(Figure)16 b(1:)
198 657 y(These)i(design)g(rules)g(are)h(all)f(related,)g(since)f(eliminating)
f(cases)j(reduces)f(the)g(size)125 717 y(of)j(metho)q(ds,)g(b)q(eaking)g(a)h
(metho)q(d)e(in)o(to)g(pieces)g(is)h(lik)o(ely)d(to)k(reduce)e(the)g(n)o(um)o
(b)q(er)g(of)125 777 y(argumen)o(ts)13 b(that)i(an)o(y)f(one)h(metho)q(d)f
(needs,)g(and)h(reducing)f(the)g(n)o(um)o(b)q(er)f(of)i(argumen)o(ts)125 838 y
(is)h(lik)o(ely)d(to)k(create)f(more)e(metho)q(ds)i(with)g(the)g(same)f(name.)
125 980 y fc(6.2)69 b(Rules)21 b(for)j(Finding)e(Abstract)h(Classes)125 1073 y
ff(Rule)17 b(5)25 b fg(Class)17 b(hier)n(ar)n(chies)g(should)g(b)n(e)h(de)n
(ep)g(and)f(narr)n(ow.)125 1174 y fi(A)10 b(w)o(ell)g(dev)o(elop)q(ed)g(class)
h(hierarc)o(h)o(y)e(should)j(b)q(e)f(sev)o(eral)f(la)o(y)o(ers)g(deep.)19 b
(A)10 b(class)i(hierarc)o(h)o(y)125 1234 y(consisting)k(of)h(one)g(sup)q(ercl\
ass)g(and)h(27)f(sub)q(classes)g(is)g(m)o(uc)o(h)d(to)q(o)k(shallo)o(w.)23 b
(A)16 b(shallo)o(w)125 1294 y(class)i(hierarc)o(h)o(y)f(is)i(evidence)d(that)
j(c)o(hange)g(is)f(needed,)g(but)h(do)q(es)g(not)g(giv)o(e)f(an)o(y)g(idea)
125 1355 y(ho)o(w)e(to)h(mak)o(e)d(that)j(c)o(hange.)198 1415 y(An)j(ob)o(vio\
us)g(w)o(a)o(y)g(to)h(mak)o(e)d(a)j(new)f(sup)q(erclass)h(is)f(to)g(\014nd)h
(some)e(sibling)h(classes)125 1475 y(that)14 b(implem)o(en)n(t)d(the)j(same)e
(message)h(and)i(try)e(to)h(migrate)e(the)i(metho)q(d)f(to)h(a)g(common)125
1535 y(sup)q(erclass.)33 b(Of)19 b(course,)i(the)f(classes)g(are)g(lik)o(ely)
d(to)k(pro)o(vide)e(di\013eren)o(t)g(metho)q(ds)h(for)125 1595 y(the)d(messag\
e,)h(but)g(it)g(is)f(often)i(p)q(ossible)f(to)g(break)g(a)h(metho)q(d)e(in)o
(to)h(pieces)f(and)i(place)125 1656 y(some)c(of)i(the)f(pieces)g(in)g(the)g
(sup)q(erclass)h(and)g(some)f(in)g(the)g(sub)q(classes.)23 b(F)l(or)17 b(exam\
ple,)125 1716 y(displa)o(ying)c(a)i(view)e(consists)i(of)g(displa)o(ying)e
(its)h(b)q(order,)h(displa)o(ying)f(its)g(sub)o(views,)f(and)125 1776 y(displ\
a)o(ying)j(its)h(con)o(ten)o(ts.)23 b(The)18 b(last)f(part)h(m)o(ust)d(b)q
(e)j(implem)o(en)n(ted)c(b)o(y)j(eac)o(h)g(sub)q(class,)125 1836 y(but)f(the)
g(others)h(are)f(inherited)f(from)g(View.)125 1928 y ff(Rule)i(6)25 b fg(The)
17 b(top)h(of)f(the)h(class)g(hier)n(ar)n(chy)e(should)h(b)n(e)h(abstr)n(act.)
125 2020 y fi(Inheritance)d(for)j(generalization)e(or)h(co)q(de)g(sharing)h
(usually)f(indicates)f(the)h(need)f(for)i(a)125 2080 y(new)c(sub)q(class.)21 b
(If)14 b(class)g(B)f(o)o(v)o(errides)g(a)h(metho)q(d)g fg(x)g fi(that)h(it)e
(inherits)g(from)g(class)i(A)e(then)125 2141 y(it)j(migh)o(t)f(b)q(e)i(b)q
(etter)g(to)g(mo)o(v)o(e)e(the)i(metho)q(ds)f(in)h(A)f(that)i(B)e(do)q(es)i
(inherit)e(to)h(C,)g(a)g(new)125 2201 y(sup)q(erclass)d(of)h(A,)e(as)i(sho)o
(wn)g(in)f(Figure)f(1.)21 b(C)15 b(will)e(probably)h(b)q(e)h(abstract.)21 b
(B)14 b(can)g(then)125 2261 y(b)q(ecome)i(a)i(sub)q(class)h(of)f(C,)f(and)h
(will)f(not)h(ha)o(v)o(e)f(to)h(rede\014ne)f(an)o(y)h(metho)q(ds.)25 b(Instan\
ce)125 2321 y(v)m(ariables)16 b(or)g(metho)q(ds)g(de\014ned)g(in)g(A)g(that)g
(are)h(used)f(b)o(y)g(B)g(should)g(b)q(e)h(mo)o(v)o(ed)d(to)i(C.)125 2423 y ff
(Rule)h(7)25 b fg(Minimize)17 b(ac)n(c)n(esses)h(to)g(variables.)125 2524 y fi
(Since)d(one)j(of)f(the)f(main)g(di\013erences)g(b)q(et)o(w)o(een)g(abstract)
h(and)h(concrete)e(classes)h(is)f(the)125 2584 y(presence)i(of)j(data)f(repre\
sen)o(tation,)g(classes)g(can)g(b)q(e)f(made)g(more)g(abstract)h(b)o(y)f(elim\
-)125 2644 y(inating)g(their)h(dep)q(endence)f(on)h(their)f(data)i(represen)o
(tation.)32 b(One)19 b(w)o(a)o(y)h(this)g(can)g(b)q(e)930 2769 y(19)g eop bop
125 195 a fi(done)19 b(is)g(to)g(access)g(all)g(v)m(ariables)g(b)o(y)g(sendin\
g)g(messages.)29 b(The)20 b(data)g(represen)o(tation)125 255 y(can)c(b)q(e)g
(c)o(hanged)h(b)o(y)e(rede\014ning)h(the)g(accessing)h(messages.)125 357 y ff
(Rule)g(8)25 b fg(Sub)n(classes)19 b(should)e(b)n(e)h(sp)n(e)n(cializations.)
125 459 y fi(There)e(are)i(sev)o(eral)e(di\013eren)o(t)g(w)o(a)o(ys)h(that)h
(inheritance)e(can)h(b)q(e)h(used[HO87)o(].)24 b fg(Sp)n(e)n(cial-)125 519 y
(ization)13 b fi(is)g(the)h(ideal)e(that)i(is)f(usually)g(describ)q(ed,)g(whe\
re)g(the)h(elemen)o(ts)c(of)k(the)f(sub)q(class)125 579 y(can)18 b(all)f(b)q
(e)h(though)o(t)h(of)f(as)h(elemen)o(ts)c(of)j(the)g(sup)q(erclass.)26 b(Usua\
lly)18 b(the)f(sub)q(class)i(will)125 639 y(not)d(rede\014ne)g(an)o(y)g(of)h
(the)f(inherited)f(metho)q(ds,)g(but)i(will)e(add)i(new)f(metho)q(ds.)21 b
(F)l(or)16 b(ex-)125 699 y(ample,)c(a)i(t)o(w)o(o)g(dimensional)f(arra)o(y)h
(is)g(a)g(sub)q(class)h(of)f(Arra)o(y)f(in)h(whic)o(h)f(all)h(the)g(elemen)o
(ts)125 760 y(are)k(arra)o(ys.)27 b(It)18 b(migh)o(t)e(ha)o(v)o(e)i(new)g(mes\
sages)g(that)g(use)h(t)o(w)o(o)f(indexes,)f(instead)h(of)h(just)125 820 y(one\
.)198 880 y(An)11 b(imp)q(ortan)o(t)g(sp)q(ecial)g(case)g(of)h(sp)q(ecializat\
ion)f(is)g(making)f fg(c)n(oncr)n(ete)k(classes)p fi(.)21 b(Since)125 940 y
(an)i(abstract)h(class)g(is)f(not)g(executable,)h(making)e(a)h(sub)q(class)i
(of)e(an)h(abstract)g(class)125 1000 y(is)e(di\013eren)o(t)g(from)g(making)f
(a)j(sub)q(class)f(of)g(a)h(concrete)e(class.)41 b(The)22 b(abstract)i(class)
125 1061 y(requires)15 b(its)h(sub)q(classes)h(to)g(de\014ne)f(certain)g(op)q
(erations,)h(so)g(making)e(a)i(concrete)f(class)125 1121 y(is)21 b(similar)e
(to)j(\014lling)f(in)g(the)g(blanks)h(in)f(a)h(program)f(template.)35 b(An)22
b(abstract)g(class)125 1181 y(ma)o(y)13 b(de\014ne)h(some)f(op)q(erations)j
(in)e(an)h(o)o(v)o(erly)e(general)h(fashion,)i(and)f(the)f(sub)q(class)i(ma)o
(y)125 1241 y(ha)o(v)o(e)i(to)h(rede\014ne)g(them.)28 b(F)l(or)19 b(example,)
f(the)h fg(size)g fi(op)q(eration)h(in)f(class)g(Collection)f(is)125 1301 y
(implem)o(e)o(n)o(ted)c(b)o(y)j(iterating)g(o)o(v)o(er)f(the)i(collection)e
(and)h(coun)o(ting)h(its)f(elemen)o(ts.)22 b(Most)125 1362 y(sub)q(classes)14
b(of)g(Collection)e(ha)o(v)o(e)h(an)h(instance)f(v)m(ariable)g(that)h(con)o
(tains)g(the)f(size,)g(so)h fg(size)125 1422 y fi(is)i(rede\014ned)f(in)h(tho\
se)h(sub)q(classes)g(to)f(return)g(that)h(instance)f(v)m(ariable.)198 1482 y
(There)i(are)i(a)f(couple)g(of)g(w)o(a)o(ys)g(that)h(a)f(designer)g(can)g(tel\
l)f(whether)h(a)g(sub)q(class)h(is)125 1542 y(a)g(sp)q(ecialization)f(of)h
(a)g(sup)q(erclass.)33 b(An)19 b(abstract)i(de\014nition)e(is)h(that)g(an)o
(ywhere)f(the)125 1602 y(sup)q(erclass)f(is)g(used,)g(the)g(sub)q(class)h(can)
f(b)q(e)g(used.)27 b(Th)o(us,)18 b(a)h(sub)q(class)f(has)h(a)g(sup)q(erset)
125 1663 y(of)h(the)f(b)q(eha)o(vior)h(of)g(its)g(sup)q(erclass.)32 b(A)20 b
(more)e(concrete)h(de\014nition)g(is)h(giv)o(en)f(b)o(y)g(the)125 1723 y(subt)
o(yp)q(e)13 b(compatibilit)o(y)e(rules)j(of)g(T)l(rellis/Owl[SCB*86].)20 b
(Of)14 b(course,)g(it)f(is)h(di\016cult)f(to)125 1783 y(c)o(hec)o(k)f(t)o(yp)
q(e)j(compatibilit)o(y)c(rules)j(in)h(an)g(un)o(t)o(yp)q(ed)f(language)h(lik)
o(e)e(Smalltalk,)g(but)h(they)125 1843 y(can)i(b)q(e)g(c)o(hec)o(k)o(ed)e(b)o
(y)i(hand.)198 1903 y(In)c(the)f(middle)f(of)j(a)f(pro)s(ject,)g(it)g(ma)o
(y)e(b)q(e)j(useful)f(for)g(a)h(designer)e(to)i(mak)o(e)d(sub)q(classes)125
1963 y(that)k(are)h(not)g(sp)q(ecializations)f(of)h(their)e(sup)q(erclasses.)
21 b(If)14 b(the)h(sup)q(erclasses)g(are)f(p)q(o)q(orly)125 2024 y(designed,)
h(it)g(migh)o(t)g(tak)o(e)g(a)h(great)h(deal)f(of)g(w)o(ork)g(to)g(determine)
d(the)j(prop)q(er)h(design)f(of)125 2084 y(the)f(class)g(hierarc)o(h)o(y)l
(.)k(It)c(is)g(b)q(etter)g(to)g(forge)h(ahead)g(and)g(then)f(to)g(later)g(reo\
rganize)g(the)125 2144 y(classes.)27 b(Th)o(us,)19 b(a)f(sub)q(class)h(migh)o
(t)e(b)q(e)h(more)f(general)h(than)h(its)f(sup)q(erclass)h(or)g(migh)o(t)125
2204 y(ha)o(v)o(e)c(little)g(relationship)g(to)i(its)f(sup)q(erclass)h(other)
f(than)h(b)q(orro)o(wing)g(co)q(de)g(from)e(it.)125 2349 y fc(6.3)69 b(Rules)
21 b(for)j(Finding)e(F)-6 b(ramew)n(orks)125 2441 y fi(Large)23 b(classes)g
(are)g(frequen)o(tly)d(brok)o(en)j(in)o(to)f(sev)o(eral)g(small)f(classes)h
(as)i(they)e(gro)o(w,)125 2501 y(leading)13 b(to)h(a)h(new)f(framew)o(ork.)19
b(A)13 b(collection)f(of)j(small)d(classes)i(can)g(b)q(e)g(easier)f(to)h(lear\
n)125 2561 y(and)h(will)e(almost)h(alw)o(a)o(ys)g(b)q(e)h(easier)f(to)h(reuse)
f(than)h(a)g(single)f(large)h(class.)20 b(A)14 b(collection)125 2622 y(of)i
(class)h(hierarc)o(hies)d(pro)o(vides)i(the)g(abilit)o(y)f(to)i(mix)d(and)j
(matc)o(h)e(comp)q(onen)o(ts)g(while)h(a)930 2769 y(20)g eop bop 125 195 a fi
(single)13 b(class)i(hierarc)o(h)o(y)d(do)q(es)j(not.)21 b(Th)o(us,)15 b(brea\
king)f(a)g(compiler)e(in)o(to)i(a)h(parsing)f(phase)125 255 y(and)21 b(a)f
(co)q(de)h(generation)g(phase)g(p)q(ermits)e(a)h(new)h(language)g(to)g(b)q
(e)g(implem)o(en)n(ted)c(b)o(y)125 315 y(building)h(only)h(a)h(new)f(parser,)
h(and)g(a)f(new)h(mac)o(hine)d(to)i(b)q(e)h(supp)q(orted)g(b)o(y)f(building)
125 376 y(only)d(a)g(new)g(co)q(de)h(generator.)125 467 y ff(Rule)g(9)25 b fg
(Split)18 b(lar)n(ge)g(classes.)125 559 y fi(A)11 b(class)h(is)g(supp)q(osed)
h(to)f(represen)o(t)f(an)h(abstraction.)21 b(If)11 b(a)h(class)g(has)h(50)f
(to)g(100)i(metho)q(ds)125 619 y(then)e(it)g(m)o(ust)f(represen)o(t)g(a)i(com\
plicated)e(abstraction.)20 b(It)12 b(is)h(lik)o(ely)d(that)i(suc)o(h)h(a)g
(class)f(is)125 680 y(not)17 b(w)o(ell)e(de\014ned)i(and)g(probably)g(consist\
s)h(of)f(sev)o(eral)e(di\013eren)o(t)h(abstractions.)24 b(Large)125 740 y(cla\
sses)19 b(should)g(b)q(e)g(view)o(ed)f(with)h(suspicion)g(and)h(held)e(to)i
(b)q(e)f(guilt)o(y)f(of)h(p)q(o)q(or)i(design)125 800 y(un)o(til)15 b(pro)o
(v)o(en)g(inno)q(cen)o(t.)125 885 y ff(Rule)i(10)25 b fg(F)l(actor)17 b(imple\
mentation)i(di\013er)n(enc)n(es)f(into)g(sub)n(c)n(omp)n(onents.)125 970 y fi
(If)f(some)f(sub)q(classes)i(impleme)o(n)o(t)c(a)k(metho)q(d)f(one)h(w)o(a)o
(y)f(and)h(others)g(implem)o(en)o(t)c(it)j(an-)125 1030 y(other)h(w)o(a)o(y)g
(then)g(the)g(implem)o(en)o(tation)d(of)k(that)g(metho)q(d)e(is)h(indep)q(end\
en)o(t)g(of)g(the)g(su-)125 1090 y(p)q(erclass.)j(It)14 b(is)h(lik)o(ely)e
(that)i(it)g(is)g(not)g(an)h(in)o(tegral)e(part)i(of)f(the)g(sub)q(classes)h
(and)g(should)125 1150 y(b)q(e)g(split)g(o\013)h(in)o(to)f(the)g(class)g(of)g
(a)h(comp)q(onen)o(t.)198 1210 y(Multiple)c(inheritance)g(can)i(also)h(b)q
(e)f(used)g(to)g(solv)o(e)f(this)h(problem.)k(Ho)o(w)o(ev)o(er,)13 b(if)h(an)
125 1271 y(algorithm)k(or)h(set)g(of)h(metho)q(ds)e(is)h(indep)q(enden)o(t)g
(of)g(the)g(rest)g(of)g(the)g(class)h(then)f(it)f(is)125 1331 y(cleaner)d(to)
h(encapsulate)h(it)e(in)h(a)h(sep)q(erate)f(comp)q(onen)o(t.)125 1416 y ff
(Rule)h(11)25 b fg(Sep)n(ar)n(ate)17 b(metho)n(ds)g(that)h(do)f(not)h(c)n(omm\
unic)n(ate.)125 1501 y fi(A)f(class)h(should)h(almost)e(alw)o(a)o(ys)h(b)q
(e)h(split)e(when)h(half)h(of)f(its)g(metho)q(ds)g(access)g(half)g(of)125 1561
y(its)d(instance)g(v)m(ariables)g(and)h(the)f(other)g(half)g(of)h(its)f(metho)
q(ds)g(access)g(the)g(other)g(half)h(of)125 1621 y(its)i(v)m(ariables.)27 b
(This)18 b(sometimes)d(o)q(ccurs)k(when)f(there)g(are)g(sev)o(eral)f(di\013er\
en)o(t)g(w)o(a)o(ys)i(to)125 1681 y(view)c(ob)s(jects)h(in)g(the)g(class)198
1741 y(F)l(or)f(example,)f(a)i(complex)d(graphical)j(ob)s(ject)f(ma)o(y)f(cac)
o(he)h(its)g(image)f(as)j(a)f(bitmap,)125 1802 y(but)g(the)g(image)e(is)i(der\
iv)o(ed)f(from)g(the)g(complex)f(structure)i(of)g(the)g(ob)s(ject,)f(whic)o
(h)h(con-)125 1862 y(sists)21 b(of)h(a)f(n)o(um)o(b)q(er)f(of)i(simple)d(grap\
hical)i(ob)s(jects.)36 b(When)22 b(the)f(ob)s(ject)f(is)h(ask)o(ed)h(to)125
1922 y(displa)o(y)e(itself,)h(it)g(displa)o(ys)g(its)h(cac)o(hed)e(image)g
(if)h(it)g(is)h(v)m(alid.)36 b(If)21 b(the)g(image)f(is)i(not)125 1982 y(v)m
(alid,)c(the)g(ob)s(ject)g(recalculates)f(the)h(image)f(and)i(displa)o(ys)f
(it.)28 b(Ho)o(w)o(ev)o(er,)17 b(the)h(graph-)125 2042 y(ical)f(ob)s(ject)g
(can)i(also)g(b)q(e)f(considered)f(a)i(collection)e(of)h(\(graphical\))g(ob)s
(jects)g(that)h(can)125 2103 y(b)q(e)d(added)h(or)f(remo)o(v)o(ed.)j(Changing)
e(the)f(collection)f(in)o(v)m(alidates)h(the)g(image.)198 2163 y(This)22 b
(graphical)g(ob)s(ject)f(could)h(b)q(e)g(impleme)o(n)o(ted)d(as)j(a)h(sub)q
(class)g(of)f(bitmapp)q(ed)125 2223 y(images,)14 b(or)i(it)f(could)g(b)q(e)h
(a)g(sub)q(class)h(of)e(Collection.)21 b(A)15 b(system)f(with)h(m)o(ultiple)e
(inheri-)125 2283 y(tance)j(migh)o(t)f(mak)o(e)g(b)q(oth)j(b)q(e)f(sup)q(ercl\
asses.)24 b(Ho)o(w)o(ev)o(er,)15 b(it)h(is)h(b)q(est)g(to)g(mak)o(e)e(b)q(oth)
j(the)125 2343 y(bitmap)h(and)i(the)f(collection)f(of)h(graphical)h(ob)s(ject\
s)f(b)q(e)g(comp)q(onen)o(ts,)g(since)g(eac)o(h)g(of)125 2403 y(them)c(could)
h(b)q(e)h(implem)o(en)n(ted)d(in)i(a)h(n)o(um)o(b)q(er)e(of)i(di\013eren)o
(t)e(w)o(a)o(ys,)i(and)g(none)g(of)g(those)125 2464 y(w)o(a)o(ys)13 b(are)i
(critical)d(to)i(the)g(implem)o(en)o(tation)d(of)k(the)e(graphical)i(ob)s(jec\
t.)20 b(Separating)14 b(the)125 2524 y(bitmap)h(class)i(will)f(mak)o(e)f(it)h
(easier)g(to)h(p)q(ort)h(the)e(graphical)h(ob)s(ject)f(to)i(a)f(system)e(with)
125 2584 y(di\013eren)o(t)j(graphics)j(primitiv)n(es,)c(and)k(separating)f
(the)g(collection)e(class)i(will)f(mak)o(e)e(it)125 2644 y(easier)e(to)i(mak)
o(e)d(the)i(graphical)h(ob)s(ject)e(b)q(e)i(e\016cien)o(t)d(ev)o(en)h(when)h
(v)o(ery)f(large.)930 2769 y(21)g eop bop 125 195 a ff(Rule)17 b(12)25 b fg
(Send)18 b(messages)g(to)g(c)n(omp)n(onents)g(inste)n(ad)f(of)h(to)f(self.)
125 297 y fi(An)24 b(inheritance-based)g(framew)o(ork)g(can)g(b)q(e)h(con)o
(v)o(erted)f(in)o(to)g(a)h(comp)q(onen)o(t-based)125 357 y(framew)o(ork)19 b
(blac)o(k)g(b)q(o)o(x)i(structure)f(b)o(y)g(replacing)g(o)o(v)o(erridden)g
(metho)q(ds)g(b)o(y)g(message)125 417 y(sends)f(to)h(comp)q(onen)o(ts.)29 b
(Examples)18 b(of)h(suc)o(h)g(framew)o(orks)g(in)f(con)o(v)o(en)o(tional)g
(systems)125 477 y(are)23 b(sorting)h(routines)f(that)h(tak)o(e)f(pro)q(cedur\
al)h(parameters.)41 b(Programs)24 b(should)g(b)q(e)125 538 y(factored)e(in)h
(this)f(fashion)i(whenev)o(er)d(p)q(ossible.)41 b(Reducing)22 b(the)g(couplin\
g)h(b)q(et)o(w)o(een)125 598 y(framew)o(ork)12 b(comp)q(onen)o(ts)h(so)i(that)
f(the)g(framew)o(ork)f(w)o(orks)h(with)g(an)o(y)g(plug-compatible)125 658 y
(ob)s(ject)h(increases)h(its)g(cohesion)g(and)h(generalit)o(y)l(.)125 760 y ff
(Rule)g(13)25 b fg(R)n(e)n(duc)n(e)17 b(implicit)h(p)n(ar)n(ameter)e(p)n(assi\
ng.)125 861 y fi(Sometime)o(s)10 b(it)h(is)i(hard)f(to)h(split)f(a)g(class)h
(in)o(to)f(t)o(w)o(o)g(parts)h(b)q(ecause)f(metho)q(ds)g(that)h(should)125 922
y(go)24 b(in)f(di\013eren)o(t)f(classes)h(access)h(the)f(same)f(instance)h
(v)m(ariable.)42 b(This)24 b(can)f(happ)q(en)125 982 y(b)q(ecause)g(the)h(ins\
tance)f(v)m(ariable)g(is)g(b)q(eing)h(treated)f(as)i(a)f(global)g(v)m(ariable)
f(when)g(it)125 1042 y(should)17 b(b)q(e)f(passed)h(as)h(a)e(parameter)g(b)q
(et)o(w)o(een)f(metho)q(ds.)22 b(Changing)17 b(the)g(metho)q(ds)f(to)125 1102
y(explicitly)d(pass)k(the)f(parameter)f(will)g(mak)o(e)g(it)g(easier)h(to)h
(split)e(the)h(class)h(later.)125 1269 y fb(7)82 b(Ob)5 b(ject-Orien)n(ted)26
b(Programming)i(T)-7 b(o)r(ols)125 1378 y fi(There)15 b(are)h(at)g(least)g
(t)o(w)o(o)f(new)h(kinds)g(of)g(to)q(ols)h(needed)e(for)h(the)g(st)o(yle)e
(of)i(programming)125 1438 y(w)o(e)11 b(ha)o(v)o(e)h(just)g(describ)q(ed.)20 b
(One)12 b(kind)f(helps)h(the)g(programmer)f(reorganize)h(class)g(hierar-)125
1498 y(c)o(hies)h(and)i(the)g(other)f(helps)g(the)h(programmer)e(build)h(appl\
ications)g(from)g(framew)o(orks.)125 1559 y(Other)21 b(to)q(ols)h(w)o(ould)f
(also)h(b)q(e)g(helpful,)f(suc)o(h)g(as)h(to)q(ols)h(to)e(help)g(a)h(programm\
er)e(\014nd)125 1619 y(comp)q(onen)o(ts)15 b(in)h(libraries,)f(but)h(these)g
(will)f(not)i(b)q(e)f(discussed.)198 1679 y(It)c(tak)o(es)g(a)h(great)g(deal)
f(of)h(inspiration)g(to)g(construct)f(a)h(go)q(o)q(d)i(class)d(hierarc)o(h)o
(y)l(.)19 b(Ho)o(w-)125 1739 y(ev)o(er,)12 b(it)g(is)h(p)q(ossible)g(to)h(bui\
ld)e(to)q(ols)i(that)g(w)o(ould)f(let)f(a)h(programmer)f(kno)o(w)h(that)g(a)h
(class)125 1799 y(hierarc)o(h)o(y)j(had)i(problems.)28 b(These)19 b(to)q(ols)
g(w)o(ould)g(b)q(e)g(lik)o(e)e(the)i(English)g(st)o(yle)f(to)q(ols)h(in)125
1860 y(the)c(Unix)f(writer's)h(w)o(orkb)q(enc)o(h.)20 b(They)c(w)o(ould)f(com\
plain)f(ab)q(out)j(p)q(erceiv)o(ed)c(problems)125 1920 y(but)18 b(w)o(ould)g
(let)g(the)g(programmer)f(decide)g(whether)h(the)g(complain)o(ts)f(w)o(ere)g
(v)m(alid)h(and)125 1980 y(ho)o(w)f(to)g(\014x)g(them.)22 b(Other)17 b(to)q
(ols)h(could)f(help)f(reorganize)h(the)g(class)g(hierarc)o(h)o(y)f(once)h(a)
125 2040 y(problem)12 b(w)o(as)j(diagnosed.)22 b(F)l(or)14 b(example,)f(if)h
(a)g(metho)q(d)g(of)h(a)g(sup)q(erclass)g(is)f(ignored)g(b)o(y)125 2100 y(its)
19 b(sub)q(class)h(then)g(some)e(abstractions)j(in)e(the)g(sup)q(erclass)h
(are)g(not)g(b)q(eing)f(inherited)125 2161 y(b)o(y)g(the)h(sub)q(class.)33 b
(This)20 b(is)g(probably)g(a)h(case)f(of)g(sub)q(classing)h(for)f(generalizat\
ion)g(or)125 2221 y(co)q(de)d(sharing.)24 b(It)17 b(migh)o(t)e(b)q(e)j(b)q
(est)f(to)g(break)g(the)g(sup)q(erclass)h(in)o(to)f(t)o(w)o(o)f(classes,)h
(one)h(a)125 2281 y(sub)q(class)g(of)g(the)g(other.)25 b(The)18 b(new)g(sub)q
(class)g(w)o(ould)g(ha)o(v)o(e)f(all)g(the)h(metho)q(ds)f(that)h(are)125 2341
y(un)o(used)e(b)o(y)g(the)h(old)g(sub)q(classes.)23 b(Similarly)l(,)14 b(a)j
(sign)g(of)g(inheritance)e(for)i(co)q(de)g(sharing)125 2401 y(is)h(that)h(man)
o(y)f(of)h(a)g(sup)q(erclass's)g(metho)q(ds)f(are)h(rede\014ned.)28 b(P)o(erh\
aps)19 b(some)f(of)h(these)125 2461 y(rede\014ned)j(metho)q(ds)h(should)h(b)q
(e)f(in)g(a)h(concrete)e(sub)q(class,)j(making)d(the)h(sup)q(erclass)125 2522
y(abstract.)198 2582 y(Reorganizing)17 b(a)h(class)g(hierarc)o(h)o(y)e(is)h
(not)h(di\016cult)e(in)h(Smalltalk,)e(since)i(it)g(is)g(easy)125 2642 y(to)g
(c)o(hange)h(the)f(sup)q(erclass)h(of)g(a)f(class)h(and)g(to)g(add)g(and)g
(remo)o(v)o(e)c(instance)k(v)m(ariables.)930 2769 y(22)g eop bop 125 195 a fi
(It)16 b(is)h(di\016cult)e(to)i(cop)o(y)g(a)g(class,)g(but)g(cop)o(ying)f(is)
h(rarely)f(needed.)23 b(A)16 b(more)g(imp)q(ortan)o(t)125 255 y(problem)e(is)
h(that)i(the)e(lac)o(k)g(of)h(t)o(yp)q(e)f(c)o(hec)o(king)f(in)i(Smalltalk)d
(means)i(that)h(if)g(a)g(metho)q(d)125 315 y(inherited)f(b)o(y)h(t)o(w)o(o)h
(sub)q(classes)g(is)f(mo)o(v)o(ed)f(in)o(to)h(one)h(of)g(the)f(sub)q(classes)
i(then)e(no)h(w)o(arn-)125 376 y(ing)i(will)g(b)q(e)h(giv)o(en)e(un)o(til)h
(run)o(time.)29 b(It)20 b(is)f(virtually)f(imp)q(ossible)g(to)i(reorganize)g
(class)125 436 y(hierarc)o(hies)f(without)h(creating)h(a)g(few)f(missing)f
(metho)q(ds,)i(though)h(these)e(are)g(fortu-)125 496 y(nately)14 b(easy)h(to)
h(\014x.)k(Ho)o(w)o(ev)o(er,)13 b(it)i(is)g(v)o(ery)f(di\016cult)f(to)j(c)o
(hange)f(core)g(class)g(hierarc)o(hies,)125 556 y(since)k(an)o(y)g(mistak)o
(e)f(will)g(crash)j(the)e(system.)30 b(It)20 b(w)o(ould)f(b)q(e)h(go)q(o)q
(d)i(to)e(ha)o(v)o(e)f(to)q(ols)i(for)125 616 y(building)c(reorganization)i
(plans)f(and)h(for)g(insp)q(ecting)f(the)g(results)g(of)g(applying)g(these)
125 677 y(plans.)37 b(Consistency)22 b(c)o(hec)o(ks)e(could)h(help)g(ensure)g
(that)h(the)g(plans)g(w)o(ould)f(result)g(in)125 737 y(class)16 b(hierarc)o
(hies)f(with)h(the)g(same)f(b)q(eha)o(vior)h(as)h(the)f(original)g(ones.)198
797 y(Muc)o(h)k(Smalltalk)e(programming)h(consists)i(of)g(com)o(bining)e(exis\
ting)h(comp)q(onen)o(ts)125 857 y(within)e(a)h(blac)o(k-b)q(o)o(x)g(framew)o
(ork.)28 b(It)18 b(seems)f(unnecessarily)h(complex)f(to)i(do)h(this)e(b)o(y)
125 917 y(writing)f(a)h(program|it)f(w)o(ould)g(b)q(e)h(m)o(uc)o(h)d(simpler)
h(to)h(use)h(graphical)g(to)q(ols)g(to)g(select)125 978 y(comp)q(onen)o(ts)h
(and)h(attac)o(h)g(them)e(to)i(eac)o(h)g(other.)32 b(This)20 b(w)o(ould)f(mak)
o(e)f(a)i(system)f(lik)o(e)125 1038 y(Smalltalk)g(m)o(uc)o(h)h(more)g(useful)
h(to)i(nonprogrammers.)36 b(Suc)o(h)21 b(a)i(system)d(could)h(also)125 1098 y
(c)o(hec)o(k)g(to)i(mak)o(e)e(sure)i(that)g(the)g(comp)q(onen)o(ts)f(w)o(ere)
g(compatible)f(with)i(eac)o(h)f(other.)125 1158 y(While)e(sp)q(ecial)g(purp)q
(ose)i(to)q(ols)g(lik)o(e)d(Glazier)h(are)h(v)m(aluable,)h(ideally)e(there)g
(could)h(b)q(e)125 1218 y(general)16 b(purp)q(ose)h(to)q(ols)g(that)g(w)o(oul\
d)f(w)o(ork)g(for)h(an)o(y)f(framew)o(ork.)198 1279 y(The)11 b(in)o(terfaces)
f(b)q(et)o(w)o(een)h(comp)q(onen)o(ts)g(in)g(a)h(framew)o(ork)e(are)h(not)h
(\014xed)f(but)h(dep)q(end)125 1339 y(on)21 b(the)g(classes)g(of)h(the)e(comp)
q(onen)o(ts.)36 b(A)20 b(particular)h(comp)q(onen)o(t)f(ma)o(y)g(place)g(more)
125 1399 y(restrictions)13 b(on)h(the)g(other)g(comp)q(onen)o(ts.)20 b(F)l
(or)14 b(example,)d(if)j(a)g(scroll)f(con)o(troller)g(is)h(used)125 1459 y
(in)22 b(a)g(MV)o(C)g(triad)g(then)h(the)f(view)f(will)h(ha)o(v)o(e)f(to)i
(b)q(e)g(able)f(to)g(resp)q(ond)i(to)f(scrolling)125 1519 y(messages.)31 b
(This)20 b(requiremen)o(t)d(is)j(evidenced)e(b)o(y)i(the)f(fact)h(that)h(the)
e(con)o(troller)g(will)125 1579 y(send)k(some)g(sp)q(ecialized)f(messages)h
(to)h(the)g(view)f(and)h(so)g(not)g(ev)o(ery)e(view)h(will)g(b)q(e)125 1640 y
(compatible)14 b(with)i(it.)198 1700 y(The)i(set)g(of)h(messages)f(that)h(an)
g(ob)s(ject)e(can)i(understand)g(is)f(essen)o(tially)f(its)h(t)o(yp)q(e.)125
1760 y(In)k(fact,)h(determining)d(whic)o(h)i(classes)g(can)g(b)q(e)h(used)f
(in)g(a)h(framew)o(ork)e(is)h(the)g(same)125 1820 y(thing)d(as)h(determining)
e(t)o(yp)q(e)h(compatibilit)o(y)l(.)28 b(Use)19 b(of)h(t)o(yp)q(e)f(constrain)
o(t)g(propagation)125 1880 y(can)h(b)q(e)f(used)h(to)h(determine)c(the)i(set)
h(of)g(classes)g(that)g(can)g(b)q(e)g(used)g(as)h(comp)q(onen)o(ts)125 1941 y
(giv)o(en)12 b(that)i(some)f(comp)q(onen)o(ts)g(ha)o(v)o(e)g(already)h(b)q
(een)f(c)o(hosen.)20 b(If)14 b(there)f(w)o(ere)g(some)f(w)o(a)o(y)125 2001 y
(to)18 b(describ)q(e)g(an)g(abstract)h(framew)o(ork)e(and)i(a)f(database)i
(of)e(classes)g(that)h(could)f(serv)o(e)125 2061 y(as)g(comp)q(onen)o(ts,)f
(it)h(should)g(b)q(e)g(p)q(ossible)h(to)f(let)f(the)h(programmer)e(pic)o(k)h
(comp)q(onen)o(ts)125 2121 y(from)e(a)h(men)o(u,)e(only)i(allo)o(wing)g(consi\
sten)o(t)g(c)o(hoices)f(of)i(comp)q(onen)o(ts.)125 2288 y fb(8)82 b(Conclusio\
n)125 2397 y fi(Smalltalk)11 b(programmers)h(often)h(tell)g(stories)g(of)h
(ho)o(w)g(they)f(built)g(a)h(complicated)d(appli-)125 2457 y(cation)17 b(in)f
(a)i(few)f(da)o(ys.)24 b(These)17 b(exp)q(eriences)e(can)j(o)q(ccur)f(only)g
(b)q(ecause)g(the)g(program-)125 2518 y(mers)k(are)i(able)f(to)h(reuse)g(so)g
(man)o(y)e(soft)o(w)o(are)i(comp)q(onen)o(ts)f(and)i(abstract)f(designs.)125
2578 y(Building)16 b(reuseable)i(comp)q(onen)o(ts)f(and)i(designs)f(tak)o(es)
g(m)o(uc)o(h)d(more)i(time.)24 b(Ho)o(w)o(ev)o(er,)125 2638 y(it)15 b(is)h
(time)e(that)j(pa)o(ys)g(o\013)g(handsomely)e(in)h(the)g(long)g(run.)930 2769
y(23)g eop bop 198 195 a fi(A)12 b(n)o(um)o(b)q(er)f(of)i(factors)h(accoun)o
(t)e(for)h(the)g(high)g(reusabilit)o(y)e(of)i(ob)s(ject-orien)o(ted)f(com-)
125 255 y(p)q(onen)o(ts.)25 b(P)o(olymorphism)15 b(increases)i(the)h(lik)o
(elyho)q(o)q(d)f(that)h(a)g(giv)o(en)e(comp)q(onen)o(t)h(will)125 315 y(b)q
(e)j(usable)g(in)g(new)g(con)o(texts.)32 b(Inheritance)19 b(promotes)g(the)h
(emergence)d(of)k(standard)125 376 y(proto)q(cols,)d(and)g(allo)o(ws)f(existi\
ng)g(comp)q(onen)o(ts)f(to)i(b)q(e)g(customized.)k(Inheritance)16 b(also)125
436 y(promotes)g(the)i(emergence)d(of)i(abstract)i(classes.)24 b(F)l(ramew)o
(orks)17 b(allo)o(w)g(a)h(collection)e(of)125 496 y(ob)s(jects)j(to)h(serv)o
(e)f(as)h(a)g(template)e(solution)i(to)g(a)g(class)f(of)h(problems.)31 b(Usin\
g)19 b(frame-)125 556 y(w)o(orks,)e(algorithms)f(and)i(con)o(trol)f(co)q(de,)
h(as)g(w)o(ell)e(as)i(individual)e(comp)q(onen)o(ts,)g(can)i(b)q(e)125 616 y
(reused.)198 677 y(Ob)s(ject-orien)o(ted)c(tec)o(hniques)g(o\013er)i(us)g(an)
g(alternativ)o(e)f(to)h(writing)f(the)h(same)e(pro-)125 737 y(grams)i(o)o(v)o
(er)g(and)h(o)o(v)o(er)f(again.)23 b(W)l(e)17 b(ma)o(y)e(instead)i(tak)o(e)f
(the)h(time)d(to)j(craft,)g(hone,)f(and)125 797 y(p)q(erfect)h(general)i(comp)
q(onen)o(ts,)f(with)g(the)g(kno)o(wledge)g(that)h(our)g(programming)e(en)o
(vi-)125 857 y(ronmen)o(t)f(giv)o(es)h(us)h(the)f(abilit)o(y)f(to)i(reexploit)
e(them.)24 b(If)18 b(designing)f(suc)o(h)h(comp)q(onen)o(ts)125 917 y(is)c
(a)g(time)f(consuming)g(exp)q(erience,)g(it)g(is)i(also)g(one)f(that)h(is)f
(aesthetically)f(satisfying.)20 b(If)125 978 y(m)o(y)13 b(alternativ)o(es)g
(are)i(to)h(roll)e(the)h(same)f(ro)q(c)o(k)g(up)i(the)e(same)g(hill)g(ev)o
(ery)f(da)o(y)l(,)i(or)g(lea)o(v)o(e)f(a)125 1038 y(legacy)i(of)h(p)q(olished\
,)g(tested)g(general)f(comp)q(onen)o(ts)h(as)g(the)g(result)g(of)g(m)o(y)e
(toil,)h(I)h(kno)o(w)125 1098 y(what)f(m)o(y)f(c)o(hoice)g(will)g(b)q(e.)125
1264 y fb(References)125 1374 y fi([A)o(C84])89 b(Inc.)18 b(Apple)g(Computer.)
28 b fg(Lisa)20 b(T)l(o)n(olkit)g(3.0)p fi(.)29 b(Apple)18 b(Computer,)g(Cup)
q(er-)361 1434 y(tino,)e(CA,)f(1984.)125 1536 y([Ale87])87 b(James)22 b(H.)g
(Alexander.)41 b(P)o(aneless)23 b(panes)g(for)h(smalltalk)d(windo)o(ws.)42 b
(In)361 1596 y fg(OOPSLA'87)p fi(,)16 b(1987.)125 1698 y([BC86a])66 b(Ken)o
(t)14 b(Bec)o(k)e(and)j(W)l(ard)g(Cunningham.)i fg(The)f(Liter)n(ate)g(Pr)n
(o)n(gr)n(am)d(Br)n(owser)p fi(.)361 1758 y(T)l(ec)o(hnical)i(Rep)q(ort,)h
(T)l(ektronix,)f(1986.)125 1860 y([BC86b])63 b(Ken)o(t)13 b(Bec)o(k)f(and)i
(W)l(ard)g(Cunningham.)j fg(Using)e(the)h(Diagr)n(amming)e(Debug-)361 1920 y
(ger)p fi(.)21 b(T)l(ec)o(hnical)15 b(Rep)q(ort,)h(T)l(ektronix,)g(1986.)125
2021 y([Bo)q(o86])76 b(Grady)49 b(Bo)q(o)q(c)o(h.)117 b fg(Softwar)n(e)47 b
(Engine)n(ering)i(with)e(A)n(da)p fi(.)116 b(Ben-)361 2082 y(jamin/Cummi)o
(ngs,)14 b(Menlo)h(P)o(ark,)h(CA,)g(1986.)125 2183 y([Bo)q(o87])76 b(Grady)20
b(Bo)q(o)q(c)o(h.)30 b fg(Softwar)n(e)20 b(Comp)n(onents)g(with)h(A)n(da:)27 b
(Structur)n(es,)21 b(T)l(o)n(ols,)361 2244 y(and)d(Subsystems)p fi(.)k(Benjam\
in/Cumm)o(i)o(ngs,)14 b(Menlo)h(P)o(ark,)h(CA,)g(1987.)125 2345 y([CB86])90 b
(W)l(ard)15 b(Cunningham)g(and)g(Ken)o(t)f(Bec)o(k.)j fg(Scr)n(ol)r(lContr)n
(ol)r(ler)h(Explaine)n(d:)23 b(A)o(n)361 2405 y(Example)d(of)f(Liter)n(ate)g
(Pr)n(o)n(gr)n(amming)f(in)h(Smal)r(ltalk)p fi(.)29 b(T)l(ec)o(hnical)17 b
(Rep)q(ort,)361 2466 y(T)l(ektronix,)e(1986.)125 2567 y([Dij82])94 b(Edsger)
22 b(W.)g(Dijkstra.)38 b fg(How)23 b(Do)g(We)g(T)l(el)r(l)h(T)l(ruths)f(that)
g(Might)f(Hurt?)p fi(,)361 2628 y(pages)17 b(129{131.)24 b(Springer-V)l(erlag\
,)15 b(New)h(Y)l(ork,)f(NY,)g(1982.)930 2769 y(24)g eop bop 125 195 a fi([Eri\
87])94 b(Stew)o(art)20 b(Ericson.)34 b fg(F)o(OIBLE:)21 b(A)g(F)l(r)n(amework)
g(for)g(Obje)n(ct-Oriente)n(d)i(In-)361 255 y(ter)n(active)e(Box)g(and)f(Line)
h(Envir)n(onments)p fi(.)30 b(Master's)19 b(thesis,)h(Univ)o(ersit)o(y)361 315
y(of)c(Illinois)f(at)i(Urbana-Champaign,)f(1987.)125 417 y([Fis87])95 b(Gerha\
rd)16 b(Fisc)o(her.)i(Cognitiv)o(e)d(view)f(of)i(reuse)f(and)h(redesign.)k fg
(IEEE)c(Soft-)361 477 y(war)n(e)p fi(,)f(4\(4\):60{72,)j(1987.)125 579 y([F)l
(o)q(o88])83 b(Brian)18 b(F)l(o)q(ote.)29 b fg(Designing)22 b(to)e(F)l(acilit\
ate)h(Change)f(with)h(Obje)n(ct-Oriente)n(d)361 639 y(F)l(r)n(ameworks)p fi
(.)55 b(Master's)27 b(thesis,)j(Univ)o(ersit)o(y)25 b(of)j(Illinois)e(at)i
(Urbana-)361 699 y(Champaign,)16 b(1988.)125 801 y([GB81])87 b(Ira)23 b(P)l
(.)g(Goldstein)g(and)h(Daniel)f(G.)g(Bobro)o(w.)43 b fg(PIE:)24 b(A)o(n)g(Exp)
n(erimental)361 861 y(Personal)g(Information)g(Envir)n(onment)p fi(.)42 b(T)l
(ec)o(hnical)22 b(Rep)q(ort)h(CSL-81-4,)361 922 y(Xero)o(x)15 b(P)o(alo)i(Alt\
o)e(Researc)o(h)h(Cen)o(ter,)f(1981.)125 1023 y([Gol84])84 b(Adele)14 b(Goldb)
q(erg.)21 b fg(Smal)r(ltalk-80:)k(The)17 b(Inter)n(active)h(Pr)n(o)n(gr)n(amm\
ing)d(Envi-)361 1083 y(r)n(onment)p fi(.)21 b(Addison-W)l(esley)l(,)15 b(Read\
ing,)h(Massac)o(h)o(usetts,)g(1984.)125 1185 y([GR83])86 b(Adele)19 b(Goldb)q
(erg)j(and)f(Da)o(vid)g(Robson.)36 b fg(Smal)r(ltalk-80:)d(The)22 b(L)n(angua\
ge)361 1245 y(and)d(its)f(Implementation)p fi(.)26 b(Addison-W)l(esley)l(,)16
b(Reading,)h(Massac)o(h)o(usetts,)361 1306 y(1983.)125 1407 y([HO87])85 b(Dan\
iel)22 b(C.)g(Halb)q(ert)g(and)h(P)o(atric)o(k)e(D.)i(O'Brien.)38 b(Using)22 b
(t)o(yp)q(es)g(and)h(in-)361 1467 y(heritance)18 b(in)g(ob)s(ject-orien)o(ted)
f(programs.)29 b fg(IEEE)19 b(Softwar)n(e)p fi(,)g(to)g(app)q(ear,)361 1528 y
(1987.)125 1629 y([Joh86])84 b(Ralph)24 b(E.)g(Johnson.)46 b(T)o(yp)q(e-c)o
(hec)o(king)23 b(Smalltalk.)43 b(In)23 b fg(Pr)n(o)n(c)n(e)n(e)n(dings)h(of)
361 1689 y(OOPSLA)h(`86,)g(Obje)n(ct-Oriente)n(d)h(Pr)n(o)n(gr)n(amming)c(Sys\
tems,)j(L)n(anguages)361 1750 y(and)19 b(Applic)n(ations)p fi(,)f(pages)g(315\
{321,)i(No)o(v)o(em)o(b)q(er)15 b(1986.)26 b(prin)o(ted)17 b(as)h(SIG-)361
1810 y(PLAN)e(Notices,)f(21\(11\).)125 1912 y([Lis87])97 b(Barbara)16 b(Lisk)
o(o)o(v)k fg(Keynote)e(A)n(ddr)n(ess.)d(Data)i(A)o(bstr)n(action)g(and)f(Hier)
n(ar)n(chy.)361 1972 y fi(In)g(OOPSLA)g(`87)h(Addendum)e(to)h(the)h(Pro)q(cee\
dings,)f(pp.)g(17-34)i(Octob)q(er)361 2032 y(1987)g(\(prin)o(ted)d(as)i(SIGPL\
AN)f(Notices)f(23\(5\)\).)125 2134 y([LS80])103 b(W)l(are)15 b(Mey)o(ers.)d
(In)o(terview)h(with)h(Wilma)f(Osb)q(orne.)20 b(IEEE)14 b(Soft)o(w)o(are)h
(5\(3\):)361 2194 y(104-105,)j(1988)125 2296 y([OBHS86])23 b(Tim)g(O'Shea,)i
(Ken)o(t)f(Bec)o(k,)g(Dan)h(Halb)q(ert,)g(and)g(Kurt)f(J.)g(Sc)o(hm)o(uc)o
(k)o(e)o(r.)361 2356 y(P)o(anel)14 b(on:)21 b(the)15 b(learnabilit)o(y)e(of)i
(ob)s(ject-orien)o(ted)e(programming)h(systems.)361 2416 y(In)g fg(Pr)n(o)n
(c)n(e)n(e)n(dings)h(of)g(OOPSLA)i(`86,)e(Obje)n(ct-Oriente)n(d)k(Pr)n(o)n
(gr)n(amming)14 b(Sys-)361 2476 y(tems,)j(L)n(anguages)h(and)f(Applic)n(ation\
s)p fi(,)f(pages)g(502{504,)i(No)o(v)o(em)o(b)q(er)13 b(1986.)361 2536 y(prin)
o(ted)i(as)i(SIGPLAN)f(Notices,)f(21\(11\).)930 2769 y(25)g eop bop 125 195 a
fi([Ro)q(c86])77 b(Ro)o(xanna)17 b(Ro)q(c)o(hat.)22 b fg(In)c(Se)n(ar)n(ch)f
(of)h(Go)n(o)n(d)e(Smal)r(ltalk)k(Pr)n(o)n(gr)n(amming)c(Style)p fi(.)361 255
y(T)l(ec)o(hnical)f(Rep)q(ort)h(CR-86-19,)i(T)l(ektronix,)d(1986.)125 357 y
([SCB*86])39 b(Craig)25 b(Sc)o(ha\013ert,)h(T)l(opher)f(Co)q(op)q(er,)i(Bruce)
c(Bullis,)i(Mik)o(e)d(Kilian,)j(and)361 417 y(Carrie)20 b(Wilp)q(olt.)32 b
(An)20 b(in)o(tro)q(duction)g(to)h(trellis/o)o(wl.)31 b(In)20 b fg(Pr)n(o)n
(c)n(e)n(e)n(dings)g(of)361 477 y(OOPSLA)25 b(`86,)g(Obje)n(ct-Oriente)n(d)h
(Pr)n(o)n(gr)n(amming)c(Systems,)j(L)n(anguages)361 538 y(and)14 b(Applic)n
(ations)p fi(,)f(pages)g(9{16,)h(No)o(v)o(em)n(b)q(er)c(1986.)15 b(prin)o(ted)
d(as)g(SIGPLAN)361 598 y(Notices,)j(21\(11\).)125 699 y([Sc)o(h86])85 b(Kurt)
19 b(J.)g(Sc)o(hm)o(uc)o(k)o(e)o(r.)28 b fg(Obje)n(ct-Oriente)n(d)22 b(Pr)n
(o)n(gr)n(amming)d(for)g(the)i(Macin-)361 760 y(tosh)p fi(.)g(Ha)o(yden)15 b
(Bo)q(ok)i(Compan)o(y)l(,)e(1986.)125 861 y([Sei87])97 b(Ed)18 b(Seidewitz.)
23 b(Ob)s(ject-orien)o(ted)15 b(programming)h(in)h(smalltalk)f(and)i(ada.)361
922 y(In)c fg(Pr)n(o)n(c)n(e)n(e)n(dings)h(of)g(OOPSLA)i(`87,)e(Obje)n(ct-Ori\
ente)n(d)k(Pr)n(o)n(gr)n(amming)14 b(Sys-)361 982 y(tems,)k(L)n(anguages)g
(and)f(Applic)n(ations)p fi(,)g(pages)g(202{213,)h(Decem)o(b)q(er)c(1987.)361
1042 y(prin)o(ted)h(as)i(SIGPLAN)f(Notices,)f(22\(12\).)125 1144 y([Smi87])77
b(Randall)22 b(B.)f(Smith.)36 b(Exp)q(erience)21 b(with)g(the)h(alternate)f
(realit)o(y)g(kit:)31 b(an)361 1204 y(example)10 b(of)j(the)f(tension)h(b)q
(et)o(w)o(een)e(literalism)f(and)j(magic.)h(In)e fg(Pr)n(o)n(c)n(e)n(e)n(ding\
s)361 1264 y(of)17 b(CHI)g(87)p fi(,)f(pages)h(61{68,)h(April)d(1987.)125 1366
y([Str86])95 b(Bjarne)21 b(Stroustrup.)38 b fg(The)22 b(C++)h(Pr)n(o)n(gr)n
(amming)d(L)n(anguage)p fi(.)38 b(Addison-)361 1426 y(W)l(esley)15 b(Publishi\
ng)h(Co.,)g(Reading,)g(MA,)f(1986.)930 2769 y(26)g eop eos @end
%!PS-Adobe-2.0 EPSF-1.2
%%DocumentFonts: Courier Helvetica-Bold
%%Pages: 1
%%BoundingBox: 145 354 1013 663
%%EndComments

50 dict begin

/arrowHeight 8 def
/arrowWidth 4 def
/none null def
/numGraphicParameters 17 def
/stringLimit 65535 def

/Begin {
save
numGraphicParameters dict begin
} def

/End {
end
restore
} def

/SetB {
dup type /nulltype eq {
pop
false /brushRightArrow idef
false /brushLeftArrow idef
true /brushNone idef
} {
/brushDashOffset idef
/brushDashArray idef
0 ne /brushRightArrow idef
0 ne /brushLeftArrow idef
/brushWidth idef
false /brushNone idef
} ifelse
} def

/SetCFg {
/fgblue idef
/fggreen idef
/fgred idef
} def

/SetCBg {
/bgblue idef
/bggreen idef
/bgred idef
} def

/SetF {
/printSize idef
/printFont idef
} def

/SetP {
dup type /nulltype eq {
pop true /patternNone idef
} {
/patternGrayLevel idef
patternGrayLevel -1 eq {
/patternString idef
} if
false /patternNone idef
} ifelse
} def

/BSpl {
0 begin
storexyn
newpath
n 1 gt {
0 0 0 0 0 0 1 1 true subspline
n 2 gt {
0 0 0 0 1 1 2 2 false subspline
1 1 n 3 sub {
/i exch def
i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
} for
n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
} if
n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
brushNone not { istroke } if
0 0 1 1 leftarrow
n 2 sub dup n 1 sub dup rightarrow
} if
end
} dup 0 4 dict put def

/Circ {
newpath
0 360 arc
patternNone not { ifill } if
brushNone not { istroke } if
} def

/CBSpl {
0 begin
dup 2 gt {
storexyn
newpath
n 1 sub dup 0 0 1 1 2 2 true subspline
1 1 n 3 sub {
/i exch def
i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
} for
n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
patternNone not { ifill } if
brushNone not { istroke } if
} {
Poly
} ifelse
end
} dup 0 4 dict put def

/Elli {
0 begin
newpath
4 2 roll
translate
scale
0 0 1 0 360 arc
patternNone not { ifill } if
brushNone not { istroke } if
end
} dup 0 1 dict put def

/Line {
0 begin
2 storexyn
newpath
x 0 get y 0 get moveto
x 1 get y 1 get lineto
brushNone not { istroke } if
0 0 1 1 leftarrow
0 0 1 1 rightarrow
end
} dup 0 4 dict put def

/MLine {
0 begin
storexyn
newpath
n 1 gt {
x 0 get y 0 get moveto
1 1 n 1 sub {
/i exch def
x i get y i get lineto
} for
patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
brushNone not { istroke } if
0 0 1 1 leftarrow
n 2 sub dup n 1 sub dup rightarrow
} if
end
} dup 0 4 dict put def

/Poly {
3 1 roll
newpath
moveto
-1 add
{ lineto } repeat
closepath
patternNone not { ifill } if
brushNone not { istroke } if
} def

/Rect {
0 begin
/t exch def
/r exch def
/b exch def
/l exch def
newpath
l b moveto
l t lineto
r t lineto
r b lineto
closepath
patternNone not { ifill } if
brushNone not { istroke } if
end
} dup 0 4 dict put def

/Text {
ishow
} def

/idef {
dup where { pop pop pop } { exch def } ifelse
} def

/ifill {
0 begin
gsave
patternGrayLevel -1 ne {
fgred bgred fgred sub patternGrayLevel mul add
fggreen bggreen fggreen sub patternGrayLevel mul add
fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
eofill
} {
eoclip
originalCTM setmatrix
pathbbox /t exch def /r exch def /b exch def /l exch def
/w r l sub ceiling cvi def
/h t b sub ceiling cvi def
/imageByteWidth w 8 div ceiling cvi def
/imageHeight h def
bgred bggreen bgblue setrgbcolor
eofill
fgred fggreen fgblue setrgbcolor
w 0 gt h 0 gt and {
l b translate w h scale
w h true [w 0 0 h neg 0 h] { patternproc } imagemask
} if
} ifelse
grestore
end
} dup 0 8 dict put def

/istroke {
gsave
brushDashOffset -1 eq {
[] 0 setdash
1 setgray
} {
brushDashArray brushDashOffset setdash
fgred fggreen fgblue setrgbcolor
} ifelse
brushWidth setlinewidth
originalCTM setmatrix
stroke
grestore
} def

/ishow {
0 begin
gsave
printFont findfont printSize scalefont setfont
fgred fggreen fgblue setrgbcolor
/vertoffset printSize neg def {
0 vertoffset moveto show
/vertoffset vertoffset printSize sub def
} forall
grestore
end
} dup 0 3 dict put def

/patternproc {
0 begin
/patternByteLength patternString length def
/patternHeight patternByteLength 8 mul sqrt cvi def
/patternWidth patternHeight def
/patternByteWidth patternWidth 8 idiv def
/imageByteMaxLength imageByteWidth imageHeight mul
stringLimit patternByteWidth sub min def
/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
patternHeight mul patternHeight max def
/imageHeight imageHeight imageMaxHeight sub store
/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
0 1 imageMaxHeight 1 sub {
/y exch def
/patternRow y patternByteWidth mul patternByteLength mod def
/patternRowString patternString patternRow patternByteWidth getinterval def
/imageRow y imageByteWidth mul def
0 patternByteWidth imageByteWidth 1 sub {
/x exch def
imageString imageRow x add patternRowString putinterval
} for
} for
imageString
end
} dup 0 12 dict put def

/min {
dup 3 2 roll dup 4 3 roll lt { exch } if pop
} def

/max {
dup 3 2 roll dup 4 3 roll gt { exch } if pop
} def

/arrowhead {
0 begin
transform originalCTM itransform
/taily exch def
/tailx exch def
transform originalCTM itransform
/tipy exch def
/tipx exch def
/dy tipy taily sub def
/dx tipx tailx sub def
/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
gsave
originalCTM setmatrix
tipx tipy translate
angle rotate
newpath
0 0 moveto
arrowHeight neg arrowWidth 2 div lineto
arrowHeight neg arrowWidth 2 div neg lineto
closepath
patternNone not {
originalCTM setmatrix
/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
arrowWidth div def
/padtail brushWidth 2 div def
tipx tipy translate
angle rotate
padtip 0 translate
arrowHeight padtip add padtail add arrowHeight div dup scale
arrowheadpath
ifill
} if
brushNone not {
originalCTM setmatrix
tipx tipy translate
angle rotate
arrowheadpath
istroke
} if
grestore
end
} dup 0 9 dict put def

/arrowheadpath {
newpath
0 0 moveto
arrowHeight neg arrowWidth 2 div lineto
arrowHeight neg arrowWidth 2 div neg lineto
closepath
} def

/leftarrow {
0 begin
y exch get /taily exch def
x exch get /tailx exch def
y exch get /tipy exch def
x exch get /tipx exch def
brushLeftArrow { tipx tipy tailx taily arrowhead } if
end
} dup 0 4 dict put def

/rightarrow {
0 begin
y exch get /tipy exch def
x exch get /tipx exch def
y exch get /taily exch def
x exch get /tailx exch def
brushRightArrow { tipx tipy tailx taily arrowhead } if
end
} dup 0 4 dict put def

/midpoint {
0 begin
/y1 exch def
/x1 exch def
/y0 exch def
/x0 exch def
x0 x1 add 2 div
y0 y1 add 2 div
end
} dup 0 4 dict put def

/thirdpoint {
0 begin
/y1 exch def
/x1 exch def
/y0 exch def
/x0 exch def
x0 2 mul x1 add 3 div
y0 2 mul y1 add 3 div
end
} dup 0 4 dict put def

/subspline {
0 begin
/movetoNeeded exch def
y exch get /y3 exch def
x exch get /x3 exch def
y exch get /y2 exch def
x exch get /x2 exch def
y exch get /y1 exch def
x exch get /x1 exch def
y exch get /y0 exch def
x exch get /x0 exch def
x1 y1 x2 y2 thirdpoint
/p1y exch def
/p1x exch def
x2 y2 x1 y1 thirdpoint
/p2y exch def
/p2x exch def
x1 y1 x0 y0 thirdpoint
p1x p1y midpoint
/p0y exch def
/p0x exch def
x2 y2 x3 y3 thirdpoint
p2x p2y midpoint
/p3y exch def
/p3x exch def
movetoNeeded { p0x p0y moveto } if
p1x p1y p2x p2y p3x p3y curveto
end
} dup 0 17 dict put def

/storexyn {
/n exch def
/y n array def
/x n array def
n 1 sub -1 0 {
/i exch def
y i 3 2 roll put
x i 3 2 roll put
} for
} def

%%EndProlog

%I Idraw 5 Grid 8

%%Page: 1 1

Begin
%I b u
%I cfg u
%I cbg u
%I f u
%I p u
%I t
[ .791209 0 0 .791209 0 0 ] concat
/originalCTM matrix currentmatrix def

Begin %I Elli
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I
207 743 0 0 Elli
End

Begin %I Elli
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I
213 733 0 0 Elli
End

Begin %I Elli
%I b 65535
2 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t
[ 1 0 0 1 235 -33 ] concat
%I
219 735 46 46 Elli
End

Begin %I Elli
%I b 65535
2 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t
[ 1 0 0 1 14 -185 ] concat
%I
219 735 46 46 Elli
End

Begin %I Elli
%I b 65535
2 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t
[ 1 0 0 1 294 -181 ] concat
%I
219 735 46 46 Elli
End

Begin %I Elli
%I b 65535
2 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t
[ 1 0 0 1 159 -183 ] concat
%I
219 735 46 46 Elli
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t u
%I
303 722 342 722 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t u
%I
298 674 344 674 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t u
%I
500 701 539 701 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t u
%I
275 570 298 570 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t u
%I
270 525 300 525 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t u
%I
424 552 443 552 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t u
%I
553 576 581 576 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t u
%I
552 531 585 531 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t
[ 1 0 0 1 20 20 ] concat
%I
261 675 261 675 Line
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 223 533 ] concat
%I
[
()
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-helvetica-bold-r-*-140-*
/Helvetica-Bold 14 SetF
%I t
[ 1 0 0 1 228 558 ] concat
%I
[
(B)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-helvetica-bold-r-*-140-*
/Helvetica-Bold 14 SetF
%I t
[ 1 0 0 1 450 710 ] concat
%I
[
(C)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 367 548 ] concat
%I
[
()
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-helvetica-bold-r-*-140-*
/Helvetica-Bold 14 SetF
%I t
[ 1 0 0 1 373 557 ] concat
%I
[
(A)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 510 552 ] concat
%I
[
()
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-helvetica-bold-r-*-140-*
/Helvetica-Bold 14 SetF
%I t
[ 1 0 0 1 509 560 ] concat
%I
[
(B)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 356 726 ] concat
%I
[
(X)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 357 677 ] concat
%I
[
(Y)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 550 706 ] concat
%I
[
(Y)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 307 572 ] concat
%I
[
(X)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 308 531 ] concat
%I
[
(Z)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 454 552 ] concat
%I
[
()
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 452 558 ] concat
%I
[
(X)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 591 583 ] concat
%I
[
(X)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 592 538 ] concat
%I
[
(Z)
] Text
End

Begin %I Elli
%I b 65535
2 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
1 SetP
%I t
[ 1 0 0 1 43 -32 ] concat
%I
219 735 46 46 Elli
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-helvetica-bold-r-*-140-*
/Helvetica-Bold 14 SetF
%I t
[ 1 0 0 1 255 712 ] concat
%I
[
(A)
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 229 836 ] concat
%I
[
()
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f stdfont
/Courier 10 SetF
%I t
[ 1 0 0 1 241 703 ] concat
%I
[
()
] Text
End

Begin %I Text
%I cfg Black
0 0 0 SetCFg
%I f *-helvetica-bold-r-*-140-*
/Helvetica-Bold 14 SetF
%I t
[ 1 0 0 1 338 472 ] concat
%I
[
(Figure 1)
] Text
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I
211 621 211 621 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I
246 625 246 625 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I
234 597 254 658 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I
388 598 432 661 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I
501 600 470 659 Line
End

Begin %I Line
%I b 65535
1 0 0 [] 0 SetB
%I cfg Black
0 0 0 SetCFg
%I cbg White
1 1 1 SetCBg
%I p
0 SetP
%I t u
%I
452 598 452 598 Line
End

End %I eop

showpage

%%Trailer

end


  3 Responses to “Category : Various Text files
Archive   : OOARTPS2.ZIP
Filename : ARTICLE2.PS

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/