%!PS-Adobe-3.0 %%BoundingBox: (atend) %%Pages: (atend) %%PageOrder: (atend) %%DocumentFonts: (atend) %%DocumentNeedsFonts: (atend) %%DocumentSuppliedFonts: (atend) %%Creator: Frame 5.5 %%DocumentData: Clean7Bit %%EndComments %%BeginProlog % % Frame ps_prolog 5.5, for use with Adobe Unix Frame 5.5 products % % This ps_prolog file is Copyright (c) 1986-1996 Adobe Systems, Incoporated. % All rights reserved. This ps_prolog file may be freely copied and % distributed in conjunction with documents created using FrameMaker, % FrameMaker+SGML, FrameReader, and FrameViewer as long as this % copyright notice is preserved. /FMDocSave save def % % FrameMaker users specify the proper paper size for each print job in the % "Print" dialog's "Printer Paper Size" "Width" and "Height~ fields. If the % printer that the PS file is sent to does not support the requested paper % size, or if there is no paper tray of the proper size currently installed, % then the job will not be printed. The following flag, if set to true, will % cause the job to print on the default paper in such cases. /FMAllowPaperSizeMismatch false def % % Frame products normally print colors as their true color on a color printer % or as shades of gray, based on luminance, on a black-and white printer. The % following flag, if set to true, forces all non-white colors to print as pure % black. This has no effect on bitmap images. /FMPrintAllColorsAsBlack false def % % Frame products can either set their own line screens or use a printer's % default settings. Three flags below control this separately for no % separations, spot separations and process separations. If a flag % is true, then the default printer settings will not be changed. If it is % false, Frame products will use their own settings from a table based on % the printer's resolution. /FMUseDefaultNoSeparationScreen true def /FMUseDefaultSpotSeparationScreen true def /FMUseDefaultProcessSeparationScreen false def % % For any given PostScript printer resolution, Frame products have two sets of % screen angles and frequencies for printing process separations, which are % recomended by Adobe. The following variable chooses the higher frequencies % when set to true or the lower frequencies when set to false. This is only % effective if the appropriate FMUseDefault...SeparationScreen flag is false. /FMUseHighFrequencyScreens true def % % The following is a set of predefined optimal frequencies and angles for various % common dpi settings. This is taken from "Advances in Color Separation Using % PostScript Software Technology," from Adobe Systems (3/13/89 P.N. LPS 0043) % and corrolated with information which is in various PPD (4.0) files. % % The "dpiranges" figure is the minimum dots per inch device resolution which % can support this setting. The "low" and "high" values are controlled by the % setting of the FMUseHighFrequencyScreens flag above. The "TDot" flags control % the use of the "Yellow Triple Dot" feature whereby the frequency id divided by % three, but the dot function is "trippled" giving a block of 3x3 dots per cell. % % PatFreq is a compromise pattern frequency for ps Level 2 printers which is close % to the ideal WYSIWYG pattern frequency of 9 repetitions/inch but does not beat % (too badly) against the screen frequencies of any separations for that DPI. /dpiranges [ 2540 2400 1693 1270 1200 635 600 0 ] def /CMLowFreqs [ 100.402 94.8683 89.2289 100.402 94.8683 66.9349 63.2456 47.4342 ] def /YLowFreqs [ 95.25 90.0 84.65 95.25 90.0 70.5556 66.6667 50.0 ] def /KLowFreqs [ 89.8026 84.8528 79.8088 89.8026 84.8528 74.8355 70.7107 53.033 ] def /CLowAngles [ 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 ] def /MLowAngles [ 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 ] def /YLowTDot [ true true false true true false false false ] def /CMHighFreqs [ 133.87 126.491 133.843 108.503 102.523 100.402 94.8683 63.2456 ] def /YHighFreqs [ 127.0 120.0 126.975 115.455 109.091 95.25 90.0 60.0 ] def /KHighFreqs [ 119.737 113.137 119.713 128.289 121.218 89.8026 84.8528 63.6395 ] def /CHighAngles [ 71.5651 71.5651 71.5651 70.0169 70.0169 71.5651 71.5651 71.5651 ] def /MHighAngles [ 18.4349 18.4349 18.4349 19.9831 19.9831 18.4349 18.4349 18.4349 ] def /YHighTDot [ false false true false false true true false ] def /PatFreq [ 10.5833 10.0 9.4055 10.5833 10.0 10.5833 10.0 9.375 ] def % % PostScript Level 2 printers contain an "Accurate Screens" feature which can % improve process separation rendering at the expense of compute time. This % flag is ignored by PostScript Level 1 printers. /FMUseAcccurateScreens true def % % The following PostScript procedure defines the spot function that Frame % products will use for process separations. You may un-comment-out one of % the alternative functions below, or use your own. % % Dot function /FMSpotFunction {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1 sub } {dup mul exch dup mul add 1 exch sub }ifelse } def % % Line function % /FMSpotFunction { pop } def % % Elipse function % /FMSpotFunction { dup 5 mul 8 div mul exch dup mul exch add % sqrt 1 exch sub } def % % /FMversion (5.5) def /fMLevel1 /languagelevel where {pop languagelevel} {1} ifelse 2 lt def /FMPColor fMLevel1 { false /colorimage where {pop pop true} if } { true } ifelse def /FrameDict 400 dict def systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if % The readline in PS 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put errordict /rangecheck {FrameDict /bug true put} put FrameDict /bug false put mark % Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark errordict /rangecheck FrameDict /tmprangecheck get put FrameDict /bug get { /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop dup 10 eq {exit} if dup 13 eq {exit} if gstring exch gindex exch put /gindex gindex 1 add def } loop pop gstring 0 gindex getinterval true } bind def } if /FMshowpage /showpage load def /FMquit /quit load def /FMFAILURE { 2 copy exch = = flush FMshowpage /Helvetica findfont 12 scalefont setfont 72 200 moveto show 72 220 moveto show FMshowpage FMquit } def /FMVERSION { FMversion ne { (Adobe Frame product version does not match ps_prolog! Check installation;) (also check ~/fminit and ./fminit for old versions) FMFAILURE } if } def /fmConcatProcs { /proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }def FrameDict begin [ /ALDsave /FMdicttop /FMoptop /FMpointsize /FMsetsize /FMsaveobject /b /bitmapsave /blut /bpside /bs /bstring /bwidth /c /cf /cs /cynu /depth /edown /fh /fillvals /fw /fx /fy /g /gfile /gindex /grnt /gryt /gstring /height /hh /i /im /indx /is /k /kk /landscape /lb /len /llx /lly /m /magu /manualfeed /n /offbits /onbits /organgle /orgbangle /orgbfreq /orgbproc /orgbxfer /orgfreq /orggangle /orggfreq /orggproc /orggxfer /orghalftone /orgmatrix /orgproc /orgrangle /orgrfreq /orgrproc /orgrxfer /orgxfer /pagesave /paperheight /papersizedict /paperwidth /pos /pwid /r /rad /redt /sl /str /tran /u /urx /ury /val /width /width /ws /ww /x /x1 /x2 /xindex /xpoint /xscale /xx /y /y1 /y2 /yelu /yindex /ypoint /yscale /yy /tintGray ] { 0 def } forall /FmBD {bind def} bind def systemdict /pdfmark known systemdict /currentdistillerparams known and { /fMAcrobat true def /FmPD /pdfmark load def /FmPT /show load def currentdistillerparams /CoreDistVersion get 2000 ge { /FmPD2 /pdfmark load def /FmPA { mark exch /Dest exch 5 3 roll /View [ /XYZ null 6 -2 roll FmDC exch pop null] /DEST FmPD }FmBD } { /FmPD2 /cleartomark load def /FmPA {pop pop pop}FmBD } ifelse } { /fMAcrobat false def /FmPD /cleartomark load def /FmPD2 /cleartomark load def /FmPT /pop load def /FmPA {pop pop pop}FmBD } ifelse /FmDC { transform fMDefaultMatrix defaultmatrix itransform cvi exch cvi exch }FmBD /FmBx { dup 3 index lt {3 1 roll exch} if 1 index 4 index lt {4 -1 roll 3 1 roll exch 4 1 roll} if }FmBD /FMnone 0 def /FMcyan 1 def /FMmagenta 2 def /FMyellow 3 def /FMblack 4 def /FMcustom 5 def /fMNegative false def /FrameSepIs FMnone def /FrameSepBlack 0 def /FrameSepYellow 0 def /FrameSepMagenta 0 def /FrameSepCyan 0 def /FrameSepRed 1 def /FrameSepGreen 1 def /FrameSepBlue 1 def /FrameCurGray 1 def /FrameCurPat null def /FrameCurColors [ 0 0 0 1 0 0 0 1] def /FrameColorEpsilon .001 def /eqepsilon { sub dup 0 lt {neg} if FrameColorEpsilon le } bind def /FrameCmpColorsCMYK { 2 copy 0 get exch 0 get eqepsilon { 2 copy 1 get exch 1 get eqepsilon { 2 copy 2 get exch 2 get eqepsilon { 3 get exch 3 get eqepsilon } {pop pop false} ifelse }{pop pop false} ifelse } {pop pop false} ifelse } bind def /FrameCmpColorsRGB { 2 copy 4 get exch 0 get eqepsilon { 2 copy 5 get exch 1 get eqepsilon { 6 get exch 2 get eqepsilon }{pop pop false} ifelse } {pop pop false} ifelse } bind def /RGBtoCMYK { 1 exch sub 3 1 roll 1 exch sub 3 1 roll 1 exch sub 3 1 roll 3 copy 2 copy le { pop } { exch pop } ifelse 2 copy le { pop } { exch pop } ifelse dup dup dup 6 1 roll 4 1 roll 7 1 roll sub 6 1 roll sub 5 1 roll sub 4 1 roll } bind def /CMYKtoRGB { dup dup 4 -1 roll add 5 1 roll 3 -1 roll add 4 1 roll add 1 exch sub dup 0 lt {pop 0} if 3 1 roll 1 exch sub dup 0 lt {pop 0} if exch 1 exch sub dup 0 lt {pop 0} if exch } bind def /FrameSepInit { 1.0 RealSetgray } bind def /FrameSetSepColor { /FrameSepBlue exch def /FrameSepGreen exch def /FrameSepRed exch def /FrameSepBlack exch def /FrameSepYellow exch def /FrameSepMagenta exch def /FrameSepCyan exch def /FrameSepIs FMcustom def setCurrentScreen } bind def /FrameSetCyan { /FrameSepBlue 1.0 def /FrameSepGreen 1.0 def /FrameSepRed 0.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 1.0 def /FrameSepIs FMcyan def setCurrentScreen } bind def /FrameSetMagenta { /FrameSepBlue 1.0 def /FrameSepGreen 0.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 1.0 def /FrameSepCyan 0.0 def /FrameSepIs FMmagenta def setCurrentScreen } bind def /FrameSetYellow { /FrameSepBlue 0.0 def /FrameSepGreen 1.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 1.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMyellow def setCurrentScreen } bind def /FrameSetBlack { /FrameSepBlue 0.0 def /FrameSepGreen 0.0 def /FrameSepRed 0.0 def /FrameSepBlack 1.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMblack def setCurrentScreen } bind def /FrameNoSep { /FrameSepIs FMnone def setCurrentScreen } bind def /FrameSetSepColors { FrameDict begin [ exch 1 add 1 roll ] /FrameSepColors exch def end } bind def /FrameColorInSepListCMYK { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsCMYK { pop true exit } if } forall dup true ne {pop false} if } bind def /FrameColorInSepListRGB { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsRGB { pop true exit } if } forall dup true ne {pop false} if } bind def /RealSetgray /setgray load def /RealSetrgbcolor /setrgbcolor load def /RealSethsbcolor /sethsbcolor load def end /setgray { FrameDict begin FrameSepIs FMnone eq { RealSetgray } { FrameSepIs FMblack eq { RealSetgray } { FrameSepIs FMcustom eq FrameSepRed 0 eq and FrameSepGreen 0 eq and FrameSepBlue 0 eq and { RealSetgray } { 1 RealSetgray pop } ifelse } ifelse } ifelse end } bind def /setrgbcolor { FrameDict begin FrameSepIs FMnone eq { RealSetrgbcolor } { 3 copy [ 4 1 roll ] FrameColorInSepListRGB { FrameSepBlue eq exch FrameSepGreen eq and exch FrameSepRed eq and { 0 } { 1 } ifelse } { FMPColor { RealSetrgbcolor currentcmykcolor } { RGBtoCMYK } ifelse FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind def /sethsbcolor { FrameDict begin FrameSepIs FMnone eq { RealSethsbcolor } { RealSethsbcolor currentrgbcolor setrgbcolor } ifelse end } bind def FrameDict begin /setcmykcolor where { pop /RealSetcmykcolor /setcmykcolor load def } { /RealSetcmykcolor { 4 1 roll 3 { 3 index add 0 max 1 min 1 exch sub 3 1 roll} repeat RealSetrgbcolor pop } bind def } ifelse userdict /setcmykcolor { FrameDict begin FrameSepIs FMnone eq { RealSetcmykcolor } { 4 copy [ 5 1 roll ] FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and { 0 } { 1 } ifelse } { FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind put fMLevel1 { /patScreenDict 7 dict dup begin <0f1e3c78f0e1c387> [ 45 { pop } {exch pop} .5 2 sqrt] FmBD <0f87c3e1f0783c1e> [ 135 { pop } {exch pop} .5 2 sqrt] FmBD [ 0 { pop } dup .5 2 ] FmBD [ 90 { pop } dup .5 2 ] FmBD <8142241818244281> [ 45 { 2 copy lt {exch} if pop} dup .75 2 sqrt] FmBD <03060c183060c081> [ 45 { pop } {exch pop} .875 2 sqrt] FmBD <8040201008040201> [ 135 { pop } {exch pop} .875 2 sqrt] FmBD end def } { /patProcDict 5 dict dup begin <0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def <8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -1 -1 moveto 9 9 lineto stroke } bind def <03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def end def /patDict 15 dict dup begin /PatternType 1 def /PaintType 2 def /TilingType 3 def /BBox [ 0 0 8 8 ] def /XStep 8 def /YStep 8 def /PaintProc { begin patProcDict bstring known { patProcDict bstring get exec } { 8 8 true [1 0 0 -1 0 8] bstring imagemask } ifelse end } bind def end def } ifelse /tintCMYK { 1 tintGray sub FrameCurColors 0 4 getinterval aload pop 4 index mul 5 1 roll 3 index mul 5 1 roll 2 index mul 5 1 roll mul 4 1 roll }bind def /tintRGB { 1 tintGray sub FrameCurColors 4 3 getinterval aload pop 1 exch sub 3 index mul 1 exch sub 4 1 roll 1 exch sub 2 index mul 1 exch sub 4 1 roll 1 exch sub mul 1 exch sub 3 1 roll }bind def /combineColor { /tintGray 1 1 FrameCurGray sub FrameCurColors 7 get mul sub def FrameSepIs FMnone eq { graymode fMLevel1 or not { [/Pattern [/DeviceCMYK]] setcolorspace tintCMYK FrameCurPat setcolor } { FrameCurColors 3 get 1.0 ge { tintGray RealSetgray } { fMAcrobat not FMPColor graymode and and { tintCMYK RealSetcmykcolor } { tintRGB RealSetrgbcolor } ifelse } ifelse } ifelse } { FrameCurColors 0 4 getinterval aload FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and FrameSepIs FMcustom eq and { tintGray } { 1 } ifelse } { FrameSepIs FMblack eq {tintGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop tintGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop tintGray 1.0 exch sub mul 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop tintGray 1.0 exch sub mul 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse graymode fMLevel1 or not { [/Pattern [/DeviceGray]] setcolorspace FrameCurPat setcolor } { graymode not fMLevel1 and { dup 1 lt {pop FrameCurGray} if } if RealSetgray } ifelse } ifelse } bind def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /fMDefaultMatrix matrix def /fMatrix2 matrix def /dpi 72 0 fMDefaultMatrix defaultmatrix dtransform dup mul exch dup mul add sqrt def /freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def /sangle 1 0 fMDefaultMatrix defaultmatrix dtransform exch atan def sangle fMatrix2 rotate fMDefaultMatrix defaultmatrix fMatrix2 concatmatrix dup 0 get /sflipx exch def 3 get /sflipy exch def /screenIndex { 0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for } bind def /getCyanScreen { FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getMagentaScreen { FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getYellowScreen { FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse screenIndex dup 3 1 roll get 3 1 roll get { 3 div {2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat FMSpotFunction } } {/FMSpotFunction load } ifelse 0.0 exch } bind def /getBlackScreen { FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse screenIndex get 45.0 /FMSpotFunction load } bind def /getSpotScreen { getBlackScreen } bind def /getCompositeScreen { getBlackScreen } bind def /FMSetScreen fMLevel1 { /setscreen load }{ { 8 dict begin /HalftoneType 1 def /SpotFunction exch def /Angle exch def /Frequency exch def /AccurateScreens FMUseAcccurateScreens def currentdict end sethalftone } bind } ifelse def /setDefaultScreen { fMLevel1 { FMPColor { orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer } { orgxfer cvx settransfer } ifelse orgfreq organgle orgproc cvx setscreen } { orghalftone sethalftone }ifelse } bind def /setCurrentScreen { FrameSepIs FMnone eq { FMUseDefaultNoSeparationScreen { setDefaultScreen } { getCompositeScreen FMSetScreen } ifelse } { FrameSepIs FMcustom eq { FMUseDefaultSpotSeparationScreen { setDefaultScreen } { getSpotScreen FMSetScreen } ifelse } { FMUseDefaultProcessSeparationScreen { setDefaultScreen } { FrameSepIs FMcyan eq { getCyanScreen FMSetScreen } { FrameSepIs FMmagenta eq { getMagentaScreen FMSetScreen } { FrameSepIs FMyellow eq { getYellowScreen FMSetScreen } { getBlackScreen FMSetScreen } ifelse } ifelse } ifelse } ifelse } ifelse } ifelse } bind def end /FMDOCUMENT { array /FMfonts exch def dup 1 gt {/#copies exch def} {pop} ifelse FrameDict begin 0 ne /manualfeed exch def /paperheight exch def /paperwidth exch def 0 ne /fMNegative exch def 0 ne /edown exch def /yscale exch def /xscale exch def fMLevel1 { manualfeed {setmanualfeed} if /FMdicttop countdictstack 1 add def /FMoptop count def setpapername manualfeed {true} {papersize} ifelse {manualpapersize} {false} ifelse {desperatepapersize} {false} ifelse {papersizefailure} if count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for } {2 dict dup /PageSize [paperwidth paperheight] put manualfeed {dup /ManualFeed manualfeed put} if {setpagedevice} stopped {papersizefailure} if } ifelse fMLevel1 not { /orghalftone currenthalftone def }if FMPColor { currentcolorscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def cvlit /orgbproc exch def /orgbangle exch def /orgbfreq exch def cvlit /orggproc exch def /orggangle exch def /orggfreq exch def cvlit /orgrproc exch def /orgrangle exch def /orgrfreq exch def currentcolortransfer fMNegative { 1 1 4 { pop { 1 exch sub } fmConcatProcs 4 1 roll } for 4 copy setcolortransfer } if cvlit /orgxfer exch def cvlit /orgbxfer exch def cvlit /orggxfer exch def cvlit /orgrxfer exch def } { currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def currenttransfer fMNegative { { 1 exch sub } fmConcatProcs dup settransfer } if cvlit /orgxfer exch def } ifelse end } def /FMENDDOCUMENT { FMDocSave restore } def /FMBEGINPAGE { FrameDict begin /pagesave save def 3.86 setmiterlimit 0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto 0 paperheight lineto 0 0 lineto 1 setgray fill /landscape exch 0 ne def landscape { 90 rotate 0 exch dup /pwid exch def neg translate pop }{ pop /pwid exch def } ifelse edown { [-1 0 0 1 pwid 0] concat } if xscale yscale scale /orgmatrix matrix def gsave } def /FMENDPAGE { grestore pagesave restore end showpage } def /FMFONTDEFINE { FrameDict begin findfont ReEncode 1 index exch definefont FMfonts 3 1 roll put end } def /FMFILLS { FrameDict begin dup array /fillvals exch def dict /patCache exch def end } def /FMFILL { FrameDict begin fillvals 3 1 roll put end } def /FMNORMALIZEGRAPHICS { newpath 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray } bind def /FMBEGINEPSF { end /FMEPSF save def /showpage {} def FMNORMALIZEGRAPHICS [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall fx fw 2 div add fy fh 2 div add translate rotate fw 2 div neg fh 2 div neg translate fw urx llx sub div fh ury lly sub div scale llx neg lly neg translate /FMdicttop countdictstack 1 add def /FMoptop count def } bind def /FMENDEPSF { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMEPSF restore FrameDict begin } bind def FrameDict begin /setmanualfeed { %%BeginFeature: *ManualFeed True statusdict /manualfeed true put %%EndFeature } bind def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /inch {72 mul} def /pagedimen { paperheight sub abs 16 lt exch paperwidth sub abs 16 lt and {/papername exch def} {pop} ifelse } bind def /setpapername { /papersizedict 14 dict def papersizedict begin /papername /unknown def /Letter 8.5 inch 11.0 inch pagedimen /LetterSmall 7.68 inch 10.16 inch pagedimen /Tabloid 11.0 inch 17.0 inch pagedimen /Ledger 17.0 inch 11.0 inch pagedimen /Legal 8.5 inch 14.0 inch pagedimen /Statement 5.5 inch 8.5 inch pagedimen /Executive 7.5 inch 10.0 inch pagedimen /A3 11.69 inch 16.5 inch pagedimen /A4 8.26 inch 11.69 inch pagedimen /A4Small 7.47 inch 10.85 inch pagedimen /B4 10.125 inch 14.33 inch pagedimen /B5 7.16 inch 10.125 inch pagedimen end } bind def /papersize { papersizedict begin /Letter {lettertray letter} def /LetterSmall {lettertray lettersmall} def /Tabloid {11x17tray 11x17} def /Ledger {ledgertray ledger} def /Legal {legaltray legal} def /Statement {statementtray statement} def /Executive {executivetray executive} def /A3 {a3tray a3} def /A4 {a4tray a4} def /A4Small {a4tray a4small} def /B4 {b4tray b4} def /B5 {b5tray b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end statusdict begin stopped end } bind def /manualpapersize { papersizedict begin /Letter {letter} def /LetterSmall {lettersmall} def /Tabloid {11x17} def /Ledger {ledger} def /Legal {legal} def /Statement {statement} def /Executive {executive} def /A3 {a3} def /A4 {a4} def /A4Small {a4small} def /B4 {b4} def /B5 {b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end stopped } bind def /desperatepapersize { mark statusdict begin /setpageparams where { pop paperwidth paperheight 0 1 {setpageparams} stopped } { true } ifelse { /setpagedevice where { pop 1 dict dup begin /PageSize [ paperwidth paperheight ] def end {setpagedevice} stopped } { true } ifelse } { false } ifelse end {cleartomark true}{cleartomark false}ifelse } bind def /papersizefailure { FMAllowPaperSizeMismatch not { (The requested paper size is not available in any currently-installed tray) (Edit the PS file to "FMAllowPaperSizeMismatch true" to use default tray) FMFAILURE } if } def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /ReEncode { dup length dict begin { 1 index /FID ne {def} {pop pop} ifelse } forall 0 eq {/Encoding DiacriticEncoding def} if currentdict end } bind def FMPColor { /BEGINBITMAPCOLOR { BITMAPCOLOR} def /BEGINBITMAPCOLORc { BITMAPCOLORc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def /BEGINBITMAPCMYK { BITMAPCMYK } def /BEGINBITMAPCMYKc { BITMAPCMYKc } def } { /BEGINBITMAPCOLOR { BITMAPGRAY} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def /BEGINBITMAPCMYK { BITMAPCMYKGRAY } def /BEGINBITMAPCMYKc { BITMAPCMYKGRAYc } def } ifelse /K { FMPrintAllColorsAsBlack { 8 1 roll dup 1 eq 2 index 1 eq and 3 index 1 eq and not {7 {pop} repeat 0 0 0 1 0 0 0} if 8 -1 roll } if FrameCurColors astore pop combineColor } bind def /graymode true def fMLevel1 { /fmGetFlip { fMatrix2 exch get mul 0 lt { -1 } { 1 } ifelse } FmBD } if /setPatternMode { fMLevel1 { 2 index patScreenDict exch known { pop pop patScreenDict exch get aload pop freq mul 5 2 roll fMatrix2 currentmatrix 1 get 0 ne { 3 -1 roll 90 add 3 1 roll sflipx 1 fmGetFlip sflipy 2 fmGetFlip neg mul } { sflipx 0 fmGetFlip sflipy 3 fmGetFlip mul } ifelse 0 lt {exch pop} {pop} ifelse fMNegative { {neg} fmConcatProcs } if bind systemdict /setscreen get exec /FrameCurGray exch def } { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/ypoint exch def /xpoint exch def /xindex xpoint 1 add 2 div bpside mul cvi def /yindex ypoint 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne fMNegative {not} if {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen offbits offbits onbits add dup 0 ne {div} {pop pop .5} ifelse fMNegative {1.0 exch sub} if /FrameCurGray exch def } ifelse } { pop pop dup patCache exch known { patCache exch get } { dup patDict /bstring 3 -1 roll put patDict 9 PatFreq screenIndex get div dup matrix scale makepattern dup patCache 4 -1 roll 3 -1 roll put } ifelse /FrameCurGray 0 def /FrameCurPat exch def } ifelse /graymode false def combineColor } bind def /setGrayScaleMode { graymode not { /graymode true def fMLevel1 { setCurrentScreen } if } if /FrameCurGray exch def combineColor } bind def /normalize { transform round exch round exch itransform } bind def /dnormalize { dtransform round exch round exch idtransform } bind def /lnormalize { 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /H { lnormalize setlinewidth } bind def /Z { setlinecap } bind def /PFill { graymode fMLevel1 or not { gsave 1 setgray eofill grestore } if } bind def /PStroke { graymode fMLevel1 or not { gsave 1 setgray stroke grestore } if stroke } bind def /X { fillvals exch get dup type /stringtype eq {8 1 setPatternMode} {setGrayScaleMode} ifelse } bind def /V { PFill gsave eofill grestore } bind def /Vclip { clip } bind def /Vstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /N { PStroke } bind def /Nclip { strokepath clip newpath } bind def /Nstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /R { /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y } bind def /rarc {rad arcto } bind def /RR { /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def mark newpath { x1 y1 rad add moveto x1 y2 x2 y2 rarc x2 y2 x2 y1 rarc x2 y1 x1 y1 rarc x1 y1 x1 y2 rarc closepath } stopped {x1 y1 x2 y2 R} if cleartomark } bind def /RRR { /rad exch def normalize /y4 exch def /x4 exch def normalize /y3 exch def /x3 exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def newpath normalize moveto mark { x2 y2 x3 y3 rarc x3 y3 x4 y4 rarc x4 y4 x1 y1 rarc x1 y1 x2 y2 rarc closepath } stopped {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if cleartomark } bind def /C { grestore gsave R clip setCurrentScreen } bind def /CP { grestore gsave Y clip setCurrentScreen } bind def /F { FMfonts exch get [FMsetsize 0 0 FMpointsize 0 0] makefont setfont } bind def /Q { /FMpointsize exch def /FMsetsize FMpointsize def F } bind def /QQ { /FMsetsize exch def /FMpointsize exch def F } bind def /T { moveto show } bind def /RF { rotate 0 ne {-1 1 scale} if } bind def /TF { gsave moveto RF show grestore } bind def /P { moveto 0 32 3 2 roll widthshow } bind def /PF { gsave moveto RF 0 32 3 2 roll widthshow grestore } bind def /S { moveto 0 exch ashow } bind def /SF { gsave moveto RF 0 exch ashow grestore } bind def /B { moveto 0 32 4 2 roll 0 exch awidthshow } bind def /BF { gsave moveto RF 0 32 4 2 roll 0 exch awidthshow grestore } bind def /G { gsave newpath normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath PFill fill grestore } bind def /Gstrk { savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /Gclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GG { gsave newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath PFill fill grestore } bind def /GGclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GGstrk { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /A { gsave savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 2 copy 0.0 0.0 1.0 5 3 roll arc round cvi 360 mod exch round cvi 360 mod eq {closepath} if restorematrix PStroke grestore } bind def /Aclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /Astrk { Gstrk } bind def /AA { gsave savematrix newpath 3 index 2 div add exch 4 index 2 div sub exch normalize 3 index 2 div sub exch 4 index 2 div add exch translate rotate scale 0.0 0.0 1.0 5 3 roll arc restorematrix PStroke grestore } bind def /AAclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /AAstrk { GGstrk } bind def /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 7 sub def /FMsaveobject save def userdict begin /showpage {} def FMNORMALIZEGRAPHICS 3 index neg 3 index neg translate } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMsaveobject restore } bind def /gn { 0 { 46 mul cf read pop 32 sub dup 46 lt {exit} if 46 sub add } loop add } bind def /cfs { /str sl string def 0 1 sl 1 sub {str exch val put} for str def } bind def /ic [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /ms { /sl exch def /val 255 def /ws cfs /im cfs /val 0 def /bs cfs /cs cfs } bind def 400 ms /ip { is 0 cf cs readline pop { ic exch get exec add } forall pop } bind def /rip { bis ris copy pop is 0 cf cs readline pop { ic exch get exec add } forall pop pop ris gis copy pop dup is exch cf cs readline pop { ic exch get exec add } forall pop pop gis bis copy pop dup add is exch cf cs readline pop { ic exch get exec add } forall pop } bind def /rip4 { kis cis copy pop is 0 cf cs readline pop { ic exch get exec add } forall pop pop cis mis copy pop dup is exch cf cs readline pop { ic exch get exec add } forall pop pop mis yis copy pop dup dup add is exch cf cs readline pop { ic exch get exec add } forall pop pop yis kis copy pop 3 mul is exch cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { /len exch def /pos exch def ws 0 len getinterval im pos len getinterval copy pop pos len } bind def /bl { /len exch def /pos exch def bs 0 len getinterval im pos len getinterval copy pop pos len } bind def /s1 1 string def /fl { /len exch def /pos exch def /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len } bind def /hx { 3 copy getinterval cf exch readhexstring pop pop } bind def /wbytes { dup dup 8 gt { pop 8 idiv mul } { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse } bind def /BEGINBITMAPBWc { 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { 2 {} COMMONBITMAPc } bind def /COMMONBITMAPc { /cvtProc exch def /depth exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def cvtProc /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height depth [width 0 0 height neg 0 height] {ip} image bitmapsave restore grestore } bind def /BEGINBITMAPBW { 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { 2 {} COMMONBITMAP } bind def /COMMONBITMAP { /cvtProc exch def /depth exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def cvtProc /is width depth wbytes string def /cf currentfile def width height depth [width 0 0 height neg 0 height] {cf is readhexstring pop} image bitmapsave restore grestore } bind def /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def fMLevel1 { /colorsetup { currentcolortransfer /gryt exch def /blut exch def /grnt exch def /redt exch def 0 1 255 { /indx exch def /cynu 1 red indx get 255 div sub def /magu 1 green indx get 255 div sub def /yelu 1 blue indx get 255 div sub def /kk cynu magu min yelu min def /u kk currentundercolorremoval exec def % /u 0 def nredt indx 1 0 cynu u sub max sub redt exec put ngreent indx 1 0 magu u sub max sub grnt exec put nbluet indx 1 0 yelu u sub max sub blut exec put ngrayt indx 1 kk currentblackgeneration exec sub gryt exec put } for {255 mul cvi nredt exch get} {255 mul cvi ngreent exch get} {255 mul cvi nbluet exch get} {255 mul cvi ngrayt exch get} setcolortransfer {pop 0} setundercolorremoval {} setblackgeneration } bind def } { /colorSetup2 { [ /Indexed /DeviceRGB 255 {dup red exch get 255 div exch dup green exch get 255 div exch blue exch get 255 div} ] setcolorspace } bind def } ifelse /fakecolorsetup { /tran 256 string def 0 1 255 {/indx exch def tran indx red indx get 77 mul green indx get 151 mul blue indx get 28 mul add add 256 idiv put} for currenttransfer {255 mul cvi tran exch get 255.0 div} exch fmConcatProcs settransfer } bind def /BITMAPCOLOR { /depth 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def fMLevel1 { colorsetup /is width depth wbytes string def /cf currentfile def width height depth [width 0 0 height neg 0 height] {cf is readhexstring pop} {is} {is} true 3 colorimage } { colorSetup2 /is width depth wbytes string def /cf currentfile def 7 dict dup begin /ImageType 1 def /Width width def /Height height def /ImageMatrix [width 0 0 height neg 0 height] def /DataSource {cf is readhexstring pop} bind def /BitsPerComponent depth def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPCOLORc { /depth 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def fMLevel1 { colorsetup /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height depth [width 0 0 height neg 0 height] {ip} {is} {is} true 3 colorimage } { colorSetup2 /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def 7 dict dup begin /ImageType 1 def /Width width def /Height height def /ImageMatrix [width 0 0 height neg 0 height] def /DataSource {ip} bind def /BitsPerComponent depth def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { /depth 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 width getinterval def /gis im width width getinterval def /bis im width 2 mul width getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip pop ris} {gis} {bis} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCMYKc { /depth 32 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /cis im 0 width getinterval def /mis im width width getinterval def /yis im width 2 mul width getinterval def /kis im width 3 mul width getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip4 pop cis} {mis} {yis} {kis} true 4 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def /is width string def /gis width string def /bis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCMYK { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def /is width string def /mis width string def /yis width string def /kis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop } { cf mis readhexstring pop } { cf yis readhexstring pop } { cf kis readhexstring pop } true 4 colorimage bitmapsave restore grestore } bind def /BITMAPTRUEGRAYc { /depth 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 width getinterval def /gis im width width getinterval def /bis im width 2 mul width getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip pop ris gis bis width gray} image bitmapsave restore grestore } bind def /BITMAPCMYKGRAYc { /depth 32 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /cis im 0 width getinterval def /mis im width width getinterval def /yis im width 2 mul width getinterval def /kis im width 3 mul width getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip pop cis mis yis kis width cgray} image bitmapsave restore grestore } bind def /cgray { /ww exch def /k exch def /y exch def /m exch def /c exch def 0 1 ww 1 sub { /i exch def c i get m i get y i get k i get CMYKtoRGB .144 mul 3 1 roll .587 mul 3 1 roll .299 mul add add c i 3 -1 roll floor cvi put } for c } bind def /gray { /ww exch def /b exch def /g exch def /r exch def 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul b i get .114 mul add add r i 3 -1 roll floor cvi put } for r } bind def /BITMAPTRUEGRAY { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def /is width string def /gis width string def /bis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop width gray} image bitmapsave restore grestore } bind def /BITMAPCMYKGRAY { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def /is width string def /yis width string def /mis width string def /kis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop cf mis readhexstring pop cf yis readhexstring pop cf kis readhexstring pop width cgray} image bitmapsave restore grestore } bind def /BITMAPGRAY { 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def /I { setdash } bind def /J { [] 0 setdash } bind def %%EndProlog %%BeginSetup (5.5) FMVERSION 1 1 0 0 612 792 0 1 12 FMDOCUMENT %%IncludeFont: Times-Roman 0 0 /Times-Roman FMFONTDEFINE %%IncludeFont: Times-Bold 1 0 /Times-Bold FMFONTDEFINE %%IncludeFont: Symbol 2 1 /Symbol FMFONTDEFINE %%IncludeFont: Times-Italic 3 0 /Times-Italic FMFONTDEFINE %%IncludeFont: Courier 4 0 /Courier FMFONTDEFINE 32 FMFILLS 0 0 FMFILL 1 0.1 FMFILL 2 0.3 FMFILL 3 0.5 FMFILL 4 0.7 FMFILL 5 0.9 FMFILL 6 0.97 FMFILL 7 1 FMFILL 8 <0f1e3c78f0e1c387> FMFILL 9 <0f87c3e1f0783c1e> FMFILL 10 FMFILL 11 FMFILL 12 <8142241818244281> FMFILL 13 <03060c183060c081> FMFILL 14 <8040201008040201> FMFILL 16 1 FMFILL 17 0.9 FMFILL 18 0.7 FMFILL 19 0.5 FMFILL 20 0.3 FMFILL 21 0.1 FMFILL 22 0.03 FMFILL 23 0 FMFILL 24 FMFILL 25 FMFILL 26 <3333333333333333> FMFILL 27 <0000ffff0000ffff> FMFILL 28 <7ebddbe7e7dbbd7e> FMFILL 29 FMFILL 30 <7fbfdfeff7fbfdfe> FMFILL %%EndSetup %%Page: "1" 1 %%BeginPaperSize: Letter %%EndPaperSize 612 792 0 FMBEGINPAGE 0 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 1 K J 1 1 0 0 0 0 1 1 K 0 12 Q 0 X (CONTENTS) 36 772 T 0 0 0 1 0 0 0 1 K ( |) 98.66 772 T 1 1 0 0 0 0 1 1 K 137.74 770.8 107.06 770.8 2 L 0.6 H 0 Z N (PREV) 107.06 772 T 0 0 0 1 0 0 0 1 K 1 F (Java) 202.68 731.6 T 1 6.4 Q (TM) 226.68 734.8 T 1 12 Q ( Product Versioning Specification) 236.99 731.6 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K 0 F (November 30, 1998) 258.17 703.6 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (Evolution) 72 671.2 T (in) 121.86 671.2 T (open) 133.72 671.2 T (distributed) 159.56 671.2 T (systems) 213.42 671.2 T (needs) 253.94 671.2 T (to) 283.79 671.2 T (be) 295.64 671.2 T (managed) 309.49 671.2 T (carefully) 355.33 671.2 T (because) 400.5 671.2 T (correct) 441 671.2 T (operation) 476.83 671.2 T (de-) 524.67 671.2 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (pends on a number of dependencies between packages. Changes within a distributed system can) 72 659.2 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (have a significant impact on many groups of individuals, including users, support organizations,) 72 647.2 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (web) 72 635.2 T (administrators,) 94.2 635.2 T (and) 168.08 635.2 T (developers.) 187.62 635.2 T (Packages) 244.82 635.2 T (within) 291.68 635.2 T (a) 324.56 635.2 T (distributed) 332.1 635.2 T (system) 385.65 635.2 T (need) 421.2 635.2 T (to) 446.07 635.2 T (operate) 457.61 635.2 T (correctly) 495.14 635.2 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (with) 72 623.2 T (only) 96.16 623.2 T (partial) 120.33 623.2 T (knowledge) 153.81 623.2 T (about) 209.3 623.2 T (the) 238.79 623.2 T (state) 256.28 623.2 T (of) 281.1 623.2 T (the) 293.92 623.2 T (whole) 311.42 623.2 T (system.) 343.57 623.2 T (The) 382.73 623.2 T (difficulty) 404.22 623.2 T (level) 451.71 623.2 T (increases) 477.87 623.2 T (be-) 524.68 623.2 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (cause) 72 611.2 T (the) 101.42 611.2 T (packages) 118.84 611.2 T (of) 165.59 611.2 T (the) 178.35 611.2 T (system) 195.78 611.2 T (must) 231.88 611.2 T (be) 257.98 611.2 T (able) 272.07 611.2 T (to) 294.83 611.2 T (evolve) 306.93 611.2 T (at) 341.68 611.2 T (different) 353.11 611.2 T (rates.) 397.19 611.2 T (Evolution) 425.61 611.2 T (in) 475.71 611.2 T (such) 487.82 611.2 T (a) 512.58 611.2 T (sys-) 520.67 611.2 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (tem is made possible by explicitly managing the dependencies between the packages using) 72 599.2 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (techniques) 72 587.2 T (of) 125.64 587.2 T (object) 137.95 587.2 T (oriented) 169.6 587.2 T (design) 211.24 587.2 T (to) 244.88 587.2 T (govern) 256.54 587.2 T (how) 292.18 587.2 T (individual) 315.16 587.2 T (packages) 366.14 587.2 T (evolve.) 412.44 587.2 T (The) 449.75 587.2 T (Java) 470.72 587.2 T (language) 494.36 587.2 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (defines) 72 575.2 T (packages) 109.1 575.2 T (that) 155.52 575.2 T (are) 175.97 575.2 T (a) 193.07 575.2 T (natural) 200.84 575.2 T (for) 236.6 575.2 T (the) 253.04 575.2 T (consistent) 270.15 575.2 T (unit) 320.59 575.2 T (of) 341.71 575.2 T (update,) 354.15 575.2 T (packages) 391.59 575.2 T (that) 438.01 575.2 T (expose) 458.45 575.2 T (only) 494.22 575.2 T (pub-) 518 575.2 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (lic interfaces and that consume only public interfaces of other classes.) 72 563.2 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K 134.01 531 36 531 2 L 0.9 H N 1 18 Q (Introduction) 36 532.8 T 0 12 Q (In) 72 504.4 T (any) 84.43 504.4 T (system,) 104.19 504.4 T (support) 142.96 504.4 T (must) 181.39 504.4 T (be) 207.16 504.4 T (provided) 220.92 504.4 T (for) 266.02 504.4 T (the) 282.44 504.4 T (system) 299.54 504.4 T (to) 335.3 504.4 T (evolve) 347.07 504.4 T (over) 381.5 504.4 T (time.) 405.25 504.4 T (Most) 432.02 504.4 T (existing) 459.13 504.4 T (systems) 499.56 504.4 T (have) 72 492.4 T (conventions) 97 492.4 T (and) 157.33 492.4 T (mechanisms) 177 492.4 T (that) 238.67 492.4 T (specify) 259.01 492.4 T (how) 296 492.4 T (change) 319.01 492.4 T (is) 355.33 492.4 T (accommodated.) 365.68 492.4 T (These) 443.66 492.4 T (systems) 474.66 492.4 T (have) 515 492.4 T (been based on the model where software programs are installed on a computer. Typically, devel-) 72 480.4 T (opers) 72 468.4 T (specify) 100.4 468.4 T (what) 137.46 468.4 T (versions) 163.2 468.4 T (of) 205.6 468.4 T (other) 218.01 468.4 T (packages) 245.08 468.4 T (are) 291.46 468.4 T (required) 308.52 468.4 T (and) 350.92 468.4 T (the) 370.65 468.4 T (installation) 387.72 468.4 T (process) 443.47 468.4 T (verifies) 481.87 468.4 T (and) 520.26 468.4 T (configures the system.) 72 456.4 T (In) 72 437.2 T (open) 84.45 437.2 T (distributed) 110.23 437.2 T (systems,) 164.02 437.2 T (however,) 207.48 437.2 T (the) 254.25 437.2 T (static) 271.37 437.2 T (assumptions) 299.15 437.2 T (of) 360.95 437.2 T (existing) 373.4 437.2 T (systems) 413.86 437.2 T (do) 454.31 437.2 T (not) 468.77 437.2 T (work.) 486.56 437.2 T (Evo-) 516.67 437.2 T (lution) 72 425.2 T (is) 102.62 425.2 T (more) 113.24 425.2 T (difficult) 140.51 425.2 T (because) 181.78 425.2 T (it) 222.38 425.2 T (is) 231.66 425.2 T (not) 242.27 425.2 T (possible) 260.22 425.2 T (to) 302.17 425.2 T (control) 314.12 425.2 T (how) 350.73 425.2 T (or) 374 425.2 T (when) 386.61 425.2 T (packages) 415.21 425.2 T (change.) 461.8 425.2 T (Correct) 501.4 425.2 T (operation) 72 413.2 T (depends) 119.73 413.2 T (on) 161.46 413.2 T (a) 175.87 413.2 T (greater) 183.6 413.2 T (number) 219.32 413.2 T (of) 258.38 413.2 T (dependencies) 270.79 413.2 T (between) 337.84 413.2 T (packages.) 380.23 413.2 T (There) 429.61 413.2 T (is) 460 413.2 T (a) 470.41 413.2 T (real) 478.15 413.2 T (need) 498.54 413.2 T (for) 523.6 413.2 T (an updated set of conventions and mechanisms which specify how packages of a system should) 72 401.2 T (evolve so that the goal of an open reliable scalable distributed system can be achieved.) 72 389.2 T (This document specifies the following:) 72 370 T 2 F (\267) 48.6 350.8 T 0 F (How) 72 350.8 T (classes,) 97.9 350.8 T (resources,) 136.81 350.8 T (and) 187.7 350.8 T (files) 207.6 350.8 T (that) 230.84 350.8 T (make) 251.42 350.8 T (up) 279.99 350.8 T (a) 294.57 350.8 T (Java) 302.47 350.8 T (package) 326.37 350.8 T (are) 368.26 350.8 T (versioned.) 385.49 350.8 T (Packages) 437.72 350.8 T (define) 484.95 350.8 T (a) 517.52 350.8 T (consistent) 525.42 350.8 T (unit) 72 338.8 T (that) 92.99 338.8 T (can) 113.31 338.8 T (be) 132.28 338.8 T (developed,) 145.92 338.8 T (packaged,) 200.56 338.8 T (verified,) 251.19 338.8 T (updated,) 293.83 338.8 T (and) 337.14 338.8 T (distributed.) 356.78 338.8 T (Per) 413.43 338.8 T (package) 431.74 338.8 T (manifest) 473.37 338.8 T (information) 517.02 338.8 T (identifies the contents of the package.) 72 326.8 T 2 F (\267) 48.6 314.8 T 0 F (Products) 72 314.8 T (are) 116.42 314.8 T (distributed) 133.49 314.8 T (by) 187.25 314.8 T (putting) 201.67 314.8 T (packages) 238.1 314.8 T (into) 284.5 314.8 T (archive) 305.6 314.8 T (files.) 343.33 314.8 T (Archives) 369.42 314.8 T (include) 415.16 314.8 T (a) 452.91 314.8 T (manifest,) 460.66 314.8 T (to) 507.4 314.8 T (identify) 519.16 314.8 T (the) 558.91 314.8 T (product version and packages it contains.) 72 302.8 T 2 F (\267) 48.6 290.8 T 0 F (The standards and conventions used by developers and administrators to build and deploy products that) 72 290.8 T (operate reliably as their packages and the packages they depend on are upgraded.) 72 278.8 T 143.98 246.6 36 246.6 2 L N 1 18 Q (Requirements) 36 248.4 T 0 12 Q (Changes within a distributed system have a significant impact on the following groups:) 72 220 T 2 F (\267) 48.6 200.8 T 1 1 0 0 0 0 1 1 K 121.66 199.6 72 199.6 2 L 0.6 H N 0 F (End Users) 72 200.8 T 0 0 0 1 0 0 0 1 K 2 F (\267) 48.6 188.8 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K 1 1 0 0 0 0 1 1 K 220.66 187.6 72 187.6 2 L N 0 F (Product Support Organizations) 72 188.8 T 0 0 0 1 0 0 0 1 K 2 F (\267) 48.6 176.8 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K 1 1 0 0 0 0 1 1 K 226.64 175.6 72 175.6 2 L N 0 F (Webmasters and Administrators) 72 176.8 T 0 0 0 1 0 0 0 1 K 2 F (\267) 48.6 164.8 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K 1 1 0 0 0 0 1 1 K 166.98 163.6 72 163.6 2 L N 0 F (Product Developers) 72 164.8 T 0 0 0 1 0 0 0 1 K (Each group has different requirements on network-deployed products that evolve over time.) 72 140.8 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K 1 14 Q (End Users) 36 113.07 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K 0 12 Q (End users need to feel confident that Java-based products will become increasingly reliable and) 72 86 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (compatible) 72 74 T (over) 127.67 74 T (time.) 151.33 74 T (Their) 178.01 74 T (reluctance) 206.34 74 T (to) 257.98 74 T (upgrade) 269.66 74 T (must) 310.65 74 T (be) 336.33 74 T (addressed) 350 74 T (by) 399.65 74 T (building) 413.99 74 T (confidence) 456.34 74 T (in) 511.32 74 T (the) 523 74 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K ("Write Once, Run Anywhere" philosophy. With Java, it should no longer be the norm that users) 72 62 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (will) 72 50 T (complain) 93.59 50 T ("If) 141.18 50 T (I) 156.98 50 T (upgrade,) 163.9 50 T (it) 208.47 50 T (will) 218.06 50 T (break) 239.65 50 T (something") 269.23 50 T (or) 327.04 50 T ("I) 339.96 50 T (won\325t) 351.77 50 T (be) 382.69 50 T (able) 396.93 50 T (to) 419.85 50 T (read) 432.1 50 T (or) 455.67 50 T (write) 468.59 50 T (data) 496.17 50 T (that) 519.08 50 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (others can use.") 72 38 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K 2 F (\267) 48.6 18.8 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K 0 F (Users) 72 18.8 T (need) 102.29 18.8 T (to) 127.91 18.8 T (know) 140.22 18.8 T (that) 169.85 18.8 T (upgrading) 190.81 18.8 T (will) 242.44 18.8 T (neither) 264.08 18.8 T (break) 300.37 18.8 T (other) 329.99 18.8 T (programs) 357.61 18.8 T (nor) 405.9 18.8 T (will) 424.87 18.8 T (it) 446.51 18.8 T (obsolete) 456.14 18.8 T (existing) 499.11 18.8 T (data) 540.08 18.8 T (or) 563.04 18.8 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K (produce data unusable by others.) 72 6.8 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K FMENDPAGE %%EndPage: "1" 1 %%Page: "2" 2 612 792 0 FMBEGINPAGE 0 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 1 K 2 12 Q 0 X (\267) 48.6 784 T 0 F (At) 72 784 T (the) 86.5 784 T (simplest) 103.66 784 T (level,) 146.16 784 T (users) 174.99 784 T (want) 202.14 784 T (to) 227.97 784 T (know) 239.8 784 T (if) 268.96 784 T (the) 278.79 784 T (features) 295.95 784 T (they) 336.43 784 T (need) 359.59 784 T (are) 384.74 784 T (in) 401.89 784 T (the) 413.72 784 T (product) 430.88 784 T (version) 470.04 784 T (they) 507.86 784 T (have) 531.02 784 T (and) 556.17 784 T (what version to ask for to get particular features.) 72 772 T 2 F (\267) 48.6 760 T 0 F (More) 72 760 T (knowledgeable) 100.57 760 T (users) 175.79 760 T (keep) 203.03 760 T (track) 228.26 760 T (of) 254.82 760 T (what) 267.39 760 T (bugs) 293.3 760 T (are) 318.54 760 T (associated) 335.77 760 T (with) 387.67 760 T (a) 411.58 760 T (specific) 419.48 760 T (product) 459.38 760 T (version,) 498.61 760 T (so) 539.52 760 T (they) 552.76 760 T (can work around them or avoid them.) 72 748 T 1 14 Q (Product Support Organizations) 36 720.27 T 0 12 Q (Product) 72 693.2 T (support) 111.88 693.2 T (organizations) 150.42 693.2 T (rely) 217.62 693.2 T (on) 238.83 693.2 T (being) 253.38 693.2 T (able) 282.58 693.2 T (to) 305.12 693.2 T (correctly) 317 693.2 T (and) 362.2 693.2 T (easily) 382.07 693.2 T (identify) 412.61 693.2 T (the) 452.49 693.2 T (product) 469.7 693.2 T (that) 508.9 693.2 T (is) 529.45 693.2 T (being used, the environment in which it is being used, and the integrity of the product packaging.) 72 681.2 T 2 F (\267) 48.6 662 T 0 F (Databases of known problems and solutions are indexed by product identification information.) 72 662 T 2 F (\267) 48.6 650 T 0 F (The interoperation of products and packages can introduce new kinds of problems and require all of the) 72 650 T (packages in a system to be identified. Problems can originate from public interfaces that are under-speci-) 72 638 T (fied, from implementations that do not conform to the specification, or from clients that use implementa-) 72 626 T (tion-specific details that are not part of the specification.) 72 614 T 1 14 Q (Webmasters and Administrators) 36 586.27 T 0 12 Q (Webmasters, administrators, and service providers need a reliable and supportable way in which) 72 559.2 T (to deploy applications for their clients via the web or network filesystems.) 72 547.2 T 2 F (\267) 48.6 528 T 0 F (The staff of these organizations must be able to support their sites, identifying problems with specific) 72 528 T (packages and interactions between packages.) 72 516 T 2 F (\267) 48.6 504 T 0 F (Site configuration must be able to support the scaling up of sites with automated site management tools.) 72 504 T 2 F (\267) 48.6 492 T 0 F (Installing updating packages must not present a risk to the correction operation of existing packages or) 72 492 T (active users.) 72 480 T 1 14 Q (Product Developers) 36 452.27 T 0 12 Q (Product) 72 425.2 T (developers) 111.63 425.2 T (need) 165.91 425.2 T (to) 190.86 425.2 T (know) 202.49 425.2 T (how) 231.45 425.2 T (to) 254.41 425.2 T (write) 266.04 425.2 T (and) 293 425.2 T (deploy) 312.62 425.2 T (applications) 347.58 425.2 T (and) 407.87 425.2 T (libraries) 427.5 425.2 T (that) 469.12 425.2 T (satisfy) 489.41 425.2 T (the) 523.04 425.2 T (requirements) 72 413.2 T (of) 137.3 413.2 T (users,) 149.94 413.2 T (administrators,) 180.25 413.2 T (and) 254.56 413.2 T (support) 274.54 413.2 T (personnel.) 313.19 413.2 T (They) 365.49 413.2 T (must) 392.8 413.2 T (be) 418.79 413.2 T (able) 432.76 413.2 T (to) 455.4 413.2 T (make) 467.38 413.2 T (products) 496.02 413.2 T (and packages that can do the following:) 72 401.2 T 2 F (\267) 48.6 382 T 0 F (Operate correctly in the open dynamic environment of the web) 72 382 T 2 F (\267) 48.6 370 T 0 F (Be upgraded without breaking compatibility with clients) 72 370 T 2 F (\267) 48.6 358 T 0 F (Take advantage of upgrades in the packages on which they rely) 72 358 T 2 F (\267) 48.6 346 T 0 F (Take advantage of their packages\325 dynamic extensions) 72 346 T 2 F (\267) 48.6 334 T 0 F (Identify the packages they rely on for reporting of problems) 72 334 T 2 F (\267) 48.6 322 T 0 F (Be packaged to support the needs of users, webmasters, and support organizations) 72 322 T 2 F (\267) 48.6 310 T 0 F (Have known packages and combinations that satisfy the auditing and security requirements appropriate) 72 310 T (for the application and organization) 72 298 T 386.51 265.8 36 265.8 2 L 0.9 H 0 Z N 1 18 Q (Problems of Evolution in Distributed Systems) 36 267.6 T 0 12 Q (Problems) 72 239.2 T (can) 119.7 239.2 T (occur) 138.72 239.2 T (in) 167.74 239.2 T (open) 179.44 239.2 T (distributed) 205.13 239.2 T (systems) 258.83 239.2 T (when) 299.2 239.2 T (packages) 327.55 239.2 T (evolve) 373.9 239.2 T (and) 408.25 239.2 T (are) 427.94 239.2 T (frequently) 444.96 239.2 T (updated.) 496.64 239.2 T (If) 72 227.2 T (the) 82.92 227.2 T (specified) 100.51 227.2 T (behavior) 146.76 227.2 T (inherent) 191.67 227.2 T (in) 233.92 227.2 T (the) 246.18 227.2 T (use) 263.77 227.2 T (of) 282.7 227.2 T (public) 295.62 227.2 T (interfaces) 328.55 227.2 T (is) 378.12 227.2 T (not) 389.05 227.2 T (maintained,) 407.31 227.2 T (the) 466.56 227.2 T (system) 484.15 227.2 T (can) 520.42 227.2 T (fail) 72 215.2 T (in) 90.5 215.2 T (unexpected) 102.35 215.2 T (ways.) 159.5 215.2 T (Open) 189.67 215.2 T (systems) 218.17 215.2 T (are) 258.68 215.2 T (comprised) 275.84 215.2 T (of) 328.34 215.2 T (many) 340.85 215.2 T (packages) 370.02 215.2 T (from) 416.51 215.2 T (different) 442.34 215.2 T (companies) 486.17 215.2 T (and organizations. These organizations operate asynchronously, introducing and upgrading their) 72 203.2 T (products) 72 191.2 T (according) 115.87 191.2 T (to) 165.73 191.2 T (their) 177.61 191.2 T (own) 202.15 191.2 T (schedules.) 225.36 191.2 T (Distribution) 277.56 191.2 T (of) 338.11 191.2 T (upgraded) 350.65 191.2 T (products) 397.85 191.2 T (takes) 441.72 191.2 T (time) 468.92 191.2 T (and) 492.8 191.2 T (adop-) 512.68 191.2 T (tion is not universal.) 72 179.2 T (In) 72 160 T (Java,) 84.4 160 T (the) 111.12 160 T (components) 128.19 160 T (of) 188.58 160 T (local) 200.98 160 T (and) 226.71 160 T (distributed) 246.44 160 T (systems) 300.17 160 T (rely) 340.58 160 T (on) 361.64 160 T (the) 376.04 160 T (public) 393.11 160 T (interfaces) 425.51 160 T (and) 474.55 160 T (contracts) 494.28 160 T (for) 72 148 T (the) 88.71 148 T (behavior) 106.09 148 T (of) 150.79 148 T (other) 163.5 148 T (packages.) 190.88 148 T (Those) 240.57 148 T (packages) 272.62 148 T (will) 319.31 148 T (themselves) 340.7 148 T (evolve) 396.74 148 T (over) 431.45 148 T (time.) 455.49 148 T (In) 482.55 148 T (order) 495.26 148 T (for) 523.29 148 T (a) 72 136 T (package) 80.02 136 T (to) 122.03 136 T (operate) 134.06 136 T (correctly,) 172.08 136 T (packages) 220.42 136 T (that) 267.1 136 T (it) 287.79 136 T (depends) 297.16 136 T (upon) 339.18 136 T (must) 365.88 136 T (continue) 391.91 136 T (to) 435.94 136 T (provide) 447.97 136 T (the) 487.32 136 T (expect-) 504.68 136 T (ed behavior even if those packages have been updated.) 72 124 T (Only) 72 104.8 T (partial) 98.16 104.8 T (consistency) 130.97 104.8 T (is) 189.12 104.8 T (possible) 199.28 104.8 T (in) 240.77 104.8 T (distributed) 252.26 104.8 T (systems,) 305.76 104.8 T (since) 348.92 104.8 T (it) 375.73 104.8 T (is) 384.56 104.8 T (impossible) 394.72 104.8 T (to) 448.88 104.8 T (have) 460.38 104.8 T (knowledge) 485.19 104.8 T (of the entire state of the system. Each process and each package of the system has its own partial) 72 92.8 T (view) 72 80.8 T (of) 97.79 80.8 T (the) 110.24 80.8 T (current) 127.36 80.8 T (state) 163.8 80.8 T (of) 188.26 80.8 T (the) 200.71 80.8 T (system,) 217.84 80.8 T (accumulated) 256.63 80.8 T (incrementally) 319.74 80.8 T (by) 388.18 80.8 T (requesting) 402.64 80.8 T (information) 455.09 80.8 T (from) 514.21 80.8 T (other parts of the distributed system. Each piece of information, whether from an applet that was) 72 68.8 T (started,) 72 56.8 T (a) 109.52 56.8 T (class) 117.37 56.8 T (that) 143.22 56.8 T (was) 163.75 56.8 T (loaded,) 184.93 56.8 T (a) 222.45 56.8 T (remote) 230.3 56.8 T (method) 266.15 56.8 T (invoked,) 304.67 56.8 T (or) 348.86 56.8 T (a) 361.38 56.8 T (web) 369.24 56.8 T (page) 391.75 56.8 T (retrieved,) 416.93 56.8 T (must) 465.11 56.8 T (be) 490.97 56.8 T (treated) 504.82 56.8 T (carefully so that it can be used consistently with the rest of that partial view.) 72 44.8 T (Several) 72 25.6 T (types) 110.66 25.6 T (of) 138.67 25.6 T (errors) 151.34 25.6 T (can) 182 25.6 T (result) 201.33 25.6 T (from) 230.67 25.6 T (inconsistencies) 256.67 25.6 T (in) 332 25.6 T (the) 344.01 25.6 T (classes) 361.35 25.6 T (that) 397.35 25.6 T (are) 418.02 25.6 T (loaded:) 435.35 25.6 T (class) 473.35 25.6 T (verifica-) 499.36 25.6 T (tion errors, classes compute incorrectly but without recognizable errors, or user requested func-) 72 13.6 T FMENDPAGE %%EndPage: "2" 2 %%Page: "3" 3 612 792 0 FMBEGINPAGE 0 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 1 K 0 12 Q 0 X (tions that exhibit arbitrary failures.) 72 784 T (These problems can occur in the following typical scenarios:) 72 764.8 T 2 F (\267) 48.6 745.6 T 0 F (A) 72 745.6 T (running) 83.12 745.6 T (applet) 122.9 745.6 T (has) 154.69 745.6 T (loaded) 173.14 745.6 T (only) 207.59 745.6 T (some) 231.38 745.6 T (of) 259.16 745.6 T (its) 271.61 745.6 T (classes) 285.41 745.6 T (when) 321.19 745.6 T (the) 349.63 745.6 T (web) 366.75 745.6 T (server) 389.2 745.6 T (is) 420.97 745.6 T (updated) 431.43 745.6 T (with) 471.87 745.6 T (a) 495.66 745.6 T (newer) 503.45 745.6 T (version.) 535.22 745.6 T (When) 72 733.6 T (the) 103.39 733.6 T (applet) 120.79 733.6 T (incrementally) 152.86 733.6 T (loads) 221.59 733.6 T (additional) 249.66 733.6 T (classes,) 300.39 733.6 T (these) 339.45 733.6 T (classes) 366.85 733.6 T (could) 402.91 733.6 T (be) 432.32 733.6 T (inconsistent) 446.38 733.6 T (with) 506.45 733.6 T (ones) 530.53 733.6 T (that) 555.26 733.6 T (have already been loaded.) 72 721.6 T 2 F (\267) 48.6 709.6 T 0 F (An) 72 709.6 T (application) 89.65 709.6 T (using) 145.96 709.6 T (libraries) 174.95 709.6 T (from) 217.26 709.6 T (multiple) 243.57 709.6 T (websites) 286.56 709.6 T (has) 330.88 709.6 T (loaded) 349.86 709.6 T (only) 384.83 709.6 T (some) 409.15 709.6 T (of) 437.47 709.6 T (the) 450.45 709.6 T (classes) 468.1 709.6 T (it) 504.41 709.6 T (needs.) 514.07 709.6 T (If) 547.37 709.6 T (the) 558.35 709.6 T (libraries) 72 697.6 T (are) 114.05 697.6 T (updated,) 131.43 697.6 T (there) 175.15 697.6 T (is) 201.87 697.6 T (a) 212.6 697.6 T (potential) 220.65 697.6 T (for) 265.38 697.6 T (incompatibilities) 282.1 697.6 T (that) 365.5 697.6 T (either) 386.23 697.6 T (the) 416.28 697.6 T (applet) 433.67 697.6 T (or) 465.73 697.6 T (the) 478.45 697.6 T (user) 495.84 697.6 T (needs) 518.56 697.6 T (to) 548.61 697.6 T (de-) 560.68 697.6 T (tect.) 72 685.6 T 2 F (\267) 48.6 673.6 T 0 F (A) 72 673.6 T (running) 83.37 673.6 T (application) 123.41 673.6 T (or) 179.44 673.6 T (applet) 192.15 673.6 T (makes) 224.18 673.6 T (an) 257.55 673.6 T (RMI) 271.58 673.6 T (call) 296.95 673.6 T (that) 316.99 673.6 T (returns) 337.7 673.6 T (an) 373.73 673.6 T (object) 387.76 673.6 T (which) 419.79 673.6 T (the) 451.83 673.6 T (class) 469.2 673.6 T (needs) 495.23 673.6 T (to) 525.26 673.6 T (be) 537.3 673.6 T (load-) 551.34 673.6 T (ed. The class that is loaded could be inconsistent with other already loaded classes.) 72 661.6 T 2 F (\267) 48.6 649.6 T 0 F (A) 72 649.6 T (running) 83.4 649.6 T (application) 123.47 649.6 T (or) 179.53 649.6 T (applet) 192.26 649.6 T (makes) 224.32 649.6 T (a) 257.72 649.6 T (RMI) 265.78 649.6 T (call) 291.19 649.6 T (that) 311.25 649.6 T (returns) 331.99 649.6 T (an) 368.05 649.6 T (object) 382.11 649.6 T (that) 414.17 649.6 T (is) 434.91 649.6 T (for) 445.65 649.6 T (a) 462.37 649.6 T (newer) 470.44 649.6 T (or) 502.49 649.6 T (an) 515.22 649.6 T (older) 529.28 649.6 T (ver-) 556.68 649.6 T (sion of the class.) 72 637.6 T 2 F (\267) 48.6 625.6 T 0 F (Bugs exist in a library. If the clients have worked around the bug, a cascade of problems could be intro-) 72 625.6 T (duced when the bug is fixed.) 72 613.6 T (These problems cannot be prevented or solved directly because they arise out of inconsistencies) 72 589.6 T (between) 72 577.6 T (dynamically) 114.61 577.6 T (loaded) 176.56 577.6 T (packages) 211.18 577.6 T (that) 257.79 577.6 T (are) 278.41 577.6 T (not) 295.69 577.6 T (under) 313.65 577.6 T (the) 343.6 577.6 T (control) 360.89 577.6 T (of) 397.51 577.6 T (a) 410.13 577.6 T (single) 418.08 577.6 T (system) 449.38 577.6 T (administra-) 485.34 577.6 T (tor and so cannot be addressed by current configuration management techniques.) 72 565.6 T 195.01 533.4 36 533.4 2 L 0.9 H 0 Z N 1 18 Q (Design for Evolution) 36 535.2 T 0 12 Q (The key to dealing with these problems and meeting the requirements stated above is the careful) 72 506.8 T (design) 72 494.8 T (of) 106.24 494.8 T (the) 119.14 494.8 T (packages) 136.71 494.8 T (and) 183.6 494.8 T (packaging) 203.83 494.8 T (of) 256.06 494.8 T (the) 268.96 494.8 T (system) 286.53 494.8 T (so) 322.77 494.8 T (that) 336.35 494.8 T (they) 357.25 494.8 T (may) 380.82 494.8 T (be) 404.39 494.8 T (updated,) 418.62 494.8 T (distributed,) 462.52 494.8 T (and) 519.77 494.8 T (loaded) 72 482.8 T (in) 106.6 482.8 T (consistent) 118.54 482.8 T (units.) 169.15 482.8 T (Typical) 198.1 482.8 T (to) 237.37 482.8 T (mass) 249.31 482.8 T (produced) 275.92 482.8 T (products) 323.18 482.8 T (is) 367.11 482.8 T (the) 377.73 482.8 T (notion) 395 482.8 T (of) 428.28 482.8 T (the) 440.88 482.8 T (field) 458.15 482.8 T (replaceable) 482.76 482.8 T (unit. It is the smallest unit of a product that can be identified with a specification, a supplier, can) 72 470.8 T (be) 72 458.8 T (distributed) 85.61 458.8 T (and) 139.22 458.8 T (redistributed,) 158.83 458.8 T (and) 224.77 458.8 T (can) 244.38 458.8 T (be) 263.32 458.8 T (replaced) 276.92 458.8 T (if) 319.85 458.8 T (faulty.) 329.46 458.8 T (This) 362.74 458.8 T (same) 386.35 458.8 T (model) 413.29 458.8 T (is) 445.57 458.8 T (used) 455.86 458.8 T (for) 480.13 458.8 T (software) 496.4 458.8 T (distribution,) 72 446.8 T (products) 132.75 446.8 T (have) 176.49 446.8 T (a) 201.55 446.8 T (name,) 209.28 446.8 T (a) 240.68 446.8 T (version) 248.41 446.8 T (number,) 286.15 446.8 T (adhere) 328.21 446.8 T (to) 362.6 446.8 T (one) 374.34 446.8 T (or) 394.08 446.8 T (more) 406.48 446.8 T (specifications,) 433.55 446.8 T (are) 504.94 446.8 T (dis-) 522 446.8 T (tributed on the network or CD-ROM and its problems can be reported to support organizations.) 72 434.8 T (These packages are the smallest unit that can be distributed, used, validated and replaced or up-) 72 422.8 T (graded) 72 410.8 T (when) 106.91 410.8 T (necessary.) 135.15 410.8 T (Packages) 187.05 410.8 T (can) 233.96 410.8 T (be) 252.87 410.8 T (assembled) 266.45 410.8 T (with) 318.7 410.8 T (other) 342.29 410.8 T (packages) 369.2 410.8 T (and) 415.44 410.8 T (each) 435.02 410.8 T (package) 459.26 410.8 T (can) 500.82 410.8 T (still) 519.73 410.8 T (be identified, verified, and distributed.) 72 398.8 T (The Java language-based package mechanism fits well with the idea of a replaceable unit. Java) 72 379.6 T (packages expose only public interfaces and use only the public interfaces of other packages. The) 72 367.6 T (Java) 72 355.6 T 0 8 Q (TM) 93.32 355.6 T 0 12 Q ( Language Specification defines the approaches for compatible evolution of packages.) 105.32 355.6 T 1 14 Q (Java Language Specification on Backwards Compatibility) 36 327.87 T 0 12 Q (The) 72 300.8 T (Java) 93.13 300.8 T (Language) 116.93 300.8 T (Specification) 166.71 300.8 T (lays) 232.51 300.8 T (the) 254.31 300.8 T (groundwork) 271.45 300.8 T (for) 332.57 300.8 T (developing) 349.04 300.8 T (packages) 404.84 300.8 T (that) 451.29 300.8 T (can) 471.76 300.8 T (be) 490.89 300.8 T (expect-) 504.68 300.8 T (ed) 72 288.8 T (to) 85.94 288.8 T (evolve) 97.89 288.8 T (gracefully) 132.49 288.8 T (over) 183.75 288.8 T (time.) 207.68 288.8 T (It) 234.63 288.8 T (defines) 244.58 288.8 T (how) 281.84 288.8 T (classes) 305.12 288.8 T (can) 341.05 288.8 T (change) 360.32 288.8 T (and) 396.92 288.8 T (still) 416.86 288.8 T (be) 437.48 288.8 T (backward) 451.42 288.8 T (compat-) 500.68 288.8 T (ible with other classes previously compiled and distributed. Essential to robust evolution is the) 72 276.8 T (stability of the public, protected, and package interfaces and behavior as the implementations) 72 264.8 T (evolve.) 72 252.8 T (It) 109.42 252.8 T (defines) 119.18 252.8 T ("compatible") 156.26 252.8 T (changes) 221.81 252.8 T (as) 262.89 252.8 T ("those) 275.31 252.8 T (changes) 307.97 252.8 T (that) 349.05 252.8 T (do) 369.47 252.8 T (not) 383.9 252.8 T (change) 401.66 252.8 T (existing) 438.07 252.8 T (interfaces) 478.51 252.8 T (or) 527.58 252.8 T (behavior." Thus, if a class defines a method, and the method had a particular behavior, that same) 72 240.8 T (contract) 72 228.8 T (must) 113.15 228.8 T (be) 138.98 228.8 T (supported) 152.8 228.8 T (by) 202.63 228.8 T (the) 217.12 228.8 T (all) 234.28 228.8 T (later) 248.77 228.8 T (evolutions) 272.59 228.8 T (of) 325.09 228.8 T (the) 337.58 228.8 T (class.) 354.74 228.8 T (Detailed) 383.56 228.8 T (rules) 426.71 228.8 T (are) 452.54 228.8 T (given) 469.68 228.8 T (in) 498.84 228.8 T 1 1 0 0 0 0 1 1 K (Chap-) 510.67 228.8 T 0 0 0 1 0 0 0 1 K 1 1 0 0 0 0 1 1 K (ter) 72 216.8 T (13) 87.26 216.8 T 0 0 0 1 0 0 0 1 K (of) 101.86 216.8 T (the) 114.46 216.8 T (Java) 131.73 216.8 T 0 8 Q (TM) 153.05 216.8 T 0 12 Q (Language) 167.65 216.8 T (Specification.) 217.57 216.8 T (One) 286.5 216.8 T (additional) 309.09 216.8 T (incompatible) 359.7 216.8 T (change) 424.96 216.8 T (has) 461.55 216.8 T (been) 480.15 216.8 T (added:) 505.4 216.8 T (it is incompatible to add methods to a public interface.) 72 204.8 T (Although) 72 185.6 T (incompatible) 120.03 185.6 T (changes) 185.4 185.6 T (are) 226.75 185.6 T (not) 244.1 185.6 T (permitted,) 262.13 185.6 T (new) 313.83 185.6 T (or) 336.52 185.6 T (similar) 349.21 185.6 T (functionality) 385.24 185.6 T (can) 449.27 185.6 T (always) 468.63 185.6 T (be) 504.65 185.6 T (add-) 518.68 185.6 T (ed in new or existing interfaces or classes.) 72 173.6 T (By) 72 154.4 T (choosing) 88.43 154.4 T (the) 134.2 154.4 T (Java) 151.29 154.4 T (package) 175.05 154.4 T (as) 216.79 154.4 T (the) 229.22 154.4 T (unit) 246.32 154.4 T (of) 267.42 154.4 T (update,) 279.85 154.4 T (the) 317.27 154.4 T (package) 334.36 154.4 T (and) 376.11 154.4 T (private) 395.87 154.4 T (methods) 431.62 154.4 T (of) 474.72 154.4 T (the) 487.15 154.4 T (classes) 504.24 154.4 T (can) 72 142.4 T (change,) 91.13 142.4 T (thereby) 130.58 142.4 T (allowing) 169.04 142.4 T (flexibility) 213.51 142.4 T (in) 263.32 142.4 T (the) 275.13 142.4 T (implementation) 292.27 142.4 T (of) 370.07 142.4 T (the) 382.54 142.4 T (package) 399.68 142.4 T (while) 441.46 142.4 T (the) 470.59 142.4 T (public) 487.73 142.4 T (and) 520.2 142.4 T (protected classes and methods maintain the external interfaces and semantics.) 72 130.4 T 1 14 Q (Object Serialization Specification on Backwards Compatibility) 36 102.67 T 0 12 Q (Robust persistent storage and robust communication between the components is important to dis-) 72 75.6 T (tributed systems. Components must be able to maintain persistent storage as they evolve, being) 72 63.6 T (able) 72 51.6 T (to) 94.76 51.6 T (evolve) 106.87 51.6 T (classes) 141.63 51.6 T (and) 177.72 51.6 T (yet) 197.82 51.6 T (have) 215.25 51.6 T (them) 240.68 51.6 T (read) 267.45 51.6 T (data) 290.87 51.6 T (previously) 313.63 51.6 T (written) 367.06 51.6 T (to) 403.83 51.6 T (storage.) 415.93 51.6 T (Components) 456.36 51.6 T (in) 519.8 51.6 T (a) 531.9 51.6 T (distributed system evolve at different rates and must still be able to communicate reliably.) 72 39.6 T (Adhering) 72 20.4 T (to) 119.74 20.4 T (the) 131.49 20.4 T (compatibility) 148.57 20.4 T (requirements) 214.99 20.4 T (of) 280.06 20.4 T (object) 292.47 20.4 T (serialization) 324.22 20.4 T (allows) 385.29 20.4 T (newer) 419.04 20.4 T (and) 450.77 20.4 T (older) 470.51 20.4 T (versions) 497.59 20.4 T (to) 72 8.4 T (communicate) 83.87 8.4 T (in) 151.06 8.4 T (a) 162.93 8.4 T (predictable) 170.79 8.4 T (and) 226.65 8.4 T (consistent) 246.51 8.4 T (way.) 297.04 8.4 T (The) 322.57 8.4 T (details) 343.77 8.4 T (are) 377.63 8.4 T (in) 394.82 8.4 T 1 1 0 0 0 0 1 1 K (Chapter) 406.69 8.4 T (5) 447.22 8.4 T 0 0 0 1 0 0 0 1 K (of) 455.75 8.4 T (the) 468.28 8.4 T (Java) 485.48 8.4 T 0 8 Q (TM) 506.8 8.4 T 0 12 Q (Ob-) 521.34 8.4 T FMENDPAGE %%EndPage: "3" 3 %%Page: "4" 4 612 792 0 FMBEGINPAGE 0 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 1 K 0 12 Q 0 X (ject Serialization Specification.) 72 784 T 267.98 751.8 36 751.8 2 L 0.9 H 0 Z N 1 18 Q (Package Version Specification) 36 753.6 T 0 12 Q (There are several categories of artifacts that need to be identified including specifications, imple-) 72 725.2 T (mentation, the Java Virtual Machine and Java Runtime Environment.) 72 713.2 T 1 14 Q (Specification Versioning) 36 685.47 T 0 12 Q (Open) 72 658.4 T (systems) 100.64 658.4 T (are) 141.29 658.4 T (based) 158.59 658.4 T (on) 188.56 658.4 T (the) 203.21 658.4 T (idea) 220.52 658.4 T (that) 243.16 658.4 T (a) 263.81 658.4 T (specification) 271.79 658.4 T (may) 335.75 658.4 T (have) 359.06 658.4 T (multiple) 384.37 658.4 T (implementations.) 427.02 658.4 T (Spec-) 512.68 658.4 T (ifications evolve under the auspices of an organization or company. It is highly undesirable if a) 72 646.4 T (specification has multiple incompatible versions. Each version of a specification or implementa-) 72 634.4 T (tion) 72 622.4 T (must) 93.27 622.4 T (evolve) 119.21 622.4 T (only) 153.79 622.4 T (into) 177.73 622.4 T (a) 199 622.4 T (single) 206.92 622.4 T (subsequent) 238.19 622.4 T (version.) 294.11 622.4 T (The) 335.04 622.4 T (philosophy) 356.3 622.4 T (of) 412.23 622.4 T (requiring) 424.83 622.4 T (specifications) 471.41 622.4 T (to) 72 610.4 T (be) 84.06 610.4 T (backward) 98.11 610.4 T (compatible) 147.47 610.4 T (allows) 203.52 610.4 T (specifications) 237.57 610.4 T (to) 306.28 610.4 T (be) 318.34 610.4 T (identified) 332.38 610.4 T (as) 381.1 610.4 T (supersets) 393.82 610.4 T (of) 440.53 610.4 T (the) 453.25 610.4 T (previous) 470.63 610.4 T (spec-) 514.68 610.4 T (ification.) 72 598.4 T (Since) 117.84 598.4 T (there) 147.34 598.4 T (is) 174.17 598.4 T (a) 185.01 598.4 T (single) 193.18 598.4 T (sequence) 224.69 598.4 T (of) 271.51 598.4 T (version) 284.34 598.4 T (specifications) 322.51 598.4 T (they) 391.34 598.4 T (can) 414.84 598.4 T (meaningfully) 434.34 598.4 T (be) 501.17 598.4 T (iden-) 515.34 598.4 T (tified by version numbers with specific semantics that imply the ordering. Specification version) 72 586.4 T (numbers use a Dewey decimal notation consisting of numbers separated by periods.) 72 574.4 T (A specification is identified by the:) 72 555.2 T 2 F (\267) 48.6 536 T 0 F (Owner of the specification) 72 536 T 2 F (\267) 48.6 524 T 0 F (Name of the Specification) 72 524 T 2 F (\267) 48.6 512 T 0 F (Version number -) 72 512 T 3 F (major) 159.65 512 T 0 F (.) 188.32 512 T 3 F (minor) 191.32 512 T 0 F (.) 219.98 512 T 3 F (micro) 222.98 512 T (Major) 72 488 T 0 F (version numbers identify significant functional changes.) 105 488 T 3 F (Minor) 72 476 T 0 F (version numbers identify smaller extensions to the functionality.) 105 476 T 3 F (Micro) 72 464 T 0 F ( versions are even finer grained versions.) 101.33 464 T (These version numbers are ordered with larger numbers specifying additions to the specification.) 72 440 T 1 14 Q (Virtual Machine Versioning) 36 412.27 T 0 12 Q (An implementation of the Java Virtual Machine should be identify both the specification and the) 72 385.2 T (implementation. These properties should be added to those already available using) 72 373.2 T 4 F (ja-) 471.28 373.2 T (va.lang.System.getProperties) 72 361.2 T 0 F (.) 273.6 361.2 T (These properties are accessed using the method) 36 186 T 4 F (java.lang.System.getProperty) 266.94 186 T 0 F ( and each returns a) 468.54 186 T (string.) 36 174 T 1 14 Q (Version Identification of the Java Runtime) 36 146.27 T 0 12 Q (The) 72 119.2 T (requirement) 92.89 119.2 T (to) 153.1 119.2 T (identify) 164.66 119.2 T (the) 204.22 119.2 T (Java) 221.11 119.2 T 0 8 Q (TM) 242.44 119.2 T 0 12 Q (Runtime) 256.66 119.2 T (is) 300.23 119.2 T (already) 310.46 119.2 T (partially) 348.01 119.2 T (met) 390.23 119.2 T (via) 410.45 119.2 T (the) 427.35 119.2 T (properties) 444.24 119.2 T (specified) 494.45 119.2 T (by the Java) 72 107.2 T 0 8 Q (TM) 125.99 107.2 T 0 12 Q ( Language Specification, \24420.18.7 using) 137.99 107.2 T 4 F (java.lang.System.getProper-) 331.63 107.2 T (ties) 72 95.2 T 0 F (.) 100.8 95.2 T (Currently these identify the implementation of the Java) 36 16 T 0 6.4 Q (TM) 300.97 19.2 T 0 12 Q ( runtime and the core classes that are available. These) 310.57 16 T (properties do not identify the) 36 4 T 3 F (Java) 178.32 4 T 3 6.4 Q (TM) 200.98 7.2 T 3 12 Q ( Language Specification) 209.87 4 T 0 F ( version that this JDK) 326.53 4 T 0 6.4 Q (TM) 431.19 7.2 T 0 12 Q ( implements.) 440.79 4 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K ( java.vm.specification.version) 42 324 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (i.e. 1.2) 312.43 324 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K ( java.vm.specification.vendor) 42 300 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (i.e. Sun Microsystems Inc.) 312.43 300 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K ( java.vm.specification.name) 42 276 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (i.e. Java) 312.43 276 T 0 6.4 Q (TM) 351.42 279.2 T 0 12 Q ( Virtual Machine Specification) 361.02 276 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K ( java.vm.version) 42 252 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (i.e. Solaris 5.5 Native 1.0 build32) 312.43 252 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K ( java.vm.vendor) 42 228 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (i.e. Sun Microsystems Inc.) 312.43 228 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K ( java.vm.name) 42 204 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (i.e. Solaris 5.x JVM) 312.43 204 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K ( java.version) 42 58 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (i.e. Solaris 1.2) 313.58 58 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K ( java.vendor) 42 34 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (i.e. Sun Microsystems Inc.) 313.58 34 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K FMENDPAGE %%EndPage: "4" 4 %%Page: "5" 5 612 792 0 FMBEGINPAGE 0 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 1 K 0 12 Q 0 X (The following additional properties are needed to identify the version of the Java) 36 784 T 0 6.4 Q (TM) 424.6 787.2 T 0 12 Q ( Runtime Environment speci-) 434.2 784 T (fication to which this implementation adheres:) 36 772 T (These properties are accessed using the method) 36 668.8 T 4 F ( and return their values as strings.) 266.94 668.8 T 1 14 Q (Package Versioning) 36 641.07 T 0 12 Q (Each) 72 614 T (Java) 98.64 614 T 0 8 Q (TM) 119.96 614 T 0 12 Q (package) 134.61 614 T (consists) 176.58 614 T (of) 217.23 614 T (class) 229.88 614 T (files) 255.86 614 T (and) 279.17 614 T (optional) 299.15 614 T (resource) 341.14 614 T (files.) 384.44 614 T (The) 410.75 614 T (information) 432.06 614 T (needed) 491.38 614 T (to) 528.01 614 T (identify the contents of the package is stored with the package contents.) 72 602 T (This) 72 582.8 T (specification) 95.9 582.8 T (applies) 159.79 582.8 T (to) 196.35 582.8 T (all) 208.25 582.8 T (packages,) 222.81 582.8 T (regardless) 272.36 582.8 T (of) 323.57 582.8 T (whether) 336.13 582.8 T (they) 377.35 582.8 T (are) 400.58 582.8 T (developed) 417.79 582.8 T (as) 469.68 582.8 T (a) 482.24 582.8 T (core) 490.13 582.8 T (pack-) 513.35 582.8 T (age distributed with a Java) 72 570.8 T 0 8 Q (TM) 199.98 570.8 T 0 12 Q ( Runtime, a standard extension, an applet or application package.) 211.98 570.8 T (Unlike version numbers for specifications, version information for implementations cannot be) 72 551.6 T (used) 72 539.6 T (to) 96.74 539.6 T (identify) 108.82 539.6 T (the) 148.9 539.6 T (package) 166.31 539.6 T (as) 208.37 539.6 T (being) 221.11 539.6 T (backward) 250.52 539.6 T (compatible) 299.91 539.6 T (with) 355.98 539.6 T (earlier) 380.06 539.6 T (versions.) 413.45 539.6 T (Package) 459.2 539.6 T (version) 501.93 539.6 T (numbers) 72 527.6 T (are) 116.13 527.6 T (present) 133.59 527.6 T (to) 171.04 527.6 T (identify) 183.18 527.6 T (differences) 223.32 527.6 T (between) 279.42 527.6 T (the) 322.21 527.6 T (specification) 339.68 527.6 T (and) 403.8 527.6 T (the) 423.93 527.6 T (implementation,) 441.39 527.6 T (i.e.) 522.53 527.6 T (bugs.) 72 515.6 T (New) 100.32 515.6 T (versions) 125.62 515.6 T (of) 168.26 515.6 T (implementations) 180.9 515.6 T (are) 263.55 515.6 T (specifically) 280.85 515.6 T (produced) 338.82 515.6 T (to) 386.12 515.6 T (remove) 398.1 515.6 T (\050undesirable) 436.74 515.6 T (or) 498.7 515.6 T (incor-) 511.34 515.6 T (rect\051 behavior and thus are intended not to be backward compatible. Therefore, package version) 72 503.6 T (strings) 72 491.6 T (can) 106.74 491.6 T (have) 126.13 491.6 T (any) 151.52 491.6 T (unique) 171.59 491.6 T (value) 206.99 491.6 T (and) 235.72 491.6 T (can) 255.78 491.6 T (only) 275.17 491.6 T (be) 299.24 491.6 T (compared) 313.31 491.6 T (for) 363.36 491.6 T (equality.) 380.09 491.6 T (For) 424.49 491.6 T (a) 443.89 491.6 T (complete) 451.96 491.6 T (explana-) 498.68 491.6 T (tion of this rationale, see) 72 479.6 T 1 1 0 0 0 0 1 1 K (Rationale for Limiting Implementation Version Numbers to Identity) 193.32 479.6 T 0 0 0 1 0 0 0 1 K (.) 520.97 479.6 T (The following attribute names are defined for a package. The value of each attribute is a string:) 72 460.4 T (These) 72 261.2 T (attributes) 102.69 261.2 T (are) 149.38 261.2 T (stored) 166.06 261.2 T (in) 197.42 261.2 T (the) 208.79 261.2 T (manifest) 225.48 261.2 T (and) 268.84 261.2 T (retrieved) 288.2 261.2 T (by) 332.87 261.2 T (programs) 346.9 261.2 T (using) 394.26 261.2 T (the) 422.29 261.2 T 4 F (API) 443.86 261.2 T (described) 470.33 261.2 T (below.) 72 249.2 T 1 14 Q (JAR Manifest Format) 36 221.47 T 0 12 Q (The current manifest format is extended to allow the specification of the attributes for package versioning infor-) 36 194.4 T (mation.) 36 182.4 T (A) 75.33 182.4 T (manifest) 86.99 182.4 T (entry) 131.31 182.4 T (should) 158.96 182.4 T (be) 193.96 182.4 T (created) 208.28 182.4 T (for) 245.92 182.4 T (each) 262.9 182.4 T (Java) 287.88 182.4 T 0 6.4 Q (TM) 309.2 185.6 T 0 12 Q (package.) 321.8 182.4 T (The) 367.1 182.4 T (name) 388.76 182.4 T (of) 417.74 182.4 T (the) 430.73 182.4 T (entry) 448.39 182.4 T (will) 476.04 182.4 T (be) 497.71 182.4 T (the) 512.03 182.4 T (directory) 529.69 182.4 T (within the archive that contains the package\325s class and resource files. For example:) 36 170.4 T 4 10 Q (Manifest-version: 1.0) 36 152.53 T (Name: java/util/) 36 142.53 T (Specification-Title: "Java Utility Classes") 36 132.53 T (Specification-Version: "1.2") 36 122.53 T (Specification-Vendor: "Sun Microsystems Inc.".) 36 112.53 T (Implementation-Title: "java.util") 36 102.53 T (Implementation-Version: "build57") 36 92.53 T (Implementation-Vendor: "SunMicrosystems. Inc.") 36 82.53 T 0 12 Q (To insert these attributes in the manifest, create a prototype manifest file and use JarTool\325s) 36 64 T 4 F (-m) 474.59 64 T 0 F ( switch to merge) 488.99 64 T (the) 36 52 T (attributes) 53.42 52 T (into) 100.84 52 T (the) 122.27 52 T (manifest) 139.69 52 T (when) 183.78 52 T (the) 212.53 52 T (manifest) 229.95 52 T (is) 274.04 52 T (built.) 284.8 52 T (JarTool) 312.56 52 T (will) 351.98 52 T (be) 373.41 52 T (extended) 387.49 52 T (to) 433.57 52 T (browse) 445.67 52 T (and) 483.08 52 T (set) 503.17 52 T (the) 519.25 52 T (version-) 536.68 52 T (ing attributes in the manifest.) 36 40 T 1 14 Q (How Users Know What is Running) 36 12.27 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K 0 12 Q ( java.vm.specification.version) 42 734.8 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (i.e. 1.1) 317.76 734.8 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K ( java.vm.specification.name) 42 710.8 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (i.e.) 317.76 710.8 T 3 F (Java) 335.42 710.8 T 3 6.4 Q (TM) 358.08 714 T 3 12 Q ( Language Specification) 366.97 710.8 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K 0 F ( java.vm.specification.vendor) 42 686.8 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (i.e. Sun Microsystems Inc.) 317.76 686.8 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (Implementation-Title) 42 423.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (Title of the package) 172.38 423.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (Implementation-Version) 42 399.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (Version number) 172.38 399.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (Implementation-Vendor) 42 375.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (Vendors company or organization) 172.38 375.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (Specification-Title) 42 339.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (Title of the specificationThese attributes are stored in the) 172.38 351.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (manifest and retrieved by programs using the API de-) 172.38 339.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (scribed below.) 172.38 327.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (Specification-Version) 42 303.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (Version number) 172.38 303.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (Specification-Vendor) 42 279.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K (Vendors company or organization) 172.38 279.2 T 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K 0 0 0 0 1 1 1 1 K 0 0 0 1 0 0 0 1 K FMENDPAGE %%EndPage: "5" 5 %%Page: "6" 6 612 792 0 FMBEGINPAGE 0 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 1 K 0 12 Q 0 X (When) 72 784 T (bugs) 102.83 784 T (occur,) 127.67 784 T (users) 159.49 784 T (must) 186.32 784 T (be) 211.83 784 T (able) 225.33 784 T (to) 247.49 784 T (report) 259 784 T (the) 289.83 784 T (identities) 306.67 784 T (of) 352.84 784 T (the) 365.01 784 T (packages) 381.84 784 T (in) 427.99 784 T (use.) 439.5 784 T (The) 460.67 784 T (application,) 481.5 784 T (applet,) 72 772 T (or) 107.31 772 T (browser) 120.29 772 T (must) 161.93 772 T (be) 188.26 772 T (able) 202.57 772 T (to) 225.55 772 T (expose) 237.87 772 T (the) 274.18 772 T (available) 291.83 772 T (information) 338.13 772 T (to) 397.78 772 T (the) 410.1 772 T (user,) 427.75 772 T (either) 453.73 772 T (on) 484.04 772 T (demand) 499.02 772 T (or when an error occurs. Available APIs can report the following information:) 72 760 T 2 F (\267) 48.6 740.8 T 0 F (What packages are loaded?) 72 740.8 T (The) 72 716.8 T 4 F (package.getAllPackages) 93.66 716.8 T 0 F ( method returns a list of the active packages.) 252.06 716.8 T 2 F (\267) 48.6 697.6 T 0 F (What are the package versions?) 72 697.6 T (The) 72 673.6 T 4 F (java.lang.Package) 92.81 673.6 T 0 F (methods) 217.37 673.6 T (allow) 260.19 673.6 T (the) 289 673.6 T (attributes) 305.82 673.6 T (for) 352.64 673.6 T (names) 368.78 673.6 T (and) 401.59 673.6 T (versions) 421.07 673.6 T (to) 463.22 673.6 T (be) 474.71 673.6 T (examined,) 488.19 673.6 T (as listed in) 72 661.6 T 1 1 0 0 0 0 1 1 K (Package Versioning) 126.34 661.6 T 0 0 0 1 0 0 0 1 K (.) 222.65 661.6 T 2 F (\267) 48.6 642.4 T 0 F (What version of the Java) 72 642.4 T 0 6.4 Q (TM) 191.3 645.6 T 0 12 Q ( Runtime is active?) 200.9 642.4 T (The) 72 618.4 T 4 F (System.getProperties) 92.83 618.4 T 0 F (method) 239 618.4 T (can) 277.17 618.4 T (be) 296 618.4 T (used) 309.49 618.4 T (to) 333.66 618.4 T (get) 345.17 618.4 T (the) 362 618.4 T (properties) 378.84 618.4 T (of) 428.99 618.4 T (this) 441.16 618.4 T (virtual) 460.67 618.4 T (machine,) 494.17 618.4 T (as listed in) 72 606.4 T 1 1 0 0 0 0 1 1 K (Version Identification of the JavaTM Runtime) 126.34 606.4 T 0 0 0 1 0 0 0 1 K (.) 349.31 606.4 T 2 F (\267) 48.6 587.2 T 0 F (What version of the Java) 72 587.2 T 0 6.4 Q (TM) 191.3 590.4 T 0 12 Q ( VM is active?) 200.9 587.2 T (The) 72 563.2 T 4 F (System.getProperties) 92.83 563.2 T 0 F (method) 239 563.2 T (can) 277.17 563.2 T (be) 296 563.2 T (used) 309.49 563.2 T (to) 333.66 563.2 T (get) 345.17 563.2 T (the) 362 563.2 T (properties) 378.84 563.2 T (of) 428.99 563.2 T (this) 441.16 563.2 T (virtual) 460.67 563.2 T (machine,) 494.17 563.2 T (as listed in) 72 551.2 T 1 1 0 0 0 0 1 1 K (Virtual Machine Versioning) 126.34 551.2 T 0 0 0 1 0 0 0 1 K (.) 261.65 551.2 T 1 14 Q (Rationale for Limiting Implementation Version Numbers to Identity) 36 523.47 T 0 12 Q (Implementations evolve independently over time to fix bugs, to improve performance, or to add) 72 496.4 T (new functions that are called for by more recent revisions of the specifications. Packages imple-) 72 484.4 T (ment specifications and must identify which version of each specification they implement. Inter-) 72 472.4 T (actions) 72 460.4 T (occur) 108.27 460.4 T (between) 137.19 460.4 T (packages) 179.44 460.4 T (through) 225.69 460.4 T (their) 265.3 460.4 T (public) 289.56 460.4 T (and) 321.83 460.4 T (protected) 341.43 460.4 T (interfaces) 388.36 460.4 T (and) 437.27 460.4 T (classes) 456.87 460.4 T (only.) 492.46 460.4 T (The) 519.07 460.4 T (public) 72 448.4 T (API) 104.36 448.4 T (and) 126.05 448.4 T (behavior) 145.74 448.4 T (must) 190.08 448.4 T (remain) 215.78 448.4 T (stable) 251.46 448.4 T (over) 281.82 448.4 T (time,) 305.5 448.4 T (so) 332.2 448.4 T (changes) 345.22 448.4 T (can) 386.23 448.4 T (be) 405.25 448.4 T (allowed) 418.94 448.4 T (in) 459.29 448.4 T (the) 470.98 448.4 T (implemen-) 488 448.4 T (tation of one package without affecting the behavior of another package.) 72 436.4 T (If) 72 417.2 T (the) 82.95 417.2 T (classes) 100.58 417.2 T (of) 136.87 417.2 T (a) 149.82 417.2 T (package) 158.11 417.2 T (always) 200.38 417.2 T (faithfully) 236.67 417.2 T (implemented) 284.3 417.2 T (the) 349.92 417.2 T (specification,) 367.55 417.2 T (it) 434.83 417.2 T (would) 444.46 417.2 T (be) 477.42 417.2 T (sufficient) 491.71 417.2 T (just) 72 405.2 T (to) 91.85 405.2 T (identify) 103.69 405.2 T (the) 143.52 405.2 T (specification.) 160.69 405.2 T (Since) 227.52 405.2 T (in) 256.69 405.2 T (the) 268.53 405.2 T (real) 285.7 405.2 T (world) 306.19 405.2 T (this) 336.69 405.2 T (rarely) 356.54 405.2 T (happens,) 387.02 405.2 T (packages) 431.85 405.2 T (need) 478.34 405.2 T (to) 503.5 405.2 T (iden-) 515.34 405.2 T (tify) 72 393.2 T (themselves) 91.38 393.2 T (so) 147.42 393.2 T (that) 160.8 393.2 T (bugs) 181.51 393.2 T (can) 206.88 393.2 T (be) 226.25 393.2 T (reported) 240.29 393.2 T (against) 282.98 393.2 T (the) 319.69 393.2 T (packages) 337.07 393.2 T (that) 383.76 393.2 T (may) 404.47 393.2 T (have) 427.84 393.2 T (contributed) 453.21 393.2 T (to) 510.58 393.2 T (the) 522.62 393.2 T (problem.) 72 381.2 T (There is a significant tendency to try to attach some significance to version identifiers of imple-) 72 362 T (mentations.) 72 350 T (If) 130.51 350 T (the) 141.35 350 T (purpose) 158.86 350 T (is) 199.69 350 T (to) 210.54 350 T (allow) 222.72 350 T (the) 252.23 350 T (tracking) 269.74 350 T (of) 311.91 350 T (bugs) 324.75 350 T (then) 350.26 350 T (a) 373.77 350 T (unique) 381.94 350 T (number) 417.45 350 T (is) 456.96 350 T (sufficient.) 467.81 350 T (It) 518.97 350 T (is) 529.15 350 T (also) 72 338 T (sufficient) 93.49 338 T (for) 140.97 338 T (a) 157.11 338 T (client) 164.6 338 T (package) 193.42 338 T (to) 234.88 338 T (workaround) 246.38 338 T (a) 306.51 338 T (bug) 314 338 T (in) 334.15 338 T (a) 345.64 338 T (particular) 353.13 338 T (version) 401.27 338 T (of) 438.75 338 T (a) 450.9 338 T (vendors) 458.39 338 T (package) 498.53 338 T (since that version can be tested for and the bug avoided.) 72 326 T (However, many additional problems can occur when one package attempts to work around bugs) 72 306.8 T (in) 72 294.8 T (other) 84.32 294.8 T (packages.) 111.97 294.8 T (They) 161.93 294.8 T (need) 189.58 294.8 T (to) 215.22 294.8 T (identify) 227.54 294.8 T (behavior) 267.86 294.8 T (that) 312.84 294.8 T (is) 333.82 294.8 T (not) 344.81 294.8 T (part) 363.13 294.8 T (of) 384.78 294.8 T (the) 397.76 294.8 T (specification) 415.41 294.8 T (and) 479.72 294.8 T (may) 500.03 294.8 T (try) 523.68 294.8 T (to use behavior that is only part of one implementation. Such implementation specific behavior) 72 282.8 T (cannot be relied upon to be in any particular version other than the one\050s\051 seen and tested by the) 72 270.8 T (developer.) 72 258.8 T (A) 72 239.6 T (bug) 82.94 239.6 T (first) 103.21 239.6 T (appears) 124.81 239.6 T (in) 163.73 239.6 T (some) 175.34 239.6 T (version) 202.94 239.6 T (of) 240.54 239.6 T (a) 252.81 239.6 T (vendors) 260.41 239.6 T (package) 300.67 239.6 T (and) 342.26 239.6 T (may) 361.86 239.6 T (or) 384.79 239.6 T (may) 397.06 239.6 T (not) 419.99 239.6 T (continue) 437.6 239.6 T (to) 481.2 239.6 T (be) 492.81 239.6 T (a) 506.41 239.6 T (prob-) 514.01 239.6 T (lem) 72 227.6 T (in) 92.5 227.6 T (subsequent) 104.33 227.6 T (versions.) 160.15 227.6 T (If) 205.64 227.6 T (the) 216.13 227.6 T (client) 233.29 227.6 T (of) 262.45 227.6 T (the) 274.94 227.6 T (buggy) 292.1 227.6 T (package) 324.59 227.6 T (uses) 366.4 227.6 T (a) 389.56 227.6 T (workaround) 397.38 227.6 T (based) 457.86 227.6 T (on) 487.68 227.6 T (version) 502.18 227.6 T (numbers,) 72 215.6 T (it) 118.67 215.6 T (could) 127.68 215.6 T (correctly) 156.68 215.6 T (work) 201.67 215.6 T (around) 228.66 215.6 T (the) 264.33 215.6 T (bug) 281.33 215.6 T (in) 301.67 215.6 T (the) 313.34 215.6 T (specific) 330.35 215.6 T (version.) 370 215.6 T (Now,) 410.67 215.6 T (if) 439.34 215.6 T (the) 449.01 215.6 T (buggy) 466.01 215.6 T (package) 498.35 215.6 T (was) 72 203.6 T (fixed,) 93 203.6 T (how) 123 203.6 T (would) 146 203.6 T (the) 178.34 203.6 T (client) 195.34 203.6 T (package) 224.34 203.6 T (know) 265.99 203.6 T (whether) 294.99 203.6 T (the) 335.98 203.6 T (bug) 352.98 203.6 T (was) 373.32 203.6 T (fixed) 394.32 203.6 T (or) 421.32 203.6 T (not?) 433.65 203.6 T (If) 456.65 203.6 T (it) 466.99 203.6 T (assumed) 476 203.6 T (that) 519.66 203.6 T (higher) 72 191.6 T (versions) 105.56 191.6 T (still) 148.46 191.6 T (contained) 169.38 191.6 T (the) 218.94 191.6 T (bug,) 236.51 191.6 T (it) 260.41 191.6 T (would) 269.99 191.6 T (still) 302.89 191.6 T (try) 323.81 191.6 T (to) 340.04 191.6 T (work) 352.28 191.6 T (around) 379.85 191.6 T (the) 416.08 191.6 T (bug.) 433.64 191.6 T (The) 457.55 191.6 T (workaround) 479.11 191.6 T (itself might not work correctly with the non-buggy package. This could cause a cascade of bugs) 72 179.6 T (caused by fixing a bug. Only the developer, through testing with a new version, can determine) 72 167.6 T (whether or not the workaround for a bug is still necessary or whether it will cause problems with) 72 155.6 T (the) 72 143.6 T (correctly) 89.63 143.6 T (behaving) 135.24 143.6 T (package.) 182.19 143.6 T (The) 227.46 143.6 T (developer) 249.08 143.6 T (only) 299.36 143.6 T (knows) 323.66 143.6 T (that) 357.95 143.6 T (the) 378.91 143.6 T (bug) 396.54 143.6 T (exists) 417.5 143.6 T (in) 447.8 143.6 T (a) 460.1 143.6 T (particular) 468.39 143.6 T (indi-) 517.33 143.6 T (vidual versions.) 72 131.6 T 1 1 0 0 0 0 1 1 K (CONTENTS) 36 99.2 T 0 0 0 1 0 0 0 1 K ( |) 98.66 99.2 T 1 1 0 0 0 0 1 1 K 137.74 98 107.06 98 2 L 0.6 H 0 Z N (PREV) 107.06 99.2 T 84.67 65.6 36 65.6 2 L N 3 F (Copyright) 36 66.8 T 0 0 0 1 0 0 0 1 K ( \251 1998 Sun Microsystems, Inc. All Rights Reserved.) 84.67 66.8 T 1 1 0 0 0 0 1 1 K 0 0 0 1 0 0 0 1 K FMENDPAGE %%EndPage: "6" 6 %%Trailer FMENDDOCUMENT %%BoundingBox: 0 0 612 792 %%PageOrder: Ascend %%Pages: 6 %%DocumentFonts: Times-Roman %%+ Times-Bold %%+ Symbol %%+ Times-Italic %%+ Courier %%DocumentNeedsFonts: Times-Roman %%+ Times-Bold %%+ Symbol %%+ Times-Italic %%+ Courier %%DocumentSuppliedFonts: %%EOF .