[llvm-commits] CVS: llvm-www/pubs/2003-11-15-DataStructureAnalysisTR.pdf 2003-11-15-DataStructureAnalysisTR.ps

Vikram Adve vadve at cs.uiuc.edu
Sat Apr 17 18:37:40 PDT 2004


Changes in directory llvm-www/pubs:

2003-11-15-DataStructureAnalysisTR.pdf added (r1.1)
2003-11-15-DataStructureAnalysisTR.ps added (r1.1)

---
Log message:

Updated versions of DSA paper.


---
Diffs of the changes:  (+12645 -0)

Index: llvm-www/pubs/2003-11-15-DataStructureAnalysisTR.pdf


Index: llvm-www/pubs/2003-11-15-DataStructureAnalysisTR.ps
diff -c /dev/null llvm-www/pubs/2003-11-15-DataStructureAnalysisTR.ps:1.1
*** /dev/null	Sat Apr 17 15:07:45 2004
--- llvm-www/pubs/2003-11-15-DataStructureAnalysisTR.ps	Sat Apr 17 15:07:35 2004
***************
*** 0 ****
--- 1,12645 ----
+ %!PS-Adobe-2.0
+ %%Creator: dvips(k) 5.90a Copyright 2002 Radical Eye Software
+ %%Title: paper.dvi
+ %%Pages: 10
+ %%PageOrder: Ascend
+ %%BoundingBox: 0 0 612 792
+ %%DocumentFonts: Helvetica-Bold Helvetica CMSY9 CMTT9 Times-Bold CMR9
+ %%+ CMTI9 CMBX9 CMR6 CMMI9 CMR7 CMBX7 CMSY7 CMMI7 CMTI7 CMR8 CMMI6
+ %%+ CMCSC10 CMTT8 Times-Italic CMSY5 CMR5 CMMI5 CMBX8 CMSY8 CMTI8
+ %%EndComments
+ %DVIPSWebPage: (www.radicaleye.com)
+ %DVIPSCommandLine: dvips -t letter -o paper.ps paper.dvi
+ %DVIPSParameters: dpi=1200, compressed
+ %DVIPSSource:  TeX output 2003.11.15:2234
+ %%BeginProcSet: texc.pro
+ %!
+ /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+ N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+ mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+ 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+ mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+ exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+ N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+ /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+ /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+ array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+ df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+ definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+ }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+ B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+ 1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
+ 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
+ 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
+ sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
+ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
+ gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
+ /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
+ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
+ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
+ get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
+ ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
+ fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
+ {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
+ chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
+ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
+ forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+ /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+ }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+ mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+ 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+ index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+ /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+ (LaserWriter 16/600)]{A length product length le{A length product exch 0
+ exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+ end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+ grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+ imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+ exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+ fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+ delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+ B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+ rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+ 
+ %%EndProcSet
+ %%BeginProcSet: 8r.enc
+ % @@psencodingfile@{
+ %   author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
+ %   version = "0.6",
+ %   date = "1 July 1998",
+ %   filename = "8r.enc",
+ %   email = "tex-fonts@@tug.org",
+ %   docstring = "Encoding for TrueType or Type 1 fonts
+ %                to be used with TeX."
+ % @}
+ % 
+ % Idea is to have all the characters normally included in Type 1 fonts
+ % available for typesetting. This is effectively the characters in Adobe
+ % Standard Encoding + ISO Latin 1 + extra characters from Lucida.
+ % 
+ % Character code assignments were made as follows:
+ % 
+ % (1) the Windows ANSI characters are almost all in their Windows ANSI
+ % positions, because some Windows users cannot easily reencode the
+ % fonts, and it makes no difference on other systems. The only Windows
+ % ANSI characters not available are those that make no sense for
+ % typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+ % (173). quotesingle and grave are moved just because it's such an
+ % irritation not having them in TeX positions.
+ % 
+ % (2) Remaining characters are assigned arbitrarily to the lower part
+ % of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+ % 
+ % (3) Y&Y Lucida Bright includes some extra text characters; in the
+ % hopes that other PostScript fonts, perhaps created for public
+ % consumption, will include them, they are included starting at 0x12.
+ % 
+ % (4) Remaining positions left undefined are for use in (hopefully)
+ % upward-compatible revisions, if someday more characters are generally
+ % available.
+ % 
+ % (5) hyphen appears twice for compatibility with both 
+ % ASCII and Windows.
+ % 
+ /TeXBase1Encoding [
+ % 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
+   /.notdef /dotaccent /fi /fl
+   /fraction /hungarumlaut /Lslash /lslash
+   /ogonek /ring /.notdef
+   /breve /minus /.notdef 
+ % These are the only two remaining unencoded characters, so may as
+ % well include them.
+   /Zcaron /zcaron 
+ % 0x10
+  /caron /dotlessi 
+ % (unusual TeX characters available in, e.g., Lucida Bright)
+  /dotlessj /ff /ffi /ffl 
+  /.notdef /.notdef /.notdef /.notdef
+  /.notdef /.notdef /.notdef /.notdef
+  % very contentious; it's so painful not having quoteleft and quoteright
+  % at 96 and 145 that we move the things normally found there to here.
+  /grave /quotesingle 
+ % 0x20 (ASCII begins)
+  /space /exclam /quotedbl /numbersign
+  /dollar /percent /ampersand /quoteright
+  /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+ % 0x30
+  /zero /one /two /three /four /five /six /seven
+  /eight /nine /colon /semicolon /less /equal /greater /question
+ % 0x40
+  /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+ % 0x50
+  /P /Q /R /S /T /U /V /W
+  /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+ % 0x60
+  /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+ % 0x70
+  /p /q /r /s /t /u /v /w
+  /x /y /z /braceleft /bar /braceright /asciitilde
+  /.notdef % rubout; ASCII ends
+ % 0x80
+  /.notdef /.notdef /quotesinglbase /florin
+  /quotedblbase /ellipsis /dagger /daggerdbl
+  /circumflex /perthousand /Scaron /guilsinglleft
+  /OE /.notdef /.notdef /.notdef
+ % 0x90
+  /.notdef /.notdef /.notdef /quotedblleft
+  /quotedblright /bullet /endash /emdash
+  /tilde /trademark /scaron /guilsinglright
+  /oe /.notdef /.notdef /Ydieresis
+ % 0xA0
+  /.notdef % nobreakspace
+  /exclamdown /cent /sterling
+  /currency /yen /brokenbar /section
+  /dieresis /copyright /ordfeminine /guillemotleft
+  /logicalnot
+  /hyphen % Y&Y (also at 45); Windows' softhyphen
+  /registered
+  /macron
+ % 0xD0
+  /degree /plusminus /twosuperior /threesuperior
+  /acute /mu /paragraph /periodcentered
+  /cedilla /onesuperior /ordmasculine /guillemotright
+  /onequarter /onehalf /threequarters /questiondown
+ % 0xC0
+  /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+  /Egrave /Eacute /Ecircumflex /Edieresis
+  /Igrave /Iacute /Icircumflex /Idieresis
+ % 0xD0
+  /Eth /Ntilde /Ograve /Oacute
+  /Ocircumflex /Otilde /Odieresis /multiply
+  /Oslash /Ugrave /Uacute /Ucircumflex
+  /Udieresis /Yacute /Thorn /germandbls
+ % 0xE0
+  /agrave /aacute /acircumflex /atilde
+  /adieresis /aring /ae /ccedilla
+  /egrave /eacute /ecircumflex /edieresis
+  /igrave /iacute /icircumflex /idieresis
+ % 0xF0
+  /eth /ntilde /ograve /oacute
+  /ocircumflex /otilde /odieresis /divide
+  /oslash /ugrave /uacute /ucircumflex
+  /udieresis /yacute /thorn /ydieresis
+ ] def
+ 
+ %%EndProcSet
+ %%BeginProcSet: texps.pro
+ %!
+ TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+ index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+ exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
+ exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub
+ dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
+ ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict
+ end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{
+ dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1
+ roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def
+ dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}
+ if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}
+ def end
+ 
+ %%EndProcSet
+ %%BeginProcSet: special.pro
+ %!
+ TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+ /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+ /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+ /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+ X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+ /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+ {userdict/md get type/dicttype eq{userdict begin md length 10 add md
+ maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+ /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+ atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+ transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+ curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+ pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+ if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+ -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+ get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+ yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+ neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+ 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+ neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+ 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+ 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+ -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+ TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+ }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+ save N userdict maxlength dict begin/magscale true def normalscale
+ currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+ /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+ psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+ psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+ TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
+ @MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
+ newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
+ closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
+ /@beginspecial{SDict begin/SpecialSave save N gsave normalscale
+ currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
+ N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
+ neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
+ rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
+ scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
+ lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
+ ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
+ /setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
+ pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
+ restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
+ /rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
+ setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
+ moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
+ matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
+ savematrix setmatrix}N end
+ 
+ %%EndProcSet
+ %%BeginFont: CMTI8
+ %!PS-AdobeFont-1.1: CMTI8 1.0
+ %%CreationDate: 1991 Aug 18 21:07:42
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMTI8) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMTI8 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 39 /quoteright put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 44 /comma put
+ dup 46 /period put
+ dup 47 /slash put
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 56 /eight put
+ dup 65 /A put
+ dup 67 /C put
+ dup 68 /D put
+ dup 69 /E put
+ dup 70 /F put
+ dup 71 /G put
+ dup 73 /I put
+ dup 74 /J put
+ dup 76 /L put
+ dup 77 /M put
+ dup 78 /N put
+ dup 79 /O put
+ dup 80 /P put
+ dup 83 /S put
+ dup 84 /T put
+ dup 87 /W put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 120 /x put
+ dup 121 /y put
+ dup 122 /z put
+ readonly def
+ /FontBBox{-35 -250 1190 750}readonly def
+ /UniqueID 5000826 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
+ 525003F3DAD7933EB57E7DB1462E9D906F6D8F5BF740206C1EC5F36E00AAFF68
+ F3EF6F3A2540E5F9564D1C215BC1E7E69C7D04DA5DB1CF195613C9CBF4BAA360
+ 84AEF3E10E24877FBE36AD731DC97305BDE6DB1F934909FAF60B8E28561FBC57
+ 0F5B6225425BFDE8F0C71CD4507B82FF803E9A301397975E38A259DE1E1B4FC0
+ 06BB1DC2D45B987A2268A77CE8DC025CB0D1B39788BBEE149103950650171C94
+ 5FED1063050A90BD38605BD9365D1C2AE42A7DA3DDB9A263FE10BD487F63D908
+ D4F02758BD9D7BE53E6353A25BEFA29E42B50C1D078A8B3A746EEDB381CCE36C
+ 93FC4BD1A8D1D6ACD0D355E948CFE397B74D243EB51597D251D0BAE6884D70E8
+ FEE119462E1939A9783414DF59EEA5FF1529F13869D1FF0A44935C5198CC5DAA
+ E1FD2A17AEEBF4974052D06734A409E26C457C06700C55896C90BB33E044A737
+ 46590D9FA242819B9527FD59818D8829D4EB2D26A34CC05A2CC063E66F2DF193
+ 8E4F9670014BC243180E45B51DDB05AD1E6A7F619EE1CE09CFC1A4F02CB7270E
+ 4482FEDF673EDED38EF3173C475C34BFB3F6623C5E942A7797FEDDD0EF1D54E9
+ 1D90D7076C0A9687E334907C22F2E7C603388D8D626B0E5A62B7543DCBB575D7
+ 9A6BE1528EC9BC18570001092524E4FBB02F3B29293BCB4F0EF14A2DD9DB22A5
+ BB33455799E8120D2A4862424AA4A382972E2845E042506FC8F6E201D11DD0F2
+ 09FAD8DC29C3E12B66293ACBFB13FA0F26238981F2CD52B47A8CDE6DF5CDFAAF
+ 3113E1A6366B806EABA9C34E5D41167CD10D7B639021FB4CFDAE28CE72A93F3C
+ E8929A4FF944457C1E9A87F12424001E65E9F582638BB505B23B05DA244BA609
+ B7FD15A3F53E9A29BFE83BF5E2418DBD97909464792A1384C8D56E8B7369E43C
+ 436FDB9D76C84D3BC741F8EE859011AD981DF87DA30A9ABFE05CFB1C1AF3744E
+ 81F397FF172340AE18C47CFC701ADC9BF42059ED5913DBA9321ABDDEF9A1B2C5
+ FEE1F83DE6E65085117603B9E9366E0BEFDC5DE1ACCAF6A8731F47B547CF08D7
+ E61C3117969E6A6D58E9AE4D95855ABD3B320C0C1B77C65F0515655C924E017F
+ 336155F783C88D6F24F708E95245F5D1CEDF6B61ECF7F3E0669700911C1D9238
+ 45BC7F6D5B5FE2562D27ECC8CE9F2357C2A98C3081A136330A44DFB68CB22BA6
+ 397920A9158D51A7CBEDEBE75E9B065629D9B73C16008B8C09C04115E84FCCC8
+ BCC50070387308B1BC640EFFD4AA2C6B9965D9C28A4549E78E55FA68D5A0529B
+ 95FDB74EFA81E618C7ED1CDCE8A3F3EF2990A8875B237A72295EFBB3CA808F4F
+ CD27738B26FFDC47EB8B8844FF1CD381DE6D7AE7FD40BD5C7C57A0CD3E7DC3DA
+ C22F764B65DE8194EDA661B5520F97D1393377E54ED30DFBE9B8090BDFE5F552
+ EA14220F883C27C6AA4491FC0499C5FBAFFE659CDB1135B08BCF1F0290849EF1
+ E179BC8A900FC0D4300204671841EB42A8A4B3AC3B8A2ACDBB53B27CBF172B36
+ AE15D59174181D443FEC5AE5F0D3EB62DA08ECC0346526D8898B75C78C7DD9BC
+ 7ECA10FA14414A20FD880ABDF3D74B4F51B410DAB44F9FE66A0B9B007617CEF1
+ FF65A8DC7F4313239B6AD5E374D4A01759BBA5109D4CD57D0D2EC09BA8AF8FDB
+ A1324574BE9B2DC1B5F070CFD75A257BA08E87A2D475EE248FB6F9DB0181FBDB
+ B90E92792A2EF3D7CFAC468D446A0F4088FBC80D72CD0BFA56A652903942474E
+ DB4030F4CAB2E1429C21B8790D1B7141F2E9D13C94CCF2648545C302C70FD880
+ 8B8BC34F942F6D0E959655D57E91A77A825581D671994BE7969D18FA3CA00B95
+ 5E1A631E96EB63D14386603DD8AAC11F0E5ADDD1748E96B92699A58508838FB2
+ B419B66BA294CFE3DC6A6B40E25EB130EDDD33ED3F51D1BA8A2E926FCE901419
+ 35308842AB4DE799CD6E607FE59D8593AA8B87E0EFF0E0D499D8291F4F316B7B
+ 47A2CDB0778045117D85F0F84D74E667C1A9E04F26A3775A714A53EDC7C3E319
+ B66FA103D9E9CE115E132F5C55181E8CE5181AE86D8B7D5C0C7C949AE04A0092
+ EE0600C018E652ACDB9E61C845533E571C77862AB44EC1EC56DA22E3061D00AB
+ 9860EA0B3A1B75A6646058DA37332AE54694DFC3B1AC749940E5E4AB26B61A01
+ F7A07E21DA83DB920BF427D499140F14CE97FC85A38CC2076C544DA92FD3B0F4
+ A0D15CCB6F1E7CA5C6FCFDACC4BFE1646B36925DE625D41D2B3B65ED398406D0
+ 6392A579D04F2F3FF6186D4EEC55078C9E94822328798725B9302A2033DB644D
+ F40D22EFA88ADB4411C25E815DE5F4B85564A89C7F41B7E714A3C1E35F4A4DEF
+ A2041DF4FADA179AB72378D070671AA994D8BA2338E75B9319CBF9DCA6861718
+ 13DA205038A72B55D0B22CADD4B0D51D35FB9F98773B35AA5072C3943B5FD2F0
+ 2F31DFCD42EFFC5151439966F8FA3B855D73DE5DDE960E8C888CA936230E6D3E
+ D400991C1FA00E1EB45193563E9EAA86604859E0C77056A0C20672AB461F82F3
+ 69680CAEF7E9BDE4ECAFE968C07E1A4A5EE1FC048057C01A36E4EC90A9593963
+ B87377C2A195B5BC18DBE1DB2EE413C43E19031DFC9581E5D797A6FE57873D3F
+ 43FEA7029A20DFED357979363EEF044BAFBD767C4B2CB5A6F8AD4822DF42941E
+ DF9D07A3B6FC661ED642C59F0ACD949ED72902C4C1EE5A85AECE2875D3061597
+ 599D52C83445EB1C5DC6771FB7DAA604882BDE15F3F76030D9938C8433B22814
+ 035C6DDAAD15C401F16E07EBF612DBD743E7FE9E2302107EB6F7605BB59DC91F
+ 62D0657206FC9091DCEDC8303C414E069639135933BC8766A4B69BF20BC83D34
+ 20CD2C51DF90754578F7CF2425447E6B1A65860EBFEC2B750B59CB3F7E0CA71E
+ E2D9711F4E4AFD0549965C368DE5529CE6777E0C17BB4736C09B8DCFB42DF4C2
+ 8A4C75E02CE2E646B830887998D41F89C936F93FD0B5915258602017F4D6A3B3
+ C5ED9BE3D18BBCF2CA35024E0C8C9F2000638DD04C8D210DAC3D0C0BE032A694
+ C37726DA0888665E3CB379275213648E7A37A92A1916540A03F10D30C95937FD
+ 87EDE4C3E4AFAEAC46E39146D2D775FCDC4B17676FECFD1593A0ABDFCBF3A943
+ 5ABFBAC776CAF22EF77807E9994434060D3E27DDD6CF0D180035F73B19265B62
+ D6E0CAADB100DB6EE62DAC0B7AA72BF9D6B84DEA050F6242BFA7CA42F8CEAE60
+ 32E89377D62E46144375B3B0365C6F7D99F679F00F91F552F826EC6F79A674E0
+ A0F87E87E5BB7F8593C9B1A2002032615206A186822E174737D14D14855E45B2
+ 4336E92DB9796A3E1146FA39CA3A81062F9B9D996DD11D39D430221BC695B764
+ 5565118B52767C74246B80E913777F51557933738A78AAE6C864520F5F02A75A
+ C0582A477327D9F7AC2EC9A4625BBC1E80DC49565D434775E9A848D3479186AF
+ BB178C13FF3D8C2DF86233A6CE9A1C43A4AE82967AEFE3551AA7736574DEF17E
+ 42490C1B2EA953399C22B428E4283DDF4061FE92860F42F2E708B099E1AC7B1F
+ B183562C7C91ADDE1227596A7B22571B160FD78D489248AF9765CC6827FA2558
+ 98BEB5727B0B2F58CBC0011C60EA0C9824827A1581D596299DB9387B9FDFDABC
+ 9D4FDA7997575E4ABFD62CCB7F7371705CAE487645E9A5443A43F68D2B224771
+ 4611C09006173DF3458098C769C77903F142BE5D78CCB4AB33A980CEE81917FE
+ D4C4EEE3ECD0F5D5B67322591AAE7765EA2E088D25405AB6B84164D57C86F76A
+ 4B121532941C44C544F9EF7A02DCDA42EFDAA8F98A3AE49E5EC978C1A68EB766
+ 66D6C05EAC7A46C45BC24E3768AC221A49F441EA7BB3852CF8A2231802FA8109
+ 10B90F87F126D384B01384DCDF0A6FD6F2D909C04D88262EACF50E0EF9648F22
+ DE1973B0383EEC8C1B04087F459903FC1EF8E74C6ADA64AB0FC66182A4F540F2
+ D200511854B680655EF011FD95D7EE015FBB5C109F140F56935F50E74F1ED6D7
+ AA7E698510F3F42DFEF62C8913938EC6C4262809AA555DCD8713B5C502E82534
+ E46C0154B8F7BFE7FD41AAAF3BD73640842A8CFD30C45ACF27CA03DA64E57D10
+ C91F58C3DE6BE19EF868B2659261664FE190F5CA6144E77ACAFC40F56608F38F
+ A51C115BEC032AFC141DBADDD5E7E8B0B06157979D336D0D4DA7D4777FB84710
+ 95B614BB1633DB62754C009661E111A0E0B55CC91260CE24C915119FAE19EA89
+ 4E58163ABCA0EFDE7855EA96BBB2627F5444ACE33284758CB5E4604DC6B26F65
+ C554D7513C4C47500FE187B5220DB4329C14E35BA77D67B6D51A53CC33CABAE5
+ 176178C5B70F3CF453F2370C168BCD9681D8F87F4A7E84BEA7E6F206166A93C4
+ F618E43BE8D8AB29B802C0B372180BD0AAD2BF87401B4021CD361472A448357D
+ FC82D30891523B8B19A8100FC0711BB8EB19297C92CC27A3B395D98C922BB390
+ 62211282BFB1AB8DD10D8E5DC8D43C77B058C5DA197178462A6EDE6B0C834BA0
+ 09A24792E4562CA672F5E7A0560E948D4727F3AE1194661DFFAD58AC14AADA62
+ C8C0DC04C47DCFDEE0E68E733CBE87CB4764D8CEA2ABDEA98397DD9C3D71C3AE
+ 54CBE5642C9C8126654452D6242650B6793EE45C9686B0ABEA44B8FD7380B171
+ F7EDA46A0E5ED45313B15C80A27C446AAD18D85637899EFE29F501349DA7184D
+ 23B5C48A909BC90B34F3494C9FAE5C1A8D6E3F2BD60F5AC41073BC20E7E4B57D
+ E914BC85279969D6C32ADD5EF443ED195399F3B292A146CA5DC57A0BE45E979D
+ F90279E50C2C8D381D1869F2C5FF511E59008E1BB578430EFF98279249D20AA6
+ A7976D3B8BFC8A19CD1262B73D3DDB4E6593B9F390D98F27F3634D2A54B81AD0
+ 00EBCD250D37C86605B717AFCD48E4F24D22265F536A096FD9C1D300DA1AAD02
+ 660E6C282CA3DCB58C39F89761FDE2686A3008D155128363876E38083B4A0489
+ 4E27EDA8C4516972BC3AA50029BC785CC384113734D378E19A626FF9B30D21D2
+ F8E12D85067C4B4774E98923158682DC7B742E3B9A09E28FBE4BA3ADC0DBEA47
+ 27CE94B5A5358E625B1F01DE33B7D4AE4E128829DB8F1129F20FE88DBFCB7FE8
+ C536191AF1313DC245B8DC648DE288B76BAEABB664791DE59CF5E63F7D493374
+ 89931636FE5548E5CC900FFAFC0D98E2DB3157503D94A4A2BB006C41B90FA53A
+ 5A69954014C00A025C06CDB05D800A873D030A592D60B515EBDF675714A62432
+ 0E33AE6E2F0CABE30EA7397B9DB6D4C476345567F61ADB1FD7F355C3B3997975
+ 09A25DE0392D2A83147159416BAEA08D7F49807C5BFFA3E5EB02C6501381778A
+ F9D26AFA8E72F40A9612C2E3B442F895345C9364AF375A5EFF3032BE0D11B440
+ 3D301DCE6464E24F38F3F75D2089CCD1EDADC85726B116AD13499E67BD64B122
+ 93EFD8FD2E481B51BFC14D6C906BB1B433F402E5340F964E45C82F84939C4FA6
+ EF46BF638C7C181AC7CA38BA43F43A59A970B3844A784BFCE612656027D015E3
+ FE52A870F8003DE0B3D957D610669E7A16B231C89889AEED9CAEF026EC83511E
+ 4D366A2FB7B27BAAB08E891725DBD2FE629EF71D1D2E4EAE0F6BAB6B4F9F4B36
+ 86D515B398C18DA12F0C968D102304EC69215F3C8520751A82F9B6F0DA26886C
+ 58AD3DFE002008308E0B0A5E2221DAB4E5926E384844C24E6443ABF6923C6D8A
+ 94B13691241C5645FE1A58AB580CC3BDC5EFE27639002D55C7CAEC172E87C08E
+ 88301F066E05DFF8A2FCD8919CDDCC9A77D7A27C690AFF6502AEEE8A6F0EB510
+ D6B12DFBCF6B599E3D68F6C8C4177710C85DC18AB5FF7B659020212C8E5FFD14
+ ECF70C24D59E5C25D1995B87D5B422163B0AAB9E059615F9EB2B2A805AC370E4
+ 5E09B27D7C8F55207084D59D1EF49DE1910D90000A4AB99617BB1FB7FD5A16B9
+ 9BFEC4510E4A7A08329624F437A48F2131CFE7E52C71EC60391F440978342DA2
+ 9AC01EA8935BB444436008109F423268CCF8BC468E5FA7718B0E46F2DFD81EC7
+ B7CA83C939F95B7497EC8A7DF0829113E720876FDD94E07665F39986695436C4
+ 43CD509D2B4FF3B78F7D6758F3D193E341CA8E617697EE47065D641AE93C5519
+ 589EA8FD039EA66ABC91837713795F93D0C1A5091A95746FAA1B6E70C2CF8F53
+ C5752934EF9401A74FA39A3CBCA3A97ECECBCFFFE3923A7421220EF5741EBA53
+ 11F684CA2772AEB595168342AF0D638F0EF8D81E9AD907662C2D7BAD0C042DF1
+ 637D15E434E76B75601864A1E2C92CD93728C23F5B50810B5CA32BA7BD876D56
+ A0C21A24FBB7E34C92CB1789E1CE4C01F67783B8B1A6EAE9B0902CAAC2ED640C
+ EC932453CAF592A51C61D544915206C32364273C7069FAAB8AD4CD88DBD2F4CC
+ BC63975566BB70093812F7703073DC63DE9967A0E2BE1636E9A5B96075D6B123
+ 3ACEC1ECEED33DE7C6C2691AC86C9CE1829F2139F0A7CF84F36DE89CF2B26DDB
+ 324C94F2216C14CB0311E11FC05DF1A3AD68A68E28018BD89C4552BF58D94873
+ 03AE682F197D8BAC2215FA66EB1FDC278E0959D39F0A0A0DD709707CCA242FC5
+ D20C275C9FB45EB7C4FC1DEB512E5ED74C279C76367279782B766069A5D40541
+ EA3727EDB0BF53FD330262C5A111CA7F832482128C2E86148D222C4505ECF019
+ 86303D389742CEF7567626E830EAE21726E4530763E213D090BA52417238D196
+ E9CB44786A22539FE00E7520EA799BFA232ABF75F987C5A3111BFFAB59812217
+ EEB48AC9C4E796FD75E34AF650F604A7221378FE601E8EBF6F773911CE0E181F
+ 4444756B9D4B6734F246B9BB22243A6D2D9C107B010D9BF7B7C875CF77C45F32
+ F0F117898EF6B5C5772BC24621E9611F449CE3FB3531217AAB661F818DDD5818
+ B27E9A829DD2E02F58AC20094F0B03F9EAE12741370BF0615BCB7BB6A4A31774
+ EE3BC414B8353169193F04EA19A369622CAC88B12F96F49F32832A3DB0625803
+ 0CAE5B549A19686C12144AF2F61D56FEB9E309C22079E588729A798B71E7E4AB
+ 8D120F496077B5502EEB9671E1A03F686B465432CD826B93F352306AB7B6E6FE
+ 5B96FF9B99056E8CFB0A0CB531C6C8AC03F389D16A8A8227367A4EDA16A58E08
+ CD832377CA9F357DCAD04B89DC92EC206EB02EC2D447A7CB0EBED3565F32AE09
+ 95440862C4FD12896A3D20FE75FDB856E73D6DECBE760AC588FE15BB6EE22150
+ 02D52E17376F98FFDC89C2E65BEFBC5C66A808BD94C66359E9B1425CC4A87D6D
+ 15139E8A2CE29E56C616F0B2EA0334A8CF195E9228962F4E54E189C1762FCFA5
+ E9CA25D4E5D92B047D3417880CA901DA337500F7C2E33331E646162CABD84720
+ D0188B4901763AE039A1C900F84E848E872C3F19717B5B89462A40ADEE83AFA6
+ 83ED2DE12815AB7440C53E3B67C66D4037E50E23B7C7E4CD63E60783F538D02E
+ E8908F859496511AF190EC1EE32475A660E5F73C2D818D86EEAA33AEDDB38374
+ 94CB37935FA5F7FF0D5E8FB1AA7293614988779FC8D3DBBF71B91D15BB19CAEF
+ 5839525EF2B70604B84B8BE674A5F6725A0BCEE85B9CC23E875EB08A291F6A28
+ 0F86ED2E23EC07EF532EACC1EBBEA8D8D9813C8847A1F43FAB7FBFDCB6019803
+ B0DFB5E77620913DA0843A8A9DD07D58A2D33383028CD0A3BDE4D9F5E8E77BBC
+ 110FF66CA1A46C3CAA035935DB6B4DA5D402C941758CD69DA3287868DE48072F
+ 690F53CC6EA311572F300A19E7AEB562F71130F5E933DB63AE4DE2FC18445786
+ 49457205106E73CBF9872CDF2A33854298B686C53D214366BACE26A52455549F
+ 4A2049DA836F9C7738C61463D65929E2D2D5D18D7AE320776F2AB9957CFC68FD
+ D34BA755F01DF7E875F0D914A253F6D79A7A752FDD54EEFBBC901566ED996D9B
+ 96A102A85311DA55167632C052273BE2ACC9AD8247F584EFBBFE0E0F8ADAE707
+ F806A43D0F13CCA1D49BD5890408CA2982F165758B57F97ECFFE98967167BB53
+ B2D54FD70D1A230B54C7CD9445F8A3B219D87795013FE8D5027CB7FD4A7483F8
+ 73B5B95AEF96670D448DE74971B2002FB0597F5DAA0781183DF734486A53E995
+ 079C7B0E0C5A527DCCEBBCE145E7F29AE385E98C4F9F649ED31BCFD1D2996235
+ B46DAEC5B3B02FDEFCC298F1946CAAADCB2EBC5EC2F682CA702C59C13CC04AB4
+ 7F141CD78AD64262FB36D5BFB0B85DD410EB9BFCA65D4C2DD256C01E119E7C74
+ 2301E949EF1F7AB1D8853565A268175AA8755F6CCAD8F2CD309F3140889A8972
+ 2210C58E020CABC064A83547FA88F6294F4AD3DCD26326000AE2B71A32A9DD88
+ 9065875144FC87921BD16520A033B5295539269ACFBF00B3A231552AE21CAE0A
+ F628C03F7D231F8BD250318351A856688A75191FB843642AE55ABD0593641BA9
+ 5C0B8A3D9709EEA4D643BF29625A7C5858DED2DCB516AB20BE940E9FB4F61793
+ 4F97347D2C7FE13227CAB7E7FDDCA0CCEE3E0E4069FC9576566BAC22E8ADB935
+ 788230B84EC7C4442037AC8F4584C660B94BE1D6CB3E160D3D5A4B9029B40D01
+ 24A3E1553A22A9E1D263338BD212FF63D9BCFB3DF18B27B6AC3C19AB3FEB3795
+ B8770A63CFE79C1CEDE1D257409FB133A14CC354DD0363B673E6E38B028D1B78
+ 925AAC8C1944A9C92416238D29E0EFF9688256713000D9FD8413235729C160A6
+ 0F9268B8C560A7B7A9C166C8604168063509B6292C788E879C6F8707CF1A6E39
+ D7C52449DE518A87EB40C5A9F9D38DE9173395A5BA12F23B9FD66D4AD799C0E3
+ E033C70A470BCAD1CD85BDA04B23CF10D8BCFFFD1FE0530985FCE38F0BC337A6
+ 9A29839F309E55756912B60DE680AE61BB4AB797A6C8BFC8DE00529A36BE9B26
+ 238F8504B0D05CC5E38D8F08F1CE26D36B75E5D9D433512A6075BF92BBD92120
+ E85BD480F913880B269867E1BE12D963172DD4AC6BA0338B0C820A6AD8D9B656
+ 084DDC4CBACAC5794E5789BD1AC182DA6735B42391D7F03C1BC8A62723D33ADB
+ 3544013348C24B737133A2808B972338B59417BA73EDA3272FF56C888B3910B8
+ 3C7F0DF26F0652BC18359B0927F17CBFC0CB151AAE21375E4145547C2091A241
+ 5F4C79583216BD01CEF34F42080999002A39981C381CD4FEEEB7D5FF83D01758
+ B3418BC83A29BD3A0D32A2840A8B7264B7DE5D8019ECDDE18ED5B0F6C6DC5A5A
+ A64380DE281957E4D00B57E789B9C484F049AA93E3D62289661562CCD3C1532E
+ E83EBDB19F1F1651E6D09C640471331C9BC30CB0F309BFCC4DB339A3FD22CE37
+ EC0DE400566583C760CC2E42E18EF3BA45F3CEDBFBA56282630A411ECB6DB65D
+ 5F94CEA00333F471B5CE7187BAB0F1E19AE44D400BA8D67683160FD68BF1E2F2
+ A0B0D4742A0E1791B2B8215C3481318263D72445C1C46FDCCBE2A394D534D482
+ 6D4431D0EA26DFD0C385E904F7DE8E1152081C2DEBFDDAAB7016641E8246455A
+ 338203C9863ADBDC584D536A43259E79B27A5043C1B248813E6009751D0EF91E
+ 5F82B0833D512BD31E45967F344338EE05E0EF51579A1B6764039C77533F926A
+ 1FCEF61CF237F5ACA5BF26C8147EF61CAB0007B071A64F1F9191BA374CC8F1B7
+ BCB93343D0BE342588E0F098A989349E618D4CD5BED5FBFA301B2EDD077900E3
+ 04C919D5B6F92CE997325C2E72A415FE1D16B69BEE620CDE17254DDC510FDCCE
+ DA9A4EC064E386683C8C46C8CAC7DD8DE608335F9AD79999626C9014A23FFE9D
+ 77753BF8DF52D5E13BC374F853BE7122436F184D502F6D7E2686231AB76BE849
+ EC2AEB308461EFA0B60D342757C9B401B645ADAD98724B5A90EC684C259A440F
+ CFDD2D725EE0721B843682A5D21BEBA4F4F7F613BB026942C6C67BC28C2BAF8D
+ 86A1B771996787888713524E2EB29A09B8F9A88EBD53D31D5123E8DB0D008939
+ 1E175E8E021E605464782D5FE01389DDB09CD3C3ECCB7B8AE26367D28E2045EB
+ 44924D111B714BFB4A70B052AA7DDA532DA240F13FA13A2DB889188071B4CDDF
+ 71FA3544C581B24DBF7B8D533E8ECC92570AEE7FC0B9485E21199097E3A20BA6
+ 7420659364A624117A2EFD12761169D98F426733F1EE7786D50B14726EE395AF
+ C62C5C34523EC441CA2E9C00D585DEAA0230E2BB74090ACBE659C617A854F827
+ 26A867A40BE3623F57474D2126A53FBDC208BBDA1BB34D2C42579EF5FF9E0D0D
+ 5591C5C56E37EDA90B5B569CB4670969523AB26C6C01B24E1766E066ED371C0B
+ 4330AFACDEF310D05CFB9839AE022C6B11E01CD0406F59894DEC5212228208B8
+ 6869B5BF4DE40AD2FC90FC9248284191B6C58CD3E4CC379C9D0C72B16E4009CE
+ 1439734B74B1B850F3C62D7DF80F84C6786673F948ED5370875B6D7CCE0CB9C8
+ B5D6B9B52F5864798C4D549CDE2EAFAE6DC6561231305EC10B7EDF036A0B7376
+ EB5F5E1918D85B8D473BC971C64E53ADE7F1C6F6B5725029AD4A61FF9F41106E
+ B3BA9B9EDCA368D5262A2EFA64AE3C02A95B89E344F4C5695EC935EFDB6A82E2
+ 1F7D558AB7790F65397DC347890ACEC7C398D9B58EC1B546A269884708DD9869
+ D30D0FCFC6F07CFC26CC0D0020CFAD6CFB71D6A12318025E7B7B4D3343944EA4
+ 29FECACDAFF65AF32EE2BDC260DDB07B796FB9A428C67112A1128AD751158428
+ BFD7E231E513635D07F39238E14CD6FB9E8215BB2BF94991D56DFB0619FEBED9
+ 5BB3857503BFE30EE27FB33FC278542E02D9444E1448A1CBC1B293DCF7D067A0
+ 62A3DEA1DADAA33D6A886C258324EED976B363ACE3017EEB1BF3BCC2650AEE5D
+ CE9BF882A1A0E8EAA367B11D59B20BE5D66B137DDF5A512EB369D72D81ABFE98
+ 83C3B49FA3308E40FB47B037041E97F96BE7433665D1D73F17DF6BF2271AE421
+ EC2C297BBCC2FFB6ECE4E46BCC1ADD751BAB46F482368BB3A4E2CFD907307C23
+ DD6743C9C48904C4C621373FC68F2A4FA949D80D85F0D0069D5CFCCEFD50E626
+ 5DF2C5E1FCC38F9182FCA8EB4541A66A2C57D945215D154A409F2C1D12F3B79E
+ EF196D1F538073074280CED6C931F941B2DE625CCB3574ECABD1959BB996F262
+ D7443B23D9FA814B01B5F64489A0257035A7FF5C68A5AD56868A1BADDF29BE6E
+ 046B7D8835C8884F36F8D04AF8BE351ADE8552B0DE6CF672BBC75FC8EC0BA66F
+ 2502DE85BDAA9F47296A60919988859EEFCC5FB9D8698D5321FE517C16C4B3EF
+ 88328A2BD5850F4BE6DAB38F3906B17E5B70FFCE2439FE569783A34680D65CF8
+ D185081E33953FE6D96E368A0275C3E63620CC989747F7420AA98E6B14224ED6
+ 88E26870F5E0D4EB55CB2AB8936CBB665D3F6FB8D3E57A2A981BF437584E2379
+ BD6F35564B488C7610D709C2F77743840EC3CB2A03EE9D23E7AC051B92E4A6B2
+ E1569C734B6C8AFC4EE8A14BBA0543DE13B76D081FB6C8A3297DFC1149CEC39C
+ DC6437729DB3EF60C0050C2A7AB1A4A732508F6082B81063B45109C4A8A5E2F4
+ B50A57A324B824F64CD69FF37C3856801DA0512796C4098FCB1AB5EC2577D73E
+ 0036AAEE4354658C27C4F34DD42406EA3142DF61EB4500EA7F4913DD5A33D4D0
+ B08C78A43B268F4D8CAE440FEFA5D9C43ABCBC37EB3EE81175530B60B6A7BA45
+ C28F48717B0831F0A9E4E1F1B4534603D9C1FF06376FDA2434F3F51E59EFF6B6
+ 949F432A4C8FCBC2E42D94D39942670918DB0F5E30E1F0C43963AFBC1E1805A5
+ 58662CEDC8C6AE336F7BF10946DBA47895FB594DAB2F702599018264B172064E
+ D9DB51C57900BB3F2BB613D535A1A0E90D72B47ECBB20EF15E41BCDD69B4F6A0
+ DBD23620F2EFA746CFD4E2E0586B191D35FFD1BE741DA9716D8DF76BE3CDB250
+ D422AD931CE503A5711667D4102EEECDFAC0BBB27CBEE80D571BA4CF55D4EECA
+ CD656FE51C05333B6A54C20557A8ADAE0E560C7F6855C20355628BE564897C7A
+ 805928087603FBC672023A57F3AAC5E5433D428D6587380E61D7AE0C392F0422
+ 4E371790601867A0828421D308BD33E1912F7BCEC6F9676EC366A1A83AE73E6C
+ 1398CF331A8D4FCFA411C912365DF375FE34F2160A86626C14F210B6C23F325E
+ B32EC144604B2F95ABE78378367BBF15BC8348309A33BFA645443ED8CB924438
+ BBC5A78C7ACF0EE8852AF36510C51E0A159D545699764FE7DC7F18B0BEBCEC1E
+ 7E3541F0E5E5D3D566D962B55DF8F024239C1E25560A4511507A78BA7A60A242
+ D9A20085A6C1ABFD63AA74F77A7938A525D97BAAB29B70C08374E35AE18631AA
+ 2737C3B9D120716BC6689FEE0D788EF588610311567955BF5B9A8A7BA6512B81
+ 992A1ED3CD580ED21620F5AE680D78953FCF188E950333E3DFE43002E5B8DF1F
+ BBD866CBDBC54BC5160E53EE38171F56728F24A350AA7843F8D0784526F15A4B
+ 70319BA3A303CEE0DC195EFCA8D87B52551C14484B741352530D639A28627F8B
+ C0DC2EB5B51BF3EE8C66E124B4F9157D2223E0C64D030C9CBA2B54C82E1E1DE6
+ D5C5CB8EA61DF2B704B76F6527E88EEB3C0AE9A876745B7309561F6A738D13DA
+ 3C1566C0E5BFD3C45740B85EBC2CA5ADA4D6CF75C4364505C451AE2F04299A64
+ CFEE478708472B69CB1AB52C3B24B1EC482B4434F20CB7BFBEE0F8E833497646
+ F307BD5CBBB15CF32B0A5CA2C38F80C56AEDEC2BF5D4169695519AC14ADE4C80
+ 1249AC467F47FCA3A9A37A0C66779D7DA271A6D7F4BDC8794E9278BD1B076764
+ 8CBD9DE70477B70D34E0CA6265165A609CE91CCB7409DECA531D459B078EC038
+ F5401CD25F7A3B12F67CC3A6936FE1B9DF4C38E7745F7B5E6F9E8A539435CEA4
+ 311DA0ED2DEA1C6BCEBA6F05F88847A7CB0C20CBC3F7B16EBAEDA01CE6C13864
+ 290A26230DB8C78B4DDFB67836E856EDAA76CDEE3A7A1DDB42228D5D9358DE67
+ 480DCD381AF60A775E5874E88A0DAC17B4B5A36BA7125CEC348672D06AE5E21E
+ 60518BD5C5CA5EC09EE111D93D186E21865FE6E3D9695098A899AC5A8063D4FC
+ C82FC6FF54B7480D61B172A29225FE46AEEFB24057C274AFFBCCAEF3CF8C2AEE
+ E78BA31EA7260D988638E6E11B4189FB731D40CC74F2248E07382582B0962348
+ EBF21432733766BFD5778CC0F1D2D78DCA3653D69B64CD81FA7E2AB430ACC7C4
+ B4E7EFA2519A98F2866BDB77DBDB61F2B1289AEEE7E65CDEEF2F1D86157E9F5C
+ 0F65B0875A6ACF4ABBEE9755A7C821ADF44ADE983AD9FA233EE3A3B958796C36
+ 03D35C8A35D513E7C037617F95F9860CC68F6A3419F68CE1844030C16267418D
+ CF15CE6EC4FEDC1759DAD08CD4D330CCCDD86D1F216C06D3C5FD887FA2703BA5
+ 1033F1FDAE412AAC7270F56B591B5B19B2D14B59C4E266D37E54EE8CF818B88F
+ EB514EB83DF8A7CCE1437D8D26FF95592752C90E5047E6B9A50ECE8149DCD1A4
+ 8F91D7AA549A34B3D380AA1006F3DB833D7AE077593A579D44929A3A7795EB83
+ DF2BFF37556237B9200C0CDCE6E314BB7F2AEFFA255AFBAB86C8751051A325F3
+ C6BBC625E98B7F79839B742EFEA7259F33C1F824731334538F6FA855E7931055
+ 28D1AA43A5BDBFEF56A969BC7F507126FD059FFCBA223247903510A5F638A531
+ 57E92629FE243903499617BE09F549E337000B141110F32BCDA095151A4A422E
+ C1EAE405AFAE2B3686838CFFD4854361D046995014BBD7AE4455239DFDA38302
+ E7A6F14159208668224479F20643FD37ED5FFB62C7042A2DDFCD8E6475DAAE50
+ 4C233599E2117E1777AF9E1EF2C2AC1747F884DC9671A81051B5D0D69E6DB6D4
+ CC14D7D561C1DE362BB6F27AED1B2D09556234705503482AF68857A36CF3946C
+ BF81B6853F6F76670ACA49708EFFDA4BE69FB5667D207261B18E5B60502369F1
+ 92E2BC9E62AEF82D65FA0BAFFB92982681DA59699EBFA9E5AF2F9FFA99B67AAF
+ 36E658B6392AC9FA6320FA88EEFC8197E13430C7F2D8E8E9FCE2F0546A844FE2
+ FF5CD11E1EEFE8C45ECC9FE4B89E323DF4319F2FA4B4503D6FB1768A3E20F266
+ ABCCDDA32339E7591D415D3D068770F2AC589193A8A11CC30DAB6D49BB2806C8
+ 2F8996AEC8AC92DF98DACD2EBB7703199F0BF3742CC90FA59CE72D068410D320
+ B7EFAD015D30DB7033F01742210BC61AC41463EECB1E5BA62B5DD94B4CDB5BFA
+ 9A6B46B4470DA28B988537E9B2683157D4AAD3D0EFD97C069237AC2A98F204E2
+ 8B2AFE5A99027BED424E374E69121AB15231B7C8E7FF34B9043B640024FE772A
+ 8BD18AF96C99EDCA6F80DCCC58A77ED41CE2475927F72F6282B78ECF49057BDD
+ CCE1AED834E65A057A3CFBC6345C81D46BA3AE1FF2EF82356A32B84D6225D33C
+ 8C5CC328FA52BF8B1E16138BC3545DD9B2A91F90012D28ADA35E5D460AD95CBC
+ DF171141D5F0ED26BF68B34913A65273A2CAF7E8B6AC177A1A93FFE4C387AC16
+ 6E6898628C871E47C59B7DFA56A780AC30085E3D77422F11711D6D7704A6EBC6
+ B210C72CC339D0BFD6835AB8D771D9B9162BF776DEDEC43B3E9F9EE047397359
+ CFEA2AE8539719E7DA75B0E9DAAF5E4B3A4A7677C40A5BA94B03E9E07C4CD6C5
+ BFC68BFB1B51E46EB6E9C7D235E0B4B5FB105B60FF06CFFB8906F5182B4A82F7
+ 7DB81FB90A362CC653F976615A6380F00B384338F55423CD087B59D869EBA9BD
+ A10D3BD2D40CD80C5DA6FEA57DC70B263BBCAAFD8B7232ABB4147DDD4DCCC866
+ 04F9C7F824F6BBA7EC9356C22879DC87EBA87A724E4F7D65758AD433D1E7DBE5
+ B5674D6C57AB24
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMCSC10
+ %!PS-AdobeFont-1.1: CMCSC10 1.0
+ %%CreationDate: 1991 Aug 18 17:46:49
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMCSC10) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMCSC10 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 98 /b put
+ dup 99 /c put
+ dup 103 /g put
+ dup 104 /h put
+ dup 109 /m put
+ dup 111 /o put
+ dup 114 /r put
+ dup 115 /s put
+ dup 117 /u put
+ readonly def
+ /FontBBox{14 -250 1077 750}readonly def
+ /UniqueID 5000772 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A30EB76029337
+ 900ECFB1390CA5C0C3A04528044F266BA17BE487C79B94FAC6D6484684C5BFEA
+ 87BCCC77D40AD11552035E95E3007126418ED49B68468B38A14E88E68A267B98
+ 076F1C9769A5AFBC285E5B158EAC9F926F1D6C0B8F1D57D9C31D25AE27123518
+ 9D2CD92E5689E0213089BD268DA5E47525CB8EABAA4B78A15AEA34705889AB3A
+ FFB8953B5B3482E52BFA0940630ADF8C0AC2177D907324299EE980E850F203CD
+ B627962F43D5A678C44243CDE97853BDC6AB45FD5C09AD274DAF89929F583CC9
+ CCC24BDFC68B92111055ABA5F26D2DC67C70906F71C2957701D65AE746A60C30
+ 40E6CB24B97FCDAD0487AE38A201FBF0E41BABD2181981A71940F1E707F91E5D
+ C8CA50CB16D8702D188E56D014D92F76CE0B52ABDB9110E32438D2BBF3E6A40B
+ 7B005F10BB437812CAC6ED2996F7606DC962C4FDE207FF322782C343DF44CEC5
+ FF06A55C630C20E9AE1B0D1C5673753C43BA0767D65D1B451CC6380D8BB3C4DC
+ 81E8FD8AA79BE993218686F29D3CD925566DD587F541A0DA1B1CC3BCEA2E6C7D
+ 5E1016F6917A871F1BBAD96AF9E867735017119A381FCF33EB2D3E1E7093FD90
+ CDB0CED4818CFD9E201A03430CEC713620BE0D3254158931FB657C6AD4B2482A
+ 0E7D070D7497892E9E942DF58E88CAF0C8221BF36BF7C435BF2C683A4A2EF4CB
+ E85820A8AD3486155A40143011BA9D76297F46DEF69ECA4596D6E4CAABF84091
+ 22A96A4BC78A8DD072FEB759A68A44BE1164638B6D952147EE3C628F9A022060
+ 1D1941E73310943FA782532ABB1116532AD67AEFE0758C051241E301C7E13A98
+ 6447EB0180BF6799814BEA4DC0F727D0A40B7BC3B1269CDE174453D6A3C4479C
+ 146001CF717DE25AC1BE5AEA5F2F1C17719251C429D3AED19EF8CFF1AE213A74
+ D24DB78BEB452AA34E8D761695A73179A96DAD7904530CF1A623C6F0ACE1A8E6
+ E6B2E53D0B5A98B72DCF0D102E200AE46E81869D048E2FF43827094795935B30
+ 3F22F65A63C4FCF42D7DD225B1559DA4430B476E2D198F649658580EB8A1B734
+ 3656C1FF865BED7977727D7BA6C0A1BA5C0BB2CBED52C2EF6ABBDAA425EF91F3
+ 06B1C52DB14BFD9612E8855DD1D304114C5C850C0D0AD92D5EC25BEA4A5B52C3
+ 264464DCDA2DB2CFDBD8B2A1C40A95CD3E3643CD5E30DA493196985A187D2D1F
+ EE76321B94025E298D2398300135356148793CB63D28503882041258DE5576CB
+ 225F2EE7BB44C9D70962559A2DDA695EDFCFADBE9B0F24A881AFA65209564FCE
+ E6389E23F3BBC936D1863D90B5B640BEBDC1296B1837208F90A952283506AB0B
+ F48AFF329C37E010F7E816C06EBAEA6E2C58B49126B4AC5C5885E08302D8176A
+ 5FA6C3A1B61976B6F998C852E4BC82A5D0F2B94F61D8D08AD28DE2F94D7E4AB8
+ 573120299C03E30473EE6092A62369B2C9B4CF65D96923E245E10C6D2BFBDE8C
+ CB612D06177E0127195A413C1BE513AB02A6F8664F6E90360D569A3AAEC253A9
+ A324376980E2154364FE2967C8153B474DC8A09744CB499C2CFD79C18E0A5951
+ 776AF9616D80ABEC68E7A498767828528E46F58A81D28B087FDDC8F4568C98A4
+ 644BB9CF860A3BA392D4BC6EABD044AC5721C02D238FB32710457778A5BED422
+ 37BAC54C02807FC39C7119E2A0036FEB4E149040EA12B3162C129C932BE37E91
+ CAD03BFF02041F51E46A49687A7ED101A782AF3F3D82C36D40A0061EA2C46E19
+ 4154AA6B280002D981A479A6068D669872F2A39A54110AAF68FC801D58585A18
+ 7A1BD3B5CB89417A62DFC786625405E52E74855853B5F21564EC7ADF6B489725
+ A2E5E44966F2D1D1121A60D1E5031F5E3A2BE4EF2DB9DE4D0BA1B70119E27A0B
+ ACB2F9A65F02772950DB491CB36F9469D3EA2BA9881895EA9E2A71DE80C6E04A
+ B35130371BC692E3C370B3BF51CE5A5275E8C0C860FD597CCB8EF78BC89750DB
+ 3BDF403D28D8B42F786D7E041A780E93D03FF6A0BA2714596C799889F41EE6B4
+ A00B23E5D87A04A1D05569272199D1EAAD1F316FBB8F83DDC5AEA9CA1ADA049D
+ CA105024F7612E5EA6971E2C8D3DE70517C26BF583497A0FE8873900A5AEAF75
+ 72E6D13C9F70CD980474DD5CE2FCEB75272E377AAC4709ADEA39869AD9C337C3
+ 785CCC20D85E58ADE45696C589BC1AF6C035BF280E326A6970808BA986A498AD
+ 989C38D700D1A51F771A8979B871BC0F9022331E956C47A445CBA9CC0C1A5E8A
+ 0D0FDF23DFA67A8DAA5CAE0EA80C5F70916FEE1D54292888464D673DDFD1F626
+ F37A1418B698396A3DA8B8E8DB1AE0F76C483E948C766FBF998A78F09529ABB2
+ 09FCF371A8CD760FE1EF593B090633EADE96CD6B836050771E731AA56AB0E5F9
+ AE4338074FEC99D09818E76A53982A98FCCC259B05F42061D62DABD443B8E581
+ 94BBDE62C2A2F638C8FEFEC079D3416016452C1D89DAB31501583D714D94E295
+ 780143AB78C425C107A3A10D0BA4FBB149A043FBC35227FDB1AA7C802516018E
+ 73A3DBFA80601B9755136C5B6277989B617B1F7F337F483273814AAB5A97AB6E
+ 81CFABB681E87691C87B4EE6F01073A387FC03E58EAB9058D1EC45C877CA6154
+ 21FE826FB3715D542CCC9B792774C914DAA73ACDB9A960F3F7BA16C288C28CCC
+ 232E6067114261917F42BD37437C011B9E830BACE60CFCDFB1D18050423DA95D
+ 3AD776296D566599A1D089F50C20BE8EE33395CB6CF2A4EEE54442EDDF844B5B
+ 7E3FD8F9AB5F48AD36CC6A0023990776050FC607AA3902149AE66A057516DE63
+ D5C5E7605B574B85FFE4CA4FAB4FC069FF237B2664CCE2D5D2F89BA071D81ABD
+ 911D1831DF0E05D0A0CCD2D3ABE0F4E52E529F2047F67762B6F30B22FEA887FC
+ 14425A80944A7D63402A7A7934F493DBE6875D7D0A1DEF167FE3B37DD7DE9E16
+ 38E26EC0F8D8E92F4FC62BE06FFA3C65A09863A1000EE929BF984456D424B519
+ 90FD75DF937C8DFF1A652D9B200431753D65CB7DACB4CD44D98F87B0987A7FEA
+ A1EE74C2083120DF71057AC4793804C09FC4422D9B3C69A6497CB2B4B7C95F45
+ B8F90B98ACC3AA54E487A02A19304C218013688532771D38606024DDA84A5216
+ 4B9CFE750B728F7CBD930F3085D6FFD154641E88A078110D050CD0777BAB2511
+ BCA801F6F1D51C30EC051E2DB12C680105B465CE96D7690892B1263C9E285893
+ CCB7BF73F7B5B58D6D63673B86A1197B1C09F5C46180748FAC28007F8FF7A37F
+ 78785F1BEF17F91C3E4B5C3645FF3903C258198D47EFD249C4247210E75F1AA5
+ E51944E3862BA99C10ED1C6215996CFCBB9D4613E82496F6C69FFCA7BB6115DE
+ 3584E0594F1CA295CB481CB2390F8970A532EC33DBEC73B6B8FE
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMSY8
+ %!PS-AdobeFont-1.1: CMSY8 1.0
+ %%CreationDate: 1991 Aug 15 07:22:10
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMSY8) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.035 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMSY8 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 106 /bar put
+ readonly def
+ /FontBBox{-30 -955 1185 779}readonly def
+ /UniqueID 5000818 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+ 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+ A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+ E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+ 221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBB2A7C1B5D8E7E8AA0
+ 5B10EA43D6A8ED61AF5B23D49920D8F79DAB6A59062134D84AC0100187A6CD1F
+ 80F5DDD9D222ACB1C23326A7656A635C4A241CCD32CBFDF8363206B8AA36E107
+ 1477F5496111E055C7491002AFF272E46ECC46422F0380D093284870022523FB
+ DA1716CC4F2E2CCAD5F173FCBE6EDDB874AD255CD5E5C0F86214393FCB5F5C20
+ 9C3C2BB5886E36FC3CCC21483C3AC193485A46E9D22BD7201894E4D45ADD9BF1
+ CC5CF6A5010B5654AC0BE0DA903DB563B13840BA3015F72E51E3BC80156388BA
+ F83C7D393392BCBC227771CDCB976E93302531886DDA73EBC9178917EFD0C20B
+ 133F1E59A9783D4C5B131F8CA382909A8C7274549BF8F3D02BED89C2AAA0CB40
+ C9A78AA980B2FAF4DA4FCCCD53B411E8AEC87BF9726470F0A623A86F1FDE049C
+ 5FCDC80B88A9C057878D54A6467C3336637D253796A9ADB50A67F03CBC7C6431
+ F57ED0EFE5D66B301B8884523DDB74063440354B245226786A049BC18A32F2F2
+ C30BD1E40272C7BE8333D35316A52B6A581632D59FA94253ECDE268CA209A1AD
+ 70CABF08217906289C96A9A631192DB9EBFCBE3B1DEFA44F756F4907A2204CEF
+ CD01892C86
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMBX8
+ %!PS-AdobeFont-1.1: CMBX8 1.0
+ %%CreationDate: 1991 Aug 20 16:36:07
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMBX8) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Bold) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMBX8 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 35 /numbersign put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 45 /hyphen put
+ dup 65 /A put
+ dup 66 /B put
+ dup 67 /C put
+ dup 68 /D put
+ dup 73 /I put
+ dup 76 /L put
+ dup 77 /M put
+ dup 78 /N put
+ dup 79 /O put
+ dup 83 /S put
+ dup 84 /T put
+ dup 85 /U put
+ dup 97 /a put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 104 /h put
+ dup 105 /i put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 120 /x put
+ dup 121 /y put
+ dup 122 /z put
+ readonly def
+ /FontBBox{-59 -250 1235 750}readonly def
+ /UniqueID 5000766 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F05C11F9A72F5DA508C30BC4BF52C8B1EC5FB
+ 7F9DDDD0964A6D59193A389D490DAA6F6ACD02CF71C06802F3AE5A001F2B3A6D
+ EEB60E9DD26DBCE1D29C825A9BEFE3A6572E70DC7B60344C3E0C9C77ABE1804C
+ 7ED61C544F0B4A3D6C7662DE8575C07BED3F6DBA7D64A9C8613AA152B74A140E
+ AAD9B66E0FAEED6AF9D1820F361C1269A5E90519A3E6D40782E06778C0AFAA30
+ E8CEAB87054C4D156C1B14B4E8471D78648FDAC70A3B8ED474FA356393A77420
+ 4211F60E397D2FEFC6A8D91A80C84EB9E38E663249FB91D5C8A5CBA68BA04272
+ 5D5D42497E1CF5CA1E62EC2B139F5CD4D6318EBBA7AE28614D2D88709C2A3762
+ 611524B8A1FFC7B0FCBAF77AD8159C354F4887DB1A27781DE0A4BA7DF2CE2025
+ D9278CED48584E8E6BDF30BFD24284BA1DF828B637BF84A02908BBCED67372C9
+ EF44711BC2B1DA343C8D9D27A9745525C774F5D639B7AEC197CEEDD06FD27923
+ 35ED0D402AEEB51134665A47847429D91CF419CA9B09DC905F610F8DFC54E606
+ ADCDA19D5CC68A7BC7108EC9236C64205B23CE68B9BC38EF3E5BF9E0E6ADF404
+ 7365C8D0436609438C82EEB2F356F79186DDF6C1C797D3C278108B1767D15178
+ C4C3E8ADC2482BAB9536AE8419E5CF3EE1B6E53BDCE2A83E2E485F496A562C10
+ B3F5A131BB19D1E5414C86C5F995521076340536E10613E42779FA15EFDB451F
+ 53495CE8EFF239E4EC442E1439594549D45F5276F93D496C9AC712D762D0B702
+ E894290BA028837304AFDDD8BAA6564E9DC307A14A7A206550FADDC7784DE3BF
+ 3390188BBCDDD929C82B1D7B529553BA75ACF5B385D31EE3902D96B2B5DDFFF1
+ 9F0F90FD791E54128C1717F313486896868A34FAFF22E23CEF046D02C09E3EC1
+ B8CE4D8ED824C9B23EE2D47D5CEB2395802C52F2323BA272C75DDED2FF9E7CF1
+ C966C747B826165E51FB1F5B8FA870784A39C6E8D3BBA8676079F21DDA4B1C66
+ F150474270B7707DF27F36362BA7834CF0AB1747C6649D0D72215424A63F894B
+ 29B38084C2FC300A4209171E492E2931803C6BD7369EEDC4A2F2F21565CCF50C
+ 69135D50C1F3B5CB26E2C36C61D6561A332FB10CA35CA5048E60D5A5F5235A9A
+ C0D268BAB1235E90F54AAB4543D071E3E7F646EF5920AB3C75F05C950F210979
+ CB834200D0E419C488213824B3F04806CDA099DBA781275703817CFCE4F88772
+ EE2646E00A33AF43B1FB39165BB55F6C4B3B4B1745BB8B8745DE0EECB14C2FF9
+ C661CE7560CEEA98804B1E1D07C9D75E7DA313B80374A3581B8F878837DB17CD
+ 4247AC6D1A7488DF70F39EFE0E1154F3647E4ACE2D168E472D62E9B2CFC21E12
+ 0835CE09AF40D9746087E124E7BFD431AAB93521F87C6C708844EB21F89EDB44
+ 323CB3C87E67BCBB76656FCB354197D9EC4782A7393E0AB16CD62895BE25F8F0
+ 4D752576CF9461097A5777ED54C08B66097AAFFF0C49EF9C38EA25C19E379515
+ 63FCD59A9EFA62660D3E84FE5124EC9C3276B4CF638F9AD8B9EA698F5EA593CF
+ 35E74CD6D860626DA787A92C682200A1F3382B07EB60D1A0EE8E0BFBECD75FB7
+ 52AC3C3FC015B16E11D23BE04AAE9C55FBC48E140DFB16B6E72C0498F6EEA00D
+ 37D7026E8F97BE8B676AED3114DB825BD885C17A09EC484FE41791096186330E
+ 2EF00210E85F287FD2680FF3BD4D1B99F8CC079B46B4158273D24D0D69C5653D
+ 53FD3A62784ABD41AADED572D1CDF3617778F0922DD4D47F64910DC59CFCDE19
+ 6D72CAB8C0DA9681F6773ED368FA580B69F32050620FEB09958D4C2434876173
+ 53F5FF7045CFE9461414D3C000A33004BF3AE0A66B32177B1973596C5610D53D
+ 775023883634307029626F15913DB8E0ECFB7D02E15C847F345F35CEB765D9B0
+ B35375BE38C916C7F24AFF66950974569DC77ECAE5EA9E0EC59C65816ABC633B
+ 3B578820C391AD8805000BCA1FADAF3C2E654FFF2A007EC40BC69D77191141AC
+ 0CAFCC6FCD3EEB1D8B9CAC4CDE8212F8EEBA93BB9DA6C1BABBBCD0480799E851
+ 086ECD367E4A4AD50CCFC905C73962A27E70C0ABD83295E19156B59A2265BA7C
+ 9E924A10D2E9529A1C29A14ADE7F4D4D465A1296EA837AAB63D1426173B514D5
+ 26EFFE4F50E654B974CF3A0ECEE7E24C87B4D84EE2FC223DA46E008AE75A59A8
+ FB73A3CF3023E7BD4F80C36E7B44E753CEBA3D68EB8BB79182C1D1417A9AC92E
+ 0804BF00D37450CF1A0AF0B574B8E42756150D0FDD4A8897F4115FEFAC6906FD
+ C69304CC97BBC872488D00C70175F3CD60114C842ADD01AAE2AF0768E44A96BB
+ BD180065A3A81241611E4F3B0F7FB480D2640A78DEF3892EDDE6AA3E3B0EB3DD
+ A286C8D18CA993193D4A985EEC60CD55159AD31A24BE757045F5F57EDE54D4BE
+ CA6C50709934B8982F164A42C5665A85545B760FF2A4DDF5E62748006F0AFC0D
+ C4F90FB75FBB0B6F4C716670AE5B5DF363F81039C3E86693CD31B05AB758F66F
+ 3B585706F4DF28E5179B1CE4A510BA8A222BAD66640B4225B36B5DD1723BB716
+ 0D4E07E616058ECC3328C890DC7FAFD7F2B8A1AE0202DF8A425E622EE53A7CC3
+ 5B51928AEEA1C6320A487DED432456A34F9CCC02646454B26C2EB83D2FBCFF49
+ 016B54774A65B9E02396C41D36A0D63AA1A51014314ADA9EE9891FBC7A37E7AD
+ 0E928D0A2A6261A6C7549E6B8090A4FA83DFD0528F7AC3FD810D6D81B0C7D3BC
+ 65F1865180036F8CE4EE83ABA898EF0111DAD2A182A48713548C88C6DCCE7289
+ 7683514841B688B139D638AF74DF0678D35EF07B35FF29A52F5C8A248164137A
+ 4AA74BFFB54A8FA22982A62D9082BB9051191749A362CFEEECC6838184828059
+ F1FB7D1A9E38E0B928273748F7A0F31CC2DF69D87544B0873A7AEE250DC0909A
+ 5CA8482C6A3C61609AD597B25B7B1BC26BE853F40728DF615C395998D3D73D77
+ A88933C6E382481A37926B2E20BFC728A770F106E59D3565A3BB0C561F6535DB
+ 37EED73CD2E788F5F276768FC7AA141017DE43F30AF771D9CD7EA82FC56077C8
+ 2C171481A565FD9BFFA12C5A06F8403622094537B5BB31B6220B335ABFA2A24C
+ A7B36A5B72AD083D0BD0BC96A05B70B4F149F1862B5874C4E6B6866AABA912A7
+ 117788E7FA1989101F41C28BFDA4DA79958D0407EE8AB435459396CC97CD0D92
+ 5EECD8FA654200D455F08D457B1C28999BD2B2F654F06CE7962BC173B6EAE6B2
+ DDCA8A4BB4A7867CAE0B2139EE2AE8AFDAA19B0607522C362717BFF456CFE3C6
+ D7BE3F64B094E2F43754FA843EEDF8139A6850902E51834864B1C57279397210
+ C9193C8CD29C6C1378B16A514156383C09F6407A27D6D205DE421809E4B926E5
+ 87131B25F065397312027EDE49D843DB2527FE97E171B9EF6E66FC1B4D5F32BA
+ 9300A520A7B4B2EE91086595B4A08B31E25DACBAC0D6B05CE3297B3482CDDA57
+ 448BA0E62C650AD414936CA73314252239D6C795BE0FBBCE2C4BE2684F13FFD6
+ B5165A3F96871F50CE34B64716C085046CFC1746FB8609961195F00B535621DB
+ C9E1BA08FA03185466190C87C42A0B658321BF0E3220D876195C4B1905D86161
+ 548F77B51512B460B56E4BFF8C0F5D3A7C15DA64AB5658D8F63C841CFDB0C832
+ D5EDA3872A6CBC5B6B1724878B8F52253AECD6C7DD71A9878E31161009B1E2F6
+ DC378FE6A0E9F44289DC2E84126131604A804884AA2BD4B3858EE15AECEB1C85
+ 9A98116502F53BFA29062537CBCF690F36F413411D910ED3DEB1F51DBF2C1932
+ 9C27B1B89DC784B74D8B1733BEA4CC67FBB72FDB95CA7F28AEE3B5707FF492F2
+ FFA18690BC434C6250B56745A203C8DC6DDBB8F54AE973A2A6351D849F4AA310
+ 96DDD1995412C03A12C821E77316BFCC1046A134762E1A4A158323AD32DCC566
+ 51F1D4704C2304B9AF234B458BAAC4AE9A3748B0BE23810668C185D851DD30AA
+ C0E917DB16328D1241289683BA628537E59B1EFF4D7378A31CA2FBB1DC101BFE
+ 41BC3C914762A57CF428CD67C123F6AD39C5F9561B1F5A645204868E085D9552
+ C251288B940BBCDD571A94DEC7EAA4462765CBE3022EF04750B9B0F2E51EEA1F
+ EEE537E8EF306F4E36F1ADC852D0ED87C376745E01EDB7B0373C07EF11C841A9
+ 613F63754199B1435966ED11119C9B2B490F4BB80832A0119921FE07437356FA
+ 83F3C0BFC235399DB9206AAB609584408DB7655CA26C6C155F39F192D1E6DF94
+ 3D679A9CFD0347BF7E5BF2C2A75BC83C419411D6DC031B26C498058CA0BECE94
+ ECBDE113B417C93C5C80BCADDED2C03E89EA9A3D51B28048C942AC46E0ED51E9
+ 97243E9F485814CB8F468E07B0332F2B9A5F3F15EDCC5644DB75D3C5F24476A7
+ 44863FAA9A6D0DC81B39CAD92045EEA5F7D9D40C793818F73D5EE3C8873E027D
+ C09B3C0A4BFACDF34E4ADEAFE51FFEB9B1209534847D66F77AC42668660E2AC5
+ C2DFD7A4F94634310A2F45A92D128650A3676BFB311D696D4DC2601BB2CF9F45
+ 0297CDA06D40B79A7D7C091E5040CDC88E9CABBC604ABF835E97393FBBC068C4
+ F3BAB93A738A400A15605F611D798EE2EF6B1E52F0F7ABCD7767F06B900E0D0A
+ 44FBADFE1CC0BF3A744647B87342521E58702774D3B61694F2A17D888E7BEC67
+ 77BC7F04BAE84BCE09A639EA8E38CCDD2D4229AFDF05435EB3CCE2B25F448275
+ 5DB94606D1CCABED46A63664BEB419B8FCE32DE495BF5990BDB23BD02A165524
+ 58163E54A2C0D28947CC1617A702612B9BA9471A376C25D7F397FF8E49586BE9
+ E79B81F51B2F0742B5417CCC2F817BD14C4CB57D973CEDE060F98FFF4C5A22EF
+ 1BE8D9B729E6EEAA5784E22EF575B4952BD1988F23D91EC7EF307AE3B653843E
+ DEF62FC57C5004626A2700A2F8BB99410F4BD685201F39218D36B39CCDE70F00
+ 042B4525219FB21CA525ACD326E9A0407FE4CB113C29C7CA0C1972CB9299F0B5
+ 8719980445B39B05FAEF09C22E383E71DB431ED36F4EDD724A955A22B7931F4F
+ E6E76AF2EA22F9D8B9E0C1F913EA0C83572B79FF964E9EB6F525B122D25380BD
+ A28214B9A38C5774E6BBC385A60FAFFF699B537F72069BCE91CDD5251B6726BA
+ 749E087AE9B2DE3F97DB908D3C37A1B1924E6BAF8C7053FD8B50E166C8749610
+ 3B2DCCC79C5E25E7EEF2D7C75BE58661AF285D889868BF62AB6245093A4F3A3C
+ 00A3F7152E4BEC82721DD4DE6129B23D1D5B9AA89BAF42B2DBF96570BE89D3CB
+ B9A6C422C1B9939980EF2B678B1367BB57E296DC988648DBB5B98DC3AD9FF930
+ C7651738BA98E86C545CE3AF8BC8CB61615D5C4A2CA56C55DC74222CF6752902
+ 9E3072C93654BB9793261AF700B76E7E55C44886490E21C11A474427E42F4B9D
+ CDD316DAAA79CF8A5E2FEECDF79B70A047B85823A44B7721F805142A333CF93D
+ E9EAB205F8911190541D461A1F92FF41F206CCE3D1D1D173A6EE9CEEF84E6F0C
+ A68204BBDBB8B3A456707FAB80B23E28E44A0F8DC74CF75915ECA61276013227
+ 54B78990EDA651820262F12B3AEFFBF60C853E96FA818CEF05B5A71F89DA1825
+ A7FA037F01AFFCB751232AA189D050F40C69A702507DBF11054BB7543E86DF53
+ BADF1076C0371F30DF9DCD4F5AF1FE098B44ED894C46DF030701BAA90F3B9F5F
+ 56EC898BE7E3F37A862297FB24AD722BC2898374EF9C2061E75E34A0F7A459E0
+ 2AB8216A301753466198DD943D014EAE49C0951BDBC5CC7EE1AF3E1C47A2A4A8
+ C593A2F57126F0A48DF954AEBCD5DB30CC9E897299933CC7E4EAA22EEA4BD8AA
+ E4F329458AE294F5508AEF2A277DFB9EE2863B691076A068D36240774824D798
+ 4415986591580D106A665ABA56D153EA4249DEB1FD205934696FF23DDF0A05AD
+ 752229DCB34E049C7CC4195F211B58057D1D99048F458E614BDFC1D1779D6B55
+ 2BDD9E8BB127E60A13414895908404D8BBBB3EBF3EAFAFDAF89A4AA8C0D6F9DE
+ A2BDB9236B3BAE587C920942EC47820087F26CDFEE0BF9575E9EF69989E6C0E3
+ 5B2D2C350B2A2BBD19EBDCA38EDCD2F7A07DBFEAD80721BA656D683E6CCCECF7
+ 91F3E67D7CDE41584354EF78533D32430FBE53A137B616D15EA2DF276BEB9C18
+ 9BCB668D28EA130117CD408853BE7C0AC5496328F6F5AAC80F0DC0863259EDFE
+ DE08FB8C7C58310BAA5DD81D6EAFB6B65219FC1F7F02B4A61EA8A43E9F03CF8B
+ 1662565FA5BC8708639060C3BE0318DD00BE6762B623ED9CCBAE354A09AE74B7
+ D641A99AA41E4C2202BE790B0896248A770A63A1EC2D6DD9CCB7A1D78A7DE2E6
+ 9CC4639E0AFAB32321607D26F3DEAD926A6A28043A405F2C81A3D19A056BA33E
+ AF5D3B7877F370EF3EB27FD0DB27E2BF0C3AC7DE5892FAEBB9BDCD3B89DF4ABF
+ D02C33ED4C98B894E368F84C9BB3E3167EC57EF7CB0A9AAD1300ABFCFFC853F1
+ EB959D90F14274D1CD440B54B2313E955620B16708DB9AE68EE40503B58A6636
+ 3DAE47715B1EACE44181A11C329FC799890E12A133373368A7536A70F680DD80
+ 23C94074B29081EA5CBD6B515CA4BAD1BC1235E7F1599C41C397CDCC992D7A28
+ FFA7492CD017B6AC3B109309F6A469933443EA91745381D33C0235CCB9F09306
+ 363D27E4CAD6301EC479B253248D61CFC2EBCA5F2CA986365992B755B70331BA
+ 45568EFE5579B81252AC9F32BBB234E6DA55C2DA9C09E82B65E9D0665E3FF9DD
+ 33051E27A7C43DCB5DD41B3A7E1AB2DF6F410E7B76779876CAD8E37566939949
+ E9E0BA6017E8EA893ABF78DB696A6CC257EB7862576778598141DDD35E8BA409
+ AE8AAE4AA5A415F2C122E7B6DB9FF9BE4F70F9BFF453FE090151611CE74A3EF6
+ EFB3FE5A1A37CCFCBC0493B23841EF133C86E015495AD7ED7DAE414F4ECCA6FC
+ 6ECC920367F9A77CDCCE12E25CA61A36EE90D6C305165CE409C1565F0DAB1517
+ 47D21ED35FF3057BEEAAF091A570FDB26082C8665494483295EA4DF7AF0D5887
+ 61F9938B1B930313A2776EF1926557DFAD36D24A360A7302B2777A7BAA28C2BE
+ 8CACF2AA796D09F28F8759943FA55F1BB9B5671B1AB6B0A216C4A73763D9F335
+ 201405B2A347A7C378CB5F829E582ADFE5CFADFC107865B1466A08521277E10B
+ 6BCC034541E1DF6E8ECB3E6DF50D7BE638218C7633E3C9F545B48E68202F2050
+ 698591CC099B646EAE659BACDB65C46232230BD5F3492F9C29977EB7A0215F24
+ 1AE5B7A580D5301E2D12809928672C43D9297FB13651148B422B6C6F31E1ACA8
+ A6D4F92E9050C8A52F1CA336481343D82DD0621A460286D721EA7F46F4FF176B
+ 994CD27F735BAEEA3B6E5016E3F5A2327A968BD4F5F31A4806122E828F0BD1E5
+ DACDD251B129FE4198D863A51056728D13C2708F5E2BD0405D9AAB762F554EDE
+ 23470D8935565D83B93BCD8095267628F3D558CC8F7EF7A30997B3C7471B622B
+ EEAFC2D8E6F416907457F79AC760B357CC9A0598408B8F597628000BA8F9E268
+ 43DAA38E8F4BE6588422DA474CBC929B7059BB0A7D4CC566EB088D6905EC0488
+ 75FF1951029DF0A318D8E2158F68710333F3274B070C2278465664A427A8C96B
+ 48151645FA42C3DCB6853060D75A2BA2339BC141507753D3C9D01EBEE40C17D9
+ C04FADDD98891A3FB93983F875F1ED877F2B2BB727A6773DE8F1156FD6095779
+ 4B28C35A782034253C04CC1A149A35F73BE5C9C171981C9EC1248AE9E7274271
+ A028E02956FF6C5971C1FEDB9289D90C97C897E5600BF8256D10A675E13BDB1A
+ A4EC945EDAA2CD8758526F9196D721CA182608193A6B7E1E585C8F27C74CB5E1
+ 6C72D4A3FC4F1312CFA0285D999FD0ECFF66DC81A16C317391E71688EA68B172
+ 3454E2441508E9E0FED808ABBA7917917C7B865FFBBFB7BBF2952C133F3F7C2A
+ 60ADE284338616FA6CC9772AA72542DBE039C353FB0ABD2D450C6A033F0F0287
+ 270ADCC13E4193E76382BFD8771CD808690C04301672366124371AB175C38BC4
+ 3B0B6227D4B5888735899512BEE067D32086E807BA81293D2E1132EC329143E6
+ E9B7A3B6319A46486E50B00ED37AF755F5C02401D4406C93717C9DC8869D4C61
+ 98E9AC328459CCA50BD29A8DD04EEF93050131C8B29471960E42FBCC41E77BF7
+ DA8214034A28F59FF58633D26B471CFA4E986AF24B29E6DBE01A07158363F07B
+ 8CFAC36AE07244E5060EAE8227E648509F452BED881FED8ECCE18A3CE5C5622E
+ 6ABBEA92135E5645952D8A4F35640A5B5C35D4DB9EBA0C1EBCAD9E0027B696D4
+ 9E3A8FED985326B91EF2DACC7D7AEA5F9783FD20BCC8CADF17E292EEC745ED46
+ 6BBAC9CD4A4C330BEE50C8612D9D6B5FE72B4B4AB404DD9FE50BC8350BF81C86
+ AC1E6D882BB5707FA1AB124D31BFF8BF7D435FA779AA7808DB7267E521E418F2
+ 4E199C64F7EBA5D8360F1A171C7414C4CC40DA23EF7BB836B392317664FED9C4
+ 5C6584B6FE92AF10D7A318DFEC6B19954141331BD81DB953122C5795F0FF8EBC
+ 5346A8FC4565A01DF1966133A057776862C28337F2FF1DC9DE27
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMMI5
+ %!PS-AdobeFont-1.1: CMMI5 1.100
+ %%CreationDate: 1996 Aug 02 08:21:10
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.100) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMMI5) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMMI5 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 67 /C put
+ dup 86 /V put
+ dup 97 /a put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 103 /g put
+ dup 105 /i put
+ dup 106 /j put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 114 /r put
+ readonly def
+ /FontBBox{37 -250 1349 750}readonly def
+ /UniqueID 5087380 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA06DA87FC7163A5A2A756A598FAB07633
+ 89DE8BB201D5DB4627484A80A431B6AFDBBBF23D4157D4AFE17E6B1C853DD417
+ 25F84CD55402AB88AB7EEFDEDBF2C2C731BD25567C53B474CCF739188A930039
+ 098A197F9C4BE7594D79442B2C8A67447DE44698321145D7689B91EF235EA80E
+ B600AA8E238064F154284096C4C2554EFE8DDF13AFF8D3CE30E0999375C0FEE6
+ F992DEA5FC3897E2CC8B7A90238E61E41622DE80F438DD994C73275CC52249D9
+ F6686F87F394FB7BB668138B210BEC9E46415A1B58C990B81E7D7DD301143517
+ 4C2A259D2A0A1E200F8101469C10D7D537B0D4D39296A9AB3F132DA9A3B459B0
+ F850E2B3A03BDCB35AEF82285D19C38F474FB414F8EC971B994D1C7DD753B271
+ 2B71549DF497C665DF0F266988209D9EB616E4D9BA229FF984E7A886DB01FD21
+ 48ED2E4859FD6416C2CE52537464EA884C8C9C2D1083E2B83BE4B766474C23B6
+ 6E8EC5003200AB10514BB44D14CA700416AB6B2683E80862E7D5B49A05526A32
+ 554BB23AB8B0824BBA198E3825CE82380CC0FECF46651E3E5D77F09465E73164
+ 20342822F29572BC7F73F2C3BF95ED3BB6FDEADC20C6AC866C4F2C679594D7E8
+ 8D944704A3C5D771DC39503BECAB89F34D8CDB8FDB91AFE21F3F0260D05E90C5
+ 73E2C13DFA022C4522E5918EE25038A0498FBB530DA33B0AE238B1C6ED03FC04
+ 2BFED8236E07820C5BAB411EAE1B31D93A2FA7C374B1725FEC359ABCB88E2C89
+ 214529A263D795AACB0B95A3AB2F4E08EF350C282CE521716DBB06E5B8291B3F
+ 5D4ACA230FA192F64BC902A4C8842C0F916F92FBD002ADD408BF0401D0284FBB
+ F05D4C6DB631420747CC902C5E1617E6573612FB26C8378DF41FFB5048D3CF06
+ 4893DBA48EF4B043D760F60C75712169D16C83EE020C45369E443E853E1809DD
+ F395B812067D6FDBD26111B34F42C21036AF952D0D767FD17F6959D9FDD46005
+ D64FFF54772B50BB9B173AE79702981F58F9F235C591F476A31852174DF0619C
+ A470359153DC32610E782B204E7945515464DACE9099B81EEECC7EBD4B5126AF
+ C3FD9DDFB329AF1C95C41FA4A5F6958869509A23BD7210386329771FA46FF926
+ 0E54AC35106253EE140449425A8670E1F92B178A02A58EB57540F4BD8110E548
+ BB584EA6D625C5F5FE0124A98E49915F1A1B95D2125874360EED1C4379FEF3C6
+ 90E5780C20309F11F2F23FAD635C44BA030B39EFF083A3ECCDD2641DCF867B7B
+ 316FCAE51DFDBBD793046507F5E3434E5A5C33540BA2AB06E08D4B11926A913A
+ 18F8CC000F6BBA53632542D17DF5DF474BBE5FA8785AD1479A3823A1B2DAD5AD
+ AD3196E6109ED04B81E94451AC1360D4299BD4E925D5E4B9C117C0F8B5DE5F09
+ 17ED349561126C644EBEE83C9EC086173B1C9DBF6F966659C5FD31F8BFF69750
+ 0C837AA549B48C1AE06BD1CCB45DE4522C460FE8F35EB44123049A385B8AE39B
+ 7599E426ECE25918E2BAA3362EE6C6E4895414541CD3B3DF39BDD1B42BD55823
+ DC5050B9986E6B163832362487CB4396C464DBD31FFF82C8610B3A8F4BDA2D82
+ 87E2F06B01DB3F19D61C0986D121CDA555A85DD4B53613563C4D5F2ABF998FBD
+ 0D33DD23DC2E07B46670DDEB638C8CC60E74EF2088B56D0615552FA06E36F83E
+ 841A3F7D44CF8D604B5747E9DA7B33462AE5D5513243CE09777697DDA6049AD4
+ 4B33EB32EE1A37F75307B28FFCFA64786E6210118FFFB80077023BC9E19F1C2E
+ CBCF6C19908C0DA182644A768A2CBBF12B6667A2BAF970381FA40FFEB4A8732B
+ 8DD28F7C815F05BEDD5E9EC4250D14C917F0D66106EF2C74876522B7B4CED35B
+ 4666E2A5D9583F6182F8CC6BB0D2783E617477F4ED5724838D9BDEE33C97ABE9
+ 3964282846C02EED00545D6CBA6269ED8D77D6C2D04F2D47FE7519CDBEF7002F
+ 50213F937DBA4EB82C358025DB5C81C8BDFA9AB79B2F08D4F1D0E7630EB53078
+ 6BBE097424C07BEE033411E25A06AB992A044A80423CEF63A4DC75C13BFBDADA
+ 5966EC7EE5237AE5AA4D56A7BBB48E45945853CFEB250E535E167B252BE42CBF
+ 6A06875B7A9ADAF52D06B8EACFC7502D9BA295FC3C56301CF703C7C438BD772D
+ BB231687C485073E11A738EF710BEDA9859E0B2D720A8E607DD3A0352A758AA0
+ 247D94583A1C2ED503504F778FD81AB71D6744273434CA58EF7A97DBFB04F935
+ D1221051526E541C068C03DD81E34BAFDD967174D4F6D9C212FF9A06C05B370F
+ D93BA916C83CB307EBF4317F12D14797207818FE646305281D5EDDD57271BAF6
+ F19ADD980CA21B3109B1073C1C36219CC71CDD3507CAA508308FDA1FC81AEE65
+ 9A73AEC179EE0C5295F7BEA7536CB7787E7CC600725FC298E5C89668C48426D4
+ 6FA4E99C21E40C6DF2D9B7A22B9C24AC4EF869618399ACF98BD554C820445324
+ 548520E4E9046A7B1F83CEF5FFABC15A40B04700B73AB34C5056873B7A7FCFDF
+ 06E9662A9BD40F085066A35F238CC66A874D704DC7A3550EC5C34D24876F0921
+ B0E8A36FCBAF178637BDC9E42D9356089EBCB2A261F582A217EE75C9AD561A66
+ 4214F7A69C112A9A4A0DDE5F5B3EE8BB8ED5621C1B68098CE0837C482E6B8075
+ 538E2BC85CCA098298ED103B9544561384D2D6A90B29997E9B4D12736D13768A
+ B6AB69295F52A7D422818B3EDBCB3776F20C8E7101669B26DD7C61342985BC82
+ F2D4674BCA9BAA83B26472B79FF707C52CE9AAAD55F31785B6D590E2EE0646AB
+ B94DB2913E45AB472AEF9F9A512BF90FABFC5D51B8F485E8780F4DF62EF049AB
+ 3A22C327982E69831CA2CEEAB11724A0E66ACF3BAE4C86A300DA4D0DBF65DFFA
+ AC0EFFE6AAF87EFADB821BF85EAFFF75CBAE4F7CB86865FD976B87ECBB285015
+ 9EB64FA8D3144765FC7D793BBAD4D6EF1041CAC88710F12FE36823BCDEA0CEA1
+ 2F67B6EFBEBE02522D9C8C5B32081CD5BD20FA21679EA6620935F725D767AC40
+ DBDC620980EF7A24E517E7D81D9EEA498F18C28433D85C3CE1079B45711481AF
+ A3B100BAD167D1C6426B8E4445F130A0280E3F52CFBF55FC1FEDE67B8D53D078
+ 17A88426D097950F7861B958A853C0EB0BCF0B808E7E8D66ADD9606AF9480E04
+ 88C7300AF09C448629B95D6F760505F367ABC8D333CAF8BE8E7E0473E61BFC6E
+ 951DA252C8A53712702512839ADABF9ED8A6DAC94F641030351D742549818E0A
+ F72CDC9CF4946C65EA554CCE4766D09A8D19CE974B01AD1258F6112D48877B60
+ 003446AE5841699F5B218088977A88A324C0A62ED7513F406508418498E7C264
+ 31B3F75D460F8F546D860901FDE299734FB4229A86D3E071ACCB74248E16FF49
+ 417DF0F8807230B7E49F5C74D7BC177A933C1A44BD106EB2663BFDBA91AC2502
+ 17D08968803DB6236F2A470E496F4425A3A1A8653E5EDA1C4B0ABF73B5751A9C
+ 97B92A882F910993C40E93CC1B494BEE3D062B937B881D001F063F1B8A2AAD74
+ FFC4F72FD643A7D0105B9C7B33D2D51B87A6595838A6EF88796EE5DEB5D3D1BA
+ 9BEE3FAA0ECDFA6FBF38696D181D673F0464DDE52B0DFAFE3D6685DA63F64111
+ 6584B7467C0465CBB4C9757B06B852F0257F1E7FA1C9776B06AE5AF89DC49A57
+ 6D8649CE7BE80631C70A40389C10AF4D4BCECF2A4F63EB1CDE1320FE6123FA23
+ D200141ACAFBFB11C259EE102B07FAD7912915EB5BB6E5CEF8E9695DEDD8747F
+ 0D4B7A130B47B47197F7465F100A9CADB9F8EEC1AD9F0EF5A50BAC6DA640095B
+ 43A4C64DCB162AB2652B3F498EDB17F1D7C2F04EDB355950D098FC32845950D6
+ 700B66B45E86BE94A9246D334F189453B1EF739A989B4391EF58F8EBEA7B55C6
+ 936389F42D0B33EB8E93A9DE3BD5902C69777CEFD00B8A8185F97A2373C01062
+ 7278210C4360463626855A00D253AF097B39C1BFEAAB446713924F5213076488
+ 3EE6A5DCF9BDE6247BC08BC9C79053B669DE22705C32572F3CC8C866D87221EA
+ 07D88B328E424C28F98C86ECA30E7D18F686D6A546054F64858E514BABB1D019
+ E5705913BF98E82C43ADF95362A9F1ED2797B0137F86ACEB70285CCD957A932C
+ C56F815F2A1D7A5479C1AABCFB5D343B645140786EBE2D124BF269405EE14EA7
+ CFA8D3E68F51A860B4494C1F3F4BAA925782A620484EF3657725DA82B8D31698
+ DDCD9277C1EB34DBB07E38DDF98F93D90730ABEDC890D59639E6286A0B010824
+ 1AB71F8C69F3ACD2011B0704102E87A3E82CAEE2109C61464747CE44A7EAA17E
+ 7DA0DEF74189E812A52714153A956EF8A884E96C02E9FDA1BF563195AE2C2EB5
+ 0AE4FE0EC56DFB7BA741644684766464C6071FC05DC8B02D228F0526C6C9F8DF
+ F3D5D3E8F44A9063AFCBCA5C7066834284B559E846E0B6412AFE8EE5AD37000C
+ 56ADC2931B8D7216BA1CEDC0421220135F7AEA3EFA11936B4E416D2716981F68
+ 3BFE9ED8C4083AAE1CC84873F13524FA29E7F6317D0630C9E94A57E50A624BC1
+ AD2F708FF94933AB4F684BD22864188617E9775039980695F4AC07E0F03B7037
+ E2FD7A4490A6895E033690FA20B9631211DEFB77DAD7D1AD6343CF375178D5FF
+ 6C6005387B3C236A885FD9A3CDDBDA45283E4898484C86CBCE462C4602598757
+ CDCF504E2BC0AB52EA1A90BFF791CA5C7F8C1A414CDE117AEA71125DA9A3C043
+ 40424E1C41AED89AF7E352AD5D35D07218E07AEF99311D3F0DE40818B71A2AEC
+ C5DD84480C65BA82A22C8D45D622B06A37B591890CEEC54B2CD20B066DB0EFEC
+ FF744007999AC933A1CA46B300B18DC1A8A5E18C44D18165460C61617D45959F
+ 1E01018F67CC990C1806D6EB3ABB4EA1CC68314490D9DC1C87F4B7F755F1C5CD
+ 7E6DD0A34EE3C8D93CC34CD6399B35D73AEC811AF61A7BBB0E4D453C693F4AE1
+ B262DF324C144E7081CF5907C8ADE36CA74BA94D083AD3494A286581C10D39C1
+ 2D08A713EA96A579E8AB1C0E0217A2F0B2B466A272A882712126ED607DB50D6E
+ CEDE1B6E7A0B792A4652EFED3276B0A3FD2175D2B047E7C44F3029313991DF82
+ 386BA2DCB26587145DB5AB6B9EE41ECF68EE3556D5D3478F5D2A863D234F651D
+ C734AAFB9B443FFA05717B87C12541A4936A49334C5E9AEEE2AE343E58C18063
+ 72A7D01056FA5C6D8AC427B20C5CA10553E458AB70F2597B72F8573D836C217F
+ D615D07845228F83F1CBC2CB
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR5
+ %!PS-AdobeFont-1.1: CMR5 1.00B
+ %%CreationDate: 1992 Feb 19 19:55:02
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.00B) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR5) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR5 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ readonly def
+ /FontBBox{-341 -250 1304 965}readonly def
+ /UniqueID 5000788 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
+ 87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
+ D1F017CE45884D76EF2CB9BC5821FD25365DDEA1F9B0FF4CFF25B8E64D0747A3
+ 7CAD14E0DBA3E3CA95F10F24B7D5D75451845F1FB7221D7794A860756CFBB3E7
+ 704A52A22448C34812C3DBEDD41892577AABA7D555E9298C1A0F7DA638078167
+ F56E29672683C51CF1C003764A8E7AD9D8ADE77B4983F56FE2D12723AAD8BF36
+ 682CFBB71B1D12210144D39DD841A971F71DB82AC6CD815987CDCF29ABC3CC96
+ 5EEBD5D661F452C6E0C74F9ED8D0C5B3755551A172E0FE31EA02344176E32666
+ 14B6853A1C303A5E818C2E455A6CF8FC9A66DC6E279101D61C523BD9DB8EB82F
+ EAF4D7FDF6372383C0794C4568D079648689A199D4B65BA646CF95B7647E4BEC
+ 83856C27A8EF177B3A686EDA6354FE9573E123C12EC4BA56A7E8BFB8F9B75147
+ 9DD79A743968F36F7D0D479FA610F0816E6267E5CE327686A5485AB72201525C
+ FB3B7CA10E1BF26E44C24E1696CB089CB0055BD692C89B237CF269F77A31DC81
+ 0F4B75C8400ABCFDCEC6443CD0E81871CD71AA3064ABDE882C4C52322C27FA8B
+ 41C689F827FB0F8AAF8022CF3C1F41C0B45601190C1328831857CBF9B1E7D1AA
+ 246117E56D6B7938488055F4E63E2A1C8D57C17D213729C68349FEC2C3466F41
+ 171E00413D39DF1F67BC15912F30775AFDF7FB3312587E20A68CF77AD3906040
+ 842D63C45E19278622DD228C18ABDD024DD9613CDC0B109095DB0ADC3A3C0CB5
+ AB597D490189EA81239E39202CBC7A829EB9B313A8F962F7879D374ADF529BD0
+ 5533EF977142F647AD2F5975BA7E340419116099B19ACCCC37C551226DB28A2A
+ 49F6394324396BF03FEDC34E47427C7B14B81F600732AA1A19FB0A52B6E80FA5
+ C5281CFA8ADEE3DEECBEFA91BE8A455A4B93364E087A8EDA1EAA0E0E14B621B7
+ BDBC9CF2476E4DF79FFE7967F12B36403F63B3E9C5D00653975872642043D77F
+ F178369F138268DD61AFA06EAE4CFED07CF966122596816385AFDC28836247E3
+ C3F5757E7608292182CFAD5510BE507FB1F760369A2A9D8DD89321B045B89C38
+ 739A1B860E40DAFBB62DA7CA0BD0AED0BB12AF77B8DEC9ABDA40C1712672F3BE
+ 43AF20E1BB228A0AF7CEFB850AD9E4BF4EC373BDF89737C826F92A2FD09DC597
+ 0504D1D0995C22FA958EE2AF7B3DA314F2DB067139AA03392CC74B983A578AD6
+ 0772F1523F22957CD61FE32FA411F8058CE4A7761048D44FA9DCA5FE9282E480
+ 73B8475E07C262FF6E869D40E6166F56F5926CB375064A581A8C9C7B348A907B
+ 0B781FA90718C352B08F20A56C4C3035DFF64D111E1242CF54C2585141CE23EC
+ 92F96E7274A24BD53F700B1D4DD1EAF2531D33A28B524C03CAC60C9FF966C7E2
+ 340719D287EEFB19BAD2D2C9061C74AF6E8E9BEDA9D0EB615FEFA0D1DBD2D772
+ DE6740409F4B947603305CE2CEC7C5A31C2D0EDB2BA4B91460E08C4B8B78D3A1
+ B6C46D81620CD32F1B780532ADBBD9BE97DBC21160165907E2BEAF1693810F13
+ 08BCD17CF9D4965EB57FFEBFD96E5F3CE21A8BE43A3B1127DDCBF04669B64029
+ E9C127D2E9A6566F46BAC76408F9770A9DA2CD6DBE10F3D014D2B741BC7ABCFA
+ 9664ED5385088283F01FC2F5
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMSY5
+ %!PS-AdobeFont-1.1: CMSY5 1.0
+ %%CreationDate: 1991 Aug 15 07:21:16
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMSY5) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.035 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMSY5 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 48 /prime put
+ readonly def
+ /FontBBox{21 -944 1448 791}readonly def
+ /UniqueID 5000815 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+ 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+ A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+ E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+ 221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBAF552B11EFFB6A16C
+ F03FB920C15AE724EFDF0CCBF00A838D34440FF9FED532F44036AD22561184C5
+ 283722DDFA7285E62754372D716D704AC0E00B2F6AB67154241C7449AA047833
+ 94CEDB08E8C92907FE72A0B05AE36A7B9226ACD6E7890A0B528FDDE84A950FC6
+ 801DE75CF2E739E9121149CCB8B1C87A106822648D84A3D3FBF295EE6C4BF403
+ BBE9A1C1F6DAEDD1E642ACC486E609703D7612BFFD10C324F5DC710811F7F614
+ 3691B400E3773987424C0D2B0D8A736873C6371DDB2442F05E018A2B5CA9A4AA
+ 17AABB95D09E5890CFFFED5AC01495D89A53D3C89F3D8DBAC85E06561646557A
+ B16BAE67D1DEF37B876183D3518306F16FC9A96C8AFDA5579A7CC82ED0CE58E3
+ 574A85B0F37DF7414BB17DD5439734ECFF6CFACEBC4BADBB74A40726355F1C54
+ 16122BDAE845AD3C8209525459A48B864C38B7F2DDB7B4BF3051E085C3E9B491
+ 31E2893FE7871618F7DDF0A7165BD2DD4A0C05BD33D9E644ED7C50E444540755
+ C06455A14646AD52995A3F9A74B44EAF2EDFA08D22FD564184381000D722A9AC
+ 886069C5755B1623B32E074423164D0CDB91E323970D42F3A3E059CF684D7F6F
+ 99CDBC03FD1EED3678B231093C986DC40FEBC47DF0828C6CF7F61ED6
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMTT8
+ %!PS-AdobeFont-1.1: CMTT8 1.0
+ %%CreationDate: 1991 Aug 20 16:46:05
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMTT8) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch true def
+ end readonly def
+ /FontName /CMTT8 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 38 /ampersand put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 42 /asterisk put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 51 /three put
+ dup 61 /equal put
+ dup 62 /greater put
+ dup 71 /G put
+ dup 76 /L put
+ dup 84 /T put
+ dup 88 /X put
+ dup 89 /Y put
+ dup 90 /Z put
+ dup 91 /bracketleft put
+ dup 93 /bracketright put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 103 /g put
+ dup 105 /i put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 120 /x put
+ dup 121 /y put
+ dup 122 /z put
+ readonly def
+ /FontBBox{-5 -232 545 699}readonly def
+ /UniqueID 5000830 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F0187316F83DDE3E2D27FCDF6C5CE4F95B6EE
+ 3317BD91B7921F3039DD35FEA387D5CFB6C6E9DC84C178F3432994FC7FAC6E5A
+ ED41A1E2EBA350178FBFEB45944511731BA827167DDAC238FC69A5486B995477
+ C469E2E27493B0B711DF8E267D3D5613B450011921685147114106C9472580BD
+ F531022F6DF5432B2A4EBC51A8032C7F9689B6FA942D849B29709631613DA68D
+ 4DF7B6F059A19304F40A3C3580CE3B51D79D42984194D4F178801720892FB6E7
+ 61FF43C63F9256B5E9F4227B1378222BAAD4D52C77462DF01892220E11129C16
+ 6C9E45BB9F01ED7C1AD5D8B4D72BE0E12969AFEA90FEF170603CDB91CB243173
+ B19A56084D10293B80A35275F41BF78A054DDC98F4A1FFF592463D944960FB31
+ 6BE5F03960F9B1F213CBCC7FD448657FE388F10104D42B0715FC9571CC60CF23
+ C72560CBB8835A0CA208FE06676B3B48B093CB7FB2C0C53AF17EC5B372A9771B
+ BFD52FFB7062B4FE0106A01A2A1A1DD4EF5C8C7623EC9324A2CB3B402FCC1FCE
+ 52BFC8662F8A39D5F1B41C97E7CE34E16AC28A1E94007AEA7D4C519399F1B7A9
+ 48FA7DDB671067244F09C29F95DD60668223F45BBDA8B1C452E930A9F3F341C5
+ 351D59EA87462FFB30277D3B24E2104D4AAB873BB2B16DA5B23BEE25BE2C8128
+ C4CF2F4F438A4E520CD932BAC455BF8775C27AEA6C73EED3EB2F8DB5E356AE27
+ 41B35C8AEFE73C4CD6A591AAE4F45762EBD6D3636C03F08C552BBFD0A13D11D5
+ 491F8369B4BAB8ED9D6F1DE7DB7AFD383986C4338D3AA71C9AF2B8A0955CFD86
+ 0345F16D9798B25156DDF826A7CB6A0CC4CB43078BEBD3E499DA95562A08EED9
+ 7CA27B7A0CE3FA7EBDAA87A600F027392ED9130AE06AC9A1FD8F9C8DDBCF2121
+ D29351AB18D95CDF12F292C607372135DDE3F2A21E64F7261FACAB9AC2CAF438
+ E34C25E3BCFF2562A725C869A8EF84D26D86DFA33DE2C9907926AC12EBA9F951
+ EB43C5DAF2821E08050781163CCA0A39155A71E52D83C2C8F00536D377D5F62C
+ 05DCC078F14FF56E63C1BC571762F10A88C2DC3E2E76E496D3895EB735055EEF
+ 7C8DB15B09BF409EFB8FB66BCC8644DBF9FD7C22DBAC46C7DE15782C08C8D7A9
+ 7C01582DD5CEE8B9ECD7F9C6CA0AFB492DA6DB7375807A62EA48F3897E111A18
+ 163D509FEEB48253E8FD12C7DB4B17154FCC8A08B4DFD07E253C4A144AD5042E
+ BA0B356B033C12A0DF522AF0541C9817C432CDFF5891AD056BC52DF2F36D471C
+ E8998AE1632EBB9C23BED8DCC7CA75B4E73BBF65452148EFE0687EC80B1648A7
+ 53E74C51C3A8C5AA32DA56C7C7AF9F8C33EAF5E2B34762909DC011B45FBDE02A
+ DF90B39B4519F1F9BDC7DB8147DCE406EC17B9F35FA814E9421C2792F2DD475B
+ ABDFF71F4CC43F64503305BA58C67A9FF8377BDA1A04D230564D103C7788700B
+ ED97ED9D57F3EB5F74B4225DF54CF205688DA8A086A2F47EFC9AF24D3C34920B
+ C818AC6184D44C4B8B316FE1B9C5B0BE4BFC742C2420D52D61AB4234FFFA7A03
+ 1A5653EAB1A2BB6596D1CA7E8B527AB4062821645F5E7D395E1C259E5526A50A
+ 387D5CF6FB3231B6491D4796E277528553BE234EFA1A4C127FF9DF49DC811FFB
+ C5B49FC9387B53E63A6A67E37794E7926B3FCFB34AF44D733AAA8EC7A30D66F1
+ 305FE4117A3EDB0B4B46FEA3DD1B3E8FF468E7998E0D0EEC664ECCD97A07B53B
+ E714F94E167363435F9617322FFE52060B8C35BBECEE59E4FA056F866FF52157
+ AD730327FDF6E75553CECFCDB74BC9021ED9FAC4CE3475CA3A0391C81FA4DB3B
+ 4266201FAA4C16A652528DC3D8DC94DD9C8401C6EBD68F35C5683C950ED4BF8C
+ 4148A0224F2C585C8075B9A1AD63A63E2CE9B250877561A18DB70F5EE165E73C
+ 9D6B3D4E205278A71E52F1ACA4A5849C2591344D5539C529080ABB57FB1B52A6
+ D89AB0C4304D4D2A737E6564E00EDB57F24C8E272317FC65FCDE309333F9F722
+ DC5252F2449C809964E45CADEC2391C4FA8789F9DB6E2EA83A943B94B93A4CFF
+ 298AEDC6A8EDAF8091492D6F62B6832CA110F7345A5D08ECA1027AEC83C3F05D
+ A450785DB29F28129644969BC40C62C38452663D0D74B9F6CF3DE540BC3DCF7F
+ F92122B8BBC36BF742CED844CB73412DE8DFAA19674596A00C060A4FF41E69A8
+ 67513DE42E5298688E0CCE44677B8E37706457A7F3C4E11CD404FF50C171E693
+ 959FA307DB2E7732EDADC70063229C26AA87A3D832B12DDE696444A08C1BE8D3
+ 30B1F87A257E1839FF918935E13641B138BA8667FD1DA91239C6D879F932E9AF
+ 06771B5CE3846D675037101A689145702A1EB9D453DD84330EDB29A5C70331BB
+ 54CF36851E12C84B808BB8AF4C5F7CA4243397962008FE5CA0B54D164D839A9F
+ EF58C56C7C464DEB315FC2FEF912D1013DE1ECFAA33D332E27D93D826712D5C1
+ 6C92FF3E380324D012E088BBC363C61E3247C157B4FFFDD3C851623501B35C3A
+ F650DA55A881DB882761F7557F807CE51BB0F551FBAD4AB0745ABE6E5E0E6233
+ 43E508EC9A2084F40D203FE46CEBAC05CDB94EE44ED0F73276E47328877607C9
+ 7A29886DF48C32CA82E0F53559BF9DBE08FE2C7798A9A147B7F12FE98A803F9C
+ 7160C44F7F55AB44E50D58577B8D3088817918C6D6DFD3A0404904F6CBAAD650
+ B0AFC753CC86F58A94C375420500D967D926208BBB2EEA9256E825459846BEE7
+ 226A84BECD147BB4AE8C1679676C08E30B0100511E4E66DCB23EA8D6CB7033D6
+ 4ED45FE150FE715040C432B2588C2E590B17A3F598EEF370EFB7F8E02B5F6A04
+ D537B6D2645FEB59FB53C6F1C760395ED787201C891EBE7F735375DACD624789
+ 9036FB8763DC0B17E112516142664EFFF3AEB6B7EEFE8466F79E4FD851632283
+ 6BF25A817198682CE8930EDA0E84FBD089C462BCEE865863D20B2D46D14D709E
+ 181DD0E127C8CD5820F1C31528418A8F1E9551D3CECB1156CD693AD6D567770F
+ AB10E608B7BA20EABA55CB2D10642F4A06593DBE519DD3CC3FB9CBC565134C91
+ 1BDF321B164486CFD35D713D839184A8EB996C35C54043D2C4CC8FB3E6C5627B
+ C57C83E3C0E9EEE3E75FA0008F6B8171BBD2B8A1456403F17D2C255AB9C88C62
+ B2FB74666EC3941A824DE7D154229372205A55A24AD8B5E3AFEBC94874C07D8A
+ 14FF2A0587ADA5BAFAEE4441DDB11ACF3724AB0C4B4EA820E693F846A467D2E7
+ E4CC84EEA26F7F793C8F252C3FC30E42C178FAF549918596A9EE31094FE3D2B1
+ 70E92D5F458DE15FB2C4EE7D63677B0D3701FFE582D65D483B449939D3404A47
+ 6549FEEC188BC5FEF9070DC99248116DB78FBC3CBED435DC2956B5C3977211E0
+ 53E912E4EB8AFDFF29C543DA483E3893E9C7DD9A7C61D2F7874112C1913BC703
+ 3F5AA48B228C930929B739A04190B661D134674A546C840A362CA22C6BA36AD7
+ 73BB9CBA9DA8563EE289589BECD0D8C7525801A6D504830CD49ED5797A5B85B6
+ C722E0DA4E01478F86B7EFF961130C4B89FBD11B368816361EE64B8321298028
+ 62DB439443756E8B7CE5208FAA01C435BAD262C7C7D93A4467C17E49A75AEE66
+ C7A5E1397EF2E4DAB16AB0516793234D439060707A6924577AD8C7B087BF6864
+ 02737A2267A54BC39E4E76A5DEEFF2079F46A7D61D1E1CA5E5B13E575E3BE1FD
+ 8472D3543D05D2FBFAA2FC13CDB121E171BD60231E677FDECA5CDF969DE6475B
+ D910090BE14E3F7CF4A270D8A4B3E6804BDF23290059C952F81058F496941222
+ A6B168C8C9EBDCE32616E38AB0DA70D0265929B1D35E347D1860415E2C14ED25
+ 363DA2A6F81CD2380D37FCD898F926BEE06D1674342741353CBB7CEB248F1768
+ 965B027628EF67DC09BB2FD3C0A71D2F9FB5CCDF5301907DB67D16EA911509AD
+ 78BA6ED12FE06BE6BB79CC1EA949149DC34A6A1802429B8ABEA27C711DE37E48
+ AB66DBAD9C1036251ED0CDB9868D68125FDD4337DA34883985EF1A827F126460
+ D23419EA59F3A06D66FC8219AE19780EFEADBE1F4988C22381FD8FDB9759687D
+ 9F2CA5F6D372F9D9C7850CC8309D8802F29ABB87E803D6A1D7AA038F79322794
+ ED2B01A7FDCDFCA0900D533FA43571861DBE0F7FFB73507FA5A32ED1A59144BC
+ 3A9BFF6E8D7E9C3CFE185E257C34964D944E069CEAEFC54738A9FD2B63A6567C
+ 513838FEB8CE43E05BFA7E6DA3E4BCA78F20296E30BC066F16A8A10102668664
+ D145A6D9F710CAB6D2F1F0565463A568B2988097668B983E1B39326EAC0CFA43
+ 2943E5595DEBA9CF3BE8F894AA0227828DC76166853D19F320E92E173C6D763D
+ 2AA589BC99B435F607FE20E780F3434CF5DFD1905E5DAFA131A74A9C4BCEF2E0
+ CC1A1562A7746B1219E37B35A923F07290C642F8E5BCBF2C46BD61036656AFA2
+ 7E20B77CD9EEDBBA01AADDB6F71745445E23DD5C32113B3C78B32EBEB1EBFFFC
+ FA91749578899A878854657C00E07069FD31182C01F6246659DFACB66E924A01
+ 691663AF90F08BB14F0FFCD30810B2C02988CDB0361DC94E486FD7EEBCC1F848
+ B15EB1D908F5C5DF62C78FCA2741D13F599092663FF4368A0555AE3BAC779B20
+ 1AA96C01FE9F10AEFA7E1C3BF4235811DDF27A70E0E07051E45C3808DB3E0DF9
+ 36B68C398592034C98866E4BEEE585D031454FFF21694C8CB5FA681BF1D56065
+ 397417AA1B58B30244B4028F13E60CAF7FB4ECD60EDFD27E509E90FC01F4D165
+ 0ADF0BB5F3F4D0F8CA923D4B2F5A9167F641EB6AED279FE1D931ECBD437C25D7
+ B729B45732C6388378C1668D125AFBD4C146A5FD3FD621FC4407E20BB51EDA6C
+ 3C4A763F2AB4A6996571E38FA7074672B9BD29D1499F7E2E1876804E242750CD
+ 7191D34A517175CA509953FD397CA4D58B46E9172071A4B39F70F2B11AD71CCB
+ 2722F498E8121771B9B9E29F6D67B2C6F8B5AB7F3B1CAE55DF38CEDA75BE5886
+ 273E18BAC67F4C38BAE40E581AAAA016B6392FF1AF91649088D1203B1011A8A8
+ 6E016216A45583C8EE14B5790442A647928DEC6079F12867F9150DD20896F8D5
+ BE847DA1D653DA52754617479610F373699A9C12DC403A56EED961F4046CC9D5
+ 001C5AF2E46D97F022AE390B7CECE4CC2B6A445BA09BBD7BF09FB200A1C84007
+ 9A63EE918058D39A65BE87C15BE8E24C054309C71326065CA9A4A00003169998
+ C520D7277DB119E09C6393CF43F4A81F74C5C347B57885DBDA12B9E034B7FC45
+ 127B31ECFDB67107CCDC73E2E7F4986B7B3CB1C6BEB949658C590B89A2C11963
+ EBB464FC702C5DD430F54B51A66F477221BC434B5DB0731DD2F0A610DA18AE13
+ 52B57BE3AAF6DE6EFEBBDA9C15410103723DE220D8E9DDBA8CC7E7F59EDA01A8
+ 87E39D7AF5D15259B38C8EB0AD0790F6B59BF5992DD7034BB46928FF757D8129
+ 6197C1A24C6120F22842ECDFE8F4E82F46B6A13CE986D43254287239334E27EA
+ 1D61012D8B002B01D370E1D6EC75BE5DC0502345660E7367A4D914BD03F88029
+ B8F165C3754BAB39995B25751098A17B7562AEA221C46E4B4895055D7FCA348C
+ B83F307309CC1D947A18F1C64C82C14F1EE058F5757767D17B4598E08939CCA0
+ 0C03F566A95305C22EC053A4BA95479041ACD7B8E0DC95601C304FDB3EA61DEB
+ 48E2299CC26E505F0B89AA51FE053B8ACD90E83EAB4ED798CFC1D3E3F3231B09
+ 57F0AE89E7EFB03C1DE4D5E64F5B0AF2EA6074006BA0CE9A6EF751C82A98ECFC
+ B844C48675D015144A6268DA9D10FAF4EA06BF32A19C9985EF91CE163EC6DA97
+ FE341512F072AD27ADB72007E5C6D795FC417F3AFD6F53C16CB40B3D6F60FCA2
+ DD3D20B7C4F06D785A79B0383325E3BA764072351223BAA96E74659D9B2C5BFD
+ 1109CFEF6F1D741F43D866DD8196437DB82817E893DF61A5FCAC7592A0428C47
+ B65C52294FBFFE4C954EDD6637EEF57B7A85D4C051A42F3B1927705FE77B197A
+ 693AC5E3059954D3820B530EECA9A48CD4D450D57C46CB6760BC01D1F573777D
+ 4E0395BFD1C0962884A037E42160642E48C1E0653481FDED22F46299744651EC
+ 803F9EAC6185A2A9D19E7B1A871EF347B3E70C25843C7FCAE1C2B00CA7967BCC
+ 777680142F5E35504FD93858EE6BB3E461EB15E04A5E912327C0175DC093B96C
+ 98387E7D07B2A706E7F626EB77EA624375FB35C9C82A035758AD62057B679B66
+ B7EBDD7F50E486B6A9A4CA06486B96D371C02E6C9F4C738136ED05D02AD8BCA0
+ A38238EC5A8823D81675A1736ECC8803A1B3AC25BC18C2A90039928BF2EED8C0
+ 34368FECDD7727AA0115B7A6756B929362F3C9CAE3FF1EB06563940BE322CA3B
+ C38CABAE3B1977C5150D6AC4EFB5E30CCC3712822BDE50F5275B5EFB43C12CA5
+ 94EB7B26D8C3D746B2569EE4276963A699A70EC8A705975580110358EDBFF41A
+ 4D1FAB0957862594284E240CB9ED84CA02995A1FAFDFFAC1D12D220E256FBC39
+ ECB83DAF254EDE45612124B2AC153733811A0333ED6E77ABF2B30ED7539E1111
+ 411E81786A728802E8D389D06076D59B42D758265E64E2E4796A2218FF56F5FF
+ 73F651CC930AEDEFBCC097547E5A3F42DB269E34A848874A38565E4BA87BF2B1
+ EFADF2424B12C4D96CB81C4334AC07EE3BEEA8DD47FAB1D3B6AF327670733D1E
+ 4C985D5DDE5BDD00DCA91C9D68947F1FB41E3698B2128BD6D6FEE63281F8A489
+ 25C249F80F0B535460EEA2EED470DB3686A169B23BA2705ADEC6E6E3B2003974
+ 3ACA278D99C5B74C96D4A895A61A02114B152DD8CB055E3B9CA33D94527A65A8
+ 8FBA040CA8D7FCFB3D9C221874F9270C87F48CB7FDBC9F7E5A62B16C4B2B31EE
+ 28947AE2AF096B8578F29B6C65A32EB65A1F2473C0AB042D2E1AC5E5B2403957
+ 6EB6AFA70F76035D7D64453D74B64A1503589E6AE283B6459F0DA46E58B52E93
+ 918AB5512133D05FAB92E8DF07DEDBC7F25A341FA32FB2389B1992A7667B2E43
+ 39CE6F133D209298AD9AFA0B9BEB5037C6B827FFE05A3AFDDE18D834F87A11F3
+ 5E5B9D9934F1475AEFC3DF1691C9F60FC29D36E115FB40533EBFBFFF9F6875DF
+ 0099B3CFB4BBCBA583EE51CE20D21B8D0F3295D7883E6C07270B4B943ACCCD65
+ D19C87D26C71550FC24B73A6AD0F953662E49D87A8FEB0DA500DC41B3BEF95FB
+ BBFFA7FE7E876AE1239C290D812911334E5D3E69D33297024D30C0FEF2955453
+ B3CCB84D967EE21D2E24C2C1D539CB4EB10CA7BCE9EEEEC7DD60326216E22908
+ 9367A5AE2141D35009E015E1A016B1750AD821293D8FDCCE481E2AA605C953C1
+ 26F47EB1C3BF0FD8C42A97E4C5E4433AC4A46ABCA50047EA6DF0D2AA561EFEC3
+ 6D06C1300E61FD7ACA5439FF63BC863396269F9F106D85BB8C50876057D316CC
+ AA6AC3007227A5F52A9994B6E5308BEF8BCF251CC36AB408A27D6B1D8FC64087
+ AE59B11B7A572682AAC3CFA072F2BC3B716FFCC09C754D6E21FFC9A0909F838D
+ AA1BAA2C25690F9270F608754A2DADB5DEFFCC3A06284ECF0F0C83F6485ADF3A
+ 8EB53AE3F4CB156E7E2C7ADD297B103CAFC4C604DE489893F89346E8E615D304
+ 709DEC558C23EDA06951A56CF4EC60847D63744F03CF2680553554EF7F3C8258
+ 7E5EF8E0B840E8EDAE794C503EE2B381CA4388BB74AF76943DDE2146F4774381
+ 75DC6F67FB48659546720294D6C1805DC7BCE7CB7EC65730E43151DC705E8A98
+ 8023F258C4C94FF86AE3B253E062ECED5A14C2FDC0263DB779B36B82B2B1D7E2
+ 8C1AC2364F2738D2BC8E794CA04F99E603052DE0FBBC30229E876A6D705ECA39
+ FD6E53CD71B9DB4AA7333D99D95C3D2EBBB515FC9DD07A3F30ACA33312080460
+ 1AFB4972EE9ACC91821E47389A7D21DF18A52FAADD39AB45B16892B1B5EB1209
+ 8573D87F0B11081945302A05B80C8D075E485BD8975B8FBD077A9194C199D78A
+ C7F6B29310C035039ABA551B9BBB12329BBC6E1ED58DAC6B2D250CCE7F64E8D1
+ ED72DD62E6BE765902F6FB712BCB9AC5EB1243B409E8EDF99AF3E5D3D3FC87D4
+ DD710A10D1397ACA02468C8A87FA0A89A35A82EEB478BBC3E25B7C0E2FF5377C
+ 7FAC70FE86601A716C765DE378DB752DB7E9522890DD6926E27D01E8532D0413
+ 4C8A2D2E0D3EDFAB032ADA00413C0DAB8BCAFA5589420452BBB9055DBED26B3B
+ F885ADAD2EF2E928636BFF4FEA4D18EDE8706A729C906E97AD3584FE87B12A01
+ EAD3538C5AC751F9FDDA5E4C385963409D680B515B2BFACBEEE2DDEA34450007
+ 75313BAB84AF747E049A3B1317C5CDDAA01F9F56C28877E0056DA036B07CB267
+ 6ABFA85FF2B1E623D406B3ECD548C2C5B51DC6750593E139AC72C66F55D6E319
+ C5D934CD0C72A75FE4E39ED5AF07735D9DEB4930EB1790C6DFB22F8CEE10D4BE
+ C79F9BCCEF98E6134BC3BB9AEEB08130324BF3952F25EF32A1E41406F468D41C
+ 0794B007913778A1DB9781F4849CE15C550D892AEE45950695B9E17EAE76C873
+ D8F88C68E620CD950DA953547921592C57A23DFE434620C0D6C7E230384968FD
+ 853EDF0B0830B0B3D4D3377DE77EB19CB674C4EA97B8049AEE9C2E57FE36707A
+ B6017DE314994B2739B1BFE1223EB1E8BCF02BCD96E3F958AF368DAA0352FF14
+ 49FD0E17DE0BB4E549E1146F05D857DFCF5507DDBE4DD6A375C8E260961D9A42
+ 5E36C9A539F76080601FA203AE5B32CA7EA57683BAF571A2342DB35E788D8EDA
+ 54D8DB5B74F71D7EABBD4F1061A9AB8219F907D13A33BC0660D35F43F0472890
+ 948A4EDB07081DEDAD8ED5C1B0A6E8AFE4759E89BB70AC8D42F62A34C6191859
+ 7BCD7C993BFD3FB3CFC14D4D45E45CF597047198F0175DCADE5DF15A1D3A2F50
+ 550F
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMMI6
+ %!PS-AdobeFont-1.1: CMMI6 1.100
+ %%CreationDate: 1996 Jul 23 07:53:52
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.100) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMMI6) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMMI6 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 86 /V put
+ dup 100 /d put
+ dup 105 /i put
+ dup 107 /k put
+ dup 110 /n put
+ dup 115 /s put
+ readonly def
+ /FontBBox{11 -250 1241 750}readonly def
+ /UniqueID 5087381 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
+ 5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
+ 4391C9DF440285B8FC159D0E98D4258FC57892DDF0342CA1080743A076089583
+ 6AD6FB2DC4C13F077F17789476E48402796E685107AF60A63FB0DE0266D55CF1
+ 8D0AD65B9342CB686E564758C96164FFA711B11C1CE8C726F3C7BB1044BBD283
+ 9AA4675747DF61E130A55E297CA5F0182A3F12F9085AF2F503481071724077A9
+ 387E27879A9649AD5F186F33500FAC8F7FA26634BDCE1221EC0ED0E359E5EA5E
+ 6166526FEB90C30D30099FBDC1BC2F9B62EFEEC48345160804AA98F8D0AA54B7
+ A480E715426651865C8E444EDB798C7E11040AF6E5A7ED1888653C6DBF5E6169
+ 70BCD9C063B63B561EF165BF3AF11F8E519F37C6FDA2827685739DE2C48B5ADE
+ EE84F067D704D4511DBFA49E166D543CFD9ECD7417055D8A827F51E087CD2927
+ BAFC7E6CFBD70B0FE969F890A11149D3D44D422C3370495DA9951AEE7253A49F
+ 3A9444C8CD9158D84117299F7F2332FEB0F94E6ED8BC7AA789A3219BC2F227D3
+ 3B5BC75FB53B55D72AF4A6A7BB613FA235B11BB37D059FD87127CEF73D5B3FBF
+ 9F91ABAD78BD9240BD9525EBA78095EA0BDB25D1A19E876F292882EAD5619D46
+ D20317A345D931F4FF4EAE6216C27044CBA525E3B917CEA25A04C120466C4B93
+ FC720E6BA832A06CCA0A3916CEF0968D49085AEBD243C41A448289A6F05CE3F5
+ 79148DC112A3CC7E8FF810B8C1A09E05F496C0F1EBA334E42E05C376C98F5F69
+ C06C71BFC0A2F3AC9951CFBB143C66FB84F9C4ED27DF70869352D61BD5E11508
+ 0797B87C74D8E22C8581255E53BBF5A60D2A2093A425B87BED042D98511AC458
+ 40263CA6C8EDC90809C5CFA64074ACBECA89FF5232C9D2A5CC330DC83E5EBE1B
+ FE64FE24C15123B7A19C909BF1B2E4EC48294BA721F84BEE62A4A4F85C397EC1
+ 4384918D5CE9A024FB2BF7C3585452E5F916677264706828E1E8A448C2FB7DF8
+ 636CFDE774416850E0343E96C3F1968BDC4AB3BCBD60A794392309CFCDF2F817
+ F7750EF43714EC855DF81ED6A81E4B42B0416A40D29D81ED7C2AB3C436A94CEB
+ 243703538C59F94C9E289A2D7970F47BBBC6B73656A75F08456FB6408B696CF2
+ 6AF5F9D1E076F6479D52D48F4CD93114CD572F11A3EF966BA5142B580C44C911
+ F2D28CC2F297733FD55942C61B0051C7269B718ED6457045DBE9DADCF6C67993
+ DF0EF5805C7AC3CDF1EBBFDFF5A9155690763FBE5C81AA74453ABB8200B676AF
+ B6662F8B9BEAF0FA7B0349C50A690E3ACA076AD20F1E533E6546E16059DA3AE2
+ BB5056E4A19CFCEB32747E08048D6E0FC70B8501526D92A5E5FFD237EE00AD86
+ 25FCBE1CDEF7227E5A5C13B309B91E0A1E7E8C150CA757F86CABA83912EEA0E7
+ BE7119BF6F2232A31E9D7D00C09922B062C4196F56BC3920F5089E4CFC448DA9
+ 62CBCB1691065694EDFD2A6C2D192C38157CADAD01A03574F7FE666E6C693B2B
+ 1AC5FEBE93571CA24261E00DDEE7F5249398209CC823000A9725D4CEE9EE12C3
+ 9211D32A32176F34155A5B13EA381585381B47ED9EE16902DFB503C442FF9D6B
+ 1D9B27215A79FEEA88EE50B756417D91C5BC75F6A4684362234585662CDA26B3
+ F7237ADE44908306D999F30437D5662B1D8A226D056EA1D9AD4E5B9943F44BE3
+ A4313DCB90AA5664EEF2AC280C292CBF10F7AA2D56D7BF0A8737C35BD818E92B
+ D8E604701C560887502408FB85C068C796ECEC6BD09232291B853E04CE2DA712
+ AF9E01BDB0857DFFAFAE0BEA292BDA5792425C93E331E5E8D9BEE11980D63032
+ 2B4AF1914437BDD54D9F169D3BD6F0C685056ED58041C1299A84DBB50F924A78
+ 70F12796D48BAF3BE90C8B7B46A17C218FEE7715185042FEDD8C483D71D05FA3
+ F89EDD501091B5EB395A86E4CEB450B2169AC782524001F81DE9FBD5B0A1B8A3
+ 07BBFF9C8E1997E606E513E3CDFC9DB79FE915C11D886DC13A8648BDB58EA982
+ 761F7C42B98B7ED87066E3885533564A6D9E7EAF55725DD3F65446A5B030E5A0
+ AD19C89A847E7398DF6429453B511D444CD55F57BADAE986C81DD272EBC15DD2
+ E73D8293EE0BC84D942887BFD7400F664E0632AF180F365347E4160DDE094D8B
+ 8C841811EF5BBF248487FA756AC13A3F990E9827392DB7B1BF25E1D33E3158BD
+ 87BDBD9C62E323C54CAD34361A5711738D7D6B5A452034A6C8A1934B0FED228F
+ A793B4DB20C8875F24B94971A90B439E1F9966F5FC695301A1FD56B35C063BEF
+ 8CD0DD039B29A15BD7E1F1665DE0485BC75B3BB158ED58831DABFCDFB584B8C4
+ 8C866AED0FFCCCE309F9F1BD7FE3851C176DFA8BA0EF8B496468A48518992537
+ 0CC7FA8B1AA5B84BE954F4DCF985E9CBAE78CCEC4405B29B3D9862B1BABDBC6E
+ 62CD48D2CAB357B54ED4993E83C432D0C21D3F21FE1CE9FDD2E09C5DC83412FB
+ 699E6BA0D342DD27D82E53CAE2ED38ECCE583FD7790F34EC785063C8FE2503F4
+ 12F57B9864C32C4879CBE6009A26026BEF008350DE6947FA8D70BE77417901C0
+ 7EC070713B1A68B77CA7C8BD8878BE8D4E81021D5CFF0687F7F7DDF4AA8E5796
+ 9C4B6BD1D26C0AF8F4838B39F1B5A73F77D49AEA1FE7EA47BD40C7CA5F3E1EAE
+ 3D5ED928786469472C2169D7C4EC472CEE5B337E12933A279D5D56FBB24252A6
+ 692A692223BDB61BB7E647A9FC1833A5D797356902C577A8A980A04A505DD96B
+ E3B15D3BC19770AD9BDB3AC6E2CBADC3397D8B4CA314C5FAD22F61249CFB6BAA
+ B419763C8116292960D6E2900D2C27A72A781206283233FB7AEE3AF699240397
+ 23B3B447F7A2D376CABDFC1259E4F0E0F79B3B451967CEB308D31216573AA603
+ 60EC6F95813FFF0257BD695589B7FC40A1BC9F598CF2BA4F2024526B66162401
+ 262A
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR8
+ %!PS-AdobeFont-1.1: CMR8 1.0
+ %%CreationDate: 1991 Aug 20 16:39:40
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR8) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR8 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 11 /ff put
+ dup 12 /fi put
+ dup 13 /fl put
+ dup 14 /ffi put
+ dup 39 /quoteright put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 53 /five put
+ dup 54 /six put
+ dup 55 /seven put
+ dup 56 /eight put
+ dup 57 /nine put
+ dup 58 /colon put
+ dup 63 /question put
+ dup 65 /A put
+ dup 66 /B put
+ dup 67 /C put
+ dup 68 /D put
+ dup 69 /E put
+ dup 70 /F put
+ dup 71 /G put
+ dup 72 /H put
+ dup 73 /I put
+ dup 74 /J put
+ dup 75 /K put
+ dup 76 /L put
+ dup 77 /M put
+ dup 78 /N put
+ dup 79 /O put
+ dup 80 /P put
+ dup 82 /R put
+ dup 83 /S put
+ dup 84 /T put
+ dup 85 /U put
+ dup 86 /V put
+ dup 87 /W put
+ dup 91 /bracketleft put
+ dup 93 /bracketright put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 106 /j put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 113 /q put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 119 /w put
+ dup 120 /x put
+ dup 121 /y put
+ dup 122 /z put
+ dup 123 /endash put
+ dup 127 /dieresis put
+ readonly def
+ /FontBBox{-36 -250 1070 750}readonly def
+ /UniqueID 5000791 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
+ 68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
+ 3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
+ 48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
+ 9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
+ 0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
+ 8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
+ EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
+ FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
+ 9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
+ D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
+ 9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
+ ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
+ 10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
+ 83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
+ 2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA912A2BCC6CA6105B29
+ 044005DDBEAF88E0F05541BBD233977A447B469F013D8535A9D7023CC0FB7B49
+ A95CD2B6F18935C37F49E9A73E97A8602C5C26EE13D7A04A188336FCAB4CDEE0
+ 23DE9D803FD6E8D846B3F729BD36137E834E016242CD2F7BF048959DD45AD413
+ 19B985D05E5D422F3D0968375EA6A90FBEBF8B42B15F15280469D69629C08A42
+ 1C298CC027CC288B9C984239ABB96B6A891C1360D08F9ECC22202861E4CE9B39
+ 8BF329F41505801E80D44192B4267A538C9DB82EE98E17CAEC068F7B2B750260
+ E2B4A6DFD9677D28F69346AB75EE1EA754DE12D5CA0286E55839EA9A46D9109D
+ 56F8B230A446C3162EC8503A085D5594006D17AD56E5BC2FB04910450B0A463E
+ 6CCD91C5C9600354F01023F9577F2B3EA74E9C7E64F44294474FF49BD0923F86
+ E786E374FD7F059988C272478C231D4F63830FEEB07747B41BE59A26B39E969B
+ C72C8D8BA4E5EB2E84DF4EA0E9C09AC5914BF31393DF0739CAE0873A42C6C700
+ 06B5D6D8C9AE342376EAFC8F9F666112EEB307DD6644EDE1A282EC8BEB45A63D
+ 00358C8E0BD2DC583138B090CFC0BBE1ED8B5FAEF10E0A3F0A83D696042486A1
+ 14A5DBC1DD1A07641752F3AAA99ED88D9A3F8013072D4B4CABDC411A4B3BDDA8
+ 32F002031588AB27FDA1378DC71D028557CA89C1156B86B586CF704526CDC05A
+ 2A315CFBFE6DC926CE847B70E34EE50BF7E6084DEAB685AED246C659E5B133D9
+ 639F7FFFC7CC4CF441DC0E5FFC183EF2DE3D5DB1112B23AD55CFAD2CB06A82FC
+ 20C953C43CC6F4B779F601ED0BE0AF4B29DB1208074CD3998CFA0FED8B5422AF
+ 7A75D94F2620975E8C5274494A9B3BF127FA723B31FEC77509E8DA5A6E92E8F9
+ DA5F71191C555242B05B247BB1453DC90D9860373949863101A35516711F25E4
+ BF4B7EB1354410F8DDBC4819C4CED5C589A15CC43FF1E76512C12FDA951AC58C
+ 959A6CD6A162E7461116777A90C70F135B936AC3A8941A9E3363D25EE8FFFBBA
+ 78C364E3F8111EE34BFD56C9704F8882538BBD26E80E3D5D82D1CEF8F0BBD345
+ 85FC0D601EBBCCD089C16BE244745D54AF05373569BA7AE0FBB2D368C80444DD
+ F3E6B8BCA08EE19178F253D4C8E5D79CF653346B9F79DE7E63BBD41613609C45
+ A83115AF6E0BD1F04A7C50F066C5236C7D9557C7EDE1229D9B9445A45CC9DAA1
+ 3359951CB474DB6B6702C712CD82B36803B2C2599641B9FAC8245A82E556CDD9
+ B252C40393B7989C408477A3B0B58BCA83D6E96CC34F7597F7FDF520878FB08C
+ 44B5E4A659A8E2BD939F32FC8737F6D0EC793D5EDEAA199E24EF64D7CDF8F7A7
+ C0B830733A6C14D0E6445B7364AD541DFECDE6A9E3BD2799768E3B61AEB8394F
+ 0A944D13D8CAB172AF53887964ECA441B59715C3C65F62B0B27D61741E65CED7
+ 8C4D9126738F45A99696DAC5F585305B793BC0F775EF6840E5C1B8DCD61AEBDE
+ 8183D4A56AC00070143FEC66BD38EAE44AF285CDAB1FE4392F45AEBE5B89E96A
+ BB7AF328ADD21B2A6B31BC6268AB7C2501BD9C0B8B11419F837A971C139D5A55
+ AF4091DB9DD2E8AF722A82051594EF17AE2D27FB4A5BCD5E4CBA59E6DCA35424
+ F68E4DF8D5A2E8E3CFFDCCC9321E101E02CFF569E64B25DF4C7377602C799FBB
+ B7A355422F938089582786CBADF7E0173263C72439D46E5B8937849D20B84B50
+ 4A1B621B390E893CC789051CF62710113ACCD62F0C507FD5C40F90FCFC00C580
+ BA82B63615854AA43829F65073EC110EF4B89EB725C420A3C2DF005CF18C4D4B
+ C4B047781B82BF17C3CC820FCC7B41134AF14032161B1A50064DEFDCFAC6C40B
+ F65C00708E887B38D5A0BF1596778ED7E8AACFDE11371C9C66D1EFC6DB1BACF8
+ EE0DAD706378DD230435F5216B73B9FCD08EFE2B3D7B60F2C006DE792B83935F
+ 2B537577E85178A719EFE3BC786D1BB3D5D988F6E9A301C121E4DB127BA5434C
+ 412DF076D3A8DC8864ACBD2146EDE0BF5701C5C1A517F6D01435E5D471CBCD63
+ EC7F252ABBC3DA5B4A2654E7AC8C69D1690252B168633E71635A79A263145D6B
+ B125DC9E2CFFA30DB01E0866A9616E43B9ADBF8554CB9B311D782AC96652B9C5
+ CC7059BCA006B8764E2C2822F02E6441060E55715831371EE67D8FE1E6C74E8B
+ BE077DB3CE509A4B2CA6B2172265D480569FA66509372659AE8C3285E79EDDDC
+ FA29D8AF61270416E99F3A5359F21E0BACDB188E8EFFD437EF8B17624C976D1C
+ DE672037230731BDAA69D8784EF6864871947F6ADB9BDC4EBFB268243C05A988
+ C58828BE8B208DD2F0FB9DE18E3BADCF8CFDE2D345EF59BEDD75A954AFFD2007
+ 295BC2D6145500D70E48E8B7C3E800EA428FEF7A8AC9DE26451D606976ECA560
+ 48FFE7FE40AF3327C79BBF40937FC5C7B45D3510417519B7745BB58EDBA6BBDE
+ 5FC11EDE4A73CB2E4ED7716C30BC289778F50475F9E2383AF4AFBDE28789E4FB
+ D0BAF731C93506A1D09AA123682B8CECA6086FA93BE7AE526DDA5C10BE03A11B
+ 36D59B692DB4EB85968E1C38BFCD060A5469049384964D0C2D5C8088BA2D3177
+ 9AAE37753A4FAA458F618CAF666DBB45E6F951C38DD2D528BA855576357B9A5A
+ 34A563302C747FD6775C48219FD82F5402FB285D04FB8CCB9E6AF384847B2BD6
+ 1A51CC992CC01AE6FF5D1666D4235633FB7A14FA2ADF356F825D4DDB1BADD525
+ 348167054764A86F1EA39078BFDADD6E0FF2BDC2270454FE340427A158BA6499
+ 5F82812693F681AE3A7A8E25F3954C60DC6E5574FC64A74FAD439FACA8E3E2BC
+ 34096406B4662391843834C272E9FF40BD4703CB92215C6FAE833DBAACFD9647
+ 0EB7CBDC4B29093C5DE2827671D1D69AE1EE36CF39D2C78C67ACF671B3F58BEC
+ 9198486BE4DACEAFCCBE3B5C19CD9C6332FA0391ABED1707E8C1418D60E633C7
+ 313560EDC92D6AAD6635C920B412D70F3049B8E1E647A3C0A26A3D50210E09BB
+ A956133F843A2BC2A4812611D9B5E42E80DC41F8FE09EA5F0D5EF2F83B9E4FA0
+ F727200643111DB373A07BD93E55DE8DB7B7ACD63CFD987B940449485DF6870B
+ 01071726848AE8CD5AB826CD61243400BFB8BBF11B9DC81FD60DAE38B1356883
+ 55748E3C17DE0DCEF8E35572D93223944C7DEBFAF6A674FB9F93D5C7ADCC9387
+ A9784EE80202625AD0CF1DED0EF0C04A9D795E269C6687654B3F32DA0E595BA4
+ 431D9584E3514EC8841C6ABE5BE87C0C46C877A401DFA852B3BCF069761B76D7
+ 79DAFC7BF7BF179865710118A2A2E755A98491ECE0752416B79BF12EBF708511
+ 0FA28D6FAACBF59806289784E050DD3C3D0E1CAD1DB06FB88819BEE98FA5B398
+ 7E6EB5A12513BDB061AB88FC25A5E60C3D8AFEB5141754E99FB42FE1CFB7848C
+ 42B7A27592A9DB1EB02573BE26424AC128A0DAD9BBDB702A527CA9C2D91C1BF6
+ 827F86947673A2968FF34481A82E7C4ACCF4D7FEE19C3F42995F93C020D43A16
+ BEDF564D2CFEFC30D9EDBDF382C924BB5405F9577DF69D19FDACEC24ABBCF32E
+ 62FC1F4AE7D59465EB5E66E533262983A5CB8A6CEA7781F2760189BCF9186A92
+ 7FE41E93D44537EEEEEDBFC73A90C9515488A72E112C4919B36345E0E37FF40F
+ 0DD94683BFDD8936F1B7DA163802A4E2078ACE1908952EC5C03EA7F3BD08C227
+ 2D4E9C81200860D71C7F585E549A80C0EC93357DB92A17FCFC234E07083604AB
+ 945F863056F3374FAEC993C3EEB07FFBB087DD6608E661EC506954996D8D057D
+ 61A9FF8EE7C09850C5AEAE8AA0B615B2BE9BEBCDEDA33E5C8F570B9F5FF02F33
+ B96C7B5E05E80D95E43DEF909C07B08B74F4F775693DFAFA82785FC84CAABF78
+ DE8F81B569578E9D878A2E3ED8875E591E883859D6B63E31E8F6126505559555
+ 694F1C47D55D0AFBFEBC5FF02BB9FAF8DB5058640A636BDFF548E868034C3E58
+ 09A0DCFB629AD5A2159C33AC688D8C44798741AB30E149D6D7135432F3BC6FC9
+ 207D9A75988C5D0DEE9F9361F2A1A527543F85FF1F864D2C4C8EC6D3C997FAD3
+ C84EC5D2B0670FC53811222EEDCE872C2FF14CB648E100104FE55D16D70366D0
+ 8D5CB970ABE75D2B40E23AA8A45B436C46B74383E26BD16E54C73F90084E1835
+ F4C194C8E57EBCEB358A9E726B9965FEDBBE73D328D807B23FAA89CF5504742D
+ E95927E48430235B7B679FA89F92DCD0BF0F6159FCDC18E1D4E7E0D8CCE16F9B
+ 550710C5A1B95EFC6A9C80765945B0E53CC563BF5C55FA3745266730535926B0
+ 264701502355A3FF4173E5815E03F9B284EB82856B8C275BB59D551D455F36FA
+ 1DF6985726889FFA6E48C0E20E907BE55E8B18BAE30021C82B12C5BC4EF335EF
+ D79B5D1C34C86C59B2E12F4C7FCA102577D24799E28F91AD73ADE802E715710D
+ 3A5C0054C6344547A030FC9ECFBFDC659B28F5F7E029DED60A8F9FDEB5365A67
+ AC72ADDC17E579050823C44CE01CE6C9E37E1B5B52B5C6062FE4D5EA4835C3D4
+ DB41E99BA4A050F14FC1A93BC1F587313D13C879C3955E1AE7E0E853C04C7488
+ E0AA49EEB684B3D184C5A9C573DCB1726F39C1A22AFF6895792129CC824EFFCC
+ B5E9103A21DF34184C222C9EC91CB6372855C4EBF9097D47BFF3191FF4FA02FC
+ A327EB15325668EB91D2A3B2F6C8BA70C900D45C272D12DDD6F7B368D8C694D8
+ BCE5F3C3C1B67A20787D8C4DB8435D4A64F796CB1DD2A8D8F121C4B089D97D52
+ A4514D47189E6725DC5E67F4F6F8E4AC73EAD99398F4F3190C91BB29ADC857EB
+ F2C3EBDA21B57779E3587CFB4EAF69DA0771F62C82FDE4936DA542E75C212DA0
+ A79AE9BAB50F663F5EF07A9CEC5FD7AA1B073ECD2D1CE568E95394E1ED7A5E88
+ 77A52BED76B33AC42DF0042BBD3AF38E082AA2A906B3940B78CD4BD9B02FCACE
+ CABF0820B3CD0D9555D4AB49A5FAF1727B323B594B9AA4C8208040887DF1A176
+ 446F1792DA819E937E1CCDAE6A40D4DA361B71336E735243AB176F831F4E04A2
+ E18E5C5BA6D3A1FD58B5A3886824B73407B1A13CC551408F86516B9B5036AE70
+ E6A683A63C948F6F96AF5FDC07323C4777C12BF92EADF056DCFE197BEE2E5867
+ E7FE8538F22582E327319EE6D5EEEE6764D13F86E3F91320F9273A6F9BB726B0
+ 71544F98B11DB908AB7151A130A5794932839A8D571641B582C7F7CCC0ABB1D2
+ 888877C98ED0345EB83593CB3B8EB39F393542F95573752BD9B8F72493B0CB1C
+ 67347D392568ACAD081335E752D6AA1252503DFE68AF39ADE61B761EB9E2D2C7
+ 746CDD16EFB036EB091739BBE37441AF692C6649C20102F77C803B4BBAA5FB65
+ D9F89A68CFE39A90F0F078A63EF62244006088FBE3FDE42B83CF8FE7FFB597CD
+ D9476496E24AA01158AFC2EE552127F27C9D7EE3519CC97B7105FB4FDA9716D0
+ 660700DA9A694886983CE2D091D00A7A81EFCDFFC257810E94CBB0A82513EBC9
+ 2E4333D7FC1564C64F75C699F9DEAC57C5FF40130C8321679DAD694E83FDF29F
+ 21602BFFBBCF5CF5CAE2A6677F052B5D4DDFA5E8D620CA684509390415D8A4F8
+ 7C01F5797BF88728B4A325723E7E07D862D6923333E4D103E0DB8A69C6886FB1
+ 41288D6EA1DFEC91BC1C7A8CE4EF24F87D549C8292C64630808FB5F6B10B92E4
+ 6D1C2E66AA0C8F86F5EE597941EF8AB371F70481FAEDDB10DD59CFF0EFC52578
+ 5996C155253C855D1A1C4174A7C0EB78C3260C6AF5BBD1C44DB58C14C2CD5780
+ F7567D1D2A757EA9D84DE1C1668C1D750587DAA90CAF7D533974428BA4A8D3BD
+ 5127D041D3C17E3612563D02291EFBC2B6780C63DD160060ABCF4D3426D6A112
+ 687A97A19760AAF236B23794E0796456C803AEC71CAC96E06AF0CC4A3D728EFF
+ 85D93A9491DE0F84BE379A44C019C97ED1AD11315F9B1F82BD27F71EF07D972F
+ 602C6FCD0E207DBFC4DD176A5B1F0034ABADB2C2C66422F8C81870346567A49D
+ 391EB35B0D48024B8D8D14F688F1E3BD752B381232E925D7E101144320922915
+ AC050D139D1030CCC23A3D01A5BC49AFE1E5644B07CAF54C325268CCA263A51B
+ D0EB27D512B0190FACBE04B4CA9D9F4DDA9144DBE354460CC5FD567184D16075
+ 241EB73EEE74C95042B4E2D10E90BE2915B6B8BA41CD4E250A955E6500E6172B
+ 18989214C166FFF3E14AE4343C2F27DB0E6B9EE7A3C2BD9540C73870CE735ACE
+ 476E99C7982F55724C127A95308357AF7D8AFF9CDA134FCD191E380A233F786F
+ C56BB039F07587F3CDDFCDFEBA24CF241846B892EBF7919E6E25DC1B91FFF382
+ C5B4DB262CB21C9B10BD60A25A14C0C109AA9110888B8AE7680EACC36137C261
+ 18A80DAB0C569EA522FED30A88FD27416B97E8596E24A42F943B5E92397C949A
+ 8BE527A6AF9C2D187AEE290276D7D714F8F99C07A0DEA126500D8645CC23F429
+ 591E7FC0787C793A3487570214F6AAB7C69987FFCF5D9C16BF12B527E2FCDA67
+ 115263753D8FE80C5C97B08B381E5BFB719A4802AAC1E9277CADF4C4C0E0E767
+ E14F8B34BC8076AD9A6E02615AB5675E54A2BE3185D9D5BF04482A6FD4A42CE6
+ A82DBE6E935B37354B2E6AE68E4DD313589F90621BD398C9BCCDB5BBE25C2DFE
+ 5FB1AC830F960C9A30266FC1BF506957F6E28A5C438398E9F8C043390E61184A
+ 8DF953B03DF47287A752720DEBD487AB29E12DC3C9432755FE72CF722B60BF2F
+ 90D56C1063A6DA3071744A55D91ED7241F28C0AAFA381D473FEBC3E837D6D72B
+ F262E28D001319EDE1615744328DD383B97DFE912D7167E96BA8C2957C6D70C9
+ 4863F56BCA7B15447534379854F7F5F52A91AA7F92028923CAA9A86522F44716
+ 88CE6659BE11AC9B766DE5EF215363C9E96E8444631703358E2F88B0B72C0F0E
+ 2E3CE3E7ADD0FD5E16D7B48E26B5BF89E0C7289AEB8D6CB26EBE5E642AED2F4F
+ CD5B9AA5E7F4538060D880C10A8A27AED704C7E11B44F21BE0C7B78A7319CB76
+ D22B9A62EE8B103E006F8966D9B5CDCAE40D76CD1A3D3036E20D55FE80B7CEEC
+ 3712911C2E58B3E966C043FA1FB941B69211CFFD9B1CF5F05F38887C41FCC26F
+ 81AFB878D21D3545C5360D986478CC0BE8A7BB1DDDA7AD99299BCA6D433E2625
+ A7167EB71A366B807D1D5AC890F3F2DB4E1A226374528B0342350314F6665592
+ 7DD45E2B40BCE80527900EA1CF1B4D005F2AB0EE26D5747EFDDC96ADF8E19497
+ 5FCD9BD49E5B190610B83554CB4686D06F1CB93A7E8CEF396059694068FF920F
+ C406DF73E396B34BEC408E29838311E27823EA9CCF709149A67E2D84F7375385
+ 68F7795065F80B906A53BF01A07680FD3E2C24CD4EF9B260E53AE31E187EC8BE
+ 84299126CEDB69BAA09F2B17E0D72BA17524024E5E1584C1B439AC91370B92E0
+ 7D3F7800B8EC019F0D56935A2B90E27D7533D29895ADD82A0803E26FB0D11DD2
+ 2BEDE3394FA15874923C2044B3D0F2BD4654319C60613575F3B90A3377879106
+ C46DE7963795B9794F9BB762FC3A4F5D3F336B559DFB976B11575C02B518142F
+ 1F79DAD205999137BF710DA9F07CAA9EDCF36D271730658EC1B6C77A8BD315A4
+ 87C376C16C67D147312AFED16B20477333C0B5E5F4D679CB72E84A50B8E6590C
+ 75D78783708F07C054F9A66A6CEA87EC005794D3A0A764D77F9FCDD730E7E78C
+ 32C6ECEA7E0ACD8576B8EB6AC15D15B196F7D1B69E73D1A97893152F803EFEDD
+ F739644B6BA6F0039D665F889E32838DAA53975B151BFB13789CAD13B763E46F
+ 120BC0EA5E98F1E0C553E1D0571F02058256EAF39EBA620BA5B7F85FE0DA831A
+ BC4FF4F5D727A9FDED40254F20315F082486894F03933E8EDCABDC2AE49199B8
+ F48676C2CF28F5DCD1419369D15C6E6B0FFF7F88A364FDBE74069D2736230D97
+ EB3D44CB8E8389999647E0CE9717B90B06CE3A90D80DC3A6AB244BFD6DF8654A
+ 6AB87154969DA60C925C9B1D835676F664C8071B759E793699D39E1201594647
+ 6748C2E2DDB86DB3F1344CF1370C2AE64CFF73B45BA22E9BD81EFAF37AC891B3
+ 5200390DA867E09109C020B9C88F3C70E8B567FA7F53EC60BABD8A897EE35769
+ 8B5B1C460921A92E8C7C7749EBFB64A73F68293E5E636C5C76A88496FBDFA1C8
+ EA2EDEDF4C8195660ABFEFA89995146354C09BB3E1CEC1E97ECB54876F119DD2
+ 66E43004E536609F2E71173314B48C7AE4BE11CB03A63B6E919FBB7834845ED7
+ 6475F08031CAF25706F9926E7727132E673A420530372E2037C81AA68F6754BE
+ E6303008C47D44C2A7BA9F29973939DDCA85C08E2988FAF3FDDA7EEFE8B720F6
+ 1029D2A233A1FD6A88CD502E482E322AA51BAD096E4853C899A549517D399EC8
+ 679C8FAA3300ECE21884A5A0A8EDDA50060B5D73519CD6BC8CB691DCC3A8117E
+ EE303C52E7F447358EB27E9D2EC315719FF860C2AF6768240F07B2C329C69843
+ 124921A6FBBDEE4DFD8941D038E3EE11AB40BE5E41217AA4A955841508F6C6CB
+ 9520B3944233F42B405973B60D8714CD46C5B4FA3D68F84A98C142CA92E915E4
+ 95F9479D9DAB9C2B327760DA044A8C4652016A97F92CB6C2AD95A931C28DD8B5
+ 372FD47B1AFFE4D6A41E4A90605EF6281457CA39DA4F3112079049E0EDDDAF9A
+ 59EC90C67BF374E503AB7F9431319C0F7844803D990DB3A201CFE972995113BA
+ 1FAF68CCAF9A8102A4A0B89FE4FFDA21D0062BC69C66F6BD931B130C4433C05E
+ F7C848E8504ECEEA331082C3EE47A216052999521A533E516B855581017E0611
+ 3297FC035D55B2FA124380FC9B69CEE7834EDE3DCCFD9A488316B4DBDA3004C4
+ 4A8FE55427AE77C38A1DE3DD4658CA81F310B68C8180DA8177174A544D137117
+ ACFAB5767582196C685F20552DB00FC3FFD21C80DED3388123F6DDE7E5C22591
+ 4545E123BC88E7AD47BD541CEF88EFE013F5A73CC6850C816A10E25E5E60C164
+ 86AF283B9A6427D6873D259C780AA9717336F7BF78938C77CFAB90E857A3ABE9
+ 671FF7CF70D5FFD1DD36FE3F456D31199BEB04DE50AAEEA2A128F54CFED44999
+ 7572403443BC14D8B3351DC6D15834D3C4144CD1153ACF1122DA9F3CD792E74F
+ EBA7174C217C0EF212C798A02BA9599C989B989596EFD1CD5D970BDB22962BE9
+ 2448CEC2466876342EE02A680D64EA12CB4F5672C64D7D170A6C8414EF202AE4
+ B62E07B99B0B642C9C38040C90C1621C610B72743F78133DA9D355646BA113F5
+ 226A38E1EABBC2B5E042E0305B5B10EFCF641F4B0165360092134CD0F2D48CCF
+ D6A0A18E9D321DAF7E578319E46657CD3255C36078726B8D218DE0F171D2991A
+ 28F1E2AECA9B492D6A8B8F60BE42123C15ADD51B88CDBBFF2131EBE33E5898CB
+ 0C3C2A4E9416CBE88DE97A73C2939746FB886A4204597919571E94E04852AC16
+ 5A1DE09F77326E6AA13F99C834C76B19C236A576D3D1A806D82EBBB38AB1D02A
+ 5D566D5D38B987B30E61D8ABAFBEFEE7AA0885E4ED1C6E209E0A86EED419B050
+ 735DFCE6540C847ACC36C98AC63B392A784747A9710F4F8756E7A4097BB3A5B2
+ CCE68DFEBD0ED42AD4A3DA0EADC940C975672B4C733EEC9B65F49D219DA49AD0
+ FBFFBDF9AC4E8583C220C09E5AB96321A1BD005C1F9753C404962187A3F18540
+ ADDE7FA34CBF2CC48F2B176BB3466D74230C015EAF3D286D327002835B7F34F0
+ 0116F40F4C78830B799F062A1C2439B1E80F7944DF5CF4C3764EA1CC524D1572
+ 9EC959BA3481A0D222662FA5BE5652B9490946EA1A1C358592F88D1D5162485B
+ D61FB7FFCC3EE60A5731B9328185D4BF47F4E02263A8FB3233C077EAC0FCF103
+ 1298003E70C22E97B75C2DB7FBE5171EDA5334FDE11D3D9900EF0D444ED848B3
+ 224FC5E783BC0462D526179FE17854A13EE4CD01E8A6806BF88B4BE0A2EC6465
+ DAF606C38A416CD0ECC1C9944A34E1258FA68D27CF1A6BDE265A4B981ADDFC97
+ F9FE303573CC32B190EC67E9A00FEC3E843CCC5B4E920E05158C291240F2234E
+ B0855E5826F6057FDABFBF9616E07DEF2A008FE15B26D803E33E475CE93D0910
+ 6C15C4053A343A3CC1EAA5729046953A4A4F739C8C003C72C9D27CDFE8E1E566
+ 633672BCACAEF5258982F83A7D4115DD23A2662A7E494C5F505C088A11B17AAF
+ CFFB1882E425EBA785FD5CA5BE01195F0F1C7EA1E8E71A46B52EA37C04ACB669
+ 1FFAB3850610C19A69C944FFFA449274F90A24C1997AA41E4297EB8BF698B946
+ 069830BFB57FC797E10B10D4597AC08A02493DB37DBF2EDC4E0957272D0623C1
+ 70747E23A886D8DAE42C780A9DB9B28031F945D807F34CF6B9120BC18CBD7B56
+ 4CA6B6AAE53B5CDF2A5510414097535A78279A33BF134A6507F3E1CD897B25E2
+ E06DEAD887C0C1DDC80AB980AC597D734A1D14ADBFF5F31EA9D5A7F0FD3E95B8
+ AC0A231C8BC56DAD157405D77D632316E5D5F3353E412121B2B9D60781C51E84
+ E0C77853878687A84F622A33DF1F211C58E6CF84663015439896464E4D93AA42
+ A86FD41BACEF8E0C0E6F0A2422ABD07E80069A3FDF7013ACD978697C39626C95
+ 9BF64A27CAB3559952767BCC53A4EB0B1BC7BA0769F629A36B928CF823126440
+ B5CC2A47B31790E3EAC3BF45F847089C10F41CEA57D0B5BC6CDC9265B886B0BA
+ 9405E0D144F9A2D44AC8ED84009423F8CD950595247607B344B2D57D184A87C8
+ FC2D6C178CAFED55C26FF058A68C9942952C8381EC4CB3958CABD572A8B10C81
+ 4F48727BF9A2870924ECCE293C7DD200EFD596E34E8755719CBB698506A3E703
+ 9B51A36CCA90CEB9FB1949CF3810CA490F90EF3390974C6494EF9E4077D6640C
+ 9035F58F9409EB01212B5D5C9BF1B9FE0C410013AB7E27F029C91F29EA82628B
+ 1F236AEEAE09974831AA29034B6395CDEC2D4E4154430CFD49C80BD2345813E8
+ 534C47BF7A8DAA44F2C8C19292FE5D060FE82E93C3281E4B7AF3E32C6C11A144
+ 641FDF3A66179F9939D65458938FF0EE47A4B2A2E2D4C7709618D503F2C8E25F
+ A6E6516C09A2D530952F33BF8613FF88231D1EFD82A2E98AE426730E628DA8C4
+ E17A7E494494A6F563B9A32BB2F5147D9A1C227740C59C6597BCDEDEB558FC69
+ 98E82AB2D90CF97B8E9E9A79874EBA37C473EE0B38DF7D8BA5822B01FB27EFE5
+ 2FB88266885B1DFA76C0CAF6C6B8C73C9D16905DABC51AF572D38ACA13DBD66F
+ CDE12EB6B39654602133D6028B0FC1A06396A2559C27FAE8DAE41F576A7CBFE7
+ 7E1D29E7249B6193DE3E95D026B38FE3792D869DB9A1BA80473F63267C35B550
+ 334DC1751A7D63DC1063E1FA6EF703465598886CD12EC8F053906AD268DE29EA
+ F8CD399D098682F3EA27308135AA3AB0C8DF07B9EE27F610DD9832B5C0528643
+ 48BD2328463E8E5BE1B15A94AE19B7EF0C77841A8C769C600854D9106F9A0604
+ BCEC1B9BE3947960EBC8D9F5F92B15DE406B4F760021E99C8513B48626F38A09
+ DD3C9B9C4C47FF3DB9509DF765ED1B26C0505AE6A27C7340DB19F8EF40DAE260
+ F162A96A1B7F571EBBFC6541CFB57DF82B32EEF7A0CB833897CCC06B7E3913E8
+ B056DFD014D33DE99333DE706D482DD08E41B900DD666957B33E9624FD39403B
+ 612E210737AF17176C30B611D782811A891BE63309530DEE1DCE7C9C197BD559
+ E036B00CB9AF9586BFCBFE3D2EF227C785D00B2E3D27CDF4F43AD04F39609E02
+ 31FBB8F8D1F991104A3B660E1F78A5D5841B2FE31F6B94C8BE853F8CBA2B93A3
+ 75AE6DA6BBCFFAFE56BE02FB24DA7DC8C22E3DC7BDCDCF3D97D6462DF5DA74F6
+ 49496152B2B2DF6674800250EBCD83B7CCB0B2240F5F13F5A594E2EB3DEAF472
+ 429D74457F1C96C6F909BA0CC7A9C71A4278814D96BF649CE38D1A22DDA6D162
+ BF2CE20D8A271C5038F5567A92A0AB2B1C6F5041357E238D8D05A407FE086E59
+ 77D3FE12899E5CF33931085AE6822808F00467EA7AEB53F5BC32A2C89FF0511F
+ E84F8B4233959F9664BE022278BB9F1EC77C1EF96C0AF4787756897D9C797909
+ ECBB6991058DD86F5DD688C8526E5CFDC219B0C30EE0CDFE28A0BC9424442ED9
+ 9DFD3CA35879A5D19FBE17FB7E5D5065CEDF21E2E49F2879375A84295085B04D
+ 11871A32124DB1C0B9B1F592938807C8ED46B070EB723FCFB97D0A50811A2FAF
+ 8E3694685BE1AF729159AEC34B56FA42ED136C6896B2489F0E7E2CD112BBA18D
+ 5C53A25AD462C280372C86F4F61C67DE0BF6347F0630B83D6BE6DF28C1DAAA31
+ 275330FE0015EA6454E0AF6295AD760855AB71CE6E4F1C9E3D59C982E8653008
+ ACA4BD500095496EAB6A5F3EF9C14996CE92DAA4D05FE1B5FB77EE765BB9FA8A
+ F71202C2C75CC7D04A8764AA4CAD559442C5273BE7FE698996867B93885CF542
+ E1956F22436FAE734E364A1B88B0B7BA1294E8EEA51F513D6E0ED34F9CC001F1
+ DC90744FA656C13554EBB52C891C283546B72D009141593DBA3EF470FE5BB2E4
+ 78A29DF1B4DE1AC21FB941394AA69DEB60A38F2E022B185434AC7B33D3E29FC9
+ FBBA5EC1C13730744A4C3925FE025F0882EAD7327AB2965780EB53E1B6E00A8A
+ 9601EF6A9F61BC0A6852E3F5CBD9E6564ED238887BE5218B49C57AC580D8B0B5
+ 6DB3D1915404C07226D753488EC9CD526578B25BD0A6A58C960EF443A0EBE3A1
+ 97A82A43DA19987FE82B22B8CAA8D5958394BD3430B3F434AD6E38CF2D234CB3
+ 698B8CA0864C7F613D1286B9BF0A9DDCE141EA85CE0C6631371AD35C3A550849
+ 80E333327D0DF295C1D33DB0BFEE46570C565FD8DA1EBB09780582B1047F4627
+ 35068AAE7CF9825B2A7C6B4160184EB64106AA975620E513336AE446EA2D4E29
+ 0BB40222005D24886F9DF9ABEA062EB9DA82C5A8D853F1E018E5666580652B29
+ FD3E48B30ACCE66AB83E9214B7293BA77E3DFA95AC776684E3545BB533CF3CBA
+ 3ABF0D6E91CC907A3DCBC7166CB326B1711805859DCEBBEA86D2E131FADDE03F
+ 88558802744833EB19DB2B8DC962BB29B4953DCD4C4364E9DAA23F610517C66A
+ DE40FE3F3DA4C5FD968FF101A14FACF354C92451D63A9319DE7720A218370DC0
+ B140EFB9041BC9D717273D5DD2A654B357241E96E756C51B0A840E14CFCE8748
+ 25FFEF84F8B7958C48F5812BCB3C14AE0522D87DD71D06FBBB5DAB19418B1095
+ 5C3C7473CD200D4673F5F60FF3F9D62D266DD6C1BCA6649F724677F7BF3EC0EB
+ 974DF12E89357EE3B6475C6AE03CF11229D6A862A91D7B6B24AFAAAF1245BEF6
+ 80A38BF3F194ECF244C625813A0349B19A956A01CA584F49D54A2336C50BBC16
+ 6465DDB33A87C806FD3CD980175F8D12A1724F239649F3E3FBC9E73C1EEAB85A
+ 0F936C032DFB182C9616A5AC2B060B72F3DAFBED671FB8DA10B6FBAAD45280B1
+ 371D664B38E42FC261CCE66D78FF1278A786F94E7211D6D3244F5ABE56E572B3
+ 1F4629C982229CED14816B211D8552870D9D78779B338B5076EBF4DF54463FB8
+ DF7DAEB5AA9C6FA3184E746D91E7F7CEC8925A0B56DB4D87657E94D80427560D
+ 89E845F4BCB714D431C884AC12232C97DFE4EECE6FC51364B5A1AA644F6645A5
+ 360469880810315A0540463A7BCFF3EA25E1254934D38228502B5F254EC5557E
+ 8E1729808D961473AA91C8271E69494D6DD622CE8FD95BA9C956D4DED70A447E
+ 4C0E505E9CD1CE0619253FF5776526707F535A8938382618D1F9449EDBDD16F0
+ 5B0A0AE8927EC9C063F923F0C72FABB68A5682FD43949A921B68EA37C6ABC9E5
+ C1AF534FF272955E4743662BB8D3AC0EE71B4DD8915D4A7E0B74D2D83064A60C
+ 26E9A36E8B8DAF0CB117E98A52445E1E15C8D1B6267FDE1C00207002B7D75BA9
+ 48C3D2D4FC8E214C74007BC4FF71F124E18265BE1F2CEB42780ADD9FC4BD1994
+ 6F78E9DFE39F2C0AF10630665669152401A971FA6AF5AF58C57436784AB6D665
+ 5443C5E6545E094E5EF9155F053F3DB906A3093DE9A6A96D6DA0040E3BD17A59
+ A1A1BB62DD970CB01B9F855E11A658236084CE79343917398C582E494D5B2C4A
+ 3FFF741596504737E8071B14BEEF76B38B9F80CAFE85427930AEC3D6293B040A
+ 919B253C3D2D5C508B44B6C1BF2023E49B7BD3623B2640448352CC834961057B
+ 13399B9F94114CD17CC15D36A67E77401CE9C62FDA24042EAD275EA06F8BAA75
+ CCA9384CD1A623140147D5A3E2C4D9023EDA17CB5565A378FCBA9AE4605D8159
+ E2E1DA3574FAF160225812E1D246C0F67377AAC31B32DC0FFD02075B0A141521
+ 8DE6D028039B8328140BF309B92A19588744282711C18EC092D7B9E3FDDE62DD
+ 396AE5AD31852CDB72EC25A62C7B980D32F025EBD12A86D93FACBC3695E48709
+ 9EFF3E950BCF42EF05D199405EAFDEB59C396FC9B32F9328D947094A75AF47A3
+ 74F8861D6256BED3B256FCA8E1CA348117DBFAE58224D12F7E63CCBE1C81E10E
+ E5C1E5087345D278422D73D2013A46401469C271F393516F8F60C85BE3577DB2
+ 29639EFAF1C0B73DB4DEE296D7DD1B48A8217A7C8EBDDA48D00CC66F8F10569B
+ 665132DB2CD36299CAE1DD3BD463995ED6CA2EB55F0449688640D4ABA531F512
+ 83068CB7310E22EEAA7ABA54F1C23FBA6CAAF69D9B5090002BC1A58596801B48
+ D6F7F0A3F9BBDA9A33C4E0B09363638251E6AE9E7DF4EFF98A9B0CB2960988CF
+ ADBF30E008D51C57B4272A6A283D0D0B6A0B9B3DCD99B443FF3C6EE381B5F41E
+ 3686D60320B2026C7E8463A80BBC6A695F0226FF59ECF3BB9F6D88EE57655CBC
+ 5432E49CDBAF76E4B810C74C5858DF8BC93F9DFA833EA4F008792B97476EE52F
+ ED1A179A2F620A7D9C25BAAED03AF788E8BBCC16F2D2A84FFC603A13CB15CD13
+ 3AA8C30FEAA07AA782CD643386F227FFC53118AB803EDDB21E9C8E5E4361EC39
+ F2C13125EDE1A117580ADF0900AB5186AB59A32513EE57D74314850D9837EE4B
+ 71F64FD5BABBAD0B534BC07C2F9B1C3A9DEA07EEFF58D9BBCF6B13340358C531
+ 3F80903944378D47CEEC7A3EA4AA9524C022D055C60C49292946BF11537A19B8
+ 68CED82A565589EF45F110470A0FFFEF3DFBCCCE95880795747B09726FB302DA
+ D0BA1DC769622A41188C0BE64C2205F9C37CDD208DB32742312794C18195A38A
+ C2FE053C2AAA7F101EE116A2BAEBDF02F215A67D13D9A97551077E0DF65DCFF2
+ 283485C6AE384031125FEAAC23387A3AE0F895064BE1FF300132AF508D5319BE
+ B5A88E983389FCC4BFEDFB1D622A64081F33F8CF3DB7934A9DDD985551391216
+ 01E4CED70385E14FCA742C5D131320F4FA36EA14085A0F0687A5DD343932A661
+ A74C9F08C71BEBE3B558651713EBE8131878888100A66161B3D6420E97FCEB41
+ 3C4946D6A77E40AB2B2F9CE2113B95BFDC318A83A64A980632A56ECD3CB27207
+ 0F6226A249734D4F621A35C0CFDE45460F6356E55FFCF5C5C0A741C527949F5C
+ 91A030E288DC4CDB3FAA42C7C553DBF5DD53E2D565466B44CD00AA6051CE6FFD
+ 54D1C469181F111AC6A60A5ED5B9CC5EF038930F4D6577CE428B0DE23FAED1E9
+ B4B7BB5DBFCE0F2F3656BAECA2F0A72AE1C347DFB9083A81C4A3AC1AC47A9426
+ F80C528C153131D2AA0FEF938682B50BD64F7DA82376E6993FA74DDB3E435459
+ CD18D08587A9FF0031C5144A6E0C26D361D394527A589BD422D2195FBE0CB676
+ 2957E65B82A5F8CD6F8D7C62DB402E7D86B9C9D4DBE87D232CB43195B36EF297
+ 286D3E5CADD6082625AC1C0145C12578737BC81A374DD417AC33BDFE7C562D27
+ AC42F80CDFC70ABFF2DB37E6DB49A11ED8B11D5CD8049472BCEC512AFA5B1A7D
+ 817B9F2700F77C7ECB0E32E02E6BDE6B036490408FFC958DE2D2038D4816371B
+ 213A5F144C3455405952297DFD03BFD299E2194DD38D37C6C05402C7A26A64BD
+ 1FB5ACD42F4B29D3D5B94672E8EAB91AD0034473CD016FDE46338F7F152641B2
+ D29EBB0E96C9D642D22E1546D8504891244875F04C27754EEE76E77D3EFDAF2B
+ 18D3C3EFDFDC6C7C1223A1565E5EDDF5F8102D23EE297910FA2EE51C9CD8514E
+ B24325AC141A51938505E9CB39C901FE7B71063D59BD28B49583FF1E2FB7FCD7
+ 287CD3B59A6EEA4E435C6AE9195E81341F351F949816AD1569FCB3FC5C2C4510
+ 6F39C68CB5BBA40C6F068FBF8505BA2E4D69B5406EB1EED2238209A4DB4B2BE7
+ CE4B2667275E391EECFA11F6C8A95CA4965285D5D407A367F2966C4CCFDD4A86
+ 131FF6173D3CFA883F74B7A10C9ED1E0F0C94C70622EB2E81FF90A7E3D5A37A2
+ 535D121E97AC01CF8200C4527403C996046D0CC763BB174D01ECA999B8279A55
+ ED5CC502D80CF4B5A3A7515A0081137744174EB2FEFAA49AB77A29A6D5267968
+ ECD6CF123A0B26314FD80CC522C689EA6E753B77982E60E14DC072E0F5D5FD46
+ F01F19152AC6AEF91CF20D5A019F46D2394F5A21C59D74715464E5D830722A1D
+ 3D982CF0BD90CBC5F0D46B8A329A03EFD165DFA6BEF750EB9753DE4D94850F7A
+ DD416DCE40E476CA5C468F6C19BB22629B1AC5F794F8681AD4F79A7C392165F9
+ BCC162FDF8C453DCB621513CD620B1C2283C1DE308DA10438DAA564A1B9A0A24
+ 3FAA066EEC34502842BE1557B11162EAAAE744B16723E4B89F88B7D051D3AEAF
+ CF763141BB654CC75C6040C609A1C47CDA31D79974ECE0AEAC792D7A18C1570D
+ 2A24D816ED2E0C05A2AECCF2EED64368217546D94F421AC68DB7E6FAA34415B0
+ 1AB62B16F558C593BEB9E7F1FE4CE84A530321D29935A7F2BEA38B35576889C9
+ 4B6D69CF9635D737CED4F9AF3365A41698F87C7DAA7D28F84A74E1569ACFDF23
+ 96BD0F48F60B377FCB07C158285733F6F6D7FD80F994D1D9BDD9B91809C6C7DF
+ 7AE5FB8C273D0C4D9AC248984139E89AADC3C37C794640AD404DF32E735A7F72
+ 05367A23013D5C794841CCE0AB25FEB0FFA7738A546E014279
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMTI7
+ %!PS-AdobeFont-1.1: CMTI7 1.0
+ %%CreationDate: 1991 Aug 18 21:07:18
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMTI7) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMTI7 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 11 /ff put
+ dup 12 /fi put
+ dup 38 /ampersand put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 47 /slash put
+ dup 58 /colon put
+ dup 59 /semicolon put
+ dup 66 /B put
+ dup 67 /C put
+ dup 68 /D put
+ dup 71 /G put
+ dup 77 /M put
+ dup 78 /N put
+ dup 80 /P put
+ dup 82 /R put
+ dup 83 /S put
+ dup 85 /U put
+ dup 88 /X put
+ dup 89 /Y put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 106 /j put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 119 /w put
+ dup 120 /x put
+ dup 121 /y put
+ readonly def
+ /FontBBox{-27 -250 1268 750}readonly def
+ /UniqueID 5000825 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
+ C0962CCA6FACCEA6B71BEEF7C056FBD376F2F0D0BD6BE0A0A8259139B28B99C6
+ 25119B8C60FF7BA002476930DFDC2F6B1B5A80F1C0E544A22E3F0FB2FEAB64B6
+ A509B61E1AB96121FBF7F2BC27CDE5B4961048FC2169C8DB745FCC7AF0EED507
+ 284038B15CE53E69AA22CA76C2A208F6AD8614CD500D479A5E0FD25E7BB14C7F
+ C47C503E4CC38975CB0A8F7E109665FB69EBAE6EB68B2D6FA3C967D5BDE7830E
+ 9CE6F13DFAEBC852DF1D7D0CDD33DD4D5CD6D94DD8AE0D48AB638013CF75A25C
+ 04FDEA8775EC52A13AF40FA41F7354624D917EE620318C702237AF8C0E1FFA02
+ 127F862D4DFD0A56774235A881AFBB8F7F4BCB33811C581CFF38462F669B7F97
+ 1F97AC09373B8F9B7E653013AF8170613E8D7E17235A893BE296A0CD2096B71F
+ 16778388993EDF1B003EBCE23DD02949CBFAAAB5D9F6A08178BFB8ED1043FC1B
+ 0B90D9AFC27B19783740E8DDE0E5E01D116A8CB083C721FBB8EBF71018A9570E
+ 78590CD831116BC0FDA4229F79A581874FC3A1F108A4FCA80CE27FA54A2A7505
+ 5BDB3D52E2595512837732322FB5BBE459C0205EB38439E34A39544F0A1567C6
+ F29FBB7CF931708C8F92786CCBCBB443D54462B3B4B7BD38E90D325EBC31BA05
+ FB79C04C716319BB89139C80B8AC69378A13AB1A14B3E5D1EA15CB5936D07912
+ F4BECD821DA4B42857AD100F76F457321157D8552D351A76D3C4CDACA112DD1B
+ 17A8E6AE4B2506AFCABE4B1A4E16495D363BFD4C8D85C255A2E1DAE06D5E7837
+ 3124D9AAF134A6FAFED3D47621376F2A305A4C116A09BB5F7230F12486D1E6CF
+ 30B0CB5C4DCDE4313A20E0D99622392924BAB6E832224FDECE1467AB597594AF
+ A0C3E758C7923481724AEF648DDACC0BBFAC72C0B8522C71FB8D2B44AA31D02D
+ 32BF258077FE92439A336E25A5EEA4F005BE0C4AD05006D279FEDB6E16C4339B
+ 54901338D5E1A3E29FA2D175F5D561403F256D4C4D4F13A0D7D3E46FE4D1662B
+ CBAEB089073761021DAE7F2546ABA8822DE76F82F4A9C02F2711CF1AF839A4D1
+ 04F620501C8A0F1AC338F6FC9C685E9FFAB7A731EB67850E7F5F64BADBEBFF06
+ DB2DDC9BB41A721B8A9A5B747D337D50195330EE10D0125A4F7B86EA925946D0
+ 05C2702B5181ACBB62640ED098A4795277AD845ED9198CF24F32D1E067A9DA1F
+ A1BCD0E91E552C5C84FAAB8601A0BC145FD08EFAC60039193D2B4231BDD31479
+ 85BA67AA430D04B85B440B71B3504F85F9C74139A88051EA2F1CAB645466E4F3
+ EBEE24815C85A91E8B79CBF161680B48EF418A985A69CDAA7D60B76DA60BDD3A
+ F7012E574E7D53628C798519F96A2075F2D5EFA84A64344A6F7AB6CE98C7D2DD
+ 42F741DBF3000B49BB03D51DF1E5BBA3173C7F91CAE79BDA8E33B48F80A489DC
+ 18DA75A8C61A8FF3AFD704014E7E61759DD0D9B262B3280C530F5951A795CA15
+ 8385CFE616B6C9BC427E0F95058B77BD83F26B4329440EA253EA15658D04657A
+ 2B06821490DDA5974B9C9C9040BB1DD492C1A0FEC55F158068F6954DAB1AD097
+ 12F232E10DB750B376B22DE66FD7CC8D8D74C4435818398356C626B40A1956DE
+ 8FF7B1F56A2A3F657495E648EBAB5698DBE34A1093EC052A2E5046EB608EEE37
+ 61C3288F1A1D39EEDDF702ED98579CB56CF852DD0EAA3E92BFC7186FBCB1F8E2
+ E9DDB4BA9909CC7CB96AB5637F16B47B8AC456AF2E6AB067DE83A8C8E4765B85
+ E3981A4E1F58677BFAB17A8F374708476CB09289DD3C14FEE335FF4E79F45A84
+ 7EA7EDACD9CE8E0D91B78BB1C65D6B54A1EDAC5DD6B7C11EF014B6157C345F76
+ 520E09A474EB462937FE8DC4714AE9C35EF7E2AF1115848D0F07AB9280242129
+ 144EC35B954F793A00473FA898D07A75F2B6A8A352E04645927B2FD5BCE5ACDF
+ 2214967AC1CE74CAE81FAA100D228C623BD829579FC02B88676172CFCC1CB549
+ 03736A137E8AC64FC8EBFEE8A55793B56D1B458F6454EC7A6FCDC85443A9C165
+ 112EC44FB510071E2AF7A5FCBD4DBD4A36A7EFFB77D3F2975F3BFB764A4CEE27
+ 0A7BE30752D6F012D13572CAB7E34B8C231E27C5B22C0C92F6D85EF7CAE0FA60
+ 13B91952C95A51457FEB2F272F60E5DAB181289A698BDAEFA75CC9E85E801E01
+ AC45184B5EEF567C1C584E78385D0414AB4627774F7311EDE8F42457E02E047E
+ AED6510CE40E124FB2DB17A15CF8C95F97D9F9D31B17A17353B45768FADF492F
+ 39B2FB98E818E088547D0080AEA073F0D51EE469D71C8140EA9CE65B5F1E8F85
+ 2BC0AD8CDDD2DF67722D24252EC6290E1941ABCAEFCC1BC4EDF4EF9CC29DB194
+ 06DE5A46B51BAE4F6E92A1246CAA90AB798164ADA445450388C2ACC7E995594C
+ 1CE0A3B884B4F8346C5AA3D01EA70779123EBDC56777E410E4ECCB61DCB7A6B6
+ 3E924831162B482D9D3EF4935AF6538238EBAB0923C1D04FC484CDAEDAE78418
+ 9F66F70F6D69BB73447EBEBF3CC4EE8AEF2BAE448281FF67190BEE61B4799F2D
+ 6B5FBE12AA4289061782A48043BB5E45676CF91D4890174CEF818EA3F368F973
+ 90E5314DCCE1F5EC3C4DBC0A7E2A18F5B7BE29696C0EFF94C0B4FFCD55142AC8
+ 5860457686A42E5E92E63C591A84011460CA32B39E50C5AE42B7A8C4CC0986B5
+ CE21E1891C04CA8D9FB8073ACDA795F95FB2A625E719E5CD93654E077FB5DE5C
+ ABE3D97A8A3C67E03C2B6BA0EF5D9F0228A8E6A853ABB8CE631E18EDBD8E3E2C
+ 26A095C131C0DD2E6B67510A0AF808CB0A02FA919EB382551C1B76580BA0151D
+ B598CEB25DB8B09ED734D130D364C4F5DDAC5D072D0A2B9440C489786FBC0CB4
+ 053564434810380ACC1F35153D19EF84279BF1B81351F96FDFEA907683C4944E
+ 310B6E880D38FAE7FC5EE90958A899A669F77A43220FCC0A8EAF0A44D4714952
+ CC02CDC976D5268AC0A8E31610660BFC05A30BDF047AAA7C5225AFDBABD55EB9
+ 7466EBCF406E6748D52ED5E8770FA192AE9262BA7C2B880BF3BD19EFFEE7C90B
+ 2F18236FC9546561B217F5BAD294860625C59EB1B5F4C066FB241111FC782439
+ F5CF34C9C2296AE66920CEBF3617295B25207114E6812A0C0551F31441D219E2
+ DA123A158628FBFD261A38E12EF509E6D71F289F7D03E8E6817896239223CCF5
+ 96247893DB6BCF4370ED22BAE95A0FA165641F4F1BDCDF96587F9313D26A6368
+ 4CB5CFB5E870A90DDFC4A5C778C35E2193ACBB4318ED6DC7C4728B632B76FC7E
+ F33449EBDCEE4F6E225977B079BF7ED62A14C84E2163430D0850636C8B38B241
+ 8FA2D3A3DAAEE4330203C33B6C89A62A286A18CAE49C63CAD3ADA2225B917971
+ DD4153648556DCBB8949CA2E93792E829B5880BED074822B5A0F5C777943C2D6
+ 5D118E9012691E2D8C2347DCB008DEBABDBBC21FC4FB539B5DA678FA1E8EB6B1
+ EB3422310484FD8F51C98232C10B954D8A59F097054798AF7E34435A7A061BF2
+ 67929E736EE9B9FFA2CCE4086B1045A15FDCB62DA60FDE734C698BD9598E7288
+ 1783B12CC12D5B6AB6C31C364E1DC0C7060CAB16E920639F3F09D6D82201A799
+ 08BC1F73AB61A7998769CDCD883F208B2E1A57194F0B07F7328FEA7022924195
+ 522CDA0F4036B236769973AAE469488896AA5C1D53B3FAFEA156F91096E7F5AB
+ 34FCBC407A84C81DB36E89BFF4B158C46AC1BCD8C3DA3E1231F7A9C11D5C4882
+ D30F2FB8600F978687E38624FFE2356F79547FDFB1B4444AC773BCF6D431C151
+ A2BDC8FBDB26B8C0BDBE955C3E82DCF4DF95EEE4D9552A6B79E4A537886FCEF6
+ 1D8E6D98C9D1AAA04A6BC2DEE9AF33E0B9EC4EECBFCEEF9A09F420D117E3533B
+ C4765E22689BA80934A244E0CE6A096440E7C8C77D50B91F86DB7B7699BC2330
+ 6A1E58FC1357D71050AF16CCA7FC0299466DA2E1B881F68C72E984BBC8485D45
+ BDF63DC8A97E7E12543E48CF14E5D9839241DF9C5D790B568F03DC25E3A2E2EE
+ 0514AEFB6B6B9488FF66947A1DC310F0C8DBE5E746AA52BF35B79DFF4CB5C00C
+ FF9831F8613C37A5163B28968272D44C6F80DAC1F05A877EFCD1385F83CFE11C
+ 0C9F55A5252EFEC67EA1AC0D3AB7D273DEB5D0D740FDCD60306FC44D22AB75D5
+ 573DD0587F9B2D8B00C91C6763C2170F88028D794F3E0AAA9D861C443EB774A0
+ 954B8F72ADB5B1EC44192D2AE0FA9FE6BD6C4B1453BEA758017D133C94C3BDBD
+ 8169C8AC72BA2363E42CB918D636F73147C67F58357AD64ADBA7DD33B8C017F6
+ 48589CD47CCBF6A46B10E736B52962636CD81CC9CE6DCC12A0D2ABFCA5D4BCE5
+ 3C26A85182966381233FC964DC71EC7C002051C9FE5DB19F8EF746E861F044C5
+ DD490935FAB7EB5F030B9C373BCBFF888CEE9AC5FE0308519999248BA197F6BC
+ BC26FD088852E3D5106641D8077E53FD1A6FC5C2397F33B99833C5E5870ED7F6
+ 36686045EB16A49F6E5DDF50043B6EF4398CB7853ECF85E8DF673FBDE40B562E
+ F45CFAA48FA1429E112B7AFBB247D0BD408B8BC9CE6E1AC9392D7BB8717DB0AC
+ 1731F1C5CDCE463A5F5D67B24897469E212C9A89DB7CB8740BA247077333437F
+ FB394B2C8879EDFB19D485AF3F91F15BBB894CC23F2C576CC885EEDE5EF49425
+ 51743C509BDC1A564AA3E6992456FD663749D9CFCD145DB4BCD1D3774761CA9C
+ F0E0D06D4261E0DF19D1B2C83F69AB56C771E70AAC6C3AEFABE95E47AB9A0448
+ 4DB6CD451B0ED7BCB1980F1A65D688F9D81EA553B04F845B6FC2CEC5A3DFF4B6
+ 3D70B954625F854F48456741AA4A2DA77C815B5ECA707D0352569430B8320C77
+ 088CB3A7463E40E21095296BF0F5923150094BF9B1F83B3FD73E4BCC4448FE63
+ 1AE4D0862D71C0F9C5AF8B4FE9253EFCF1919EAA145E9297EA96242742B8A13F
+ 8A9E40E2810C0EDC606DDB3F221C4856D725E028F960BDCF920E79D3194F56DD
+ 0E396D0A84A33796EB37926379F68879D23B53228DA4B9C75CD3DC3B0CFD21C1
+ 75C7BA02876347886429F66A5C9EE4263F8017BA7257A9C8BED27E1577D6088D
+ 64757D2A062AF19ECCC23AB085AA0CFEC407514CFF851CF7B6CFF35F879EF1FE
+ 9F80A21FD32CEC418BB9949BB793CE155FB98AC622610A8DDE8FCD6EC11BC088
+ 66F23328BB2F86D873D33867D9F87E00CA20FCB0AD9CF10AA170F7D9D7A0740C
+ CBF26199E84A4960C618671443F0E71495C5671F1D1EF8A7404A32DECC7DC60E
+ D38369B8CD2F49D2229071185B6156E211190344ED181992250DA267208E193D
+ CD5303781B5D6780CB31B8C250A71E09D65571DF6747D7FB17CDC7264661881E
+ 2915717EC700FF967408310A2E7ECF5F4E942CAE034706DF1007876EF880E23D
+ EBC041C25932FC7F4B0722B2DB5514AFFF74C048683FC85A0C8BB7DA3EDEDFED
+ 28D94AD13E8674A32B9CCD2AD1F12C1114AEE9F5743F033793D1C672B2BDB51A
+ 691D611DF2940477B14C32BED9ECAAA548E0BF58118DACB8341B7EDAEA587D77
+ CBA20EF6D8E507DA2F7E7A04002ED63A371AF063699AD455DB9A01F3D566BAF7
+ 93BCE9E75FCBABFFAE07BB45835E849EA8FD620677F53B27AD5AD5568371A966
+ 9D2CF71E653DC35298B662ABA6B5F494E16A35CFE10C5BBDD2C8BA912BE79686
+ C2A251C9A8E3CD63B01A0230E7772A37E41AB10DDE2D18EEA31B440BE5E4798B
+ 8BF9281844B554677536336247D3E348AB2F45F2247F11E28940183C62705C73
+ F2A7B1AACE491EF1A5A70AA1DD6FAD7D92F36C26642C001AE5A3202A17034518
+ 8564B8B9746D83AB2F0717F9A74DDAF9E3D8D56760404DC94000797F699395F9
+ 2AB9D181AA0197D2F7B810AF619E41D0737E76B4F25357F46E8C257E497099D4
+ D341D1F6FFE81B135AF7732D264BEAC7AF6488B47A4EEBDF330870200D10C902
+ B47EC5E7D5EEAD3D5898784B4A9501C6884AF6FF308F28C978A0D3A703FE5DEF
+ DD9FBCF318B8DB80ED534C147E1B97E2E485380A4F52A2BC9370542B3BD55B74
+ CAEA183AB4CC821463CC1A75AD3BCBF213C2B240292F7222444E281C193C961C
+ F36370BB40B284087C8FA83FE8879CC9F4F368CE6751462520ED921EB474A446
+ 82999677814429D717F4971F52984B61588CA17E463EFEA6B2039712E595EE0C
+ D0B448109DB004A3445EEB3A0A998137E193F83F0B0254DC990C65483D7285A1
+ 252F10EDE8765F179A048D82503DFE7AE200B1A543F83CD9C02C2FE8AF4ADC3B
+ B1F1DC99CA0983D71527BEDA17E8DDB987708DA764144BA2EC72D046E14D2E44
+ E86C03D673F1FF93F452CB3FAB32C325171F20DAA85056E9DCE952E26EDFB012
+ E8AA09F0D4818FA5CC95BFC6774AB4BEFB14D2C18BAA7EAC06D25868B60E246B
+ 85BBDDA06F38732815F831409288E737AF067E4B8845CB1D4213F05C6581A8FA
+ 8838B77BEBB790A33318EBC3400BE177753B25B7833A8A884A268231853AEF20
+ 2EE47B9A9EA24E62E3A4FE61DAF0956C91380CD60F74A242EB30E41691A7E9AD
+ A0B0613D61A880DF9454562C675C47815AC3071001E888A4ABFCEF8FD3026A94
+ B2DC032BFEFE0D3618D882F5460726FAAF985BC74BB43327E9C24AFC82243C7C
+ 1B18087B8A0CE01740BB30564C7B4538BB32B4E56CBA26EE58D874C64A038412
+ 243AB4FDB8BFF2A46D7E3195C67F892F059AC2F2EBE1D8995B4DAE8129E1C8C7
+ 22133925A448DA609460FDF19F7A4B861BEA8FD6274E5A0EA30E711EE503B5BB
+ 6BEA557DD3D5DE8E3D3A17AAEC67019101B5B88038FFC34271CF3D9DAD8F4158
+ 4903798D793A68C5DF4F5099955DC85A83F0456ADFB91FC3C638797E6204F548
+ EF368BFC76320B5166B2B232E76A3EE6A101065F914032BBCE0BCA2ACB8A8371
+ 9881F4987187F1C17683C78178151DE852F13ECC24C64D67DF3838D78B581766
+ E6C7D622E54A6B4E1A08ABD13F462FFCADABEC03B42711FBF8053441DE9BECE9
+ 9E85D6BB4E4ED3740E29E649A49B80D56510B60D53ED0CE0F022E65853DFF4FC
+ 98FF8CD9DA199553CB5216FFB04F00D416A332DD45A588A569A7CA6B945B32BB
+ 45E8083BD8D617D1946BE1C09E1357904E5876D90377BABA9C48D93D4D5295E5
+ 8CB6642B79E98067CF5C859C82FD7AF49EEC3159EBD645893CA2E858DE20AC7B
+ 6DD97602B55DD7B13CD6D69D48A63A39E8B70DD00BF7A653B0F5CD44556D7CB1
+ 2FE0E4E27300C48CDA3F63E6D69EA69AFB3425A7B40394917294636D924CAC3C
+ 06D138A2A317E51EFE5CC8D2FD13E0DF19D0399A24389F40E51CC1DFEC55A3E5
+ 7B0D7F3DF4E2994C1B371173EEECAD91655C10C12EFC01C04A71A1B8369F80F3
+ A515E433B32818B5AC87A96BD9D682D3155F065365C2677BC36C8BE5A8E6A0BF
+ 17BD591301B901F56AE458862AC1E766510598C85D21E2C48D28AE7EBFD81F8B
+ F368D23B8CF8CE78F69862712A4D3124E63866C3BC0A515A0798E11F565DA04D
+ 300475BC4DE9A8B33CCA401A6FC945603BA3B0325DB485C4CDE8B873B6C8C7D5
+ 9373C04BFC8874A058B23A770F913B237404727BF762D46942DD29419D4DC755
+ 77A2F7437E203E077EF4E0C10033D7C9F7AE29D10AFB6368132B27A5F4ED3A09
+ AB0AE7BD12597A034116805D0301CF04F70072C6BEFDDCAA9228AF2CD5289094
+ 9EB2EEA92964F3D6FB2403A6B28F113A063E52EC8D2EBA42064E9F6C5AAF69D2
+ EC50C28805B5DCD129A04A97F97743A2C14719CBD67DA6B989FFC2E1C50579C6
+ FAF3767DB4328971D343F15F3CF66DC71E7A63AB070641C8CA22ACC847BF9319
+ FCE13D7870E34C1C7BE7464EF2ADBB09D681B731EB29B9DD9DF4FA018DDBA5D3
+ 01C2A570E19278E6C44096DC818666707A553F89608B53171F093D1553BB309A
+ 559AB2AE6F9F0A8FFB96E1588525EFCF79870E99EEBEB3708EC2567543F65FD7
+ DC3C042709F5D8905FECF49209544CCC8FA8E71CCA866849E2B12F557DA7F6A5
+ 00D7C254F4C31DF8EF8E208CE4DE2E0E967E81D4B7FD9CBE555AE039134295CE
+ 00E888244605E626C960B6E809156792BD05A78AE9EA62BEB5E8284B9B9D3BEC
+ 955B9AB892616A7E04F3D8742312EF70AEC9ADFAF29F05D815AA51947FDB4F2F
+ 221D21AFCFE44A04D1430CB907FB945A0EE3180A853C74E74270BED4E9DBE4F8
+ B54B4E5DD1042980BA7F4C73232D3BB121FA51EEC202C1AE06D7360F32FB1A74
+ 6609D8EFDBACCFDDEC2B4D3E1212392B07CDF63765CD5F83C957838702B440B7
+ 5F5050298906BCA72683D26010A8596A242D4472600BA55BC9D83E6B038DF796
+ F4F56C60A1AC62D2C80F87E5603030B5CE3A1AE6E994A2125A3A7D78B449F853
+ E71552B2A85329F2A3327BC2456BA1EDC0C3910B2E5C2653EE9DF991E92569D5
+ A29B24F99AABBF700EAE15E2C1E5E5DC545A254855927E704A72CFC80A6C1E88
+ F7106ADF3EA9B990A3D97F9EA768F2782D375CF789B8A1DB448CF9486340C882
+ 7EE3F92E1A706122DBF37800064400DEBEFC7731F1115270AFFA38F1D2763E4D
+ 78E36349EA486EA049DF565AC0794EE5B46FD533E5A59009FD94BDC229B56A8F
+ 404676EC9EA6C862C24220AC27AB4E18452892B914FE3A27DA0283248DDAA067
+ 66CF74433F5C8DC0323918BF45B400DA594709AECBDFDA9FE1B55513984DF5FA
+ A5DB0AF95AC692561978D95DE7785AD9E0BFF1CF91F8BE59E62BCF63EE6A41DA
+ B2FE11AD6994F04E3C6D4A31A08F55AAF284BDBAFBF8895448FC65A293039303
+ 3B2EE9D8A999972A4634CFCF1ED250E83B85C4C12AC51ED6664EF6541B78593B
+ ADCB3E415B55519BEBE1323E5544C19A41E5B526D3F95375154A605A4B7800D9
+ 0E50A973E41D67DC5E93A7B4920B697CCFBE0BF469B52D61E0CD39BADA9B2BB8
+ 48B9171CE867354B605FBB99E212F023C0B61980FE6F8C9237CA0058C6F7CF78
+ 616058D06678A6324DBC9FFEF4C893A0F0D428ADAD5DDD464BF32E0420DDF0D5
+ C2D8056BC9BE99914004273814B9191B5868E2AD0BD8FEDFC6118FAE9C437C25
+ 170E6CC6E85F251629954BE9D1F71B62308B350C8B8E75DB4A3ED9731042C02B
+ E07CB301A04D23AF085F34CF20ACCBB47CDA54A59A9BDF6440C3F4266545FC72
+ B7A939D85511DF9D38F27F7F6193F0890B317A1D8301BA29449F7F5FBE05E3F0
+ 3C83B8CE28693415161285E85DDC2F1E0DB20795DA799638606D9982A134A168
+ 7390B759EDC7536AFC81CEBAF7A12C2EF1A403674F2108770A1FF3B484597F90
+ 60AFB66D302BA2BC160DB2AA1C611BE1B934E359BD5A686257A6C1CD864B3A5A
+ 3F3602B2259D84FFC32B3410BC31226E0F426957F271D52CC57494D827247F65
+ 784D84AB7C780E4C07C21FF68DFBB98CC7B285A39B13386DE9C319E4A5593BD2
+ 8E58F206B5EAE5C57278907AA3D29CABA694D88E055CA7732D9BFE252AB82EA4
+ 52F837F614FE513FB053A48A55921C604472987299F83DB6FB88CDAC12731D32
+ 76BF8E1C1F134B536427AF09E2B71A32A9D5147587645D87B84EA7E277EB43FD
+ 03B0B292DD5982322B81B9467434F572C81F7135A6120D96D405B845EB29E834
+ D8A1C39FBA22D3BFB9CA4341ABE3E2D0D4F20079F9BADE0CEDD6525AF8D6EDB7
+ 490B0D5A23C94074F265509CE266FD33516ACEC69D944A2434407BE0DF4B735B
+ 31E66F7FA1066DB2728B7512E196B467C2CC96C727E159F9898A0442E39480E3
+ E4BDD1EB147CD8D1ACB265208B3F3656EB54D19F0E1E5B28F090C8D17887B3B1
+ 4ACF67280B0DB3B45FAC1069583F6D9076F222A1E54E2A84055F6571AE91549A
+ 90BDBC4138CEB68B83064E71EF33A525CF9D445DABDC289736767209718F68AF
+ 949F53A86B020652006ABA9ABB413BFD464DE87B1E02E1706E770E051ABC56E7
+ F8561AC2AA86887677D12CF1592788B2A813514134FA6C5AEDCCB75DC459619E
+ 0F7D6DD6BB6383A01E4D752794D1B69E1E3BEE0AF327F82C41024A32A0D9D62B
+ BCC7CE8B5C687CFF0E6C1920E200FD1403F144A75D66C265999B711BEC826F40
+ 8194724B83D8E24E5EAB031BA6D6B71B2AC1D5151FE763FE5F6204ABB5BF935D
+ B0E4839357712F92B1A35C09494E5F02CD3D6C13D8977BCD6B6376DADA53B9C4
+ 9A38562627AB2CDF6A17D695493DF8DBF304509D9D1D068CB083FA7DB07FB582
+ 5FB43F222EA57647822F3C7472B11D1C95693A14A88B1AD67D25E6837FDF117B
+ 5388F78E4ACA9E3F6EA5F8043D84F960320F423661E6A0C4E673F8222E668084
+ D01D1B713381B914C9F39FFE0D05388DEA7E8CFC5C4C398F2CDE70F9365B8CEF
+ A7240218AF972CFC4C7DFC2F31B1DF28ED6B90E4ED4A57F4416B71640679FD4B
+ AFCCB543E81BC544A394A921591D042E440B69102A725157F84E629DA4BFEE96
+ 51A9DB5FFD5D3D66E75ADBF8880D2A7FA8613460BA4BAC497DBDF32906CC0ABF
+ B77C25614DBF8C75E5178B1E373E1BE91573A41E78A331234EC6B33EC23F3969
+ EBA62F86FE49ACE0C814BD0CA756F4E9A01C7EB179BFBEE271407EB7DC55C658
+ 0E92D6CBE48EDF64AB756213E05199B2DCC8C6B21DFC0489DF3FAD2705F502F9
+ 49317D3FB4F567301782C907D8B1D1F01CD0D7F418430ADAD03D3F3264DA88C1
+ 2E801C67520C5D9CCBDCC5D73B20775445C962055230A9B254E12D665B8BA1F9
+ 1F369D536EE5D294280185B5665D2A96FB724E389E01EE6EF5808541E0C72EA2
+ DE561C563218C39D700E6BA3024EC2D52E36E02407E5B91FF99A18BD26D40272
+ FAD95DE16F8D98B1466D63B3DAF4D764928062E84CC74CE02D0A9EF3F8B7E534
+ 39BE6FA95F127EB03A378D5F4E69F25C4D27372127743446C6D9363EE54FB592
+ 3DC3B751950723615228A7D2696DB69F49685D81301E4BF154DD10A408F91AF1
+ 9F6331106BE3F702F95B2CA4D5204DBF87823001A3D8A082FCF058EF05C8CB69
+ EBE3E4886EDE0B23B705C0E7FDFAEBD1D53EE53325F66BF3465D46DA4AF27C82
+ 82379F35D35CB381386CF88A9B20C953A767887BA9F268F0CE27F8867697CCA2
+ 25B35A999F9DBAC54AE3219C0593BFD95A99DA247D3F6E1CADF4CF17926837E8
+ 38C88234B4596894DF8E54FBBBA1E80B15E64D39EE0645F8D6C3F01912826187
+ 5D25B9B6D3E6973F501B92D3F672B1DA576592C413B93872CC66C3522C4B02E8
+ 2F0E9DDCE10F67C486FEBB562A8932987E8B8F2CB69BEB8EA16FEAFF79618C28
+ B3A8EDF971486BEA4EC469FE945731914516E895DFABAFBE210F02C8681CF58C
+ 89E68C875A427D0F097154D37ED589A4B5CBA62D4155A6F61729DA6C19DFA12C
+ AD14D41668D16C2847CF9D10111CFF7556523919AA9453B3D1017E9A9676976B
+ 0B01DE60FA78D7A7FB388CDAE05C68D7447CAB09B3F56E2F89CCD79C64E5B9F6
+ CDC77339DA03466C916EB3075E32EE401E781FE9BA05695881DDFA3BC2950535
+ 66E0B3EA12CEE190F17A256B84702B40D7B73C133EF9CF6C0936638BF3B799F4
+ BFD9A2E8A80E7F5B2B8E73E4E99C2673F3AC5E96A0C2F7D7827EDFFDF51D38D1
+ EC0A6A2EA3FC4894098E1BAB281BA10618196A2164978ACC5F09B9E06F44FCB2
+ 0BD1036BDBF3365FBCFA0D360C3A605507815762BE9DBDFE5C79217085C3656A
+ 7DFEC9BE0BCB3262477F6D3BA6F86A93FC11292C103AA1A9544F0FDB73A3AB5D
+ 21B102FD8690B0B50EE78F1170B4D4F87AB4A493EF61EAC20631560DB1CBB908
+ 5D9151E428BB958C26D0E40AD53A90EE5722EE2929DC6E1DDFCEB6B0095CAEFB
+ 60BD9857A789D69A7A783E450B3FEA5B88B8A1C805685C78E39D59D7E6D10F4D
+ 5AEE07F804510D851B6F54922D0AFE9C561FACB5D5E88AD8B6A804DA9EE582A1
+ CCC70676DFCCDC9C8C4207AD97FA7B10C158C222705C77387D960E843345F5DB
+ B51BB74CD481123FBA85A0D83F6AAFEA11B6BD6093A404B8DD7FE3AE32A85D05
+ 1C814D3344C2E6E1EF5B7105C90F8675285B3FF9666C965BA89FB209F5BDECBB
+ D28F34A893D35BDFFFBDB1F8608E317274C65962EEBD4A31F63C602A0FB29633
+ CDF7C352BB4CD395902046A82A9763074CCE5EF972735E8BD857C12DE5922ADC
+ 192B154ACBFDC3B62F540A1BE19892BB98BEA2C8F306BC1DC73D7F356A748D05
+ 80CFDD7CB5AA1BCA5BABA74ECDBAC3EE32006487E02EAAB88FA6DDE6A82208F5
+ EC6BCC74A1683BA27CA26104155F26B8324A11FD518A78934891D21C224696BD
+ 2A217759FB18CA87DAD4BDE52FC68D04A7FDCBF0F93912D36FB5CC86385FE2C9
+ F1433F8F44277217C47D1DBDD631DF632CD0342B9B416F5C54458A47332B8A19
+ 37C6C6B63BACDC4B68E8C3CF0D9E863524FBC0BB8C350EE319927159AF164FDC
+ FA0EB55080FE106FE6AF2D1792A26D579A1A9E7ACC4DCA9F217CBE7615393E18
+ 6CD33545B72259589220961FD2D98A9439AD8C189E4FB106DB8DE376E98187CC
+ 2BDEA62C1F32AFBA7964BF5921E8C8AE9D5209CD445D843FF3AEAF06CE10312F
+ D6FECB506E070F419D7BEA302F2C3803E6F8D8390BEDE20D5D4B397092782036
+ 6F2361DA5E191C90E35E3A0826EE110CD2C57BEE50E938CED66A8E7C9CE1BE7E
+ 8EF76FFF08D1A61D52D03006A422AEF8CA377C64D79A448923E67D850997D4A4
+ 7A91A3E5E40537344F3ACDA83EEA1E19183A9785147DB8C493C445EAE40558DE
+ 8EA61FE880A3BB8FB966687CF91B8CA52FB30DA0CBAC44E9D536DCDFDA7A4AA0
+ FE589AFF036B8A5B8FD4F8D3253A77511E018CD54C6C025CBA153496E8608DCE
+ B727B6DC9B52A76DF148E33A4BB078CDF3B232F81C2C6B04149E9871BFFB9B61
+ 65D68740DE46C5ADED49D817E1D48B42DDF798FE7D56D1905F8E7594168AFBD5
+ 965B0A7D3195454E0CD35400A517E385EB61776FB364DDB7DFA2B85B5E9D511B
+ 6B3D6425410ED4D1829A3D462BEAB10DFB366760B9FABCAC41B9B3410A3D1C34
+ 60BFF6CE619AF739AA0B8452125A679BE020A5EBB6DDB9DB1D5DB0762F624CAE
+ BC3EB8E2F456FD956337BC20A70C5987EC12848B42FD91E1FCC96D9B5F415690
+ CC073857438284A2548B16A4FE64ED1E1A0F991F68E54E182C37749CDE53415D
+ 87FF28E5BD17009AFF7625AB23852927C565494CA93200DDBEFE86B9801FD54B
+ BD84E89DA02C33BE34363E236C38B81C4F08B7688D3B63ADF533843E1221226E
+ 9B424C0253AFBD8C22F4696B88E6B279345DC7EBF4352D5956C773F883E78A1B
+ D14C613B707654B956C3D5AFBEAF676B9682ACBD0911E5455004F8BF8A027E3C
+ A956893DBDC7A6C92819EE23848AD95F930BE5558039AA45638E97C2A9815736
+ F661BEBFE3C2727698197DDC971C56D13AAF3A3FBB1BE2D52CF7696EF3AFEFC5
+ 77F5E34EE48CFC6620379ABD11A4A0CBA54273F6F12E137243F9D083A6255357
+ C0E43EEFFE0BE2DF442747D483E441A7F923C2E733FAFEE987BF61FD22541EE7
+ 9F1A97CACE2C2099E0555C454200D1C2F8FD8479671146B0F67E529BD6D145CB
+ 45B92E3680D81679FE03444691D09E40BE623AD7055F56D4D4137523D04FDD54
+ D3BC2057C55A20F903BBD43681C95F39315FBDE2760E8B8B940CDCF04AAB1826
+ 811300693071218A06FF28033A95FC15C3B6AB09BBB845671CB4F4195B28AE48
+ E87D841440A536E5CFA9BA1F4273AFB8A3CED3397026FD84153ADDFC82680606
+ E30439E33FF8B96E5A4D6CA9C9CD96CF5FCB02A7927420BA7427404E77E0404D
+ 71DCDE25DB3E3B7DAC0DE2F42DC9AAAC5E1DA8995BECDAE0FFEF96719579E4DE
+ E5EB117E0EFF3AAD74A75784E3E13CBA1B9084E36BC1E734F041EE54876AE7C4
+ 04709CE072DA2C0F76894591B52A961483DD51D3DD063EA46FE375EC42240CB0
+ 25F703B210C1EE04229657F6F85F07909ED658BC0A9A2E5E55969C06613103F4
+ 02404C02C945F43D3EBA873F819A9E16EFF16B67ADCABD3A038FB4F84571F3EE
+ 88A27DB42B5B698DF96F96628A1EB3FC1A2E4041467A1F20B412CA2DEC68D6A9
+ 2592C131AFF7AC49A3FBD604420C309C2BFB814277B5CB3FC221E8D3A0B7DA9A
+ 05B3CB935772398DB69CEA7DE041AAB2D185A278E4FC78CAC8A49C1920CEDD65
+ BBEAEE6FA3DBA57A6430B48EA1232DC4F6906D082E42C62AE727A61F3DC2B336
+ AC8D93C91238BA45AAA69CF536DCCB6B1F4AB892B1FAAE4B932653CA734517E3
+ 69B9B09C4537D13B8E1BA9ABA80C1DFE01A03D053CC8580E9018F8A16F0716B9
+ 385B70E2AF4EF8B4C2EE6C86CB27B5B79011B81EC8ABD81D08106D69C0ABED67
+ 225C0D7809968375E0C846813341AD1E27E4E0A0ABD341BA5F5B3FD46BC01AD5
+ DE496D9E824E47FB9E97AEF0F23BA279070984756A5E27AB113D6C6A7F5A7E3B
+ EC9EE1ACC3C50C2FE3A4435F67A7E30CEFDCCEE984D7BBF1C467EE81F5F8396C
+ 111B1974202C3E79
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMMI7
+ %!PS-AdobeFont-1.1: CMMI7 1.100
+ %%CreationDate: 1996 Jul 23 07:53:53
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.100) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMMI7) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMMI7 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 25 /pi put
+ dup 28 /tau put
+ dup 30 /phi put
+ dup 58 /period put
+ dup 59 /comma put
+ dup 60 /less put
+ dup 61 /slash put
+ dup 62 /greater put
+ dup 66 /B put
+ dup 67 /C put
+ dup 69 /E put
+ dup 70 /F put
+ dup 71 /G put
+ dup 73 /I put
+ dup 76 /L put
+ dup 78 /N put
+ dup 80 /P put
+ dup 82 /R put
+ dup 83 /S put
+ dup 84 /T put
+ dup 85 /U put
+ dup 86 /V put
+ dup 88 /X put
+ dup 89 /Y put
+ dup 90 /Z put
+ dup 97 /a put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 121 /y put
+ readonly def
+ /FontBBox{0 -250 1171 750}readonly def
+ /UniqueID 5087382 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D77639DF1232A4D6233A9CAF69B151DFD33F
+ C0962EAC6E3EBFB8AD256A3C654EAAF9A50C51BC6FA90B61B60401C235AFAB7B
+ B078D20B4B8A6D7F0300CF694E6956FF9C29C84FCC5C9E8890AA56B1BC60E868
+ DA8488AC4435E6B5CE34EA88E904D5C978514D7E476BF8971D419363125D4811
+ 4D886EDDDCDDA8A6B0FDA5CF0603EA9FA5D4393BEBB26E1AB11C2D74FFA6FEE3
+ FAFBC6F05B801C1C3276B11080F5023902B56593F3F6B1F37997038F36B9E3AB
+ 76C2E97E1F492D27A8E99F3E947A47166D0D0D063E4E6A9B535DC9F1BED129C5
+ 123775D5D68787A58C93009FD5DA55B19511B95168C83429BD2D878207C39770
+ 012318EA7AA39900C97B9D3859E3D0B04750B8390BF1F1BC29DC22BCAD50ECC6
+ A3C633D0937A59E859E5185AF9F56704708D5F1C50F78F43DFAC43C4E7DC9413
+ 44CEFE43279AFD3C167C942889A352F2FF806C2FF8B3EB4908D50778AA58CFFC
+ 4D1B14597A06A994ED8414BBE8B26E74D49F6CF54176B7297CDA112A69518050
+ 01337CBA5478EB984CDD22020DAED9CA8311C33FBCC84177F5CE870E709FC608
+ D28B3A7208EFF72988C136142CE79B4E9C7B3FE588E9824ABC6F04D141E589B3
+ 914A73A42801305439862414F893D5B6C327A7EE2730DEDE6A1597B09C258F05
+ 261969424F885C6B93B28E3223FDD3B040F5535D6AAE9201E5F49A143F3B65FA
+ 75FDE4E5FB4FDEB79A695E89B66FB385A22222553A72131A7BEAC3F44DD0AC0B
+ 0B566039AC5C1CB0A1304B882DD2497870AA5FB1FD17A704C4668F6F85F6E3CC
+ 814D68758E24D9199B67A9395FD76257FE284913EF1B8897FFA602A54B39EB03
+ 2A783B4A582A33F532481524A8BD8998A93DBFD4804FA77802FF52D5183117CF
+ 80BC1398B9B1F9844EB62E162912873F37005CC29CEB7A2F0D0BD5BB237F61AF
+ 6E8FF7D1D0F70DF3371BB9B974C6ED59E4DE4EB8592DEC23E96140031EB59AC7
+ 1920E84ED91612322D09B6A65A94D5AB982F34677191C1B710C247E48F9D9047
+ 32497CBEC2CA82C9806BD89F7BF286DEA9913B612C044A0729A22E2B96EE51CB
+ 3F68BB44CE523BE73F9CE9879F51C3E2B345D21408978C932590C43F319D3CE5
+ C986BA6E2576F9487084D48F219464B3ECD4A2ACF389679E40C1D3416D723106
+ 33B154C495C50F77099D2693B365DC8E14B58C91115B7870990880D3EB3D3FB1
+ 9EE81029999F68396CBA14B2CDFD48BB4EA10E72000C08A99206D3F0A61EBE5E
+ 606C686D67873297AEA180E6FD3A502240C601FD3AA7A6C0164A0FD92AFF515D
+ 8C5A186211BDDA226BA5CF97DE29C36CC2D3A1498B8AEA7ACB066A97E54261EE
+ 1B7ADCF4D37CE298B1AD6BB5DCFBB056F9FB43897A6EC5A495CE3AD6C43041D7
+ DC61FD56E69E3356285FD50101EFB3219468D2FABBC58151DD7CCE057393516F
+ 8A0C914CCE7E96D159D3764709956A77891728F2CC1B1E0FF463814B69984951
+ 083E1A9A62C19BBA8C9E147149FD3D3CEAD7EF8FD9A2EC4242297B838D1CC4A5
+ 4C55EC8767335F724E42871E2ECF8D6E18E9B1B3412CDB29A249F8DD3DE4A293
+ E9F20F483E0B41B826725178CDDFA13BBDADBFEE3745C717EC8EAF30A0708B89
+ 81D5CB953748428067C4F6B54BEE671B4585F7302C976D25DA47C84A9CDAED2C
+ 51AE6CE317762ABAD216C68E52B07994BE634FD10F6039F6432C6D3C06000208
+ 8B5B973A5AEE2E89907AA6D09D138EB1D1D0C1287DFE23B29CBB50101FD83DCB
+ 0F7326FAA499E79C39A96FBFBA1644F2AED987B9909D0279918BDB13A90A4471
+ D050B70D38A62855E7E313BB1A63CB35BCF3AFB81CF392F3E22AC17223838B22
+ C7CCFB79D9432F51D353FEE7198C580EF8482485421AB2D9C04419A8E077A4CC
+ 54C67955A7F2D2A01F2B59576F97A6FD15923F255A42CE769D016A9239ACDF01
+ 6C9675FF55C310EB88E6C117397852C9A9E574CD59517D68EE6EA9A07E2A8A49
+ 38698C290BEB080EE1A5AF6DF89BBCA71B86A4D6FCAA7CBA2D24B903DA9DEEEF
+ 8408E7147FC2AC2C7B01F71A10A8E3F819D50FD11646D8987CE5407B0E55CB28
+ 0E8A38DBE60D41AC69A32DB85F6484917C4C2AD1214508DB37A26699F491524E
+ 46ED426FD00A15864AB945CD42EAB670726703DCD0249ECFBA525354F97325A2
+ 3156F43D36261B4AF19A1319F042B3D05DFDB72D004FE854D2160D478B30C50A
+ 3515D80BEBAD62142B7AFA3D7F0BB1F2C2D3440E415F78FCC97DC82DD773C26D
+ 71348ADCD4D85EB15DCCAF8D77AFC5D87A5648D64B8336D39E90A9E251D21CAF
+ 33FF688965DBF4B27C26F9F17246CC99B90208D5D940D303FF98182A37412E6B
+ 4B54879ECEDF166B4EF97C1DE5F29D2E735EF2A6F85C105B2A6EE01B3FFFF092
+ FE37D31398C624FA0897BFA38E92DCCB8E5153294BDBA1D72612B1CDF1604D8A
+ 06DE4B9285A97FA66C873F852110DE25A624764F158E40BE9E61AB1EB3784BE4
+ F1A082C7CB3097BE257766186E8059EB117724B9EA473E6AE728D3CCC8F58C4B
+ 80C981F9A26BAE65257A9916CE922BE1AD855A1A5F8090E970DC747407A1F2B4
+ 21FDCC5EC501C160D8E0526564FDE6B923C38FE23F3762523FDAFFD0AD3795CE
+ 5D8993746D8AD70C0988EED5E73E6675777437AB91FA2CFB9388B923C893006D
+ 51A94014549401011BE2BB78F70068D675E8BBA18E871DD3E472744ED8A5FCE9
+ 0F57C98BEEED2092DD04D6C9A01785FB13906AE7D96DE271BCA7055AADAEF95B
+ 6B5D05CC752A98C27C332CBA5765E7EA3FB7CD7A79A2CFE7ADF003D3E5264EC4
+ 8A78CC45B62AEEDA988271918B22BC1C220D0CE62ED198BBA0EE0CEC07AD3549
+ 02E936440621DFFB1FD1179A8A86456EEF5D11A73A76C714CC278F787B12E396
+ B2057F726F3124CBDD9A3A68CA7A4A621EF07D08E8FD109DAEC229FD2EAFDA7C
+ 05A79795E770D785CDDD92E38B4AC82B5098F90A8B1E97BC4E192D5D32706D4A
+ 876DC6E0FFC647E618389B76D85C8044581AEC6D87B3B2BBCFD5FBBE1FF71366
+ 0C60077EADEFA92D8FEB3CBA047538553A116E3D895968A8FB8CD8507C17CD9A
+ E1A2F37A35E4AFFEBE46E59F529CDA12EB7BEFE64498A1A3EE6EF56A69A9468E
+ 6FD00B1010063C98FC341B2D95E2E9F20180551FF1CF3F7A17B62C953A9E1C4B
+ FD342704A5DAC6F3FB614E1E6F11710BF6CACD7CB4B1FC4C21CFE956632CCE46
+ F344709263183F2DDD683D2F3B5EAC6F534EC8F9FC8E5880FCAD15560E8E683F
+ 609304EC30FA6398D4BEF23920B71DBD60A93CAD377353B92CB8C3A7610BFD57
+ 7C9E882CFF689579305F55DDEBC8E119B5861FEB3C6911EE4355361A8D337D2C
+ F2830EC4F0636F1445CF0B304A832B62EE80CEA4F12BCC6CC5A93C132B2D4A1C
+ 161D8BEC175014DC01DEC435C5F1DDEB6BED1456A61AC1466B15DF9097D32076
+ 826E2D06A3251B79EB9915808FF95C0376F56105D166574762A4CF782A7D2441
+ 157AD3CC86B913E3247A48F72BBC79C6FAA2334097A2B29763D3F03F15EC2417
+ 9C65DA0B3796324D674C652E5DBB0505185CD684606D614D422958AD22A7BD7B
+ 53C20B201BCE3809560019793CCF5FDF9339B4D2F78B47911898358A21F90F10
+ DD746305D972D7EE5409B6AD09592E1DA67A1B2D64CCE9F9B9AD439CFB7F95C7
+ 377BD8F405E21652CC0DE5D44EABB1E059416140AD6093808276B93AA62514DD
+ D50A35D37671E01713AFB3E54807FC135DCD5CFF4EBB96AB0AB524D0816B64A8
+ 600A5B972A5BF46802D64B9368F00C2F8439543A9065236B279382D524488A8E
+ A2906CABD3CAE6AA533B682B810F6568AD0A71CCEA5951A4AE335790CAA733CD
+ 05CA5E27D704944CE460381C205E7BA8355F11C42E699A28F2E6CDA5B4879F45
+ 9C3BFA7B4A98B1D13F45B40EAF0411B938D7471FF264AB909D228CE5D4203F72
+ 5EE802B06A6E1C2799355E0D317253188D25AF9304A3F67B90086C0B2551168F
+ A6AB36C7A983E5C48EC8C66C59B711E1783F0EBE2028E88DCF9466233B0CE76B
+ F498DC6B64C4E06B0DA0084305B92F2FD0675D24B5B4D4D0C36D3C9ECCBF4A07
+ BFC5DA203ADAA99D1ACF433322DA22E56A8E71CE9204E9254F355F1A7793977F
+ DAD56E1E9AB49292127C32AC179982B44516578D00D79281E9EC36A901081019
+ 91BD2A304618AC05E758A44218DDC454AFFBBB0DF3D5CDE76A178D3109ACE157
+ 87968EED9ABB6BFF3E0DD07EFDBA3AFBE378A31F26897F48C734EB24CE22D578
+ 2B301B92FD7C7BA3F361949C40EF688831F883346B786BBBA5121DA3D5187A27
+ C45D5756CC10A64474F7FB626328181B699770095ED43A2CDF4EBA5F3A3730E3
+ FF72320A6A2781F8AAF3FB382869F4F70612DEF9EF4630FFE1E9D7B1C9A9349C
+ E3A69D71A58551EF4EC69D297865ED647D88299096305BDA9168C6C08A4EBC30
+ DCDDE62EC8C089CC307BC220E5FF45E222FF48C7437AD2E6AE135FC650A79C6F
+ 5ED53013E7E941CDE21687510F5E323D2C25B1854FD49DBCAC290353793985D5
+ D1A5827F19218090800040131503BAE9201022638A1FF8E0787F898415C46217
+ 51FFAFB952053C2F5CF238A527FE41C5C0F49FBF88A18BF343CC1C64862240D1
+ A93AA26BD3CACC97F14BF8960183873ECA3DEE741E895A48B3BD931E380DEF2E
+ 01CB4811D796F4B861374CA39E8EE9CD531949B0B7D483E3A38580DCD17760B9
+ FAA758354B9474FDEBFD5B17298DC57276D6CA43D7402C28961B243601CDF476
+ 9A5DB9E0E11D28441C112501D038D2DBF832BF1CABA5CAA727B7135B492D2D34
+ 4A379FF65DDDA3BFAFE07EDD0B1F73627172EA063109F6782EAA57AEC4C98ECD
+ 69EEFDA9FF76035CCBD6B80E6AB4AD457E149C3EF9D8E70884ECECE3829F6DB6
+ 22AAD5CEDA4DA14FEC9D4AAE321010D341CD86C74EB69D68FACC3F603ABD335F
+ 320D496CDE5C3B2B76C0921736795FF8E5109F8AB4C22F497A7BCBE3D6D1AFDC
+ FCEA7F0A2B1D50814AB2C03BDBE87E0151A7579FC89ADF78B67336889B29A04A
+ BB21F4112505C9F1CCB22EADE846525C618AA0A4E3BF4DFA885128E6E9635F93
+ CE942342E11A7A876EB832D8DF73006211CD5B44005FE77C29F26D2346C65D11
+ 4AC6CFDBCD3BDD27EB92152047EAA52057F1D7966E02684F743F31ED2F41E1EC
+ 6215CA4A775A0626DE83C1C7708ACFCC26F0666EFDA7DAEF5A8C5E39D5B3A4AD
+ 765B1F5F329137B382AE5A5BD630E6A618488633D3EBF5D12842BFB1B9D54F55
+ 5D995961CAA6B843751A4148497484FA8E0089258C96D102D2A27FF792068FA9
+ 059B1AF0040F3EC857ABE0CBCDBE06C8B97D7B1C74A73F6873B93FFE01033A3A
+ CA0AB51ED22D4BB05AC627EF48885C763A4A6DFA76DB6DF6879E15D907622CF6
+ 97ECCEFE63BEE61AB6EA89647362EB08817F8A0B0AEF1F8A0811E040DB2BAF3B
+ 490BD30C99E3A65D97CEBBC8C4017710017329E15DA038F1B84D30C68C506BE9
+ 8CC89C14CB342438F1C27EF75F31946651A9BEB549C5974C02BD907396555FA5
+ 791EC7BCB609E8D91C1FD2356096B306906391D5E2129176321A52F92A363F65
+ C5819CC38BD6886CFA833AACED36921259E5222E13DBC1D9FDD435666AC18CD7
+ 24497C64764060BB11E2993163434A4B77E2303B59FA98094DD97FF0916A265C
+ BA725072173C01EA71FE818A7B7E2AA79DCEF532DB24544BE1121BE99A971A24
+ 4F95551C079348820B404C4C4A6062AC54E37D5DFA7963A2B9E5D4CC2D1FC9A9
+ 132CDEAB7C70DB71AEDB74F996087CD1564B80F106F9CC20816B97B9EE3BEA25
+ 11D9C75703B5879BAD7162FEB5ECE0990A706557C8400650BFCCB81C70972433
+ DD370355272F8C5A6ACFF6389ED7C693936E401F36A532CD3B1638FEF8153ED1
+ B0E955C13B435364078C105CB517E011B2B6D5F8DA7B772BCA2550B3EC5274C6
+ EA4F5986CE4F1532C353AD6411EB131F7581D33D003DB1D35479E03755E0DCF2
+ 6DCC64FCECE6F0C9CBC56BA123D5B32CB9C13D71E696F7533E0658A7F6B39BF1
+ EB859EF11DA0864028F12EB80972D86B6D667ED72DE931BAFC9F654F3221A4FE
+ D245772B622EFA2EEB78C078DD7CB1AD0241A52AE77593352FB4F97D3B70EBE8
+ 3A117527290B5D8F279FC864E14E4B7B5B4F392E42E0395DF6D7B3FD52E454BF
+ 910722959A940C3A1EF0368AA5272423ABD724D5D0993C5D0F2112F97A5345C9
+ 98720D309D724E8DF59DDC8D78F00D880E64DFE04292EECBC4AEFE59ADF4549B
+ BFBCA48A8B716C0B169DECA5004E0E063952B9E757E5DDB296768EADAF11D411
+ 0DEE5DCEA001583F8972B1EA87B4C050CA9C0CF5A7BD9EF395B75083A0E58096
+ 3C8833CF51F57C9A75019BAA4C986719B5444961C7B4EFC89B9541E751AE2638
+ CA3FFA42EDD47BFD08EC60D2AF00BA9C455CF0F1E771C6574DFC13377EEDA991
+ 43BFE8E30D7DB48FCAF4E083ABC3A07EC0A3260FD64D2542757D4690CAFE885B
+ 28D10FC57BE44E517D521AAF57C1FB34705EE219C85320CF96BAEFE114596E59
+ 763C51019A113C266ECC79C9ACD6903B450725E56F93F300B961D42E9C1E82A5
+ 1C495BBA75B97FAAF5F8CD56EBCA39651F2F6C98A04235DEDC9735B54CB65521
+ 1B58033BF30B8D151DBAAC860728E7F056EAFFAA8F1945FC75DF1630720A28C7
+ 33A6DCB164481F800BA9D900397411C408CCB745D93B6712EDA59B7F91F2C0D3
+ 2BCD4281EF6139E7EF9722B05F904F84B6FB3162AE992DFFD699638FB583C6F4
+ 40A1B4FD752CF6260798711665739470286DF0E95C8D2CE848BB3269430F72A7
+ 68665C8A47B36C81859483817D329A9400145335BA37CEAA4D0F1C6ED6C90777
+ 22CC8E730D878DBE99CC1F4DF10958CBC4D75BCF345F483BF05328417CC332F1
+ 2B840A7C10018EAC94F6D4751A845C811F491296EE28878A52FD49C6D3406BDD
+ 597F83C55E2B0927BD1BBF8163DF74FE181A03D426DF5F29013748D38195F0BC
+ B7BA8F509AA8F8D448D378DC52750A888E387F655875D41D9F3C5B911A4A451C
+ 60C34E96B8DD8F09377E562934D4A473AA9FA74332C88DDCE8783A3E9F68362A
+ B33CA6B126F0BBA86CE58848B9A6173FD65267A57E7790F200FA072BA237DFC3
+ 54D624A7C1B58317FC389A44CA4D7740E66D54E7D522DD1C5E6DC5835B621D4C
+ DEF9A5589A54B19487B0D717F8ED226E9B4D1E0C5B7BF99FF091B12505CC290A
+ A6F2F5982B0C71AE08CC53018657377711B3D380DE28A21A11D40D6A939F6019
+ 679529BAA2F19A8CA1599F98F572E72B7E5BDACA0B51A33A78809569C8906C0F
+ 70B28C569E5D41EA659FE775DEA5AE07D7F1BC8CACA4650A3D71B3C3534A6117
+ B6519BBE36BAED9C9C2591E2E8D22B4D4B802E0DAF1A2C08D6849F5A3F86C18C
+ 1E813AA3C2804496500B39978FB4A84EC13CF435139E00BA3BA0DF27FB2AF6DE
+ FFFCA6708FF7A7BD9186B35A5939983A58543D215E97AC102334BE7218969FA0
+ 15EE5BAD30CF94FE995657A5EE03420DD02BC9996BDC1E26EFC58C507F8A4991
+ 183EE4EF1D849AF5000D3324DC68CC55EB8CA8B64E84F994875CCF8D4C44C6BF
+ ABB8AA873F3B1571A7874D0C4B3E675A95D5B77CF14559E5F4E6EAF218165368
+ 96481E842587E6D6FDC0C68D974111E44004C7E4635F274719FCEE381C37A679
+ F90D0AC6FEFE3E5F5B00243EE470742F7C6DA8D7903AFBDD069C8848135B9960
+ 4CAF92BFE2573CA3ED0382DF9EA9935A8235809457057FF3618C570238EBD010
+ 0160A7861C4ED0666A2B10FE3C7EA4FF739EC77C7D9BB9182DB9BB58E7DD9638
+ B6ABBB121A98E1857E6F3405D97035F50FA5F8484B48DB0E56C1D3CC58932001
+ 441C95020AEB2D710103A6AD8A75AD2C382C8979E3B490E1D7E34A170277E861
+ 8AB3B2E7C8B9EC615CE1765AA5ACFFEEC316210FF44C4569A26E2AACBE96FFED
+ A0A1B86A9348AAAA6995C2F4AA54683B98C4FC06A81622909622EEAFE982D293
+ 7FD7313ED54D0C9411154E2354DE7DBB28C60A06A5CB1544764A82690E19EBB8
+ CF805D081B9C977CCD438AEC67F32D6C615F5E30CFDA0ECE004063ED6633FDB3
+ E7269053D184CB26F9B4759F1FAF0E618A8736E6766C77EA06A87DDFC3B8913F
+ 10C106CAA5772FB1BC1F00CE80105FD323C6C6A11CC0AC56A4135F94BDB55EEC
+ 138E4F3AA3CFC0C7098BEC2DCBF47F486267863EECD112E4FAA33179DD4C8B3C
+ 4751F5C83D2D8D5B2E276E580770B789C41180B86CDEBF464517A2DF51F80E78
+ 0736008AC5671C33F1035ED63B1FDBEE8A5340DEC540FA540712ED46223B36EE
+ 879A82156D860299774F56176C7C83B6DB0FF30C192B369A856BA154A1243E6F
+ B9CC5D17CB95ED22605D606098A30B31560F7B14332395A651278607FCDD5CB9
+ C0C2307E90B8E4FDE362D176F952275106D11AE87DE2CCCBAD90790D38EEEF76
+ 5C7123CC3FE48F036CF0A9939968A36C947B9AB2D6B8F260DF168299A95CE925
+ DCFA3B6EF6B994C28283D5F623C0F8A7E00112FD89916CBEBCE3B0BEB779D41C
+ 9357FFA5CA545F45EE9B08068D3767C40441451E795F7912E29C976C571A24DB
+ 4963F11C4E7F702D3F507D8CB2776379762ABE27322C9531D3A2598CAD91967A
+ 6BD858EE3995DFC9971A3583C4DB2A88FC1D6738EF43D3DE34F14CEB155F5B89
+ 5AE514DF0CF809F4B4641733E02CD88EFABD20B044DFA41544C3D843B3146C01
+ 77D9D10014F985BFDA5D1BE413A3C4BAAB7BC2E65E8D71346857E16E8B7984B8
+ 82941227BBAC895FA973A36C43812C8AEAA99006C2E103DE8B86CB9DE4612732
+ A9F924E77B30AC688341DCB8F37494872868BA5E84B61B5AC5E16701FBEE6D8B
+ 42176EA193E054E7434EBE068EB3573C91BA643C87DDE7AB18DDBCA395299C40
+ 61189A78DE378E5DC53DF7887EACC480E24E888EA425AD1B0262CDD5357746A0
+ 3AFC14B30C7EE678BDB628713BE6BA6B14F06BA6423A20F20CB5A49E064A8DEF
+ 950B8DE9B512BDFAB15748C73352A927CF78A4B17E256AE270D5132DB59AC27F
+ 86D22C0BAAE4020B2AD964DB3213E9F05DA25F07EF760587B1862161C0A4126F
+ B1FA6FD33DD9DC2FDFA7A91A651AB59C37C987DE3859BB5C8C502470438795BA
+ 6EF5D2AD4069DDADF047717727C0CC0F7D252FB4E2FDF66229E0B463BFF44E46
+ 584A18E1926F9D485BB20503CD7A520C1653E757D5474E378ABD6E4DD410713B
+ ABF3CAC98BB67B8E9DCE4392110074B70928A33BD6D3E03FF8A54E775342A49A
+ A66ADA68655F6AA30703102D858A36D59D653142F1AFC1CE40A83E125087F5A1
+ 10172061460FE91F69852AE9911EA7316A8183067B78ABCF8C9976AEA2B38186
+ 198D459568162DB95D43C4AF1268495CEA041BEE04232D35EC5F5A106E3EDAA2
+ 435B594572FBDA90317641C1473078CC492F1FEFD667FEC215D7F007A6896582
+ 78B78E9847382A0C710238DC20F084AF797B45F17CA132821E54BF4FB23E0955
+ AB6C0A448A513FF90125AC7478096E28850729145B396464ED91F579FFEE81FD
+ 888FBE31C480D5DE8D16B724A0C8B37076F0883785558FD133EF537A59D4ABE5
+ C50356EA3ADCE57B33E85D824DEC70D6419BF1D180D96FB2E4A94C83ADA9D189
+ 9B491CE79C37DC65247F27BC089913C414010CE5B361D6A114337F535E3F4ED4
+ 42170196A171746131EA6F96AF6A2E850A14FF14F39745D5E8184A3654E1718C
+ 07D6008E050B4C7117E9C3F5FFB7740EB59F20E9EB44B73610833949D2944C90
+ 3B69C08AF53D61D60B03A022A7571683B2BFE9A0DA7B5261BCE6604854A1C98C
+ EFC4D8B545309E94D20D01408AAA089401350F3AD1340A8943C0617C70E977F8
+ 4E0D8725A6E9BEE81ACC51979DF7B6B26997029373D2746FFC463DD1FAFE65B3
+ 280E496E5ACAFE04BDA1DF19DC787CC4447C17F8344E55E2F0978B45E127F7E8
+ FAAFD9942E355F51ABF89EAD0FCF8A7F51C7FF2F8C49A9BC23B6F253568E4AAB
+ 6B79495983D9515DA61CDCE90445D19054CAAE9F417C87E763E697057F6408D6
+ 7C8613C0086363712A5810165FF2664DCA65659DAAE650ED042C61D80D5777E3
+ A0003D9F4B4AAE1AADCA9D2F67F1C94C9845746798D30D6FE812D13A071E6B78
+ 4F25E03C0B8D45CBCAE402CE090EB00B487CB2A5812DA0261E529988D4A51212
+ C83145E0DD9AD13D5BAFEDDB5E9C29092859A1E076DD8E5E9B8D9CDC41549542
+ EA8661CBC38E929BF0BFE8ADE74EA9E621A7F3E839605D3CD2368269A36C643E
+ A9A0C7706635360098A74C2E7CF386832ACFDB2C6DD5475078E45959DB6B8842
+ FB33F4A283368D5955ECECB387DF792BFEA7B89087EB2DC6CB3469C6AC3A5CF5
+ 2AFE1C47A0E0D169A93AEB489844953CA491FC10C63CCB4D8212E450941DFA52
+ A0A5A4CFF835E80A7C7DF3271A480FABAF3F112A20AA8EDC7DDE731F43EB9346
+ 14F6B0355D26786C5F85ACA1884C74AA6CADDF0AC47FBDF08CAFFDFD748565CB
+ 3B7FD2754106FAEDC2166E669FAF71900E828C6E86A56CD2E48FA1B5B8C0EFA8
+ 8528B3AA8E9708B8911942F1935BCEDA2BF286EF76255042159BF1C50C7BE3AB
+ BA22F75ED56CC847242C10FC95E6799BA57A76BA66C1CC392C92F4AAD848EBD8
+ 1871EEEE79F0D90B3C55AA470F608B54EB1BB371C6408D90286B4FD8F3FA9A6A
+ 9EADDC0776718A1CADFACA964AFAEC3ED6BFC626AC9D2C6BFFAFD457124B27AA
+ BAB23C524C8260A06EBCB73FBDF8263C54F13E9F9635FBCA58F9D050EDA5FEB6
+ 1C824118C18C87AABEB33DE4EC928C925FAF75D535B07DB2727DE6ACF61C0E9F
+ 4740EB808E1BB72C22028F987AE61AFF3408716FDE90DFD22146F2D3117F1427
+ 3699A835823290105E59DF3FE9891AF63F850B585AD7FCF556941EBBFD8F81B9
+ 64860EA6853E717B8D0FB655E7711BAE218D99B773E79894DDE4C9A3C8DB07EB
+ DC3FBD598573A9674F5761BE87EC45251CBF6F3A5E80D870D8F65F6EDC158BE4
+ 4E7F9D665CC4129A04E4ED48746F892DF3C164DB832B2DFA4D6987972AF697A4
+ D8FC3EC4AF66A5632F4E861F0211EE7E47C59115D3FD98F66F4F8DE3B6D4E550
+ A64CDECD346726F840B68B72713171A766E89C7692FFB124FD5A1534B242506D
+ 24049CE0BE055B017BD8069622DF74E5CA298115D1230717B4ED3EA06346E5EE
+ 4DF0CB57519501D192239B7C555A5F887C4C042FE6D1A443326E440385DDB641
+ 8C2CB29B33FA8FA906D6EF4D01389D4ABF01DD55E37FABE82DE09F8AE881E492
+ BB516141DAFA8184F87A656D438A96C1D1B6151D9E33316044C1E02BF2F4D6A7
+ A827F5A40AF7B421884D5AEAFD49B8CEEC56ACD291614DE23477A22C764D59A2
+ B36EADB2B57424B7985B7C7459D85D1D5E5143240441B3198749FFE88E2B22BA
+ 48632747A024D66ED1BB191E8E41C9A02AEEEEEF3EBDEF2662FB912ED68F05EA
+ DDEF425068B5E1D8B2559B4CCE2CDBBC7A17226BD0BAD111EE26059354562879
+ A39D7D82EBC40B4BCD733A986791596279E16F1281C01C2F9E74EACE8ACA76B5
+ A904BEDAF9A33BBF9C328BB738CE95A365EB1A17490F818E91425493664F33BA
+ 99E4EEA1533BB30C671370C4A97F660D0469BE0AB03601E819905FBB8162B0C6
+ B755ED892982B1F3092CAF6B79499161995E2796FE9004D6DDD7D65AFDB2F9F1
+ 3689BF89B93873331F42A716D03979CEA5641D6558D38C7E505EBFEE6BC4A7D2
+ 1339EB9157260471E15A4221E931E0B23B7C0F65ACC8806AE955E2F957223485
+ 46561F62747B728CD6308201576E61B26779B03BFB9A02D3EDA5BE4693DBCE22
+ 5A893926444293C6979404244653945F6547DB806EB4FC4952E3A044883F1C18
+ 518607BEA64942B3B9EFF2F0A14AD32D0915E80AA653A81B6CBB0BFFDE96244A
+ D499D80A47880DD8805656C8D3CDE2417C0EE0BCC271E4E66A3509319039736E
+ 16DDCA750297F26DD26FA398F1EBC81C835D11B3F62C4BB9D26A7DEE2B39BDBF
+ FBFAA70F5756581185F66A5F77663D2DF9075D31319D144D8F9BF73E922B0A66
+ 711CBE65D063BEDD3BF973DA83FD96CABBAC892B0599458287D4D26B8C56E165
+ 355CAECC4C5A2A5FA9048289F3CCA598EE8F1C391720FECE7D2E8F597D17A61B
+ 50C4A9CB97AFA5CFB70A460A2103485B357BB4C739462723855873A2D9FB11DD
+ 68467BCB69B0D0BF55A7F62E761F6EA16AA753301B99AB8C0B4FF882AC8DF76F
+ 1773BABF9D0E1AC4E990290953AF167FCFA04CE2B24CE9894DE99FAC606AF35D
+ 6884827CF105D1BD5BAC22C77AA183BAA1C22B5C9DCAAADBF76F9BFC6D7FE8AC
+ 0EEF5D9460EA122B644A7A42F86135AA345B071C0AC13DE95514C127FDD27F32
+ 6BE957E8AC6340C80D8AA9B37FF99F369E479B975D4F3BF050370BCE79AF7754
+ E1E201EAE96FF9F3882CB89FD0507DBD91D70E0A7CA0453E604F1B03919C9D9F
+ 17D06D698532EA11AB40E0AEA9574821678DE92C72BDF0E167CB2192C1B82F3E
+ BF4E23391FE6A557FB97C2035269C960217570CB3EB5C9CA91FCB92895F2DDB7
+ 3583DBEEB25CA707D635A8C991AF1C44EF416AD71E0E026F7BD9AB061B2125D1
+ 3919C1C60D42D85013C4652085257CB571B8BC24CCBB5BC7BF6806369CB9AA09
+ 9F214EBF5078761539F82D46052AE3B185D314A142D107E0851AF8D95BC78878
+ 60CFFA8FB06C30E23F967650ABF2B3BDC52CDCCFAFB77092852875B699FA1387
+ B5AAABD42DB63B4813DC13D26D8E8D4308628438268BF34C581D0056F4C531B2
+ BEE5FC4B527F66DC6C8FDE4AB12C6098E681048B2E1940E9C9D60C93778CE9E5
+ 25E55D3BC86E1807F71CBB841AF1F01A4223296A863B080E9534360E622931F4
+ 860C501E86C15D762CE4843C95C3294EE3D2F597CF45DCE11AC24480E0799F9B
+ 566F683321F999615B85AD0E957C601690F143583FD720FC00EE924C2551B4C2
+ 3CFE8B644EB4CA91ED9A72D26391FBEA2F9A41A93DC90C3752A6DEE78CACE0C0
+ 90B6E40490BF8597521685BED34545944506ACA6583D03F9A6C628A1350464C3
+ 27F05105513E3A72C39318E8C54DC0A69E8AAE8051D4DE0AC564334829FE0041
+ 3D3F104FC6AEB9AD0EBE91742D9E7F129862A8BF43FA252929F0AE4B2564074E
+ 7D184E19DF85A75E1593F2D0B795601FEF242A3ECD6F9422F933F3F2C8A78A67
+ 00D74700275F83DF90A3DA9D2FF2F78E6D4EF641498CC026AF86E2981B716A36
+ 0385F31070A9526BFC7DD59783C0B9319FAD68EFA5CC3E12F3D9594E6B1B6186
+ 4D94180630831EE9C2C6FB1ED255A3E14272B10726FD07AB92CCCB5CFCF9786D
+ D37E5A2036DBEE55B95BF0B9F95973AFF43A692AA27D510E498D22F5E187BE73
+ D4BB2DD137F640914AF9A41D9DFF091CD761C3AFC4C27452488D96805EE9A3A4
+ EED8BC32348B6CA71909BCA03DA94400CD71EB2341D12C33F61AF15FCD08F321
+ 79848CE1EEE5AB204F8789952C2DA69CA0616B743D7D456120C88F0058909CED
+ 5A90338AE1E1CEEA0FECD795E73CA494AE7302BE9B91041124BF95E6DA373F0F
+ F3AA0EA94601E57A3059908D7C5D966732F03980C945979E4573A8F6DB015272
+ 96ED79069F013F7BB81E7CBDCA4DA1E40B23B34BF36522141318CF5438C26936
+ E3801FA1EC21C84767D50127266C63085CE8A021ECF2C159AA2D5CC0B0DFF83F
+ 749C1176FB312F67640FB86EAE2919D59BE293BF286CFA6AFB3FDF889A25741D
+ 42C1799351AE192B54F7AC41421BE4DC4681DF045FD9E16EF44B01FFE10FCDED
+ 228F4BB7DA7940009A137BBA70DCF42804535D703BFA9DA24E0593DD1ECE56CF
+ 377DF290825142D4A2A980CD9A2B9FD952BE690EB452F2BDDC7B1A1246ABE2DE
+ B190
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMSY7
+ %!PS-AdobeFont-1.1: CMSY7 1.0
+ %%CreationDate: 1991 Aug 15 07:21:52
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMSY7) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.035 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMSY7 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 0 /minus put
+ dup 3 /asteriskmath put
+ dup 20 /lessequal put
+ dup 50 /element put
+ dup 54 /negationslash put
+ dup 56 /universal put
+ dup 57 /existential put
+ dup 91 /union put
+ dup 94 /logicaland put
+ dup 95 /logicalor put
+ dup 102 /braceleft put
+ dup 103 /braceright put
+ dup 104 /angbracketleft put
+ dup 105 /angbracketright put
+ readonly def
+ /FontBBox{-15 -951 1252 782}readonly def
+ /UniqueID 5000817 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+ 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+ A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+ E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+ 221A37D9A807DD01161779DDE7D251491EBF65A98C9FE2B1CF8D725A70281949
+ 8F4AFFE638BBA6B12386C7F32BA350D62EA218D5B24EE612C2C20F43CD3BFD0D
+ F02B185B692D7B27BEC7290EEFDCF92F95DDEB507068DE0B0B0351E3ECB8E443
+ E611BE0A41A1F8C89C3BC16B352C3443AB6F665EAC5E0CC4229DECFC58E15765
+ 424C919C273E7FA240BE7B2E951AB789D127625BBCB7033E005050EB2E12B1C8
+ E5F3AD1F44A71957AD2CC53D917BFD09235601155886EE36D0C3DD6E7AA2EF9C
+ C402C77FF1549E609A711FC3C211E64E8F263D60A57E9F2B47E3480B978AAF63
+ 868AEA25DA3D5413467B76D2F02F8097D2841D19E719A6BC69E4E5A7E2391440
+ FC1CBB37A6EFD6E90D95CB27CEA285B25A44D96ECDC9BA83E3A5041CC586A86C
+ 761A0EB7DC39D97EAAD2D08919BDF5DD52A5C59E9053D443C1EA86D0B1CFBD0C
+ FBF2566648129F868189128CD797D0959D3817D1FD06581111F2D0D71412F8CB
+ 56895DCFD01FCD750D4140ED2B2DB9F9EC494E2D0ECBDE2AF663641ADD6327B6
+ B68ED8B2E155FCFE9A6C130C73CD44E5AB2972F97859EEFBCEC4EA65D55170BE
+ E38A09270790ECDAC0254B9F51278D236A5D6F30000AAFC00F5BF425A91B8934
+ 8CFCF572085CD93C08091015E50076ECAC0F3615542F63F5CF836C7C88697840
+ BB8E23A43F20F5A299116ABACE7B21965F0FB051EC92EE75FDF18EDCE3141242
+ 4D2A7FEF9CB9809917BC37CF9E868815718F63D61DA36F4D40CB79F0E36E1A86
+ 4FFF3F97C2255B7731492D6944A6ED5198156D9323391433E837294D83552A2C
+ 25C1AE90CD4D5B36EA9E0FAB576E187AEB4F7A2D059B3E12615D74A029EE2EC5
+ 812388D6E37A119B7CF710111350907E6778F93835E4F0CF683E18C807765DEB
+ 4BD860F506E93FF70DD5ADC22689C04E14B0CEEC6D04FE02B7724440C1C47535
+ 71D642E5AB266F3DBA368D10BD22B37DE19611BDBBF473F9E0CA54CC5FBA1716
+ 36C43FEFBDB0DEC58A27A5AE7A339D4C010FD5F09FAD673C7796897F67CFA9B1
+ 095B3E2AF4DB42CF2CC716858452D2E43F8C659E801D873E33D07CC2F139786C
+ 3017346ED424133EF25ED6B2B89A0A8E6B5C5FCAB239FD854F78A07DEC0C203B
+ 7C38D36D58FCF9D04B821AAFCAAB0774607A564DFB5D23E319A35D43DEBFE12C
+ 7D2E45DAF71602A167EDFF790B12CE2F4E593BB527A1E5D52C2AF25B010A300C
+ BD5A6CDDF132E0A15E692D658A1F0F22A407FEDC10BD6AE88789D6C6A6A3583A
+ CAFC664F85018F7F5956A1CFCABC9E963412716ECB0727855499865663128308
+ 76E2AE5948F9B9EC550E0021794D95164F59F97F5879902841E83C7394A676A2
+ A0E5D39B495794998BFF2E5FA9781AD1FE235F879DE3225C33F187AB8F75B75C
+ 776E2D1F55AE04C380AFB21500E597B45EE00A826ACEA6D3A92F9BF3FDB9FAB7
+ E20E1856C0FC940B8835FA869BFA989042B71ED009D5684CC143DF931CE97EBB
+ D880A361472D0048F1B7842016F9D3529C55653115847F549B2EEA1EE4A7AA9D
+ 4582F69B640B2EA37EBA7E44A7DBA4B2BD381EEEDFCC48A55404600337FDE0CC
+ 5A8783AA292EDE0B9CCCAE83CBD1898350229555496B72CCA5A51DA8EF8F6545
+ 03B2A955D144104A235CB4735321B8A41EABEA396D8BDB586B369DE80065AB20
+ 1DCB3208737357CC4DBF5F8FC2F6D0EA85FD665C1D35FAB8D59CCB38865202D1
+ 384155BB1671164B60AE0CAB70AC88280645C9F000F0CB54FC06B86A6FF76FEB
+ 47A4E8735378AAA2DF12C7A81CD93E7F1418B9CE1026F9E32F3309A004AE4DDB
+ 1B6355F5777AA861A3A5F127DCD8A62E50D45A1C7A19D0DE4F2CB98810C8D276
+ 037B4538B17753B5585A29729E291DCB216DC41A511C6A1181550392130FAE08
+ 32516D221F647CF522EF4F7A6E4BE896E333ECF7903B93E2F089BCAC5FA4FF88
+ CD3CB418A17D59F1379E7FFD10BDC5F25713369769C9EB7A6AD07BB46456ACE5
+ 97AFDCAFF601E5F86F4C1C9E4E8958B3E96F836E85C1EDA520300C6C2FE338A6
+ 555D1AB32C4A4B6E986CFA772FEB113B37689620A083DC0D19C820D099773C2C
+ 9E8A571345D148C3BC052AA1C554AB07EEAA8BD3FD54E4B3E2E173756BFACAEF
+ 816CF93A79701F961A8E23E87409BC8A4AE0F131CE95E87FAE0B674D3D84B54B
+ 5CDEF1C86AB019C6EEF790783B0B20FF91CFFB6DB02CEED1BC8C037E4BCB9A66
+ D0962842B3D5C65A26385EB05B7030E6F965AA5CBEC4731C735AC895E9927773
+ AE18155D76CCB51674C24B7B442C656F1C9C5FCD165F26799DE5EEBB9BA8AEE1
+ 4E4144B6BD682504DB4D81970E7681F7A3AE12DDFE6ACF221EF6D8AD30047F5A
+ A9823AB8B7252255753056E15E395BDAB12D81AD517D961DACA2E0067DA7BD32
+ FA467296DC4502208C5AD06F9293F5CC93A55C68657E0D5D2D5A1FA33A42792A
+ D3E48F1BD8C60186A14BDFB744F491778B52A8DD79CED40BC93CEFCA8923F688
+ BF2F4A851AA03E88ABB99A6DB19885E40595C88DE95E71CA2921C3D27477CE7C
+ 2F8010FE8A5BDC032B27B3605E5CDCAC80E08AD3CF661596E8BF5B00E0CBBD86
+ 569DEAF53B964A71000BE6B9E928BD4A401299FB8FBCE355985A7A0DC8901BEE
+ 4C5593BF32271124C8099D4DC4A17BF7F24F6935FE60121530D4D825EEC681C9
+ 8732B3659B1B9AE832958ACBA519F203EFC5B257B0A754A10492F06536AE6ED6
+ AD8E82D046DFB623C044D7AC4EA977776AA9D15AAAAB63279322C0584EF5CF5D
+ D20A9FA385070477B8D808BD960555FB9B2C7322C34B9C51D809013F7E3040AC
+ 7D631C73E8BA34FE51355FF91E50D6C015576D5104CE754CE7489B90AEAF6ED0
+ A37CDF17A14422B77AA3F37E5267551914DE8F8D044F98A8731B81E15E1BA2E9
+ 8007C11B00C30AA8B1B2C20CA008458A7DEB4DABF5E95F6298DF4A8E51AD58F4
+ 078A1151D0F618DA19D02DCFE9A12C2B9151BB8EFB93B263401E9FCEC8753225
+ 18E71A0EB14FFD4ADCE03CD152800B9E31ACE3A5CB784EBC4DA27E13A2DDD25E
+ D49C47F4887651A8B1D5EA2718743C3BCAA1494EB2D782619DA041832FF63863
+ C51FD6C3F059376EE35DBBCE1112AE9A1D14AE8FCF67BF1BDAE02748DB8EF507
+ A6C9EAD07F38E18D88D9968BD4799FE31A15418156E127E9695E52625967D87D
+ DD2CC6DDEE23584E8A01AB2DEC8EA4820700C44A207DA2327846D039B989F7E5
+ EC069E330FBD9E59941EDFC72C1D2ED33A9F
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMBX7
+ %!PS-AdobeFont-1.1: CMBX7 1.0
+ %%CreationDate: 1991 Aug 20 16:35:49
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMBX7) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Bold) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMBX7 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 39 /quoteright put
+ dup 65 /A put
+ dup 66 /B put
+ dup 67 /C put
+ dup 71 /G put
+ dup 72 /H put
+ dup 73 /I put
+ dup 76 /L put
+ dup 77 /M put
+ dup 78 /N put
+ dup 79 /O put
+ dup 80 /P put
+ dup 82 /R put
+ dup 83 /S put
+ dup 84 /T put
+ dup 85 /U put
+ dup 86 /V put
+ dup 97 /a put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 106 /j put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 119 /w put
+ dup 121 /y put
+ dup 122 /z put
+ readonly def
+ /FontBBox{-55 -250 1289 751}readonly def
+ /UniqueID 5000765 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
+ B1805DA88AE375A04F3C90C160DE16F890E93B13B46BB2F4971D900BB550E53F
+ EC6248832A83CF441B4851445885479839AFAA2903A27676E5FDBCD653467C5B
+ 6757DA1B722133018873A10B4FD9D710BBD9BE518D989B67DD4533F8702D640E
+ B84C3CC2607748FBD7C4BC6DA98537C7A83BCDCD871BC342E318F22902994EA5
+ 8F5F698960BF55B6DD1ADBAA57D96E80D7C28E06447C5E0131B450234C39D332
+ D6EBE6E76DD503B658866DF4DB6774597338B1DB90AC6C0ABAEBA29CE9656E89
+ 167D88958F3BF262133689AD41A5B9A90DF2838A221C5067B73066612A0FAD18
+ 6A3670B2A69D1731367C8335600294ABC365F383F983A8AB1E37C1C1804893F7
+ DBF122DA9C3843D1715ACBEF92F28AECE850981251D1D25F13B0DE4320D26157
+ D14147622A29E7E7F6A037AF34A0197D57AB2A9F7129001F7F636F3B07E0F12F
+ D409D880B878EC8C911E3B1F24AE299AC56227FB9D6ECDDDC5F8DFCD18D8D0B1
+ 4BF4C36A2E36F69E7291A1A0F738ED27D586BAAE8C04E00D5B3C88316AD3374C
+ 5164218F5588EEDBF966055C55E9781D75B1D7B9C1A2FD2682E7CB88FA9C6889
+ 8C5510BD1964BB505CABF99F91C7110745DFBC4B8A2A15295320EAF27A97ED84
+ C6E59474C2832859A5E2536E33893D90929D6D2585C73A6F3D305D728BD9838C
+ EC5FFFE4A313350D2D25BCA2B4A67B628DF5A11CEA76A9FDC74DC5D2879999B0
+ 4BF7CFC2FC4FD0995E6E201353E5B9472105BFA252E2CCE8D95B6A5389B34FC2
+ E61C6F4946A12563C86E60D3802FCA4F1C330C0EA48A47D633DCC16CB4C75800
+ 338C14F18731B6968385634D63ABCE86699A670F904A77946A019D30CDEC9379
+ 659165D57232605BC12B7E1E162E384AF1F4E462A05BFD9EAE7595658C3E14F6
+ F4FB23C40E793FA7A2C6489A5C973694459F93D474CC64490701BF69FCA4D97D
+ 69D9A3FBCBDDC9EF8FDCEF75CD4D076D485407838A8DD5539EC48715CBB27114
+ D5241A08F5B3E3C16ECF90AB9CA8590544F7707672D09B09A90E7F664FF52FF5
+ 2E328ADA89E7672E508C960F8D11437454F4EA38FE520B328873F20BAFBA3733
+ 5B88AC134E6069D26D88149248BF8CF4FC60A9DC7C9154D88C4351067FCDEF02
+ 1CF3F2995244F11A496FDDA3E839F16E1E754A27D7946B9DDE00283E16D9B924
+ 76B56A9770A8AAA1D51598601A9518FD52015A2B2B3799CC419EEA9B6CFED8A1
+ 1D30351CAF37008887229BE8CD61E73C63D599BA300D963D4BB2BF39730650E2
+ 880D2075288EF96A687AABCBC9D7AA0EFC12A826D925AEE6FAC19F1CCD3F5868
+ F716BA87841DCDCD89ABCAE94EB61EE71152D0B6CE2953B7BBBA629EBDB08AA4
+ E23EB05B92EACFF8D597DC2EE4C20A8D667AF58ECDF41959896FE92CCCB44FB2
+ 482557337D8D9EB4EC6AAE4AB42FF050D72EE2C1C7F15C3E206AD5364FB2CD66
+ 73F10120CF9D5D86A7416DBF550444B2FB4017C9E0E247ECA52999F822FC4E51
+ 083D737DC0F722C314B9B8658B23E421C530CD59BFBD27B3E73F1DBF8DB7FB7F
+ 76707D1FDFB76012BD6606E0AC6296525AF08D479D7043CECB5D3FC18CC6C5C3
+ 1C4166C5AE6EF25260252E74A5849EB44DA4394024E30F8D7C58112A30E22CE5
+ 96B0670B953331C71774C9B8019945B204944699AAACC5299BD343CB6C2C36F4
+ 73AF2B66590F5F3C31FDEFEE1DF36939720BEE538F73179FBEF5DEB5EB394EA2
+ B93B6D25151008512E549D39C1E664E9D21CBD7EC3E9C138DDD75B9A1FFD54B6
+ E45F192E11BDF740449244596B49377E9CF53761FB660F7A990D2C7E4B304E3A
+ 896ED18834C589B05DB09B1605A66873C24631B199A1FDE36F83388ED92E328F
+ 3A3970AA112D53548D32B181FB181B07EA1738E104946A5F9BA9E08E7FE8197D
+ 1512E0BDD6A0A894BD066322E7BC41534E50176A9C3F8B8815741556DCF80F82
+ 9A2632F773F8A3FADF5E4BB0C8C831A275D6712C4624BB61511237B35E2DB3D2
+ A3863E7364EBEAC3DAC624185D45B3DB7F9559F612B46575E70A53FFC6152CE9
+ 8B1962492AD696991D38290B78F6688604AA2E8608D62AB413C67C9DE67AEEB3
+ 60EF3892C82693A3F3E12AE89D40AA64332784E7DC4F2721125F595C9460A2A6
+ 4D53279DB7319F85836681AF3A1AB0FF9D8B6AFD9A7C2D8C77A34815F7BD612D
+ C10AA941AD3878929E73CAEFCC5F3E1FBA410444B62AA5309E9DB9ED7B9064DE
+ EDAF8E6434B431B0E306D6334F5D107F9E42ED15250AACEAECEAE5E8908D52EB
+ FF5233B1AAAA62C72FDC7912769AC20923E50432CB09FCD9F64F5A3F8C937C98
+ 266DCAC955C480EA3B482D91475ED811473C72FAE58C1A648E39732B434F9A64
+ 16433C33FE515C83E4803324BC9BD316E96519288C9925FFF130116F4295C8FA
+ B739628BE837D04513CA6F7AF2B98275CF7E49AA4B08E93937901B8E4A10893B
+ 1F31737B19506782AAAA466EB7870337F1B16DCBD1F72ADE0A9E0B91F14D2B6B
+ 8C37FC1D3A65A40F1A2A711FB66C571C03F4193C3A38962796A3A54FC40FA3E2
+ 48876762872C7B2B3355A359523975ECFDF21E3E9BE855460EAD70AE9037DE55
+ 3B26EA7C6B38F9DCCEE07F361B88B0F7384BEA78DE2D9905326122DD92E8146E
+ 1C5B113216CF374CA6D5243BA64789C6BB61A396F2BDC2EDF59C3E4D36068895
+ 812B6791DF722996DD1D6A620BC5E17FF55B2D106E8EF91DBF4812FD3389039C
+ F8907FAAAB0C32D3875FC884A88FCB758B67D04069021E6746477ECA0D750C22
+ 45B05FEA422BF5B0918DD92A5FB6DEF6E6C58E48A36E7BD17B66D1AD2E782A67
+ DD98754245C0C8B3BE037F0D2D3C554CD59291D6D33161381B59184541D9D223
+ FF9A6AE95000A0888EBE7908B10FF200C2DA55F9645CA8E8BC4C2F3EB666C806
+ 6BD02C47126E1F87E92F98F697AE2CFB2A1692E835725D4B209284DFECBB8779
+ C11E083853A17494B484506624DC0AC6BAFB60CEB8698F1E7679EAA23A19C286
+ B0111C9FD1A61B515AC546B6EE241CFE3C4A1FE377712CA58DA713B7D8EBDEBB
+ 0B667650B1791511A2AC7724F80334404F3803AE4DA9873E4D1B13D6018B6C3D
+ 6FD5A1D1BAE0DE1701D53535CF96A66EF8105ABD038FFAA5449E8BA894C78975
+ 0BE5D2EE732BCFA67A48B61F2DA2DF28FD1FF4858E81C27FEA9F81FAB7E4E3C9
+ 1ADFDCB84987594FD92DC9154F40810F5F6F78B2AECAF8FAF4A4D34AE84881AD
+ 35681F847FD1F066A8C499ED1C4C84FA5436A25B1BE437406C97B9CD8434D6A7
+ 51E1AB0B50E67F566C059CFB8783937206D3BB8B93A2582A8E211B9FC8B35AD5
+ 032605C98E6B7160B903C2A80AC2628846B45B18FC6040DE4DCF98EDC85F3998
+ 68EA6FC2374AB8726D4CFB53B2AC13D43CAD053D067D2037E631A0D718F1B16D
+ 8DAC160E15AF1189CA33552CF98C882D15284721199DEEC4C5DAF69EDAC8FBAA
+ 542761044508C1042FDEFF4D9764BE37AA4405E5AE787BA22573EE727F3F853D
+ 0F4A7945FA82D9A6DF3EB7CAC6799BDFE0A91399360684C54852DAE75E398A74
+ CDF1A992EE69CE2A99163D12F635F147D275602BCEC5F36015C95601559353E7
+ EF960BFF0D28E249A16DD71B20F9B506AA3FFCD7DDB2055A4AD22AB55E3BDF48
+ 5605D9F548A33D0367467A67D01A5E48845A71A4B3D155CB6127AA597A9528CA
+ 13CEEF7DE6F887F904A9216666C3E281583298E2A7E83A87DC8EDCD164273BFE
+ D42DEC5D291D806AC04DB928FBB1B68D4F43E402E575DFE14B46FA393EE22437
+ 3B4F4EEAC4CBAC1D0DA300E5995099EBCDF18ECA3A292DD8715D41EEF192FA9A
+ BB7C8CE6EA26661DA444AD474338D7CA7CAF41DEDE0070A506563722E4D2B201
+ 30181678C6A1DE77D0DF47B9D39319CD7C0E68EE6B9C657E05E1130E32C34873
+ B5B2C7B2D25614BD9199A260F6FCCF211A6D7329894231D77F3F02A6EF523D58
+ 3B5EFBD563D0D8A96DBA915CD296626413C6B0F415FBEB148ADE67A796F62A8E
+ 4C8EEFEDE40EC26831FDAEEA4DBB9CA8D3E867A8A7AAB9B82B4056E4745FBC4D
+ A0045DF209CF2CF3558487C245952B200774E3A5C5CCC27052EA9E7CBF4351E1
+ 5E8FF89814A6B6F3A14F430095D379F455E01E11AD20D809C8E704127B117857
+ E5D34F9E2D1BCC17B8544974DD3A6257260220283B3181712FE44EFEF3A5BEA5
+ 94C61D2F097392FB2DF6F9F4CC5909028557622A06EA4CF1DBC487AA7ACF87DF
+ E14D60B35EC97A9EEFF07110737E6C96A1905D93D7F2C52AD0709F349E455D6E
+ 97E418BC882C33275C96CF1D8A729D2798BE587E36BC33BFA76F0D6FB48B7E01
+ D307A2928037CA473B9A4596A8DF35B785F837FFC11FE3DA0469616D3FC16586
+ 2D57F4CBE81F0B356B0E3CA8C613DD147DD13BEA874669F997B0D1FA11E3BCFA
+ A404B270A60718F001F6F82E235C9B08DF54C85EEBD3859853BE3EBACA8D0B32
+ 071F79D85C04770412F6E918EA7E472BED6F30D4BA7435308F7C962D3C969DDE
+ ABE085D57F86AED8F781DBE09E7B8486A230ED80EDC8FBEB90E9CC857B90E436
+ 73D3855B60AE3D4387D8A187F5EF2654A923CF6F6B0B952704C5D2B3FEEAAABE
+ E7A1242B6CCC06AD7F8A1AD286F5647E1BD6674D0FFBA6087902D82290F8D708
+ FE897C1FAE151BFFAB459EAD88439AB2DE0D09F82406D25F74FEB44B4D5B9AA9
+ 761E9B87E4E247092C3C8B8A59A0EE91EE735DE5779EEA358D8C8AACCC7C92FC
+ 12CA1FFAAE944F2F413F3680F74B298B5A129A4194E156D9FC0257F74E6AF1FE
+ FD30A45987526ECA6156EFFA40CC03F4AE9FF30B4A104499672E6763846297C9
+ A5164227AA48B23D78F2990AA6E80EA9D07C1940D6985E64F6B046DF8F3F9A8C
+ 7D8E00EE8BD482E5CD947833A2193ACF1673FB875233DC7C84AAA4E0268A8007
+ 80C54971CB5C820BF56759575654AD954EB90097FB2D399D65091FDA0671783D
+ E15C6BADB2E32238543A3601DEC1ED46D44DABF98D4B849A6879233D3256A176
+ B75D05EA7799AC09C382A89B64E51BC6C5F2B84C236F93F0A75B37213A0040CC
+ 23EAA216EC796C2401FBEC1774020AEBDCCB78F1FF3C9C14D627F85702C6CE95
+ AE7FB51D10B078430DA3B8F210CD4F68441A95F9FDEBFC1BE1EE47C449805EFF
+ EF0DDC5C7311BD2939AECDBA6DC9142157588DAA70574B77470E9CAFF26468DE
+ BAF3681B4C32A84A1A7CEBEC65C0B082ED9A2FC37C265FE7627A2429823D0934
+ 75420B16D9E6EED618F6DFDFE3A672F0493EC9B85CD1910BD89B5C9BCA7EACAB
+ 12EDF563CF468571A7FF5603CF1182F776D7BF08686D6FF68BCF60DFA96DD8F2
+ CC71DACE796E8EFD6ECB59638CEB516B4B5F3BB06AC1CA4AF3D1672FE3A5C3AE
+ BD5C4603F9F87BBAAAD73BE49C01502E29D70849EC6580713FCF5311288D0382
+ C89D5F52B244EA3233597C1817426C93FD4F444DCC3BAC20DC13F06C7F74A1B2
+ B6A6011F33247494FB2F91D88CFB19D515FBBE2557C993D041241685E736F047
+ D8AD4CB4D53E14BC19B654F21914F0765CE53A3EB0D699511F1D272A9F548350
+ D8599F1F02B105ABD9E652E466A109BD6667A69C8263F55340F58BD4D7EEBF55
+ B8E601BC449D49B488ABE4680FD739FC00A1B25F0B6ECD451B708CCC789B0AC8
+ AACCFF3BFAE89366D04621261FD01BE3212DFD11F3A894EE8FC830A12F44B24E
+ D83316404857D975618DE45072AA4852023DF5A88AB39ADD3FBA5E3AE194170F
+ 051B23359EBB388C8988BAC086C26838AF2B877B435478955BDAFF89BB31CB2A
+ AD843B7720BAC3222346740D37632C920648FEF611CC07A085CDEDAAD494E78C
+ 9E73AD584FAD3ED369E3D6A45556FFCEF320765D41D0BB5A4E79A7310DA5324A
+ A412D4509AB8E0AD366FAA7990B46C5AE377A32C8EEC90703E8CF2FD7FFA48C1
+ BF872C70A61172B49FC5BEE950D8001542124EA024BC557677823D2AFC418588
+ 7E4E8A3ADDBD39727D0E8BA30E5C95E114F3B690DAC2CB5A0A3362845941675E
+ F990ECA85D4EEFEB6CB720B1A0F900669EED6282F8948DFED5DB881693CFB820
+ 27A598996D9DD88CA6D2100B6E8EB5FA823F616F657922068EA47AEB44C220D8
+ ED1C6D237D02C96F53D2E2BE0A345098C32FD6064F0FC0FF15EEEF08EE9F22D3
+ 05FD1C6B11F29BBAD3248444AB6D8FBCDC27175BDF64E991A3BF1E06EE36543A
+ 03D1BFC9D394475E20A4030455E14CBEAF1EB60621A0902FD5AF9CAB91249C5C
+ 6B085A767269A54291047C180243B8964D29B53E8EBE096F585DCDA4AE600E0D
+ BE672C4CA9A30077A7469BA8C84A54DC330EB41644F7CA70600F9173935B9241
+ 622651C4648A3E195B25F7FD50FE5B680A34775D7E32FE9AF33169ABC44AA5E3
+ F2770C26135241929130DBD2A66C9629060A55F2E6361C4950C0C994BD643702
+ 1C7F46FF4B341287918F59A154B67152CEB040A1EFC3EBE3B2B520C3CF825CCF
+ 2AA271086B61EB85A86D920692F036613910A198B840520E29C1DC166B1CE8A0
+ D9ADBB01DB2CE7468AEA1CCEE24CDA4681658E8907F022A74AC9646BF9078630
+ B7D20A582267CAAD6353DDFAF28365B62CF92BA66D45A67A8D9599CC999468E5
+ 82086F16822AE32291AD48692E16A36577E02190CA4F541E30EC498DB513A10D
+ 2708B41F5EF7E6F0CCD6C45D7ACF484A6C2D37A445957BB069D19D03DE075DB2
+ D70D86F02DCBAC12787BB1576F58BE728DCC1FD304E424840F2FA8609B18F025
+ B5C0B6EE2F766CA079DF9D9F710E9C6E740E37EEEEF5488D22885EB8609242DD
+ A82109DDFFFE8A9EE8697338A61F143479837AF3EFAD2DD6D61D5B34015C7E32
+ A0D51ACC2D3892E03BC0CF365074FCC3EA8D6A77547298939750001D84F9C760
+ 0471A5E20904BDCC44D7F54FA6DE7F917E9770A601820006CD732C88BCA0AB03
+ 4B84B3BD10B68499D02B175AF5315857182BF12BFA99E29E910FD7D6C9C38007
+ 46EB0FBB7D1050B11542057A7524B5644E3D5F043C67CA100784F1C43D2716A4
+ 8DE01848CC895C3716047A0A8004107E2E952A12135888AF0FB4A3E3B1F1AAB3
+ EDD498F32CE8B2FDA5B6F48455B33AEC79AD8675A71389942643F3191D14D56E
+ 419A7DE7791AB6E34B4C6642B3E4E55A1EE1D4D144B4781C25A7E0FBEF69CE62
+ DA4F18B3E60831E2642CEE775EF84D9A856DC7A3BB28A0265B730FB65B0177C3
+ A06C51BCB40A048331D5B53863E947705E3048F3EB53687E44F732257F36C538
+ D5AFB9014E87C897A6E8C354893A687FA2A0A5EE86A33C29807471DFEF43C61D
+ 75C9EC95DE1CCF1082BEDE3035BA8FD53D58917130353A52FFEA72604C1B583D
+ 0632E98335EB680276447670EF520333FF985D3221C009FB3CDCFCE5AA000BF2
+ 5BB65FC98687998D849D15F246397AC2E7BF0AEDC480A0AE75404284C35EA597
+ A5DC3E963CAE28BE5F7970668888AC34669C3098487F384D4F584F81E4929667
+ 19EB020EC473803DF2EA954EB97792DC32935F651BE2F2CC06255F8700BECF5D
+ BDA4C6D65F69D6C29FD588C4D5A3286DE4B8D688D5ABE38BA7B9CFA7E9C6A712
+ 93F4DFA888D00648547C43D91D924475EBC2A0AA001013EF3CB1B8996BF8A0CF
+ 86BB35B6321E641964125D41382BBD287BF053012D8CD2520DB39A442724D34C
+ 45892FB5A816E34A0BA17271C193AD373023B4250D6DC61B10095F5B7D3F85DA
+ 20AF0D0C4FFE572D39B8BAA2DE6B5B044902EE087347B73E206723CD9DC12760
+ AF95FE1295AB6B71B68CADEA56C8373F0E9EDB7F69B675FC3E7E4E655D4CC141
+ 4CCFFFBAFD394E78160703432622002C3DB6BD7D2C06FB9B93E327F9A5692285
+ A1A6BB2D1379717AACF5A098A315B3DC9A1E3B61DF863DE8898EB9807A7A474C
+ 809B2FC74A8282E079BD92EDA04F130D7421D7A846EE3BF30F3B52BE15F407FA
+ 7D3956E537AF491D286191F60DEC1E2F6D2FA03F294969BAAD178400707D3E39
+ DD03A715ADC01EB0773B90CB113C3E71874636417742DA3C03A1CBAC1F7D5F35
+ D1701A529696081A6521C4BCF26BFE8DB5C9B3475E0A9C7606CB9F51AF19022A
+ C82FD936AA116A9D4CB91CF3C81B0939141ECDA65345209DA3EE5D2220E55AD4
+ 9F33F7BDD05CAEB930203501CA753D24DB8BC9E51248F906984B64800C43481E
+ 469BE99B1C9DE92536EFBAD2C4DA2A0B79414B74AABC1E0EEADAFA610D566BED
+ 11FDC4C5FEA4CD524B0A1299F213D008AFC6237A19ABBF1105A72657C37455BF
+ 5C4784F55019866F1323E4B6B1F5DD2C5758D58453FD6994650081C4269AA3F6
+ 4B1FF43778D3003BE6FD506C620055574D5262A6C7C4F8F64E80618AF49C27D5
+ 2D1A6C98B85D889C75FFDA30A3005E34EBF1FFE7E7CDC2DB51971243FBB62D54
+ 17DF2861AD379B99AC7573F6F18811322E74FA640BAAFCCA3BB5B4842192B488
+ 9CAC76F97404B7227B27669642BAA6E83A8D4A370EFC6EC73BB1A1E318DED19E
+ 728FA2BB20D6705A8B9C81AF636C67627BF3C9977473E7DD1849415205098C8E
+ 7FFD9E3D409F2682244100C1A39FDA8999D5616103A59D86F21692FFA8E5380E
+ 766CBC5503CC859AFCF2296209A8F15870DBAF16959AC625C2DC48E81F3F94F5
+ FEC5321F7372E2043C900DFD62D78FD8096A1FAA8D130EB05BB5D2E4B9ADD619
+ D44108D9F00832A219801EFDC0CA00289AC2CEBCC7D6FCF83A39BF4BEFB2CA12
+ 642EF2B44EAEA637CBD240C8FD5B12BF8785FB1A4ECAD6B18C9005B647CE492A
+ F3BE3445B2B3D058C0C58F00F5A84310AAD333C05F3A9AF6A21CDB8DBC2EEE5F
+ B4B407010D8931C298E064E93B3F098A1BB8174653F9E9F04F00410D615E29BC
+ EA9F8DF7FE86899FD23386DF2DFACE42AF0EDE5C475A128F268373646E094BA3
+ 8B4B399BECE8C09D127CC0F489EDAA5C1EBB3002AC94C344BAAA3444EFFC9177
+ E8B40DFA72ABACD18E6B250E5F13F6AC481CE097A718D0710E8D98B052D25BA7
+ 7C3409A38EEC6E7358E123052D2BAC72FDBA9C16137CEA85C82B42DCD5111C34
+ 65B076B23601EFB8956FB049AFDBE69A83BEE2296D4F6D4F436D8C34A803BBDF
+ 5705DF7CE8B4127A3D557717D0200D7F4614429511EA2DE7466865A3E581337D
+ C5C8B99C1347B8E7BC89E924FC89B6FC6F4470270F7644274267C80A507B75F4
+ 1DF8D27A6ACA91C37FDA863C73F43C849305082E72E73FD2E1B09D5D0D25D73B
+ 9E40D559F57CE7EEC6905943622B0C1E77F53A18631D884731F6434FC0D75B1C
+ 88CDB46397EADA81AECA5B67C41D39B551C2A12720423340A84DEC4C44B279F2
+ 9AAB81E8DE71AF6A62C19D3B7C9EBF0421B0C7C67A19E83A21A4574B2101C094
+ 3F0583F0DEEDE46BED5A9C701420175CF459AA2940A5CAE51D4C35103A735969
+ 73CF9818E6B12519FF2C4C30AAA17F6A8F8711E8BE150EC8A0F58E301290729E
+ A1EB615AA9F800021CA9E9889C91C5E493651C8C2EAB8201931A937654ADCD66
+ B8F1D084C243BA9151CC8871DEA387E09321627812A9DD72973B599EB0D5C026
+ C21727F939C7CA4F5F0C050727D3FAC7C544596109211E9CD32BE3A8AAF06339
+ A872D47840378AEA8F3FB58F1840B76E57C6BD02A8ABBF1DE2441C2AE05F33B8
+ B629873790F4F16645CCF9E371C8B4CEE8ACCE916C8A9FC4338839995A14C420
+ 6EE7F1F9C886F06182B0A7A4D0B656A12F719AFA7E41A8CCC3849474EDD8A0D0
+ 66084AF31DDBD589C055765C31DAE6DD362E7B3E7F3B61F8E64FC0AA679842C6
+ CC41B0F0C3B4E3052A639A9CE8A9A866A4ED10554CB2AA6F1009C62EA3701D4D
+ 1F74D66AB339F4E3F7DBF50D7656F15AA02B8D49700AE98A2BF964FAC43518DD
+ 86015BE355C495F18F8116E0137B164919911D3EA9050A0B30043520B16D322C
+ 543685079C6E6AD1AFB90098C446FFCFB6C392070EFCD2380C42D68B6BA5AF11
+ 
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR7
+ %!PS-AdobeFont-1.1: CMR7 1.0
+ %%CreationDate: 1991 Aug 20 16:39:21
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR7) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR7 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 11 /ff put
+ dup 12 /fi put
+ dup 13 /fl put
+ dup 34 /quotedblright put
+ dup 38 /ampersand put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 43 /plus put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 47 /slash put
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 53 /five put
+ dup 54 /six put
+ dup 55 /seven put
+ dup 58 /colon put
+ dup 59 /semicolon put
+ dup 61 /equal put
+ dup 63 /question put
+ dup 65 /A put
+ dup 66 /B put
+ dup 67 /C put
+ dup 68 /D put
+ dup 69 /E put
+ dup 70 /F put
+ dup 71 /G put
+ dup 73 /I put
+ dup 74 /J put
+ dup 76 /L put
+ dup 77 /M put
+ dup 78 /N put
+ dup 79 /O put
+ dup 80 /P put
+ dup 82 /R put
+ dup 83 /S put
+ dup 84 /T put
+ dup 85 /U put
+ dup 86 /V put
+ dup 87 /W put
+ dup 88 /X put
+ dup 89 /Y put
+ dup 91 /bracketleft put
+ dup 92 /quotedblleft put
+ dup 93 /bracketright put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 106 /j put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 113 /q put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 119 /w put
+ dup 120 /x put
+ dup 121 /y put
+ dup 122 /z put
+ readonly def
+ /FontBBox{-27 -250 1122 750}readonly def
+ /UniqueID 5000790 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF5B8CABB9FFC6CC3F1E9AE32F234EB60FE7D
+ E34995B1ACFF52428EA20C8ED4FD73E3935CEBD40E0EAD70C0887A451E1B1AC8
+ 47AEDE4191CCDB8B61345FD070FD30C4F375D8418DDD454729A251B3F61DAE7C
+ 8882384282FDD6102AE8EEFEDE6447576AFA181F27A48216A9CAD730561469E4
+ 78B286F22328F2AE84EF183DE4119C402771A249AAC1FA5435690A28D1B47486
+ 1060C8000D3FE1BF45133CF847A24B4F8464A63CEA01EC84AA22FD005E74847E
+ 01426B6890951A7DD1F50A5F3285E1F958F11FC7F00EE26FEE7C63998EA1328B
+ C9841C57C80946D2C2FC81346249A664ECFB08A2CE075036CEA7359FCA1E90C0
+ F686C3BB27EEFA45D548F7BD074CE60E626A4F83C69FE93A5324133A78362F30
+ 8E8DCC80DD0C49E137CDC9AC08BAE39282E26A7A4D8C159B95F227BDA2A281AF
+ A9DAEBF31F504380B20812A211CF9FEB112EC29A3FB3BD3E81809FC6293487A7
+ 455EB3B879D2B4BD46942BB1243896264722CB59146C3F65BD59B96A74B12BB2
+ 9A1354AF174932210C6E19FE584B1B14C00E746089CBB17E68845D7B3EA05105
+ EEE461E3697FCF835CBE6D46C75523478E766832751CF6D96EC338BDAD57D53B
+ 52F5340FAC9FE0456AD13101824234B262AC0CABA43B62EBDA39795BAE6CFE97
+ 563A50AAE1F195888739F2676086A9811E5C9A4A7E0BF34E6F4C9A04BEEA891E
+ 4D22B39729EE4F0ECBF3CF3C429B3BB657DF66811D3A108A73513A22D252AEBA
+ 66664B33422FED0E63D93F9F8E24320719C09F50626EABAAE93F5649E1981AEC
+ E8F19F6105EA978C51CBF54E94F3DBC93516313F00B281D1B8C8E4C1DB33363E
+ B81B61D7224245842A6B98939F0ACF3ED081BFE7A813215D36CD6ABC3EBD6B99
+ A5FAC5AA7A0DB126B0A1FB14B58525546D4D8BB6E95F803D6E48BADA30DB9FF8
+ D4CFFF712D687586429F06831C52D53CBA65C5EAE63D40802E0D552AA5F8CD13
+ 89FF9856072CFFDFE4BCBC79215AC55FA32A7FA328347245916D74E63D28A6D0
+ 22E5132D19B55FEB201CD43C83999A517BA551F80D255DE46DC3438FA6375EDA
+ E8C525F266A9BF10080717DAD87636FA8486CD38539673DF12C418E88BB9A4BB
+ A6777FE21DF92CF0C95FD69135002A5707EB23A2F4371E06EDE453195B35196B
+ CCF2D41BC88AA41E23E35315AA0B02DF069FCB1E258CE149BB9C169309CB4E7E
+ E8AFA8A10DBCBEFA14F201451FBAE2A0029E04FA668418E8F2F4F6CD5B9743E5
+ B2C515008C6D88493D3F20B5E8ABE68400E509045C04C12A7968BD4FEDD37AAB
+ CA06547F02B4F59898864DB9B6CCF829B57E1CA6B866653DAB3CB88A1E08C82F
+ 429CBEE6CB95D3EBC755C98671BFEC7AB93294D901515D47908E3E4ED3803384
+ 332D36729187108276014B7B278E71B74FE287404A2C73CE9443A23DCDFE3FE2
+ BA038D8FE95B05FD322111C274E2C1977CE2A28E207B1F7B287EFB7BE4D97BAB
+ 2E22712043EC52971DFCC05B67A85356363ED1FF91FD32BE61A6F294885204F5
+ 04E5D8EFBCB3F056CE1B0C505E142109F18FFA8DB72827E1CA9F7778C1FB1D6E
+ 5481FC14694D94749E7D666C7C17C422B59B61A29A8A893F4C5D4C95D3B69A80
+ 3E20B09ABA2B89034EDD23F56AB2038EBEDDA4F8A47340508AF80B34BDCA3BD0
+ 1821D611D8B8928D0C6D17548FAB9C2E49F776760DBCE58EC304A082BC8588A0
+ 379CBDF25DB2A8DD0C0FDB4716155080954EF43230B8731097F9706509627527
+ BEB2757EDFB2BF4A9602FA9D2CD13C67ED1FCC9030C93AE568DCC1A8CAA4ED05
+ 4409B27CB65DD33D93B61604E7E004715C64B637D76A25539AEC9F2027C577F8
+ B88707FDCAA875D70E37F36FA316E263A83653EA1CA8BF5715190F077F1A7139
+ 9FAF0C0632E00CF976A41574239C4DB9B0D3DFAE66F0B6AB4FCA91A6ED97E138
+ 2F103B9E8ECBAFE88941C49CF0B452399604A7F96503BEB1F9A60CD6030C8428
+ 88806A4C39BC9330AD9899A90AD85A4635B56F0B5785FF4DCA8A5DDCC3EB5FA8
+ A66CE42EBA9FEF15A260E5B8BE16EB924FD9BF8145EE87C05E775B470A8A529B
+ 06FB4FA0F30EAB6F7581ADF2693A9D948E218AE6A2D825B14B23C56D39D5D61A
+ C8D550F34B5FF37FE20CA5DC55D37D148E93DD536A33C3E3E1BE0967B88BD08A
+ 7429E1DCDE3BDE76049951A7B296D0C9E43BCDCF6ACDDB9E312BDD972EEDD9A7
+ C9CFFCF4F1F61DCFAC2719622B03FD2AFEF07BD6B6B6CB3DD9FF6B9C72D9E25A
+ 4C6D4C77E3ADC5A3E25063476D069AB91BE7F03486744FF1EF5A9B4A6A7C9B33
+ 724C9B48828A5F3911821239C3283CFFABC5126B0F0D3AE0060B6261F5C3FC2F
+ 4E63E394026A08E523204F9A32D0FA2F9C45FAFFC62C52EF8F63F40BDC8B0B82
+ AB1646820E53894BC3603912D0BB715AD95C11F1F8EEA788612C92415399A899
+ B0C112B86023D8FC561746835629A76E2F0B0215246D2DC4F20972677FBEF484
+ 97A7A8AC20E4DFECB15211FB91EA3DAAC5F58CCFAC6B26632CA81FFCE7F0AB1F
+ 2B3DABE4E5D04BC99CE070C1E0C00078F4A2FEF97086CA2015AEDD4EA4EB2F4E
+ 8E7B8361CF57A0DA227EDBCC976F264A5F393C9F7EE62AF7E32633AB2A398AA4
+ 4B7D18B0C9FC178876FDB8A7D5FE1AE3F8121228A5E01DE4A4324C24F63FE8EC
+ 4542FBCC0618BC41934FA2C356EAFCAC4438DF0FF43F8DB4C207F5C12A38A0BC
+ C433D32C1F97EB32CCA39449E713ACB1AB589D5AC33A690F419055E070393006
+ 4EB4E66805F33315AFF14AE7CA8524045B33D0CB7CB70C96D31E124AB113EFC8
+ 139738509B9FD6DE9DC7AC487847F282C0C79A40B5E36F99369B0FDB4ECB3A0B
+ 9ECF3C5FAE7204D2901F0472E9E809D76E0B01F9895D346FD242235CC1B22682
+ 134B8FA3820EF0981D7749179E9001A7821FEA95EDEB1648F2A94141E17A5F53
+ 8ABEB0C859645CE2B3B2163F4E9BC6824A316D11990953928E015DE1E58399CE
+ 8CBBDDE105A15CD6626804904C79CE02BFE8F69C9D975A430C9C4A125BD00B31
+ C20619CA95A92D2134E63DBAA346D5A984C251BBFC43C8AF35BBA5AA50107AC7
+ 722145A97F0A06CE5A07F3816EF8E6E63E6A10BEE5F02E8806CE698D878F035C
+ C1779FEF06BFCE4C38738B15B048DA26297A51403ED3E76CB5E729369530801A
+ 4A67FD59F31371FA448CE440669DE76F16871BAB1D11E9AF04409C9544CEB64C
+ AB0C9838E38E4DD415FBEC9FCBE492FC28B74D9B85B05405F957612EF290F21D
+ BA668B596EF8C35D56174595C0CA310F5B53E1A370BE5D90485AEA83AA2F1CFA
+ B0509A43DEFBF166A4656262BF83BF5F35906B833423F4013609DD6F4ECD435D
+ 11BB098D06EF664CE71159BCEDF5F8D2057EB5A779AFD6EE147837FD2F0CAA3A
+ CB224127AD38976BA2B2E821370F7244AF2FAA75A434880E0737DF29B7125300
+ F693787B0EAC206534CC42A52580D5A1BED9F33ABD6E93F7DC694DE83DDE1ED1
+ 2760ADB8199F986D7CF4FBE734C54ED5C9B1CC5C0650F4F3C8BE48CE11AF71DF
+ 503432A7570CD6562A9BAE21D60137A10F14D622B5CC699F43DC1416E7B69492
+ BE71F944589B490E358B0497E3AE23C9CF95D060ADDD56D602090426A61878D0
+ 2E0D4CF772F988B7BA5B544F88EF2558F0BBB8E10CAC812F54123F5EA1AD0FF4
+ 989730B955C63E94DD9D32CF76B7BE23C381E0F4B16D84ED2C5A22FD8F5AC98F
+ 50BEA0C3D6C02468BA26FFEC5E8289A42DD06AA6CE05D544C72E6C00D5820B3E
+ 708A79D4E8F19F19B90F445F77F61BBF367D464F9693E58CEA451DF3EB15F34B
+ B048400692E2B31A299C9B7716432D4AC35BEB8E131A358EAF26374CCBDD9D21
+ 7846DCE1F76DE7440EC07C829EAA4DC4E0A755835365315A341B9C7D1729C4A6
+ 25477630282843EFC51D83967032BD8B2FE32A2184E68039A85BF51BAA9C9B71
+ 18BB219F7FD0606F8A8DABDFB3BCAC6744B86CD439F90E0C4E9E5E197645B2CB
+ C4E4828CE0B06E5D562D82F82AA39B7E6831895E31507CD61A3CD0BC1FA7D3DE
+ F0FF32F7E501EC6E80DD24204BCF35A574C42BA899C33198CBECEFCDF7E5BD9F
+ D886616C5ACC77E2FF4652DEEC4768209649639CC3DBA33C8CDD75F1930935A0
+ 6E77BE02291E74E361BA44B18AA29D343C48D849A9F064314CB3BEA3A195ED07
+ 5F9822416A80B1B7D6CFDA673873585CFD4C14857DFE5A47C263A9C566542B25
+ EA3D55EFC17CDBDB9C649E92760225387F0E71643B70F90070DBF4C331E14818
+ E59AED72DA27EAD17F73EF2E3F9E86F0DF99BF3C872182F0E1F75324F784A342
+ 7115B6B1A5FB93018990B4A2889D27FB48CF77FA38669DD41748E2BAA2A1E43A
+ A895183A382DC827F3AB637F73BD6887E6DCEEE701A8E2719C95FC9932CB69FB
+ D5E72F6C677ED2943E32AEDB008BC9772281DD9869773D7EEDAB5650F7175EF0
+ 3DE7C0738959A523C11726FF2020AE83C66C28A5E548ED25AD4435488077E195
+ CCB9BEBFBEC243EE84C643ADFDB970134D6E7C734B49D29B17FC27CDCE961680
+ B8B00970B88B8B18111E9EDB5F1D19210F80750785757412C11D9FD61054DD80
+ 21876A32EAF22569080E5C2175D36CCBCA3124090161EF85A03741306177135F
+ 96BE1E05ED4FABDA0AE5E3E4EE548FFE977A565EF17C420344B436B8E87767FA
+ C42CB129A888C937B034FAC9E84B94D3961FCB5909E2DB07F251E2ACDEB344D2
+ 8E42784FB6B061C503FAD35AE0931C897EA5ADBCB17F4047F5B3478D5EE12661
+ C3F5730321625BDE4B2844036D03146B53A8D76D5C4C89C0E38F14D760771518
+ 10A5B29AE78D1C4B50DB9A8A4E419E7C38BFDB9E7A16F3A012B81CECD33E7C7B
+ C10D0A9862ED42D52FBD5E4DDD443BF57411471AFC945203B8958B709DA5ED02
+ 140145F4DE28C8219E7B5693414646490A88C29D719F692F4ADD342F4916A24C
+ E9A4086AA19E490078797EB14AF3304DACBC2F8530E439C35FDC5C98D84F6197
+ 1754297AED2BF31B39409EC8A617260554A15F3E4106D35893871DA82BFC113B
+ AB2FA30BE5A12650B260E29E7789A27B5C2C272B31D16E465D9A514507E2C299
+ 7DCFCA57C31CF0A96EEDA19BFDD51972B9F1C98180665934FDB51742D15806CE
+ D5056FAF6976C5553BAF7DD7F59683CCEAD748AAA54D61B53A40E3EBDCDC163C
+ 90F93FCCCFD019EEB261B39380CCEE29E5F756F7AE83E2BD7659E8FB29D0ED58
+ 4C85BE701E076A08DBA7AAA0840D8E553CF234F5A26EA88D165FE6F02DC8C24D
+ 5A30215F55D20936297811B64B70063564FFBBC88BDD07E784071E1F2662948B
+ A84B58A95DA41C76CC716BBD9A44C381624861838BF4EA56B36B86A6A5F4C2EE
+ 37FED514E26766D25F6EB26DB86DD79950543EF9A17C01AA59D13E62096BAE8A
+ 45AB13BC0464A0CEA48E42AFEE6BF90EFFC3DAD4441CD1F6B2975193171CA3C6
+ DA63D02CEC4CEBBA9467D6729CD3EE8027B023F550768F71F12BFF06ED6872B9
+ CB1A9F5571781915A91911935CB5C3999B85F095E6610EF4EDA1BDA85D2552F0
+ 0981CCCE03CE8D5CD8E14752E288B21E905DE366A893411D65C329071B3BFB6E
+ 895BA3CBDBCFF23432B6871A94A88B9D5FFBB1734049CA2DA39DFABA3973E59C
+ 77B7F725B87BB7CFB2D1647D7D6CD56B0435A7BDF1E8DBBCBA7D6ECDE2576FEF
+ 5B187B036B8E93155E703AFB322A1D369E78B117684F01A6C65D0D3AEFADD1DB
+ 440D606845427C3C20F664BC68B2511FCE7AE680CBEEB1BC74BEEF5C52389894
+ A13AFF3CC6F0872C4788D2F2132233BC6B433A138AE86308D995FFE74B48798E
+ 52534F569E1276E014B7B3700813C5DC50EA77E4FA6904B5E03A2A6E4D4AEF03
+ 53AD3039893E6E32A6B9F6FAF59A7D32F6D3C69A8648D9665DDE9E3BC375528E
+ D59E33623266F557CD7B6604DD49931C8BCF679001BF5B3A6A7320081B663A9C
+ D226C27BC9D942DF2D8E4D259EC606DCF1910EB669C99876C867C0753287E2EC
+ CFB56848FD288DABC6A3F7B9BDD2F9F0897C0FE9D282598D1E231819C473E90E
+ 65A3B3DC1B8C38FF8B52E6DDAECF2E06D02DD356968DAB4933DD5644BB682EA3
+ 24F40DB95C874FD1FDAD10815E1809E9C60AA843BB585DDF6014E41229CFCFE5
+ 95A766FB1A94BF42C61E1A72CB26E5741ADD49C4EB39BEE16AF535BA6014DA00
+ 424FF0145EB728E107A5D3D2C3ACE176FFFC87012B24B23644ACC572C91CDF08
+ 47FA030174B047E1D2FCA14E16C3EFB04B183B763C946C242B38876107209D9B
+ 4A541BB519887AE937B73D8156701A6766AF8DADE4A64C53C280973566254276
+ FA481E2D1F3A803A1F15F134C79F3C63F3F492728AA65E8E2B54F4A96B6A25C0
+ C1CFDF8775D985F1F6EF580C4657B4990055C25B5CB3580CD24E3396FB57B381
+ 2CDEF45CB1AF23C19904AD3F44FCA4D1A9A69FB1225A946344F2A1542CC04FE3
+ 4D9B81BCB94B436D2D5BE1A1C1776335F442BF6DC019B85DC1E7EEAACA8D8445
+ D54DFEEB205E632920665CB84C90DE54D9A51E4CD242D23EA7378F0FE9748743
+ BC1FEE01F4F0AD85C82EACAF5CB3EDF78EE3CC61D2C3A21F257CC65E825B429A
+ DF32B721EC3E8FBE96A037FD2DB428FAC412106EF2A06F452E7F9494350D0287
+ 8CAE4E5F49B512DC813005C1C6DDB7F5D07BCCB519A80A8846A56400BB12CC8F
+ 601F402EE011CE300442EEC1EB3960279CC7954DBCDF9332A3AF376DA2AB9A30
+ 0983664F6EDA6F84F5E4E19FE344E8EDB2C6D03EA0BCCBCA5EA38E99A9ED468A
+ 51B9FA32F79412F2695365C728DEECE1764F61D27F785F95D40BB657D3DD0842
+ 20F2639CA3A49EBD4D6CF75BEC4170A1ADA986EE16F6AA68D060B1421131D3F1
+ 699A81472B0C8BD7691FCF190136ADABC2AAFBE09069C1EFB58D48C6F90796D7
+ 71C3591062BBFFCBEEEB52B8F13E4E39F2AA8EED7597DB04A10FD78AE61AB230
+ C2125028EBE3997FE7C3EB06091E5060302F69A0E3B35BC33F7262F4388C48E2
+ AF6476D02250734F12842BC8F19DC82719A47B76B8495CCF41FF8ECC4C46D8FD
+ E623515A1C88934ED9851A6244D6AA8BB53A9780A8965CEE720CECDE0139DA99
+ 5F05CD7A03F254CD6A81B091CF308FEACFE58BA0A1AAC2AAE12134FC3BB3D702
+ EE374D263A2731142BAC6B2099DD52948DDA8FC61B5B85557D546AAF2C12C630
+ 659A2F776B28B3387E40CBBA2215ACCC12465A142AB6A31A11A2BA082DBF82FD
+ A1B22F762D5258E37663A5CE27C63AB169013C76AE11A01CBC9AA7CD58C13828
+ B32126DB74364767D74085712BB75180DA3C43638222FFAB68550797BC50BE3A
+ 8EFA75CE0B7584819DFBDF811590EDE50D39C887DECAA4D60B620CDC670C5B45
+ 5A5267AB194C8D73B93FDBC3045A0BA9E33D5F909386222132E343A1158BD694
+ 604D70EFC976E205AA736ECE917228CCFE30A8ED9F72B78ABF27D1D0DBD8DD50
+ D90919490F9097475179CEC7D4D7D1BFB3A1575BC584B1B6DF4F431D60A50415
+ D38F236C739A8ECC874BAF9E409E90F326105E3BE3D23687744EE14D5DAF1B09
+ C85FFDDDD7F9BB8FA7B2FFFBBD13DD06570FD95DA839AAB875524F90F48DB62F
+ 733FCED62CC7CA013E62EE0F4245D3757852424A6007DDA1CE4B003B20C823A2
+ 74F4AD81C21DD8F7ED7D48DE45A05C410837832FAF0B53255F6CAC3407D514F7
+ F111488EE52E17CEEF394EEB03FC4B0EB60CB0A70062F5E7E0F8A6F826EA7AE0
+ 746D2A7C7E52970DA87531AA0F969F790A4E8FCDC1E3A5C82E4BF68D71D53724
+ CB0FC02CF4EAF99D69D8865DD83E8F61EDF656C3BDAB0D3E6277075D2F72DA14
+ C6449F34843CFA8FF76A5C8359DFA7AA849222157CB37CFDD13428B83AC2A9BA
+ C9B21B6744E2365812C19A333C60C6F6A58676D4E83FD0C7CE6519A3C613FCC3
+ E832B4BDA1B3478B0263E5AC4F5D973CFB076D3FE4084A4A569878955D5BBAD9
+ 66D5C0C3E28D6ED02090F8CBE8DA1E525F450BFF1066F3F1EF0E1FCD9AFF86D1
+ 368E71425C4F0951C62815E762944A7FDC65F66B07F5959D61EE0581DE3EBD2A
+ F746D2FD8895F27877E07309887504FBE44AB698EBE52414B7B39D573B706065
+ 36C1C70855AB80C8ECC38EBAF44F7F17A88E81912695E0416C96875FEB54563A
+ 2C71F40DFD66DCDFEC42679C64D1F33BEF56620301D42C27ACAE2F6658080E18
+ 41E63E861BACBC9B2DBD2758F4416DBFDDAEBDF0D63893D980A0ED82CA782B04
+ 08D5B3ED14C966C13B50ACCC6F4073419D5557E9936B1D07E9FACA54CC8D3F6F
+ 4B73F51A83DCD36259B3757A7602FE5BC43741899E12F2FE67A8602E571D3645
+ 2E889AADC94A07CE396618D9BB97D70C2ABD993C9C645544157C4C7A232C9216
+ 1B716B34C6D7E48266584CD564F86A1DE3F5D4182ACC3D2F7AB9F154C44E5318
+ 8963E7A7D6A18EABF187BD2741065EE21E9A5EBC497E85C7175B2C863C6113E1
+ CD2D5763199A8960F4D3B22AC2B63D1EC83EFE180A6E518B5B44899054A2BED7
+ EE10FFC331EE72FB6006ECC5D33A91584F60B5F9774C5EAF65946392AE3654E4
+ 9693B413717A95BC146E1A116E1F3D475E0F0F40966229D3CBC25E3D05A433B5
+ 52DDB071A0F61386DC1A62BF52A19888320B7ADE5D754F2A873E08ABFFE78738
+ 134D4E21AEB91294C9C8F584CCDE3E2A8AB9E3C3D05B24DEAF898877747D50FE
+ 9F16D69387617F1987CB0BA7B9C37CEB5F2DA516A9F00A1F15859966A4AE3550
+ 36C8076619D9CA5C3DD26595AA97BAC4ABEB1AF7ECFE0B129A38E0C5BC1718F8
+ A7781566D961F734BEFADB33B5479CE89CEB010E07D3512BA8BE7D47A8C27C05
+ 121E90AC18F3C6968D3826F60FDAC83697955515CDFC037B268475BC18765057
+ 65C7161DEAE9CCCEDA6EAB6DB8ED25FC2DAB9074557159FA0EB6087EB6C1F204
+ D20EBD8808759202A00F8A049BBD2423F40A765574F7B049991EF13BC4D2E1D8
+ 28CA66854B96B8B8126824CE6951DE4AF3865BC03DA3AEC7E8BA9E6C555B97B1
+ 7B175B86CBB5F450A0566A1FF654CCA13E295DD283EBF77F28FF3CE33AB18F22
+ 3914F6BBB5E2B0C2F3CDB8A8C53A48314182D727D0A78319ED30DBA09F39E6EE
+ E53E97D323B33C611C515F276BB0D0C2CC3088037A13DA53677E3F3526248D3C
+ 5EF77148A31B87E83352E0E44EB21B816BBB07B99B76267E58E853379DCB8E30
+ 2351458A4E2516872FB14CC845314A803A41922D9E212F3E482D660069AC5B20
+ 82B6A5C42E5AF4561898053A0CEDAC591D6EFD3F6534845CE32631B675B9910A
+ 9E39C8F1D5EFCCB8806C11A3139D08388461B1B1A9FF6360FF9DBA48102630C1
+ 4DB5B8281FE7CF4DF24D532C46FD64FC31585BAC145565C9F1C98A2EFCD1F724
+ D0869F6F1C3A3353CAB895741C61FFBC2D7C0EF75E5A24567358C82E0254FFE7
+ EFA0D414ABA142F79C4AFE1251BD1D1F8A898408D6BC05598DA8A6C78F0A62BA
+ D2A7F3BB5532F9573AFDC0C3D84D16CF14ECF2AA5C7DCF6D410D30EF0B511B7B
+ 4EAD8A42A8E2870C11CE773E2C6796285CCD83FB8494609906420CF18E67A4EC
+ E966D65005B139FE2B1A5DA0856595A75F7CE312306493C518A2DF5429B50699
+ FB246B2C1AAAFA42B9A4614E2749D94A0B4A2413A48C9332F4526D7CE401FD50
+ 748519B63054931315F189E5448E7B8EEB5F04C7AECFE8009A19ECAA40A865BA
+ 168C1ED03B4C24F977220C4BEB19BE6EDD582E3E55898D7DDE7882F783AB6FD0
+ A7CEABDB4CD6DB1D1BCB79925E2BAB835CCF94022798281AE61EE51FD091153C
+ 2EED042C971551FAF6A39B4CFCF581678F1F46E1C077469C8689C4ED73061911
+ B1D570E9230B50DF30CD4A10DC5FEC6430F3D9D9FF0A4BA9F30D3E5612DACB6D
+ 2D24994643469304A50A557695D1BBF48259C67C7E7BBC4BD86D3F172772CEF6
+ 0ECC5FAA6AA18BFEB320D4BE10615611A692EC3421514DB9BA3C5AEDC826C836
+ 582C5A7B9E504D5E183D3B9BFFD4417378E4AF5A59431CF634C065B8D2B64CEB
+ 71FE2186E5F4A2DF1A6286968050E916BE75768960726882148021DA6AD941E0
+ 5B2209225E63EB1558317EF7DDD3646B697ADDBFEB56F3DEBD7F588D4D7DA69E
+ E4D5462171C0540BFA7096323602AF5798A63080C6432D8AF75A867EE05E9352
+ C8A88A3E0C5F4D504F0E85DE041BF81DC4B55F8A3D4D1ED938B3D3756FEA8F6E
+ 1C6E7FA5A54B24080161F214559BD1F9F2727AD4211599C2434789A88E342027
+ 24407FED983130C2AAABC2160EC3A9C0D81252C964F3D4708975FA492DA82BE3
+ 76B89F9CED32E5B0018C53F1D8CE5106EF90F33AC69E2AE4D68DA02E4B600606
+ 113DACF9CAC4F27763912A890CF16B20C9934FC9C01033A071B811E8A563D2DF
+ DC774B3647D90C95FDDF1C8372F0F33BA2C6ED612B4E73AF30D1BEE89CB2CDB1
+ 35323661932B9BAF0C775F9183A5ABC65E4C1A403CB047A9CC20F891FFEE663B
+ F492C02BB02AB035C3065FAB0E1A58E2D6B6D7A45461D04756EC233418B68450
+ 39D8310CF8CC02E43C1E33D14DB72E1AB33448B46687E9729BA4EC161D0FECF3
+ BD5A084F974763DF485F5F5C3CD0696C5FE4BE4BE693E42BAE8FA88A90B6E643
+ 3107320BACBBA6181DE0676C2A6C622F1A3B9CBC964ABFDE2AC7F36BDFF80409
+ 27C04D37C1751762BD4F79A657E6CC5C3718396444CD8045971348CDE824EF14
+ E9877E7C93DECA2FD0045DA73C3A22E023D252E42802924801F2EEA13A809B15
+ 0AD04D1A6047272554697BDB916A792B44C025689A30DCF430ACE67334C4FD7D
+ 128214D4F83D8C5036D8AD6C65E60E226615C59381B02B89814EA6A76CDCA74E
+ 86EBC8F7EEB860E979DAD1BAE7FE6A7C6A172FDA5552E965D1F8DDA8E392CD6B
+ BC703C0D9F0CA4A5A879E529B27C00E8D09E77FB160296659A222345C5036690
+ A73E0C329F6F9C9C46D7231957D626FD3CBD52A31FB4F944CC078FEDF4A6113C
+ 93BF0DAEB3AD8FD6265D701E60C1C1CBAD3FDC41DE27151F1D1AB21A17FD2BB9
+ 409465800E7190BEA1C956DA9905A189E5B3D5FFA9330B1652DA2A5CC7C54F28
+ 5AEF3ADEB8B44CA1726EA30A93A2332CB69C572448C58DBFE13C7B8B16B5BDBE
+ 510219BCA7DE24A729C923ABBC86CC823207FCCB20EE368AECC8011F67156B54
+ A84CC0C8CE81232CB8FA8AE5F9360D91186E2C4441436550A9D7D303E13CF28C
+ 9421ECC313D5AB8FC5EE304CDB3215307FF78D900A46A313F5D87BAB37910BC0
+ 3BC649D422875BAF42D55C9013FFD093AE7AC0DF7883965A7F0C916C794EE48C
+ 26EFAB47005EF88E78911940C07829DEA2A300CE4ACD824404DBEED4A8E707D3
+ 0A0389B1AD52CB434D1BF27127417B62E427F82CCEC4534B3F694EF12288BBAD
+ 1F8AF185C3BF922C1392A7371E0D0941FF93F01C07D42D4A18332C2D15D83BB4
+ 41C347536249F06BF976DB2AEFD27184AED7CD890C0B7284F50C2052790838F6
+ 19382DE0539CD99E2FAF1436D27E644374D442EF416919C2DBD2EB7567E6D01C
+ C36C4CFD65D4DF4D7BACCA0FCEE63E4351816EE02360BF2A9B4A8B750A7C430C
+ 7E74021B7F70CE0A6141783F00E3C462E5D16542510DF8C133A7390D25A5E930
+ E2E611FC3E9FCDA023E7017EF17D08CA286E7E3F255A1CA1967195803A920A8B
+ 05DE317A1752BD9B7DEB2B7F829BD3E893C2AA3951CF2E62DB8E75D469794D3C
+ 9BD48F0C2C597E96EE156D4CA1DC2CA14E5B5BF64E8A0D60D776E8F5FCEA06AD
+ 6F32630CD0DE9E33A0C9C169B85548CE200633864CA58B24A8A62123C6F486A0
+ 4BEC4B916701EB28CD2992F144EC5ACA4DC745906566D57D6F4A05BFB0609105
+ FB915251AA1BBC137DAF558321280D5E68A5847DFDF7DDF7A9F846B8B758715C
+ 90832125697E2F63CC6862C1503F9BC7AC20A85384ED8CBBE5E464C3BADC3078
+ FD8D85E6D90A39E990621695920B2888F6295532E86D5E444C471F322D9F6064
+ 71FD7F8E1EC0CC5DDF101E5F991EB951FCAB3B36C6F04C7E23554F8E1060F7EC
+ 4D70565FF53C51D53A0479AA47B0BE4459269929BFFDB5BEF8423896C0F72E98
+ F03671585B0D0324BD1C521C7D632BB2D22703FC64C3ED8A85C5F08403D7DCB1
+ FEF0DD2420264E76695D287103E8AEC720C2852D0179FA8F5CCA63066AA5BA76
+ 1C4AB3ED87EF19B6F07C46DF93A215C93DA29BE9BCD1C35E60672F8267DB269E
+ A4A0D83872B741BA3D340D2DE481AFA6B67A63B8A6CAA3ACE519A2F6BF025360
+ 2EFC3039778976E5CA32F0687AA50EBA55491A966785A03DE290E6796D681FC5
+ D0849B76A20A83027A746B4950426E38B9DB6FC1DB1C072806E277BCDC28D309
+ 1883A62E73304D62A890A506F2E9CB644B000F6BA1A0D10C062A9FD79379B17A
+ 5CCE4A1158391E953A001619EADBE6BBC481537297635D4AF9757F6A35F638C5
+ 586893AE79FEEE9D9E71C3E95BA40C3563FC5B2B908CE7947BA67BE480C96EE4
+ 3D2480B51C23373075D59112A0C8703D28A9A0257C70A1A683F464148905C5CA
+ 122DBB9FBD89124EE4E5D158EEC92B0F85DBF7EC1AEEE1B088B3E8442006D5D6
+ C80D30621392BB24B78EA36BDF9BCF30CBC307DA7353C3019E81482CFB80C7DF
+ 6D4AB5552023423501157A504ACC3B12562D4A912ED440B86406A8093E266741
+ 10FC696AFF6C3780C3FBF3F5F5E7C4E30BCAC446F99562AEDA13D994EFB12CBD
+ 467AFE3E6DE6B4CBA274E34D8DD12A1FF03983F2FD94F23532E8A6251A66095F
+ 81BF66D6506D99E6916EC26CBBD99FBC42F14A0C164A2DBA6D5D892C6B42FC0E
+ 52D51C6184A38E879A9C6602C23C7E8D7CE008086171AFB34E37E200432E2471
+ 6E4BF9CDA21A06C2E7C018989050B1AD4994B676A31DF0B3C51011703848B105
+ 471C3FA23B8F18E010A52FD5DFC5A9FA823CBEFD448067AF82238345B365C695
+ ADD33BFD6D47CFE7A59DB64E4FD01E6D8D1B6DD6BAEAF9992F9B5489CD3CDC57
+ 7B061FB9B2726067911E327AC421F50DAB823EA89DEA27422D1F26DC677022ED
+ 9E61105885FDB1BBD65F5AEEE8D3ACB1F5414D36485B615D2C50F2AA9C73A14E
+ 9311F76FF585579BE8332C51340D57CB21619B9E5C896755767137B5EC63F0ED
+ 1A2A0F3F06684B57164B84A14C05F770E45074BAB825F66F475FBD5A2DB044D5
+ C4112703F0FE7C58838D90DC7B3F7E01B76C60A1BABDD9394395363BDBED38E3
+ CDEB18AE3DBD196E58963050747D967E99DEC9926F576159CD74CEEB16940EF0
+ 3D0451E2F6FEF4B210E2608D5B70876935FC2D0CC1DB0AEEA6EFEC759AE7E7F8
+ A05B4C0ED715BD0D619845367E6A0B30854DE22FB52949E12DDE6EC37C01491D
+ D1704BCBE1266220349952BA10346FEE489A2CEAB654B01B6A76CC2B8AB7C21F
+ F9A07ECD4508C5340997CFD4D7BBD16DAB2ED950160A67D370D634C9F3A72ACB
+ 4385C57C62A36E81950F270429C2CFE44C7C3B66F2CA4E2D8DF0AAAEAB45DB02
+ 8463EFFF1F10CD4481FDB1635B986B189AEF4474F2848C1CA36A0DAA221F6543
+ 4D0AEF0A7F932F85201EFF8ED9D483C1322EC53516DF2890CFD8966A42F9EDCD
+ ECB9956CBADA52146538C8E0E914A17BD058223BAA61B97A64F235123AB51E7A
+ 556AA8686B550A7C4ADAFEA52E6B5D1CEBA17594C8188F98DA0754A9CCDF8140
+ 505AA30337242ADCAD5F4D3497971C32854068B1E99B5FE79F9A3001EB0552BD
+ 7D5B2247E6DCE733FE4DCD3D045C9AC39692FB538C27207855E99FA1CC130E1C
+ 30E9A050B2227B5FBD9E8785E2F9C957E697017AA54E5ABB9AB5A7048B9F0037
+ 76E3800EF0D592BB137352D93777A1755E6AE049A8A32A146FB7C59DF3983E85
+ 8188CE8236F98655404D5CF1DF3A82FD077ECE49EFEE7FAF01AA3B891838525D
+ 1FFE695990B689329DBD1DF30D73F1A9D762804AF8BFA4C995B7D1C486819D6C
+ EF2105781BEA1EB822DA71986F252C620E08834EBBFC3D364D21C6ADD3621849
+ AE11CCD4AD9A412103E784EBED7BF1B503A76AAD2D4952FAF363F85C96C1160C
+ 54523D1805EBA9FAE2BE53C15AF678C0166F987F4614013AC2D40C1749B0835E
+ A5BC015AFED6DF214ABD94E45528137528493E44DDFA05B6DE862E112E5883BC
+ 6CC31B225B89A7D4EB54C678806B8CAD8348288F2BFA6F8674476F0E707A9741
+ 2FF9C52E3346967B4EB471ED239457FC6F8AD1FF7255B6B455BEEF87449459EC
+ CB3206FA3FFA089AAF4E6E262EA1BEF8C8A4A7017C08C46E4BA14AFC57DC3DEE
+ A740EA81EAC277A38E5945CCD8E84B8BBA4C775D1DFDFFC471534DB8713DC4EB
+ 30BA50BE9073AEC179F18B56EF88A8DB98DF9C9F1F55843D4D74B280BA7DF021
+ 376AF6E99591CC59D5A4F6C639F87ADB8EB4D8BE1F4CC6CA4C226EEF84413287
+ 1049FD6173B56946425BCB7420C7C76D9667E7535E68D056DDE6DA2C4F32CFA7
+ 060B0D115779A0510DD6E0D7D9F9F48623DF9A7E485195268E70E9638A1BEE88
+ 79D6098D3C97E13361A46870D8ED23FB762695E9B90B2F9F199FD1580A044A98
+ ADDCA410D90066DF8ABB04DDB26CC624CB60E8CF655989ADA4B3CF6694DF529A
+ E90C52CE96C350E96F2EEFA030C30C7911F09BFB2DC33C43C154769FDE97AE1B
+ 39A966D4A5D8A7BBE8D3CE329FBFFB06A6DC91AA1C85B7CD7080E62A47531F55
+ 62D5F7278BB44593396E5F87EE841A746E446FEE371558EAE85A6F170DF6733F
+ DE10F1770EFA4C59A0B2A74ED93AF2C3699603117B370BBF381155B8792602A9
+ 224D76C387BF2FB8E276E28F1B6C0DA9DF2DD75FC051DFD5A28493D3DB8BC790
+ 8435A5B808A9475B0E0D1060A5E391524F958D4543AC81C2E42F43FA1A381AEA
+ F3D006697FBB96C3D35617937AB4A94BB9C1A69F3F8E3B5C5B157B39B216C9C4
+ 705437290AEB80C708A6D5471BDE5E3BF7E14EB0BE1273A8B56B3B536C6E36B1
+ F331BD84ED5BD8BEB214FFAF16CC569E96869D47163AF646B8CA14D7A21C9504
+ 41C57A9AF10C014857BE4673885B96A304BE3DDA75FBB95F28C96670184380DD
+ 7BC14D334CFFD361B034B7A0CE1A93AADD1442D84DED3C645DE9FDE73BF7874B
+ 4B47FCEBDEE163908CFD23337A3FED020204DD04FDFBFF7ACFEFA616159644AD
+ 0FE8FE945DED8EDD9A8E6E764960263E9FE55719F0831365FC7128869ABB01B5
+ AC6C2E27639620515E0EE11784938D43735F84EBEA552B6EF882C3AE1E28B16B
+ 63BF2C9E2D8C97DCFE1B3A4799A92BEE07B2DDDD49DC7AEA2214C11FE2A46062
+ 5F256808AECB93301C495D883A8DFD8052EB79F1CC796C2304CDE71E53849D63
+ 64902956F4D80281689CD5B14A80B02FE1945E6929C700D4DFBB3EDC23576209
+ B4CD6277F82E05B7822781F01773F059CCECD52A7AB1FA12AD5EAB0B48C6DCE0
+ 897D48987161AD9EC29791F3F1A6B3563EC1CCA3F5338577047000DA6CBAE95A
+ 02DECF407D7C08733FF06F55FCEA6ED71CB118D229533ECF1EF8456A21837D63
+ CAE4EF25462A88EB34BAD669BCB1CE24569F668C3C423EC8F886BBD099F1BE5E
+ 57E28F795A8DEAE36B9A10BA7F1C9F85DD8E7BF7CFA12097174F9A7AB79E80B6
+ 19DF6695E08A90E964F8934C268E21A52DF732E5CFBC2EA9C58F8F2EF77A452A
+ 0EFE85864C110358BEAE85BE75DDB80A7FC0B4D6BC316EA9EDBE98C6CFD14DBB
+ 83362DB5ECDB79EF69FA6540DDA0F7B3760E3AF17EC2EDEA196149D35824A5EE
+ 6120E19F33FF2B74901E1F4899A21C3FE3FA73A84AABB422F8E717656F29CDB7
+ 81E078CB978BB99DD6AC7C5A154EB988E2D66361AA6CD221D52AF6E22BCA5B91
+ 98CC8142EB6DEA15307CB1920C3FE2CAE661031316F3808909B5378BBFAE403B
+ F1F3C37E0AED591B881D7EBC6C00E5BBC1CB8428F263382DD51F95BCE57B8D09
+ FBA92BCB24CB2CF00F5DA1D4EE8DCF6A192C8F49A791F25D8AEBC39BAFF300C6
+ 576B96F23378B4D87619B234FDEA9F61AD5FD8F680525CBD94DC3919B2176161
+ 6C57D6FF33EAD5651F28DD891FDEC5352BBB20467D02D436BF32ADDCC4E36B48
+ 469C76B05D51CBBA0C06E37D49A90BB41AFCD467DD8DF99D42D0EF27715996B1
+ 42A50EAF4D60762DBF221577CDBFC7972E084E7F11B787005F5D98677268E7A5
+ 05EE075824312FF19394916EE77EC5B8891E2F92F8D8AF52BBE11357FCD3AD65
+ 642D6A1446D89599C6C793BFF2A2FC90E9A55B2C70529704961131C526A15B8F
+ 0FC5477786168899363EC6497972626F22FAC24FDD906FF9BDE5EC5FF9200C13
+ E15C373CE022C6781F432953E1A6C38BCBB50F4DB31F4CB8C7471CBBE9256BB9
+ D93E68F9B37153388E1980A0A6D6ACE1F4F48F9DD2A9012367D39CA5629B6E48
+ FEF2F281F4A7DBBC0BDBEA12F6702DD0DFBAAD520DFF935DA47BF5CBDABF609D
+ E54DFF0E7E08DFB564097C2764369A9D65C3F8EE00718A32C761614754F02EBE
+ 5455A8057182A52847A46F6C44C04FED4CCD45CE5243791A95A47138A1001A4D
+ D9EB325A0F0495CD3587C28618C279F73D153788C16ED35F7569F6F7F066A09E
+ ADE8C39A96D2116E9417AA6ADF3A1FFEA3AF657E1B4FA6FD4FAC6DF93797FC30
+ DBD724FAE76F89507C8F0D532934A9005A54ADFC9EFFA3405126F611390E9246
+ 50749BD4D5A91F5E894F2C9938E324E5290D647B6099EDD7BDB3922E6C3A3717
+ D93E2633D6760171A3F19C12730A39C2693D2CBFF35D36419DE99FF5031E97B1
+ C267CCCDAFD16C9D77DFF27A0550031E95007A2943A6FCC803A85C4D0FB5B1BE
+ 08574A7E7F7C3BF7711058D4633D1F65836CE043C6B60B7C473AEF9BBA04C56D
+ 957495A607C4D868764A0A9003D0BD480DECA7DB3C5B61EA7212DA33BCEED9B7
+ 0B938E0789F200C40549E5A92A4D5405139958C97FB3F3E815C9BEDDA41B6E61
+ 789F0BC998918DCEE10717DFB906B7B3BECCDB9D74BEB5394991E1F60D38635A
+ 0B8647573AD75D6962A3693E50E743626DB8E105CE661F397055FB40086EF109
+ 2C6903A5D5CCAE73E33F931903F443E34B196EE0FFB6ABDB2CFEE7912215FA91
+ 40C2022F93C99CE0B13E69C7CACB9D6B6EC4005620A4B8F58B3FCBED1FC9D786
+ 0338850F7B4D436CFA17173D740542BBFF2151086C847AF8886A4A70F2D35E1D
+ 851DE276E5A5DADDD975E46768075EC0C6CB0FEAD2A942DDF505BFF4CC02C8AC
+ 94CEC5E4D2B977C4D80F2A173E03601EAF9C46EB820D8725274D6A49F04B5C13
+ 0B44BA75FE23AB92EDD4185AE32D4BF06897826B9C3E7A1A84291184A1620B04
+ FD31EFE9C78B13137CA2A29E8ECD7202539D01706CEA6956F9167947A79D83FA
+ A0F0A05D8430DBD6F9CD5D49E1BB68D61060C10FFBB5F7A99C48744713C551DA
+ A8298A68FEAF087E26369D0FFC9AD45E18CEDAA293455A434E49FF970BB048E4
+ 3956362348C00705CEEE3176A194E468C3797ABC35C4E608EAAA158C822AA2D8
+ 0AE082420CDF8C8E1421B5A37BF576A07C4FDA36224BD8C4CE0BEFCA1C3FAC07
+ 4CF7E709E04E86AEB4F38FADAEDE7382A2E77C2F0F5B5280426B41F43B4FCEF6
+ C9596E86A6C3F430AEBE206B88E68B5181C9C94A9EC7F38A2A1A6F1E3CD9C8E6
+ 052861154FAF5874539CCCA7AA294D8751916EB7AB563FD113FB94CFAA241BBB
+ F3C2551E4FEF969746F413B3B076DF3C50FC4458D2FA07D01F33C44462E9AC51
+ 7A6164A8013D4799A0DE9F76E82A3153DBBB33B71B75DFE1D98D6CBD5FF3E03F
+ 4D69D3206A3C7292328DC959D768A658AE7C01313752B2EB8E
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMMI9
+ %!PS-AdobeFont-1.1: CMMI9 1.100
+ %%CreationDate: 1996 Jul 23 07:53:55
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.100) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMMI9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMMI9 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 11 /alpha put
+ dup 25 /pi put
+ dup 28 /tau put
+ dup 58 /period put
+ dup 59 /comma put
+ dup 66 /B put
+ dup 67 /C put
+ dup 68 /D put
+ dup 69 /E put
+ dup 70 /F put
+ dup 71 /G put
+ dup 75 /K put
+ dup 76 /L put
+ dup 78 /N put
+ dup 79 /O put
+ dup 83 /S put
+ dup 84 /T put
+ dup 88 /X put
+ dup 89 /Y put
+ dup 97 /a put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 105 /i put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 114 /r put
+ dup 115 /s put
+ dup 118 /v put
+ readonly def
+ /FontBBox{-29 -250 1075 750}readonly def
+ /UniqueID 5087384 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+ 9E394A533A081C36D6F5CA5FED4F9AC9ADE41E04F9FC52E758C9F45A92BED935
+ 86F9CFDB57732045913A6422AD4206418610C81D882EE493DE9523CC1BFE1505
+ DD1390B19BC1947A01B93BC668BE9B2A0E69A968554239B88C00AF9FBDF09CCD
+ 67D3B2094C11A04762FE8CC1E91D020A28B3C122D24BEAACF82313F4604F2FEF
+ 6E176D730A879BE45DD0D4996EF0247AEB1CA0AB08FF374D99F06D47B36F9554
+ FAD9A2D3CE451B7791C3709D8A1DDDEFBD840C1B42AB824D5A0DFF0E0F15B0B7
+ 22AEEB877FF489581DA6FA8DA64944555101EB16F7AB0B717E148B7B98D8DBFD
+ 730C52937E226545CF8DC3E07C5BA30739BAFCD0F2B44275A6D503F582C0FB4F
+ 449963D0AD2FAFDE33BA3D77BCA9D1DF878DDAFCA2E22CC4BACD542B282164C7
+ 97C2BDE318AF9D501CA21F6E662E7AAB75A5F24D2C182E598D175D44E88AB19A
+ E7CD59584F95B389183EE21B525BF52A3F23C0FE5383A5565A19361D716F508C
+ AAB78411CA5A4D27552CC1C435760D5A89D535B71C593E755C616661363308DA
+ A683F54ED0C23FB2C225A008392B0B719F66F11A946A090B7C00B662A3C69599
+ B4ECB0CC70C85C4BBBF207E0026F6C7A19F2ACFB7A60804FC98A4BFFD7BFFF2B
+ 9529E6D9D4238002BBC255BC62959D6F3381FE06E0621B879D5FE5B541D45A1E
+ 759A6E7DC32B1D1632368D09A97039DF255B6492B1B2B7E2C1434E8306ECA7D3
+ 5A79B6D614B4979F10988BC76ED53A5F45315CD7DA216221F842FD0F3E050DD2
+ BAC23C984D506D8F7D614BCB6B244F5F41321549BB0BD041FBF3053307168680
+ 3435E9C9457D31821224DBEA90BF144C1B129FF6D13D16BBF08C5CA122BD0150
+ 20B04790F75E6A4470B8EE23FFAC69E148D59FF6640BEFAD835D0760D27C3060
+ 4A6228F02DF60C5B9DD721AD12B7D12CA2ACA819C1A9D3878DFBFEB62FCBB986
+ B3DC014F95D026DAA392BB0371099FE0255680263BB871A5B19919F64C66B070
+ FD252C37E39FDD9FF129143A3583C9F6C6865906E719C885E6B8A2124AA11B8E
+ D746CD606BF422EA9530ADF5C83A1D1B73763BC67173378EA8DACEA422B7BA67
+ 2F81716638ED4EDE6E3A4C66BFC93FDA81F160C746FD0316799675EED7B7D5D6
+ 130B51AEED6B21CC05DA712F22B486894275EFA30B271A824C8A7C0831FB1312
+ 22C5E62DA8F677356C1809008E12ADC5EA123CE88387EE78853123B06D29E053
+ 558E1951FC3A6954825D956449AD760F356E9ED93CBB17F6E68218B5864B8900
+ D87CEE403E51B81DFA46FBAB946BBE0578F1CFEB928575D83348865F12AB1B9E
+ 72C1EA06FA6BDE77CD16D5561A3298733B58AFEFD0F1DDD3739A56D9553E6ECA
+ 40057D331F1A52440D1E99723E135CF1153FAA3C1FEC69DE9D31F3B5AAA0C29F
+ 911FF5D528BD0D0094A75E64B58FC0A5A0D2BA4F0B8283BE4850A4297C0F8AA1
+ FD31E1892681BC5657F0819C3F7A183E6EBC0004EAD210D841B5B34F6F914AF5
+ 39A19C42A84354683DDF04AC8738E2C022C0C56A483C6D70BC1B3D76218B8789
+ C667CB7188C23A7B11108461CFB1F0A08D2A00E7D518E464CB55CCB9F29FF00B
+ C9C2C684F9C1385983498AA065E12CF178DEFCEA17AD4FD779B2293F90FDA280
+ 8EDAE15EBCD781921B9E741622B0CF6C0398156A8183B54FCF61AFF9851CD8A4
+ 902DF72863672905EA62E124A50A54995067134D2D109655485449D380F610BE
+ EE2777CA6728BBF8EF6707CCAA5E62B9EAD14DFCCC1ADD3E58B88D1781FDEFB3
+ 1751A5B7AFC4431CE9F3AADAD318A84EA111619D3EA7C103961062F0F85761F6
+ FA6FA93EEDAC145B5993516C3ABBCED22AB1B6A9D6F89F475BC0354EA1160C18
+ 04491E11FE264093EB9A0F177D55B37E9CC0E4B5E7FB4D21A0CAB965117A6087
+ 74A58004FC5265AC22573548E5C7E286C7BDC99450F96FB1B5511D038F4A625B
+ 9113DF078B9AE0DC4A8279A42925D3C5A46103CF6EE1614A8BC86F9C99AD86D8
+ 2EFF660F335CA975F100ECABE0D61467FDE508B0FE3D8E0DBA561D6EC37B024D
+ DC98471CA0044AF0A15EC44A423B03F4B270EB0ED70858954929994EBA7B9696
+ 315FAF7EFCA77EFD9083B1ACBB215A1F8C364AA964F5D9852EEBD09759ED0D9A
+ F471595E34AC93B6A78606EF4099CF3E36F2B0B7C625C59B7A4BB764ABB18A85
+ E65668678B3ACBD01B76DCABDCA8DF181A4FA184140700153ADB0843F90EDE4A
+ 910E8031707099E6F6773F4A3B60A9F0D9ED9C46F0675498FF5602FBC9277EAB
+ F2E54F056734FF10A14DBE963B33B6BFD4DF41EAF16F76C5BA6E288508431626
+ 01B6BA662ED8C9ACB2B5D5F01E051F8BBD5D5415E92AC91E32D373DDDC8D75F9
+ 5EFF4771257E3E6103F576E10172BF0232EDFDF13CB93D980FD214484D3C111D
+ FF2F30329314E9F308B4815B350E47E42792F6971972CC09241585D068AFC1DA
+ 5C74230FF804FD761BFE4822297D8CCAEE11BC338B8A76FBECD99DCCBEC92338
+ BD1FB2DC2858423517087870C11553A658229EE2F20F65508788CA9F920D58E8
+ 236B743182336BADEAD25EA4F481AAD5F40882133D2639A5FD032600E1DE8676
+ 04712EDF748D2B8DC8849E9AD0952581BC6FBC994AF1722597EDD8A087E68C37
+ CEA73071287980D14E12995D5299FC0576299A1FB0DDB84CC896EAF49B42456E
+ 2859B9ADCAF11EE9E8F5F6B2922349A84C6B9101DDE3264C4F1BC81310C75AA7
+ CBB6CEE18D1897906771CB2516B46B1E1861F6BCDCEE48BF2D5A75BB10FB3F3D
+ B226DF878389A0A399B1584ED4FD7183C1220FACD6A5B3705BB401F57C1AB59A
+ 656A67662976DA8C901EC8AB8BFF2443647FDD13250BFAC0B68330C192BE9295
+ 25D23F7AB4659DEEA282E5AB9EA334643065DBCF8FD07F64E8D00B544343DC26
+ F4C4788DD79C8953DCD0705DF3E5DF3812E5ECAA7061AEEEB8AD93BB549CB852
+ AB7638C27F182E320D327292707C5DAF5309557E3F8CA09D712F9BE98F4DC446
+ F4D96D74BB5A36A94EEE10ED43F8E9CD3887C5BA1B969D1D9182763310A90A38
+ 67AA373449F3C152C1A22C1C11E26EF945B5920EA3BBEB5A31B1DB6858004EED
+ E4C4B44CC73EA2247DD9D5FB8448AD6616F6DF86D3E9F87F69D1538E1E81DD3F
+ DAE911B4FBA0585CD262737DD1AD355BF0113E4CDAF7E63850BE354725C3D742
+ 633C59BCD9F380B13A9C707C7DA5C7B91F8014B91A8878952CEFB7C418023004
+ 8391EE7B662BEA576AED1E48886223B16E4CEA8C1C58B07B0E6D7A7912CC0DF9
+ F8B63D406BF4D8CBCAB8FF01D26AA2C88B1AD744F6F74FCC6103C29F25F65847
+ D4C68821681452ACC569496ED902E9D1E323D5CC105B25B08DD73936218E7612
+ 4451A2B29DA7E5AF15CCC9EF54DEE4F46275B53CA26223D19603B90FEFDF50E8
+ A6A90C21A1557571BFC0C44808050EB9DB69E5703E6122533CA25ABE0DD005B4
+ 0D5F28330D151661DB3602236D442DD0ECAB8686A23B0BBEE4F5666E52DF567B
+ 9A8B54E9C321E47276FE3D2A81AEA3C487C653E4F06CC49434DC7B448B130DB7
+ 796AB1B391457E632316498F481CCF0CE087FD853CFC5D8A3D9BC9A496EA960F
+ 919FE73F4A9AAFB44EEF3AB90855815917FC27E6EAA4EE6E72466C8DD286CECA
+ B74DEF55350485BE398DBAA88E8919A22DDAC2F636ABAFC17A9BCE90404470BD
+ 854AEC145913F3B3003CC992995F8D318AD106431188FE9D6D58CAE40FADF750
+ 8118B1E1F4422067A468C304F70DBB21EF5F32DADEA314A719DA5F0CEA814174
+ DE0C1A2C468BB452C4FFDCFC4526F1AB1FB1CBA3D9E7CA145489580BA6826D90
+ 5DE5ED55D692768CE480AE3F604BCD170D02165AB875DE68A7C74424DD2B1DD6
+ B50BB7B2566DE76AF597737EDBE912432894A8FDF9FE0B268B7136705A5D4412
+ D69404A3AB2F18F0C210B88C3D1B0E7E0F34BE5C830C092FFA714B0B7B02FD64
+ 0926CC6F9FE194B1B5B462E41EFA5732E1144CB82598C53016AF31BA6581EB21
+ D4450206E307BAE7982040C4BACDD63818F3D7EB8B478CEFDCC96F00F0191451
+ 5C2CBCFDCE3E5CEEF0C39940EA4238B1A64C116992C9DE5B22518CBB06C56CE7
+ 6E9961197A5EB5745E8074DF543D598E50A0DB1FD649ECFFAEF8C5E116AFDA95
+ 429C5604B478EC2ACEDD9CCCE86B5B368260F41ED7A7BC1692F1FAA01CDBFFF0
+ 7F6EB458B6D3D45B3926F3FCDA8F4C9B7FB53DAA7515980E9F3AA0E5F3C67D70
+ 8B6BFD634607553DE064881F3E77D590BD3340183A1D3429922D324236ECBDD0
+ B12C1326BAE697B410F42B1546390ADC998680C3FFA0D4F859738B5311F436D9
+ 02D14F976F61E1ED07BFB897616FEE3B1F7650F925D9B9D414747CB708FBE4B7
+ DD41E06F7D1F94EC0F82892AC5AF2016ED7F62C1434E3751FFB54784AC56C891
+ C3AD8F31B3AB0B496E77A47725C4CAF419835FB3FA946C28E9B3952A6E85AFBB
+ 1D3FC2BA43F29623C75338D57BAA3BF2025B51130E34BAD52532833538C1377C
+ 093E7F647238A42DB0EDE6F5F63D824450A5BCD3CEC7C9B6A658D45FA8DACCD0
+ 741A93094D467C42E28F81F720B8929D553C1C4DF27CC5ECE22FB830A0C26813
+ F24612162CE7D17BD9059C9AACFA2AFBF482413CA0A576D9607CBE9CEF4E0E04
+ 0940FA3564A0B4725BFD2BAA5305A87B43EEBD41FE490D9C6319DAFE3DB75E1C
+ C50580A2DF2A1947463F95A383A10F61F1BE170599B3D8563F05E48CD90A918B
+ 9F4E7E69D96C53380DA8FBB05C07045A85963F3CA5D5CB5020FB137E4DF88FED
+ 5B55731847E99DF7A4E2B6BEDAEC206B4020EF23AE369B3BB3D533CAAC15FC3B
+ 872A47E2E9080663F3CF0774C055CF57C58BA9300B81023E835BF3910BAE6674
+ 69CC101AC3A03263981B044005DFE8F30C5C1A4C2823462EAC041FA0397747B5
+ C077FCC1176E2D26E4524AB9879BC7572E5FF8FC7CFCC092C9FA50EF20834781
+ 5CECC4790E73133D80A9B2EA8511223FE4E22A1FDB8C9F359A59ED6847FF6D42
+ 7408C47B79759D39BC4010071473C0F5A6A4D22ADC779B71AD428DDEFCFBBB75
+ F467F20CB61FBE100B5964EE1428DEAEEEB618FFFA25C1D6F17E11C15C3E85CF
+ 020AB28307B3E75B618AFCA9281FA5037FB021509CFB6BAAFE718AC536D77E7D
+ EAAC6AF802CAA9D6C51360F6FC8548429ECFA5E0F918D54383101157E84247CA
+ E9EACEC4610E31EC67A74F60AE1B9BEFBC847619179F6457C5A0D6EBDC15AC52
+ EB714F1D5677A72E0E18646132FA7FB7CBC17CAB6F85679CDEB32CAA1AF5C1BB
+ 54963947AF58647E9492DE43865551F89C600B8BB20768A5CF932B2D57133A0E
+ 775D8BF96AA3AE0D5C496DBF3853B1183CEDA6C0E6B791F9EDFFF756ACEC5542
+ B9C61D376607509461398A782C8A9A62264C89B30822CDF8E3D0597F52F827BF
+ D79B8B6F792DFEFB60BC41C671D544C916CFDFBD1D7548427EEFEF192B6B153D
+ 45A6E3ADCCE031668CD5A1D1EE8E9DBD372A3AC18FA137BB4B0F10AEEF3795E6
+ 1983B34F158E77AEC9028A241CF34A8AF7366D65F6C9F97852196A3A9BABFA45
+ A0F10C878BF004C5B119431293DD41EAFE1E197BED8C32E4E70818A7EB518D7B
+ 87392EC2ABE9911088F45DBC15DF40B802BF91999796016AE90A7F2DE96E937A
+ 92D4B1CE3E585C8AB06A43FF7DEC0A0A6F1DDDED14F1EF34BA78EDBC3B9B1CCD
+ 73CE1EBFBA3BC5F55B62CC6D831AF1A7CF3299FBE3FE37206D2822D20480B013
+ ED32EA67C9F803358ED7CE9F1C7C409712A617786066B3F98E3216AA2F8C8C81
+ 7A9D5ABFA6326606E2BD6544372136120B177CF09A9B7AD5E3EDC9A65B8385B1
+ A825C10924770C3935B63BFAF069E6920F25D629DD95FC9C49AFC4DE8468ABDE
+ A28749B209593AA1F56E82F85D817F63F2BF23BAD568980C669451BD15AF2E79
+ 95CEC6F942B90F7770F222396A31369459347A84E2A863CA44A562C094D5F8B7
+ 17871663A3B94CA7C96FEABC876029C348683416C9BBAE6335C23B612DE21696
+ 5B31E8E3492B4E2987F21CBB9A65797F8908179AE6C0B6C55FE30063633A9359
+ E817182029550B2998BA9E0528979C59409AD6FE9724CF90EA7BD75E9D675022
+ 5ED3B0C6F614FF75A56CAD47E4324908362EE6F626B2303377A1533E39547A08
+ DC072149670DF38588D3F2378A403C04B3B01A13918FC595D6CFEE58E2E67CEA
+ 94AC9CA3B030656B0FE13B9F7111BFC674E5CCD28A7178DA49C1E473CF4CB41C
+ 74AD82E08EE3902400EF6A17857AF8C2FE16E645242FD8E79E2C9E6E8F77CD9E
+ 4876284A656EBF9F476AD8409BDFB32F4CE9B3EA8AB078A116490ADF2223E8FF
+ 87979A36EAC2735A58DBF17B58A74550EFAD7CC68FE975FCED3C87E5C9EBC3F3
+ 4BD014D87F480D0CE94E5DB6039F9DA5E1D5B93DC1D9F0189C17BC9E1F089E08
+ D370AA922DF49B88DF82006A0D2351A2232DD4A3DE84910BD49CCD00D125E7D9
+ B6FFC6353679A3F3F1665B64158737E0DC08D2E7DAD7382FD2C707884D4D4DAA
+ EDBCC8E8F3C0434C2D26E517147A5B2020A1EA111F855C442BB9F883E4ACAECB
+ 08E9F163A87002A0CB27A3294CC6E753118C0B45B8534189C0C994AABAC923DD
+ 3541EC6881D58A533F5CDBBEAA8850C37335B35DE1A0DD8B1F9946ED9B8E7506
+ 4C64D00D9C498550B5FD5ED4AD5DA1A18ACB34DD284E8E5D519477BB1E77FF56
+ DD4537EE3EFDCC3880BEA9D6BA0F7DF3CC866817E58D6A2FBA68F3C6927C1544
+ 26495BC8B0B045E9B9BE21D12D4C8A2A0B97F1397942BCF1BCC1DC1C0A3B7EDB
+ 867043FE7205758CF460E66506C5C35FE7BEA436958FEBB1FCD559167C6ED75E
+ 0F99B9B6FBB411EC90011BDC258885E6B637E6C69753C49989B0D709B9C21CCC
+ 503E5DB32CA099C7552842EC7F59747E6564EE2CDC767659713B1AE1B9A3B1C2
+ 38C834C36A55461B2C3BA4AC2FCAF409AED4459E6E0FD12D51510FDF4E4176ED
+ B490BC49AD21D130E476A3DC73F05487DE553394D8E5B811423208CBFE13B922
+ 01E29489F119F7500DA64016992FF7B80916CDB4AB9535FF659848DF58408C09
+ 82FC843D53E4E637AB4876543B4C7C70F734820D0853A7CE1AB15AA5F3BAE146
+ 32896B89B6C1B438264219565C75E2F313F8CA987A5648CAF004A58E5E81E0AD
+ 0071CAD981649CABDE708C00D7E004D3DA6C1B03349B591796F4D62050F797B2
+ D9C2B22ACD1C72D80A82C90369117C9C0EF14D27C31B145DECA50C1CE598CEBD
+ AA0A1264BD0691F43B7EDF06100A2F83D75CF480F3B2EC0D0FA3EB1DBF75DFDB
+ 7CE596588C40738726096C03BDB30682EB1753FBB7844B734A7F7F9311BBC191
+ 2D3A78FAB011196844CEB4B4A83A5DF7761DC5A46D953A9F7A9B9EC84A0A6826
+ 754B0815A367B1323E1D6728C948C71AC143D651739957FB3CBDAB70D847C78F
+ E80AFDEFEB638FB3123FE69575A2AA15FB492A8C8926DDE888F7AEBD3463C13C
+ 600AB82EAD7CC3D013226E6303E63C107CA8A2518B43CD0B1B2472352D58FD00
+ 67A1B2A9FA4F6F9314A409DB50B35ECFEB03A488A3A2BEC4E8EC42ED67DEB86D
+ 77D9D5D228F5A07F85801A422B87CD9078AB8885292BE37D5D229707C7C6EC0D
+ 9063DCB4D99233B81F348A5EE26AF97E679789713114B378058D754A6E831568
+ DE20B12C81D426287387B9DE9059E00246FB1816C4651285E17FD262D0A6B26B
+ DF07317676275433DFA6FD982AF1F081E8560C67CDB17D501E659012A9F10273
+ 327597739EA7452BEFC02ECEFE8B83D0BEB559D8BA7286C5F7D97BEAF4D703F9
+ 8C054FDEF95E683BB5FDF40904D009AF07864A027612E19F1FC9784DA164ED5A
+ DC3ECA81A4ADFDB5E0A4D3FE62C6E84B9FC1C8052E620D47F09E21B56027F41F
+ 58BE183FEDAE292E7910A8216FAB2911E36E4BE11C9279D4E898DEBBBB076F00
+ 32C07F32A6092BC479B09E13C8F425A67742F35CBABD6242399E30CF24960E87
+ A622168A5C6236AD1054EA30807DA3C2EC69C3C7E0BE3ED4E088A62B6EE231FD
+ BDF28C8B216FB985159C9D143575E60C70893702B8D5F95026259423CF9B994F
+ F28E7F368D003B87A5507E07C94D06B170A9ED8914965375F54B9B3D8E358D47
+ 9E8879163D975A71CFB09AFAC3322009A4A5B95474927195803A8F6D91D493AC
+ 4ED912F937FACA792EA1EFF98F8C759919966A50B460A2995F5EFE0E35C82400
+ 711483A9919A160EC2BE0DBB31754366A3BDEE38DD43B99FB95AE393A14CA71E
+ CDDEB4420FC284D2A0898B7832CE7BA11786981DC7C502233BFD902D6A2A6AA1
+ DF3F57673DEB335DDDCD417122DD1D96828006D3DB12746D8D39A7E4BC102361
+ F91221949341DF3672E828D033142287349FA59C6BA41DFFC2867BC79D7F670C
+ 71CD9D27B498D48FBFA916B9ACEF4375B639BC3611DDA7F6DE301831ACF58AA8
+ 6DCE14E4A6D205F8A2EDDAE485191BF85D024E78F7323BD56697ACE17E17752B
+ F3806BD7A3B3CBC1355115850A3F551DFE2200ECF2511F1DC882490A1D2EA59B
+ 42E6140F2AD8612CD8CC2D9B2BBBEC83F8FD2A30801EE42EB51D9DA2BBEE6811
+ 547A63259A2B7F30B395489FE2A66CEB44D8E60E60FF0800E42663D222EE797D
+ 29C01CABF6363A611EBA1DF2D5744290E1A3953679E64CDAFA84FF6008BF9474
+ 558C92832A84AAC3DECAE5FF31297B2901A24992924930571F177D80FD785817
+ DEF5B1EFBBD50770AF10B8A8B54B487C808AB1B19DC64F29943D543F0DA400A1
+ 31E1BCAC5FBF18E56CD3777597AF6C91DCC2B8E7CE72206A9EDCE359F75CCFA1
+ 260B29B7B7229B411D69B17E041F3DB0FB0550C8C0A28B4A9037A0D4E0FF2790
+ 8A0E3B282224E8059FE1052BA934149901799F34C087EC58058EC3CEDB94A6E8
+ EADA535ABA599861FCF6EFD2A46F113B2D5FB16D5F1B2D4D3A687AAD3DF67357
+ 5CFC18F1A6F44E8B8F5B16088D6C8E254C7F2E76AC89FE94B0F921C374A0DD77
+ 02D38BE314142CE9ABDFA03E227A188BB5B48E50A4BE74BE199EBC7C52E940F3
+ 869CD3C8E93A3D4901AF6CDC3D06CE17969A4AB4F5105AC8EE3045941C0EBFC4
+ 8C73B16D14AEDA32B5B848562C3719CB5BD6E08D2774A198A8BD158C97448531
+ 05E919ADD8A0C75D07CE1D28148D6D3FA34301E8593532B160FC25C2B3924C1D
+ 3AB954448063A50BCD8C93ABF7619FCFF4E2AB0E4AEC6077C3DECAB8BE762A71
+ 613BB3DE114CDEC4322F5C87F02133EB8658CEDFCCC8EF12B1290ADD1DEAF53D
+ 9CBFF6937E2D6EEC1E7F1A7D7B02C0B2415CB31F34CA62872FB0E43DADAC6402
+ 2298EDC4FE241E2B812E2D649D4F7784E31D4DC351FBF700F5255D53D2EB0780
+ 637317D80B610E9100FF9E28D27E5FC7CB4538FF7FDC248A11ED3DCB0EF11F42
+ E9412A330C13BCD2C94352E6850971CB1BEBB3D47D9493F7449AF610D7A88E2E
+ 15A7752E7730F6DA09CF76475269672A0EEB5F35B3455FE503F6CF61D4EEF9A4
+ C7D4A7ED1D8D49259E6AB55802F318CAFA0FB52A7DAD0DF8CF72CD71755B434D
+ 9624AF560A60775ADF50DA1C1B7D1077F098EC70496AB6DEDDA7FCD125918075
+ 01450B7E21539F10C997D60EA804CDE9AD7A0A81167B8FB28B98757E8DA38747
+ 3D34DFBE6B10A012872E8970312F0229AD78253B03815E5E0ADA4B67CB68E476
+ 9A3E9C0B67EF575023039AB990290BD704B081EFBD58982ACC6F240103DA3BC6
+ 7D483DB14370B8CC8BDC6AF1698A0AE5945F1FB54B4E2F57BD3FBF86AD747F00
+ 86914A00132D21A7FEC5F2D5F535C2F0FB5D1E3F95A305379328CBEE5158A65D
+ EF61D442D1798360BAA683109067D48D553904300BE90483FB190118C8314818
+ 363216D716EA1646D67FE2D626C03B913A40A10CF14026C19FFB8486D9C34C81
+ BD44E0BC80FD41E716945DD5420BC54EBF00FB80D0AA46347E2A6B9DA2274058
+ C8DC5A661BC9B299C842BD1B72007F895F125449B8278ABDDCA879EB5CEBB1CF
+ 8B0F2AC82BA5EC58FC310F47EB4967D92EE4B8B10B52A70316D79BC41915D938
+ 2C03734CF59A32E10BDD8555A9816CDA7ADE21A14E60502C791EA5EB787E559F
+ 36741A976CCC24E4C558F2386EFF92B982A07851EDE68309835907112EDD287C
+ 8B2360EE1B126E16C49DD3AAB65BD208A425DA14203156891B4C6066EB71EA82
+ AF01EAAAECBE5B73802327AC53281A02E5B2E9D439734F54DE900F8351BC95F5
+ E1097A9DFBF65DA9D5DD81586DBC9424C63B71AF6DC4DDCF4F251F67C8F34FAD
+ 966B0E4127F2F5943B0455083A366810979F08FC3D74DA6C0F9656B01BF18231
+ 86B58868C0A39168A078496BFF015E4337B29995BAD7A2624C03AC975EBD1885
+ EF8FBF9E37FEB9C008FEF3BB309A31A220F4B5F6AFAADDAD5EEB174F08925360
+ B29FFA8A83F02DA9B7614AF15DAF4FCA8AACC17CF35E1FA8A929307739298ADB
+ 241F359A4330CE03BABC626A78DF59953E05A7F1E5ED8305339B9763CCAB0D9E
+ 7371AB869CD56418B5CF0AE4830135EA7C31BD234209D4F1374DBB9F722B199A
+ DA1E582D74DC9261C6A10EF5EB64A089324B2626D0584DA2AD4CACBEF1A3A66E
+ C355FC0CCBE91FA94250D0E6C31D4EB2CCCDB5DC51F659A665302FD1F3B5EEDC
+ 5D6B6F8D5DF061C47107E47E7CB9F2DD7527E93DC1E86882959F89566D55165C
+ 239DC352D5448EFA7F605B40F49E2302E42257B90E2CC5A3E7AB3A42FCF00AE6
+ B19820D1947586C39265AB9FB617D295CF141867449A0ABAB093F7985CE2EA4E
+ 14523F7E5FA0BC3E9EC815999B38B882A2DA598F69439B31BED1BA1DCF56D106
+ 6776737AE371BB83F11692F665252F6A4984BE873B5BB7C6080B770CB7DF388E
+ 07B524A3A470E181DBA18B08101112A954471D8E074DE4DD179CE4D8792A09DD
+ C1ED03EBE8933213602C7F8971866D335D41D6D79028D91928282CF9B298DF5F
+ 43FF78AA75D5A408ED436B4AD8C30C8332A77A0FA773419D79C7C3AEF9D96130
+ EBF1D6805C4D6BF679778F9E59C6962A544C47FB0DC775CD2C799E656D75E04E
+ 1590C5943957C12C8F9125A54A47C15788792F19B94F2BC95CF8F84D0295C357
+ FEA047F411658DF4378C3682B02EC8FB597D32741715B01E70AC5FEDCCBDA57D
+ 265541E4B16302C6BB4A1BBD62DDE6071A4903C5A1734CE2C190735511FDBE65
+ 80B592B22F2DD52799E6278D8724DE5599864F4A19E188AEC6987E9C7AB4E756
+ F58A4FBDC9DA4DF9895327E40A2E6220A3316D3F42A6568CAB8D1118
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR6
+ %!PS-AdobeFont-1.1: CMR6 1.0
+ %%CreationDate: 1991 Aug 20 16:39:02
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR6) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR6 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 53 /five put
+ dup 54 /six put
+ dup 55 /seven put
+ dup 56 /eight put
+ dup 57 /nine put
+ readonly def
+ /FontBBox{-20 -250 1193 750}readonly def
+ /UniqueID 5000789 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
+ 68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
+ 3645B82392D5CAE11A7CB49D7E2E82DCD485CBA17D1AFFF95F4224CF7ECEE45C
+ BFB7C8C77C22A01C345078D28D3ECBF804CDC2FE5025FA0D05CCC5EFC0C4F87E
+ CBED13DDDF8F34E404F471C6DD2E43331D73E89BBC71E7BF889F6293793FEF5A
+ C9DD3792F032E37A364C70914843F7AA314413D022AE3238730B420A7E9D0CF5
+ D0E24F501451F9CDECE10AF7E14FF15C4F12F3FCA47DD9CD3C7AEA8D1551017D
+ 23131C09ED104C052054520268A4FA3C6338BA6CF14C3DE3BAF2EA35296EE3D8
+ D6496277E11DFF6076FE64C8A8C3419FA774473D63223FFA41CBAE609C3D976B
+ 93DFB4079ADC7C4EF07303F93808DDA9F651F61BCCF79555059A44CBAF84A711
+ 6D98083CEF58230D54AD486C74C4A257FC703ACF918219D0A597A5F680B606E4
+ EF94ADF8BF91A5096A806DB64EC96636A98397D22A74932EB7346A9C4B5EE953
+ CB3C80AA634BFC28AA938C704BDA8DC4D13551CCFE2B2784BE8BF54502EBA9AF
+ D49B79237B9C56310550BC30E9108BB06EAC755D6AA4E688EFE2A0AAB17F20FE
+ 00CD0BFF1B9CB6BDA0FA3A29A3117388B6686657A150CE6421FD5D420F4F7FB5
+ B0DAA1BA19D638676E9CF159AC7325EF17B9F74E082BEF75E10A31C7011C0FFA
+ 99B797CE549B5C45238DD0FADD6B99D233AC69282DF0D91EA2DBD08CE0083904
+ A6D968D5AE3BD159D01BDFF42D16111BC0A517C66B43972080D9DD4F3B9AE7FB
+ 11B035CE715C1218B2D779761D8D7E9DEBE277531BD58F313EBD27E33BEF9DC5
+ 50C7821A8BBC3B9FDF899D7EAA0B94493B97AFEAC503EB5ED7A7AB65763C9AE4
+ 247C7C9B60444EFCA66AB8108DF1085D4F3D758CA672BC89FD250646AAFC9585
+ F7F8583BEF48D4A97DCEAABEB778FDFC2AC2789D6F4E1F0D9237205E6210893F
+ 77BC26458D7CB35B844DE20BC63A4057AEDA379413FB28B0C7C9A6AAC97CEB9D
+ 5F712AB7B25A697092C13D2042A04EA2FB36836E425CB0C97A9F30C6758FD6F5
+ 2E4A4AFF054C14C7507A4D90B76F44A240D2709F26814A24C405E59D5109948F
+ 87A93BFABAFE124C8D58EDF774E060F599847C6DA5E7349BBD7791505BA1AA41
+ C047310EA5BE5555F3908ABC457CF1E806AE9D9ED134577DA0DCAA9120B78425
+ 571445724A1D1BE4A49A88C16F64C3E73CE74A68CE9F413A0186BF50527E3378
+ 0BDC374D6775CD1A60D04A2936D6613D91023157B2277815D3EACBBD0F5EC49B
+ E10FB601A820B3FBFDE967AE881960711947F2C00DF744E3E29D6783D3F10D95
+ 0140A5B62877AA3A89794368D3866910416393C21EB2C8D48B36A3175ED20B45
+ D3389ECE0C0FD0B8219CC0FE131BCADF70835C1ECF5B3B45D25467E7035313D4
+ C9D0DA39FEA7F03DD763174C09C7F59D83D484E2C8151DB2A52428C5EA3A0649
+ 0AE2EA79DE5DC679CF978D3CE71BA42811E1DE2CADA4FD5618AAB6CA11976402
+ 57E5F5448863B4B0123088E8B1C22853F731BA9797197646BD327D873769B322
+ 12479C1813D4DEB5E9C7CFE623DC65CC67B381FD18537BD381FE8B0EB0E65407
+ D5C970329E61082E5BC69152FE91373CB3773CA987742586E6ED8C3016011724
+ E3F5266ACC8161A3E60B779F99C62483289B8F5FAB2A65A2B3EF026F50521673
+ 94318A800C2BADBE0F256E2B0B1BB9DB90996B17E39E5732E0932EE71D94AFA8
+ 6B5B0E5DAE5C3DE55A167544D9F315D7DA1DC1DE8B00E14164B941F136801A81
+ FDBA98CA9A96D881EE331F4B45FF396B54F7BDF32408863D62F39AABCB5B45DB
+ 5E1DFB417F9E79FA062244A32D847C0CE041A90A2375EA44ED95DFD6A7BE97A4
+ 69A896ACA2A8F3D1838AE43D8315F69DEA5DDFDB068CC94C5B0890474075E320
+ A5EDFB9E13A5060BD2C45E855F51AEF305CA576A9785324F98652B3340F6858C
+ 0F936ACC0280DEBC3084E0C3BEA789D8E5CF803B7D72F2E96AD34D947DAFC787
+ 806C936F0F9D8C7C8C7AF64EBB2EBAD3A97DC56A775279BFE6FE5A17209A5DD7
+ BA86A542B70E8AEEE4B53A6A7E389709156BD02E37648648A8C4E6366A255D4F
+ B6D33EB9F9A7E96AEFA0E9D68268C3A5A1A8CEC390A244C6CB8F210C608F51B7
+ 769E52259B2EFBF44DE98ADA262AF6132C829EDE71A0883DC517E14DC0312DB3
+ 10899A3662CF88797DDE4BE8507121E7EE58D83F0761A5F9DFE463637560BE31
+ EA5E7931C115F68D02EE832D60E974D5BB0F6025D28E24058E8E3CEE6B45156A
+ 70B4C4DB0C784FC5D4A95959C6C71C70233E3EBB696E813A2AE3CB830D6D07E7
+ 4F790752D9E8E6BD41C3EA514EFF1ACA2DD8D1111BE62A17120A17A6BF806CF0
+ 9E8FB18AFCBDBF67B15E4D45A3688E4A7108380FD6DE1491CDB932A7A8CBA1C1
+ 5D6770AEE80289FA6D6CF1460C151A78147DCFE4CF3A0A91BD7A14091CC7BA0B
+ 87F2E10493A80BC1E88A382088CA09806D7324018B3C832C984EAF9E801F08CB
+ AB1EABE8C8A6E14AF293B5776C6F75CCDEA7F25431F902A1247CF5A101BAA8AF
+ 846E3366916058BAD88CD99BE5369D7CC3B143CDC0E48DA50BD130997962726E
+ D50E227D7171951F42C60857453E6574084AFFC583423E902277E7F86BCC93F1
+ C7A8CE812F89B20FD8FBED0005CFE83303F61369405336DF24CC15745443E9AD
+ 8B49D9F29798735EF6892E925C254400DA606C657DE585088692AE468276EEC8
+ 4544F24C068ADBAE403BB7D643AB02A289097A3E87E464D1E2DB0E7885AE8B96
+ 44C08FC42CE55281BC901F194CF9FC24755DB18845D8FFE03F70A9A2D70C7097
+ 46B7CA5F10AAE098D99DFEC165BA71A67381F49D1F09BEEC2C0348A290C1A1EF
+ 298DC0B5931CEE66FB6836A3C7A09CA9D8B37043478539426F6269EAC21F5ED5
+ 59AB35645218CDE8946FD4468608D539E0AFC73812F41C6AB6508CB796B50483
+ C268C21A06BEA059D0EE331836A4E242E243439655BF0EEB18E45E6DF5BD75D3
+ 1B5E0112FF2080818146214D1A6F1CF66F2FAB4A4A975B99FE8282FB68D29032
+ EA0AA51B2810F66E0B72A8CEC2BAA30E88AEA22B3A30EE6C66A1DF6D4273EF6A
+ FA09EC1CA0BE4E156FBCD5029381E0368F42E466B2078639AE281C31F5B282C6
+ 6F621D7371113AB536EFC242766FAC1696D1902CC514E8444D8C977FEB555E82
+ 32C08EEEAF5A8820E4341EDCC6E98AB6F0EF6EA5F5CD18D1922FDD273C61ABA3
+ 1AE8EF4874E27B005CE5D1308EC915999E62E44638BCB9116A69A202392A8463
+ CD263C86FDB8E0CF5E25CAFFD32F824F9475232A27862EF2723B84B35DBB0627
+ 37579F19E21253433D9BF96F4C8841331190F924CBAE983DFB9728B0B896879B
+ DE3A0D087C1E16BC93D734757D327C31866CE6B15DD65EC169CC2B9C5FEEE538
+ E5B8FFBFD3BE85FDFDFCA09EA4491C539D79D4F7
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMBX9
+ %!PS-AdobeFont-1.1: CMBX9 1.0
+ %%CreationDate: 1991 Aug 20 16:36:25
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMBX9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Bold) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMBX9 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 37 /percent put
+ dup 39 /quoteright put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 45 /hyphen put
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 58 /colon put
+ dup 65 /A put
+ dup 66 /B put
+ dup 67 /C put
+ dup 68 /D put
+ dup 69 /E put
+ dup 70 /F put
+ dup 71 /G put
+ dup 72 /H put
+ dup 77 /M put
+ dup 79 /O put
+ dup 82 /R put
+ dup 83 /S put
+ dup 85 /U put
+ dup 96 /quoteleft put
+ dup 97 /a put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 105 /i put
+ dup 108 /l put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 120 /x put
+ dup 121 /y put
+ readonly def
+ /FontBBox{-58 -250 1195 750}readonly def
+ /UniqueID 5000767 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712
+ B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99
+ AEBE70DAAED49EA45AF94F081934AA47894A370D635D93B1823EC35EB8316AA1
+ 86031FCC99F57CB21E8400E54AA474B57112F0D4754A16BEC19117E9D3638986
+ 0777A71B135CC18E20E193AE6C2BCD89F4A27516DBD2BFE69FF9920D547796F9
+ 89E0825B6BD5F492B36AF136EA91B826501ADB1979A4204B2CB5C0517F2B9494
+ 9B2077F316D2B3DA256C99F7549E6BC4B04FE12072B09B4F5D482A126AE351F3
+ 97DB85F3026A793B51E6B28B54661FEB087F011F0BFF67272DD1E8825C180723
+ 22AE77CD6166D2605D0C0F131537417CB60086F08E7197AA916D590944BD801B
+ DEE8F29FFC516E11396CCB8395CFEC9262E22521882DC0316B0A129DBFA5FB57
+ E656890C2471675E0566FE461028FB05532E274E6DF77E7D320D09B2203BBB5A
+ 8B185B66B2F8A18A49589C4EE27596DD56260D0D759D2A12CEF7FC3010BA1B36
+ 85A2FD45129DC01A0C7570423305C25D957DFF9215102FFF35F428C823D549E5
+ 014E7F99ACA6C10B3C92805376D0F3F280D65852CEA54F5CC9DEF9EC1347824B
+ 0733D3341B34937316E77E952AD9366D3B2ED045165565F07CB636385E5A5911
+ 2620E185B105EF6C93890833054E05B6301137338A3F1D6AB2F9CF18910F1991
+ 46D29AC241478CC22252F00C264EAAF68C6D7FFD12256EAF52A5C68C3F621717
+ A771A7A61C60A975786E983FB96F8A141375207181B0830A94E5D19383AABD28
+ 5D1EDA2419EE704B30DB5B64FB2F06382136D3019E6EE10F7A3EC00CCDF64980
+ B68598FE1A396EC7225A2862E413B344B10CFC67C566CC6F6816BF8CE42CF3DD
+ 64F003A17932DD484BD93709D579C02C0185F75CE61D2C571E1CE26324922476
+ 819831C69741A40D806846B39BBCA16AEAB2072A3B274B216CA8DAF6E8F0F3AA
+ C3F6FD5018820572C44F00EDC1572E163EC58E82E86FCF8D95672DAC29CB01E5
+ 027174B92B9C31D4798E8B3857C83E435F95CDDE2765642C75624CD68792765F
+ 204EFCC517FBF0EF5C52542D91814C4A98DEBB8982121F05A5AAF63BB89E47FA
+ D9D46DC60DF7CE427BB2C5E2773E4D04387A8CB7FE265E071DAF4B94CBA6F81D
+ 7636BA6ED302CFCE94B6415F420444BC7B190FC70FA6FDA36B702068C92084AE
+ D4F72D3CE99EAE34E7111907C041D344F12A93C3CBA8A4D32ABDC3AA7C2E78E0
+ 332C33B3B6A3B2C6A4D105DA399C758C07BBC778C070F5859E6CAC73AF74D790
+ E210EA9B8399397CCD18AD50DCDF69B30536283171B645543EDF8D722061EDF7
+ CCE6605BBE568AA9C6E9EB11AB1AE631FFA290EFA104CDAFDC3E84D1F12B504A
+ 5831EBDA9D7CAE5ABBBA6FE6DEBC9C237763320E03A4F0E11D93F933935A901C
+ 12186E442E0C273BC32F609501D51CA82B0687C2F955CEC1DCD43DBC6028BB65
+ 7EA67CC5FD05705E9233798745F39A7AA07DE9A9B48D06D710B93968A2BB8239
+ 95560BB456C4B0326D9646D3117FD9B216805AF910A80BAC4994543032F50DC6
+ 8452798B49B0D49F8FEBBB07C680A959E3BF48AC51CF0AC2C827A1083FF7DE8B
+ 1C221508443A9000E5C725A16DCCB65E1C8D4A2F604DD80FD600D75A92B509DE
+ FECE9682F39234ADE2AA1FBFABBC56A6796383876605EDAD19EFB5F1A6B674D2
+ 082EEC9004BF10430C8A3578B4964E12CB521ED71551D98706A11BF8FE1BDB7C
+ 7CA5C29CF86C409BC26C45D2909FB9D082018DDE4DB80DD687E6892D1E8E4170
+ 1EB8A3A7ECD869C550F03C39918E7A63D287FE350AF31CDB547BE24B84B7BD0C
+ 0BCEA21F766107E96298CA30BBC45972160B9063E22A6DD7D44B0ED653379EE3
+ 78AFEBE835222D5D94215F2EFE2E3B601CFA18282CCFB3076048E05226F4919B
+ 6F05E3779F18BB64BB5F4D6A550A86E6089A0892DD30C935900A17EFA53802C0
+ BEFCAB0CB3C121764843DFF29FE061EE5F0C7B48556436B9A14B39CC46A161E1
+ C3EFFA8D51A0584F799F96835A5752C33AD41A8A22A46560F4960C9A727BF5DA
+ 29D9141A9875EAD4F530EBF3DBDD4AA2441E65768FD10926B3129B1414BB7679
+ 22CE45C77374678466DC84C8BF5B855F21D6007F236469BD160319D90EE59212
+ B22C443AF5CBA25D062E727FB0270BC0E11615DECC29EE233EEA90FA24CABB39
+ 049CB282E8F669208DE67BFC574831495A1A1F1F34F7A4ABC71F78224F28F2C7
+ D57A7AAE0F514BDC682FD571551B3DA2D8C816EB7C22815F8DCAB9562B6E5584
+ C4A96EEC1E70DB098BDF19400D654832BD33C09FCD069082A684D9843901127B
+ 9DD776CF3E672F7F426479143565C360F9354E61BB9EC875A6C895F9DD3714B4
+ 4C348C80768E5E4B4494EA6561FF21FFD4DACA4727927D6BEC66A4F3FC7912FA
+ D7CA381C3B696683321D01034B0A4F72599549A47ABE99C14BBBA54EDE02D65B
+ 1C2B54870991B30D581C90CF0B5729E8C830EA436294E0E4EA1E15995D18FC68
+ 0C2B239000D40A63E939A278841DF12C5F8A53359C7F42C4A99010CCFD6F24DF
+ C09EFEF673798AEE965C93D8DDF1D68F2F974F5709280C46E56A739BF568AF47
+ 8BD13FDF0537EC6098D07305B0CF85BA6C7AF69569C0E6962F195A4F7DD2D235
+ E257322DF66B801D84B362D9CF03F297A891FF1F63B92192B955840CE76462BE
+ 41201BC582288B0E97F501B957BCDFF3AE75E772081E21529783F24DE74A5913
+ 3450CE45ED5982356EB7BD8DE8B2350F8C6B3F3FF19AA022C9DFA3691F35841E
+ BFC8F95CBAB6838244D191E08FDA5B59F9636DA73FCC21D8C69D71F0A90FD37F
+ 22C4EBF4C0201DDDE6DEDB2315C6C0B77E95DCE331F891E713510DBD44E3D567
+ 05D80EE426CC8F11CB82CD853D01EB8CECB7A26331D295C56F8577468049672C
+ B892BC2159F59DA26BCF2854545E88EC029F716A6B6149C2651511E3EFF72BD9
+ F6863983B32284CDA7BF11B15E82281E433A2106289AAFE57EF825F8564E4F30
+ 8B6195E7CE50317F9C90A6900E5CFA8E1A89E4BCB4E276B23F54A28AD1136FD2
+ 87B95114A8CEDFA32232BB398EF11BA8416D21509768A971A16D81F350BB20E1
+ 6D9E79AB44884F66CF3F560D4F7DBD65B510B512A2334FA06E5F256CE3C7DC44
+ 1C468FB586BF4BCBB06ADBDF44A6351DC3A1B8E1104EC1AB0CCE3662CF55C607
+ 23F10546355A3D8C0ED0199FE8351075AB3137BAF26B0D6D42C4884B8A9C7635
+ A27CFAA33E2F872E2D880213D66FAD6F9C126435641B23FE232F9533125224A7
+ 9AD2038A87E5D3D51048A541EC5A005F093C5274C4388F3A566016DECAA12951
+ C07755A6998EB876F677E30B884E8A0ACEB22AE7EC486E261A5FBEE90F03BFEC
+ 2CBF13FC5BFBAA6582FD0439DABBF07BA5C2A02E9FA0DC901A3E46716C40BF9B
+ 1B489442286D5F6BC2D23971A556D230E3D4F139ADD9FDF5883549B07B74448C
+ 1138B1A24C067804D336CF7FE061FAC99CC0B0B776BEA1C783C80F68017845EE
+ 31168A6D4B75E924859D736409DE4B8F9CAC6BDB0766417EB9DA0D38B7DC25BB
+ 3E967EE588EF011CCDA1D8E5F9B3C16C7EF4B75F8A27C443A05678AF6411C54E
+ F1BCFAB9286453369F1F5D38384B4396B25E4E8C79206AE5F707F5C0D4FDB190
+ 77757AE0E136D645FE68F0C66F4510100838CE944E668364E692633CEAF1EB7C
+ 2234DC91DEC33E3BB985013816047C5674FDFB280084A4B906EC8BC1D8F3A43A
+ AC40B407EF24932F93AC63F876BA65F81225A59F898DA0FAC28F9AEA42B5DCB3
+ 8A941F3CDBB4F35F7D0B4B0505A4C249E30FC23312FC2E102FEBB8E1B90ED181
+ 4F6EA0DEFAC08654B1056376E1961A896585CCE1BA60B99F2FEC1B3F756B9391
+ 0658D60C08CCEFBBB05FC7869C5D18C2995F450AD0AD97727350827C437CBACC
+ 30FE029223678F5E365F38C5CEC22B080E69D4C6DF39E60177A69B1E07960C9B
+ AF6B65D96565151D8C2F230C0CDCF25E1D81FB44963B994F05743547CFCDC620
+ EF3DB0F917D397DBF989B8C98E390CAF79AF7CE1D84A118740D6C271DE140B76
+ 7DB63E951B05D6A198C00C16CBCEB7841F647CBC1C43F12C7B87CC7EB4FE0796
+ 94702C63B0E12AE3E8409378594C52F489755A67F2B7CBBF0CAFF85B5E67A57A
+ A85F49A8C843F0B4D243A8B1C70EDF62B394015C193DD7CF33E57E07CBB1B557
+ EE4AA88885E58CE287816C2D4AB1C08ECED092D1062ABE62BFB1E316487E6EEC
+ EEC1EFFDD28C948784B6C526FF77576A067C4B743D698E54FB4319575060337B
+ B9C39391FF9994ECC1351DC7FB3065D9986956D50EDAE850783F999E87C9E754
+ 1678DB47064E268FBE78EF2C211B0114F9B237A758C145C5DA7E47B6CE286AB9
+ 9A9C91D15C41869C0F779E2F538572E947B58ACDDED670D956C1E592FB6DA0AA
+ 32604B90856A46C18B75A503D1AB57000659D9A9D9C34738D79FB634502C95F4
+ 28DBCE9CE9EB5044D79F32E08322F8CB92428CDEACADC8387C3510DC38DED867
+ ED45FC5F3AEF2A8E90BC7916784FD8FE23A93B42EA8E64DDA2FBCB7DC05E59C0
+ 8DA5B7DE9361A171426B11B26F52401C9A186890E4F659A46356E5730AFEE3F6
+ 09693543C93A960B59B435ABD1580D03EB513BC54B6B978EEFA7EE043105FC06
+ E4696200FC4C8505D71BEEAA84B2EBA4A0527AE231E92CDFB6681109D761DB97
+ 3A62CAA23DC482622C4A9979D041D5F60D5C7689CC36E48DCD0E346DBEECA7F8
+ DA2E7D2BCF605029B8935864CE7FF8A4AA573EE4A5762F7C53D91FD7DEFD77FA
+ 636F2E0287D48493F4C87117BEF7288919D7895F21CF43A683214E0DF32F3B11
+ 21C3AB31359B933F467D12F009B5124A08C2E7B5BAA4DA0C8E75CCD07C03380F
+ 759B6358B6619B0686C1F420525ACBAD411BC5A923B23C7BFFFE3608653F49EC
+ 4A7317343DA7C6C1313F70EA992E65186357377FF81CFE10EA4A13FC4EA69130
+ DD2E774E7EDE819059254F91A487D498D16129749D3103A85047AE74ECFC913B
+ 74E3348EF3DEEAC97B24F67076D61DCC2D0F4371A3643FA5F6641003595B23E6
+ 4BFDB0751D004C330590F98F43F0A0371D99F180D54F08531E3E48FE65224E08
+ EC55BCF0A597910AAE1D1BFD8096C831D06D5CBFFEAD2AE8D112B29592001DCB
+ 644ACF6712ACA58CC13DEBD7FC5333CF62FF8F3250ACECCB752CB1E403260C40
+ ABE9241CECEFC9223AD218888FDCB1C4CB95721ED15B8419A4977713A7003CB4
+ 3886BE9307957F2441CFC2773CF1855CBBB6DDDAD3CF090126D44EA255C940A2
+ 5E0617E01D623EC98DD4BF2EDBEEFAFF222007E5F1BB94696A891388A027FCA3
+ 482A4FCCC10D69DDA7F5AEE93EFB4B31EA2B71C7BB6A81BDD5DA486AD7FDAB6F
+ C7F552F73A6A7FF82357F7513193AD03BF9484C62924CC1EB8E76E065A395D70
+ 49C5CE7AA7F999C5A83D3E1531F8AB4D3223B150F60053F582DE523A711EFA9B
+ 84B7AA31606D6F44424C72ED4AF1AE09380FAD292FDE2867BBEF4D3667614FE1
+ 986449D4929C7B31B661216083A159521A6714CC9FC2C8A4ADBF226E1FF9906D
+ 74787A4B021C3FD2AD4C0260A7660DB7781F3214DA5D4EEA90D7CC8C9E36ACFC
+ E9387A62161EF8C109DC5A8AEC78B4D5310269560C38DF43C54E84C04F90E6BB
+ 8970686A31CE0F0973ED37A417DBD57D9199F10013719EA394163FBD0A8B373E
+ 5E0FEBB77930B7AB0CF12BC4B1B951B61693AC2E80BD1E3B1D28FE0370CBED0B
+ D9C6AA05C873126C17AE6E5ACD5268CDEF3B71D330034E29102BC9385D3D9BD4
+ 82637185C50C87CB98D48FAA338E334786E91510A7A2C97A8F092D9264B73738
+ 5263E5275C4FB82BA38FEB20518C22653CC9795A7B1FDE0762E290682D221E96
+ 0AE981C62C3868402BD1FB22A17761E6E332EC22A90157B405448D8C40947606
+ 96C173BFC97E3F4405F531F6897A1F27E4D1F42B400106C18116C75528DC2830
+ D27E51DB42F013A8D10B94D3CCA312666BD0CD47D21179587D3137E17CF95738
+ DCEE48AF9FC2656D586E6C82F5299D24D0C4101C394030FBB80C54DB352E9D4A
+ 400EE90F4B9D6202B5B66A1A27EFBD80D87D90A10AD01DF659237C19C66598E8
+ AF00C2C8EC25BDCCCADD8EFDCBEE9587DF9B647B3BE9D7B327F7E90F4580DDA3
+ 03191B64E5C8D3E12F8FEE57BEE8619DEABB37A6433166A09843B3EFD0C07228
+ A9A5079C4468DD537C2A18DA4B0548738D91948D5FD557C64A57C8F6AA993EF9
+ AD9375A3115D04DE6BFD7E6E67FFD9CDEC78D8854233B370F6EDCDCFA31286C9
+ 4F32E9CF1DB79A5AF9A70F4587484171849FEC67A0D50A74B40FAC14F0A1E686
+ 5D2B02AC9616A128DE4FCC8DB26F331547D6138288627382CEF6A61210D6866D
+ DE07E93D00321A8279C91C9C54443ECE6349F31F8C9F602DD316629E3B83C454
+ E01D5034808B178850DA54F11175FD1713423A77F0ED488BC9B21755DA1BF50F
+ 1B2C2906D710FAED16D061741C7844CF2FC72118CE343B60D06C1D17EDF4C60D
+ F0AC75DB3CDFCEA238A845336EE42C8A2085F549890102E9222166DE22AC4137
+ 211ADB7C591EDEFFDA853A01F82D62013AD5A661477B96D0263CC40C44AB8380
+ 280A4F3F19BC0B57225338A01E87DD20D7A3DA5E81320A0F52B03EE2B19FD75E
+ 93B0EAB1BEEF1237F4EE8757F131E5311804AAFC9BC61C337A341393FF3EA6DE
+ 74FFC7B475475464A187B1428CA52EB9658BC4430B751777182BA35FA901E6C4
+ E487CB1C13C08301ECCBE4DF57F73DED6A40B207B56678711D4E99A61D30DDA8
+ F6E10915F118FDCF4CA90DB9AE009B956A28DF79FA28FBC682DED0DC9148F8D8
+ 0208BE9693FF4CBA1E99AD5A50574FF79CED9BC99BA3208AB79E9015ABB29B02
+ 54565CD1E93CEC08D516FBD5AC53CBB685DBD2A5B9440C55142357B87FDE0037
+ 70E9D253937DFA74FBEF22E2240B306EC3FF7FABC73B80D671E1644845C25645
+ AA83813D7D49B847700AD5E8D281DD4A67D1D2D57CF068A22DA675420B0E7E26
+ AF0DD75C2770BB253AC2B62BCBA93E8C4FEA7FD277FD47E60659D7F2E99250F5
+ 6DCE806EECDE584B4FA1DF3378020BEA1E41E4745EA2D7994C192C862B361F44
+ D1714E79718C7E5CBF29E73E1CDD7103084A98851EEA3A7CBDA3BE3308E1633A
+ 1BF6616BDAA2309B1B83635BCECF057937C910184FC393707D16DE66C1712912
+ E651C42DACC8E9576FED98F31878EF04F9DE4EFA80C40428352934D420270B4A
+ 409641CE66052C779966A725437D1FD2BC083294B3D3743C1A8BD238BF8E6E64
+ 1B223B09FBA196E0979E2D4A3F28EDDD7F4631B39721755038AF882B78AC5098
+ B8CA455190E2DC3E658D597F853001A2B310FCEC1CB7C0DC380604B1BB41C466
+ 2B643044BCCFB653227CB54B160E54B489CC492B57125E8BEF6A3D7724B2A704
+ 1C3B5A79303DC281FB625892945045F51CA2BED4642CC8E50C687218C65EFFF7
+ 4F183E931A7E39462EA2867568796697C23FAF08366AB6A7D0117EAD069D2F0D
+ DA66CC0359C263AD0264B79F47A00F7B06AFA8B3BDC3C4F87FF85A5B7D387C2B
+ 6F4A797633B0F11172A4EB05A387EDA585630BD89AC4ED569A42C02DDD6D01F3
+ C413EC0A3586C1DD8942B5B010D367278F8A84835780D3AE5258410F1AB3F74A
+ 87F0D5200B40FC59977F89CEFDE24F39ED01564120CFEC47C7903876F2D1C074
+ 3C027462B0350F8194FF7BA82371F66900A5F34E80F1D631643158677533678F
+ A1D0BACE3B28D5CB7504606715C70EC3A79E846FB793CEC6B8460A1105865666
+ 2C76BB341D9E71181CBC8C452E4BB319669A7249AD6CD8F640E4884799A6D5A4
+ 52342F525F62063AED1A2F8C7D7A5AD9D64E6399DB2CAE5EA3581D60384DCF50
+ BA818926195300407E7F50A606DC6BF8ABC1B7DE8DDA6ACCEE5F2FDB684279BA
+ 551CAB0A953388248C3F4CE6AD0D7E66E65C8A2C3C710E915C169967B0FA1692
+ 0AF15D89A1A0DDE6FB0FC82B91D8C371F940FF9EF57BC2964A7ADC157377F826
+ A342B4F337BA316AA59CF832A4A741349AA1C2FC2C6A3FA7A2CF67BF9B1D1AB2
+ 4B2BFBD93C753FC187CA348C0CD28AEB355DFA293526536E74270FC128788066
+ EE62BCF883BD49B15686D94D83371418C6C6F888F30F17EB6AC6F0BBB27C51F3
+ 048B7C084D17286752541B1C1FE3BBCB55F84301A5342A1E433BD3409C8FEDF6
+ DA59EBA2780357F89EEDAA728A708EB6C09E62BE9FE432E98FB62656D9FCEA6C
+ E08A4AE7E94BED4B10CAF82EA87E6872B916676FEEE370EFFC1282D7CCC44E9A
+ D998BBA5365356E87ECEC080F31F2E837B477E800C04F5EBBF2BD2CE4F8A036E
+ 876A73D45710D2D4B749177C26CB11E9D4BF8A7E7AD23338EF6703573D0D841A
+ A14CE58456F4C59A33FA5D64ECE1DEA60DDE18E9FA32FCD51813BAEDA8EE2663
+ C46B252B82CAA6458271C4E1DF9DF63A6283149ABC1B905832F3E554A7D156DE
+ 100DDB9EBA9ECA7852A43C5D9FD384567A1D4032B5B6026C6C1951EB6CEC295B
+ D82F68B974577361A6AF8D557F78126F257F553FE7957AA15DB66D78A77A7464
+ D17EC6CD8EAF3C99267D671E68B10A2B3323D2EBA11EEAA8DC646A6354841757
+ 3C745A2517071A031A14E493D4B94400511FC75343A14448FD2B7EA9A5365D14
+ 46A8012D1AE4DD9D787E624625FD521585ABB86C9E1759C9D4165C899314EC9D
+ 8FF2FD68624512EFAA78D23BC4708A788B3668F3C79247735BA5B2D61070C6D5
+ E0B59B377BEE080B1FABDFC874A5D0ABE4797A7FD377C31CDA7E0BC7FD6B7A3E
+ FB16157778E1FD148B14A4153BA785B087D0E6C62856FEFC250D0704A4A58679
+ 7E3151711D5AE6BEF40AAB2AA2F3BF31F0620D1D642C35ECEC54C43BB79FDB28
+ 1C895F84D05B69227D899F1BC9BC3E61E2EFA07E49AF67E0D4C66B6BD7AA3566
+ 0D77E337CB3B743E6FE8E263B936A59D98BD0B7CB5E09DF3C0EF8F11E95CF74A
+ BB7B6B55466F5178458C27356C0F17B4D87A23400F9EFDE6597CB3704A156280
+ 75472869EC7AE519A2A24D249DE00E6241C7AB9E8E9F9BBC96AD7941AE26B10D
+ 9CA008A06BB359477E57635AD6D36E76F9F712B0DA151D5A178963BD6DF513AE
+ F5F4D0F76BB40C7DEA199C6ACA71DFD91C3F6014D38973ABF329A81AF04BCBE1
+ C137A3357C8444F319CF18E9EA7B6C374703286D3FDC457F996E2877368FBED3
+ F2EB7DCB8EDC988782CE08DD18FD59DAC7FB2077D0E169E23915D1B9730957C2
+ 0FDCA959C04BB7F186D1003BC428DAD00F959AF4A34E5287B1CA8424EDDAF614
+ 5881046F5D3AEF967EFF86462CC29EB2DE737EA6FE090447762CEDDF059123DA
+ B6FD24841A9FF8A46BAB5980FD6FA79DFD353637089AC7EA2E75FB72DDAB4C03
+ 00E9492650A75D2AF840C637345CC61CF9FCB1FFFACFBDCB3CA955845D7AAED0
+ 1D4F28A73855B949D98A626F52928DE7471E202F31E041E35B130245FDA9849F
+ E5463B41850B04E945DB85E818DAE2676D25159F571E6D8DE4735A3F8496EC6A
+ 2B4EFFBC90F4165552A7A325F43360C0BDBB00463281087171755DD6E78973D0
+ B818BBEB3668081DDA89A90A19CB2A13E5CEFF4C70885202DEDEE3FDBD931898
+ 0CF3BBAD2E1F3F195D7FF7641B009CC50F2BB75CC8EA8AD421428E665175E07D
+ 6FD9F3300DD800481F8AD83642EDF35B78F46B4C9A4EC7E315E7E3B6E24BA05D
+ 388324D167B429AF4E4619159281BF08D1D1C099
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMTI9
+ %!PS-AdobeFont-1.1: CMTI9 1.0
+ %%CreationDate: 1991 Aug 18 21:08:07
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMTI9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.04 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMTI9 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 12 /fi put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 45 /hyphen put
+ dup 65 /A put
+ dup 67 /C put
+ dup 68 /D put
+ dup 70 /F put
+ dup 71 /G put
+ dup 76 /L put
+ dup 78 /N put
+ dup 80 /P put
+ dup 83 /S put
+ dup 84 /T put
+ dup 86 /V put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 106 /j put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 119 /w put
+ dup 120 /x put
+ dup 121 /y put
+ dup 122 /z put
+ readonly def
+ /FontBBox{-35 -250 1148 750}readonly def
+ /UniqueID 5000827 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+ 3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+ 532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+ B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+ 986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+ D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+ 9E3948FFB3DF7BFF10C9BDA4EFE5F68A8CB1526990D1357AE6D2F7C2D2EF8496
+ 4E47B39E6712EB8908A3265E5FAB40567E866C244814449F1E993AAB422C3F1D
+ DFA8C7118584F2E5197FD4BFA3A8AE9E953C6CD4672C0FF51E41C3A919749C1A
+ F06650DF4C5E17492164BDBCDF22609A74BFA7F69960A64B9F949FFC2A807458
+ 8579366C4F41BDE1FDFBCC4845FA19BBB6963D65EE8532549274BAEBDFF24FA6
+ 03235D1BE37C06B1938AF369DA75BF38DDBC87A1FF445EAA16E1895ABE9506B9
+ 211955753E447865D33CEF007391D2666A046277A30A49804FFCED3FEA5EB2C3
+ E52EE14A9F75241EA10C91974CDA6236EB840FD44D6DDE4D9B3266C3B99BD38B
+ D835BCA8CB819C073480FB972CC028D218F6A1D344CE1B63F4FBF2C826F412E1
+ 6E0B05A26125865A14FD7B7030B478BB8BC6BC395335C3BA940E1C348267F4F9
+ 0AF97BBEE253511940F1048E175D3569F7D05A28851B6F50765FEB6C9654FEDC
+ 1BF52F535DB5BB90C1BD5D2EBF75E0AEBE82B20507F3C28A03746781018D4EB2
+ 298E4F2C27ACF73FA73EBE43F014BB575AAD516C0407B29E1653375135ECB74D
+ C91372F06FA8EF37C31AF3FA48AE65318EAA6C34830A5377ABB2DFA5DA53A574
+ 433484BA1466709A4B186761655C8E482833B697673E847C691079E7F1DCB8D6
+ 1AD91101D757B83E2090337D525AEECB028FB3C9F6A6E6AD2F322CFDC5A833E6
+ 1CE4EDBF41FD34FD61630581D222F854A76C2EA9FD72796A7C9CC1F6C2FCCD16
+ E95CA05826A4ECFADA6A5FB83C41A7131E52BA6585DD6DD78515D8F7327DFC6F
+ 9404F89461B62C1F761F3A49C9625F96ECEACA99D6BF9437CD47A36835A8E302
+ B15B0405C7CD5F0143E9AD7D987EDD03F6DF9ED18BDAEDB735C81A8DCD1F6F5C
+ E02A0CE1C33CD31951510541EBB1412C2FFDC33327859D435DDA94FEB4ACA179
+ 9DD130690003B631D6F9A549852443935D13BEB163D7A04C9394D9CEC70519FB
+ 2414B9A5E7086AA565639BAF8A87B55BE0E9D6157CFC8C86AFADA1D6FBD023C1
+ D8DB5A3C7AA5687E55D676EC28641A24923F8FECBF448DF638ACAE59143A85F6
+ B4D7F5B0B4DA3444C11EEA63EBFCB373C2902D58CB6D1C3EEFD863259B76B1A1
+ 070265CFD8328938FBF5F445A6FF0E62B909DD6FDB601B67AFB675C4A0A766C1
+ BF5420BD805F0C0CDDD6308FD82855FEB99EDE2F8F70C3D3DFD15A8DE1098DF6
+ BD1ED4DAFCB77150E49788E1E72D4DB74B8FB3E627DFF3BB9151285B171DCFF4
+ 23A075AC186C77ADEE0F17F2C434A2C7E68E8C934B900045159F6EF0BC40EC03
+ AD826DA22238B213803C84A7C529F91AF02626725BB03EE486F8F64D265D2B7C
+ CDB4D6A6FC60B1D5BADD75DF74DEA1C151832B6B2DAD8D564893B08F5F2CD959
+ FDF23E86B4CD0B4115DC47115422E29138E30AE7DDBB75B3B0079281729AC97C
+ CD615B6573ACADF29968F258C034D399F0FE0A32D9592FB5EF7A1D79AF3635AD
+ 1F21202937E674D0F0D17A1FD5FFD0E8F65A82E7AD1648C13722A976CDAB127A
+ 818133503D9FE5C385AF78FAFE4B8C5B258BDF74CA32CA87C91CD16C59EFE606
+ E126C6DB8A7879E0B4E4B504D5B72AD063D4D10EEF8151E4010A5BB813A144BE
+ 81B5C6A9EDBB8ACBC38970C628C2AE36049213B4E53B369B9AEDF7B2C5A0873B
+ FD6688CE0C235035DC3DFCE16A48A5CF2DD88E40CD7769F01B1252348EFEAA8D
+ 4A14E80ABA45F4DB6B3FC98C2A626BECAFED66147D28FC1999331F57BAD1350C
+ 23096CA3EA60D6032FECFD402EAB3E8A4B47BA2330FBDF7D7385CD621401F518
+ 3E2BB3E3094238D6D4F199B70458F9D842645C0E87A01743E70BD9E3CA03EAC6
+ A90F1CD1E8E4DCF89792661F59BF4B54AA903139898F65EE7F09486822BDA2D8
+ 7E95CDF836BF06A8647582151AEA4243DBF12D4DDF0163C6566811FD2EE746EA
+ C17D9D5082649CAD0E1D651930F68EDE2D842C6B83143A3EE207A84192F02F7F
+ F92BC999B5D3890C407FAB85598F5EC1724A081E7FE5AC5FE4E058E94DA5DC55
+ CA6EF7D6A634795E4A4964AC2CDCE29785C6623E9E82393ED16E38BF99284364
+ 0A61B20DBB875B4411445178508EA123CF9CFC134B111174719C8F87791844A8
+ BA9D24BAD6391492F31C00EF22B000D9944C6BD378D96F4D1D09DB84EE627FD6
+ 9747B895C0761402A5B5BA72FA7B0CF6ECAD06EEE3B8A334BB5F4F438379A61E
+ 883124DB104FEC778BC537F8EC7D85D3126A1A7C4AF39A50442EF0633D1F6445
+ A21F3C7AB61FCFEB29E0A041FAC712103843E8E515AEDB82F428402AB1835B38
+ A60CC0E730C98816ED70F789629B2B1BB12CFA1B7CDAAA60C9D037A05EFBC0F5
+ 9A1ACE8008B792467C04E784B6D098139068E57DC14560C5B14522F405332C8F
+ 4270FA118B0CC98F23FC70E22D02E5EF6681DF62F3609DFC89FD7607D6B308C8
+ E1C620249E484F3FE065F101053718354ED9FF64C0A2D86789C9016207BC9554
+ C55B78C8636C238FA4AB1A69D7779C93D3051E7FED8EFE491F7B412A1CE48F97
+ 2119174629529D064ECD8605DB8EFB72085D78B7AE9BCB6991F096FD05D3755E
+ 5605FA2ECF92F52F57A60C7B57D220E6EFA264F68EA147BDD89F16840FF35058
+ EE68BC34391BCFAA0C892B428716E2D1ED9E5FE005E77B417C08999EB2DEEAFD
+ 2FF110B35B32F41C35C4D74A18FEF796BE11E4E1B3EB50EEAADE054CDEAB919F
+ 2FF1964A1E785AFDAE8669A44EB16FB294E891433E25C906FBF0220085AED492
+ 14DB2E7258BDF6FA95F1086EA29F9923E58613F948EDE0E0FB218DC77A5B9DD1
+ 68FCC5BB1123A18FBEC3FA70D15607EF44579E7C145A811DA48F8945B5FEE69E
+ 1C22A7704C1CE388843FE51A4DC5774CF81CCF3EEA6486D21CD1193ECFB1AB8B
+ C6EE9A96F4C8E19C6D23D836DF85CCA2EB7C91F8AEE8859009DA4C27A191BC24
+ 41BA32C96DC6A2DA3BB2E2A5B8530125B7100B345259E84275BB64D33A28CAFC
+ 7BDFAD20A05330B9A850797F05C3800AC105805CA9FD3AC41487C963B25158B2
+ A35D63358E0F3F5D2FAAC4D3C2F1F3693F8B3E3FC855DC394395F9C43AC626FF
+ 80AB2908A7FB36954151048D8FD1E4493266B6A19798DE0D7587FC7C8B8A40BC
+ FA11BE81EA617DB4D3077ADA5850ADB113058EAFA79F4711BD90146E427235A8
+ 44924F1EF5A62768457E9E81AE952442CC12ABBCF41BAD47B92365CF8F8EBD5E
+ 75A73B5BEC411AF6D594505466C950362B9759CA51E123564C19084775ACEE63
+ 9D1C9D915FE04DCD222A2BA391A9B096F748F51AC9DD081796D76CF78E0F7029
+ 81B74DF7F23DF790B1259CF19B80495A0D2F739081E4F0E9306C9B8FFDE97FF1
+ CAF2E5D49C586E32EB303712F32D905506E75252FCDD68E84C71BF0570D8EE09
+ 34B0CEAE4EF98AF3A0D02581E7111A123535B1CAB2610F8052CEA991979D8A58
+ 6B0B7AA0A364388329333CC6A810DCCBE652CD339AA52512CAD45768F2F1AF59
+ 07E03ED533539F84CA75BC0C0DE2C127B39E13A7BDF82FE732470FA02BE8B782
+ 834A1679020348D2564F4A4869590AEF817D11EE6D0D7BA471A334A168C5EFC6
+ FC43713889519BF48B06283DBD142368BC32C914DD4D0184147F6D1A4E797A07
+ 61E1104088C93818E9AA2FCB72112C3818F47D6C15AAC46213872EF215EB9F68
+ 6B201348DAA334F4061F2A3DB0927387BFFA98B9DED4D6EBCCFB5C284CBC9A97
+ 31B536023D2456B2B37EF5BECDC0F73595720E3F1C9D5E085295D4DAF3C11893
+ 463CD94DB53905CC0EE342838055B9CE913A1ED0E2608AD5D5F85CD36DF1E66B
+ 2D7C694CEA97100272C36A3EB97EAB914AFBBA0BE6CD533E8C54FFD9E130C2F2
+ C26803C94AE28D44E2064B6855DFA7333442696645380AC01AA6517107FD27DC
+ 909B4F4993D87C17F72D883126B83E86D1180534D62382F7724430000109913F
+ 1F9435BF12E714111799EB50CF07E37CD6DBBF45CF3C95E89F8962F2FA680D4C
+ BD5F67DBB25D5C35626519B2CF71DBCF38688A6C068473B012588F9D8F7FA66C
+ EAFFC158E62BE28EB54C415C248D2051DC8B54148AA89ADD67F281E30F2178E2
+ 896CD740C03D90A21732415C44608D495DFCDD4E3A9FF82762DF415631C2EEE5
+ 7D3800E308F19DF8837D356FF52B8A2C10E3FD6B38F1CD927B4DD777EADAE281
+ 7163E2287A1336A706BD443D81271147EF96E5DEB8BABB94D6DB3696F648CB3C
+ B0B5F911863DDECC1DACC636004EEEE32AC066BDBBFA60D3AB420984E0B40B57
+ DD8EAA6B8BB4BEBF2C6255A6FF6AE77005EAF18CEBB2D48F6DDD9EF7F3FE9B13
+ BB96F1437D02DAE43EAB46478749B70FAD288EC482AFD475068AD84002D95B9D
+ E91A48AFBDD21AEF6A5FF603A334C357FA4D942C43E60C585AE71517B48E1202
+ 117DCB3942EDE680D09E30CDDF2B0688210F09FFCA3F421CE6FA2D4B908AF165
+ BD73BA043F27D4EFB5C5E7DBE91A0E4027521F64261A1BFE48266C5ECC3F467E
+ BC107BAC388EF56B37ABAAD18E9CC0370CE71E81C7290B86EAB25E5027C2EECF
+ D3BAA7E80251E2A89B351B99004C84EBF92578FB0C64050EBFF35E50C94269DF
+ BE17823075124AF6C1C1F4DD6B427D92C017A23C098735FD0A86A5CB4F1AC913
+ 0C0CAA82D03A92327DD4CC8B853B97AA28DB7F489ED52B7F3DCACB095BB67F94
+ 3CB2414897A716FD1892A97A529C4E843E50513AC8380313133F6D24B7F0FF14
+ E88BBE016BB86937AF07E5F08E25DF4B2A52FDBC7A33F73A201FD39E999E1E02
+ 2E83D9A12A524DC289EAB7D3BB0E257B45C1AF74CDF27714DBA9457CC4D7AFF5
+ A39D174328FB2E8431BB721B53B73A420C179A0848EB0BA7A337173EF3D77092
+ 3A2030714131357039327BBDBF286050D5CBA45CD7314B150E232A470DCFA6BB
+ 1A25523530910DF12A9DEF4B74E910825138C4F66C186564B121F2776E841A24
+ 8F0CE3DD11587621ED2376D6542A9345A6595F8D14B9B52363E456EFB7A1FB75
+ F40451E8270267CD01B7683348FA6A57CC30B09DCE9725080AACFE0FA1D7E049
+ 5D7033002D40186FC52760AF14C9D65AACF06D6377E666F4AD6182CE62672655
+ 70BD6165BE43CCCEF0D406B1983FD60DE01D2C092DE2BB940DDAA3AA6D3D24FA
+ B819244F734FEEB33B0473E2015AF9101A573D9944C040DCBCA113F8D9702670
+ 7589E530CA3A8E713DBE5FE62384CC72FFA520DF26EEDBB3F419E4C7F8A9A65A
+ 8CFFA492CC2F5322428403B5305B6B62D113ECB323D1D03A30CB12E999089F36
+ 5542E8EB9A9134ED3C4BF1C943549B4AF621F5E5375EC3593234F8EBB42DE828
+ A815D1D46801817D3B9315A44AD9341DA5F4886D978D2FCCC487E1C7E43C0D3E
+ 95A5EB855DE3B92F3EA863A7708803E7AFBD4667632D2FE1BF04BCEEC554C739
+ 5E0E3C506D1DC844E167D8E4943FCE3DF6EEEE0DD308ED2A87FF5A83DFE9CE37
+ 85B0584D3850A0425C48D1ADEA49E2967E4B9E3876BCFEB5715E5E2E29049E99
+ 95CF1D99FC91D4FA125E5A2C513F4216767F3D58FAA3806C3C20587D7B70778F
+ 6AAC392E376210C2345CAE29DED569E27AA4C29F32B971A4E027321A5AA2980D
+ 45D0890416C329A8CE1DABAA125BFE8FE19F5CE0333265890408E952CCCAB1F8
+ 2DD31237CC1AB83FFDBFE6DA8183ED867DC81C81C7C217485F4586F08AC2D2B1
+ DED7A74045CA3A6FDF1CD8EA5FDC4CF17290741C1E3D10340CD1D4272BA39E39
+ F5C98DEA894C33C748947D8C7CF2C4C5E3B446DBCEFE95701C2BD32135BE7342
+ F814A61F537DE1F6164F8504908DF4EB790C97B6A4934DF462DF64FC37AE803A
+ 28AA3C8000F17F19D7C22C54B9FC4373C6D6814C6FD7BFA32817B8365DF6819D
+ 201E50A04066A63BA2BE3C24EC8792FBDD5CAC5EC447548878652F846E255311
+ B55A9E0B00FCE1E448859A75DE816515180224D380A9A0809B8636068376E600
+ BD54BFBA56B4AB831B50D3589FE5F5F0417BE60F5F7E1F6427C68FD4161F0461
+ 44F68108DEFB677BD42F78C4E95FF9F2FF53F06D6E541429304D1B0B56144482
+ 9FB9E23176D500A4CEE74C92FC689FFC6D2B2CAAB6874EABB48828737F2E583D
+ CAAC944B3DA7EAFE7DB5BED82236E040B9E73A191754DA3063F841749021D266
+ D74F10327C7789A94D8866FB489A18217E01878C78F69CE4858854E967432AE7
+ 003737B49208C25A1C789D059095046A28A95C1203B06769B1E0AE88AF2EC54D
+ 4D80B5958D7F6F515DFAB1E58E752735A7AF050228D9E0FBFB4AB61F4F8743D0
+ 743CCA9E3CD140EE53D791D8DDD6F7690103BF662F317CCD8318AC4E6C962E17
+ FD967D75B7FCCEBE53EE95BB6B404540672A4D49DF370DEE2FFB1795F3FCF2A7
+ 76AAA574F9947B497090ABD0009B66347866ACDF61316DFC773EA6CEF1F9EB2A
+ D97B73D9D0090489CBE035D22E78C2461B2A1EA855E2987CBD81A67B8E17CB28
+ F779042BCFEF24DDC8D2E08189E78E61D306457B3899420D357FC311AA8BBF61
+ 9FA6C3AD2EF9B7B19B384AF74EE52F964752BF543E34876052C64ED0367BEADC
+ 94AEDB0E105E1669F527E98B411CC9B3E20B684D67B932043C9DAC4C8959CB5A
+ 267716520BD6DB60CA10D98B54B40D7DF86BB378831DF0E0A923BB798EB42B99
+ 8447A279117DE261D79D6A4997BEA90E54606D95CE5D3F115355317EE8F657CF
+ 064606DF9D8F1ACF450B32C0C46C5635AB87CDFEE8732AEBB01D922233D4E357
+ 9D9E231D20A4218A9248396E43DD1BBD7014F2273F844895D3C5AA65DB6A260A
+ 26B24CD315D9BD4F60151560CE735B02FE536E0F5ECA1E33E4D09E362BCD60BC
+ FBCC8D11E8669B2F243E8E96C800B1DF6EF0B82944C766E8CF04276ECD0BCDEE
+ 7A1FF113ADC1F79973063BE65B3A74C27CBED9DFB4428A46C27DEA211F47378D
+ A50264BFFFEAC20C9CF169B5D49529A6460996DCF5C906974125F0842656DEC9
+ 5290CCB47EC3E1659C18946CCDA89BE80A8CA4832DA649BC36C367BAB43A20CC
+ AF0DE4A50F0ADA033D57BC9BEE03542E4C6768BAA42AB3C4BB4B5480151B51CC
+ 13046EE4EF422AF06B019BFE39345FD73CE1981CC7A1F037F9C511BF228B1544
+ ABA13B8AA6B15EF62046FE1D6073B2146031FF918FED2055147DE54E8B2896C2
+ 3979188A2DF5829FAC5B28096A3A3D60E27B5DE12BE2EE3818C7A44CF98251A3
+ 9D6CBC49BF4BBB4D657440F8F6ADD291513DC8FC54F5C131FBB89677CE1D8783
+ 876ACE3C691953A5221AFAFFD2D9F362D00EDF53BC7B6DDF6F3FEB4B8B7C140D
+ C77ED03E00F91FD80DA1D6E6C9675514F4BF6E33F1962C6DABE8CF2ADD339700
+ 24C05F028EA49907D013A95EC838A3EE73D217138C2296117DAABE33E065DC78
+ 0A7440195CA094595A6C9B4DF0EE6FE894DBD523FE7160AB992DB52640C23E84
+ C3CEDD58EC63D175A3ACD62300759C423BCFAD573A11F02334F6F658ED6892DF
+ 33FD1F5981F7372D42DD4AF72633E07E6F8D55D2FACD09F4AE9880782C0D60D9
+ 90E4F023FB40454DE861FC9369CA8473A188FF56FA3E62001C3FE7789C91145B
+ 122885F271468384ADC7B719319C96C97256DDB8070F7D8CFE9F4216255144B9
+ BF563C107A720B34F766D63F04C73F8A9EC071F7D1AACB2F06754600BEEF283D
+ B990700956427AE4D4896C59410F5C4485531820A3273DFBD178A37AD5E55E5E
+ 1469896CF319BC11648080755BBC781B686413F8D1DC4E47D76F951E587D7F19
+ 1F6C9667BB0BE766624D279F4863C646EFEEEB243071C76559A5E51241FF92BD
+ E76FC91AE5588826CEDBA5A1F4E6F2A6FA6DCC2FA8BC3C8F23F2CBADE4A1A9C4
+ 2A01AB03FD28A93F64535D0329C29818F742D10D8FBBE6B8CFB25443F132DAEE
+ 9490DA0036046F1956AA738A322A481F2EE8677263CB410D7E4A2E0383262E4B
+ 4F851E3A05CB33341740BF58161F0226DBCDE12487D495B0D8D7C38660430B63
+ 8A5166C9992AB56F821478B2317179A4AD163BDBDFAD99D7C3510301F99501AC
+ EDE8276C24C3C80D9D67C2EE631700EF50A65A9B4BEE1AA94134C802A2FFA6BD
+ 92F60B72942981672D9D5F6F02A29495E47F29A5526EC680BC3A7F0C5A0DEF85
+ 66549F915CE2CB2B5EB0038D98901EF78E4AB5401CFE52781EF29A0CA7F5B8A8
+ 9CCA01C7DA5D84C2EA1B1D924AD1292AEFE33AB4BE3F7D0829F3987305C496F4
+ 1F6B9E5B1A4A44DBC3E4320590DD118A562A0F15A6A74842EBB391517A6931AD
+ 23185EED2CBE0D0F17C50BD35D46D6C7F23C4F98371D4A37FAF45598C5A95940
+ 57A89DCC9BBFA2FE538476EC4695C53644101ED1B250192D0789CF3EF03C4B4F
+ F584D6E3D7488570BA688C83959886E5C5BA0D935F34AE925162A54F687A3FC5
+ 75F97D6A5674A67DB3631B831D3B977CC9D4FB76C692B78E93442D1C28D31410
+ A257800E287C4EA4C9643276E88CD26307BE50E75FFB5DBDB417FEEBE501443A
+ 5CD84ABF1DC9C6E25672D8FF0FE2ACB79842E7D51E42FC09F85B0D2C7B73EEFD
+ F0340CFC968D2C2D369BA14EAF82C5BB385C04DC725C0838D777F2EF4D4BA6B9
+ 88B99C30FBFB81B162B9E84BF78CCA8BCCF2F469CF06ADCADFB3ACF6439DDAF5
+ D3F58BE957991B80DFDCB03FB6FD95617DA2E7BF6C3CD65B331ECAC69D736747
+ DA700F6FB2333D208FDA79DC7D0A20B5F7E59EBC9BA4122E9BCB6507E89BF1AD
+ 4B1CE48BC89C77A639FB2BEDB7A518CDA6D9AE7A92B50DF8CFDBFE81DC5CB2E8
+ 99E9583CC6291C3655ECF18DE7CE574FADDB1B0B9821C994DA66940B74F9A3F4
+ 64B7AE10F9B44F22F42283791C2EB401E68636BC5E52DD035C7BFB286C042852
+ 4F4B9DCD941894D5289D18468AD9F1301A104564CD10D9841C1B5E23403311E9
+ 9D408126096AE3E5CCB4678A80AEA701F16E6D17C7403DAC15C43C2404279054
+ 7A7BA3CC7DB9E75EDFD7631199BB0961BF45452A99BF83DEC1B8DDE20F5F56D2
+ 75EC213869B9394BCACFF809CE859DC0E7D6C028A3A491E20ABF36C04634E4F2
+ 2C5EAE2E4ADA0A52C56E3CD6C9EFB478D23607D12F24D2A13141C93E6886B4D3
+ 050B76184FED11793DBF162EFB47C1EAF8DFA35AA0C142FFEA24AD0ABD17C4B8
+ 4EB56695BE041C668C9A10C51FACA373D62C23DAFC9098BA6C9950CB7FFCD85C
+ CA6714783E62DA98E62EB14AAC3C1CB84524D82E0056AB29FBE5C3BCA7952A02
+ 91A4F0DEC56C13C3BC51679A5EEBBD46579BCEF72D4F1D0B43450D45C12B7CF4
+ 22BB927C3B91E9B5F2686EBF45992C5075F0AE08C634D1A0D0EDABFA9B7EA4FF
+ EA6001BF78BC8BEC6CF39CE6C3DA3FD48432323014BB232BB1BB3C6758C36923
+ 884E011770CAFABB8B6737254794675D521A8EDC4F54AEE6C8E629EA3B55EB7B
+ 415D4471092B938DD0EC31C9B5A38885A8CEA7A7329C7697236BD68FB4FF5E6E
+ 1C48C0C3C6A6514E2451A8EDFB4C613E93D229ECDEF7EF826B3D292729A1EC13
+ 3C95D41707310E848DFB88074678A03FBA8496165CA371F4547D9C5E24378FB0
+ 16BADB0749017754BF4964DB5B86A55614D5D11B2843389094F05132221E3586
+ 2CCC3161E4A62183638FB3E8A74E59E1AE7A696718CF9484BFF546653702CCE6
+ 7B5BDF4807C873F3527821D153D2F81AEDEC5F50AE535BFB1B41D24E7A453A4D
+ BBE43DBB8728B188C9527F7BD973DCBD8F28E0E509395438635A1C994A953849
+ F31FA0FE3CB842740F567E7CFC957D019115C376A131EC74C008AB8203F9E59F
+ 9EAC75CCE8589E8E5CBAA425D28C92B3D16395239B7608679894C4A3034CC1E9
+ 70D238CC08880F2BA31502F3BF25D0D55F7A6A8AF15062D02D4B192D48D06A2A
+ F1C6E09783632DC1590A86A14F241A4D5BF823C468B4B6B4D4A94287E7AC4E32
+ A2F06CE0E94905F7666E8A85A0090526CE59E6C9CAAF43D0E183D673F038AA8D
+ 7FCECA7D693285C7973FA201C32C1A2A0EF20F53A999AF261AEC49350B659D08
+ DB9878A1B6691F28BF863B86076E930A67EFA29CD6848B3A5DFD4A96E3464F26
+ 738DE280F6307E2D008AC3D0D626EF09A6C3B9F307EFAE06F25DBD422EAF6860
+ 88D5F30F59693D316D84888B53C1AA82E4D808C9EC73CCA6E845C270E78BC471
+ 24B81B1DFD7ACD43E1759952512C632516BB2AC4E38DFFFFACAEAEC3CC1B8EE8
+ A50615B13C4E327969C39A304B2D089D8B02613ED165BAE0AE134D32F9F7E4E6
+ 6B1CBD9AAE73B05E1FAEF50568E8E5719103A6324E87D2871CCF98617A900BCF
+ 3858CD27EACDE8529D53F29CD3FF5A4C996782A37F5477DB37818C89CC21B5C8
+ 220D40C224C75A9087CF225ED80B118A36209C0B9B276AC9472F5CC849774204
+ 3CBE830DCF8A6F5E1B7921F7F8495F96BBADD4BB9F61F3D20333007C01C476B9
+ B08DCC26C06ECE0BACB68D7F18B63CA18BAB5BC45B7CC04F1D1755A9CE1B88C4
+ D570851EBF1FFB3E902C0576E7AA71AF44AF96F86D33DEE934A0666BF0D2FC30
+ 4215354E559237BF3852AC873C87A0FC674BD284F7FE8AF4FA259AFAB9FED63A
+ FA3E67329C3FEE0FAD83665653EF903536AB81FFADC76548877EDDE9AFC3AA3C
+ B0FF7DCDBABC48ED16A028E56D9B523413E2C8D523BC736B3D60550F1DDF0063
+ 6C4BC7B593639FC2DE8C2A8AB10F94A16B9E5309DB2A869C47B8CF4FFE0CDD47
+ 58E40E794320D8D12287F67C3E0A892BD8DACCA2B0E5C9B2670566864B87148A
+ B5E6143E6FB02D689701A4929FA090DE470698D0132656395641EE6557BD97AC
+ B0F2E122D99B6C410A6D372594DED6C61FB76B698D2A1343683411CDBDABBFC8
+ 2C5144CCDCF90B5987E08C99D92D3B6F3069EA32ED64A0C52180C1182292B9E8
+ 4A9884289F8B18914C0516009EC96ADC73B55A3E7E6B3C52FC074DA82117412F
+ CA83952174229C1A881A261955BC32795D3C7107F68EAA5361F3EA909C632244
+ 7F46DB012E2A07D77471C694DC031E1F1F7A6D322B9B924DCC3BE0F4CC536EC4
+ 68B1BBAEC127AE4A738D10B1CC1AA489096D4EBFCC1FDD70134F6B33B8828FF5
+ A95C427EC1F3298783AA188FC7F6AF0EA3FB2FBA06B4E61EF853991182B0B0DC
+ C358B8F0747C620909EF39914D8486B5BF68CB11C75219E6888DE4C3A06BCFBA
+ 2A26C723E2AE260BC7566C7731B8EC9D29054070DB68043315A48F31075D550F
+ 8067B446ACA969FE8D988565AA294A90325519C32EB9F6ED4FF69A0D8C770024
+ 1C9787DA8D50249405FDA4DD42EAB3F5722A01DC60337D830C16E4CFCA96C986
+ DF157B3E515F03D85653F6D1B255F8853EB83FCD13A9DB829140458B0E899198
+ E5292F575BC96F3E823AEE1BFE044290385AA067466F013D9924061FC422908B
+ 3B1DE168895ED8151D6093E3F39FE84514ED221B308FAA329D77E93B3EB87BD5
+ 059308248F052BAFBD42B0FBB31DF6CF5CB8FBF61CA93524F2B06A05098757F0
+ 2F0EE9847FB9E1BE80D427AEBB8FF7A02FB490FABFE22E1315742CB2FF4270D2
+ 0267153A0E4BF56139040112CFFAE35C2739CC0085E404618357F9E2B84E3D41
+ 610AC5AE36D54AD3AFEC84A4629A026D5F074C775DF339638D8A45BA6E61A86D
+ 0C03A5BCEB480E319E6B3573C597CF995A650F6AD00B7AD370D6A3C914C46C39
+ 94E493B7B77A712E7835221BFDB8213C27F3F34918CA3CCC4065430C376A94FD
+ 383F4F4EB3CDD6E6A56E30729C65C0D9D2267FF95FDEC97767DE7E63DCA692D1
+ EA1CA1D6C16E524C59DB338BDB3E15225A0021151B483482569273A33E2722CF
+ 9F7B6ECE3F2988705CAAB45DF4EDE1395AFCD76C0CC677096EE5845281BFD414
+ B9534BC2767783CC58235ADF921CE30EE16439327726C1D363DDB34BF3CF1853
+ B5FD34E1769DFDB198C6EE9B0B071EBBD12D84FFECFA06061D09ED559EA9DB7E
+ B635CC6C2A1476C9A73ECAB0F35C71E4BFCE9F3D232CD0C579C1C7F0DC6967E7
+ 605B066211E5A2699953C750068705FF99FA736AC436B2773D6FCAD05206DAAD
+ DFF83FF86F12D1B5F1E57BC5DA85E7C9A2306D14F511DD3F335D6C54DA355FE2
+ 163C4EF09F67EA23974BB9D570473393341BFC44A969D0A0EEE2FD78E3D68517
+ 462AC7B3E8BA0C8FF17D1905392B4F0ABE8408E87AC148A0B3BA4A12884EB451
+ 39C0FF5C49A34ABA1E6C6ADA4ED6DE66C2C8A8D2253ACC936627ED2A0DAEE99F
+ AC490490973A77DBB67F8FF6E86D68E493F415C2ECB4A984E531CA6895F22345
+ 0B9C9F91A9BF7A0F7F54E7B7EC720F9474081FD9E5004D493106543D297A51DA
+ 389310DB8628AE1D968E207D113E8494E47E6B6460E463E713D8
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMR9
+ %!PS-AdobeFont-1.1: CMR9 1.0
+ %%CreationDate: 1991 Aug 20 16:39:59
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMR9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMR9 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 2 /Theta put
+ dup 11 /ff put
+ dup 12 /fi put
+ dup 13 /fl put
+ dup 14 /ffi put
+ dup 16 /dotlessi put
+ dup 33 /exclam put
+ dup 34 /quotedblright put
+ dup 35 /numbersign put
+ dup 37 /percent put
+ dup 38 /ampersand put
+ dup 39 /quoteright put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 43 /plus put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 47 /slash put
+ dup 48 /zero put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 53 /five put
+ dup 54 /six put
+ dup 55 /seven put
+ dup 56 /eight put
+ dup 57 /nine put
+ dup 58 /colon put
+ dup 59 /semicolon put
+ dup 61 /equal put
+ dup 63 /question put
+ dup 65 /A put
+ dup 66 /B put
+ dup 67 /C put
+ dup 68 /D put
+ dup 69 /E put
+ dup 70 /F put
+ dup 71 /G put
+ dup 72 /H put
+ dup 73 /I put
+ dup 74 /J put
+ dup 75 /K put
+ dup 76 /L put
+ dup 77 /M put
+ dup 78 /N put
+ dup 79 /O put
+ dup 80 /P put
+ dup 82 /R put
+ dup 83 /S put
+ dup 84 /T put
+ dup 85 /U put
+ dup 86 /V put
+ dup 87 /W put
+ dup 88 /X put
+ dup 91 /bracketleft put
+ dup 92 /quotedblleft put
+ dup 93 /bracketright put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 106 /j put
+ dup 107 /k put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 113 /q put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 119 /w put
+ dup 120 /x put
+ dup 121 /y put
+ dup 122 /z put
+ dup 124 /emdash put
+ dup 127 /dieresis put
+ readonly def
+ /FontBBox{-39 -250 1036 750}readonly def
+ /UniqueID 5000792 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
+ 87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
+ D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
+ 92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835
+ 3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203
+ 046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E
+ C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A
+ A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2
+ A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D
+ 731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B
+ 09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1
+ 49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B
+ 5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B
+ 54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C
+ C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F
+ 11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AC46268691C741B2D4
+ 48A840F1128D9B2F9CF07D0709FE796B23A836417BF7B5B12D67F74453C82F5F
+ 25F7B30701D6F6D4F4DC623C0C27D6A6FBECC7312A3CD10932FC7C10851C3C52
+ 24B75DEA8A648B7F34F5711DB0E843C914E25663C510185BC37BDB7593C1C259
+ 21D8DDAD33982C336BF272BAB2F48E68217403FE9F54877B243614A87E64784D
+ 2796EE4179FBF96123D1BEE3EF89D682B427BA4F12A1318A57F18BE5DD903815
+ 26191085AB226F606420F5E34D964A1512A27B63CAD4DE4297051FE3C447D163
+ 46D0795E2A64012A1DDC6DBCC429A747045D025E5448712A6DEC67E7F0A3C401
+ 5B4F48E6D30D297DA28FB2B95EDACEB17BC656F6F8365892EA3A052D8161EAF0
+ AF13E55EE2849FCD851074833FDA8BB8A1ADA816B12D41DB1E67E6A20B029A3D
+ 474E55985D6B51CE73F0107469FC3B2E2E56F025D5550A26CCA83DB30F4ABC98
+ E31B4CC175BEC04E25A8C3D578BEC05BDD118339D603D47A076896AAC6D6F3CC
+ 857B9DA3666D4BB2318B5824CBBDAC656ADF07069AE63A84A4965085359E187D
+ 505706339A799802630CCA842881277224BE9FB903321FF058544DEFF740D945
+ 51DAFFF0E0724AED6260826F31D05C7DA68686DF6AFD29C1B9F720AF94E0603A
+ 51C0BDDDE33FEE91117AA9FED07F9E711093F261473DE87AC4C52FB8CB571653
+ BFDBEEAA5DD5C3B802B085ED619159C8F93C578F8A88A23E1FA48EFCC3ADE9F2
+ EC91E20FDEA70A7C0FE42642CB91DB41C9B789573EF243D690D93E9E4D60DBF7
+ 524BBE3DB1E5CDC3254386B5530815EC88E17A4482030143F6B2B94ECDEE7B62
+ 9A464ED74DBD90C9B19DD00D20923535CCA8DBCC608D32FE261124DC787E4A49
+ 568CD42BAB669993052054BA9815949A909852113AFF8B378546E2529225FF9B
+ 22B4A15905C06CD7EA7A3EB25D82F42D090E013439FB339E1C82C95D8EFAB437
+ EFCAB3967493AC670911ED141B26D768AA894DCA2F537B4243F6BCD78F908F69
+ AADD0D8D13190B6E9ACF8DD69B93450D4357CA672B420C2A24BB48FE29747584
+ 35F56DC6EF457293D6F16A752E701C4D6A58A5260AA56CECCA423F26305472D2
+ DCAB2B6309C3B24A0C2FAC247BE569E55014254ED5D44A821F98D4382D5316DC
+ 7E2AFA84C649F618BF9D69C547FA52034785F937A06A79F23166F74733E7E549
+ 997D4CCC326D72BE8ACAC0BC789435CA436F630A61A3798168628E3CF5668E5E
+ A8EAC07C4CB3CE49DDF2ADC01D0D8F0475091703AC92AC8498182497FF0EAE32
+ 4F33E3724FB99D1C2AD06BDF63327926C08D3A3DDB6AA2A457590B3593B1239C
+ 25913B5F42B899D8C91516256D6ECBF25A474F6BD72D057E2AB416A11EDC633D
+ F188B45CCF11F593C1ADDB47B146E4BE68A0FB447B4EB88E4345B371F1A8ADCB
+ 76369574295630E5542340BEC258AE09B5AE11AE898CDEBA8E852C5684F86831
+ 7B3A9BC1298EAD66C33475E01DBC53DC154B0D1E620F6DADB9D1BF036A9544F1
+ AD23C5F647E9528EBC23A139284F22C8882D414C7207E406C07A67BD0B98B5F4
+ F296F7DEEE25C95A363B6905453078E4EE9EABEB920F7113DA9282DB1B917635
+ 14752D6D4657F35AA5A620F9CB0C4EFF6E27979B8FED0FE5FBDE273F091450D8
+ 2D204B4490B7AAA86E591E24B25BA969551C36B570F65806C54225AB75F078EC
+ D9842D82379172BCD5DDE10D07AA385ACDFEC3755131CDEC20A392C70BCADFCC
+ 5E464C887913196470A61B3244C30F23647871E5990487201E066238878383FF
+ 0FA63D756AA19A2053825AABDD64A4862C2111C58C42D42673F0A259AE21E9E0
+ F5F85D3BDB07D79C8836FBBA29366A162395BF496DC488D686C705D370281A13
+ 5AD0E9189FBCE9F5B40CBF95228A414ABF8833409D000B032F2657B8021A7803
+ 07E874F376AF976F75B4F66780BC1877EA8F2B9742FA98BFE3B804EF33667616
+ EC4FE6102F680B691DC8B717848692385A515274F7DA4D74E6D4DEE36FBF0F80
+ 15EEF5FB73149C0A579920E655DA2FDC55D2240A34223F6B3EDE2B36CE519B60
+ C5D2267F5595753F11C43E8010FD6E349784BFBA0F4B8A1B6B95C3E4E687B407
+ AE489C47E2624FFC57751E333B36986EFE0D85FE39FD170FB87CB1215CB9F4A5
+ 37923FE48F04967477111CD780BF839DD6590A934C7FF649EFC94E73DAD509D2
+ AC65B2383CEE5DB87E1175F8F1B9C3C2F75BE7EF10D034E05E3B4765BDEB7B00
+ B63938AC1A05A2674290DD0FDF9650263045189EB1546B9D52F299C9FB001F30
+ C4EB36E2802B5F705260B317F1E6160C0DEDBD5CEEBAC6E159332A1815D81B86
+ 1D7723CCD20AE8D2FE03CD3489AB605D973C82F40D697D075F1FE332CB7B6751
+ 4ED634817DC0B31FCBD914615586100B74D202CB59803630C90B97F93F0AAC9C
+ D4C16DF5FDE0879F35B59DA984253B35CCB6D152C9EAE0DFBE9E54944CB5B8DA
+ 431B3209B08DCA7747C321FE842F054E14A4B444AA4619F1C83FEA0A0BD15CC4
+ 3F99BCA421787932A8F5ACB35254F5B6A7E0276BF7FA09D5E9FFB9D8EB78A9CE
+ 07205C14D1C3D8246149E74341D3B7D88CEE5D4FBDE41655947159E760896C6C
+ D07291F0BBBC49A5DB10E0A62AF7E50501C26F5AE6A8995ECCFCC1A8D01B0975
+ 35C105E53EFAFAE726B0928FE1A1A254FECD0F168D5BB2F38FFD98770893D569
+ BE9115421AA4532808F42E25208A047862B1DE373F450914A3CA60524F0A2275
+ 9B5A0679C8926808EB27C518ED07D534E5186D68933F1C44482B51619B646CB9
+ 6E5F1637B31869511AA18557A9446A5EFF7ABBCF425B34689E05A3558286DA29
+ 4F7F1F713D829A447AA0C0D47004419145AB26806E8E3FE24C30F29187FA4017
+ ACB1D5FC0902D297229D2B057E26F42BEF2C71B62C2C2A3DBA552BD3EE125C17
+ FCF9E9BC3ADF3FBA1CE60A2EBBFC66D2A4AB35C322C50656CC298479948F353B
+ B93A587AB2556C4459F13A70013653A4A1846A1E074B00122B43F4ACBFD22967
+ 101A152A5EEE9942B6C54118EA07DDC115E989B666520FA2AE2DE3BBC4F12915
+ 38A6AB74E2C9F716305ECB29144FC5AF597209890204B7C09FFBBE04E5249590
+ 9D7AF2DBD7DD891AF2B0378F34541D6BBAC51CFD7D8083D33A057F912E5EAAA3
+ 291C66791293A552F06F78B0CA24D79AFDE5D88E48AFEDA936E3F1015FED5A82
+ 1555C13AAA0597A579852A0F9077F2B1BCE9E10E43046BAC72372666FA5F3599
+ 4903DACEC4BB2D2CD09699E0994C42713D4130BC650FA2C7722BE92AC72DD47F
+ FDA5864822BA19141150E8C2B17F1D59CCE7B6CC6D26C0E79F1AD0A2C6700773
+ F310CFA9EC98E562DB80E78D21A392AC2B87D0EE5F0F01FA2E4FC63F9D28ACC8
+ 20F149925CCC2264DD6B01D1F17B753EA7F39CB86B502C0CB095262A89273F5D
+ 1846A26891B8CBC29A3F200257AE63E7E400D4CAE60444414651E69B52BCEC19
+ 7666FC03B01C6A028D0001027BA0E53586F25DF76B3C52FACC53846AE4C436E4
+ 2082457734CCC1709079B65FA0A089B7CB459CBBE716E203BEDF894876F40F6A
+ B1538A3454A7295EA68B0BECE25E5D7ABCDD55B475F30D70780C1568E0FE0E6F
+ 0F2DE3356C44DED62F33EAA3385C45003FE8159DC9B1B1C4D6665AFA102C6BE8
+ 46749870BE4FB997CE0F5E1430A42568463E5C8F2D15CCB04003BE5716252160
+ A0686C0CA0A94D838616873EB4058474519807D7C6A1B73FA770C3C2B71990B2
+ 2E3659E68C596D538D9FCBBD586910E227124D27974444A73C8D38B3F79999B9
+ 05232A5486663C941D06E64C7094ED3AFD3C0D4E2D9CE0B29926AD3447202D31
+ 8ABC17ECED4296E43C3A49C3A5432FB9EA6472D12A262384F68AE6266354C41A
+ 06F78C071DD59B8EC0726C9400446D6B19778D4F0A6EEBAE1BF4708EE9E6F8D3
+ 8F8FDBFCFE067D487EAD5D77AE86F6F33944F14D7E4745586F198B539CC62FC4
+ 587889FEB05649B0A7F537A642ECC08FE5FC971E917D1594B11349CB07CFB80E
+ 083ED6E0F68E77B855961E573944C1D8354212E90196BE724AA58857A4800943
+ 893AFF26C704A0DAC4662135E82D0441F4B76AB79FF5315BC95B63899D83E41E
+ 028E0F342ABD6331826BA3D03D46E301F7F1DEDF4830A5B115E2BD40D2FAFA20
+ E269C4B8958CC4C5373258DD3E746CBF3101D17ADDE67F311048ADB7CE40708C
+ A1F4150397C7E8C4FBFDAAF7BB3811E0B981D82633E87CD22FB386833FB09ABD
+ E8E0C1EE9442ECC3881DE38C7150F543F08CEDBD8EF1C2760D290A14F53287C4
+ E669A6CC283394E813972A269C49CC15C8074375BF33055C5AB94D5703E698A0
+ 2B6F2799399E3887BACC3F0A3F86983897D20EF0D09AC70E0E1F46B9E09A5965
+ 818FB445514288B72963373412148143E651E187B5E1A2004DC5DD1342A62275
+ 694CC3E97EAE930FFBE8D45AFCE437A10E064B6B6B4FECDA00F03BC0E6531782
+ 05EB00AD9A840E428B9AC4A4BDEBB5B105F23ABACD44380E437BAA733A171E8E
+ 83F3DE6B38D240B64016B164AD6512AD3C3A272E76D2549B730301A356E057BE
+ A8193FAD2507B4091F2C0E481B17C3ADBE1F589772BDDCC22D5FBA82BEC6986A
+ 40C07CB03A92E2ECD35A412BBA557B5817FC652C77CB8DD18F5E987DCBA7267E
+ F528C6BBB9E4E7050DA6F7E88E6F979700C76E316DFD05BBE2F828A848748755
+ E7A1A899FAD2B47ECE4534A3410CCA96B7EED69779290421783CD6A984B075B6
+ AE6BFBD84FD09B1B48FB30CE4AF2A1F7C47EC1E26787F1F85280941630B188B6
+ 4EF1C5F2A71919689FF36DD2A3650DAC8EBDC4B17833AA718358EC6C660E2E70
+ 084E7474628A69DBDD7A25D2EFB47CCCDC366FA665B82143FB4338D23C84E03B
+ 65C213E9C93ED68ADC8080EBD9E109087CD5C02B0B392F86E109F4014FF81D77
+ 91DB0FDBAA6F3E72F6D1B9F1BCF27074283A93B622BEDC7E4A3FEFC7B5F5DC8D
+ 96E8F0D3FF0C0CB02812BBB7D5FC76267F0C227E98734EC7925B354DD5171AF2
+ 2CDD034B5997CF7A45033FD0CB8B19A0F055E8FEACAAA8754EBFE8308B1AD31C
+ F2F92BF1131F930FAD20CD19881F52847F5E79F43E82CE0A866B4883E6214E43
+ F3BB1B9B47DCA70A6909F247FF35E599CC4856037901C5B099046E5C79245D31
+ 42BDC0EEF3416D87F7B61E56545803C1076746096FD9D1DF7EFEA29999A957C0
+ 37558630FC366963F48F2100CE085225772FE4CB938E828E8E8793352471163A
+ B8AE378014F9EC964526D842440E83A1CC54BC97A0581C606117F444CA7F2D88
+ D319BE35BDCBEAC4328C353DC405AE5315F7312766C772097A232482F39177B5
+ 9C0587FBCA6A6D921591FD19F35FF6809605730AC1AFA3B2BECBD1373A3A36CF
+ 74C41DED8A4D74475B1DB970CB03BBF5C160C6ECC8A80BB01AD142E7D38E85D9
+ 1813C2498265E18CC63733E7349294708EC25E2A8D077DA4AF81464064B09709
+ DD1E1308ED82BDC23EF8D5C93B2F9F11DDBC60CE0531BB5CA9F007E8EBB186CC
+ EAC3A366CCB7C5FA775C96C4354B5E2F8BF9BF48BF515DBAFCC1535B724B4A27
+ 28B9A6B45EEE0FE91DB45F1B734EBE809375EC5B2D7B118CB725D2F879C5A3C5
+ F85099CB398C78087710023854A05D8A369311AA83288D95C0E7BA329B6A8D03
+ 452A3D12D48F3EBE5D759976FE61B27FC0BEEEBC3DBE8D67E153CB7E95D7B1C1
+ 59F3F881361E41A574DD4FF09112F6C2DAEA451769ACCED7F428E0C47E70504E
+ 5C98EC6EE98665BF30E7C22066E21F478248A7A3C5F18CE30B7754A6CF3AA5F1
+ 18714F6DA8C88EE13F780FD33656DF5F959A9E3867F4E1CBF40B8907A10CF9EF
+ 6016BE22294564A5EC039E95818A06FD23FA5DD5ABCA48CE7A23F60CA28D61D9
+ F5C30ADF26A1E9781EA53F4934ECE8F40412ABC4C7469748FAB8827799C89A1E
+ A23533092795456B2E6AEC505029C26540776627CFB3B7C638651B7693631B18
+ 2B701084CFF6C779BE6D67ACA704A6571096E9E50969D1C0075E9852AB66075B
+ E8D906A9F5C239F27E5739A78E0CCD0FB85012E1E11357C744BC4A8793B89D9C
+ AFC6875DC8F172381B0CD4EADC55317780D6434427FD5D2A62244CD7BBE7733F
+ AE550A72C958A180AFF305956BB9C0333B5722DAA95932BC33677C77FF9BF24F
+ 84BE4F1496AC4E99ED3C7559E041EE8260F6B30753D1C10F362399A37ACEFBFD
+ 2D85E3C9BCE9A4399B278FA8C0FC6DB7703D7A92D99D01B617F76BC91C343DB4
+ 38D8469E6FDDA4184B0FCEEE8E02E64C33A618CC390865496AB3A338610B1D44
+ 6094F6EC64682CAF41FD386D17ABE45959A9958DF125846250E14874E3F2877B
+ 4D8E7AE523817B562ED6ADC20D07D1C291BB1AB7916052ADE6DFA77F21BDE593
+ 8E96FDD441ED7E65F9FA95235D6561CB862F5C628CDC7CE7391008AD8F52EC1B
+ 229278A48AA3B7A6B7F1A1228C039F0AD422DC3F0F0F1AEDD4D7840463ADA6A8
+ C04E8DAEDC91F0578F2CC5D2CDFF070020E69EB1BA7CCE34C38CAF5BEA8FDE3B
+ 4F22DB3AB51F63B1C8501016D466F7E85DDC9ED399308B7E4E8B806A917451FA
+ FBA9E45A691AD183162201245F0DC8ED19DC5F31A33609471A80405865057BBA
+ 73FCD484CD4A416E05F21B55B3D92E55F0B36265C987DEE22F64D809ACE98E94
+ 44B236F774FF5DC60E0507EC0BE774500F05D3C00EE0731EAE35D1813F9BC4E7
+ 6AB9671F6BAA1F27D6DE6E6DF5D46DCCD0E2EA64D461118D37A99BC921EEAEF6
+ 87C40521D7DADC397D17739D371ECB554325FEA940001E943E2A008EC2588E1E
+ 18E20A9B374EA84278F3561562511C7FBD258339104310B046B8366FAF9A62B8
+ 1A894C14F453B59A355B95839938141ADD8DCEF1D66CB46034D13A5BE2BEBC37
+ C6DCC91521BE3D906D1E952E62665A8C24167A83C50C490B61104F7543AD4D32
+ 73ECA33201FE9EC2A2B4B2177655B9CAE1FDA13A5134F8EDE75D59E5F8269C3D
+ 124710487A2E080F03E9CDB62E7A75AF72D78E449376BDFABE88B3987F313E61
+ C3F9FF3ADCA3FB28C2BC78231C3E2D85E43BF1E376A2B1F6273537EE340CBBD1
+ 47997583765B40572C27CED816015D5A1CF71331533BFB8EF06863CC63EC4ABF
+ 666441610CC9635E3781CCEFE1C08CA7D4F93E3BFF4CDC43036DC16BC9C57187
+ 1CE6C3915195316B3B2DAB04F0E577CC4705191AEFDABB89F409DB0148E8DD08
+ 4EA19CA464B408199680B7F7BB960CB0D9422A4B88BE419F97763EB56C9448C3
+ 0751EFE0D52C50458F6A35FC186A0C75857268EB4A83337B664E8489525E1307
+ 883C365558C0438114B9859FB82F2A67CCC9C7E32A423BB1A5C5C6B9E3C6AE3E
+ BB535A105A027030AC391536374E74423ACF4F69FBC0B5A7DF5D0A48DEC5ED94
+ 788C8C422DAFD174A935B1C0980768943D8F5DEE9BA341FBDD91DA49B014C7DA
+ 1367680E01465BD72DFD7C074C7C6611A0DD4256995A183547949AE27AF602B8
+ B31AA0BD347A727F5A6C1668D52D8F167869BBF34E5395EF67E7A04D7A2035AD
+ 50E8058DA6C65FC0EA0C50DD3164C5C71B30B092D2B08D09C7A21A1ACCCDF02C
+ 49C95049CA3F7623EE1F8CFCC61A543216A213397220B991084F202F62C42CF0
+ D5A0E43B181B9FCB83DDB1D1F99AC18771705FCEE6C80E733271F1001BA63B2B
+ 7B6CEBC9ACCF2D178686C69DF87AFF08AEDF0FC8B331983BFAD5CD3232173CA2
+ 6BB48B01E2B7E9BF2F8E38EDB52B7FA27357332594C4480AAFF30594DA690E3B
+ FF1F1958E76153B94BECC58EF040CC960F06E481B01ADA7C05EDA5F0A910E51F
+ DC9DBCF943C9832341428A8921B0CFEE57443D8D4CAF76054E475AC75B93A111
+ B19B4C006FF716EFC9D163C9305F130084B26B1984CEF07D11C6813C9CE67C56
+ 14CAFD8202039D416BB4779040BF477EDA72BC3E28D4E01C53E62263EFC2D356
+ 5477C811C7F24CAD3D3258CC9CE515D9F29CA16745D9ABEEB433ACE64C352C10
+ B3FA7B264AA08F9E641ABA62C26A124FF0F44088DAE0738B24C588F73EF52C37
+ 0F6D1E1A94740DCEBC6083916091C4D63F1EEE8F63F76B757EC929A88FD6318A
+ 3C88C0C222E41DB9210BB2BF35805223B8A2E3ABBBCC558117E3515068B99561
+ 870518DD96010E77AAD8A407D15692F8F5102839A6CADBEA936CF2C068089743
+ A5E6B5F294AAAAB78BA2DF1870447F0F67C6ADE6994F44D825FD5F7BAA3FDEBC
+ B4AD95D10086F436FBBB3FF1DD1882D1607452CAC71E6E9B1E9ECB9FB052CA0B
+ F9119D1C5FF9F07E075AD7443D1939181A513480908F38392CE271854A70CAAC
+ 8D7F925220BEBE9ACE8C9D841472E6469F28253D17AFE5C6C8EA4DCB80CABDB4
+ 1E8F49718C2E08F94274D326B164943A1CF1D74298F373202C3766DFF4DB5A1B
+ DCEE60CB68C52DEA89889B6F397F46C9FF66733083D6A0FD0EA7FC188AD0A890
+ 7E852BE05CE5497267F5F9AC663F546B22166D1C1E9BB55EDA29AEC5C008B677
+ 879C469BFBD54FA0B2578DD51F7D00ABA81CC71DA650C7C94E3A32937ECC4587
+ B2043546EC753124B95D5036438F86504A3D33FC8A8934B29FF1F4AF89BDE791
+ 9FCDCD7E85BD2563D01E38DCB57224BD828C919B7B68110B9540023DBA4C5BE6
+ 3C45E84A036B920A1988B7F840C6D68A0BB0337447EE32C5241BF068070EEACB
+ 89CC662CBE3C74E99139F5A71219069CDA8972E63464F0626B554195629FE50C
+ 5CA3FC48C7E3DC2FBABF416027657A0F09655DD696F13C4AD53516C710660488
+ F04C9C2F70D23A859C058FDFE115987144247A8ECB5C3B416442D0AC80EE0388
+ 3AE86FDCD987B9C9EA48A7E70C62531B8EAAAC4DDF6E7D80578AD4262BD529E0
+ 97EB0A809D3FB3C93C463A3FC877A5131F03B55955BB97D365E366336572BEEE
+ 2EBF27A4248E84BF2F60F931459C3A86D190020FA036B7C4483A0597F804998A
+ D7643F8AEC809E207307331D6A870B1A3E12EDC75A3DC0D8BA43979DB5D23E00
+ 5AC77313C31CA09AE22120B6A651615EDD6EB839E2EABB552F710B0A1781F4E0
+ 43891FE1CE4D6D138F0D2065764BC116D8EF74EB0F066E62FC3C762189324E08
+ 4B6C37C689488D89A21B4F6C37386F730B6B45E371E452C3002CC0351393BC6E
+ 45D5B03A73655B8C383DA18498C0E0EC76F63CAD1D21D7233E1182EB7CA7A31E
+ 90A006CC493E9A61B4EE692198601DF2B7744108B87E1E898F39838B39353117
+ C29C5AA269FF095EE9EDAD16141F29F621DDF196B955BB0B1176D5A16E58ABC7
+ CF8F2B31BF9FC5DE29457B7E4B6B49A65442D118C90A7F19E3C3A8F9F519996D
+ C23259B930C2D6D9A5EA380ECB69012093668C0060DB2C39A4400B6964B632F2
+ 8CB524321D42866E84A85D6167A700C5FC7B8CC13577CA80873E0DD8AF716CC0
+ 86515B8B0D7E2851DFEB2EDECB11EE2C5A88925B7C87E21E78C7F3C102C15AD3
+ D7AAF4C82E2707D82865FE3C28B4BB545CF56EC39F213D28177349D756E0F93D
+ 423662F47C1CEC5037F39AD735C6D188B1BDAB22910FA8E7C7EA852648088418
+ 9E00A4828052CF85DAA48F78280F3B0B79EFD5DE4349933F53F9A3CC5C783748
+ DC0FA603D83790FE82F9E96A4D7C1378EBA5CB6DB9F2FC64856511814BBADA25
+ 2B4B8B666ABC8E725B9761E822CF4DF07A8E998D952D60E5D4A5DF0DC3F5E9FD
+ E3161DB6E3AE23E05CB51A59E5A683BE3E1AF6D5C2E259177B3BE3D9E9FE00E4
+ 395D7483D9A7CE82D9D4FCA16C5660614FE7331E5E8C19EAF67FF77DD994AB34
+ F8D790B641C423F57C4BA0AF8ABF83E4728E689C38D547785233E413A9C80FBB
+ 5F7EF90A6A757F47C2111863FFEC9FD2588E880B63D8754983577B748F6EB1DD
+ 180249C983DB2875AAE5C385275711FE9967C571E39F9B281AB3EAAA04839CB6
+ 0606743763DD3AFB937CB08D4302B4E002DF880C4394925680E71E3FDA606FC5
+ BDD3A5E8E32E3768F499C4B6E328817687D7C3265043674EA512167E0FC84905
+ 7140CCA184C93FFC0DD94F210EF0BD92EE5CDC44F1C3D76A69DE887B789589BC
+ A2931F18758D59CE13E56BE85F453E38F898EAD257D8C3BA9193614FDAFB2F85
+ 605653C7179F9205CAD5650EC5EC98910A2940985F44B8CA3243F1152F472740
+ 101FBEE278C9FD2F72AE8200D486A19BBFB16253633007685871F9CA3EFF5EBE
+ 7A430B619692C666D677B2EA849E5E4172FFD90AFD398BEA65D2B19EDCBC9A30
+ B5D9F7882B9472B142C0DE898346BBAC87A2A95C17588CC9B5677054D8F7B242
+ 23E7FC30F59FD703BDD3EA36924D4386ABD8FDA6B57D3F498C5BA5AA36A33EE1
+ 71D214336B2DBFA7EEE8EF8B56E74A73954E27368A627604C5D2BEF9BC9174B5
+ 9F0C682FA0875F987737E30BA288313A0263F4FCA83473E00750EA7741F7876D
+ 2770B2E93BA9840EEB550D0349B3D197BECBFB06153E0611E8D3EBA715B0E109
+ 3A15224A6F453F3A114DAFA24BE6FB8B590785898C72FDB15509A8E67E6FEE1C
+ 0314FE90A759E22A0762762D6607EEDB20A0BA045841008A2A873AAD24241010
+ 1BC2D001C4811B929E9B38C123944015E0B229184120256AF3FA36E0D8E37EF5
+ 9C587A2DC95EFB87AD768F37A994D9C086CE7BC706C1F324CCAD295C12CDD7CA
+ B989B6AA8B78EDB4ACF3CABC4649408F8FCC21E5B1CB0788D21A54D09AC38B6E
+ 36EE86557085B0B70087FB9892929FB2D16BD9BD25333D3065375FAF46BAE47F
+ 6784CFE4D38249BE5AA143BFE035B161905A30E66C416CC67A0EDF9C26881FDB
+ 9B65FFBA507293D94F9E245AA9E23F458244E9CF347A8F4BB2B3CF19BAF75687
+ 47BC0628F06615CA688566D3A0E353EF245B75B5937CE4DF25191717D26E4E86
+ 37E58DA4EA5D96A37314FE2199907ABFDC8272BC55EE53C8D4AEE3872B1D4809
+ 8F3D00C5802CA3C0F366EE9E4C87978FB4A84ED7F940255EC78DC9EB25A40046
+ AD48E83D25F40409EF4B31A6C70EB590DED0A97E96C055D26D5053D8ADB377A9
+ F7213E4691878E59BAF8C81B81080269915F7A15E3A4717B52CA173EAFF849D8
+ 2918765062C165229717EDF18C99AC95EE5A23B3A217D0486F141F0B415BC25B
+ 8C45C27F17B99CF88F61A5FDAE9A8999FFF087E1E2F5D906559BC84763663CE6
+ 6C3A0F4688AAD525DEB4EC27D4239CE5B7D64294EB83681A5B195DBC7FA85818
+ 72BBB598912EB60E9A0D344FF03BAFBE34DCABD0799AD8603688072F47940F75
+ A04528E7D112CCDC0C8ECAA4DBDFF282C1DAED3071E8810315FE12313063F55F
+ C4C534BD59C7A71641B254DF56D8B7B5DEDE1ED98AF279E3D5CD304ECC9611B3
+ C4B93C903305AE6A0CF829945720E1505082FC647658E6756155DF13D789AA2C
+ F9D64E3E206A7287DA15ED6BF81FEB875C47F71997AE866F566B8DB78E4F51D3
+ D885546A8DFA34B571DA57BE1A9D0F964DF6FFE83A377519FD52EB49BB7A3E46
+ 1CE84666EB6078EF379F94716680DEA7F638361A76F9E09880C2C67460A05B7F
+ 5F29905B002D5BF75FEA21475FF09557D279E1B9B2B804338885F6F3C10190B0
+ CF32BFEE2442A726F1A7B5DDAB9E12DB947A138BCD937F5A8AC8F08058060D92
+ 486C205EBE9447E6CCEEC01A542AC65F181D8CFD5BBCF207F9B4B33CFFEDE20C
+ 9209AF230FEFED02C733098F1B2F66EE0BEE08CA3E40FF522B3DBFAD5DFB38ED
+ A90D3B5DE4C7FEDD00EA8AAF9389DECC7CECD2573C722350D1E2938DACC127DF
+ 649110203363C8123BE96130C2DBD26D93B06542D84AD5460C604970711DB26E
+ F5CE4831FA30CDD65E81D630CF731864EDC54A0961DFC93F7EA3AE7222426C71
+ 15BD61288D8183991EB76356D60073A6DEF76C943D32C75BE822247B815605C9
+ F72551786A90E41BB2651D5CBC0B36E483C6505AD87E32308F26755CF2BBD93F
+ 398D7CE6DAB6BBC4CA789738410837AA41DD965D5B342C2A9F0D43D2774A566E
+ 2F12A49FE5DDC1EE6D81F55216C7DAA24F1E84F3C8E8C609E763CE4ACF07DB9C
+ 2BDAD6371C9BDD178BBEAA66FF09E7D46E9B6DCBC0FA6AB09713E22631C3681D
+ F13F4FD448493FBAB2D11DF90F82232A9912C39E8A32FD93F2D4382F6213EE76
+ A65AFBE190C8918149D5C843CB318BEDABD55A74C82B78E3520293593DF9C9C8
+ 00ACDDB2AB870DF10505831D501A627629D3F3AAF2E633AC8AAA67BD9204D19C
+ EBA6B5A3F32073CD7276E40A2E0DF6A3763F0E61190F267F3B2766DA0916197E
+ F2A33CA28C45A2CD2230D72933A8BF6211622A3EABEF870BCF1E76EF6D026F4E
+ 8D39FDC1465406DFFA351B6460BB14E33F34D548C615169956F87F73BA64102B
+ FE8000858C2554C658F02A14C8F2CB1971B391AC01DEFDB2C9258A742C4B6B02
+ D9A9C4FF022E22B5528D22501CE4BE7325002205DA40084F3FC5019A09FFF855
+ 2AA060A0353EC138E94DC65A3221716DF7FFBE026059995DD79692DF10F23DF2
+ 885799700B92D1554EFE3046736C14ADDD382C7DCC9492A534496084070113D0
+ 7BD16CA6FEEDFD337E6DFCA300F343FC2C784DB2A9525BBB1B706555E26CCF87
+ 79EA804FED46C1CCA583846B3A2094A1DE87F86F1414ED23AE27E6C19E3B1408
+ AB0AD1E6A49117C39FFF6113FF83F01EB1D1E9A2E9B07AB713631A6CCDA5CC2A
+ E16C0D2947CA0809CB67855EBBB65E9C09454591973E7393CD9037E06365772C
+ 4C0455FEAF432023C1A24C389E1F3379EC14CE9D255BB2CCD4425B8D4EC3DCDA
+ F13A93731186E9B86249462C639CDBA501A6BD6D514743AE7B5B1E998D1B6476
+ A595D4B3071FB1F894600AE44FB5A0FB63E00C0E41E410DFA125D748095FE6DA
+ 2A32399DB7E498DB005041975AD02CFF1AFF5181685A241D7D8E330FE6D7868F
+ 58D5B3A569069CFFCC6DA5CBC5311E7DB28889F18BE1BBC96F4E2EA31022F9F4
+ 8DDFDF8527A035BC739C3238758A19038C7E3C59794A03E9B58F990D2C004A58
+ 5494EE16DE37133EDF37557C21D46F682BC313BBDCED2BB5B483CDAC841859C4
+ C0FECEFD26E86BEEB714E6B59AA408072698D24EE0B8D7020532A7233A94EC3D
+ 7EF69292D683F2F0DD475D2974C21334C61F84B0380D10247831DA9ACC25BBEE
+ 7C35949F09759416F3ED07CE1BF989DF0F6E0CA44E4D051DF8361E9F3DA2423C
+ E6E350EA2292A8DD9C4D2051F05F18B573E79800D379D0440388C9B1A671558A
+ 33CE5C6DF878D6F42835D5E8681C8363DE3395A45EDCF3ACC486DE76BA25DB47
+ 9B1E5A78863D95D803E425B7E528D5C4DC9880E07F662458346E782D0AFC721F
+ 58C641D605720560470E3963A7096EF791C493F56AB38DD10EC69537BA2FF345
+ CB419003BA407741A3EA9817C6E6BA70D0683552E8D79786145ED0FBD8B3730B
+ 81BBC47031BBE3CB7974D7769845AA9C6588AA360527F8482C83816AFFA072F2
+ 63EAC0D76A9B21B79EF150CA9356F285EE308EF03FD9783B293249D41816B722
+ 9364F805B6D6620C776CC0C3CD611AD33A5602D170377F5DCF1C28A52F0BDCC7
+ 967F4317D542B83FE772A4CE47EE21C6F47D9F13C1FE381B5B1DD726AC12F3C2
+ FD673B5FD0AAB387BBAD36532396C047BF6A94807B49093E8738970E1CBB0BA7
+ BCD9D288DBF2CAE0F52223C919B28943CD97940B19E2B9813FCE9EC73E353629
+ 264D22292C1ED443B5F3AA7151018AD5452CEEDE052ABA865DE6C85C2A78275A
+ DA5FA46B25FFB4933B1B6D8C20EC326D105343A545EEDC1903E8CD4F1337994A
+ E5C348DB48C63F2B9EDB453E64F6506DEA1453B46C877B12E0C69E2D786E4838
+ BDD53635994576A1F40C71F1D1197B03AB283B68B5598E3C432E74B0DFD3171D
+ 3D7DC6A74A7423B88B56E8D776E0B789F3109D1CC7E635EBC808D7062FD8676B
+ B6740D4BE30015EB0DC934360BC8A2F0758C8E28EAD56C6A30B8FFF79E5B938A
+ 135DBD942924AC22E49858200D8673A299237D9FB54ADAE73106E26A1C11F8C4
+ 251AFE70125F65D4E2CAABD0DB5F4C326A898440E8026E67E11E19532A2BC6AE
+ FCBF84409D65D1ECC44BA4576A6316B2A05CE380653C59F44171E3A6664A6FD3
+ 85D5BC643C0E159BF21E353FC296FBC62CBE13B2CD930F1B214896FD5AC285E1
+ E1940181A9187C38A49F1C093D9034ADFD6B6718DAF726004768529F1CEB6B03
+ CD3A71060456ECD4279FB292A06372C6BE08E8E6E2A98F72C1043E415766C150
+ CD269DF9D96BDFCE8145091269362726B968060B27C979B9F24E3872F84D6672
+ 482BD93379637E1240F63BFE7C981854143D8F3484A6E8451F6FA9826E1905F1
+ 98DAF11C118844A167A6BD9F40ED001279B2B81F98EC33779B00D1CDC25DE3C1
+ 6F0F43E1D6029523098171B37ACE72F4DB36380BD02DE4D8BA11BA84D12348B8
+ 20E06708F9D21078D386F6B44976A3290E7B2B79269E247F384797EB67109110
+ 24A9AF5032EE74DDAD9C4752A5B5D99FE03AF67E6C338B8227E22220323636B2
+ 1C859CA9F96348890652EAA33F66839F1B477F86F10CB7E07CDF17732A9B2C5E
+ BFCE1A8BAC98310C65327B6632F40BFFAB20C777305D80D2E4B7996508044472
+ 76D82205683775AF5601C2239103D8C83FF2E32CADCD7BDEED833EAAAB5E1AF1
+ EC3B65901E0E2D7A4B188FAAD412F82B06E10B04AFCA8376B31E91C0FC6B9AC5
+ 3181D28E5D23D906AE2BFB2F9404AC35CA4CD6DAB8E4CE02CF1C3D5CB47AB5C8
+ 4BE2BCFF4E982FF250CAD21A249E527572633B469A26F94B0821AFEFF892071C
+ 1ACE39EEDB2F18D77BEA79BE48A90CF683700DECB389F01C1E92970D37DE2CDE
+ 1EA1C04F3C473E852A39723DD170AAF6BC7B396AFE66EBA91DD1B20C00ED753C
+ 5F9113CDBDAE8D895FDF7FF07C8749EED675ADC8604060A9934BEA9B36F12C96
+ 229BBC3100AEF025FC998EABDEA53DBDA4C6C9577AB394A970F0DA35CA468B21
+ 65DCE1B21655C144CEB15E54292513287013AD272FA06A2337E89DDCF8D0E47B
+ 1F8861267DD170062A894C4676415E36D1D10D1F81E7EA3FED2AF40C47A4E4B4
+ 6280DF676CC394C26A3B79C2E08FA870F35A38944551991C9C0D59E1024155A5
+ 9BC80754C1086CAD333EBF4B663B0D34D6EFA8FE7D8AB5B1E810FFE088E72A15
+ E5E6A41E8704031C07375698648642FAD86D73864F285C82241DCCD3E3489FC7
+ 80CD572C038811F090AB5E2702DCE778AA9310104C8156662472D63F7B90C8EF
+ 7305B63329B8D4093465F12AF9DCE60DEFB615A2469D167B3F1D9018F07E3458
+ D1DB0E2D971DFEDE9005DE802A9977C95DCD45879A7F9F5E7E7E784AACD482F3
+ 905DC0B448B0C03B36C3F77BE76883337D72C8603CF4A8160F1770C76868053B
+ 4ED1A23F49E290878F0C2C7BC601DCDE889F06DDDFE0D712C988165C8D6863C6
+ 1B2CFE234A56A7874AC2B0C7E605B4B07FDFA794007D3AF81DB54892BF5AECDF
+ 83B354A1A8DE7B7628C1B203DFDBC7ECB23E8B82AEB070D33D9A919A73CFD907
+ 217917AED5586E4013BAD3520172E529027B9E118D44DA6147AF7D03139B8E2E
+ B58F7FC673BA5839F7B731E73C3188FDAF0D2E8BF78BB5D20929509C269F21EE
+ C70AF89A32A2BAAB37FE3DD35AFB0643919F16DC0764C0CADC13F1E25A966DFA
+ 99723C0693A397DD6A5B680205190C99B764DE012C9F8CC94F4A021F157D374A
+ 8DFBA31D424E56873D70BE7194F5E86755CEA66DE22FC193BA571416F94EABEF
+ D8B32765F7EA4A66B909B30078E739DF3B580C8FA54CBFD922686033B326E64E
+ A47386D6A3EAFC69BA8E59F215300EB701D7E42C6B4C3C033591E9F897EE524D
+ 8C7F4ECC3ECD7E2E799E5E36E269DA26351D7A4B0902141088666D8381B7C3D5
+ D2FE41DC9414ED16E8C44FE372B979D95B7C28BF92ED03EA0670ED5B97025DEF
+ F7ED41EB8EBF32A2D5F4EB373C659E7ED1FBF629F866F0E0D7DBBBE3C9C0B451
+ DC3E52053D70D7A2316F7F6DCC6ED493CDD570A28123034EFE99055401124B36
+ 026E607D79403AE2DE55C15FEE3E5459116F992CD418C233EB863B1715F56BF6
+ F75B1680CE0181DBBCECBE4C7B03ECC3F52F7F958D369F9A8251CB22024F9168
+ 3E3B8CA3DFAFD5DB06E29EE4468F4307A9E837CD59A11B6431F51F25000E57B5
+ BDC2B0EDF656DD992EF3A091C1FCE394EB313BA59E72D4B1DA4013A81E73C8DD
+ 8C66BF1B413AC8B8789AFFD2C12789CF05D14467E790A949AB5CED14C4C5AA90
+ 87DB3623014ED4375691729A118BE264E6A623510615763E63B9B9E10EEE33EF
+ 341686A4D06AB884136D98C466BF89898B61E6083C37B11E289D5E25FFC4E8D5
+ CBEF167F77B100E93022A005D1A51D25A8E1EF13C8B8A48361E665F711C7406A
+ CB62492EC9D0B57F64C1D05F8B9C440A792F659EF0719C66383931C4E958F51B
+ 3D820ED8A46935ACBA7D0C8B0F52908F875F6CBF70DD975B460C812DBEC5EA42
+ 375BDE1C5EE39C46F1870800E62487E76CCA03B049B4608A3FC6AB82ADEEB2AD
+ D2A085607AEA5268EF6D6315F7282DA42C0FE427DB125C63AA81E5877653590F
+ 5F0FFECE21B120EACD3F78814B8E425CCBD27FD52BCD5BA829562B111E44A380
+ 50D807CCCBD63B01E4B5A8CC7B93047A834BDC174A4686241EE64F034399441F
+ 4AC6D0860FFD82D5854D2B8CA5A8D31B5194FC5FB11147867F7426D4E53CEE6A
+ 36006453C4F8F42B36451C5B00EDF22224924AB250067391D6ED9A041618FB5C
+ BC6D78FBEB78645352AD8685C977C5DF46BA199B5A8B1AC06CCF54425940B854
+ A44A40F18FEBC34881CFB74EEF563A43009D2F7E32EB762C8146CE24FE90FD75
+ 372825EF2B2B85B52B0FC6E7F3371DD2478FB8C89691F20E20A5732E9654A34D
+ BE8D42195100559A516D4530936F96175FFD77AF5C925A1430922BC08B4A4A65
+ 398F6432CF15EC35468E6C73FBE17A65A68E57CAAAADCEC38D44E55CEE3A1AFA
+ A205CBB209F593483BA7017A9F10C89BE371DCCEA0D10D893C5CA6E84B61CE1C
+ 8C8D9AC87948B9860348FC135BE02693B76A9ABD5D498E599B570DFF31930197
+ D0C45C50B67F260DA083302700255D53FDAA9B33BDBE5DCF1938ECA1D3C0A17D
+ 3FA5D78774626693F373EA60149CA056095F79EBB9AC530B0F57E2275D08EFB5
+ DAEE706BA7E4307C134639085B2D280FCE8785BA4F28AF0B62E6221601F76730
+ 82E3FF0270A23EA1D0A0AD6BB7422015E7D6384843A1388F6B960D99455DB40D
+ E39E0991A3E6130553F5C238667E0A0891F305614F1D56984B7A0EF7943194E1
+ 63BE04308B117C728F4AE9B2D1B310071960924A9000E8CCD9CDE29F8A9EE902
+ 3B4BF25BF7FD6A32FA5B14414F4F6404224C3581C78AE15CFEF8E61CD3F56D8B
+ 74EEA1D132226959FEB1991B32EB4FC19FFD7753DB4671396820ABE615D6EF98
+ B14FC0B652A5EE06925F118C0C808C9839E35E93E5C5CC44CF22383AFA861509
+ 1FAF610092BC2F91F297736426CB3D994AE906309A4E8EBBC7A3D4F72E5B0867
+ 050FA89AC58BEE9C48E8D3DAA5926EF41D432D5FA6F0DF73DBCA4CA56D3C90B5
+ 520A3FBDDBD9A6D810DBE696D1ED47BC9A216118F892BFFC94E8354649B90227
+ C3C5D6E4F8110E232562F0D4683F5808FB67D905D6C52494CB2F74B6524DAD1B
+ 04294BADF4200FFAB7D03E533213DB65049CA91391140272A96827995EF22054
+ 496A870872E61EBC7DC983903EACD242E3B16349CAAB710A504C1B1BB9C10CBA
+ 908E8D010425E692E1EE7AB801A8AD98333AF11728AA392E4A5842B73EBD186D
+ 4147772914F68F409962B30F9565E50A6D430BA4E72C710498D6632D682B4909
+ A90AA06A9CA1989B3784CCE86251A095130538964C1F5AA447815377757BC6CF
+ 98867B28B1E795F1BEB8385AC0BD328F8EC8F2B579036CC6DE26BD3D52334062
+ 7DBAEFDE1BB6EBEA4F3FDBD0A3117CFFDCE71241023270193096745C84E38108
+ DA5860528831292DCD5660E47D032CAAAA85EE483ED229891B132951F1CC8B65
+ 7F1606A289E19BADE30CAD3791FA53A2C81C385880B131B748A6C99AF70300FC
+ D323B09A942A0D23C51C4C456B20D84248A34F98CDB7F6D98F5CE1BB978BB6FB
+ 4893173A129B6489978B9BB2FDF9AFBB6AF98432A208EC1B7DD819A40158B21F
+ 6173D7C81B34D73C71B40430A0AFCDEBC3452C2E9A3C07E05A16A752752EAB0E
+ C2C262F2F5494F1B8BD6C389D46892930DFC88041BF6A573EA2303A1F2C19270
+ 9E8570B73B1BEA3DD53A1C235A39A81A79D49230D29B6F5A2387D53597990FE1
+ D335EEA55CDD334B7F517AB2024070CA9D70EE812F66B9D0C0B496EE57F79541
+ 29FB401FCF56464261875430339F25FB41E7D5FE9F951547162D0F7D57254F35
+ CB8AF3FED043D5C883000B74A85C1FD2A025BB1018D867C151BA8150020C8DCF
+ A772873547778E85D8B3962E2B6DD81AA98C46274EB2453A319354197AAD2948
+ 292AAD3C6B50FD4777276B176E49AB4921D27A5F0C5AAFE3AC74DD77971428C1
+ 770941C5C379230048C921D1C531F6CFFC3ACAD941FB91EF3DD0A85035C2852A
+ 12F903C79DA9212315A7484B4656C8F57A6F121D0A56A40AC4D82712F18FC896
+ 0D4D2CE4BBA7B73537DF7A2BEF3B5B02445C55BECED77733D7F3976A9E34A549
+ 17565A922BA179C9DA7E7AE3E6D24DB2119FBF593D71B9FF4020D3DC72B7466D
+ D539334F5935A29BC9FF1C4F32799ABEF640225725DDF17146A53A5B7ADCB8AE
+ 4937B79F3C06014044EE565DE78BDF50EF57249A68071057D2DAFCBCECE60F81
+ 3B7FA346A65ACD854F537A06D0E33EC6A819894EA55A70F54244EF4AAC046683
+ 38F8A4D6A0455B862A499E67DA355AACDF8EC9BA3D46AC9F605143360A4D6935
+ 5E720D4B8A7AE774D0AE753110734629FE2D062CC379FABAC7BCE05778B61133
+ 6E886287072670A9A21412B7798AF15CF92307920875B313DE998435EAD42497
+ 28F7972E21A9D4078F59497F74ECA4DBD287E80D0AFE349EAD8EDB60FD1AC6CF
+ 81A110AD2EBA71643FF993BEB118482669EB56714A4A530028154AE5B78F35F7
+ 5E99B19CA34BC49E87B7961C5F744ED168CDB11474B06748EF15635BB8108BFC
+ 6EA8EB32BAA5530CC45FFFFCC866F8BDF6590A06524980B4CA5AA264BE4ED8F4
+ 4E2ED8A413E14E75B2F41EB764B6B664D62B7EC06B0B1D1978A8B23D32BC9B29
+ C9840FD20B7398342B00CD3A7DA263E8D6FAE106E8B456A90947B821CB54C3F5
+ 7CCE96C4D2A26FA6AA484A94868647C50250064FC8969B4E8FE0C558C71589B1
+ 2B42F85A1D7B2A73C53E2B48E82199A16763D9325FBEC8B77CA1E3C46FAA625E
+ CF232536951EB3F32916EF7BC2F28CC4D5E55DD1C130245839871472ED165A40
+ 8C2C80EB1C653E2C013F938DEA2AB968D563418A2E89C3FAF9585AE467B952C3
+ AB1EE682651D05496C491982C77D6CEA695DA6C4AB8C2AF98D02F7C33CB4EA71
+ 8601ADABF0BBDF22F523654000FDFCF0132ABB1DB461D144A970C657B9BD9EB8
+ 6387361D2E77D4B71258001D0521491CE014C9ADFD38A0F1FA7D3C4861E3F307
+ 390DE5F5E569D08D6199487F04E2F518D82EEB4D0B6CB63F75AE436474612AE2
+ DF7B3369BE9495A13440DA128F03D88CE9276F55FDCD4E378231634E4A15A2F3
+ 09CF30D7D20FB18AEF6FE8BF6B86AF970B78C0A4B9CD8A32346AE0759EF863C3
+ ABBC4EDC6CB328D0271905A037C27A81FFF41C36461B7B73EAF564E869D40B0B
+ 6241E967F17B6E9A574DA4E5EC905C960A80DECCE73D20B59CBBB3F049912020
+ A39E917B3FDFD8D152F998E2622444F68218D02ED950CEE242287F6CF5DDFBF3
+ 82C5F6FB17C193B842E1CF6BEAF4C836F6917D30FA443F28CE34EF42FC5DD9E4
+ 35A347472CEA5D19A4D75A5C2FBB3317DFDE62E065AC83B54495CE3FC5537214
+ 374075CD14AA840C5CF1A4B1A492D374387A736FB943A24189252A17172E4EA6
+ AFD9CD115F1D4F7B165EFCF1AF65C2F610A11E29989BE73EBE2B7A0CFF629950
+ 7028FA58ECB24BEABA62BB5E4737D20A85DA27BCAE3A25739520110C497ED59A
+ FB0AA2AF626BCA155E58FA1F05797B773B93BA544458EA06A596924F8E0FE66F
+ 5E52B8051B21C21D582C931D05E9386C9F8803F53E5693FF9542D04FE1D18789
+ 1DA6F9E8C52C19A4
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMTT9
+ %!PS-AdobeFont-1.1: CMTT9 1.0
+ %%CreationDate: 1991 Aug 20 16:46:24
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMTT9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch true def
+ end readonly def
+ /FontName /CMTT9 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 38 /ampersand put
+ dup 40 /parenleft put
+ dup 41 /parenright put
+ dup 42 /asterisk put
+ dup 44 /comma put
+ dup 45 /hyphen put
+ dup 46 /period put
+ dup 47 /slash put
+ dup 49 /one put
+ dup 50 /two put
+ dup 51 /three put
+ dup 52 /four put
+ dup 53 /five put
+ dup 59 /semicolon put
+ dup 61 /equal put
+ dup 62 /greater put
+ dup 64 /at put
+ dup 68 /D put
+ dup 70 /F put
+ dup 71 /G put
+ dup 76 /L put
+ dup 78 /N put
+ dup 79 /O put
+ dup 80 /P put
+ dup 84 /T put
+ dup 88 /X put
+ dup 89 /Y put
+ dup 97 /a put
+ dup 98 /b put
+ dup 99 /c put
+ dup 100 /d put
+ dup 101 /e put
+ dup 102 /f put
+ dup 103 /g put
+ dup 104 /h put
+ dup 105 /i put
+ dup 106 /j put
+ dup 108 /l put
+ dup 109 /m put
+ dup 110 /n put
+ dup 111 /o put
+ dup 112 /p put
+ dup 114 /r put
+ dup 115 /s put
+ dup 116 /t put
+ dup 117 /u put
+ dup 118 /v put
+ dup 120 /x put
+ dup 121 /y put
+ dup 122 /z put
+ readonly def
+ /FontBBox{-6 -233 542 698}readonly def
+ /UniqueID 5000831 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+ 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+ 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+ D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+ 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+ 2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E
+ 2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279
+ 650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35
+ F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A
+ D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E
+ F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1
+ 4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A
+ 438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD
+ BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B
+ A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641
+ AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74
+ D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB
+ CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A
+ 082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980
+ 9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0
+ 4BA1EBFAFDBEC531EA13DFBD6700E53818CE04D23886B8AE75DCC36BCD3189B1
+ 0D55FAE27D0D126E82AEF31D7B5DF27E58C30BB0867D6D7AC1DA9EFB8A2DF095
+ B5B934A68EE122DA0A83B36C952431586B957990206194E89339048AA6EE4C53
+ 703763505ED57C494DD907D0EEA04F6B1D4C8F3BA778F4E7AA832AAB4D75F024
+ 61E91C6D25FD6823CB24FC863C039F7DC5A62670829DB662947294E97098AAD0
+ 2CB6D2C65B305A8CFA67CA007D2DFF37D7EF29EE17FC6EBCB67212B0348FB36B
+ 525CC3D3F55082CC94BA97BC3F13301E3032E05DD843114DB07C3351C277BF7B
+ 118D1A68437E20997363F8BBBF3D346A7AE730F10C12CA1B6FEF7562B902E215
+ B64FFE0525850554A7769D2DCEC0E022636BDAF5C8F0BB65C91F74F957A12A67
+ 44244F83543814866A5E18ACF0FEEC7A9E8EDA54A416A4E6C11389D7FA04D9F0
+ 1ECE13C45A1E525533C19DF0EACCC29A81FE996E86E1AFDA4A6B2463A16E59AF
+ F29A7E06DA6B092E5C791ECD4349DBB1DCD8C6586F602C4B4E2A360B49D0F303
+ 4784C0D46E42E6061995F1C52CFE73ABE134E1D76EFE40105F06D520B6C68CAD
+ CB72F0C929BD301135A2805ABC5AE377FB7E7A49EEE8282CAEC0A188100D077F
+ BA2493DA11DD71E77E6670AC87B8CDE838088E2DE0773F695BED4C91C94819FA
+ DC76B9851E3D15DBD50FCEDEE2F4ED733E0F319826A44375BA96128CED3A6FF0
+ E2D164F1F3191C1A5294CFD83C08B2DC146F46767183DF45661436AE1BECF54F
+ AA3BC8D0A97F825142DE22F956B903BDC4EF2CFD7D120E27FE8DB56142FC2619
+ 0D32B4D8E1217B9E6E29C49757FD7E1D233510A054CC55B6E5AE575F1AD1B3CE
+ C320EC53E2E394B7CBDE430BD2D3ADFFA68E82FF19D3A19E11EF8D15FDB4CAB3
+ B094BC508615A19F737EF1873BFC92F1DFD29E7CD80E3560655D108247466754
+ 701FDC8A18B2A845F8327FA70B3D71F18C90EE0B27AA073805A935338549F141
+ EC975C6B0530CE239167F88DF34121BA1A36A5FEAE36E0218002BD854088FA0E
+ E0B4CEE7298DC373D37C52DEAF117B823D67620C1CA0B5313950BF6585A81793
+ F10DE02FFDA365128186956746A17B078E52C643C74AF0BD75D21C42504F8FA7
+ 2917C1C5BF9F5B2FF2036541AFF059DF4DD49BBCB7674E5B0373DDE2B6C4033E
+ 9D43B00287F3F972989CE1B61BC28549624EA826712953AA0790E6765E5DA036
+ 9482C37D40E710F46FA1EC1104075875C204ADAAE3E20A35A71486E4FF6A80BC
+ 0535956BD25A96863FD29594552AEBFFD47CCC644CB685993386C81931D98EB2
+ A6F237D1EAB7972F64A92ED227ACA79D04D10FA234087DC13884D8D7D327932C
+ 527F83AA2A3A6C58F88D3E9A509CA94BBD62145DD961E670A81B65102944F019
+ 256BCB0F783146916329E6115EC0CFAC3994301C07C79230DFD1903FED7F232B
+ CAE8DE1D5EA06147C29DB8670276025B2F6587E95BB5689B23D89E6340C47170
+ A286F6C75B0B796A4F07AD4973CA5D937E64A24307D8FCB32702CF14ED13E7A5
+ 01A9C32AF36BE886504AF56254E725F0F1D7DD0666CAAB20EC471AFCA558EC02
+ C6730DFB0D05F0EDAA19A6A4D75743D940B91CCA51E684D7B778D1E41CF2DB54
+ E4026754EB62B83E5F6F4586B322F7408933359E9541278A4390358C6DC591DC
+ 036196F07543F2A4DFF9C619C2F0C6C39E6AA92F3B87B32A701500D767137B0B
+ DFDDFC4EC3627D5A940A7D54EF3E44EDD96D0B94B4D5A32B67A5D6540D9BD83F
+ EC030CF7E66DA71A2C81CA6959489879D2BA2F7996008AE1E8E5AFA547422C25
+ 9E14A11BD48C46A7EEE0CDF9D8042E1A98867216BE921EBBB42F9C2AB356871A
+ A1810C9E61FC5AD9E2D6C5390466FBF033C7564E66DE41AAF0A6652929A528CD
+ 9C1DB9AB85D494BF5539026BEEDC9935DB3952B9A4969790FA8FBA6A4D94DF64
+ F1A57492B8653C49F36B0AC4700C786C8C4CDDCF19979AF3A38A247EAEC3EFA9
+ 0FC50F9B17273FA8EA42794007F72D11B0A1304BA26371442E690AC8DB420FF0
+ 17B99B8CEA83114042FBD8E3C1407F9AAE98C3021722A28EDCAB8FD29A41A678
+ 93EB30EC003F89D742AF74101A81642E9F5DC428AD082D193634EB536F048FF1
+ 6DFB1DF7F427D365C206FF4F3A2EC8AC49917AA749A5C3E0D594F24A28D094CC
+ 624548F65AB2CE12006C63A859FEE756A1B39614C4DAE9587A10F70D6D9FA438
+ 997E5FC9F90915DCF1B0AE5DF0397B542A072A5DCEC2F109B8C2758C540069E8
+ A34C98FF7310A1F3F641AB4BE9EE04E65DAAE1B1CFF6F3AF398BDCEE1E903C2F
+ 9F39246F386F01B4AF37088E4370716997212CABB20DC9626FBC477D66E09E36
+ 240D3284A5E23C49F60A024F81D6A1DA2A3EDE6C4F02E597D1E45473E89D9D33
+ 048806C057F350D8EE29C39FEDC5C150319B17A9751AF662483716FF9F96106A
+ D42E4A682F15F559731405BD90D61C03990EFDC3A890AFB1BD36320006739A7F
+ 6BC496A0B567F9AE1FD9A5E33E35CE87ADDBACBA94DAEEB0A2A688B342E387CC
+ 75667968EC7561E4AF3A254ADD659A4FA80639A50DDCB49A02D2C2714A3E2616
+ 2A53CB46DD515360DFD39F38E914D3E91A8300F7B4A41FE02CD0ADB5F6E78435
+ 7EB82AF4CA6B375AD08ED91DE6BDE80A23D5316F5E47245ECD8EB0CFB2B305EA
+ 49F377A5044A60F7E00DE509863C968BAFC38CC58C21B6DF69F116110E798D35
+ 343B836976BE9C27FF7A01E2B562A9FFD92CA75AE2B8C3E326DE467D8EE7AC11
+ DD24A80E12B0D332883A3561C5525F49A81B74FCFDEB72DA662EB49F70D52414
+ 3B15B24ADE8D708389383E218A3CF5332F72C60A49FDC2E169CFE32BA933F55B
+ 41DFA80DDA55614E76C99F66B3653573542AEFCB297B163EB934FDF4DD78EFF3
+ D6C8A5994C171E7CC90DB7226824EA93D61EB874F99438E366A62E08389D8318
+ 00EE5497CBE516711522AE983E34787F3896A8B12B626A25FBEB2AA517C5776B
+ 82751047863EBABAA42735B3A54D4CBD60325188B0A8AE7D1F4FD7C8ED6FC58E
+ B79BF1D070D0FFE3B4B49F30C3752E593372DFAC7BD0878199F6702DCA32D711
+ ECCDB9468BDC86F25CE3831A2810D9B5C6106F9A2F327E5E424FD3590A5565CB
+ 897C4D137939E0AE92CD598DA805F69A09E9076647621CB57048735BB695F6D5
+ 82312E1C98714559BC1B39F7025C5351B2B822AEFAA5EEFCACC836D965DAC93D
+ 2F2288B2FD6BCECA2E7A966298833A856D17EA6AB3C467E4BBAFA8B3717BB1B6
+ 3B52C0E451E689887C9DFEC85947549B9A491BB2E992A0A2F69000BDA7F803C3
+ 443782FDA1BAB05C2607CC8F51F9334E346CBD617A1654BB8EC71B6474D4941C
+ 1933C866C6254795325145E6B0CC8F0E7D11F5E8B82C700F1706922E355FF082
+ 6BEB734F9AD4ABE72166A09ADA53A318A5C239F01DA3F46A9285DA40B70575FE
+ DCC60C6599EEE8BE5EE1FC45464D73B7856BFAF466CE405CEF0385A80EA89729
+ 8C090357C23A0B6EAB559695B3362F031B81E7A5EEFCF7627940EEC50D4C26B2
+ F5660140F0924D21FF23D5470DB4E3B411051461A6A839906AD64C3310D45842
+ 50FBCCDC7BC2A889D7253AD28CB10CB108605CEC7BFE1818B537AC55A898D489
+ 931A2BB1BE06A909124F519093DD724ACD2D25A2BAA22D4248FA6AA513FD7DDC
+ 879DE22E5F594A86AD54E2ACB2B0D2D30F40DF71EAF1C74DB99BA41A2C0B91A3
+ 7D001C0C8557F19D6FCBE3B636FCE8EA0F8F1A3A04F2AF3343805C6B7C90A70B
+ AF3121BA2C577FE6AF882571C08A9D2456017A1A310FAAD167877FDD88F5DEC8
+ 1844A2667144105C1DC6A52DD3C5649F3546C426B4348FBF8F16806A05FABF5A
+ 86D8050C438924ADCEB76FC7FA0FCF6788A4098094755F321AACCE2F7B5C1678
+ 50C867B5137BE9C289A19FFD6A9DD34C50F2A4B32D9E864CD671BA55F3D95A54
+ AD43B3F3700358EC5B0F02BDA92985390450520E81720C57A143D49E331375B3
+ 7A41C97BA07B8BDBB69AA19D7D8CA00FB2D1B40CDC404EF0CBDE097829380EEC
+ 5EAC199BE2C019E406C5370C494775FF8D55066BC3D0A18F22A72F61094CC58B
+ E8A7F7B599A355714BEB0B6CC5196F99A4EEE49F178093E4CA2B79D50C40109C
+ EDC7452D1724203FF5AA4A9002B2353A1A87D9806D7ECD84007CC3F134DB68B5
+ 794668CC4515592A0BF44B2D213C7C190BEFBB1D2102DEFF59E9EE20E24AC7B8
+ B95095E563CD60B55025E414E52FD062B336EB26C4314B31E4400534E5BC6295
+ 0EDB99ED2666EBC51EF1223EF00A125BCF500627744AB8E7F7A6D16EB24F34F8
+ 52ED04A3E120CC01A1163FD4498C0173373D45EADC5CD3CCFF340BCE9D3052CD
+ 5AEB2E24636442C348ADDB76E03AAD92A55C9C1D5C69D4438F298C0F879AE557
+ 17F8961F9AE722F86CB055210069B61FFC28AA647B6CF581FDD63D2834CA2862
+ D66B272E0F9ED09346932500BAF70BD90E5F1554D82B8D8630B24706833278ED
+ 3CDF8A84F0075048D6D58B0E43A8E55FFBFC1F334ACCD12490DE4CA55F4CB9ED
+ 8B65D23FC919ACB7E26FD2E23EEDA5FBBF534F487EB4BE571287FDAD1D435F02
+ D05BDFA28DCD709A77E30D1C1AA7648C8AED347BB0F4FF5BF4C8AD4CE8386050
+ 512FC3E8BBFB5EBC9EC30E92B84A9337044319038E13CD1FAD994D68B69FC87B
+ A292CBC44BBCCBD9681E83DE63FF0D2F1AA4B6C95571091BC5B3B58D0413650D
+ 2F89A524DA42C4CE793B30F7DCC1809E6A3CBA858DC6FC2F4DF2AC0DA7526CFB
+ 5E7EE52DE5F9DDC7CCEF2CF99434CE2BAD7EE9E035243470036B0305F249C92C
+ EB42F5EB395C5EA5BD28D027C86A1A3F7D0BB08E20053CA1D1214DFEE8FDD4D5
+ C0C2830D2AE62E09144EEC23C43DF9A944989A69B7CF70E690EB103CFDEF3145
+ 60F3FFB40A1FB61FB59E22434C9610B00306D629E9C11B51B43FBD44D350C788
+ 4C38A13319FE9FA8BBCDD8DC2D5B14BCFD2B754B99E9AACE579461D2222F04CD
+ BA060E5AFFE981FFFC27C5B92DEB1B4970B0EF330BE1932D680158EE3BA8E4AD
+ 75FE2F901CBF17073796EC2480A9C4A8D9D945BDDFDFC1E397176431C55DDBC8
+ 6FF0BD7B510AC9800F1FBB72EEA84ABCA4B57FC915AD32E2AF63982AEE8D71A2
+ AE2026DE5488AD41C596300A4E4500FD51CE6841C1F6D7B27EC0BF90CEBC51F1
+ 2B0372FE8C2B269A9EF9D51046FF8F33C57BF8FA1F13BC1D33B06C3DE5822ACA
+ 01C08FE76A0F7FC7C94E16D29835753AE21B9F28834E86DAE055961CF2B72216
+ 4BF10CF279110CD1A8AE0B231B46AE9B65AC941E447019485FA9360512D46DFC
+ CE2C129C65B5B989390EF7A7D844AF217B18E741A1EF70694868AEE850E07333
+ 3160D29BB5163C81622764BE777EBCB248D926E7F18053087399380FCEE1546D
+ CC4F9EFB380B29B255DE9EF531A738245FA5E2B54F0E8B263251FE824DCBF1F5
+ 146CC501C7132D3E914DA35B98F2524EA37D77AC508B4694C9D92C44A823F598
+ 905AF2E4AE9E96D7AE0E5D25D52A00C53FC651E0418B99145FFCDF92D55183D0
+ 44699EB5196E10A2FFD194A3235A632D5C40114EC4CC99C85565E44F7BC69F2F
+ 7B3F162FBCE8F00883DDAE2EAF985DA5097FCFB1909DA5ED61C6252C1C621CF6
+ 55A4DF4A6BA97F7B04D872ED147683876DD2A9CBB53441F5AAB1B0119E06ABB7
+ 6760CAB1BEE5CDE130A5BCEC4EEDA64A85E4131F128808EB92F827A42FE5A921
+ 897AD95B9C26C8B0C4DB58B8DB69F620A00C54D536827A1E23647ACDD3948392
+ FC1A3F078844642CDE062275E29E6DDF0599062A1900B7CC842B9213EBCA748C
+ B6C0681A169EF44657BAB10D7D7D85BBB67A5E8E6B3A4826EEE99BB8AB8D7C7B
+ A2E22BB65486CDA622AE4CC15BA4641100B7A321EBFA7B82D1F2118969259FDE
+ 49C43390D20AB464A4D5FC1DB64D0C3B2F3998D25C37178D255ADB2AF847BFE8
+ 25F2A57E33DCC9CD0902357C4155AD47E3362164959286195D90905C3FD485E9
+ 7451FB63172E0D0D8F54F229ADD26CBE124CDA6B9E411833BDC2160F4D0146ED
+ 2AA8ACFD34FF38BCF0E736E9028F5F97FE2D8E121800C9868AA07D689E4A3A61
+ 4D299D9CB897359296DF1C50D8C83508002DC301E390A6E0E0DAC4AF40EDD0FA
+ 8BF57AE41E7E72044EBEC2F64B9BBFC4AEE3D0366057E3EB2ABFE5451B792F3B
+ 0859145ABFD8DA0587C3FF3A7ED69EF392355188A55F60CA64FC9C409E9CB45A
+ 547F641825195C2B2105BE51B23312F3D2EBAE500312D34940AEC683629B24B8
+ 1AA15B9C5CB8B3BFCC90EC1291AE7B73D2646527B887D251874020A32B3E0441
+ D1572EE1B4654BFC6FF16579A24B29B52244BA7ABAD1B55847712DD55BD96966
+ A0867D54CF4CED3BC5E6B189145836BBA798A4111DCA3AA498B062536CDA82C1
+ B9A5EEB436E319F996CB85D10459D4D02152BC0D5DD26536BA3DA52F9D8E5B35
+ 9A65FBA277003E7C3C09FA1C21EAFB8011F041D2A556ACA56B3891D014BF4B96
+ C207A90178FEF987AC5602ECD040C2DF4F0ABB21D606C151329914820DD6B724
+ DBFDE35EC63DE9C886FF3BFC4D2C395E4C929D2DB3FFDD65F52925784D2542FD
+ 6A20F74712135500AB28ADA91DFB5B4E14F8947A281E22CB3C82B7D26F56F78B
+ 7063D095DD060806364D8A689475EAB6188E0EC19D12CB05392B552287EAB0B3
+ B3973DB3AC4AD88C7150ECFE18BCEE55ED07C0DCA021CF21EF9922D2D8E42B91
+ 962C27F8C513BCDA5D048B27CCD0068253D357A7DA2F016B90741733CABC6C40
+ 601818664176A4106DAD41AE932BE20A51D10F3B29C7C37DB7A330BB44EE7A3F
+ 63974C752FA60E4795E46FFD4AAF118E51540E745F0A0F8B00C395274BE1CCFF
+ FE1EE7068A1F22E7CAD3994C171F1AE87FA41E61BE9ED98A08AA41FB8ED50F4B
+ 6E8E57E07B67E5DBDDE663FE99B76D15DC9AA19243069ACD6122B04639EBD5CE
+ 4EAC8F8D51F57E565AD78EC16D5B2309DE99AE4C70B8E7F47F0FDDA1DB165F9A
+ E630BCC35649445061797288A0AC236489E4CE0AD9A9D3A05F9F722FFFF2870C
+ 63BD2A3DC7CEC4541A98522AD861F9E4577DD0C2B198542E35615939031031C2
+ 00AE325AA5E74FCFB7F240833B71E2A27C8C9905B1896D4717044AF1ED2312CC
+ FED692C49750536C26C5125658E0B6B2C4460F0BE680C03415CF3EE864AB5ACE
+ 17DD295F559DA6718620C96F9D681EB997ADA150DBF07E3E4AE9987EA8220AA4
+ 5A6F8A95B27A81C3C3FCAE3FE9E4BDF333B77F9735CACF8F8F9B4C4E51AF9969
+ 7DC9B6F8F6CA169E0AA9BEECE03C58E4BE50C964A71DE5B367E4471D687696E6
+ E943F251CD2CE4D078F8239F37A13236366D78D710B82728B4A1483346DB0547
+ 2D049CE2AF00C0BA9217AE60E89A82231788CC276FEB9013FA7AE521772CED51
+ A87B68997FBE8079E8FF6BBAD4327ACB0CA5D7616709BC8D0BE6B668AE8E868D
+ 02FCC6FF36F9879E8E24728E3A40B018AA5E81391CE3D45BB35DA05DBB6D0DCA
+ 0D8606A936A6CADC529A4ED19ABB940BCE59774D1949D5DFA888B8C769D4A668
+ 165E2BC37BFEA9235ADF3692C3E1B0883BAD4E8BB26875DC0C565A78B790B570
+ 47BFEE9DD998535DCDCF96E1EFEA5913EAD818A1E2538F95AB9280EA17BBCB89
+ 831C832882EEF4D08F25F054F304035CCB83F6E54B5F156688D67B2B46375B5E
+ AD537A9B40117148840CDC6CE52E9926CB9A8BFC041028F0F70C6842E62A0A02
+ AB68BC44E8A723A726E33F270F7914B34D2C3B252A02AF852F4AA7D0CDA467CC
+ 86281DA9B0996509FAAEB24BD5B6192B238D2E37864B676359E650FAA9DB1C9C
+ 216554074DF1E4533FAB9BCD02AE770BD0B718018D001BABB489C3B326382A35
+ 43CE4A84CC9943000ED74107278F514B6B8CFDA0DE1B30C35391A312F49264EA
+ C4A519CE1D16316F0FE62E12F402EB55348F0158935D926EEBF1B23A762736C2
+ E9C7B2370BB49A6915755F343C0397B947E8E3ADDAEE8913F009869F840A6491
+ 41077FFD7A82B4B48484004210A1C2E21DB645D16CB016B4E05FE819468AB356
+ D8BCBB64FF26DA0CDD6D1EEE512E44CAC9516FDDF7577C1489BD9D6B0588652A
+ C798A6F71FC5A5D293DE09899589B8B4BB0EEAEF5129E7710F5F7EA1EC86041C
+ 7F23CECFD6176E6D167DA4321000437285268306D2A388321F7B153815883B00
+ 83D90314740B7C5BD1FC85C7875EB09E6CEF6D03A7852E1427734969F75DE172
+ 0FE457F89C0BB400D40E125C38B8591C7A9A9016D3CE142EB3758D8D4581DBD8
+ B5ECC8C8EB98124C6EB870C3261D1B37C8736B9C8B614E0824908654E063D799
+ 062A0DBD663EB3382DA017837B7123FD583563343EEE51473374D7E42CB8A1F2
+ 34F7914AAA86B988E4A9A1F84EEFCCDAAA905568A60A24232D0341E2CC7B6354
+ 7B6294EB4C825C97EECF40B0641B34F8D6F8D2F0C2E8B6E69D258140BE34C393
+ 9F232BB15290C4174C142DEA4576695D285BE69CFD91CCFBEA17802CD5492C09
+ 82378220DFAE7052636FDC6C647DAF5D0A8FCE7CBD61E4ADC69163C468D20359
+ 69F97E62CE0586AF250612DFE6F676E09B22A9F461A1081323C3EC86852F4DA8
+ CD104E45843E9B4C2FC4F64DC67DCF3813317F65AAEC6950B3951D89F0E94057
+ D3326B23059237EBB20DAF8A78F91A13E93916C4E05409CF50C23EDBBB9F5C06
+ AB3ECA9FDABDF9BAEAF527F28C2D8DE1EF5E444E69910AD76A24A657B6820C2A
+ 859CD134D4527595EAE8955C1677FE80146346F5ECEB3F1649EED3F285B279F5
+ 647D9F35F4CD6711606C033CB25649D7B108BC43B259265F1FFE53A0D3D28E79
+ 570DAAAD36E320D239CC7E10DFC85C914A4EE8A22FCCEC5831BDCC7D01800FA6
+ 32AA74D63FD71F3C5B01B5EB49F5D8A8D8375BC40D4697D1D493428FB2CFFB27
+ FF951E217A98608267AE026AA8BA384F60666749B0B8C54B713C49A14C690F03
+ 86051A4B41FA4B6E75AE874506036EFF2E7799019E9006C5F5D4D5ABECD29998
+ B0BA04598065E21B6A3F3F314E34260FEA6D009627B1C33F75C63C089AB9B3E9
+ 3AC0B446DFC0DA4B044BB2432EE0CB162BC6962B2A43A6A9DAC3BFA143278A67
+ B37721A1B617F96BFBCA68ACC9EE2A102DE7ABAB4BBEC15E3C39984AC713702A
+ 57FE188A404ED799133C03591336D0B8EF1D0B39D55A48C1CDB1483D193358B0
+ C8C7079797F6A5FD5B0C0FBADACDB253287AADF22623378F60139D6B0FDC7EDE
+ 9993293F6C5F9E35C322EEB85DEB72170504F7F2E849CE0401AB76CC1B6DA504
+ A3A438B4237EEC57EF59081DD1B0E330A52700F4B9511B5F43DCED6D1B9B1E83
+ 6BC190AD87453B8BA719644DB5BA0EC7735C729A8448DD28E7BEC0DEF56C36C9
+ 3C8B30E83260613C93859DEE841502A4A87848F673FBBC8F5CADEC8A003BAAB4
+ A14D1745A50F8BA8D88883A343C7CFB90AC1F00682615555A83F60D4BE03C5E7
+ 0E5E1DC1B3AF777A16BAC842D8051D4694256DA245BABB58C66515874EA5CFCF
+ 8C3A1C39C31E3259ABF21E65A96FA38890A7C94AC17E9606BA35B02274862A0A
+ 224733A29F3A5751CBFD92FBA7C3383CB8A8F3094961FAB4695A2C23E59994CD
+ 1887637A09CC9EF65CA017B147EF16B7CE09AA81D825E6D33A1C54D41FD12628
+ 774BEE4F2B5D3288AF0454B3F5262E3562D8D74EA42C0F19AC06F8B1E412A1CF
+ 2F3B0E44C41C7FEB8A51D5F6D25A56B270D8BE758F1F2AC8059BC2CB157634EC
+ 39763DB4EA353DD77FBB95D55992CF454664CC0232C2A9A4BEAF0041354E0EB0
+ AB79ACCE2344769E60760E59B9CDB42A41ECB0637FAB26BD48A419FCD007E10B
+ F9D80DF238A4B29780B085577F542F1FA49DDE858BCF949FA6D9A8F4A1C5F056
+ F0D03764B0C30BCA0765C56858860402B3CE7D0A7F12A71DE5CD2DFB64B1C6A6
+ C2BC7411F960F72584ABCD54C03510412487C5390B6220B63423DC7B9452162C
+ B117FCB7082E135DEF50C9339C59C5BF87158C750960652D561260BB82D93D99
+ FE9A0B50C0F49D8E91547542ED1A887A6D6BEB949111ABF6DAFDEF53B9CF1C07
+ C19083CA127F410194AA9952AA9128C142DB9D191A56ADE615B8EB8FDBFB182B
+ 1C690199EAD8075041E28FC64D5CBB6974AFADEA5A6EFF0E1E5AAEB6EAAA894A
+ 204BE6239CCF5AAA301464AC1BDEB4D8FB5DBC116C764806D7495B45C0F1976D
+ DF4EAEB4EAABD481E3F7EE244615BA72DEEE72C24830A03FEA29257A41B42C46
+ 8DDB085E5DB4042B03272DCDF020FE557F878843704447EB939E42919ACF5216
+ 339D58F59728C698D9744EE9F268DD33CC14FA4D3EF98C2D7EC0B99012CC36FE
+ C8316B
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ %%BeginFont: CMSY9
+ %!PS-AdobeFont-1.1: CMSY9 1.0
+ %%CreationDate: 1991 Aug 15 07:22:27
+ % Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+ 11 dict begin
+ /FontInfo 7 dict dup begin
+ /version (1.0) readonly def
+ /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+ /FullName (CMSY9) readonly def
+ /FamilyName (Computer Modern) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle -14.035 def
+ /isFixedPitch false def
+ end readonly def
+ /FontName /CMSY9 def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly def
+ /Encoding 256 array
+ 0 1 255 {1 index exch /.notdef put} for
+ dup 15 /bullet put
+ dup 33 /arrowright put
+ dup 50 /element put
+ dup 102 /braceleft put
+ dup 103 /braceright put
+ dup 104 /angbracketleft put
+ dup 105 /angbracketright put
+ dup 120 /section put
+ readonly def
+ /FontBBox{-30 -958 1146 777}readonly def
+ /UniqueID 5000819 def
+ currentdict end
+ currentfile eexec
+ D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+ 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+ A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+ E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+ 221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
+ 27D1663E0B62F461F6E40A5D6676D0037D33F24E2FAC2B0009AD3C8350CDF8CC
+ 65BCA87979C36D14CB552E9A985E48BE4E88ECA16DF418749AF04FDD2B0E1380
+ D281BB2476BB45FF30946B247DFD7F57305FA87E50CA338121C71CDFDF927A9C
+ 77FF14CB4A1D6D80356FB1171ED38C37702350497B44E42CE31DB2F493807DAA
+ 15B887C671199A54C4C1294BC520F5538C15556BC43C9F62342B121C6DCD6C5F
+ 491DA47FF360201EE21C08A781ED0589A6DF91B99FE118B9B29E4F068672E52F
+ 1A06C514D91C4C937D4E642503392B1CD1B54AC18027C6327AA3C947049B128F
+ 7937DA22F3795E18A4AF26321DF31CD62FE5071BFCC7728983863E9BA2F49412
+ 10ECB0DFD8B999ECF57D2EEB2FF8B270D6B1EDF9FEF56DD2112F2029B9A1B75C
+ AE972F81EC4E051E6AD2DECC4503809D31F32BB9AA58FA7571C6C339A08162E5
+ 4391C55FAB6E856F5301B8327F0DD63AE328D34C060A1ECEE3568BDD0C35797F
+ 3BB8D948B8628C18C7F5ACF1EDA7898EA79C14FB5D62EBBF406690FBC80A5F05
+ 5A10608F65D6DCAA7581400429A4E4BD473C401AF55ECEAE5E77E929442F4C36
+ B1246A119D18F1B46621F5BE6A5DE52C87D8323AD197FA9C5A3F94D7D32E1244
+ 70C92D725202946AB9F70C4FF8C4CABD1D91D16A88C812196BDD9B0B652F8359
+ F2C4CA78C940A6600A4D9FE782788D14292DC25A279F3B6B2B77EC0857A7FAF1
+ E37F064B2B70529D933E530FFAF9CEB845EF2B2D55A60797828BDA394BBBC946
+ 27D1B6D23C403B576ACA214B48207F912FE718407A45CE69F48DDA6379920D27
+ BC3BD40B334C155646DF0A8E5C8EC9928F3837641DE0623FC8BD5911B78A51EC
+ DADB01F169C8B07A907067B3BDA5845EDDAD250B27091E2DC9DA79740B9311DD
+ 8DA5913D67D3F36BD9DCD5F2C02627F606CE67B9AC2F85EEFDED70746017DBF2
+ 50B9517F66A53D60E379ABDDB530501FDCFC741D5ACFDB47025FFE58967768A4
+ 9DBBA178773092FF953036583D78BABA7A08AF20E9B5474EAB780E1124A5C208
+ 0117E6EA807F416825EB0B903CAF576521804E3F5189F7EC34EB7CE7D7B6EA3F
+ AF3A8D4B66D6FBD837E30CDC68310631C66EDF1013FB67A3C76F5C50B083F75B
+ 763D71807577CF872D8DDC45A88F9FCA6948DE6F658734E19468F6D1D918C08F
+ 450802E35613BB75BCFA6E92D76873E098AFED7BA6FE1707BE867BCC7FB10672
+ F017663C4F880D90A62E3004DDAF0BD7BA50A6676CE3BD3AC81DA7842CDC78B3
+ 3B991AE3876A0EB82A9BF8EF9FC18F16F393C9152BF7112D5BE5CD14A21EA887
+ 0E6A281AD5C61A56B765F734CD98D01F998A007D03760FDF8557196EF7DF5A94
+ 4786FFC3A149F6F2A6614A6BB653AF7C214765D21E186F4D872D08279295D854
+ 57B9BC1508FBA398FE77373BE3C1C2B8CBAD09534956F4B1DA6DE6589B8D9939
+ C2708B842EA17BEB18D2A342CC594AE2455C51B9527DB965B3C162E14B3E710A
+ 2E884E81C94410ADA09DB36330F803B0F423733223F716AF6CBEAE963FF9C704
+ CDFBE3BD74AB4A714B3DA7E93C8A58600544FF38B64488123903A8D0DAF1A950
+ 6E8BE79A9CAB9EA291781CE60B135899D3B9A41D0A9A5473E05002B0A11712FE
+ BCE2229650EC61F37401B3881CE0FD015F91B3546380BEC9D0E7C2CE4C54BD0E
+ BFAD7F2FCAE4E136C1D0A248A1CDD140FAA480F587A895D4EEDC94302EDE236B
+ DA5D42319CA0F92593FDA60CB01C6279E8721C9E379E314304B3D7A29C74A59D
+ B642F213BB18FFD42CA6C242C16D19D47CE9D0D6B924107ED053BD42F1E8C13F
+ 4B6D20A2799FFE1B71801F49C8FFCE2A86AE58BA2904D832EFB5A2594831D239
+ 17A141264E4D2E6EAC651E1EE2883D71219EA66A1462A8D8B00EA4C12997B29A
+ 86380DC76B9487EEDBD5DCA6C23CBC39A0A93EF7C8295CCCA1667CCA33646B33
+ 0AC806A4EE0764517979F5E2D8162E24904CA12A008C5FDBDBEDE12A682E44E4
+ F8C9658067DF4D8607C2E5138183633C97DC387DBDB2CA8E643CF4F513599BB4
+ 595A6FEC63AE3276E01DE8B6C8EC22936641F2F3666CA3E43BE605C29B3A0C6C
+ 0924156FA5351ADFCF607FBC063FB84E7553D43E0F95DD97DEE4BCF56C7FE1C4
+ 9294E203A7484921236C0E2A8FD2A053043087178EAE9C33CF957B98DB14F369
+ 32690A79520999550E543AB9BACD833B98381EEA9A4DE29476343F1373DBA5F5
+ ABC0CA85E6AAB66B
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ %%EndFont 
+ TeXDict begin 40258431 52099146 1000 1200 1200 (paper.dvi)
+ @start /Fa 133[58 69 66 2[77 47 58 60 1[73 73 80 117
+ 36 66 1[44 73 66 44 66 73 66 66 73 9[142 2[102 80 2[97
+ 109 106 128 89 1[75 55 1[110 93 97 108 102 1[106 8[73
+ 3[73 73 73 73 73 73 44 1[44 2[58 58 44 39[{}50 132.835
+ /CMTI8 rf /Fb 146[99 10[77 98[{}2 132.835 /CMCSC10 rf
+ /Fc 149[39 106[{}1 132.835 /CMSY8 rf /Fd 133[72 86 86
+ 3[63 64 67 1[90 81 90 136 45 86 1[45 90 1[50 75 90 72
+ 1[79 11[125 113 90 3[122 127 154 98 2[61 4[125 118 115
+ 123 19[54 3[63 63 4[136 35[{}35 132.835 /CMBX8 rf /Fe
+ 141[56 3[73 102 40 1[49 44 1[58 1[56 61 54 1[64 10[69
+ 18[83 67[{}13 83.022 /CMMI5 rf /Ff 205[57 57 57 48[{}3
+ 83.022 /CMR5 rf /Fg 207[37 48[{}1 83.022 /CMSY5 rf /Fh
+ 133[62 62 62 1[62 62 62 62 62 1[62 62 62 62 62 2[62 1[62
+ 1[62 62 62 62 62 3[62 1[62 62 62 62 25[62 62 9[62 4[62
+ 62 62 1[62 62 62 1[62 38[{}35 116.231 /CMTT8 rf /Fi 82[61
+ 51[81 1[122 81 91 51 71 71 1[91 91 91 132 51 2[51 91
+ 91 51 81 91 81 1[91 9[152 4[112 1[112 2[152 6[112 2[122
+ 112 112 12[91 91 91 91 1[51 46 46[{TeXBase1Encoding ReEncodeFont}35
+ 182.648 /Times-Italic rf /Fj 139[71 71 3[71 71 71 71
+ 2[71 4[71 2[71 12[71 7[71 4[71 71[{}12 132.835 /CMTT8
+ rf /Fk 138[92 1[68 90 2[95 1[112 4[92 96 3[88 99[{}8
+ 149.44 /CMCSC10 rf /Fl 140[58 4[77 2[66 1[44 4[64 13[73
+ 86[{}6 99.6264 /CMMI6 rf /Fm 128[71 3[71 63 74 74 102
+ 74 78 55 56 55 74 78 71 78 118 39 74 43 39 78 71 43 63
+ 78 63 78 71 3[39 1[39 3[145 106 106 102 78 104 1[96 110
+ 106 129 88 110 72 51 106 111 92 96 108 102 100 106 1[67
+ 4[39 71 71 71 71 71 71 71 71 71 71 1[39 47 39 2[55 55
+ 39 24[118 78 78 82 11[{}74 132.835 /CMR8 rf /Fn 134[67
+ 63 91 63 74 46 56 58 1[70 70 77 111 36 63 43 43 70 63
+ 43 63 70 63 63 70 7[101 101 2[101 1[77 99 1[92 1[101
+ 121 5[105 2[102 97 96 6[43 43 10[70 1[50 43 2[56 56 1[104
+ 25[79 86 11[{}46 116.231 /CMTI7 rf /Fo 134[67 3[79 50
+ 63 62 1[68 66 82 118 42 71 1[47 78 65 65 63 69 59 1[72
+ 6[90 78 109 1[78 90 78 82 100 1[85 1[105 1[91 2[59 1[103
+ 84 97 1[95 100 3[104 68 104 39 39 27[80 1[61 2[78 25[{}44
+ 116.231 /CMMI7 rf /Fp 150[54 54 68 68 6[89 89 2[89 33[75
+ 75 1[0 3[89 29[104 16[68 2[104{}14 116.231 /CMSY7 rf
+ /Fq 133[67 79 1[108 79 83 59 60 62 1[83 75 83 125 42
+ 79 46 42 83 75 46 69 83 67 1[73 10[112 114 104 83 112
+ 1[102 113 116 141 90 2[56 116 118 3[108 106 112 25[42
+ 39[{}40 116.231 /CMBX7 rf /Fr 133[59 70 70 95 70 73 52
+ 53 52 70 73 66 73 109 38 70 41 38 73 66 41 59 73 59 73
+ 66 3[38 66 38 1[98 98 134 98 98 95 73 96 1[89 102 98
+ 119 82 1[68 48 1[103 86 89 100 95 93 98 1[63 1[102 1[38
+ 38 2[66 66 66 66 66 66 66 66 66 38 45 38 102 1[52 52
+ 1[102 3[66 20[75 75 79 11[{}75 116.231 /CMR7 rf /Fs 137[75
+ 2[72 69 2[74 93 135 46 80 1[53 1[73 75 71 80 66 1[81
+ 7[89 127 3[90 94 3[117 123 1[105 130 3[120 98 113 127
+ 110 116 6[43 43 29[68 2[88 13[98 11[{}34 149.44 /CMMI9
+ rf /Ft 198[61 61 61 61 61 61 61 61 61 61 48[{}10 99.6264
+ /CMR6 rf /Fu 134[93 93 1[93 98 69 70 73 1[98 88 98 1[49
+ 2[49 3[81 98 79 1[86 49 10[136 1[98 133 2[133 1[168 4[138
+ 139 111 116 135 128 126 133 6[49 5[88 88 88 88 88 2[59
+ 3[69 69 49 1[147 37[{}41 149.44 /CMBX9 rf /Fv 133[63
+ 74 71 102 71 82 51 63 65 1[78 78 86 125 39 71 47 47 78
+ 71 47 71 78 71 71 78 10[114 1[110 86 2[104 1[114 1[96
+ 4[119 100 1[116 110 1[114 19[55 3[63 63 27[86 12[{}40
+ 149.44 /CMTI9 rf /Fw 128[77 2[154 1[68 81 81 111 81 85
+ 60 61 60 81 85 77 85 128 43 81 47 43 85 77 47 68 85 68
+ 85 77 3[43 77 43 2[115 158 115 115 111 85 113 1[105 119
+ 115 141 96 119 79 55 115 121 100 105 117 111 109 115
+ 1[73 1[119 1[43 43 77 77 77 77 77 77 77 77 77 77 77 43
+ 51 43 119 1[60 60 43 119 128 1[128 77 43 16[43 1[128
+ 85 85 90 8[119 2[{}87 149.44 /CMR9 rf /Fx 82[66 50[88
+ 100 100 144 100 111 66 78 88 1[111 100 111 166 55 2[55
+ 111 100 1[88 111 88 111 100 8[144 199 1[144 133 111 144
+ 1[122 155 144 188 133 155 1[78 155 155 122 133 144 144
+ 133 144 9[100 100 100 100 100 100 100 2[50 46[{
+ TeXBase1Encoding ReEncodeFont}52 199.253 /Times-Bold
+ rf /Fy 133[78 78 78 1[78 78 78 78 78 1[78 78 78 78 78
+ 1[78 78 78 78 78 78 78 78 78 78 7[78 78 3[78 3[78 78
+ 78 1[78 4[78 78 1[78 3[78 1[78 78 1[78 5[78 78 78 78
+ 78 1[78 78 78 78 1[78 78 78 1[78 38[{}50 149.44 /CMTT9
+ rf /Fz 135[68 14[60 60 77 77 51[102 16[154 17[77 15[{}8
+ 149.44 /CMSY9 rf /FA 82[66 51[100 2[100 1[55 100 66 1[111
+ 111 111 166 44 100 1[44 111 111 55 111 111 1[111 111
+ 10[133 144 8[111 2[55 5[144 1[133 65[{TeXBase1Encoding ReEncodeFont}26
+ 199.253 /Helvetica rf /FB 82[100 51[166 166 1[166 183
+ 100 166 116 1[183 183 183 1[83 2[83 3[166 183 166 183
+ 166 13[199 10[216 1[183 1[216 216 1[216 6[100 58[{
+ TeXBase1Encoding ReEncodeFont}25 298.879 /Helvetica-Bold
+ rf end
+ %%EndProlog
+ %%BeginSetup
+ %%Feature: *Resolution 1200dpi
+ TeXDict begin
+ %%BeginPaperSize: Letter
+ letter
+ %%EndPaperSize
+  end
+ %%EndSetup
+ %%Page: 1 1
+ TeXDict begin 1 0 bop 2163 215 a FB(Data)83 b(Structure)g(Anal)l(ysis:)
+ 127 548 y(A)g(F)-6 b(ast)82 b(and)h(Scalab)m(le)h(Conte)l
+ (xt\255Sensitive)d(Heap)i(Anal)l(ysis)2408 1236 y FA(Chr)s(is)56
+ b(Lattner)711 b(Vikr)n(am)55 b(Adv)-5 b(e)2039 1434 y(Univ)g(ersity)55
+ b(of)g(Illinois)h(at)g(Urbana\255Champaign)2839 1608
+ y Fz(f)p Fy(lattner,vadve)p Fz(g)p Fy(@cs.uiuc.)q(ed)q(u)-303
+ 2403 y Fx(ABSTRA)-11 b(CT)-303 2644 y Fw(This)83 b(pap)t(er)i(describ)t
+ (es)f(a)f(scalable)g(heap)i(analysis)d(algorithm,)-303
+ 2818 y(Data)69 b(Structure)j(Analysis,)h(designed)d(to)g(enable)h
+ (analyses)e(and)-303 2993 y(transformations)33 b(of)i(programs)g(at)g
+ (the)h(lev)l(el)f(of)g(en)l(tire)h(logical)e(data)-303
+ 3167 y(structures.)63 b(Data)35 b(Structure)j(Analysis)d(attempts)g(to)
+ h(iden)l(tify)g(dis-)-303 3341 y(join)l(t)54 b(instances)h(of)g
+ (logical)f(program)h(data)f(structures)i(and)f(their)-303
+ 3516 y(in)l(ternal)36 b(and)i(external)f(connectivit)l(y)g(prop)t
+ (erties)g(\(without)g(trying)-303 3690 y(to)63 b(categorize)h(their)g
+ (\\shap)t(e"\).)106 b(T)-13 b(o)64 b(ac)l(hiev)l(e)g(this,)i(Data)d
+ (Struc-)-303 3864 y(ture)58 b(Analysis)f(is)g(fully)g(con)l
+ (text-sensitiv)l(e)h(\(in)f(the)h(sense)g(that)g(it)-303
+ 4039 y(names)48 b(memory)h(ob)9 b(jects)48 b(b)l(y)h(en)l(tire)g
+ (acyclic)f(call)g(paths\),)h(is)f(\014eld-)-303 4213
+ y(sensitiv)l(e,)d(builds)h(an)f(explicit)h(mo)t(del)g(of)f(the)h(heap,)
+ i(and)e(is)f(robust)-303 4387 y(enough)52 b(to)e(handle)i(the)g(full)f
+ (generalit)l(y)f(of)h(C.)-154 4562 y(Despite)70 b(these)g(aggressiv)l
+ (e)f(features,)74 b(the)c(algorithm)f(is)g(b)t(oth)-303
+ 4736 y(extremely)52 b(fast)f(\(requiring)h(2-7)f(seconds)h(for)g(C)g
+ (programs)f(in)h(the)-303 4910 y(range)59 b(of)g(100K)h(lines)f(of)g
+ (co)t(de\))h(and)g(is)e(scalable)h(in)g(practice.)93
+ b(It)-303 5085 y(has)51 b(three)h(features)g(w)l(e)f(b)t(eliev)l(e)i
+ (are)e(no)l(v)l(el:)69 b(\(a\))50 b(it)h(incremen)l(tally)-303
+ 5259 y(builds)35 b(a)h(precise)h(program)f(call)f(graph)h(during)h(the)
+ f(analysis;)j(\(b\))d(it)-303 5433 y(distinguishes)e(complete)i(and)f
+ (incomplete)h(information)f(in)g(a)g(man-)-303 5608 y(ner)60
+ b(that)f(simpli\014es)g(analysis)f(of)i(libraries)f(or)g(other)h(p)t
+ (ortions)g(of)-303 5782 y(programs;)44 b(and)e(\(c\))g(it)f(uses)h(sp)t
+ (eculativ)l(e)g(\014eld-senstivit)l(y)f(in)h(t)l(yp)t(e-)-303
+ 5956 y(unsafe)48 b(programs)g(in)g(order)h(to)e(preserv)l(e)i
+ (e\016ciency)h(and)e(scalabil-)-303 6131 y(it)l(y)-13
+ b(.)62 b(Finally)-13 b(,)39 b(it)e(sho)l(ws)f(that)h(the)g(k)l(ey)h(to)
+ e(ac)l(hieving)h(scalabilit)l(y)e(in)j(a)-303 6305 y(fully)56
+ b(con)l(text-sensitiv)l(e)f(algorithm)h(is)f(the)i(use)g(of)f(a)g
+ (uni\014cation-)-303 6480 y(based)68 b(approac)l(h,)k(a)67
+ b(com)l(bination)g(that)g(has)h(b)t(een)h(used)f(b)t(efore)-303
+ 6654 y(but)51 b(whose)g(imp)t(ortance)h(has)f(not)g(b)t(een)i(clearly)e
+ (articulated.)-303 7112 y Fx(1.)198 b(INTR)-6 b(ODUCTION)-154
+ 7328 y Fw(Alias)70 b(analysis)f(for)h(programs)g(with)h(complex)g(p)t
+ (oin)l(ter-based)-303 7502 y(data)64 b(structures)h(has)g(b)t(een)i
+ (most)d(successful)h(at)g(guiding)g(tradi-)-303 7676
+ y(tional)f(lo)l(w-lev)l(el)h(memory)h(optimizations.)110
+ b(These)66 b(transforma-)-303 7851 y(tions)42 b(rely)i(on)f(disam)l
+ (biguating)f(pairs)h(of)g(memory)h(references)h(and)-303
+ 8025 y(on)g(iden)l(tifying)g(lo)t(cal)h(and)g(in)l(terpro)t(cedural)g
+ (side-e\013ects)g(of)f(state-)-303 8199 y(men)l(ts.)99
+ b(In)63 b(con)l(trast,)g(there)f(has)g(b)t(een)h(m)l(uc)l(h)f(less)f
+ (success)h(with)-303 8374 y(transformations)44 b(that)h(apply)h(to)g
+ (en)l(tire)g Fv(instanc)-8 b(es)45 b Fw(of)h Fv(data)51
+ b(struc-)-303 8548 y(tur)-8 b(es)59 b Fw(suc)l(h)h(as)f(a)g(lists,)h
+ (heaps,)i(or)d(graphs.)94 b(Man)l(y)59 b(reasons)g(exist)-303
+ 8722 y(for)g(this)g(disparit)l(y)-13 b(,)61 b(including)f(the)g(p)t
+ (ossibilit)l(y)e(of)h(non-t)l(yp)t(e-safe)-303 8897 y(memory)g
+ (accesses)h(in)f(common)h(programming)f(languages)g(\(e.g.,)-303
+ 9071 y(C)74 b(and)h(C++\),)81 b(and)75 b(the)h(p)t(oten)l(tially)d
+ (high)i(cost)f(of)h(an)g(analy-)-303 9245 y(sis)55 b(that)h(can)h
+ (distinguish)f(di\013eren)l(t)h(instances)f(of)g(a)g(logical)g(data)
+ -303 9420 y(structure.)4245 2403 y(Enabling)40 b(suc)l(h)g(analyses)f
+ (and)i(transformations)d(requires)j(some)4096 2578 y(p)t(o)l(w)l(erful)
+ 51 b(analysis)f(capabilities:)4245 2752 y Fu(\(1\))79
+ b(F)-15 b(ull)79 b(Con)-5 b(text-Sensitivit)g(y)p Fw(:)103
+ b(Iden)l(tifying)69 b(disjoin)l(t)d(in-)4096 2926 y(stances)47
+ b(of)g(data)g(structures)g(requires)h(the)g(analysis)e(algorithm)g(to)
+ 4096 3101 y(distinguish)66 b(b)t(et)l(w)l(een)i(heap)g(ob)9
+ b(jects)66 b(created)i(via)e(di\013eren)l(t)h(call)4096
+ 3275 y(paths)37 b(in)g(a)g(program)g(\(i.e.,)i(naming)e(ob)9
+ b(jects)37 b(b)l(y)h(en)l(tire)f(acyclic)g(call)4096
+ 3449 y(paths\).)64 b(Ev)l(en)43 b(man)l(y)f(partially)g(con)l
+ (text-sensitiv)l(e)g(algorithms)f(do)4096 3624 y(not)47
+ b(attempt)f(to)g(distinguish)g(heap)i(ob)9 b(jects)46
+ b(b)l(y)h(call)f(paths)h([6,)f(22,)4096 3798 y(7,)k(21,)g(3],)h(whic)l
+ (h)g(mak)l(es)f(them)h(unable)h(to)e(detect)i(this)e(k)l(ey)h(prop-)
+ 4096 3972 y(ert)l(y)-13 b(.)67 b(On)50 b(the)g(other)f(hand,)h(na)-17
+ b(\177)-60 b(\020v)l(e)50 b(cloning)f(can)g(easily)f(lead)i(to)f(an)
+ 4096 4147 y(explosion)44 b(in)h(the)g(size)g(of)g(the)g(heap)g
+ (represen)l(tation)g(\(b)t(ecause)h(the)4096 4321 y(n)l(um)l(b)t(er)59
+ b(of)f(call)g(paths)g(ma)l(y)g(b)t(e)h(exp)t(onen)l(tial)f(in)h(the)f
+ (size)g(of)g(the)4096 4495 y(program\),)50 b(and)i(can)g(mak)l(e)f
+ (recursion)g(di\016cult)g(to)g(handle.)4245 4670 y Fu(\(2\))74
+ b(Field-Sensitivit)-5 b(y)p Fw(:)97 b(Iden)l(tifying)64
+ b(the)h(in)l(ternal)f(connec-)4096 4844 y(tivit)l(y)81
+ b(pattern)i(of)f(a)h(data)f(structure)h(requires)g(distinguishing)4096
+ 5018 y(the)68 b(p)t(oin)l(ts-to)f(prop)t(erties)i(of)f(di\013eren)l(t)g
+ (structure)g(\014elds.)119 b(Suc)l(h)4096 5193 y(\\\014eld-sensitivit)l
+ (y")65 b(is)i(often)g(supp)t(orted)h(b)l(y)f(analyses)f(targeting)4096
+ 5367 y(languages)49 b(whic)l(h)i(are)f(t)l(yp)t(e-safe,)g(but)h(is)e
+ (di\016cult)h(to)g(supp)t(ort)g(ef-)4096 5541 y(\014cien)l(tly)58
+ b(\(if)f(at)g(all\))f(in)i(non-t)l(yp)t(e-safe)h(languages)e(\(e.g.,)h
+ (see)g([19,)4096 5716 y(15]\).)4245 5890 y Fu(\(3\))i(Explicit)h(Heap)f
+ (Mo)5 b(del:)71 b Fw(Analyzing)53 b(heap)g(data)e(struc-)4096
+ 6064 y(tures)40 b(requires)g(constructing)f(an)h(explicit)g(heap)g(mo)t
+ (del,)i(including)4096 6239 y(ob)9 b(jects)58 b(not)g(directly)h
+ (necessary)g(for)f(iden)l(tifying)g(aliases.)88 b(Some)4096
+ 6413 y(common)70 b(alias)e(analysis)h(algorithms)f(\(e.g.,)73
+ b(Steensgaard's)d([20])4096 6587 y(and)49 b(Andersen's)g([1])e
+ (algorithms\))g(build)i(an)f(explicit)g(heap)h(repre-)4096
+ 6762 y(sen)l(tation,)41 b(but)f(do)g(not)g(pro)l(vide)g(an)l(y)g(con)l
+ (text-sensitivit)l(y)-13 b(.)63 b(Other,)4096 6936 y(more)51
+ b(p)t(o)l(w)l(erful)h(analyses)e(only)i(record)g(alias)e(pairs)h(to)g
+ (determine)4096 7111 y(p)t(oin)l(ter)59 b(aliasing)e(prop)t(erties)i
+ ([6,)h(2,)g(10].)90 b(Retaining)58 b(b)t(oth)h(capa-)4096
+ 7285 y(bilities)50 b(is)g(c)l(hallenging.)4245 7459 y(Practical)34
+ b(alias)f(and)i(p)t(oin)l(ter)g(analysis)e(algorithms)h(ha)l(v)l(e)g
+ (not)h(at-)4096 7634 y(tempted)51 b(to)f(pro)l(vide)h(the)g(com)l
+ (bination)f(of)g(prop)t(erties)h(describ)t(ed)4096 7808
+ y(ab)t(o)l(v)l(e,)75 b(b)t(ecause)d(of)e(the)h(p)t(oten)l(tial)f(cost.)
+ 126 b(In)71 b(con)l(trast,)j(\\shap)t(e)4096 7982 y(analysis")45
+ b(algorithms)g(are)i(p)t(o)l(w)l(erful)g(enough)g(to)f(pro)l(vide)h
+ (this)f(in-)4096 8157 y(formation)71 b(and)h(more)f(\(e.g.,)76
+ b(enough)c(to)f(iden)l(tify)h(a)f(particular)4096 8331
+ y(structure)56 b(as)e(a)h(\\link)l(ed-list")f(or)h(\\binary)g(tree")h
+ ([9,)f(17]\).)79 b(Shap)t(e)4096 8505 y(analysis,)51
+ b(ho)l(w)l(ev)l(er,)i(has)g(so)f(far)h(not)g(pro)l(v)l(en)g(practical)g
+ (for)f(use)i(in)4096 8680 y(commercial)d(optimizing)f(compilers.)4245
+ 8854 y(In)38 b(this)f(w)l(ork,)i(w)l(e)f(presen)l(t)g(an)f(analysis)f
+ (algorithm)g(called)h Fu(Data)4096 9028 y(Structure)42
+ b(Analysis)p Fw(,)f(whic)l(h)c(has)g(b)t(een)h(the)g(k)l(ey)f
+ (foundation)g(for)4096 9203 y(our)43 b(w)l(ork)f(on)h(transformations)f
+ (that)g(apply)h(to)f(disjoin)l(t)g(instances)4096 9377
+ y(of)57 b(logical)f(data)h(structures.)86 b(The)58 b(algorithm)e(aims)g
+ (to)h(lie)g(some-)4096 9551 y(where)43 b(b)t(et)l(w)l(een)h
+ (traditional)d(p)t(oin)l(ter)i(analyses)f(and)h(more)f(p)t(o)l(w)l(er-)
+ 4096 9726 y(ful)k(shap)t(e)h(analysis)d(algorithms.)65
+ b(It)46 b(pro)l(vides)g(the)h(three)f(required)4096 9900
+ y(capabilities)69 b(listed)h(ab)t(o)l(v)l(e,)76 b(it)70
+ b(supp)t(orts)g(the)h(full)g(generalit)l(y)f(of)4096
+ 10074 y(C)80 b(programs,)86 b(including)81 b(t)l(yp)t(e-unsafe)g(co)t
+ (de,)88 b(incomplete)80 b(pro-)4096 10249 y(grams,)e(function)c(p)t
+ (oin)l(ters,)79 b(recursion,)g(and)c Fy(setjmp/longjmp)p
+ Fw(.)4096 10423 y(W)-13 b(e)47 b(b)t(eliev)l(e)g(it)f(is)g(e\016cien)l
+ (t)h(and)f(scalable)g(enough)i(for)e(use)h(in)f(com-)4096
+ 10597 y(mercial)63 b(compilers.)102 b(W)-13 b(e)63 b(ha)l(v)l(e)g
+ (built)g(on)g(this)f(algorithm)f(to)i(de-)4096 10772
+ y(v)l(elop)72 b(other)h(no)l(v)l(el)f(compiler)h(tec)l(hniques,)78
+ b(including)73 b(an)g(auto-)4096 10946 y(matic)c(transformation)e(to)i
+ (segregate)g(disjoin)l(t)f(data)h(structures)p eop end
+ %%Page: 2 2
+ TeXDict begin 2 1 bop -303 -137 a Fw(in)53 b(the)g(heap)h([12])e(and)i
+ (a)e(program)h(safet)l(y)g(analysis)e(that)i(ensures)-303
+ 37 y(p)t(oin)l(ter)66 b(and)h(heap)h(safet)l(y)d(for)i(t)l(yp)t(e-safe)
+ f(C)h(programs)f(without)-303 211 y(garbage)51 b(collection)f([5].)-154
+ 386 y(There)c(are)g(three)g(k)l(ey)g(no)l(v)l(el)f(asp)t(ects)g(to)g
+ (our)g(algorithm,)g(plus)h(a)-303 560 y(k)l(ey)k(prop)t(ert)l(y)h(that)
+ f(has)g(b)t(een)h(used)g(but)g(not)f(articulated)g(b)t(efore:)-167
+ 863 y(\(i\))74 b(The)35 b(algorithm)e(incremen)l(tally)i(disco)l(v)l
+ (ers)e(an)i(accurate)g(call-)70 1037 y(graph)54 b(for)f(the)h(program)g
+ (on-the-\015y)-13 b(,)55 b(using)e(the)h(call)f(graph)70
+ 1212 y(for)j(parts)g(of)g(the)g(analysis)f(itself.)82
+ b(The)57 b(algorithm)e(is)g(com-)70 1386 y(pletely)38
+ b(non-iterativ)l(e,)i(visiting)c(eac)l(h)i(instruction)f(and)h(eac)l(h)
+ 70 1560 y(call)51 b(edge)h(only)f(once)h(during)f(the)h(analysis.)-209
+ 1785 y(\(ii\))73 b(The)j(algorithm)f(explicitly)f(distinguishes)h(b)t
+ (et)l(w)l(een)h(com-)70 1959 y(plete)i(and)f(incomplete)h(information,)
+ k(enabling)77 b(it)g(to)f(b)t(e)70 2134 y(conserv)-9
+ b(ativ)l(e)74 b(ev)l(en)g(at)e(in)l(termediate)h(stages)f(of)h
+ (analysis,)70 2308 y(and)49 b(allo)l(wing)d(it)i(to)g(analyze)g(p)t
+ (ortions)g(of)g(programs)f(safely)-13 b(.)-252 2637 y(\(iii\))73
+ b(The)45 b(algorithm)e(pro)l(vides)g(sp)t(eculativ)l(e)h(\014eld)h
+ (sensitivit)l(y)-13 b(,)43 b(b)l(y)70 2812 y(assuming)85
+ b(that)h(memory)g(ob)9 b(jects)86 b(in)g(the)g(program)g(are)70
+ 2986 y(t)l(yp)t(e-safe)70 b(un)l(til)e(sho)l(wn)h(otherwise.)122
+ b(This)69 b(allo)l(ws)e(the)j(al-)70 3160 y(gorithm)e(to)g(b)t(e)i
+ (completely)e(\014eld-sensitivit)l(y)g(for)g(ob)9 b(jects)70
+ 3335 y(accessed)52 b(in)f(a)g(t)l(yp)t(e-safe)h(manner)g(\(the)f
+ (common)g(case\).)-248 3559 y(\(iv\))74 b(Finally)-13
+ b(,)44 b(the)g(prop)t(ert)l(y)g(that)e(w)l(e)h(b)t(eliev)l(e)h(is)e
+ (fundamen)l(tal)i(to)70 3734 y(ac)l(hieving)39 b(a)f(scalable)h
+ (\\fully)f(con)l(text-sensitiv)l(e")g(algorithm)70 3908
+ y(is)59 b(the)i(use)f(of)f(a)h(uni\014cation-based)g(approac)l(h.)95
+ b(With)59 b(this)70 4082 y(com)l(bination,)66 b(it)d(is)g(extremely)i
+ (unlik)l(ely)e(for)h(the)g(analysis)70 4257 y(represen)l(tation)58
+ b(to)f(gro)l(w)g(large,)i(despite)f(using)g(a)f(con)l(text-)70
+ 4431 y(sensitiv)l(e,)74 b(\014eld-sensitiv)l(e)d(represen)l(tation.)
+ 2718 4368 y Ft(1)2914 4431 y Fw(This)f(is)g(dis-)70 4605
+ y(cussed)52 b(in)f(Section)h(3.7.)-154 4821 y(W)-13 b(e)40
+ b(sho)l(w)f(that)h(the)g(w)l(orst)e(case)i(time)g(and)g(memory)g
+ (complexit)l(y)-303 4995 y(are)68 b(\002\()p Fs(n\013)p
+ Fw(\()p Fs(n)p Fw(\))44 b(+)i Fs(k)t(\013)p Fw(\()p Fs(k)t
+ Fw(\))p Fs(e)p Fw(\),)72 b(and)d(\002\()p Fs(f)16 b(k)t
+ Fw(\),)71 b(where)e Fs(n)p Fw(,)i Fs(k)t Fw(,)h Fs(e)p
+ Fw(,)g(and)d Fs(f)-303 5170 y Fw(denote)63 b(the)f(n)l(um)l(b)t(er)i
+ (of)e(instructions,)h(the)g(maxim)l(um)f(size)g(of)g(a)-303
+ 5344 y(data)57 b(structure)i(graph)f(for)g(a)f(single)h(pro)t(cedure,)j
+ (the)e(n)l(um)l(b)t(er)g(of)-303 5518 y(edges)37 b(in)h(the)f(call)g
+ (graph,)j(and)e(the)g(total)e(n)l(um)l(b)t(er)i(of)f(functions.)64
+ b(In)-303 5693 y(practice,)47 b Fs(k)j Fw(is)45 b(v)l(ery)i(small,)e(t)
+ l(ypically)g(on)h(the)g(order)h(of)f(a)g(h)l(undred)-303
+ 5867 y(no)t(des)51 b(or)h(less,)e(ev)l(en)h(in)h(large)f(programs.)-154
+ 6041 y(W)-13 b(e)74 b(ev)-9 b(aluate)75 b(the)f(algorithm)f(on)h(35)g
+ (C)f(programs,)79 b(sho)l(wing)-303 6216 y(that)46 b(the)i(algorithm)e
+ (is)g(extremely)h(e\016cien)l(t)h(in)f(practice)g(\(in)g(b)t(oth)-303
+ 6390 y(p)t(erformance)k(and)e(memory)h(consumption\).)67
+ b(This)49 b(includes)h(pro-)-303 6564 y(grams)f(that)h(con)l(tain)g
+ (complex)g(heap)h(structures,)f(recursion,)h(and)-303
+ 6739 y(function)58 b(p)t(oin)l(ters.)89 b(F)-13 b(or)59
+ b(example,)h(it)e(requires)h(less)e(than)i(8)f(sec-)-303
+ 6913 y(onds)69 b(of)f(analysis)g(time)g(and)i(ab)t(out)f(16MB)f(of)g
+ (memory)i(to)e(an-)-303 7088 y(alyze)61 b Fy(povray31)p
+ Fw(,)66 b(a)61 b(program)g(consisting)e(of)i(o)l(v)l(er)g(130,000)e
+ (lines)-303 7262 y(of)e(co)t(de.)87 b(Ov)l(erall,)59
+ b(w)l(e)e(b)t(eliev)l(e)h(the)g(broader)g(implication)e(of)h(our)-303
+ 7436 y(w)l(ork)63 b(ma)l(y)h(b)t(e)h(to)e(sho)l(w)h(that)f(a)h(fully)g
+ (con)l(text)g(sensitiv)l(e)f(analy-)-303 7611 y(sis)c(as)h(describ)t
+ (ed)i(here)g(can)e(b)t(e)i(practical)e(for)g(signi\014can)l(t,)i
+ (large,)-303 7785 y(real-w)l(orld)50 b(programs.)-154
+ 7959 y(The)45 b(three)h(closest)d(previous)i(algorithms)e(to)h(ours)g
+ (are)h(those)f(b)l(y)-303 8134 y(F\177)-77 b(ahndric)l(h)62
+ b(et)g(al.)f([7],)i(Liang)f(and)g(Harrold)g([15],)h(and)f(Ruf)g([16].)
+ -303 8308 y(All)55 b(three)i(are)g(con)l(text-sensitiv)l(e,)f(\015o)l
+ (w-insensitiv)l(e,)g(and)g(app)t(ear)-303 8482 y(roughly)36
+ b(comparable)h(to)g(ours)f(in)h(terms)f(of)g(analysis)f(time.)63
+ b(As)37 b(dis-)-303 8657 y(cussed)48 b(in)f(Section)h(5,)g(ho)l(w)l(ev)
+ l(er,)g(none)g(these)g(three)g(pro)l(vide)g(some)-303
+ 8831 y(of)43 b(the)h(k)l(ey)f(features)h(of)f(our)h(w)l(ork)f(|)g(the)h
+ (incremen)l(tal)f(call)g(graph)-303 9005 y(construction)50
+ b(\(while)g(handling)h(b)t(oth)g(function)g(p)t(oin)l(ters)g(and)g(re-)
+ -303 9180 y(cursion\),)i(supp)t(ort)h(for)g(incomplete)g(programs,)f
+ (and)h(supp)t(ort)h(for)-303 9354 y(t)l(yp)t(e-unsafe)d(programs)e
+ (with)h(partial)f(\014eld)i(sensitivit)l(y)-13 b(.)-303
+ 9770 y Fx(2.)198 b(THE)50 b(D)-7 b(A)-19 b(T)h(A)49 b(STR)-6
+ b(UCTURE)49 b(GRAPH)-154 9986 y Fw(Data)76 b(Structure)i(Analysis)d
+ (computes)i(a)f(graph)h(w)l(e)f(call)g(the)-303 10161
+ y(Data)e(Structure)h(Graph)g(\(DS)g(graph\))f(for)g(eac)l(h)h(function)
+ g(in)g(a)-303 10335 y(program,)41 b(summarizing)f(the)g(memory)g(ob)9
+ b(jects)39 b(accessible)h(within)-303 10509 y(the)c(function)h(along)f
+ (with)f(their)i(connectivit)l(y)f(patterns.)63 b(Eac)l(h)36
+ b(DS)-303 10684 y(graph)48 b(no)t(de)h(represen)l(ts)f(a)g(\(p)t(oten)l
+ (tially)e(in\014nite\))i(set)g(of)f(memory)p -303 10793
+ 1601 7 v -295 10900 a Ft(1)-227 10964 y Fr(W)-11 b(e)48
+ b(describ)t(e)e(a)h(graph-size-limiting)f(heuristic)g(to)i(detect)f
+ (and)h(a)l(v)l(oid)g(this)-303 11097 y(rare)c(case,)h(but)g(this)f(has)
+ h(nev)l(er)g(b)t(een)g(required)g(in)f(practice.)p 4096
+ -308 4001 17 v 4104 -112 a Fq(t)8 b(y)g(p)g(e)g(d)g(e)g(f)104
+ b(s)12 b(t)g(r)g(u)g(c)g(t)121 b Fr(l)27 b(i)g(s)g(t)113
+ b Fp(f)98 b Fq(s)12 b(t)g(r)g(u)g(c)g(t)121 b Fr(l)27
+ b(i)g(s)g(t)103 b Fp(\003)24 b Fr(N)8 b(e)g(x)g(t)27
+ b(;)5857 20 y Fq(i)13 b(n)g(t)101 b Fr(D)7 b(a)g(t)g(a)30
+ b(;)94 b Fp(g)121 b Fr(l)27 b(i)g(s)h(t)48 b(;)4109 153
+ y Fq(i)13 b(n)g(t)108 b Fr(G)13 b(l)g(o)g(b)g(a)g(l)92
+ b(=)77 b(1)16 b(0)g(;)4103 286 y Fq(v)7 b(o)g(i)g(d)111
+ b Fr(d)22 b(o)p 4704 286 40 7 v 90 w(a)f(l)g(l)34 b(\()42
+ b(l)27 b(i)g(s)g(t)103 b Fp(\003)15 b Fr(L)23 b(,)103
+ b Fq(v)7 b(o)g(i)g(d)92 b Fr(\()18 b Fp(\003)13 b Fr(F)-5
+ b(P)13 b(\))18 b(\()32 b Fq(i)13 b(n)g(t)34 b Fp(\003)19
+ b Fr(\))g(\))81 b Fp(f)4255 419 y Fq(do)86 b Fp(f)80
+ b Fr(F)-5 b(P)g(\()r(&)q(L)-14 b Fp(\000)-24 b Fo(>)-6
+ b Fr(D)7 b(a)g(t)g(a)29 b(\))23 b(;)4651 552 y(L)66 b(=)i(L)-14
+ b Fp(\000)-24 b Fo(>)-5 b Fr(N)8 b(e)g(x)g(t)27 b(;)4270
+ 685 y Fp(g)84 b Fq(w)9 b(h)g(i)g(l)g(e)22 b Fr(\()13
+ b(L)22 b(\))h(;)4102 817 y Fp(g)4103 950 y Fq(v)7 b(o)g(i)g(d)90
+ b Fr(addG)16 b(\()28 b Fq(i)13 b(n)g(t)90 b Fp(\003)6
+ b Fr(X)12 b(\))86 b Fp(f)h Fr(\()21 b Fp(\003)12 b Fr(X)o(\))62
+ b(+)9 b(=)75 b(G)13 b(l)g(o)g(b)g(a)g(l)36 b(;)89 b Fp(g)4103
+ 1083 y Fq(v)7 b(o)g(i)g(d)99 b Fr(a)8 b(d)g(d)g(G)g(T)g(o)g(L)g(i)g(s)g
+ (t)26 b(\()41 b(l)27 b(i)h(s)f(t)103 b Fp(\003)14 b Fr(L)20
+ b(\))88 b Fp(f)110 b Fr(d)21 b(o)p 6451 1083 V 90 w(a)g(l)g(l)35
+ b(\()12 b(L)24 b(,)96 b(addG)25 b(\))e(;)91 b Fp(g)4123
+ 1216 y Fr(l)28 b(i)f(s)g(t)103 b Fp(\003)27 b Fr(m)12
+ b(a)g(k)g(e)g(L)g(i)g(s)g(t)25 b(\()i Fq(i)13 b(n)g(t)83
+ b Fr(N)-11 b(u)g(m)10 b(\))81 b Fp(f)4282 1349 y Fr(l)28
+ b(i)f(s)g(t)103 b Fp(\003)12 b Fr(N)m(e)m(w)64 b(=)82
+ b(m)14 b(a)g(l)g(l)g(o)g(c)30 b(\()h Fq(s)17 b(i)g(z)g(e)g(o)g(f)29
+ b Fr(\()41 b(l)28 b(i)f(s)g(t)52 b(\))24 b(\))g(;)4252
+ 1482 y(N)m(e)m(w)-17 b Fp(\000)-24 b Fo(>)-5 b Fr(N)8
+ b(e)g(x)g(t)75 b(=)57 b(N)-11 b(u)g(m)79 b(?)99 b(m)12
+ b(a)g(k)g(e)g(L)g(i)g(s)g(t)25 b(\()5 b(N)-8 b(u)g(m)s
+ Fp(\000)20 b Fr(1)g(\))86 b(:)f(0)20 b(;)4252 1614 y(N)m(e)m(w)-17
+ b Fp(\000)-24 b Fo(>)-6 b Fr(D)7 b(a)g(t)g(a)74 b(=)57
+ b(N)-11 b(u)g(m)17 b(;)103 b Fq(r)8 b(e)g(t)g(u)g(r)g(n)87
+ b Fr(N)m(e)m(w)16 b(;)4102 1747 y Fp(g)4109 1880 y Fq(i)d(n)g(t)101
+ b Fr(m)6 b(a)g(i)g(n)30 b(\()22 b(\))90 b Fp(f)256 b
+ Fn(/)7 b Fp(\003)76 b Fn(X)56 b(&)h(Y)95 b(l)26 b(i)g(s)h(t)g(s)118
+ b(a)12 b(r)g(e)112 b(d)21 b(i)g(s)g(j)g(o)f(i)h(n)g(t)107
+ b Fp(\003)7 b Fn(/)4282 2013 y Fr(l)28 b(i)f(s)g(t)103
+ b Fp(\003)6 b Fr(X)59 b(=)80 b(m)12 b(a)g(k)g(e)g(L)g(i)g(s)g(t)31
+ b(\()20 b(1)h(0)g(\))f(;)4282 2146 y(l)28 b(i)f(s)g(t)103
+ b Fp(\003)6 b Fr(Y)59 b(=)80 b(m)12 b(a)g(k)g(e)g(L)g(i)g(s)g(t)30
+ b(\()19 b(1)h(0)g(0)f(\))h(;)4263 2279 y(a)8 b(d)g(d)g(G)g(T)g(o)g(L)g
+ (i)g(s)g(t)27 b(\()t(X)14 b(\))23 b(;)4268 2411 y(G)13
+ b(l)g(o)g(b)g(a)g(l)92 b(=)78 b(2)16 b(0)g(;)4263 2544
+ y(a)8 b(d)g(d)g(G)g(T)g(o)g(L)g(i)g(s)g(t)27 b(\()t(Y)14
+ b(\))23 b(;)4102 2677 y Fp(g)4899 2818 y Fw(Figure)52
+ b(1:)68 b Fm(C)47 b(co)t(de)f(for)h(running)h(example)p
+ 4096 2901 4001 17 v 4096 3292 a Fw(ob)9 b(jects)49 b(and)h(distinct)f
+ (no)t(des)h(represen)l(t)g(disjoin)l(t)e(sets)h(of)g(ob)9
+ b(jects,)4096 3466 y(i.e.,)56 b(the)g(graph)g(is)f(a)g(\014nite,)i
+ (static)d(partitioning)h(of)g(the)h(memory)4096 3640
+ y(ob)9 b(jects.)104 b(All)63 b(dynamic)g(ob)9 b(jects)63
+ b(whic)l(h)h(ma)l(y)f(b)t(e)h(p)t(oin)l(ted)g(to)f(b)l(y)4096
+ 3815 y(a)56 b(single)g(p)t(oin)l(ter)h(v)-9 b(ariable)56
+ b(or)h(\014eld)g(are)f(represen)l(ted)i(as)e(a)g(single)4096
+ 3989 y(no)t(de)c(in)f(the)h(graph.)4245 4163 y(Some)69
+ b(assumptions)d(ab)t(out)i(the)h(input)f(program)g(represen)l(ta-)4096
+ 4338 y(tion)62 b(are)h(necessary)h(for)e(describing)i(our)f(graph)g
+ (represen)l(tation;)4096 4512 y(other)f(details)f(are)h(describ)t(ed)h
+ (in)f(Section)h(3.2)e([13].)99 b(W)-13 b(e)62 b(assume)4096
+ 4686 y(that)54 b(input)h(programs)f(ha)l(v)l(e)h(a)g(simple)f(t)l(yp)t
+ (e)h(system)f(with)g(struc-)4096 4861 y(tural)37 b(equiv)-9
+ b(alence,)42 b(ha)l(ving)37 b(primitiv)l(e)g(in)l(teger)h(and)g
+ (\015oating)f(p)t(oin)l(t)4096 5035 y(t)l(yp)t(es)57
+ b(of)f(prede\014ned)k(sizes,)d(plus)g(four)f(deriv)l(ed)i(t)l(yp)t(es:)
+ 79 b(p)t(oin)l(ters,)4096 5209 y(structures)47 b(\(i.e.,)g(record)h(t)l
+ (yp)t(es\),)g(arra)l(ys,)f(and)h(functions.)66 b(W)-13
+ b(e)48 b(as-)4096 5384 y(sume)f(\(as)f(in)h(the)g(C)g(language\))g
+ (that)f(only)h(explicit)f(p)t(oin)l(ter)i(t)l(yp)t(es)4096
+ 5558 y(and)k(in)l(teger)f(t)l(yp)t(es)h(of)f(the)h(same)f(size)g(or)g
+ (larger)g(can)h(directly)g(en-)4096 5733 y(co)t(de)46
+ b(a)f(p)t(oin)l(ter)g(v)-9 b(alue,)47 b(and)e(call)g(these)g
+ Fv(p)-8 b(ointer-c)g(omp)g(atible)47 b Fw(t)l(yp)t(es)4096
+ 5907 y(\(other)58 b(v)-9 b(alues)59 b(are)g(handled)h(v)l(ery)f
+ (conserv)-9 b(ativ)l(ely)58 b(in)h(the)g(analy-)4096
+ 6081 y(sis\).)85 b(F)-13 b(or)58 b(an)l(y)f(t)l(yp)t(e)h
+ Fs(\034)17 b Fw(,)58 b Fs(f)16 b(iel)r(ds)p Fw(\()p Fs(\034)h
+ Fw(\))56 b(returns)h(a)h(set)f(of)g(\014eld)h(names)4096
+ 6256 y(for)64 b(the)g(\014elds)h(of)e Fs(\034)17 b Fw(,)67
+ b(whic)l(h)d(is)g(a)g(single)f(degenerate)i(\014eld)g(name)4096
+ 6430 y(if)57 b Fs(\034)75 b Fw(is)57 b(a)h(scalar)f(t)l(yp)t(e)h
+ (\(\014eld)g(names)g(are)g(assumed)g(to)f(b)t(e)i(unique)4096
+ 6604 y(to)65 b(a)g(t)l(yp)t(e\).)110 b(An)66 b(arra)l(y)f(t)l(yp)t(e)h
+ (of)f(kno)l(wn)g(size)h Fs(k)j Fw(ma)l(y)c(b)t(e)h(repre-)4096
+ 6779 y(sen)l(ted)48 b(either)g(as)e(a)i(structure)g(with)f
+ Fs(k)52 b Fw(\014elds)47 b(or)h(b)l(y)f(a)h(single)e(\014eld;)4096
+ 6953 y(an)65 b(unkno)l(wn-size)h(arra)l(y)f(is)f(alw)l(a)l(ys)g
+ (represen)l(ted)j(as)d(the)i(latter.)4096 7127 y(Other)52
+ b(assumptions)f(ab)t(out)g(the)h(input)g(program)g(represen)l(tation)
+ 4096 7302 y(are)f(describ)t(ed)i(in)e(Section)h(3.2.)4245
+ 7476 y(W)-13 b(e)72 b(also)d(assume)i(a)f(load/store)g(program)h
+ (represen)l(tation)g(in)4096 7650 y(whic)l(h)c(virtual)g(registers)g
+ (and)g(memory)h(lo)t(cations)e(are)i(distinct,)4096 7825
+ y(it)e(is)f(not)i(p)t(ossible)e(to)h(tak)l(e)g(the)h(address)f(of)h(a)f
+ (virtual)f(register,)4096 7999 y(and)44 b(virtual)f(registers)g(can)h
+ (only)g(represen)l(t)g(scalar)f(v)-9 b(ariables)44 b(\(i.e.,)4096
+ 8173 y(in)l(teger,)60 b(\015oating)e(p)t(oin)l(t,)j(or)d(p)t(oin)l
+ (ter\).)91 b(Structures,)61 b(arra)l(ys,)e(and)4096 8348
+ y(functions)50 b(are)g(strictly)e(memory)i(ob)9 b(jects)49
+ b(and)i(are)f(accessed)g(only)4096 8522 y(through)43
+ b(load,)g(store,)h(and)e(call)g(instructions.)64 b(All)42
+ b(arithmetic)g(op-)4096 8696 y(erations)48 b(op)t(erate)h(on)g(virtual)
+ f(registers.)66 b(Memory)49 b(is)f(partitioned)4096 8871
+ y(in)l(to)d(heap)i(ob)9 b(jects)46 b(\(allo)t(cated)f(via)h(a)g
+ Fy(malloc)i Fw(instruction\),)e(stac)l(k)4096 9045 y(ob)9
+ b(jects)41 b(\(allo)t(cated)g(via)g(an)g(explicit)g(stac)l(k)g(allo)t
+ (cation)f(instruction)4096 9219 y(named)h Fy(alloca)p
+ Fw(,)k(similar)39 b(to)h(mallo)t(c\),)h(and)g(global)f(ob)9
+ b(jects)40 b(\(global)4096 9394 y(v)-9 b(ariables)51
+ b(and)g(functions\).)4245 9568 y(The)75 b(DS)h(graph)e(for)h(a)f
+ (function)h(is)f(a)g(\014nite)h(directed)g(graph)4096
+ 9742 y(represen)l(ted)53 b(as)d(a)h(tuple)h Fs(D)t(S)8
+ b(G)p Fw(\()p Fs(F)21 b Fw(\))43 b(=)g Fz(h)p Fs(N)8
+ b(;)24 b(E)9 b(;)25 b(E)6980 9759 y Fl(V)7087 9742 y
+ Fs(;)g(C)11 b Fz(i)p Fw(,)50 b(where:)4318 10045 y Fz(\017)74
+ b Fs(N)62 b Fw(is)45 b(a)g(set)g(of)g(no)t(des,)i(called)f(\\DS)g(no)t
+ (des".)66 b(DS)47 b(no)t(des)f(ha)l(v)l(e)4469 10219
+ y(sev)l(eral)51 b(attributes)g(describ)t(ed)h(in)g(Section)f(2.1)g(b)t
+ (elo)l(w.)4318 10399 y Fz(\017)74 b Fs(E)83 b Fw(is)74
+ b(a)g(set)f(of)h(edges)h(in)f(the)g(graph.)137 b(F)-13
+ b(ormally)g(,)80 b Fs(E)i Fw(is)74 b(a)4469 10574 y(function)48
+ b(of)e(t)l(yp)t(e)h Fz(h)p Fs(n)5731 10591 y Fl(s)5797
+ 10574 y Fs(;)26 b(f)5941 10591 y Fl(s)6007 10574 y Fz(i)42
+ b(!)g(h)p Fs(n)6458 10592 y Fl(d)6530 10574 y Fs(;)25
+ b(f)6673 10592 y Fl(d)6745 10574 y Fz(i)p Fw(,)47 b(where)h
+ Fs(n)7428 10591 y Fl(s)7494 10574 y Fs(;)25 b(n)7655
+ 10592 y Fl(d)7770 10574 y Fz(2)43 b Fs(N)16 b Fw(,)4469
+ 10748 y Fs(f)4544 10765 y Fl(s)4660 10748 y Fz(2)50 b
+ Fs(f)16 b(iel)r(ds)p Fw(\()p Fs(T)21 b Fw(\()p Fs(n)5551
+ 10765 y Fl(s)5616 10748 y Fw(\)\))55 b(and)h Fs(f)6169
+ 10766 y Fl(d)6290 10748 y Fz(2)51 b Fs(f)16 b(iel)r(ds)p
+ Fw(\()p Fs(T)21 b Fw(\()p Fs(n)7182 10766 y Fl(d)7252
+ 10748 y Fw(\)\),)56 b(and)g Fs(T)21 b Fw(\()p Fs(n)p
+ Fw(\))4469 10922 y(denotes)57 b(t)l(yp)t(e)g(information)f(computed)h
+ (for)f(the)h(ob)9 b(jects)56 b(of)4469 11097 y Fs(n)45
+ b Fw(as)f(explained)i(b)t(elo)l(w.)66 b Fs(E)53 b Fw(is)44
+ b(a)h(function)g(b)t(ecause)h(a)e(source)p eop end
+ %%Page: 3 3
+ TeXDict begin 3 2 bop 70 -137 a Fw(\014eld)59 b(can)f(ha)l(v)l(e)f
+ (only)h(a)g(single)f(outgoing)g(edge.)88 b(Note)58 b(that)70
+ 37 y(the)65 b(source)f(and)h(target)f(of)g(an)g(edge)h(are)g(b)t(oth)f
+ Fv(\014elds)h Fw(of)f(a)70 211 y(DS)52 b(no)t(de.)-81
+ 363 y Fz(\017)74 b Fs(E)183 380 y Fl(V)373 363 y Fw(is)83
+ b(a)g(function)g(of)g(t)l(yp)t(e)g Fs(v)5 b(ar)t(s)p
+ Fw(\()p Fs(f)16 b Fw(\))96 b Fz(!)f(h)p Fs(n;)25 b(f)16
+ b Fz(i)p Fw(,)90 b(where)70 537 y Fs(v)5 b(ar)t(s)p Fw(\()p
+ Fs(f)16 b Fw(\))74 b(is)f(the)h(set)f(of)h(virtual)f(registers)g(in)h
+ (function)g Fs(f)16 b Fw(.)70 711 y(Conceptually)-13
+ b(,)56 b Fs(E)1152 728 y Fl(V)1259 711 y Fw(\()p Fs(v)5
+ b Fw(\))54 b(is)g(an)g(edge)i(from)e(register)g Fs(v)60
+ b Fw(to)54 b(the)70 886 y(target)65 b(\014eld)h Fz(h)p
+ Fs(n;)25 b(f)16 b Fz(i)64 b Fw(p)t(oin)l(ted)i(to)f(b)l(y)h
+ Fs(v)5 b Fw(,)68 b(if)d Fs(v)70 b Fw(is)65 b(of)g(p)t(oin)l(ter-)70
+ 1060 y(compatible)51 b(t)l(yp)t(e.)-81 1212 y Fz(\017)74
+ b Fs(C)85 b Fw(is)74 b(a)h(set)f(of)h(\\call)f(no)t(des")h(in)g(the)g
+ (graph,)80 b(whic)l(h)75 b(rep-)70 1386 y(resen)l(t)62
+ b(unresolv)l(ed)h(call)f(sites)f(in)h(the)g(con)l(text)g(of)g(the)h
+ (cur-)70 1560 y(ren)l(t)c(function.)91 b(Eac)l(h)59 b(call)f(no)t(de)i
+ Fs(c)55 b Fz(2)h Fs(C)69 b Fw(is)58 b(a)h Fs(k)43 b Fw(+)d(2)58
+ b(tuple:)70 1735 y(\()p Fs(r)l(;)25 b(f)8 b(;)25 b(a)495
+ 1752 y Ft(1)564 1735 y Fs(;)h(:)f(:)g(:)g(;)h(a)987 1753
+ y Fl(k)1063 1735 y Fw(\),)51 b(where)h(ev)l(ery)g(elemen)l(t)f(of)g
+ (the)h(tuple)f(is)g(a)70 1909 y(no)t(de-\014eld)k(pair)d
+ Fz(h)p Fs(n;)25 b(f)16 b Fz(i)p Fw(.)71 b Fs(r)57 b Fw(and)c
+ Fs(f)69 b Fw(resp)t(ectiv)l(ely)53 b(denote)g(the)70
+ 2083 y(v)-9 b(alue)54 b(returned)h(b)l(y)e(the)g(call)g(\(if)f(it)h(is)
+ f(p)t(oin)l(ter-compatible\))70 2258 y(and)60 b(the)g(function\(s\))f
+ (b)t(eing)h(called.)94 b Fs(a)2464 2275 y Ft(1)2559 2258
+ y Fs(:)25 b(:)g(:)g(a)2844 2276 y Fl(k)2981 2258 y Fw(denote)60
+ b(the)70 2432 y(p)t(oin)l(ter-compatible)d(v)-9 b(alues)56
+ b(passed)g(as)g(argumen)l(ts)f(to)h(the)70 2606 y(call)66
+ b(\(other)h(argumen)l(ts)g(are)g(not)f(represen)l(ted\).)116
+ b(Concep-)70 2781 y(tually)-13 b(,)72 b(eac)l(h)c(tuple)g(elemen)l(t)h
+ (can)f(also)f(b)t(e)i(regarded)g(as)f(a)70 2955 y(p)t(oin)l(ts-to)51
+ b(edge)h(in)f(the)g(graph.)-235 3710 y @beginspecial
+ 35 @llx 35 @lly 215 @urx 121 @ury 576 @rwi @setspecial
+ %%BeginDocument: Figures/key.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (vadve) Vikram Adve
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 215 121
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % Set up ISO Latin 1 character encoding
+ /starnetISO {
+         dup dup findfont dup length dict begin
+         { 1 index /FID ne { def }{ pop pop } ifelse
+         } forall
+         /Encoding EncodingVector def
+         currentdict end definefont
+ } def
+ /Times-Roman starnetISO def
+ /Times-Italic starnetISO def
+ /Times-Bold starnetISO def
+ /Times-BoldItalic starnetISO def
+ /Helvetica starnetISO def
+ /Helvetica-Oblique starnetISO def
+ /Helvetica-Bold starnetISO def
+ /Helvetica-BoldOblique starnetISO def
+ /Courier starnetISO def
+ /Courier-Oblique starnetISO def
+ /Courier-Bold starnetISO def
+ /Courier-BoldOblique starnetISO def
+ cleartomark
+ } bind def
+ 
+ %%BeginResource: procset
+ /coord-font-family /Times-Roman def
+ /default-font-family /Times-Roman def
+ /coordfont coord-font-family findfont 8 scalefont def
+ 
+ /InvScaleFactor 1.0 def
+ /set_scale {
+ 	dup 1 exch div /InvScaleFactor exch def
+ 	dup scale
+ } bind def
+ 
+ % styles
+ /solid { [] 0 setdash } bind def
+ /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+ /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+ /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+ /bold { 2 setlinewidth } bind def
+ /filled { } bind def
+ /unfilled { } bind def
+ /rounded { } bind def
+ /diagonals { } bind def
+ 
+ % hooks for setting color 
+ /nodecolor { sethsbcolor } bind def
+ /edgecolor { sethsbcolor } bind def
+ /graphcolor { sethsbcolor } bind def
+ /nopcolor {pop pop pop} bind def
+ 
+ /beginpage {	% i j npages
+ 	/npages exch def
+ 	/j exch def
+ 	/i exch def
+ 	/str 10 string def
+ 	npages 1 gt {
+ 		gsave
+ 			coordfont setfont
+ 			0 0 moveto
+ 			(\() show i str cvs show (,) show j str cvs show (\)) show
+ 		grestore
+ 	} if
+ } bind def
+ 
+ /set_font {
+ 	findfont exch
+ 	scalefont setfont
+ } def
+ 
+ % draw aligned label in bounding box aligned to current point
+ /alignedtext {			% width adj text
+ 	/text exch def
+ 	/adj exch def
+ 	/width exch def
+ 	gsave
+ 		width 0 gt {
+ 			text stringwidth pop adj mul 0 rmoveto
+ 		} if
+ 		[] 0 setdash
+ 		text show
+ 	grestore
+ } def
+ 
+ /boxprim {				% xcorner ycorner xsize ysize
+ 		4 2 roll
+ 		moveto
+ 		2 copy
+ 		exch 0 rlineto
+ 		0 exch rlineto
+ 		pop neg 0 rlineto
+ 		closepath
+ } bind def
+ 
+ /ellipse_path {
+ 	/ry exch def
+ 	/rx exch def
+ 	/y exch def
+ 	/x exch def
+ 	matrix currentmatrix
+ 	newpath
+ 	x y translate
+ 	rx ry scale
+ 	0 0 1 0 360 arc
+ 	setmatrix
+ } bind def
+ 
+ /endpage { showpage } bind def
+ /showpage { } def
+ 
+ /layercolorseq
+ 	[	% layer color sequence - darkest to lightest
+ 		[0 0 0]
+ 		[.2 .8 .8]
+ 		[.4 .8 .8]
+ 		[.6 .8 .8]
+ 		[.8 .8 .8]
+ 	]
+ def
+ 
+ /layerlen layercolorseq length def
+ 
+ /setlayer {/maxlayer exch def /curlayer exch def
+ 	layercolorseq curlayer 1 sub layerlen mod get
+ 	aload pop sethsbcolor
+ 	/nodecolor {nopcolor} def
+ 	/edgecolor {nopcolor} def
+ 	/graphcolor {nopcolor} def
+ } bind def
+ 
+ /onlayer { curlayer ne {invis} if } def
+ 
+ /onlayers {
+ 	/myupper exch def
+ 	/mylower exch def
+ 	curlayer mylower lt
+ 	curlayer myupper gt
+ 	or
+ 	{invis} if
+ } def
+ 
+ /curlayer 0 def
+ 
+ %%EndResource
+ %%EndProlog
+ %%BeginSetup
+ 14 default-font-family set_font
+ 1 setmiterlimit
+ % /arrowlength 10 def
+ % /arrowwidth 5 def
+ 
+ % make sure pdfmark is harmless for PS-interpreters other than Distiller
+ /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+ % make '<<' and '>>' safe on PS Level 1 devices
+ /languagelevel where {pop languagelevel}{1} ifelse
+ 2 lt {
+     userdict (<<) cvn ([) cvn load put
+     userdict (>>) cvn ([) cvn load put
+ } if
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%PageBoundingBox: 36 36 215 121
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 180 86 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	Mem
+ gsave 10 dict begin
+ newpath 12 20 moveto
+ 130 20 lineto
+ stroke
+ newpath 130 20 moveto
+ 136 20 143 25 143 31 curveto
+ stroke
+ newpath 143 31 moveto
+ 143 47 lineto
+ stroke
+ newpath 143 47 moveto
+ 143 53 136 60 130 60 curveto
+ stroke
+ newpath 130 60 moveto
+ 12 60 lineto
+ stroke
+ newpath 12 60 moveto
+ 6 60 0 54 0 48 curveto
+ stroke
+ newpath 0 48 moveto
+ 0 32 lineto
+ stroke
+ newpath 0 32 moveto
+ 0 26 6 20 12 20 curveto
+ stroke
+ gsave 10 dict begin
+ 71 45 moveto 110 -0.5 (<type>: <flags>) alignedtext
+ end grestore
+ newpath 0 40 moveto
+ 143 40 lineto
+ stroke
+ gsave 10 dict begin
+ 36 25 moveto 59 -0.5 (<field0>) alignedtext
+ end grestore
+ newpath 73 20 moveto
+ 73 40 lineto
+ stroke
+ gsave 10 dict begin
+ 108 25 moveto 56 -0.5 (<field1>) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Mem -> Mem
+ newpath 119 20 moveto
+ 131 11 149 0 160 11 curveto
+ 178 29 178 50 160 69 curveto
+ 145 84 123 76 104 65 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 106 63 moveto
+ 96 60 lineto
+ 103 67 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial -85 4178 a Fv(DS)k(no)-8 b(de)1004 3617
+ y @beginspecial 35 @llx 35 @lly 97 @urx 89 @ury 252 @rwi
+ @setspecial
+ %%BeginDocument: Figures/key2.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (vadve) Vikram Adve
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 97 89
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % Set up ISO Latin 1 character encoding
+ /starnetISO {
+         dup dup findfont dup length dict begin
+         { 1 index /FID ne { def }{ pop pop } ifelse
+         } forall
+         /Encoding EncodingVector def
+         currentdict end definefont
+ } def
+ /Times-Roman starnetISO def
+ /Times-Italic starnetISO def
+ /Times-Bold starnetISO def
+ /Times-BoldItalic starnetISO def
+ /Helvetica starnetISO def
+ /Helvetica-Oblique starnetISO def
+ /Helvetica-Bold starnetISO def
+ /Helvetica-BoldOblique starnetISO def
+ /Courier starnetISO def
+ /Courier-Oblique starnetISO def
+ /Courier-Bold starnetISO def
+ /Courier-BoldOblique starnetISO def
+ cleartomark
+ } bind def
+ 
+ %%BeginResource: procset
+ /coord-font-family /Times-Roman def
+ /default-font-family /Times-Roman def
+ /coordfont coord-font-family findfont 8 scalefont def
+ 
+ /InvScaleFactor 1.0 def
+ /set_scale {
+ 	dup 1 exch div /InvScaleFactor exch def
+ 	dup scale
+ } bind def
+ 
+ % styles
+ /solid { [] 0 setdash } bind def
+ /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+ /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+ /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+ /bold { 2 setlinewidth } bind def
+ /filled { } bind def
+ /unfilled { } bind def
+ /rounded { } bind def
+ /diagonals { } bind def
+ 
+ % hooks for setting color 
+ /nodecolor { sethsbcolor } bind def
+ /edgecolor { sethsbcolor } bind def
+ /graphcolor { sethsbcolor } bind def
+ /nopcolor {pop pop pop} bind def
+ 
+ /beginpage {	% i j npages
+ 	/npages exch def
+ 	/j exch def
+ 	/i exch def
+ 	/str 10 string def
+ 	npages 1 gt {
+ 		gsave
+ 			coordfont setfont
+ 			0 0 moveto
+ 			(\() show i str cvs show (,) show j str cvs show (\)) show
+ 		grestore
+ 	} if
+ } bind def
+ 
+ /set_font {
+ 	findfont exch
+ 	scalefont setfont
+ } def
+ 
+ % draw aligned label in bounding box aligned to current point
+ /alignedtext {			% width adj text
+ 	/text exch def
+ 	/adj exch def
+ 	/width exch def
+ 	gsave
+ 		width 0 gt {
+ 			text stringwidth pop adj mul 0 rmoveto
+ 		} if
+ 		[] 0 setdash
+ 		text show
+ 	grestore
+ } def
+ 
+ /boxprim {				% xcorner ycorner xsize ysize
+ 		4 2 roll
+ 		moveto
+ 		2 copy
+ 		exch 0 rlineto
+ 		0 exch rlineto
+ 		pop neg 0 rlineto
+ 		closepath
+ } bind def
+ 
+ /ellipse_path {
+ 	/ry exch def
+ 	/rx exch def
+ 	/y exch def
+ 	/x exch def
+ 	matrix currentmatrix
+ 	newpath
+ 	x y translate
+ 	rx ry scale
+ 	0 0 1 0 360 arc
+ 	setmatrix
+ } bind def
+ 
+ /endpage { showpage } bind def
+ /showpage { } def
+ 
+ /layercolorseq
+ 	[	% layer color sequence - darkest to lightest
+ 		[0 0 0]
+ 		[.2 .8 .8]
+ 		[.4 .8 .8]
+ 		[.6 .8 .8]
+ 		[.8 .8 .8]
+ 	]
+ def
+ 
+ /layerlen layercolorseq length def
+ 
+ /setlayer {/maxlayer exch def /curlayer exch def
+ 	layercolorseq curlayer 1 sub layerlen mod get
+ 	aload pop sethsbcolor
+ 	/nodecolor {nopcolor} def
+ 	/edgecolor {nopcolor} def
+ 	/graphcolor {nopcolor} def
+ } bind def
+ 
+ /onlayer { curlayer ne {invis} if } def
+ 
+ /onlayers {
+ 	/myupper exch def
+ 	/mylower exch def
+ 	curlayer mylower lt
+ 	curlayer myupper gt
+ 	or
+ 	{invis} if
+ } def
+ 
+ /curlayer 0 def
+ 
+ %%EndResource
+ %%EndProlog
+ %%BeginSetup
+ 14 default-font-family set_font
+ 1 setmiterlimit
+ % /arrowlength 10 def
+ % /arrowwidth 5 def
+ 
+ % make sure pdfmark is harmless for PS-interpreters other than Distiller
+ /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+ % make '<<' and '>>' safe on PS Level 1 devices
+ /languagelevel where {pop languagelevel}{1} ifelse
+ 2 lt {
+     userdict (<<) cvn ([) cvn load put
+     userdict (>>) cvn ([) cvn load put
+ } if
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%PageBoundingBox: 36 36 97 89
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 62 54 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	Scalar
+ gsave 10 dict begin
+ 30 26 30 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 30 21 moveto 38 -0.5 (name) alignedtext
+ end grestore
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 921 4178 a(V)c(ariable)1697 3937 y @beginspecial
+ 35 @llx 35 @lly 399 @urx 165 @ury 1152 @rwi @setspecial
+ %%BeginDocument: Figures/key3.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (vadve) Vikram Adve
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 399 165
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % Set up ISO Latin 1 character encoding
+ /starnetISO {
+         dup dup findfont dup length dict begin
+         { 1 index /FID ne { def }{ pop pop } ifelse
+         } forall
+         /Encoding EncodingVector def
+         currentdict end definefont
+ } def
+ /Times-Roman starnetISO def
+ /Times-Italic starnetISO def
+ /Times-Bold starnetISO def
+ /Times-BoldItalic starnetISO def
+ /Helvetica starnetISO def
+ /Helvetica-Oblique starnetISO def
+ /Helvetica-Bold starnetISO def
+ /Helvetica-BoldOblique starnetISO def
+ /Courier starnetISO def
+ /Courier-Oblique starnetISO def
+ /Courier-Bold starnetISO def
+ /Courier-BoldOblique starnetISO def
+ cleartomark
+ } bind def
+ 
+ %%BeginResource: procset
+ /coord-font-family /Times-Roman def
+ /default-font-family /Times-Roman def
+ /coordfont coord-font-family findfont 8 scalefont def
+ 
+ /InvScaleFactor 1.0 def
+ /set_scale {
+ 	dup 1 exch div /InvScaleFactor exch def
+ 	dup scale
+ } bind def
+ 
+ % styles
+ /solid { [] 0 setdash } bind def
+ /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+ /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+ /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+ /bold { 2 setlinewidth } bind def
+ /filled { } bind def
+ /unfilled { } bind def
+ /rounded { } bind def
+ /diagonals { } bind def
+ 
+ % hooks for setting color 
+ /nodecolor { sethsbcolor } bind def
+ /edgecolor { sethsbcolor } bind def
+ /graphcolor { sethsbcolor } bind def
+ /nopcolor {pop pop pop} bind def
+ 
+ /beginpage {	% i j npages
+ 	/npages exch def
+ 	/j exch def
+ 	/i exch def
+ 	/str 10 string def
+ 	npages 1 gt {
+ 		gsave
+ 			coordfont setfont
+ 			0 0 moveto
+ 			(\() show i str cvs show (,) show j str cvs show (\)) show
+ 		grestore
+ 	} if
+ } bind def
+ 
+ /set_font {
+ 	findfont exch
+ 	scalefont setfont
+ } def
+ 
+ % draw aligned label in bounding box aligned to current point
+ /alignedtext {			% width adj text
+ 	/text exch def
+ 	/adj exch def
+ 	/width exch def
+ 	gsave
+ 		width 0 gt {
+ 			text stringwidth pop adj mul 0 rmoveto
+ 		} if
+ 		[] 0 setdash
+ 		text show
+ 	grestore
+ } def
+ 
+ /boxprim {				% xcorner ycorner xsize ysize
+ 		4 2 roll
+ 		moveto
+ 		2 copy
+ 		exch 0 rlineto
+ 		0 exch rlineto
+ 		pop neg 0 rlineto
+ 		closepath
+ } bind def
+ 
+ /ellipse_path {
+ 	/ry exch def
+ 	/rx exch def
+ 	/y exch def
+ 	/x exch def
+ 	matrix currentmatrix
+ 	newpath
+ 	x y translate
+ 	rx ry scale
+ 	0 0 1 0 360 arc
+ 	setmatrix
+ } bind def
+ 
+ /endpage { showpage } bind def
+ /showpage { } def
+ 
+ /layercolorseq
+ 	[	% layer color sequence - darkest to lightest
+ 		[0 0 0]
+ 		[.2 .8 .8]
+ 		[.4 .8 .8]
+ 		[.6 .8 .8]
+ 		[.8 .8 .8]
+ 	]
+ def
+ 
+ /layerlen layercolorseq length def
+ 
+ /setlayer {/maxlayer exch def /curlayer exch def
+ 	layercolorseq curlayer 1 sub layerlen mod get
+ 	aload pop sethsbcolor
+ 	/nodecolor {nopcolor} def
+ 	/edgecolor {nopcolor} def
+ 	/graphcolor {nopcolor} def
+ } bind def
+ 
+ /onlayer { curlayer ne {invis} if } def
+ 
+ /onlayers {
+ 	/myupper exch def
+ 	/mylower exch def
+ 	curlayer mylower lt
+ 	curlayer myupper gt
+ 	or
+ 	{invis} if
+ } def
+ 
+ /curlayer 0 def
+ 
+ %%EndResource
+ %%EndProlog
+ %%BeginSetup
+ 14 default-font-family set_font
+ 1 setmiterlimit
+ % /arrowlength 10 def
+ % /arrowwidth 5 def
+ 
+ % make sure pdfmark is harmless for PS-interpreters other than Distiller
+ /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+ % make '<<' and '>>' safe on PS Level 1 devices
+ /languagelevel where {pop languagelevel}{1} ifelse
+ 2 lt {
+     userdict (<<) cvn ([) cvn load put
+     userdict (>>) cvn ([) cvn load put
+ } if
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%PageBoundingBox: 36 36 399 165
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 364 130 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	Call
+ gsave 10 dict begin
+ newpath 125 80 moveto
+ 202 80 lineto
+ 202 120 lineto
+ 125 120 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 163 105 moveto 23 -0.5 (call) alignedtext
+ end grestore
+ newpath 125 100 moveto
+ 202 100 lineto
+ stroke
+ gsave 10 dict begin
+ 135 85 moveto 6 -0.5 (r) alignedtext
+ end grestore
+ newpath 145 80 moveto
+ 145 100 lineto
+ stroke
+ gsave 10 dict begin
+ 155 85 moveto 7 -0.5 (f) alignedtext
+ end grestore
+ newpath 166 80 moveto
+ 166 100 lineto
+ stroke
+ gsave 10 dict begin
+ 175 85 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ newpath 184 80 moveto
+ 184 100 lineto
+ stroke
+ gsave 10 dict begin
+ 193 85 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	RetVal
+ gsave 10 dict begin
+ newpath 11 8 moveto
+ 51 8 lineto
+ stroke
+ newpath 51 8 moveto
+ 57 8 63 13 63 19 curveto
+ stroke
+ newpath 63 19 moveto
+ 63 32 lineto
+ stroke
+ newpath 63 32 moveto
+ 63 38 57 44 51 44 curveto
+ stroke
+ newpath 51 44 moveto
+ 11 44 lineto
+ stroke
+ newpath 11 44 moveto
+ 5 44 0 38 0 32 curveto
+ stroke
+ newpath 0 32 moveto
+ 0 19 lineto
+ stroke
+ newpath 0 19 moveto
+ 0 13 5 8 11 8 curveto
+ stroke
+ gsave 10 dict begin
+ 31 29 moveto 49 -0.5 (Return) alignedtext
+ 31 13 moveto 41 -0.5 (Value) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Call -> RetVal
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 135 90 moveto
+ 135 90 130 83 125 80 curveto
+ 123 78 96 63 71 49 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 73 47 moveto
+ 63 44 lineto
+ 70 51 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Func
+ gsave 10 dict begin
+ newpath 92 8 moveto
+ 142 8 lineto
+ stroke
+ newpath 142 8 moveto
+ 149 8 155 13 155 19 curveto
+ stroke
+ newpath 155 19 moveto
+ 155 32 lineto
+ stroke
+ newpath 155 32 moveto
+ 155 38 148 44 142 44 curveto
+ stroke
+ newpath 142 44 moveto
+ 92 44 lineto
+ stroke
+ newpath 92 44 moveto
+ 85 44 80 38 80 32 curveto
+ stroke
+ newpath 80 32 moveto
+ 80 19 lineto
+ stroke
+ newpath 80 19 moveto
+ 80 13 86 8 92 8 curveto
+ stroke
+ gsave 10 dict begin
+ 117 29 moveto 43 -0.5 (Called) alignedtext
+ 117 13 moveto 61 -0.5 (Function) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Call -> Func
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 156 90 moveto
+ 156 90 144 71 134 53 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 136 51 moveto
+ 128 44 lineto
+ 131 54 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Arg0
+ gsave 10 dict begin
+ newpath 183 8 moveto
+ 245 8 lineto
+ stroke
+ newpath 245 8 moveto
+ 251 8 258 13 258 19 curveto
+ stroke
+ newpath 258 19 moveto
+ 258 32 lineto
+ stroke
+ newpath 258 32 moveto
+ 258 38 252 44 246 44 curveto
+ stroke
+ newpath 246 44 moveto
+ 184 44 lineto
+ stroke
+ newpath 184 44 moveto
+ 178 44 172 38 172 32 curveto
+ stroke
+ newpath 172 32 moveto
+ 172 19 lineto
+ stroke
+ newpath 172 19 moveto
+ 172 13 177 8 183 8 curveto
+ stroke
+ gsave 10 dict begin
+ 215 29 moveto 30 -0.5 (First) alignedtext
+ 215 13 moveto 72 -0.5 (Argument) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Call -> Arg0
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 175 90 moveto
+ 175 90 187 70 198 53 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 201 54 moveto
+ 204 44 lineto
+ 196 51 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Arg1
+ gsave 10 dict begin
+ newpath 287 8 moveto
+ 349 8 lineto
+ stroke
+ newpath 349 8 moveto
+ 355 8 362 13 362 19 curveto
+ stroke
+ newpath 362 19 moveto
+ 362 32 lineto
+ stroke
+ newpath 362 32 moveto
+ 362 38 356 44 350 44 curveto
+ stroke
+ newpath 350 44 moveto
+ 288 44 lineto
+ stroke
+ newpath 288 44 moveto
+ 282 44 276 38 276 32 curveto
+ stroke
+ newpath 276 32 moveto
+ 276 19 lineto
+ stroke
+ newpath 276 19 moveto
+ 276 13 281 8 287 8 curveto
+ stroke
+ gsave 10 dict begin
+ 319 29 moveto 48 -0.5 (Second) alignedtext
+ 319 13 moveto 72 -0.5 (Argument) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Call -> Arg1
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 193 90 moveto
+ 193 90 197 83 202 80 curveto
+ 207 75 240 61 269 48 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 269 51 moveto
+ 277 44 lineto
+ 267 46 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 2366 4178 a(Cal)8 b(l)55 b(No)-8 b(de)868
+ 4422 y Fw(Figure)52 b(2:)68 b Fm(Graph)47 b(Notation)-154
+ 4680 y Fw(T)-13 b(o)40 b(illustrate)f(the)h(DS)h(graphs)f(and)h(the)f
+ (analysis)f(algorithm,)h(w)l(e)-303 4854 y(use)f(the)g(co)t(de)h(in)f
+ (Figure)g(1)g(as)g(a)f(running)i(example.)64 b(This)39
+ b(example)-303 5028 y(creates)d(and)h(tra)l(v)l(erses)e(t)l(w)l(o)h
+ (disjoin)l(t)f(link)l(ed)h(lists,)i(using)e(iteration,)-303
+ 5203 y(recursion,)65 b(function)f(p)t(oin)l(ters,)h(a)d(p)t(oin)l(ter)h
+ (to)g(a)f(sub)t(ob)9 b(ject,)66 b(and)-303 5377 y(a)g(global)f(v)-9
+ b(ariable)67 b(reference.)115 b(Despite)67 b(the)g(complexit)l(y)f(of)g
+ (the)-303 5551 y(example,)58 b(Data)e(Structure)h(Analysis)e(is)h(able)
+ h(to)f(pro)l(v)l(e)g(that)g(the)-303 5726 y(t)l(w)l(o)c(lists)f
+ Fy(X)i Fw(and)h Fy(Y)f Fw(are)g(disjoin)l(t)f(\(the)h(\014nal)g(DS)h
+ (graph)f(computed)-303 5900 y(for)e Fy(main)i Fw(is)d(sho)l(wn)h(in)g
+ (Figure)h(10\).)-154 6074 y(T)-13 b(o)44 b(illustrate)f(the)h(DS)h
+ (graphs)f(computed)h(b)l(y)f(v)-9 b(arious)44 b(stages)f(of)-303
+ 6249 y(our)49 b(algorithm,)f(w)l(e)i(render)h(DS)f(graphs)f(using)g
+ (the)h(graphical)f(no-)-303 6423 y(tation)f(sho)l(wn)g(in)h(Figure)g
+ (2.)67 b(Figure)49 b(3)g(sho)l(ws)f(an)h(example)g(graph)-303
+ 6597 y(computed)i(for)g(the)f Fy(do)p 1067 6597 48 7
+ v 58 w(all)i Fw(and)f Fy(addG)h Fw(functions,)e(b)t(efore)i(an)l(y)e
+ (in-)-303 6772 y(terpro)t(cedural)d(information)f(is)f(applied.)67
+ b(The)47 b(\014gure)g(includes)g(an)-303 6946 y(example)40
+ b(of)g(a)g(call)g(no)t(de,)j(whic)l(h)d(\(in)g(this)f(case\))h(calls)f
+ (the)i(function)-303 7120 y(p)t(oin)l(ted)54 b(to)g(b)l(y)g
+ Fy(FP)p Fw(,)g(passing)f(the)h(memory)h(ob)9 b(ject)53
+ b(p)t(oin)l(ted)i(to)e(b)l(y)-303 7295 y Fy(L)e Fw(as)g(an)g(argumen)l
+ (t,)g(and)h(ignores)f(the)g(return)h(v)-9 b(alue)52 b(of)f(the)g(call.)
+ -303 7596 y Fx(2.1)198 b(Graph)49 b(Nodes)h(and)f(Fields)-154
+ 7812 y Fw(The)43 b(DS)f(no)t(des)h(in)f(a)f(DS)i(graph)f(are)g(resp)t
+ (onsible)h(for)e(represen)l(t-)-303 7986 y(ing)35 b(information)g(ab)t
+ (out)h(a)f(set)g(of)h(memory)f(ob)9 b(jects)35 b(corresp)t(onding)-303
+ 8161 y(to)57 b(that)h(no)t(de.)90 b(Eac)l(h)58 b(no)t(de)i
+ Fs(n)e Fw(has)g(three)h(pieces)f(of)g(information)-303
+ 8335 y(asso)t(ciated)50 b(with)h(it:)-81 8606 y Fz(\017)74
+ b Fs(T)21 b Fw(\()p Fs(n)p Fw(\))63 b(iden)l(ti\014es)g(a)g
+ (language-sp)t(eci\014c)h(t)l(yp)t(e)g(for)f(the)h(mem-)70
+ 8780 y(ory)d(ob)9 b(jects)61 b(represen)l(ted)i(b)l(y)e
+ Fs(n)p Fw(.)98 b(Section)62 b(2.1.4)e(describ)t(es)70
+ 8954 y(ho)l(w)g(this)f(is)g(computed)i(for)e(no)t(des)i(represen)l
+ (ting)f(m)l(ultiple)70 9129 y(incompatible)51 b(memory)h(ob)9
+ b(jects.)-81 9280 y Fz(\017)74 b Fs(G)p Fw(\()p Fs(n)p
+ Fw(\))67 b(represen)l(ts)h(a)g(\(p)t(ossibly)f(empt)l(y\))g(set)h(of)f
+ (global)g(ob-)70 9454 y(jects,)51 b(namely)-13 b(,)51
+ b(all)f(those)h(represen)l(ted)i(b)l(y)e(no)t(de)i Fs(n)p
+ Fw(.)-81 9606 y Fz(\017)74 b Fs(f)16 b(l)r(ag)5 b(s)p
+ Fw(\()p Fs(n)p Fw(\))40 b(is)f(a)h(set)g(of)g(\015ags)f(asso)t(ciated)h
+ (with)f(no)t(de)j Fs(n)p Fw(.)63 b(There)70 9780 y(are)43
+ b(eigh)l(t)g(p)t(ossible)f(\015ags)h(\()p Fk(h)p Fw(,)p
+ Fk(s)p Fw(,)p Fk(g)p Fw(,)p Fk(u)p Fw(,)f Fk(m)p Fw(,)p
+ Fk(r)p Fw(,)i Fk(c)f Fw(and)g Fk(o)p Fw(\),)h(de\014ned)70
+ 9954 y(b)t(elo)l(w.)-154 10225 y(The)35 b(t)l(yp)t(e)g(information)e
+ Fs(T)21 b Fw(\()p Fs(n)p Fw(\))33 b(determines)i(the)g(n)l(um)l(b)t(er)
+ g(of)f(\014elds)-303 10399 y(and)40 b(outgoing)g(edges)g(in)h(a)f(no)t
+ (de.)65 b(A)40 b(no)t(de)i(can)e(ha)l(v)l(e)g(one)h(outgoing)-303
+ 10574 y(edge)62 b(for)g(eac)l(h)g(p)t(oin)l(ter-compatible)g(\014eld)g
+ (in)g Fs(T)21 b Fw(\()p Fs(n)p Fw(\).)99 b(An)62 b(incom-)-303
+ 10748 y(ing)67 b(edge)h(can)h(p)t(oin)l(t)e(to)g(an)h(arbitrary)f
+ (\014eld)h(of)g(the)g(no)t(de)h(\(e.g.,)-303 10922 y(the)e(\\)p
+ Fy(&L->Data)p Fw(")k(temp)t(orary)c(in)g(Figure)h(3)f(p)t(oin)l(ts)f
+ (to)h(the)g(in)l(te-)-303 11097 y(ger)i(\014eld\),)k(but)c(not)f(to)h
+ (an)l(y)f(other)h(b)l(yte)g(o\013set.)120 b(Section)69
+ b(2.1.4)4096 -137 y(describ)t(es)62 b(ho)l(w)f(t)l(yp)t(e-unsafe)h(co)t
+ (de)g(using)e(p)t(oin)l(ters)h(to)g(arbitrary)4096 37
+ y(b)l(yte)51 b(o\013ests)f(are)h(handled.)4245 211 y(The)63
+ b(globals)f Fs(G)p Fw(\()p Fs(n)p Fw(\))g(represen)l(ted)i(b)l(y)e(eac)
+ l(h)h(no)t(de)h(can)f(b)t(e)g(used)4096 386 y(to)i(\014nd)h(the)g
+ (targets)e(of)h(function)h(p)t(oin)l(ters,)i(b)t(oth)e(b)l(y)f(clien)l
+ (ts)g(of)4096 560 y(Data)49 b(Structure)i(Analysis)d(and)i(to)f
+ (incremen)l(tally)h(construct)f(the)4096 734 y(call-graph)i(during)h
+ (the)f(analysis.)p 4361 968 2203 7 v 4361 2061 7 1093
+ v 4412 2016 a @beginspecial 35 @llx 35 @lly 349 @urx
+ 185 @ury 1260 @rwi @setspecial
+ %%BeginDocument: Figures/local.do_all.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (vadve) Vikram Adve
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 349 185
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % Set up ISO Latin 1 character encoding
+ /starnetISO {
+         dup dup findfont dup length dict begin
+         { 1 index /FID ne { def }{ pop pop } ifelse
+         } forall
+         /Encoding EncodingVector def
+         currentdict end definefont
+ } def
+ /Times-Roman starnetISO def
+ /Times-Italic starnetISO def
+ /Times-Bold starnetISO def
+ /Times-BoldItalic starnetISO def
+ /Helvetica starnetISO def
+ /Helvetica-Oblique starnetISO def
+ /Helvetica-Bold starnetISO def
+ /Helvetica-BoldOblique starnetISO def
+ /Courier starnetISO def
+ /Courier-Oblique starnetISO def
+ /Courier-Bold starnetISO def
+ /Courier-BoldOblique starnetISO def
+ cleartomark
+ } bind def
+ 
+ %%BeginResource: procset
+ /coord-font-family /Times-Roman def
+ /default-font-family /Times-Roman def
+ /coordfont coord-font-family findfont 8 scalefont def
+ 
+ /InvScaleFactor 1.0 def
+ /set_scale {
+ 	dup 1 exch div /InvScaleFactor exch def
+ 	dup scale
+ } bind def
+ 
+ % styles
+ /solid { [] 0 setdash } bind def
+ /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+ /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+ /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+ /bold { 2 setlinewidth } bind def
+ /filled { } bind def
+ /unfilled { } bind def
+ /rounded { } bind def
+ /diagonals { } bind def
+ 
+ % hooks for setting color 
+ /nodecolor { sethsbcolor } bind def
+ /edgecolor { sethsbcolor } bind def
+ /graphcolor { sethsbcolor } bind def
+ /nopcolor {pop pop pop} bind def
+ 
+ /beginpage {	% i j npages
+ 	/npages exch def
+ 	/j exch def
+ 	/i exch def
+ 	/str 10 string def
+ 	npages 1 gt {
+ 		gsave
+ 			coordfont setfont
+ 			0 0 moveto
+ 			(\() show i str cvs show (,) show j str cvs show (\)) show
+ 		grestore
+ 	} if
+ } bind def
+ 
+ /set_font {
+ 	findfont exch
+ 	scalefont setfont
+ } def
+ 
+ % draw aligned label in bounding box aligned to current point
+ /alignedtext {			% width adj text
+ 	/text exch def
+ 	/adj exch def
+ 	/width exch def
+ 	gsave
+ 		width 0 gt {
+ 			text stringwidth pop adj mul 0 rmoveto
+ 		} if
+ 		[] 0 setdash
+ 		text show
+ 	grestore
+ } def
+ 
+ /boxprim {				% xcorner ycorner xsize ysize
+ 		4 2 roll
+ 		moveto
+ 		2 copy
+ 		exch 0 rlineto
+ 		0 exch rlineto
+ 		pop neg 0 rlineto
+ 		closepath
+ } bind def
+ 
+ /ellipse_path {
+ 	/ry exch def
+ 	/rx exch def
+ 	/y exch def
+ 	/x exch def
+ 	matrix currentmatrix
+ 	newpath
+ 	x y translate
+ 	rx ry scale
+ 	0 0 1 0 360 arc
+ 	setmatrix
+ } bind def
+ 
+ /endpage { showpage } bind def
+ /showpage { } def
+ 
+ /layercolorseq
+ 	[	% layer color sequence - darkest to lightest
+ 		[0 0 0]
+ 		[.2 .8 .8]
+ 		[.4 .8 .8]
+ 		[.6 .8 .8]
+ 		[.8 .8 .8]
+ 	]
+ def
+ 
+ /layerlen layercolorseq length def
+ 
+ /setlayer {/maxlayer exch def /curlayer exch def
+ 	layercolorseq curlayer 1 sub layerlen mod get
+ 	aload pop sethsbcolor
+ 	/nodecolor {nopcolor} def
+ 	/edgecolor {nopcolor} def
+ 	/graphcolor {nopcolor} def
+ } bind def
+ 
+ /onlayer { curlayer ne {invis} if } def
+ 
+ /onlayers {
+ 	/myupper exch def
+ 	/mylower exch def
+ 	curlayer mylower lt
+ 	curlayer myupper gt
+ 	or
+ 	{invis} if
+ } def
+ 
+ /curlayer 0 def
+ 
+ %%EndResource
+ %%EndProlog
+ %%BeginSetup
+ 14 default-font-family set_font
+ 1 setmiterlimit
+ % /arrowlength 10 def
+ % /arrowwidth 5 def
+ 
+ % make sure pdfmark is harmless for PS-interpreters other than Distiller
+ /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+ % make '<<' and '>>' safe on PS Level 1 devices
+ /languagelevel where {pop languagelevel}{1} ifelse
+ 2 lt {
+     userdict (<<) cvn ([) cvn load put
+     userdict (>>) cvn ([) cvn load put
+ } if
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%PageBoundingBox: 36 36 349 185
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 314 150 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	NodeVoid
+ gsave 10 dict begin
+ newpath 44 26 moveto
+ 75 26 lineto
+ stroke
+ newpath 75 26 moveto
+ 80 26 87 31 87 37 curveto
+ stroke
+ newpath 87 37 moveto
+ 87 50 lineto
+ stroke
+ newpath 87 50 moveto
+ 87 56 81 62 75 62 curveto
+ stroke
+ newpath 75 62 moveto
+ 44 62 lineto
+ stroke
+ newpath 44 62 moveto
+ 39 62 33 56 33 50 curveto
+ stroke
+ newpath 33 50 moveto
+ 33 37 lineto
+ stroke
+ newpath 33 37 moveto
+ 33 31 38 26 44 26 curveto
+ stroke
+ gsave 10 dict begin
+ 60 39 moveto 36 -0.5 (void: ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	NodeList
+ gsave 10 dict begin
+ newpath 150 24 moveto
+ 198 24 lineto
+ stroke
+ newpath 198 24 moveto
+ 204 24 210 29 210 35 curveto
+ stroke
+ newpath 210 35 moveto
+ 210 51 lineto
+ stroke
+ newpath 210 51 moveto
+ 210 57 204 64 198 64 curveto
+ stroke
+ newpath 198 64 moveto
+ 150 64 lineto
+ stroke
+ newpath 150 64 moveto
+ 144 64 139 58 139 52 curveto
+ stroke
+ newpath 139 52 moveto
+ 139 36 lineto
+ stroke
+ newpath 139 36 moveto
+ 139 30 144 24 150 24 curveto
+ stroke
+ gsave 10 dict begin
+ 174 49 moveto 38 -0.5 (list: R) alignedtext
+ end grestore
+ newpath 139 44 moveto
+ 210 44 lineto
+ stroke
+ gsave 10 dict begin
+ 158 29 moveto 25 -0.5 (list*) alignedtext
+ end grestore
+ newpath 178 24 moveto
+ 178 44 lineto
+ stroke
+ gsave 10 dict begin
+ 194 29 moveto 18 -0.5 (int) alignedtext
+ end grestore
+ end grestore
+ 
+ %	NodeList -> NodeList
+ newpath 172 24 moveto
+ 187 13 212 0 227 15 curveto
+ 245 33 245 54 227 73 curveto
+ 219 80 209 77 200 70 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 201 68 moveto
+ 192 64 lineto
+ 199 72 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	NodeL
+ gsave 10 dict begin
+ 99 120 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 99 115 moveto 10 -0.5 (L) alignedtext
+ end grestore
+ end grestore
+ 
+ %	NodeL -> NodeList
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 118 101 moveto
+ 127 92 138 81 148 70 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 119 103 moveto
+ 116 100 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 149 73 moveto
+ 154 64 lineto
+ 145 69 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	NodeFP
+ gsave 10 dict begin
+ 27 120 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 27 115 moveto 18 -0.5 (FP) alignedtext
+ end grestore
+ end grestore
+ 
+ %	NodeFP -> NodeVoid
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 37 98 moveto
+ 40 90 45 80 48 71 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 39 99 moveto
+ 35 96 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 50 72 moveto
+ 52 62 lineto
+ 46 70 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	NodeLData
+ gsave 10 dict begin
+ 266 120 46 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 266 115 moveto 71 -0.5 (&L->Data) alignedtext
+ end grestore
+ end grestore
+ 
+ %	NodeLData -> NodeList
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 244 100 moveto
+ 232 90 219 77 210 64 curveto
+ 208 61 205 57 203 53 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 245 98 moveto
+ 242 101 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 205 52 moveto
+ 199 44 lineto
+ 201 54 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	NodeCall
+ gsave 10 dict begin
+ newpath 144 100 moveto
+ 203 100 lineto
+ 203 140 lineto
+ 144 140 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 173 125 moveto 23 -0.5 (call) alignedtext
+ end grestore
+ newpath 144 120 moveto
+ 203 120 lineto
+ stroke
+ gsave 10 dict begin
+ 154 105 moveto 6 -0.5 (r) alignedtext
+ end grestore
+ newpath 164 100 moveto
+ 164 120 lineto
+ stroke
+ gsave 10 dict begin
+ 174 105 moveto 7 -0.5 (f) alignedtext
+ end grestore
+ newpath 185 100 moveto
+ 185 120 lineto
+ stroke
+ gsave 10 dict begin
+ 194 105 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	NodeCall -> NodeVoid
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 174 110 moveto
+ 174 110 128 89 92 67 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 94 65 moveto
+ 84 62 lineto
+ 91 69 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	NodeCall -> NodeList
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 194 110 moveto
+ 194 110 194 78 194 55 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 197 54 moveto
+ 194 44 lineto
+ 192 54 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 6557 2061 V 4361 2068 2203 7 v 6769 1067
+ 1063 7 v 6769 2061 7 995 v 2408 w @beginspecial 35 @llx
+ 35 @lly 173 @urx 165 @ury 576 @rwi @setspecial
+ %%BeginDocument: Figures/local.addG.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (vadve) Vikram Adve
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 173 165
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % Set up ISO Latin 1 character encoding
+ /starnetISO {
+         dup dup findfont dup length dict begin
+         { 1 index /FID ne { def }{ pop pop } ifelse
+         } forall
+         /Encoding EncodingVector def
+         currentdict end definefont
+ } def
+ /Times-Roman starnetISO def
+ /Times-Italic starnetISO def
+ /Times-Bold starnetISO def
+ /Times-BoldItalic starnetISO def
+ /Helvetica starnetISO def
+ /Helvetica-Oblique starnetISO def
+ /Helvetica-Bold starnetISO def
+ /Helvetica-BoldOblique starnetISO def
+ /Courier starnetISO def
+ /Courier-Oblique starnetISO def
+ /Courier-Bold starnetISO def
+ /Courier-BoldOblique starnetISO def
+ cleartomark
+ } bind def
+ 
+ %%BeginResource: procset
+ /coord-font-family /Times-Roman def
+ /default-font-family /Times-Roman def
+ /coordfont coord-font-family findfont 8 scalefont def
+ 
+ /InvScaleFactor 1.0 def
+ /set_scale {
+ 	dup 1 exch div /InvScaleFactor exch def
+ 	dup scale
+ } bind def
+ 
+ % styles
+ /solid { [] 0 setdash } bind def
+ /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+ /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+ /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+ /bold { 2 setlinewidth } bind def
+ /filled { } bind def
+ /unfilled { } bind def
+ /rounded { } bind def
+ /diagonals { } bind def
+ 
+ % hooks for setting color 
+ /nodecolor { sethsbcolor } bind def
+ /edgecolor { sethsbcolor } bind def
+ /graphcolor { sethsbcolor } bind def
+ /nopcolor {pop pop pop} bind def
+ 
+ /beginpage {	% i j npages
+ 	/npages exch def
+ 	/j exch def
+ 	/i exch def
+ 	/str 10 string def
+ 	npages 1 gt {
+ 		gsave
+ 			coordfont setfont
+ 			0 0 moveto
+ 			(\() show i str cvs show (,) show j str cvs show (\)) show
+ 		grestore
+ 	} if
+ } bind def
+ 
+ /set_font {
+ 	findfont exch
+ 	scalefont setfont
+ } def
+ 
+ % draw aligned label in bounding box aligned to current point
+ /alignedtext {			% width adj text
+ 	/text exch def
+ 	/adj exch def
+ 	/width exch def
+ 	gsave
+ 		width 0 gt {
+ 			text stringwidth pop adj mul 0 rmoveto
+ 		} if
+ 		[] 0 setdash
+ 		text show
+ 	grestore
+ } def
+ 
+ /boxprim {				% xcorner ycorner xsize ysize
+ 		4 2 roll
+ 		moveto
+ 		2 copy
+ 		exch 0 rlineto
+ 		0 exch rlineto
+ 		pop neg 0 rlineto
+ 		closepath
+ } bind def
+ 
+ /ellipse_path {
+ 	/ry exch def
+ 	/rx exch def
+ 	/y exch def
+ 	/x exch def
+ 	matrix currentmatrix
+ 	newpath
+ 	x y translate
+ 	rx ry scale
+ 	0 0 1 0 360 arc
+ 	setmatrix
+ } bind def
+ 
+ /endpage { showpage } bind def
+ /showpage { } def
+ 
+ /layercolorseq
+ 	[	% layer color sequence - darkest to lightest
+ 		[0 0 0]
+ 		[.2 .8 .8]
+ 		[.4 .8 .8]
+ 		[.6 .8 .8]
+ 		[.8 .8 .8]
+ 	]
+ def
+ 
+ /layerlen layercolorseq length def
+ 
+ /setlayer {/maxlayer exch def /curlayer exch def
+ 	layercolorseq curlayer 1 sub layerlen mod get
+ 	aload pop sethsbcolor
+ 	/nodecolor {nopcolor} def
+ 	/edgecolor {nopcolor} def
+ 	/graphcolor {nopcolor} def
+ } bind def
+ 
+ /onlayer { curlayer ne {invis} if } def
+ 
+ /onlayers {
+ 	/myupper exch def
+ 	/mylower exch def
+ 	curlayer mylower lt
+ 	curlayer myupper gt
+ 	or
+ 	{invis} if
+ } def
+ 
+ /curlayer 0 def
+ 
+ %%EndResource
+ %%EndProlog
+ %%BeginSetup
+ 14 default-font-family set_font
+ 1 setmiterlimit
+ % /arrowlength 10 def
+ % /arrowwidth 5 def
+ 
+ % make sure pdfmark is harmless for PS-interpreters other than Distiller
+ /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+ % make '<<' and '>>' safe on PS Level 1 devices
+ /languagelevel where {pop languagelevel}{1} ifelse
+ 2 lt {
+     userdict (<<) cvn ([) cvn load put
+     userdict (>>) cvn ([) cvn load put
+ } if
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%PageBoundingBox: 36 36 173 165
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 138 130 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	Mem
+ gsave 10 dict begin
+ newpath 11 8 moveto
+ 55 8 lineto
+ stroke
+ newpath 55 8 moveto
+ 60 8 67 13 67 19 curveto
+ stroke
+ newpath 67 19 moveto
+ 67 35 lineto
+ stroke
+ newpath 67 35 moveto
+ 67 41 61 48 55 48 curveto
+ stroke
+ newpath 55 48 moveto
+ 11 48 lineto
+ stroke
+ newpath 11 48 moveto
+ 6 48 0 42 0 36 curveto
+ stroke
+ newpath 0 36 moveto
+ 0 20 lineto
+ stroke
+ newpath 0 20 moveto
+ 0 14 5 8 11 8 curveto
+ stroke
+ gsave 10 dict begin
+ 33 33 moveto 53 -0.5 (int: MR) alignedtext
+ end grestore
+ newpath 0 28 moveto
+ 67 28 lineto
+ stroke
+ gsave 10 dict begin
+ 33 13 moveto 18 -0.5 (int) alignedtext
+ end grestore
+ end grestore
+ 
+ %	X
+ gsave 10 dict begin
+ 33 102 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 33 97 moveto 12 -0.5 (X) alignedtext
+ end grestore
+ end grestore
+ 
+ %	X -> Mem
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 33 79 moveto
+ 33 72 33 65 33 57 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 36 79 moveto
+ 31 79 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 36 58 moveto
+ 33 48 lineto
+ 31 58 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Global
+ gsave 10 dict begin
+ newpath 90 84 moveto
+ 124 84 lineto
+ stroke
+ newpath 124 84 moveto
+ 131 84 137 89 137 95 curveto
+ stroke
+ newpath 137 95 moveto
+ 137 108 lineto
+ stroke
+ newpath 137 108 moveto
+ 137 114 130 120 124 120 curveto
+ stroke
+ newpath 124 120 moveto
+ 90 120 lineto
+ stroke
+ newpath 90 120 moveto
+ 83 120 78 114 78 108 curveto
+ stroke
+ newpath 78 108 moveto
+ 78 95 lineto
+ stroke
+ newpath 78 95 moveto
+ 78 89 84 84 90 84 curveto
+ stroke
+ gsave 10 dict begin
+ 107 105 moveto 37 -0.5 (int: R) alignedtext
+ 107 89 moveto 45 -0.5 (Global) alignedtext
+ end grestore
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 7825 2061 V 6769 2068 1063 7 v 4616 2191
+ a(Figure)h(3:)68 b Fm(Lo)t(cal)46 b(DSGraphs)h(for)g
+ Fj(do)p 6719 2191 43 7 v 50 w(all)e Fm(and)j Fj(addG)4142
+ 2537 y Fi(2.1.1)182 b(Memory)47 b(Allocation)f(Classes)4245
+ 2753 y Fw(The)64 b Fu('H')p Fw(,)g Fu('S')p Fw(,)g Fu('G')f
+ Fw(and)h Fu('U')g Fw(\015ags)f(in)g Fs(f)16 b(l)r(ag)5
+ b(s)p Fw(\()p Fs(n)p Fw(\))63 b(are)h(used)g(to)4096
+ 2927 y(distinguish)49 b(four)i(classes)e(of)h(memory)h(ob)9
+ b(jects:)67 b Fu(H)p Fw(eap-allo)t(cated,)4096 3101 y
+ Fu(S)p Fw(tac)l(k-allo)t(cated,)95 b Fu(G)p Fw(lobals)87
+ b(\(whic)l(h)g(includes)h(functions\),)95 b(and)4096
+ 3276 y Fu(U)p Fw(nkno)l(wn)49 b(ob)9 b(jects.)66 b(Multiple)48
+ b(\015ags)h(ma)l(y)f(b)t(e)h(presen)l(t)g(in)g(a)f(single)4096
+ 3450 y(DS)e(no)t(de,)h(if,)f(for)g(example,)g(analysis)e(\014nds)i(a)g
+ (p)t(oin)l(ter)f(whic)l(h)h(ma)l(y)4096 3625 y(p)t(oin)l(t)h(to)g
+ (either)h(a)g(heap)g(ob)9 b(ject)48 b(or)f(a)g(stac)l(k)g(ob)9
+ b(ject.)67 b(Memory)47 b(ob-)4096 3799 y(jects)i(are)h(mark)l(ed)g(as)e
+ (Unkno)l(wn)j(when)f(the)g(instruction)f(creating)4096
+ 3973 y(it)60 b(is)g(not)h(iden)l(ti\014able,)i(e.g.,)f(when)g(a)e
+ (constan)l(t)g(v)-9 b(alue)62 b(is)e(cast)g(to)4096 4148
+ y(a)k(p)t(oin)l(ter)h(v)-9 b(alue)65 b(\(for)g(example,)j(to)c(access)g
+ (a)h(memory-mapp)t(ed)4096 4322 y(hardw)l(are)53 b(device\),)g(or)f
+ (when)i(unanalyzable)f(address)f(arithmetic)4096 4496
+ y(is)81 b(found)i(\(these)e(cases)h(o)t(ccur)h(infrequen)l(tly)f(in)g
+ (p)t(ortable)g(pro-)4096 4671 y(grams\).)k(No)t(des)58
+ b(represen)l(ting)g(ob)9 b(jects)57 b(created)h(in)g(an)g(external,)
+ 4096 4845 y(unanalyzed)51 b(function)g(are)f Fv(not)h
+ Fw(mark)l(ed)f Fu('U')p Fw(,)g(but)h(are)f(treated)g(as)4096
+ 5019 y(\\missing)f(information")i(as)f(describ)t(ed)j(b)t(elo)l(w.)4142
+ 5342 y Fi(2.1.2)182 b(Mod/Ref)46 b(information)4245 5558
+ y Fw(Our)75 b(analysis)c(k)l(eeps)j(trac)l(k)f(of)g(whether)i(a)e
+ (particular)g(mem-)4096 5732 y(ory)66 b(ob)9 b(ject)66
+ b(has)g(b)t(een)i Fu(M)p Fw(o)t(di\014ed)f(or)f Fu(R)p
+ Fw(ead)g(within)g(the)h(curren)l(t)4096 5906 y(scop)t(e)e(of)g
+ (analysis,)i(and)e(this)f(is)g(represen)l(ted)j(via)d(the)h
+ Fu('M')g Fw(and)4096 6081 y Fu('R')g Fw(\015ags.)109
+ b(F)-13 b(or)65 b(example,)k(in)c(the)g Fy(do)p 6431
+ 6081 48 7 v 58 w(all)h Fw(function,)j(the)c(state-)4096
+ 6255 y(men)l(t)37 b(\\)p Fy(L)79 b(=)g(L->Next;)p Fw(")45
+ b(reads)37 b(a)g(p)t(oin)l(ter)g(elemen)l(t)g(from)g(the)h(no)t(de)4096
+ 6429 y(p)t(oin)l(ted)82 b(to)e(b)l(y)i Fy(L)p Fw(,)f(whic)l(h)h(causes)
+ f(the)h Fu('R')f Fw(\015ag)g(to)g(b)t(e)h(set)f(in)4096
+ 6604 y Fs(f)16 b(l)r(ag)5 b(s)p Fw(\()p Fs(node)p Fw(\()p
+ Fs(E)5017 6621 y Fl(V)5124 6604 y Fw(\()p Fy(L)p Fw(\)\)\))58
+ b(as)h(sho)l(wn)g(in)g(Figure)h(3.)91 b(Mo)t(d/Ref)60
+ b(infor-)4096 6778 y(mation)50 b(is)h(useful)g(to)g(a)g(v)-9
+ b(ariet)l(y)51 b(of)g(clien)l(t)g(analyses.)4142 7101
+ y Fi(2.1.3)182 b(Ag)n(gr)-7 b(essive)47 b(analysis)f(with)g(missing)g
+ (information)4245 7317 y Fw(Practical)91 b(algorithms)f(m)l(ust)h
+ (correctly)h(handle)g(incomplete)4096 7491 y(programs:)67
+ b(those)51 b(where)h(co)t(de)f(for)g(some)g(functions)g(are)g(una)l(v)
+ -9 b(ail-)4096 7665 y(able,)66 b(or)d(where)h(the)g(\\program")f(is)f
+ (actually)h(a)g(library)g(of)g(co)t(de)4096 7840 y(without)52
+ b(information)g(ab)t(out)h(the)g(clien)l(ts.)73 b(In)53
+ b(order)h(to)e(allo)l(w)g(an)4096 8014 y(aggressiv)l(e)38
+ b(analysis)g(ev)l(en)i(under)h(suc)l(h)f(situations,)g(eac)l(h)f(DS)i
+ (no)t(de)4096 8188 y(trac)l(ks)50 b(whether)j(there)f(ma)l(y)e(b)t(e)i
+ (information)f(missing)e(from)i(it.)4245 8363 y(F)-13
+ b(or)66 b(example,)j(in)c(Figure)h(3,)j(Data)c(Structure)h(Analysis)e
+ (do)t(es)4096 8537 y(not)59 b(y)l(et)h(kno)l(w)f(an)l(ything)g(ab)t
+ (out)h(the)g(incoming)f Fy(L)h Fw(and)g Fy(FP)g Fw(argu-)4096
+ 8711 y(men)l(ts)49 b(b)t(ecause)h(it)f(hasn't)g(p)t(erformed)h(in)l
+ (terpro)t(cedural)h(analysis.)4096 8886 y(Inside)56 b(this)e(function,)
+ i(it)f(can)g(determine)h(that)f Fy(L)h Fw(is)e(treated)h(as)g(a)4096
+ 9060 y Fy(list)48 b Fw(ob)9 b(ject)47 b(\(the)g(construction)f
+ (algorithm)g(lo)t(oks)g(at)g(ho)l(w)h(p)t(oin)l(t-)4096
+ 9234 y(ers)62 b(are)g(used,)j(not)d(what)g(their)g(declared)i(t)l(yp)t
+ (es)e(are\),)i(that)e(it)f(is)4096 9409 y(read)66 b(from,)i(and)e(what)
+ f(no)t(des)g(eac)l(h)h(v)-9 b(ariable)66 b(p)t(oin)l(ts)e(to.)110
+ b(Ho)l(w-)4096 9583 y(ev)l(er,)46 b(it)e(can)h(not)f(kno)l(w)g(whether)
+ i(the)f(information)e(it)h(has)g(for)g(this)4096 9758
+ y(memory)f(ob)9 b(ject)43 b(is)f(correct)h(in)g(a)g(larger)g(scop)t(e.)
+ 65 b(F)-13 b(or)44 b(example,)g(the)4096 9932 y Fy(FP)57
+ b Fw(and)h Fy(L)f Fw(argumen)l(ts)f(are)h(sp)t(eculativ)l(ely)f
+ (represen)l(ted)i(as)e(di\013er-)4096 10106 y(en)l(t)k(ob)9
+ b(jects,)62 b(ev)l(en)e(though)h(they)f(migh)l(t)g(actually)f(b)t(e)i
+ (aliased)e(to)4096 10281 y(eac)l(h)52 b(other)f(when)h(called)f(from)g
+ (a)g(particular)g(call)g(site.)4245 10455 y(T)-13 b(o)56
+ b(handle)h(suc)l(h)f(situations,)f(Data)h(Structure)h(Analysis)d(com-)
+ 4096 10629 y(putes)h(whic)l(h)g(no)t(des)g(in)g(the)g(graph)h(are)f
+ (\\complete,")g(and)g(marks)4096 10804 y(eac)l(h)h(one)g(with)f(the)h
+ Fu(C)p Fw(omplete)f(\015ag)6306 10740 y Ft(2)6375 10804
+ y Fw(.)81 b(If)56 b(a)g(no)t(de)g(is)f(not)g(mark)l(ed)p
+ 4096 10926 1601 7 v 4104 11033 a Ft(2)4173 11097 y Fr(This)44
+ b(is)g(somewhat)h(similar)e(to)i(the)g(\\inside)f(no)t(des")h(of)g
+ ([21].)p eop end
+ %%Page: 4 4
+ TeXDict begin 4 3 bop -303 -137 a Fw(complete,)48 b(the)f(information)g
+ (calculated)g(for)g(the)h(DS)g(no)t(de)g(repre-)-303
+ 37 y(sen)l(ts)36 b(partial)h(information)g(and)h(m)l(ust)e(b)t(e)j
+ (treated)f(conserv)-9 b(ativ)l(ely)c(.)-303 211 y(In)64
+ b(particular,)i(the)e(no)t(de)g(ma)l(y)f(later)h(b)t(e)g(assigned)f
+ (extra)g(edges,)-303 386 y(extra)72 b(\015ags,)k(a)c(di\013eren)l(t)g
+ (t)l(yp)t(e,)77 b(or)72 b(ma)l(y)f(ev)l(en)i(end)g(up)g(merged)-303
+ 560 y(with)64 b(another)g(incomplete)h(no)t(de)h(in)e(the)h(graph.)108
+ b(F)-13 b(or)64 b(example,)-303 734 y(from)48 b(the)h(graph)g(in)g
+ (Figure)g(3)f(an)h(alias)e(analysis)h(algorithm)f(m)l(ust)-303
+ 909 y(assume)55 b(that)g Fy(L)h Fw(and)f Fy(FP)i Fw(ma)l(y)e(alias.)79
+ b(Nev)l(ertheless,)56 b(other)g(no)t(des)-303 1083 y(in)50
+ b(suc)l(h)h(a)g(graph)g(ma)l(y)f(b)t(e)i(complete)f(and)g(suc)l(h)g(no)
+ t(des)h(will)e(nev)l(er)-303 1257 y(b)t(e)63 b(merged)h(with)f(an)l(y)f
+ (other)i(no)t(de,)i(allo)l(wing)61 b(clien)l(ts)h(to)h(obtain)-303
+ 1432 y(useful)51 b(information)f(from)h(graphs)g(with)g(partial)f
+ (information.)-154 1606 y(This)44 b(capabilit)l(y)e(is)i(the)g(k)l(ey)g
+ (to)g(the)g(incremen)l(tal)g(nature)h(of)e(our)-303 1780
+ y(algorithm:)87 b(Because)62 b(no)t(des)g(k)l(eep)h(trac)l(k)e(of)g
+ (whic)l(h)h(information)-303 1955 y(is)72 b(\014nal,)79
+ b(and)74 b(whic)l(h)g(is)e(still)g(b)t(eing)i(created,)80
+ b(the)73 b(graphs)h(con-)-303 2129 y(structed)48 b(b)l(y)g(our)g
+ (algorithm)f(are)h Fv(always)h Fw(conserv)-9 b(ativ)l(ely)48
+ b(correct,)-303 2304 y(ev)l(en)k(during)f(in)l(termediate)h(steps)e(of)
+ h(the)h(analysis.)-258 2602 y Fi(2.1.4)183 b(F)-8 b
+ (ield\255sensitivity)45 b(with)g(and)i(without)e(type\255safety)-154
+ 2818 y Fw(A)f(particularly)f(imp)t(ortan)l(t)h(b)t(ene\014t)h(of)f(the)
+ g(\\Complete")f(\015ag)h(is)-303 2992 y(that)33 b(it)h(allo)l(ws)e(DS)j
+ (Analysis)e(to)h(e\016cien)l(tly)g(pro)l(vide)h(\014eld-sensitiv)l(e)
+ -303 3167 y(information)68 b Fv(for)j(the)g(typ)-8 b(e-safe)72
+ b(subsets)e(of)h(pr)-8 b(o)g(gr)g(ams)p Fw(.)123 b(This)68
+ b(is)-303 3341 y(imp)t(ortan)l(t)46 b(b)t(ecause)j(\014eld-sensitivit)l
+ (y)d(for)h(t)l(yp)t(e-unsafe)h(structure)-303 3515 y(t)l(yp)t(es)c(can)
+ g(b)t(e)h(v)l(ery)f(exp)t(ensiv)l(e)h([19],)f(but)h(in)f(fact)g(w)l(e)g
+ (observ)l(e)g(that)-303 3690 y(most)65 b(p)t(ortable)i(C)f(co)t(de)i
+ (is)e(completely)g(\(or)g(mostly\))f(t)l(yp)t(e-safe.)-303
+ 3864 y(The)36 b(complete)g(\015ag)g(allo)l(ws)e(DS)i(analysis)e(to)h
+ (assume)h(sp)t(eculativ)l(ely)-303 4038 y(that)68 b(all)g(access)h(to)f
+ (a)h(no)t(de)h(are)f(t)l(yp)t(e-safe,)k(un)l(til)68 b(an)h(access)g(to)
+ -303 4213 y(the)f(no)t(de)h(is)e(found)i(whic)l(h)g(con\015icts)f(with)
+ f(the)i(other)f(accesses.)-303 4387 y(Because)50 b(a)f(no)t(de)i(is)e
+ (not)g(mark)l(ed)h(complete)g(as)f(long)h(as)f(there)h(are)-303
+ 4561 y(p)t(oten)l(tially)g(unpro)t(cessed)j(accesses,)d(this)h(is)f
+ (safe.)-154 4736 y(DS)61 b(Analysis)e(pro)l(vides)h(\014eld-sensitiv)l
+ (e)g(information)f(b)l(y)h(asso-)-303 4910 y(ciating)k(a)h(language-sp)
+ t(eci\014c)i(t)l(yp)t(e,)i Fs(T)21 b Fw(\()p Fs(n)p Fw(\),)67
+ b(with)f(eac)l(h)f(DS)h(no)t(de)-303 5084 y Fs(n)p Fw(,)74
+ b(and)d(k)l(eeping)h(trac)l(k)e(of)g(a)h(distinct)e(outgoing)h(edge)i
+ (for)e(eac)l(h)-303 5259 y(p)t(oin)l(ter)55 b(elemen)l(t)g(of)f(the)h
+ (t)l(yp)t(e.)79 b(If)55 b(all)f(accesses)h(to)f(all)g(ob)9
+ b(jects)54 b(at)-303 5433 y(the)d(no)t(de)h(use)g(a)f(consisten)l(t)f
+ (t)l(yp)t(e)i Fs(\034)17 b Fw(,)50 b(then)i Fs(T)21 b
+ Fw(\()p Fs(n)p Fw(\))42 b(=)h Fs(\034)17 b Fw(.)2970
+ 5370 y Ft(3)-154 5607 y Fw(If)52 b(op)t(erations)e(using)h
+ (incompatible)g(t)l(yp)t(es)g(\(as)f(de\014ned)j(in)e(Sec-)-303
+ 5782 y(tion)71 b(3\))f(are)i(found,)77 b(a)71 b(t)l(yp)t(e-safet)l(y)g
+ (violation)f(is)h(p)t(ossible)g(with)-303 5956 y(one)59
+ b(of)f(the)h(ob)9 b(jects)58 b(at)g(the)h(no)t(de.)92
+ b(If)59 b(this)f(o)t(ccurs,)i(the)g(t)l(yp)t(e)f(for)-303
+ 6130 y(the)43 b(no)t(de)i(is)d(assumed)h(to)g(b)t(e)h(an)g(unsized)g
+ (arra)l(y)f(of)g(b)l(ytes)g(\()p Fs(T)21 b Fw(\()p Fs(n)p
+ Fw(\))42 b(=)-303 6305 y Fy(void*)p Fw(\),)j(and)d(the)g(\014elds)g
+ (and)g(edges)f(of)h(the)g(no)t(de)g(are)g(\\c)p Fu(O)p
+ Fw(llapsed")-303 6479 y(in)l(to)47 b(a)h(single)f(\014eld)i(with)f(at)f
+ (most)g(one)i(outgoing)e(edge,)i(using)f(the)-303 6654
+ y(follo)l(wing)h(algorithm:)-24 6896 y Fq(collapse)p
+ Fr(\(dsno)t(de)c Fo(n)p Fr(\))115 7029 y(cell)f Fo(e)38
+ b Fr(=)g Fp(h)p Fr(n)l(ull,)44 b(0)p Fp(i)828 b Fr(//)45
+ b(n)l(ull)g(target)115 7162 y Fp(8)p Fo(f)51 b Fp(2)38
+ b Fo(f)13 b(iel)q(ds)p Fr(\()p Fo(T)18 b Fr(\()p Fo(n)p
+ Fr(\)\))255 7294 y(e)45 b(=)f(mergeCells\()p Fo(e;)22
+ b(E)6 b Fr(\()p Fp(h)p Fo(n;)24 b(f)13 b Fp(i)p Fr(\)\))n(//)44
+ b(merge)h(old)g(target)f(with)h Fo(e)255 7427 y Fr(remo)l(v)l(e)g
+ (\014eld)g Fo(f)834 b Fr(//)45 b(remo)l(v)l(e)g(old)g(edge)115
+ 7560 y Fo(T)18 b Fr(\()p Fo(n)p Fr(\))38 b(=)45 b Fh(void*)1004
+ b Fr(//)45 b(reset)f(t)l(yp)t(e)h(information)115 7693
+ y Fo(E)6 b Fr(\()p Fp(h)p Fo(n;)24 b Fr(0)p Fp(i)p Fr(\))38
+ b(=)f Fo(e)1015 b Fr(//)45 b(new)g(edge)g(from)g(\014eld)g(0)115
+ 7829 y Fo(f)13 b(l)q(ag)t(s)p Fr(\()p Fo(n)p Fr(\))37
+ b(=)h Fo(f)13 b(l)q(ag)t(s)p Fr(\()p Fo(n)p Fr(\))74
+ b Fp([)1552 7779 y Fg(0)1597 7829 y Fq(O)1710 7779 y
+ Fg(0)1896 7829 y Fr(//)45 b(mark)f(no)t(de)i(C)p Fq(o)p
+ Fr(llapsed)-154 8113 y Fw(In)70 b(the)g(pseudo-co)t(de,)76
+ b(a)69 b(\\cell")h(is)e(a)i Fz(h)p Fw(no)t(de)p Fs(;)p
+ Fw(\014eld)p Fz(i)g Fw(pair,)k(used)-303 8287 y(as)89
+ b(\\sources")g(of)g(edges)h(in)g(the)g(DS)g(graphs.)183
+ b(The)90 b(function)-303 8461 y(\\)p Fv(mer)-8 b(geCel)8
+ b(ls\()p Fs(c)628 8478 y Ft(1)695 8461 y Fs(;)25 b(c)829
+ 8478 y Ft(2)899 8461 y Fv(\))p Fw(")58 b(\(describ)t(ed)i(in)e(the)h
+ (next)g(section\))f(merges)-303 8636 y(the)68 b(cells)g
+ Fs(c)395 8653 y Ft(1)532 8636 y Fw(and)h Fs(c)914 8653
+ y Ft(2)1052 8636 y Fw(and)f(therefore)h(the)f(no)t(des)h(p)t(oin)l(ted)
+ g(to)e(b)l(y)-303 8810 y(those)g(cells.)115 b(This)67
+ b(ensures)h(that)e(the)i(targets)e(of)h(the)h(t)l(w)l(o)e(cells)-303
+ 8984 y(are)48 b(no)l(w)h(exactly)f(equal.)67 b(Because)49
+ b(the)g(ab)t(o)l(v)l(e)g(algorithm)e(merges)-303 9159
+ y(all)g(outgoing)h(edges)g(from)g(the)h(no)t(de,)h(the)e(end)h(result)f
+ (is)g(the)h(same)-303 9333 y(as)66 b(if)h(\014eld-sensitivit)l(y)f(w)l
+ (ere)h(nev)l(er)h(sp)t(eculated)g(for)f(no)t(de)h Fs(n)p
+ Fw(.)115 b(If)-303 9508 y(a)61 b(no)t(de)i(has)e(b)t(een)j(collapsed)d
+ (\(ie,)j Fu(O)e Fz(2)e Fs(f)16 b(l)r(ag)5 b(s)p Fw(\()p
+ Fs(n)p Fw(\)\),)64 b(it)d(is)g(alw)l(a)l(ys)-303 9682
+ y(treated)51 b(in)g(this)g(safe,)f(but)i(\014eld-insensitiv)l(e,)f
+ (manner.)-303 10063 y Fx(3.)198 b(CONSTR)-6 b(UCTION)48
+ b(ALGORITHM)-154 10279 y Fw(In)63 b(an)f(early)g(attempt)g(at)f(Data)h
+ (Structure)h(Analysis)e([12],)i(w)l(e)-303 10453 y(presen)l(ted)g(a)g
+ (preliminary)g(algorithm)e(that)i(w)l(as)e(exp)t(onen)l(tial)i(in)p
+ -303 10527 1601 7 v -295 10635 a Ft(3)-227 10698 y Fr(As)54
+ b(Section)g(3)h(describ)t(es,)f(t)l(yp)t(e)g(information)h(is)e
+ (inferred)h(only)g(at)g(actual)-303 10831 y(accesses)60
+ b(rather)i(than)g(from)f(the)h(declared)g(t)l(yp)t(es)e(for)i(v)-7
+ b(ariables,)64 b(so)d(that)-303 10964 y(common)54 b(idioms)g(suc)l(h)g
+ (as)g(casting)g(a)g(p)t(oin)l(ter)g(to)g Fh(void*)e Fr(and)j(bac)l(k)g
+ (do)f(not)-303 11097 y(cause)45 b(a)g(loss)e(of)i(precision.)4096
+ -137 y Fw(relativ)l(ely)k(common)i(cases,)f(v)l(ery)g(exp)t(ensiv)l(e)i
+ (for)e(ev)l(en)h(mo)t(derate-)4096 37 y(sized)c(programs)f(con)l
+ (taining)g(large)g(n)l(um)l(b)t(ers)h(of)f(globals,)g(and)h(did)4096
+ 211 y(not)f(correctly)g(handle)h(function)f(p)t(oin)l(ters,)g(with)g
+ (recursion,)h(t)l(yp)t(e-)4096 386 y(unsafe)69 b(programs,)j(or)c
+ (incomplete)h(programs.)120 b(The)69 b(algorithm)4096
+ 560 y(describ)t(ed)58 b(here)f(is)f(greatly)g(impro)l(v)l(ed)g(in)g
+ (all)g(these)g(areas,)h(based)4096 734 y(on)e(extensiv)l(e)g(exp)t
+ (erience)i(with)e(larger)f(and)i(more)f(complex)g(pro-)4096
+ 909 y(grams.)4245 1083 y(DS)73 b(graphs)e(are)h(created)h(and)f
+ (re\014ned)i(in)d(a)h(three)h(step)e(pro-)4096 1257 y(cess.)93
+ b(The)60 b(\014rst)f(phase)h(constructs)g(a)f(DS)h(graph)g(for)g(eac)l
+ (h)g(func-)4096 1432 y(tion)47 b(in)i(the)f(program,)g(using)g(only)g
+ (in)l(trapro)t(cedural)h(information)4096 1606 y(\(a)e(\\lo)t(cal")g
+ (graph\).)67 b(Second,)49 b(a)f(\\Bottom-Up")f(analysis)f(phase)i(is)
+ 4096 1780 y(used)65 b(to)e(eliminate)h(incomplete)g(information)f(due)i
+ (to)f(callees)g(in)4096 1955 y(a)52 b(function,)g(b)l(y)g(incorp)t
+ (orating)f(information)g(from)h(callee)g(graphs)4096
+ 2129 y(in)l(to)60 b(the)i(caller's)e(graph)h(\(creating)g(a)g(\\BU")g
+ (graph\).)98 b(The)62 b(\014nal)4096 2304 y(\\T)-13 b(op-Do)l(wn")71
+ b(phase)f(eliminates)g(incomplete)h(information)f(due)4096
+ 2478 y(to)46 b(incoming)g(argumen)l(ts)g(b)l(y)g(merging)g(caller)g
+ (graphs)h(in)l(to)e(callees)4096 2652 y(\(creating)58
+ b(a)g(\\TD")g(graph\).)90 b(The)59 b(BU)f(and)h(TD)g(phases)f(op)t
+ (erate)4096 2827 y(on)44 b(the)g(\\kno)l(wn")g(Strongly)g(Connected)h
+ (Comp)t(onen)l(ts)f(\(SCCs\))g(in)4096 3001 y(the)51
+ b(call)g(graph.)4245 3175 y(Tw)l(o)j(prop)t(erties)i(are)e(imp)t(ortan)
+ l(t)h(for)f(understanding)i(ho)l(w)e(the)4096 3350 y(analysis)d(w)l
+ (orks)g(in)i(the)g(presence)g(of)g(incomplete)f(programs,)g(and)4096
+ 3524 y(ho)l(w)93 b(it)f(can)h(incremen)l(tally)g(construct)g(the)g
+ (call)g(graph)g(ev)l(en)4096 3698 y(though)72 b(it)f(op)t(erates)h(on)g
+ (the)h(SCCs)e(of)h(the)g(graph.)130 b(First,)76 b(the)4096
+ 3873 y(DS)62 b(graph)h(for)f(a)f(function)i(is)e(correct)h(ev)l(en)h
+ (if)f(only)f(a)h(subset)g(of)4096 4047 y(its)47 b(p)t(oten)l(tial)g
+ (callers)g(and)i(p)t(oten)l(tial)e(callees)h(ha)l(v)l(e)f(b)t(een)j
+ (incorp)t(o-)4096 4221 y(rated)k(in)l(to)g(the)h(graph)f(\(i.e.,)g(the)
+ g(information)g(in)g(the)h(graph)f(can)4096 4396 y(b)t(e)62
+ b(used)h(safely)e(so)g(long)g(as)g(the)h(limitations)d(on)j(no)t(des)g
+ (without)4096 4570 y Fu(`C')50 b Fw(\015ags)f(are)h(resp)t(ected,)i(as)
+ d(describ)t(ed)j(in)e(Section)g(2.1.3\).)66 b(In)l(tu-)4096
+ 4744 y(itiv)l(ely)-13 b(,)54 b(the)i(k)l(ey)f(to)f(this)g(prop)t(ert)l
+ (y)i(simply)e(is)g(that)h(a)f(no)t(de)i(m)l(ust)4096
+ 4919 y(not)71 b(b)t(e)h(mark)l(ed)g(complete)g(un)l(til)e(it)h(is)g
+ (kno)l(wn)g(that)g(all)f(callers)4096 5093 y(and)55 b(callees)f(p)t
+ (oten)l(tially)g(a\013ecting)g(that)g(no)t(de)i(ha)l(v)l(e)e(b)t(een)i
+ (incor-)4096 5267 y(p)t(orated)75 b(in)l(to)e(the)h(graph.)137
+ b(Second,)81 b(the)74 b(result)g(of)f(t)l(w)l(o)g(graph)4096
+ 5442 y(inlining)48 b(op)t(erations)h(at)f(one)i(or)f(t)l(w)l(o)e(call)i
+ (sites)e(is)i(indep)t(enden)l(t)i(of)4096 5616 y(the)39
+ b(order)h(of)f(those)f(op)t(erations.)64 b(This)38 b(follo)l(ws)f(from)
+ i(a)g(more)g(basic)4096 5790 y(prop)t(ert)l(y)64 b(that)g(the)g(order)h
+ (in)e(whic)l(h)i(a)e(set)h(of)f(no)t(des)i(is)e(merged)4096
+ 5965 y(do)t(es)51 b(not)g(a\013ect)g(the)h(\014nal)f(result.)4096
+ 6310 y Fx(3.1)198 b(Primiti)n(v)n(e)52 b(Graph)d(Operations)4245
+ 6526 y Fw(Data)80 b(Structure)i(Analysis)d(is)g(a)i(\015o)l
+ (w-insensitiv)l(e)e(algorithm)4096 6700 y(whic)l(h)e(uses)g(a)g
+ (uni\014cation-based)g(memory)g(mo)t(del,)84 b(similar)75
+ b(to)4096 6874 y(Steensgaard's)g(algorithm)g([20].)141
+ b(The)77 b(algorithm)d(uses)i(sev)l(eral)4096 7049 y(primitiv)l(e)35
+ b(op)t(erations)h(on)h(DS)g(graphs,)h(sho)l(wn)e(in)h(Figure)f(4.)63
+ b(These)4096 7223 y(op)t(erations)78 b(are)h(used)g(in)g(the)f
+ (algorithm)g(to)g(merge)h(t)l(w)l(o)e(cells,)4096 7397
+ y(merge)49 b(t)l(w)l(o)f(no)t(des)h(while)g(aligning)f(\014elds)h(in)f
+ (a)h(sp)t(eci\014ed)h(manner,)4096 7572 y(to)58 b(inline)g(a)g
+ (callee's)f(graph)i(in)l(to)e(a)h(caller's)f(graph)i(at)e(a)h(particu-)
+ 4096 7746 y(lar)j(call)f(site,)j(and)e(vice)h(v)l(ersa.)97
+ b(The)62 b(latter)f(t)l(w)l(o)f(op)t(erations)g(are)4096
+ 7921 y(describ)t(ed)53 b(later)d(in)i(this)e(section.)4245
+ 8095 y(The)35 b(fundamen)l(tal)f(op)t(eration)h(in)f(the)g(algorithm)f
+ (is)h Fs(mer)t(g)5 b(eC)11 b(el)r(l)r(s)p Fw(,)4096 8269
+ y(whic)l(h)57 b(merges)f(the)h(t)l(w)l(o)e(target)h(no)t(des)h(sp)t
+ (eci\014ed.)85 b(This)56 b(requires)4096 8444 y(merging)49
+ b(the)h(t)l(yp)t(e)f(information,)f(\015ags,)h(globals,)f(outgoing)g
+ (edges)4096 8618 y(of)73 b(the)h(t)l(w)l(o)e(no)t(des,)79
+ b(and)74 b(mo)l(ving)f(the)g(incoming)h(edges)f(to)g(the)4096
+ 8792 y(resulting)f(no)t(de.)133 b(If)73 b(the)g(t)l(w)l(o)e(\014elds)i
+ (ha)l(v)l(e)f(incompatible)h(t)l(yp)t(es)4096 8967 y(\(e.g.,)57
+ b Fs(T)21 b Fw(\()p Fs(n)4751 8984 y Ft(1)4819 8967 y
+ Fw(\))52 b(=)h Fy(int)q Fw(,)58 b Fs(f)5514 8984 y Ft(1)5635
+ 8967 y Fw(=)52 b(0,)58 b Fs(T)21 b Fw(\()p Fs(n)6248
+ 8984 y Ft(2)6316 8967 y Fw(\))52 b(=)h Fz(f)p Fy(int)p
+ Fs(;)26 b Fy(short)r Fz(g)p Fw(,)58 b Fs(f)7625 8984
+ y Ft(2)7746 8967 y Fw(=)52 b(1\),)4096 9141 y(or)65 b(if)g(the)g(t)l(w)
+ l(o)f(no)t(de)i(t)l(yp)t(es)g(are)f(compatible)g(but)h(the)f(\014elds)g
+ (are)4096 9315 y(misaligned)k(\(e.g.,)k Fs(T)21 b Fw(\()p
+ Fs(n)5546 9332 y Ft(1)5615 9315 y Fw(\))73 b(=)h Fs(T)21
+ b Fw(\()p Fs(n)6205 9332 y Ft(2)6274 9315 y Fw(\))73
+ b(=)h Fz(f)p Fy(int)p Fs(;)27 b Fy(short)r Fz(g)p Fw(,)74
+ b Fs(f)7642 9332 y Ft(1)7784 9315 y Fw(=)g(0,)4096 9490
+ y Fs(f)4171 9507 y Ft(2)4286 9490 y Fw(=)47 b(1\),)53
+ b(the)h(resulting)f(no)t(de)h(is)f(\014rst)g(collapsed)g(as)g(describ)t
+ (ed)i(in)4096 9664 y(Section)k(2.1.4,)h(b)t(efore)g(the)f(rest)g(of)f
+ (the)i(information)e(is)g(merged.)4096 9838 y(Merging)67
+ b(the)h(outgoing)e(edges)i(causes)f(the)g(target)g(no)t(de)h(of)f(the)
+ 4096 10013 y(edges)53 b(to)f(b)t(e)i(merged)g(as)e(w)l(ell)g(\(if)g
+ (the)h(no)t(de)h(is)e(collapsed,)h(the)g(re-)4096 10187
+ y(sulting)i(no)t(de)h(for)g Fs(n)5313 10204 y Ft(2)5437
+ 10187 y Fw(will)f(ha)l(v)l(e)g(only)h(one)g(outgoing)f(edge)h(whic)l(h)
+ 4096 10361 y(is)51 b(merged)h(with)f(all)g(the)g(out-edges)h(of)f
+ Fs(n)6569 10378 y Ft(1)6638 10361 y Fw(\).)69 b(T)-13
+ b(o)51 b(p)t(erform)h(this)f(re-)4096 10536 y(cursiv)l(e)j(merging)g
+ (of)g(no)t(des)g(e\016cien)l(tly)-13 b(,)55 b(the)f(merging)g(op)t
+ (erations)4096 10710 y(are)d(implemen)l(ted)h(using)f(T)-13
+ b(arjan's)51 b(Union-Find)h(algorithm.)4096 11055 y Fx(3.2)198
+ b(Local)50 b(Analysis)f(Phase)p eop end
+ %%Page: 5 5
+ TeXDict begin 5 4 bop -164 -208 a Fr(\()p Fn(Mer)-7 b(ge)51
+ b(two)f(c)-7 b(el)7 b(ls)50 b(of)g(same)g(or)g(di\013er)-7
+ b(ent)50 b(no)-7 b(des;)51 b(up)-7 b(date)50 b Fo(n)3042
+ -191 y Ff(2)3107 -208 y Fn(,)f(disc)-7 b(ar)g(d)51 b
+ Fo(n)3748 -191 y Ff(1)3813 -208 y Fr(\))-164 -75 y(Cell)44
+ b Fq(mergeCells)p Fr(\(Cell)f Fp(h)p Fo(n)1292 -58 y
+ Ff(1)1357 -75 y Fo(;)23 b(f)1484 -58 y Ff(1)1549 -75
+ y Fp(i)p Fr(,)44 b(Cell)f Fp(h)p Fo(n)2094 -58 y Ff(2)2159
+ -75 y Fo(;)23 b(f)2286 -58 y Ff(2)2351 -75 y Fp(i)p Fr(,\))-24
+ 57 y(if)44 b(\(IncompatibleF)-11 b(orMerge\()p Fo(T)18
+ b Fr(\()p Fo(n)1735 74 y Ff(1)1801 57 y Fr(\))p Fo(;)23
+ b(T)18 b Fr(\()p Fo(n)2145 74 y Ff(2)2210 57 y Fr(\))p
+ Fo(;)23 b(f)2389 74 y Ff(1)2454 57 y Fo(;)g(f)2581 74
+ y Ff(2)2646 57 y Fr(\)\))115 190 y(collapse)45 b Fo(n)694
+ 207 y Ff(2)803 190 y Fr(\(i.e.,)e(merge)i(\014elds)g(and)g(out-edges\))
+ -24 323 y(union)g(\015ags)g(of)g Fo(n)883 340 y Ff(1)993
+ 323 y Fr(in)l(to)g(\015ags)g(of)g Fo(n)1802 340 y Ff(2)-24
+ 456 y Fr(union)g(globals)g(of)g Fo(n)1023 473 y Ff(1)1132
+ 456 y Fr(in)l(to)h(globals)e(of)h Fo(n)2081 473 y Ff(2)-24
+ 589 y Fr(merge)g(target)f(of)i(eac)l(h)f(out-edge)h(of)f
+ Fp(h)p Fo(n)2035 606 y Ff(1)2100 589 y Fo(;)23 b(f)2227
+ 606 y Fe(j)2288 589 y Fp(i)45 b Fr(with)394 722 y(target)g(of)g
+ (corresp)t(onding)g(\014eld)g(of)g Fo(n)2314 739 y Ff(2)-24
+ 854 y Fr(mo)l(v)l(e)g(in-edges)g(of)g Fo(n)1062 871 y
+ Ff(1)1172 854 y Fr(to)f(corresp)t(onding)i(\014elds)e(of)h
+ Fo(n)2763 871 y Ff(2)-24 987 y Fr(destro)l(y)g Fo(n)524
+ 1004 y Ff(1)-24 1120 y Fr(return)g Fp(h)p Fo(n)518 1137
+ y Ff(2)582 1120 y Fo(;)24 b Fr(0)p Fp(i)44 b Fr(\(if)h(collapsed\))f
+ (or)h Fp(h)p Fo(n)1905 1137 y Ff(2)1970 1120 y Fo(;)23
+ b(f)2097 1137 y Ff(2)2161 1120 y Fp(i)45 b Fr(\(otherwise\))-164
+ 1386 y(\()p Fn(Clone)50 b Fo(G)384 1403 y Ff(1)499 1386
+ y Fn(into)g Fo(G)888 1403 y Ff(2)953 1386 y Fn(;)g(mer)-7
+ b(ge)50 b(c)-7 b(orr)g(esp)g(onding)52 b(no)-7 b(des)51
+ b(for)f(e)-7 b(ach)50 b(glob)-7 b(al)p Fr(\))-164 1519
+ y Fq(cloneGraphIn)l(to)p Fr(\()p Fo(G)1015 1536 y Ff(1)1082
+ 1519 y Fo(;)23 b(G)1247 1536 y Ff(2)1312 1519 y Fr(\))-24
+ 1651 y Fo(G)79 1668 y Ff(1)p Fe(c)243 1651 y Fr(=)44
+ b(mak)l(e)h(a)g(cop)l(y)h(of)f(graph)h Fo(G)1786 1668
+ y Ff(1)-24 1784 y Fr(Add)f(no)t(des)g(and)h(edges)e(of)i
+ Fo(G)1506 1801 y Ff(1)p Fe(c)1669 1784 y Fr(to)f Fo(G)1935
+ 1801 y Ff(2)-24 1917 y Fr(for)g(\(eac)l(h)g(no)t(de)h
+ Fo(N)k Fp(2)38 b Fo(G)1236 1934 y Ff(1)p Fe(c)1355 1917
+ y Fr(\))115 2050 y(for)45 b(\(eac)l(h)h(global)f Fo(g)c
+ Fp(2)e Fo(G)p Fr(\()p Fo(N)12 b Fr(\)\))255 2183 y(merge)45
+ b Fo(N)57 b Fr(with)44 b(the)h(no)t(de)h(con)l(taining)f
+ Fo(g)k Fr(in)c Fo(G)2677 2200 y Ff(2)-164 2448 y Fr(\()p
+ Fn(Clone)50 b(c)-7 b(al)7 b(le)-7 b(e)51 b(gr)-7 b(aph)51
+ b(into)e(c)-7 b(al)7 b(ler)51 b(and)f(mer)-7 b(ge)50
+ b(ar)-7 b(guments)51 b(and)f(r)-7 b(eturn)p Fr(\))-164
+ 2581 y Fq(resolv)l(eCallee)p Fr(\(Graph)46 b Fo(G)1259
+ 2599 y Fe(callee)1578 2581 y Fr(,)e(Graph)h Fo(G)2175
+ 2599 y Fe(caller)2497 2581 y Fr(,)1720 2714 y(F)-11 b(unction)45
+ b Fo(F)2358 2732 y Fe(callee)2677 2714 y Fr(,)f(CallSite)g
+ Fo(C)8 b(S)e Fr(\))-24 2847 y(cloneGraphIn)l(to\()p Fo(G)1028
+ 2865 y Fe(callee)1348 2847 y Fo(;)23 b(G)1513 2865 y
+ Fe(caller)1835 2847 y Fr(\))-24 2980 y(clear)44 b Fq('S')i
+ Fr(\015ags)f(on)g(cloned)g(no)t(des)-24 3113 y(resolv)l(eArgumen)l
+ (ts\()p Fo(G)1155 3131 y Fe(caller)1476 3113 y Fr(,)g
+ Fo(F)1643 3131 y Fe(callee)1962 3113 y Fr(,)f Fo(C)8
+ b(S)e Fr(\))-164 3378 y(\()p Fn(Clone)50 b(c)-7 b(al)7
+ b(ler)51 b(gr)-7 b(aph)50 b(into)g(c)-7 b(al)7 b(le)-7
+ b(e)51 b(and)f(mer)-7 b(ge)50 b(ar)-7 b(guments)51 b(and)f(r)-7
+ b(eturn)p Fr(\))-164 3511 y Fq(resolv)l(eCaller)p Fr(\(Graph)46
+ b Fo(G)1252 3529 y Fe(caller)1574 3511 y Fr(,)e(Graph)h
+ Fo(G)2171 3529 y Fe(callee)2490 3511 y Fr(,)1720 3644
+ y(F)-11 b(unction)45 b Fo(F)2358 3662 y Fe(callee)2677
+ 3644 y Fr(,)f(CallSite)g Fo(C)8 b(S)e Fr(\))-24 3777
+ y(cloneGraphIn)l(to\()p Fo(G)1028 3795 y Fe(caller)1351
+ 3777 y Fo(;)23 b(G)1516 3795 y Fe(callee)1835 3777 y
+ Fr(\))-24 3910 y(resolv)l(eArgumen)l(ts\()p Fo(G)1155
+ 3928 y Fe(callee)1474 3910 y Fr(,)44 b Fo(F)1640 3928
+ y Fe(callee)1959 3910 y Fr(,)h Fo(C)8 b(S)e Fr(\))-164
+ 4175 y(\()p Fn(Mer)-7 b(ge)51 b(ar)-7 b(guments)51 b(and)f(r)-7
+ b(eturn)50 b(value)f(for)h(r)-7 b(esolving)51 b(a)f(c)-7
+ b(al)7 b(l)50 b(site)p Fr(\))-164 4308 y Fq(resolv)l(eArgumen)l(ts)p
+ Fr(\(Graph)c Fo(G)1580 4326 y Fe(mer)s(g)s(ed)1984 4308
+ y Fr(,)e(F)-11 b(unction)46 b Fo(F)2705 4325 y Fe(C)2802
+ 4308 y Fr(,)e(CallSite)g Fo(C)8 b(S)e Fr(\))-24 4441
+ y(mergeCells\(target)43 b(of)i Fo(C)8 b(S)e Fr([1],)44
+ b(target)h(of)g(return)g(v)-7 b(alue)45 b(of)g Fo(F)3143
+ 4458 y Fe(C)3240 4441 y Fr(\))-24 4574 y(for)g(\(1)38
+ b Fp(\024)f Fo(i)h Fp(\024)f Fo(min)p Fr(\(Numformals\()p
+ Fo(F)1843 4591 y Fe(C)1940 4574 y Fr(\),)44 b(NumActualArgs\()p
+ Fo(C)8 b(S)e Fr(\)\))115 4707 y(mergeCells\(target)44
+ b(of)h(arg)g Fo(i)g Fr(at)f(CS,)h(target)g(of)g(formal)g
+ Fo(i)f Fr(of)h Fo(F)3360 4724 y Fe(C)3457 4707 y Fr(\))-99
+ 5079 y Fw(Figure)52 b(4:)68 b(Primitiv)l(e)49 b(op)t(erations)i(used)h
+ (in)f(the)h(algorithm)-154 5391 y(The)d(goal)f(of)g(the)h(lo)t(cal)f
+ (analysis)f(phase)i(is)f(to)g(compute)i(a)e Fv(L)-8 b(o)g(c)g(al)-303
+ 5566 y(DS)57 b(gr)-8 b(aph)55 b Fw(for)f(eac)l(h)g(function,)h(without)
+ e(an)l(y)h(information)f(ab)t(out)-303 5740 y(callers)f(and)i(callees.)
+ 74 b(This)53 b(is)g(the)h(only)f(phase)h(that)f(insp)t(ects)g(the)-303
+ 5914 y(actual)38 b(program)g(represen)l(tation:)62 b(the)38
+ b(other)h(t)l(w)l(o)e(phases)i(op)t(erate)-303 6089 y(solely)50
+ b(on)h(DS)h(graphs.)-154 6263 y(The)41 b(lo)t(cal)f(DS)h(graph)g(for)f
+ (a)h(function)g Fs(F)61 b Fw(is)40 b(computed)i(as)e(sho)l(wn)-303
+ 6437 y(in)52 b(Figure)h(5.)72 b(W)-13 b(e)52 b(presen)l(t)h(this)f
+ (analysis)f(in)i(terms)f(of)g(a)g(minimal)-303 6612 y(language)65
+ b(whic)l(h)g(is)f(still)f(as)i(p)t(o)l(w)l(erful)g(as)f(C.)h(The)h
+ (assumptions)-303 6786 y(ab)t(out)54 b(the)g(t)l(yp)t(e)h(system)e(and)
+ i(memory)f(mo)t(del)g(in)g(this)g(language)-303 6960
+ y(w)l(ere)d(describ)t(ed)i(in)e(Section)h(2)1525 6897
+ y Ft(4)1594 6960 y Fw(.)-154 7135 y(The)e(\\)p Fv(L)-8
+ b(o)g(c)g(alA)l(nalysis)p Fw(")51 b(\014rst)e(creates)g(an)g(empt)l(y)h
+ (no)t(de)g(as)f(a)g(tar-)-303 7309 y(get)74 b(for)g(ev)l(ery)i(p)t(oin)
+ l(ter-compatible)e(virtual)g(register)g(\(en)l(tering)-303
+ 7483 y(them)46 b(in)g(the)g(map)g Fs(E)966 7500 y Fl(V)1073
+ 7483 y Fw(\),)g(and)g(creates)g(a)g(separate)f(no)t(de)i(for)f(ev)l
+ (ery)-303 7658 y(global)37 b(v)-9 b(ariable.)64 b(The)40
+ b(analysis)d(then)i(do)t(es)g(a)f(linear)h(scan)g(o)l(v)l(er)f(the)-303
+ 7832 y(instructions)60 b(of)h(the)h(function,)i(creating)d(new)h(no)t
+ (des)g(at)f Fy(malloc)-303 8006 y Fw(and)43 b Fy(alloca)j
+ Fw(op)t(erations,)e(merging)f(edges)g(of)g(v)-9 b(ariables)43
+ b(at)f(assign-)-303 8181 y(men)l(ts)55 b(and)h(the)h(return)f
+ (instruction,)g(and)h(up)t(dating)f(t)l(yp)t(e)g(infor-)-303
+ 8355 y(mation)61 b(at)h(selected)h(op)t(erations.)102
+ b(The)63 b(t)l(yp)t(e)g(of)f(a)g(cell,)j Fs(E)3305 8372
+ y Fl(V)3412 8355 y Fw(\()p Fs(Y)34 b Fw(\),)-303 8529
+ y(is)60 b(up)t(dated)j(only)e(when)i Fs(Y)95 b Fw(is)61
+ b(actually)f Fv(use)-8 b(d)62 b Fw(in)f(a)h(manner)g(that)-303
+ 8704 y(in)l(terprets)75 b(its)g(t)l(yp)t(e,)82 b(viz.,)g(at)75
+ b(a)h(dereference)i(op)t(eration)e(on)g Fs(Y)-303 8878
+ y Fw(\(for)56 b(a)i(load)f(or)g(store\))f(and)i(when)g(indexing)g(in)l
+ (to)f(a)g(structure)h(or)-303 9053 y(arra)l(y)67 b(p)t(oin)l(ted)i(to)e
+ (b)l(y)h Fs(Y)35 b Fw(.)118 b Fy(malloc)p Fw(,)75 b Fy(alloca)p
+ Fw(,)f(and)69 b Fy(cast)h Fw(op)t(era-)-303 9227 y(tions)d(simply)g
+ (create)i(an)f(no)t(de)h(of)f Fy(void)i Fw(t)l(yp)t(e.)119
+ b(Structure)69 b(\014eld)-303 9401 y(accesses)49 b(adjust)h(the)g
+ (incoming)g(edge)h(to)e(p)t(oin)l(t)h(to)f(the)i(addressed)-303
+ 9576 y(\014eld)42 b(\(whic)l(h)h(is)e(a)h(no)t(op)h(if)e(the)i(no)t(de)
+ g(is)e(collapsed\).)65 b(Indexing)43 b(in)l(to)-303 9750
+ y(arra)l(y)53 b(ob)9 b(jects)54 b(is)f(ignored,)i(i.e.,)f(arra)l(ys)f
+ (are)i(treated)f(as)g(ha)l(ving)g(a)-303 9924 y(single)67
+ b(elemen)l(t.)119 b Fy(return)71 b Fw(instructions)c(are)h(handled)h(b)
+ l(y)f(creat-)-303 10099 y(ing)53 b(a)g(sp)t(ecial)g Fs(\031)59
+ b Fw(virtual)53 b(register)g(whic)l(h)g(is)g(used)h(to)f(capture)h(the)
+ p -303 10262 1601 7 v -295 10369 a Ft(4)-227 10432 y
+ Fr(W)-11 b(e)33 b(assume)g(that)g(the)g(functions)h Fo(E)6
+ b Fr(\()p Fo(X)j Fr(\))33 b(and)h Fo(E)2190 10449 y Fe(V)2290
+ 10432 y Fr(\()p Fo(X)9 b Fr(\))33 b(return)g(a)g(new,)i(empt)l(y)-303
+ 10565 y(no)t(de)50 b(with)g(the)g(t)l(yp)t(e)h(of)f Fo(X)59
+ b Fr(\(b)l(y)51 b(in)l(v)l(oking)f(mak)l(eNo)t(de\()p
+ Fo(ty)t(peof)13 b Fr(\()p Fo(X)c Fr(\)\)\))51 b(when)-303
+ 10698 y(no)43 b(previous)f(edge)h(from)g(the)g(cell)f(or)h(v)-7
+ b(ariable)42 b Fo(X)51 b Fr(existed.)57 b(F)-11 b(or)43
+ b(example,)f(in)-303 10831 y(Figure)d(7\(a\),)i(the)f(incoming)g
+ (argumen)l(t)h Fo(L)f Fr(p)t(oin)l(ts)g(to)g(suc)l(h)g(a)g(no)t(de.)58
+ b(W)-11 b(e)40 b(also)-303 10964 y(abuse)51 b(the)h(notation)g(b)l(y)f
+ (using)g Fo(E)6 b Fr(\()p Fo(X)j Fr(\))50 b(=)f Fo(:)23
+ b(:)g(:)52 b Fr(or)f Fo(E)2397 10981 y Fe(V)2498 10964
+ y Fr(\()p Fo(X)9 b Fr(\))49 b(=)g Fo(:)23 b(:)g(:)52
+ b Fr(to)f(c)l(hange)-303 11097 y(what)45 b Fo(X)53 b
+ Fr(p)t(oin)l(ts)45 b(to.)4235 -341 y(\()p Fn(Compute)51
+ b(the)f(lo)-7 b(c)g(al)50 b(DS)g(Gr)-7 b(aph)51 b(for)e(function)h
+ Fo(F)18 b Fr(\))4235 -208 y Fq(Lo)t(calAnalysis)p Fr(\(function)47
+ b Fo(F)18 b Fr(\))4375 -75 y(Create)45 b(an)g(empt)l(y)g(graph)4375
+ 57 y Fp(8)g Fr(virtual)f(registers)f Fo(R)q Fr(,)h Fo(E)5735
+ 74 y Fe(V)5836 57 y Fr(\()p Fo(R)q Fr(\))37 b(=)45 b(mak)l(eNo)t(de\()p
+ Fo(T)18 b Fr(\()p Fo(R)q Fr(\)\))4375 190 y Fp(8)45 b
+ Fr(globals)f Fo(X)54 b Fr(\(v)-7 b(ariables)44 b(and)h(functions\))g
+ (used)g(in)g Fo(F)4514 326 y(N)58 b Fr(=)45 b(mak)l(eNo)t(de\()p
+ Fo(T)18 b Fr(\()p Fo(X)9 b Fr(\)\)\);)44 b Fo(G)p Fr(\()p
+ Fo(N)12 b Fr(\))46 b Fp([)38 b Fr(=)g Fo(X)9 b Fr(;)44
+ b Fo(f)13 b(l)q(ag)t(s)p Fr(\()p Fo(N)f Fr(\))44 b Fp([)38
+ b Fr(=)7674 276 y Fg(0)7719 326 y Fq(G)7837 276 y Fg(0)4375
+ 522 y Fp(8)45 b Fr(instruction)f Fo(I)j Fp(2)38 b Fo(F)56
+ b Fr(:)44 b(case)h Fo(I)54 b Fr(in:)4514 717 y Fh(X)62
+ b(=)f(malloc)g(...)p Fr(:)980 b Fn(\(he)-7 b(ap)51 b(al)7
+ b(lo)-7 b(c)g(ation\))4654 850 y Fo(E)4751 867 y Fe(V)4852
+ 850 y Fr(\()p Fo(X)9 b Fr(\))37 b(=)h Fo(mak)s(eN)12
+ b(ode)p Fr(\()p Fh(void)n Fr(\))4654 983 y Fo(f)h(l)q(ag)t(s)p
+ Fr(\()p Fo(node)p Fr(\()p Fo(E)5460 1000 y Fe(V)5559
+ 983 y Fr(\()p Fo(X)c Fr(\)\)\))44 b Fp([)39 b Fr(=)44
+ b Fq('H')4514 1178 y Fh(X)62 b(=)f(alloca)g(...)p Fr(:)980
+ b Fn(\(stack)51 b(al)7 b(lo)-7 b(c)g(ation\))4654 1311
+ y Fo(E)4751 1328 y Fe(V)4852 1311 y Fr(\()p Fo(X)9 b
+ Fr(\))37 b(=)h Fo(mak)s(eN)12 b(ode)p Fr(\()p Fh(void)n
+ Fr(\))4654 1444 y Fo(f)h(l)q(ag)t(s)p Fr(\()p Fo(node)p
+ Fr(\()p Fo(E)5460 1461 y Fe(V)5559 1444 y Fr(\()p Fo(X)c
+ Fr(\)\)\))44 b Fp([)39 b Fr(=)44 b Fq('S')4514 1639 y
+ Fh(X)62 b(=)f(*Y)p Fr(:)4654 1772 y(mergeCells\()p Fo(E)5431
+ 1789 y Fe(V)5530 1772 y Fr(\()p Fo(X)9 b Fr(\))p Fo(;)68
+ b(E)6 b Fr(\()p Fo(E)6111 1789 y Fe(V)6212 1772 y Fr(\()p
+ Fo(Y)29 b Fr(\)\)\))4654 1905 y Fo(f)13 b(l)q(ag)t(s)p
+ Fr(\()p Fo(node)p Fr(\()p Fo(E)5460 1922 y Fe(V)5559
+ 1905 y Fr(\()p Fo(X)c Fr(\)\))44 b Fp([)39 b Fr(=)44
+ b Fq('R')4514 2100 y Fh(*Y)62 b(=)f(X)p Fr(:)4654 2233
+ y(mergeCells\()p Fo(E)5431 2250 y Fe(V)5530 2233 y Fr(\()p
+ Fo(X)9 b Fr(\))p Fo(;)68 b(E)6 b Fr(\()p Fo(E)6111 2250
+ y Fe(V)6212 2233 y Fr(\()p Fo(Y)29 b Fr(\)\)\))4654 2366
+ y Fo(f)13 b(l)q(ag)t(s)p Fr(\()p Fo(node)p Fr(\()p Fo(E)5460
+ 2383 y Fe(V)5559 2366 y Fr(\()p Fo(X)c Fr(\)\))44 b Fp([)39
+ b Fr(=)44 b Fq('M')4514 2561 y Fh(X)62 b(=)f(&Y->Z)p
+ Fr(:)1289 b Fn(\(addr)-7 b(ess)52 b(of)e(struct)g(\014eld\))4654
+ 2694 y Fp(h)p Fo(n;)23 b(f)13 b Fp(i)37 b Fr(=)45 b(up)t(dateT)l(yp)t
+ (e\()p Fo(E)6014 2711 y Fe(V)6115 2694 y Fr(\()p Fo(Y)29
+ b Fr(\))p Fo(;)67 b(ty)t(peof)13 b Fr(\()p Fp(\003)q
+ Fo(Y)28 b Fr(\)\))4654 2830 y Fo(f)4732 2780 y Fg(0)4814
+ 2830 y Fr(=)38 b(0,)45 b(if)f Fo(n)h Fr(is)f(collapsed;)g
+ Fo(f)13 b(iel)q(d)p Fr(\()p Fo(f)g(iel)q(d)p Fr(\()p
+ Fo(n;)22 b(f)13 b Fr(\))p Fo(;)23 b(Z)8 b Fr(\))45 b(otherwise)4654
+ 2966 y(mergeCells\()p Fo(E)5431 2983 y Fe(V)5530 2966
+ y Fr(\()p Fo(X)9 b Fr(\))p Fo(;)23 b Fp(h)p Fo(n;)g(f)6090
+ 2916 y Fg(0)6135 2966 y Fp(i)p Fr(\))4514 3162 y Fh(X)62
+ b(=)f(&Y[idx])p Fr(:)1165 b Fn(\(addr)-7 b(ess)52 b(of)e(arr)-7
+ b(ay)50 b(element\))4654 3295 y Fp(h)p Fo(n;)23 b(f)13
+ b Fp(i)37 b Fr(=)45 b(up)t(dateT)l(yp)t(e\()p Fo(E)6014
+ 3312 y Fe(V)6115 3295 y Fr(\()p Fo(Y)29 b Fr(\))p Fo(;)67
+ b(ty)t(peof)13 b Fr(\()p Fp(\003)q Fo(Y)28 b Fr(\)\))4654
+ 3427 y(mergeCells\()p Fo(E)5431 3444 y Fe(V)5530 3427
+ y Fr(\()p Fo(X)9 b Fr(\))p Fo(;)23 b Fp(h)p Fo(n;)g(f)13
+ b Fp(i)p Fr(\))4514 3623 y Fh(return)61 b(X)p Fr(:)1351
+ b Fn(\(r)-7 b(eturn)51 b(p)-7 b(ointer-c)g(omp)g(atible)51
+ b(value\))4654 3756 y Fr(mergeCells\()p Fo(E)5431 3773
+ y Fe(V)5530 3756 y Fr(\()p Fo(\031)t Fr(\))p Fo(;)23
+ b(E)5875 3773 y Fe(V)5976 3756 y Fr(\()p Fo(X)9 b Fr(\)\))4514
+ 3951 y Fh(X)62 b(=)f(\()p Fo(\034)13 b Fh(\))62 b(Y)p
+ Fr(:)1277 b Fn(\(value-pr)-7 b(eserving)52 b(c)-7 b(ast\))4654
+ 4084 y Fr(mergeCells\()p Fo(E)5431 4101 y Fe(V)5530 4084
+ y Fr(\()p Fo(X)9 b Fr(\))p Fo(;)23 b(E)5911 4101 y Fe(V)6012
+ 4084 y Fr(\()p Fo(Y)28 b Fr(\)\))4514 4279 y Fh(X)62
+ b(=)f(Y\(Z)4947 4296 y Ff(1)5012 4279 y Fh(,)g(Z)5197
+ 4296 y Ff(2)5262 4279 y Fh(,)g(...)123 b(Z)5756 4296
+ y Fe(n)5837 4279 y Fh(\))p Fr(:)461 b Fn(\(function)50
+ b(c)-7 b(al)7 b(l\))4654 4412 y Fr(callno)t(de)45 b Fo(c)g
+ Fr(=)f(new)h(callno)t(de)4654 4545 y Fo(C)53 b Fp([)38
+ b Fr(=)g Fo(c)4654 4678 y Fr(mergeCells\()p Fo(E)5431
+ 4695 y Fe(V)5530 4678 y Fr(\()p Fo(X)9 b Fr(\))p Fo(;)23
+ b(c)p Fr([1]\))4654 4811 y(mergeCells\()p Fo(E)5431 4828
+ y Fe(V)5530 4811 y Fr(\()p Fo(Y)29 b Fr(\))p Fo(;)23
+ b(c)p Fr([2]\))4654 4943 y Fp(8)p Fo(i)38 b Fp(2)g(f)p
+ Fr(1)p Fo(:::n)p Fp(g)p Fr(:)60 b(mergeCells\()p Fo(E)6217
+ 4960 y Fe(V)6317 4943 y Fr(\()p Fo(Z)6459 4960 y Fe(i)6512
+ 4943 y Fr(\))p Fo(;)23 b(c)p Fr([)p Fo(i)30 b Fr(+)g(2]\))4514
+ 5139 y(\(Otherwise\))44 b Fh(X)62 b(=)f(Y)h(op)f(Z)p
+ Fr(:)497 b Fn(\(al)7 b(l)50 b(other)h(instructions\))4654
+ 5334 y Fr(mergeCells\()p Fo(E)5431 5351 y Fe(V)5530 5334
+ y Fr(\()p Fo(X)9 b Fr(\))p Fo(;)23 b(E)5911 5351 y Fe(V)6012
+ 5334 y Fr(\()p Fo(Y)28 b Fr(\)\))4654 5467 y(mergeCells\()p
+ Fo(E)5431 5484 y Fe(V)5530 5467 y Fr(\()p Fo(X)9 b Fr(\))p
+ Fo(;)23 b(E)5911 5484 y Fe(V)6012 5467 y Fr(\()p Fo(Z)8
+ b Fr(\)\))4654 5600 y Fo(f)13 b(l)q(ag)t(s)p Fr(\()p
+ Fo(node)p Fr(\()p Fo(E)5460 5617 y Fe(V)5559 5600 y Fr(\()p
+ Fo(X)c Fr(\)\)\))44 b Fp([)39 b Fr(=)44 b Fq('U')4654
+ 5733 y Fr(collapse\()p Fo(node)p Fr(\()p Fo(E)5587 5750
+ y Fe(V)5687 5733 y Fr(\()p Fo(X)9 b Fr(\)\)\))4375 5928
+ y(MarkCompleteNo)t(des\(\))4837 6214 y Fw(Figure)51 b(5:)68
+ b(The)52 b(Lo)t(calAnalysis)e(function)4096 6497 y(return)i(v)-9
+ b(alue.)4245 6671 y(F)c(unction)43 b(calls)e(result)g(in)h(a)f(new)i
+ (call)e(no)t(de)i(b)t(eing)f(added)h(to)e(the)4096 6845
+ y(DS)57 b(graph,)h(with)e(en)l(tries)g(for)g(the)h(v)-9
+ b(alue)57 b(returned,)i(the)d(function)4096 7020 y(p)t(oin)l(ter)70
+ b(\(for)f(b)t(oth)h(direct)h(and)f(indirect)g(calls\).)122
+ b(F)-13 b(or)70 b(example,)4096 7194 y(the)54 b(lo)t(cal)e(graph)i(for)
+ f Fy(addGTList)58 b Fw(in)53 b(Figure)h(7\(a\))e(sho)l(ws)h(the)g(call)
+ 4096 7368 y(no)t(de)60 b(created)g(for)f(the)g(call)g(to)g(function)g
+ Fy(do)p 6796 7368 48 7 v 58 w(all)p Fw(.)93 b(Note)59
+ b(that)g(an)4096 7543 y(empt)l(y)71 b(no)t(de)g(is)f(created)i(and)f
+ (then)g(merged)h(using)e Fv(mer)-8 b(geCel)8 b(ls)4096
+ 7717 y Fw(for)50 b(eac)l(h)h(en)l(try)f(in)g(order)h(to)f(correctly)g
+ (merge)h(t)l(yp)t(e)g(information,)4096 7891 y(since)61
+ b(the)h(argumen)l(t)f(t)l(yp)t(e)h(ma)l(y)f(not)g(matc)l(h)g(the)h
+ (declared)g(t)l(yp)t(e)4096 8066 y(for)51 b(the)g(formal)g(argumen)l(t)
+ g(or)g(return)h(v)-9 b(alue.)4245 8240 y(Finally)c(,)71
+ b(if)c(an)l(y)h(other)g(instruction)f(is)g(applied)h(to)f(a)g(p)t(oin)l
+ (ter-)4096 8414 y(compatible)58 b(v)-9 b(alue,)59 b(\(e.g.,)g(a)e(cast)
+ g(from)h(a)f(p)t(oin)l(ter)h(to)g(an)g(in)l(teger)4096
+ 8589 y(smaller)g(than)g(the)h(p)t(oin)l(ter,)i(or)d(in)l(teger)h
+ (arithmetic\),)g(an)l(y)g(no)t(des)4096 8763 y(p)t(oin)l(ted)49
+ b(to)f(b)l(y)h(op)t(erands)g(and)g(the)g(result)f(are)h(collapsed)f
+ (and)h(the)4096 8937 y Fu(U)p Fw(nkno)l(wn)i(\015ag)g(is)g(set)g(on)g
+ (the)h(no)t(de)6285 8874 y Ft(5)6355 8937 y Fw(.)4245
+ 9112 y(The)63 b(\014nal)g(step)f(in)h(the)g(Lo)t(cal)f(graph)h
+ (construction)f(is)g(to)g(cal-)4096 9286 y(culate)j(whic)l(h)g(DS)h(no)
+ t(des)g(are)f Fu(C)p Fw(omplete.)110 b(F)-13 b(or)65
+ b(a)g(Lo)t(cal)g(graph,)4096 9460 y(no)t(des)i(reac)l(hable)f(from)g(a)
+ g(formal)g(argumen)l(t,)j(a)d(global,)j(passed)4096 9635
+ y(as)51 b(an)g(argumen)l(t)h(to)f(a)g(call)g(site,)g(or)g(returned)i(b)
+ l(y)f(a)f(function)h(call)4096 9809 y(ma)l(y)45 b(not)g(b)t(e)h(mark)l
+ (ed)g(complete.)66 b(This)45 b(re\015ects)h(the)f(fact)g(that)g(the)
+ 4096 9984 y(lo)t(cal)d(analysis)f(phase)h(do)t(es)h(not)f(ha)l(v)l(e)h
+ (an)l(y)f(in)l(terpro)t(cedural)i(infor-)4096 10158 y(mation.)101
+ b(F)-13 b(or)62 b(example,)k(in)c(Figure)h(7\(a\),)h(neither)f(of)f
+ (the)h(no)t(des)4096 10332 y(for)51 b(for)g(the)g(argumen)l(ts)g(to)g
+ Fy(do)p 5931 10332 V 57 w(all)i Fw(are)e(mark)l(ed)h
+ Fu(`C')p Fw(.)4096 10646 y Fx(3.3)198 b(Bottom\255Up)50
+ b(Analysis)e(Phase)p 4096 10793 1601 7 v 4104 10900 a
+ Ft(5)4173 10964 y Fr(In)37 b(our)h(compiler)e([13],)i(t)l(yp)t(e-safe)f
+ (p)t(oin)l(ter)g(arithmetic)g(is)f(represen)l(ted)i(with)4096
+ 11097 y(the)45 b Fh(&Y->Z)e Fr(or)i Fh(&Y[idx])e Fr(op)t(erations.)p
+ eop end
+ %%Page: 6 6
+ TeXDict begin 6 5 bop -164 -341 a Fr(\()p Fn(Cr)-7 b(e)g(ate)51
+ b(a)f(new,)f(empty)h(no)-7 b(de)51 b(of)e(typ)-7 b(e)50
+ b Fo(\034)13 b Fr(\))-164 -208 y Fq(mak)l(eNo)t(de)p
+ Fr(\(t)l(yp)t(e)46 b Fo(\034)13 b Fr(\))-24 -75 y(n)45
+ b(=)f(new)h(No)t(de\(t)l(yp)t(e)g(=)g Fo(\034)13 b Fr(,)45
+ b(\015ags)g(=)f Fo(\036)p Fr(,)h(globals)f(=)h Fo(\036)p
+ Fr(\))-24 57 y Fp(8)g Fo(f)95 b Fp(2)83 b Fo(f)13 b(iel)q(ds)p
+ Fr(\()p Fo(\034)g Fr(\),)44 b Fo(E)6 b Fr(\()p Fo(n;)24
+ b(f)13 b Fr(\))37 b(=)p Fo(<)h(nul)q(l)q(;)22 b Fr(0)38
+ b Fo(>)-24 190 y Fr(return)45 b Fo(n)-164 456 y Fr(\()p
+ Fn(Mer)-7 b(ge)51 b(typ)-7 b(e)50 b(of)g(\014eld)f Fp(h)p
+ Fo(n;)23 b(f)13 b Fp(i)49 b Fn(with)h(typ)-7 b(e)50 b
+ Fo(\034)13 b Fr(.)59 b(This)44 b(ma)l(y)-119 589 y Fn(c)-7
+ b(ol)7 b(lapse)51 b(\014elds)f(and)g(up)-7 b(date)50
+ b(in/out)f(e)-7 b(dges)52 b(via)44 b Fr(mergeCells\(\)\))-164
+ 722 y Fq(up)t(dateT)l(yp)t(e)p Fr(\(cell)i Fp(h)p Fo(n;)23
+ b(f)13 b Fp(i)p Fr(,)44 b(t)l(yp)t(e)h Fo(\034)13 b Fr(\))-24
+ 854 y(if)44 b(\()p Fo(\034)52 b Fp(6)p Fr(=)44 b Fh(void)g
+ Fp(^)h Fo(\034)96 b Fp(6)p Fr(=)83 b Fo(ty)t(peof)13
+ b Fr(\()p Fp(h)p Fo(n;)23 b(f)13 b Fp(i)p Fr(\)\))115
+ 987 y Fo(m)45 b Fr(=)f(mak)l(eNo)t(de\()p Fo(\034)13
+ b Fr(\))115 1120 y(return)45 b(mergeCells\()p Fp(h)p
+ Fo(m;)22 b Fr(0)p Fp(i)p Fo(;)h Fp(h)p Fo(n;)g(f)13 b
+ Fp(i)p Fr(\)\))-24 1253 y(else)44 b(return)h Fp(h)p Fo(n;)23
+ b(f)13 b Fp(i)57 1493 y Fw(Figure)51 b(6:)68 b(mak)l(eNo)t(de)52
+ b(and)g(up)t(dateT)l(yp)t(e)h(op)t(erations)-154 1813
+ y(The)90 b(Bottom-Up)f(\(BU\))g(analysis)f(phase)i(re\014nes)g(the)g
+ (lo)t(cal)-303 1987 y(graph)46 b(for)f(eac)l(h)i(function)f(b)l(y)g
+ (incorp)t(orating)f(in)l(terpro)t(cedural)i(in-)-303
+ 2161 y(formation)37 b(from)g(the)i(callees)e(of)h(eac)l(h)g(function.)
+ 64 b(The)39 b(result)e(of)h(the)-303 2336 y(BU)54 b(analysis)f(is)h(a)g
+ (graph)h(for)f(eac)l(h)h(function)g(whic)l(h)g(summarizes)-303
+ 2510 y(the)49 b(total)e(e\013ect)j(of)e(calling)g(that)h(function)g
+ (\(imp)t(osed)g(aliases)e(and)-303 2684 y(mo)t(d/ref)59
+ b(information\))g(without)g(an)l(y)g(calling)f(con)l(text)i(informa-)
+ -303 2859 y(tion.)65 b(It)44 b(computes)g(this)f(graph)i(b)l(y)f
+ (cloning)f(the)i(BU)f(graphs)g(of)f(all)-303 3033 y Fv(known)63
+ b Fw(callees)f(in)l(to)g(the)h(caller's)e(Lo)t(cal)i(graph,)i(merging)e
+ (no)t(des)-303 3207 y(p)t(oin)l(ted)f(to)g(b)l(y)g(corresp)t(onding)h
+ (formal)f(and)g(actual)g(argumen)l(ts.)-303 3382 y(W)-13
+ b(e)46 b(\014rst)f(describ)t(e)i(a)f(single)f(graph)h(inlining)f(op)t
+ (eration,)h(and)h(then)-303 3556 y(explain)k(ho)l(w)g(the)h(call)e
+ (graph)i(is)e(disco)l(v)l(ered)h(and)h(tra)l(v)l(ersed.)-154
+ 3730 y(Consider)72 b(a)f(call)g(to)g(a)h(function)g Fs(F)93
+ b Fw(with)71 b(formal)g(argumen)l(ts)-303 3905 y Fs(f)-228
+ 3922 y Ft(1)-160 3905 y Fs(;)p Fw(.)25 b(.)h(.)f Fs(;)g(f)231
+ 3922 y Fl(n)316 3905 y Fw(,)45 b(where)g(the)f(actual)f(argumen)l(ts)h
+ (passed)g(are)g Fs(a)3103 3922 y Ft(1)3173 3905 y Fs(;)p
+ Fw(.)25 b(.)g(.)g Fs(;)g(a)3569 3922 y Fl(n)3655 3905
+ y Fw(.)-303 4079 y(The)43 b(function)h Fv(r)-8 b(esolveCal)8
+ b(le)-8 b(e)41 b Fw(in)i(Figure)h(4)e(sho)l(ws)g(ho)l(w)h(suc)l(h)g(a)g
+ (call)-303 4253 y(is)57 b(pro)t(cessed)i(in)e(the)i(BU)f(phase.)88
+ b(W)-13 b(e)58 b(\014rst)g(cop)l(y)g(the)g(BU)g(graph)-303
+ 4428 y(for)66 b Fs(F)21 b Fw(,)70 b(clearing)c(all)f
+ Fu(S)p Fw(tac)l(k)h(no)t(de)h(mark)l(ers)f(since)h(stac)l(k)e(ob)9
+ b(jects)-303 4602 y(of)69 b(a)g(callee)g(are)g(not)h(legally)e
+ (accessible)h(in)g(a)g(caller.)122 b(W)-13 b(e)70 b(then)-303
+ 4776 y(merge)d(the)g(no)t(de)g(p)t(oin)l(ted)g(to)f(b)l(y)h(eac)l(h)g
+ (actual)f(argumen)l(t)h Fs(a)3454 4793 y Fl(i)3574 4776
+ y Fw(of)-303 4951 y(p)t(oin)l(ter-compatible)58 b(t)l(yp)t(e)g(with)g
+ (the)g(cop)l(y)g(of)g(the)g(no)t(de)h(p)t(oin)l(ted)-303
+ 5125 y(to)65 b(b)l(y)h Fs(f)202 5142 y Fl(i)254 5125
+ y Fw(.)112 b(If)66 b(applicable,)j(w)l(e)d(also)f(merge)h(the)g(return)
+ h(v)-9 b(alue)66 b(in)-303 5300 y(the)c(call)g(no)t(de)h(with)f(the)h
+ (cop)l(y)f(of)g(the)g(return)h(v)-9 b(alue)63 b(no)t(de)h(from)-303
+ 5474 y(the)d(callee.)96 b(Note)60 b(that)h(an)l(y)f(unresolv)l(ed)h
+ (call)f(no)t(des)i(in)e Fs(F)21 b Fw('s)60 b(BU)-303
+ 5648 y(graph)52 b(are)h(copied)g(in)l(to)f(the)h(caller's)e(graph,)i
+ (and)g(all)e(the)i(ob)9 b(jects)-303 5823 y(represen)l(ting)50
+ b(argumen)l(ts)g(of)f(the)h(unresolv)l(ed)h(call)e(in)h(the)g(callee's)
+ -303 5997 y(graph)h(are)h(no)l(w)f(represen)l(ted)h(in)f(the)h(caller)f
+ (as)f(w)l(ell.)-258 6348 y Fi(3.3.1)183 b(Basic)46 b(Analysis)f(W)-10
+ b(ithout)46 b(Recur)n(sion)-154 6564 y Fw(The)74 b(complete)g
+ (Bottom-Up)f(algorithm)g(for)g(tra)l(v)l(ersing)f(calls)-303
+ 6738 y(is)67 b(sho)l(wn)h(in)h(Figure)g(8.)119 b(but)69
+ b(w)l(e)f(explain)h(it)f(for)g(four)g(di\013eren)l(t)-303
+ 6912 y(cases.)113 b(In)68 b(the)f(simplest)e(case)i(of)f(a)h(program)f
+ (with)h(only)f(direct)-303 7087 y(calls)36 b(to)h(non-external)i
+ (functions,)h(no)e(recursion,)i(and)e(no)g(function)-303
+ 7261 y(p)t(oin)l(ters,)63 b(the)f(call)f(no)t(des)i(in)e(eac)l(h)h(DS)h
+ (graph)e(implicitly)g(de\014ne)-303 7435 y(the)54 b(en)l(tire)g(call)f
+ (graph.)75 b(The)55 b(BU)e(phase)h(simply)f(has)h(to)f(tra)l(v)l(erse)
+ -303 7610 y(this)59 b(acyclic)i(call)f(graph)h(in)f(p)t(ost-order)h
+ (\(visiting)e(callees)h(b)t(efore)-303 7784 y(callers\),)50
+ b(cloning)h(and)g(inlining)g(graphs)g(as)g(describ)t(ed)h(ab)t(o)l(v)l
+ (e.)-154 7958 y(T)-13 b(o)52 b(supp)t(ort)g(programs)f(that)g(ha)l(v)l
+ (e)g(function)h(p)t(oin)l(ters)g(and)g(ex-)-303 8133
+ y(ternal)64 b(functions)g(\(but)h(no)f(recursion\),)j(w)l(e)e(simply)e
+ (restrict)h(our)-303 8307 y(p)t(ost-order)49 b(tra)l(v)l(ersal)d(to)i
+ (only)h(pro)t(cess)f(a)g(call-site)g(if)g(its)f(function)-303
+ 8481 y(p)t(oin)l(ter)41 b(targets)g(a)g Fu(C)p Fw(omplete)g(no)t(de)i
+ (\(i.e,)f(its)f(targets)f(are)i(are)g(fully)-303 8656
+ y(resolv)l(ed,)i(as)f(explained)i(in)f Fz(x)p Fw(2.1.3\),)f
+ Fv(and)i Fw(all)e(p)t(oten)l(tial)g(callees)g(are)-303
+ 8830 y(non-external)52 b(functions)f(\(line)g(1)g(in)g(the)h(Figure\).)
+ -154 9004 y(Suc)l(h)39 b(a)f(call)g(site)g(ma)l(y)g(b)t(ecome)h(resolv)
+ l(ed)f(if)g(the)h(function)f(passed)-303 9179 y(to)53
+ b(a)h(function)h(p)t(oin)l(ter)f(argumen)l(t)g(b)t(ecomes)h(kno)l(wn.)
+ 77 b(F)-13 b(or)54 b(exam-)-303 9353 y(ple,)66 b(the)e(call)f(to)g
+ Fv(FP)h Fw(cannot)f(b)t(e)i(resolv)l(ed)e(within)g(the)h(function)-303
+ 9528 y Fy(do)p -138 9528 48 7 v 57 w(all)p Fw(,)44 b(but)c(will)g(b)t
+ (e)h(resolv)l(ed)f(in)g(the)h(BU)f(graph)h(for)f(the)h(function)-303
+ 9702 y Fy(addGToList)p Fw(,)49 b(where)c(w)l(e)f(conclude)h(that)f(it)f
+ (is)g(a)h(call)f(to)h Fv(addG)p Fw(.)g(W)-13 b(e)-303
+ 9876 y(clone)35 b(and)g(merge)g(the)h(indirect)f(callee's)f(BU)h(graph)
+ g(in)l(to)f(the)h(graph)-303 10051 y(of)47 b(the)g(function)h(where)g
+ (the)g(call)f(site)f(b)t(ecame)j(resolv)l(ed,)e(merging)-303
+ 10225 y(actual)k(and)g(formal)g(argumen)l(ts)g(as)g(w)l(ell)f(as)h
+ (return)h(v)-9 b(alues,)52 b(using)-303 10399 y Fv(r)-8
+ b(esolveCal)8 b(le)-8 b(e)49 b Fw(just)h(as)f(b)t(efore)j(\(line)e(2)g
+ (in)g(the)h(\014gure\).)68 b(This)50 b(tec)l(h-)-303
+ 10574 y(nique)41 b(of)f(resolving)g(call)g(no)t(des)h(as)f(their)h
+ (function)g(p)t(oin)l(ter)f(targets)-303 10748 y(are)50
+ b(completed)h(e\013ectiv)l(ely)f(disco)l(v)l(ers)f(the)h(call-graph)g
+ (on)h(the)f(\015y)-13 b(,)-303 10922 y(and)51 b(w)l(e)g(record)i(the)e
+ (call)g(graph)g(as)g(it)f(is)h(disco)l(v)l(ered.)-154
+ 11097 y(Note)70 b(that)g(the)h(BU)f(graph)g(of)g(the)h(function)f(con)l
+ (taining)g(the)4920 477 y @beginspecial 35 @llx 35 @lly
+ 427 @urx 165 @ury 468 @rhi @setspecial
+ %%BeginDocument: Figures/local.addGToList.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (vadve) Vikram Adve
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 427 165
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % Set up ISO Latin 1 character encoding
+ /starnetISO {
+         dup dup findfont dup length dict begin
+         { 1 index /FID ne { def }{ pop pop } ifelse
+         } forall
+         /Encoding EncodingVector def
+         currentdict end definefont
+ } def
+ /Times-Roman starnetISO def
+ /Times-Italic starnetISO def
+ /Times-Bold starnetISO def
+ /Times-BoldItalic starnetISO def
+ /Helvetica starnetISO def
+ /Helvetica-Oblique starnetISO def
+ /Helvetica-Bold starnetISO def
+ /Helvetica-BoldOblique starnetISO def
+ /Courier starnetISO def
+ /Courier-Oblique starnetISO def
+ /Courier-Bold starnetISO def
+ /Courier-BoldOblique starnetISO def
+ cleartomark
+ } bind def
+ 
+ %%BeginResource: procset
+ /coord-font-family /Times-Roman def
+ /default-font-family /Times-Roman def
+ /coordfont coord-font-family findfont 8 scalefont def
+ 
+ /InvScaleFactor 1.0 def
+ /set_scale {
+ 	dup 1 exch div /InvScaleFactor exch def
+ 	dup scale
+ } bind def
+ 
+ % styles
+ /solid { [] 0 setdash } bind def
+ /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+ /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+ /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+ /bold { 2 setlinewidth } bind def
+ /filled { } bind def
+ /unfilled { } bind def
+ /rounded { } bind def
+ /diagonals { } bind def
+ 
+ % hooks for setting color 
+ /nodecolor { sethsbcolor } bind def
+ /edgecolor { sethsbcolor } bind def
+ /graphcolor { sethsbcolor } bind def
+ /nopcolor {pop pop pop} bind def
+ 
+ /beginpage {	% i j npages
+ 	/npages exch def
+ 	/j exch def
+ 	/i exch def
+ 	/str 10 string def
+ 	npages 1 gt {
+ 		gsave
+ 			coordfont setfont
+ 			0 0 moveto
+ 			(\() show i str cvs show (,) show j str cvs show (\)) show
+ 		grestore
+ 	} if
+ } bind def
+ 
+ /set_font {
+ 	findfont exch
+ 	scalefont setfont
+ } def
+ 
+ % draw aligned label in bounding box aligned to current point
+ /alignedtext {			% width adj text
+ 	/text exch def
+ 	/adj exch def
+ 	/width exch def
+ 	gsave
+ 		width 0 gt {
+ 			text stringwidth pop adj mul 0 rmoveto
+ 		} if
+ 		[] 0 setdash
+ 		text show
+ 	grestore
+ } def
+ 
+ /boxprim {				% xcorner ycorner xsize ysize
+ 		4 2 roll
+ 		moveto
+ 		2 copy
+ 		exch 0 rlineto
+ 		0 exch rlineto
+ 		pop neg 0 rlineto
+ 		closepath
+ } bind def
+ 
+ /ellipse_path {
+ 	/ry exch def
+ 	/rx exch def
+ 	/y exch def
+ 	/x exch def
+ 	matrix currentmatrix
+ 	newpath
+ 	x y translate
+ 	rx ry scale
+ 	0 0 1 0 360 arc
+ 	setmatrix
+ } bind def
+ 
+ /endpage { showpage } bind def
+ /showpage { } def
+ 
+ /layercolorseq
+ 	[	% layer color sequence - darkest to lightest
+ 		[0 0 0]
+ 		[.2 .8 .8]
+ 		[.4 .8 .8]
+ 		[.6 .8 .8]
+ 		[.8 .8 .8]
+ 	]
+ def
+ 
+ /layerlen layercolorseq length def
+ 
+ /setlayer {/maxlayer exch def /curlayer exch def
+ 	layercolorseq curlayer 1 sub layerlen mod get
+ 	aload pop sethsbcolor
+ 	/nodecolor {nopcolor} def
+ 	/edgecolor {nopcolor} def
+ 	/graphcolor {nopcolor} def
+ } bind def
+ 
+ /onlayer { curlayer ne {invis} if } def
+ 
+ /onlayers {
+ 	/myupper exch def
+ 	/mylower exch def
+ 	curlayer mylower lt
+ 	curlayer myupper gt
+ 	or
+ 	{invis} if
+ } def
+ 
+ /curlayer 0 def
+ 
+ %%EndResource
+ %%EndProlog
+ %%BeginSetup
+ 14 default-font-family set_font
+ 1 setmiterlimit
+ % /arrowlength 10 def
+ % /arrowwidth 5 def
+ 
+ % make sure pdfmark is harmless for PS-interpreters other than Distiller
+ /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+ % make '<<' and '>>' safe on PS Level 1 devices
+ /languagelevel where {pop languagelevel}{1} ifelse
+ 2 lt {
+     userdict (<<) cvn ([) cvn load put
+     userdict (>>) cvn ([) cvn load put
+ } if
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%PageBoundingBox: 36 36 427 165
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 392 130 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	Node0x840b7b0
+ gsave 10 dict begin
+ newpath 347 8 moveto
+ 378 8 lineto
+ stroke
+ newpath 378 8 moveto
+ 383 8 390 13 390 19 curveto
+ stroke
+ newpath 390 19 moveto
+ 390 32 lineto
+ stroke
+ newpath 390 32 moveto
+ 390 38 384 44 378 44 curveto
+ stroke
+ newpath 378 44 moveto
+ 347 44 lineto
+ stroke
+ newpath 347 44 moveto
+ 342 44 336 38 336 32 curveto
+ stroke
+ newpath 336 32 moveto
+ 336 19 lineto
+ stroke
+ newpath 336 19 moveto
+ 336 13 341 8 347 8 curveto
+ stroke
+ gsave 10 dict begin
+ 363 21 moveto 36 -0.5 (void: ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x840a5f0
+ gsave 10 dict begin
+ newpath 12 8 moveto
+ 186 8 lineto
+ stroke
+ newpath 186 8 moveto
+ 192 8 198 13 198 19 curveto
+ stroke
+ newpath 198 19 moveto
+ 198 32 lineto
+ stroke
+ newpath 198 32 moveto
+ 198 38 191 44 185 44 curveto
+ stroke
+ newpath 185 44 moveto
+ 11 44 lineto
+ stroke
+ newpath 11 44 moveto
+ 5 44 0 38 0 32 curveto
+ stroke
+ newpath 0 32 moveto
+ 0 19 lineto
+ stroke
+ newpath 0 19 moveto
+ 0 13 6 8 12 8 curveto
+ stroke
+ gsave 10 dict begin
+ 99 29 moveto 184 -0.5 (void \(list*, void \(int*\)*\): GC) alignedtext
+ 99 13 moveto 43 -0.5 (do_all) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x840a628
+ gsave 10 dict begin
+ newpath 227 8 moveto
+ 305 8 lineto
+ stroke
+ newpath 305 8 moveto
+ 311 8 318 13 318 19 curveto
+ stroke
+ newpath 318 19 moveto
+ 318 32 lineto
+ stroke
+ newpath 318 32 moveto
+ 318 38 312 44 306 44 curveto
+ stroke
+ newpath 306 44 moveto
+ 228 44 lineto
+ stroke
+ newpath 228 44 moveto
+ 222 44 216 38 216 32 curveto
+ stroke
+ newpath 216 32 moveto
+ 216 19 lineto
+ stroke
+ newpath 216 19 moveto
+ 216 13 221 8 227 8 curveto
+ stroke
+ gsave 10 dict begin
+ 267 29 moveto 88 -0.5 (void \(int*\): G) alignedtext
+ 267 13 moveto 37 -0.5 (addG) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x840a778
+ gsave 10 dict begin
+ 363 100 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 363 95 moveto 10 -0.5 (L) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x840a778 -> Node0x840b7b0
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 363 77 moveto
+ 363 69 363 61 363 54 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 366 77 moveto
+ 361 77 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 366 54 moveto
+ 363 44 lineto
+ 361 54 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x8408280
+ gsave 10 dict begin
+ newpath 199 80 moveto
+ 276 80 lineto
+ 276 120 lineto
+ 199 120 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 237 105 moveto 23 -0.5 (call) alignedtext
+ end grestore
+ newpath 199 100 moveto
+ 276 100 lineto
+ stroke
+ gsave 10 dict begin
+ 209 85 moveto 6 -0.5 (r) alignedtext
+ end grestore
+ newpath 219 80 moveto
+ 219 100 lineto
+ stroke
+ gsave 10 dict begin
+ 229 85 moveto 7 -0.5 (f) alignedtext
+ end grestore
+ newpath 240 80 moveto
+ 240 100 lineto
+ stroke
+ gsave 10 dict begin
+ 249 85 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ newpath 258 80 moveto
+ 258 100 lineto
+ stroke
+ gsave 10 dict begin
+ 267 85 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x8408280 -> Node0x840b7b0
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 249 90 moveto
+ 249 90 291 69 327 49 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 328 51 moveto
+ 336 44 lineto
+ 326 47 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x8408280 -> Node0x840a5f0
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 230 90 moveto
+ 230 90 183 67 145 48 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 146 46 moveto
+ 136 44 lineto
+ 144 50 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x8408280 -> Node0x840a628
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 267 90 moveto
+ 267 90 267 72 267 55 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 270 54 moveto
+ 267 44 lineto
+ 265 54 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 5155 651 a(\(a\))50 b(Lo)t(cal)h Fy(addGToList)k
+ Fw(graph)4753 1688 y @beginspecial 35 @llx 35 @lly 257
+ @urx 185 @ury 540 @rhi @setspecial
+ %%BeginDocument: Figures/bu.addGToList-after-do_all.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (vadve) Vikram Adve
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 257 185
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % Set up ISO Latin 1 character encoding
+ /starnetISO {
+         dup dup findfont dup length dict begin
+         { 1 index /FID ne { def }{ pop pop } ifelse
+         } forall
+         /Encoding EncodingVector def
+         currentdict end definefont
+ } def
+ /Times-Roman starnetISO def
+ /Times-Italic starnetISO def
+ /Times-Bold starnetISO def
+ /Times-BoldItalic starnetISO def
+ /Helvetica starnetISO def
+ /Helvetica-Oblique starnetISO def
+ /Helvetica-Bold starnetISO def
+ /Helvetica-BoldOblique starnetISO def
+ /Courier starnetISO def
+ /Courier-Oblique starnetISO def
+ /Courier-Bold starnetISO def
+ /Courier-BoldOblique starnetISO def
+ cleartomark
+ } bind def
+ 
+ %%BeginResource: procset
+ /coord-font-family /Times-Roman def
+ /default-font-family /Times-Roman def
+ /coordfont coord-font-family findfont 8 scalefont def
+ 
+ /InvScaleFactor 1.0 def
+ /set_scale {
+ 	dup 1 exch div /InvScaleFactor exch def
+ 	dup scale
+ } bind def
+ 
+ % styles
+ /solid { [] 0 setdash } bind def
+ /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+ /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+ /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+ /bold { 2 setlinewidth } bind def
+ /filled { } bind def
+ /unfilled { } bind def
+ /rounded { } bind def
+ /diagonals { } bind def
+ 
+ % hooks for setting color 
+ /nodecolor { sethsbcolor } bind def
+ /edgecolor { sethsbcolor } bind def
+ /graphcolor { sethsbcolor } bind def
+ /nopcolor {pop pop pop} bind def
+ 
+ /beginpage {	% i j npages
+ 	/npages exch def
+ 	/j exch def
+ 	/i exch def
+ 	/str 10 string def
+ 	npages 1 gt {
+ 		gsave
+ 			coordfont setfont
+ 			0 0 moveto
+ 			(\() show i str cvs show (,) show j str cvs show (\)) show
+ 		grestore
+ 	} if
+ } bind def
+ 
+ /set_font {
+ 	findfont exch
+ 	scalefont setfont
+ } def
+ 
+ % draw aligned label in bounding box aligned to current point
+ /alignedtext {			% width adj text
+ 	/text exch def
+ 	/adj exch def
+ 	/width exch def
+ 	gsave
+ 		width 0 gt {
+ 			text stringwidth pop adj mul 0 rmoveto
+ 		} if
+ 		[] 0 setdash
+ 		text show
+ 	grestore
+ } def
+ 
+ /boxprim {				% xcorner ycorner xsize ysize
+ 		4 2 roll
+ 		moveto
+ 		2 copy
+ 		exch 0 rlineto
+ 		0 exch rlineto
+ 		pop neg 0 rlineto
+ 		closepath
+ } bind def
+ 
+ /ellipse_path {
+ 	/ry exch def
+ 	/rx exch def
+ 	/y exch def
+ 	/x exch def
+ 	matrix currentmatrix
+ 	newpath
+ 	x y translate
+ 	rx ry scale
+ 	0 0 1 0 360 arc
+ 	setmatrix
+ } bind def
+ 
+ /endpage { showpage } bind def
+ /showpage { } def
+ 
+ /layercolorseq
+ 	[	% layer color sequence - darkest to lightest
+ 		[0 0 0]
+ 		[.2 .8 .8]
+ 		[.4 .8 .8]
+ 		[.6 .8 .8]
+ 		[.8 .8 .8]
+ 	]
+ def
+ 
+ /layerlen layercolorseq length def
+ 
+ /setlayer {/maxlayer exch def /curlayer exch def
+ 	layercolorseq curlayer 1 sub layerlen mod get
+ 	aload pop sethsbcolor
+ 	/nodecolor {nopcolor} def
+ 	/edgecolor {nopcolor} def
+ 	/graphcolor {nopcolor} def
+ } bind def
+ 
+ /onlayer { curlayer ne {invis} if } def
+ 
+ /onlayers {
+ 	/myupper exch def
+ 	/mylower exch def
+ 	curlayer mylower lt
+ 	curlayer myupper gt
+ 	or
+ 	{invis} if
+ } def
+ 
+ /curlayer 0 def
+ 
+ %%EndResource
+ %%EndProlog
+ %%BeginSetup
+ 14 default-font-family set_font
+ 1 setmiterlimit
+ % /arrowlength 10 def
+ % /arrowwidth 5 def
+ 
+ % make sure pdfmark is harmless for PS-interpreters other than Distiller
+ /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+ % make '<<' and '>>' safe on PS Level 1 devices
+ /languagelevel where {pop languagelevel}{1} ifelse
+ 2 lt {
+     userdict (<<) cvn ([) cvn load put
+     userdict (>>) cvn ([) cvn load put
+ } if
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%PageBoundingBox: 36 36 257 185
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 222 150 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	Node0x840f090
+ gsave 10 dict begin
+ newpath 117 26 moveto
+ 208 26 lineto
+ stroke
+ newpath 208 26 moveto
+ 214 26 220 31 220 37 curveto
+ stroke
+ newpath 220 37 moveto
+ 220 50 lineto
+ stroke
+ newpath 220 50 moveto
+ 220 56 214 62 208 62 curveto
+ stroke
+ newpath 208 62 moveto
+ 117 62 lineto
+ stroke
+ newpath 117 62 moveto
+ 111 62 106 56 106 50 curveto
+ stroke
+ newpath 106 50 moveto
+ 106 37 lineto
+ stroke
+ newpath 106 37 moveto
+ 106 31 111 26 117 26 curveto
+ stroke
+ gsave 10 dict begin
+ 163 47 moveto 100 -0.5 (void \(int*\): GC) alignedtext
+ 163 31 moveto 37 -0.5 (addG) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x840f0c8
+ gsave 10 dict begin
+ newpath 11 24 moveto
+ 59 24 lineto
+ stroke
+ newpath 59 24 moveto
+ 65 24 71 29 71 35 curveto
+ stroke
+ newpath 71 35 moveto
+ 71 51 lineto
+ stroke
+ newpath 71 51 moveto
+ 71 57 65 64 59 64 curveto
+ stroke
+ newpath 59 64 moveto
+ 11 64 lineto
+ stroke
+ newpath 11 64 moveto
+ 5 64 0 58 0 52 curveto
+ stroke
+ newpath 0 52 moveto
+ 0 36 lineto
+ stroke
+ newpath 0 36 moveto
+ 0 30 5 24 11 24 curveto
+ stroke
+ gsave 10 dict begin
+ 35 49 moveto 38 -0.5 (list: R) alignedtext
+ end grestore
+ newpath 0 44 moveto
+ 71 44 lineto
+ stroke
+ gsave 10 dict begin
+ 19 29 moveto 25 -0.5 (list*) alignedtext
+ end grestore
+ newpath 39 24 moveto
+ 39 44 lineto
+ stroke
+ gsave 10 dict begin
+ 55 29 moveto 18 -0.5 (int) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x840f0c8 -> Node0x840f0c8
+ newpath 33 24 moveto
+ 48 13 73 0 88 15 curveto
+ 106 33 106 54 88 73 curveto
+ 80 80 70 77 61 70 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 62 68 moveto
+ 53 64 lineto
+ 60 72 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x840a6b8
+ gsave 10 dict begin
+ 35 120 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 35 115 moveto 10 -0.5 (L) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x840a6b8 -> Node0x840f0c8
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 35 97 moveto
+ 35 90 35 82 35 74 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 38 97 moveto
+ 33 97 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 38 74 moveto
+ 35 64 lineto
+ 33 74 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x840dd00
+ gsave 10 dict begin
+ newpath 106 100 moveto
+ 165 100 lineto
+ 165 140 lineto
+ 106 140 lineto
+ closepath
+ stroke
+ gsave 10 dict begin
+ 135 125 moveto 23 -0.5 (call) alignedtext
+ end grestore
+ newpath 106 120 moveto
+ 165 120 lineto
+ stroke
+ gsave 10 dict begin
+ 116 105 moveto 6 -0.5 (r) alignedtext
+ end grestore
+ newpath 126 100 moveto
+ 126 120 lineto
+ stroke
+ gsave 10 dict begin
+ 136 105 moveto 7 -0.5 (f) alignedtext
+ end grestore
+ newpath 147 100 moveto
+ 147 120 lineto
+ stroke
+ gsave 10 dict begin
+ 156 105 moveto 4 -0.5 ( ) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x840dd00 -> Node0x840f090
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 136 110 moveto
+ 136 110 145 90 152 72 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 155 72 moveto
+ 156 62 lineto
+ 150 70 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x840dd00 -> Node0x840f0c8
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 156 110 moveto
+ 156 110 101 94 71 64 curveto
+ 68 61 65 56 63 52 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 66 52 moveto
+ 59 44 lineto
+ 61 54 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 4589 1862 a(\(b\))c(After)g(inlining)g Fy(do)p
+ 5966 1862 V 57 w(all)6503 1688 y @beginspecial 35 @llx
+ 35 @lly 181 @urx 181 @ury 540 @rhi @setspecial
+ %%BeginDocument: Figures/bu.addGToList.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (vadve) Vikram Adve
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 181 181
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % Set up ISO Latin 1 character encoding
+ /starnetISO {
+         dup dup findfont dup length dict begin
+         { 1 index /FID ne { def }{ pop pop } ifelse
+         } forall
+         /Encoding EncodingVector def
+         currentdict end definefont
+ } def
+ /Times-Roman starnetISO def
+ /Times-Italic starnetISO def
+ /Times-Bold starnetISO def
+ /Times-BoldItalic starnetISO def
+ /Helvetica starnetISO def
+ /Helvetica-Oblique starnetISO def
+ /Helvetica-Bold starnetISO def
+ /Helvetica-BoldOblique starnetISO def
+ /Courier starnetISO def
+ /Courier-Oblique starnetISO def
+ /Courier-Bold starnetISO def
+ /Courier-BoldOblique starnetISO def
+ cleartomark
+ } bind def
+ 
+ %%BeginResource: procset
+ /coord-font-family /Times-Roman def
+ /default-font-family /Times-Roman def
+ /coordfont coord-font-family findfont 8 scalefont def
+ 
+ /InvScaleFactor 1.0 def
+ /set_scale {
+ 	dup 1 exch div /InvScaleFactor exch def
+ 	dup scale
+ } bind def
+ 
+ % styles
+ /solid { [] 0 setdash } bind def
+ /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+ /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+ /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+ /bold { 2 setlinewidth } bind def
+ /filled { } bind def
+ /unfilled { } bind def
+ /rounded { } bind def
+ /diagonals { } bind def
+ 
+ % hooks for setting color 
+ /nodecolor { sethsbcolor } bind def
+ /edgecolor { sethsbcolor } bind def
+ /graphcolor { sethsbcolor } bind def
+ /nopcolor {pop pop pop} bind def
+ 
+ /beginpage {	% i j npages
+ 	/npages exch def
+ 	/j exch def
+ 	/i exch def
+ 	/str 10 string def
+ 	npages 1 gt {
+ 		gsave
+ 			coordfont setfont
+ 			0 0 moveto
+ 			(\() show i str cvs show (,) show j str cvs show (\)) show
+ 		grestore
+ 	} if
+ } bind def
+ 
+ /set_font {
+ 	findfont exch
+ 	scalefont setfont
+ } def
+ 
+ % draw aligned label in bounding box aligned to current point
+ /alignedtext {			% width adj text
+ 	/text exch def
+ 	/adj exch def
+ 	/width exch def
+ 	gsave
+ 		width 0 gt {
+ 			text stringwidth pop adj mul 0 rmoveto
+ 		} if
+ 		[] 0 setdash
+ 		text show
+ 	grestore
+ } def
+ 
+ /boxprim {				% xcorner ycorner xsize ysize
+ 		4 2 roll
+ 		moveto
+ 		2 copy
+ 		exch 0 rlineto
+ 		0 exch rlineto
+ 		pop neg 0 rlineto
+ 		closepath
+ } bind def
+ 
+ /ellipse_path {
+ 	/ry exch def
+ 	/rx exch def
+ 	/y exch def
+ 	/x exch def
+ 	matrix currentmatrix
+ 	newpath
+ 	x y translate
+ 	rx ry scale
+ 	0 0 1 0 360 arc
+ 	setmatrix
+ } bind def
+ 
+ /endpage { showpage } bind def
+ /showpage { } def
+ 
+ /layercolorseq
+ 	[	% layer color sequence - darkest to lightest
+ 		[0 0 0]
+ 		[.2 .8 .8]
+ 		[.4 .8 .8]
+ 		[.6 .8 .8]
+ 		[.8 .8 .8]
+ 	]
+ def
+ 
+ /layerlen layercolorseq length def
+ 
+ /setlayer {/maxlayer exch def /curlayer exch def
+ 	layercolorseq curlayer 1 sub layerlen mod get
+ 	aload pop sethsbcolor
+ 	/nodecolor {nopcolor} def
+ 	/edgecolor {nopcolor} def
+ 	/graphcolor {nopcolor} def
+ } bind def
+ 
+ /onlayer { curlayer ne {invis} if } def
+ 
+ /onlayers {
+ 	/myupper exch def
+ 	/mylower exch def
+ 	curlayer mylower lt
+ 	curlayer myupper gt
+ 	or
+ 	{invis} if
+ } def
+ 
+ /curlayer 0 def
+ 
+ %%EndResource
+ %%EndProlog
+ %%BeginSetup
+ 14 default-font-family set_font
+ 1 setmiterlimit
+ % /arrowlength 10 def
+ % /arrowwidth 5 def
+ 
+ % make sure pdfmark is harmless for PS-interpreters other than Distiller
+ /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+ % make '<<' and '>>' safe on PS Level 1 devices
+ /languagelevel where {pop languagelevel}{1} ifelse
+ 2 lt {
+     userdict (<<) cvn ([) cvn load put
+     userdict (>>) cvn ([) cvn load put
+ } if
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%PageBoundingBox: 36 36 181 181
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 146 146 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	Node0x840f0c8
+ gsave 10 dict begin
+ newpath 11 24 moveto
+ 59 24 lineto
+ stroke
+ newpath 59 24 moveto
+ 65 24 71 29 71 35 curveto
+ stroke
+ newpath 71 35 moveto
+ 71 51 lineto
+ stroke
+ newpath 71 51 moveto
+ 71 57 65 64 59 64 curveto
+ stroke
+ newpath 59 64 moveto
+ 11 64 lineto
+ stroke
+ newpath 11 64 moveto
+ 5 64 0 58 0 52 curveto
+ stroke
+ newpath 0 52 moveto
+ 0 36 lineto
+ stroke
+ newpath 0 36 moveto
+ 0 30 5 24 11 24 curveto
+ stroke
+ gsave 10 dict begin
+ 35 49 moveto 54 -0.5 (list: MR) alignedtext
+ end grestore
+ newpath 0 44 moveto
+ 71 44 lineto
+ stroke
+ gsave 10 dict begin
+ 19 29 moveto 25 -0.5 (list*) alignedtext
+ end grestore
+ newpath 39 24 moveto
+ 39 44 lineto
+ stroke
+ gsave 10 dict begin
+ 55 29 moveto 18 -0.5 (int) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x840f0c8 -> Node0x840f0c8
+ newpath 33 24 moveto
+ 48 13 73 0 88 15 curveto
+ 106 33 106 54 88 73 curveto
+ 80 80 70 77 61 70 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 62 68 moveto
+ 53 64 lineto
+ 60 72 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x840a6b8
+ gsave 10 dict begin
+ 35 118 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 35 113 moveto 10 -0.5 (L) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x840a6b8 -> Node0x840f0c8
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 35 95 moveto
+ 35 88 35 81 35 73 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 38 95 moveto
+ 33 95 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 38 74 moveto
+ 35 64 lineto
+ 33 74 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x840f090
+ gsave 10 dict begin
+ newpath 92 100 moveto
+ 132 100 lineto
+ stroke
+ newpath 132 100 moveto
+ 138 100 144 105 144 111 curveto
+ stroke
+ newpath 144 111 moveto
+ 144 124 lineto
+ stroke
+ newpath 144 124 moveto
+ 144 130 138 136 132 136 curveto
+ stroke
+ newpath 132 136 moveto
+ 92 136 lineto
+ stroke
+ newpath 92 136 moveto
+ 86 136 80 130 80 124 curveto
+ stroke
+ newpath 80 124 moveto
+ 80 111 lineto
+ stroke
+ newpath 80 111 moveto
+ 80 105 86 100 92 100 curveto
+ stroke
+ gsave 10 dict begin
+ 112 121 moveto 50 -0.5 (int: GR) alignedtext
+ 112 105 moveto 45 -0.5 (Global) alignedtext
+ end grestore
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 6305 1862 a Fw(\(c\))f(Final)h(BU)g(graph)4231
+ 2101 y(Figure)g(7:)68 b Fm(Construction)47 b(of)f(the)i(BU)e(DS)h
+ (graph)g(for)g Fj(addGToList)4096 2378 y Fw(original)42
+ b(call)h(still)f(has)i(the)g(unresolv)l(ed)g(call)f(no)t(de.)67
+ b(W)-13 b(e)44 b(do)g(not)f(re-)4096 2553 y(visit)f(previously)i
+ (visited)f(functions)h(in)f(eac)l(h)i(phase,)g(but)f(that)f(call)4096
+ 2727 y(no)t(de)h(will)e(ev)l(en)l(tually)h(b)t(e)h(resolv)l(ed)f(in)g
+ (the)g(top-do)l(wn)g(phase.)66 b(The)4096 2901 y(BU)55
+ b(graph)h(for)g(the)g(function)g(where)h(the)f(call)f(w)l(as)f(resolv)l
+ (ed)i(no)l(w)4096 3076 y(fully)g(incorp)t(orates)g(the)g(e\013ect)g(of)
+ g(the)g(call.)82 b(F)-13 b(or)56 b(example,)i(inlin-)4096
+ 3250 y(ing)44 b(the)i(BU)e(graph)h(of)g Fy(addG)i Fw(in)l(to)d(that)g
+ (of)h Fy(addGToList)k Fw(yields)44 b(the)4096 3424 y(\014nished)61
+ b(graph)f(sho)l(wn)f(in)h(Figure)h(7\(c\).)93 b(The)60
+ b Fu(M)p Fw(o)t(di\014ed)h(\015ag)f(in)4096 3599 y(the)51
+ b(no)t(de)g(p)t(oin)l(ted)g(to)f(b)l(y)g Fs(L)g Fw(is)g(obtained)g
+ (from)h(the)f(no)t(de)i Fs(E)7732 3616 y Fl(V)7839 3599
+ y Fw(\()p Fs(X)12 b Fw(\))4096 3773 y(from)41 b Fy(addG)j
+ Fw(\(Figure)d(3\),)i(whic)l(h)f(is)f(merged)h(with)f(the)h(second)g
+ (argu-)4096 3948 y(men)l(t)52 b(no)t(de)h(inlined)g(from)f
+ Fy(do)p 5891 3948 V 57 w(all)p Fw(.)72 b(This)52 b(graph)g(for)g
+ Fy(addGToList)4096 4122 y Fw(is)g(iden)l(tical)g(to)h(that)f(whic)l(h)h
+ (w)l(ould)g(ha)l(v)l(e)g(b)t(een)h(obtained)f(if)g Fy(addG)4096
+ 4296 y Fw(w)l(as)c(\014rst)g(inlined)h(in)l(to)f Fy(do)p
+ 5682 4296 V 58 w(all)i Fw(\(eliminating)d(the)i(call)g(no)t(de\))g(and)
+ 4096 4471 y(the)h(resulting)g(graph)h(w)l(as)e(then)i(inlined)f(in)l
+ (to)g Fy(addGToList)p Fw(.)4245 4645 y(After)39 b(the)g(cloning)f(and)h
+ (merging)g(is)e(complete)i(for)g(a)f(function)h(in)4096
+ 4819 y(the)46 b(SCC,)g(w)l(e)f(iden)l(tify)h(new)g(complete)g(no)t(des)
+ g(\(Section)g(3.2\))f(\(line)4096 4994 y(5\))63 b(and)i(remo)l(v)l(e)f
+ (unreac)l(hable)h(no)t(des)g(from)f(the)g(graph)h(\(line)e(6\).)4096
+ 5168 y(The)k(latter)e(are)i(created)g(b)t(ecause)g(cop)l(ying)f(and)h
+ (inlining)f(callee)4096 5342 y(graphs)c(can)g(bring)g(in)f(excess)h(no)
+ t(des)h(not)e(accessible)h(within)f(the)4096 5517 y(curren)l(t)h
+ (function)f(\(and)g(therefore)h(not)f(accessible)g(in)g(an)l(y)g(of)g
+ (its)4096 5691 y(callers)35 b(as)g(w)l(ell\).)62 b(This)35
+ b(includes)i(non-global)e(no)t(des)h(not)g(reac)l(hable)4096
+ 5865 y(from)51 b(an)l(y)g(virtual)g(register,)f(global)g(no)t(de,)i(or)
+ f(call)g(no)t(de.)4142 6173 y Fi(3.3.2)182 b(Recur)n(sion)47
+ b(without)f(Function)g(P)-15 b(ointer)n(s)4245 6389 y
+ Fw(Our)68 b(strategy)e(for)g(handling)h(recursion)h(is)e(essen)l
+ (tially)f(to)h(ap-)4096 6564 y(ply)51 b(the)h(b)t(ottom-up)f(pro)t
+ (cess)g(describ)t(ed)i(ab)t(o)l(v)l(e)e(but)h(on)f(Strongly)4096
+ 6738 y(Connected)57 b(Comp)t(onen)l(ts)f(\(SCCs\))g(of)f(the)i(call)e
+ (graph,)i(handling)4096 6912 y(eac)l(h)i(m)l(ulti-no)t(de)g(SCC)f
+ (separately)-13 b(.)90 b(The)59 b(k)l(ey)g(di\016cult)l(y)f(is)g(that)
+ 4096 7087 y(call)40 b(edges)h(are)h(not)e(kno)l(wn)h(b)t(eforehand,)k
+ (and)c(instead)g(are)g(disco)l(v-)4096 7261 y(ered)c(incremen)l(tally)f
+ (b)l(y)h(the)f(algorithm.)62 b(The)37 b(o)l(v)l(erall)e(Bottom-Up)4096
+ 7435 y(analysis)64 b(algorithm)g(is)h(sho)l(wn)g(in)g(Figure)h(8.)110
+ b(It)66 b(uses)f(an)g(adap-)4096 7610 y(tation)77 b(of)i(T)-13
+ b(arjan's)77 b(linear-time)h(algorithm)g(to)g(\014nd)h(and)g(visit)4096
+ 7784 y(Strongly)63 b(Connected)i(Comp)t(onen)l(ts)f(\(SCCs\))e(in)i
+ (the)f(call)g(graph)4096 7958 y(in)51 b(p)t(ostorder)h([18].)4245
+ 8133 y(Assume)j(\014rst)g(that)g(there)h(are)f(only)g(direct)g(calls,)g
+ (i.e.,)g(the)g(call)4096 8307 y(graph)47 b(is)f(kno)l(wn.)67
+ b(F)-13 b(or)47 b(eac)l(h)g(SCC,)f(all)g(calls)g(to)g(functions)h
+ (outside)4096 8481 y(the)k(SCC)g(are)h(\014rst)e(cloned)i(and)f(resolv)
+ l(ed)g(as)g(b)t(efore)h(\(these)f(func-)4096 8656 y(tions)43
+ b(will)h(already)g(ha)l(v)l(e)g(b)t(een)i(visited)e(b)t(ecause)i(of)e
+ (the)g(p)t(ostorder)4096 8830 y(tra)l(v)l(ersal)53 b(o)l(v)l(er)h
+ (SCCs\).)77 b(Once)56 b(this)e(step)g(is)g(complete,)h(all)f(of)g(the)
+ 4096 9004 y(functions)41 b(in)f(the)h(SCC)g(ha)l(v)l(e)g(empt)l(y)g
+ (lists)e(of)i(call)f(sites,)h(except)h(for)4096 9179
+ y(in)l(tra-SCC)d(calls)g(and)h(calls)f(to)g(external)h(functions)g
+ (\(the)f(latter)g(are)4096 9353 y(simply)55 b(ignored)i(throughout\).)
+ 82 b(In)57 b(an)f(SCC,)g(eac)l(h)g(function)h(will)4096
+ 9528 y(ev)l(en)l(tually)47 b(need)i(to)e(inline)g(the)h(graphs)f(of)g
+ (all)g(other)g(functions)h(in)4096 9702 y(the)k(SCC)h(at)e(least)g
+ (once)i(\(either)f(directly)g(or)g(through)h(the)f(graph)4096
+ 9876 y(of)i(a)h(callee\).)79 b(A)55 b(naiv)l(e)g(algorithm)e(can)j(pro)
+ t(duce)g(an)f(exp)t(onen)l(tial)4096 10051 y(n)l(um)l(b)t(er)g(of)f
+ (inlining)g(op)t(erations,)h(and)g(ev)l(en)g(a)f(careful)h(en)l(umera-)
+ 4096 10225 y(tion)48 b(can)i(require)f Fs(O)t Fw(\()p
+ Fs(n)5477 10161 y Ft(2)5546 10225 y Fw(\))g(inlining)f(op)t(erations)h
+ (in)g(complex)g(SCCs)4096 10399 y(\(whic)l(h)h(w)l(e)h(ha)l(v)l(e)f
+ (encoun)l(tered)i(in)f(some)f(b)t(enc)l(hmarks\).)68
+ b(Instead,)4096 10574 y(b)t(ecause)62 b(there)f(are)g(an)g(in\014nite)g
+ (n)l(um)l(b)t(er)g(of)g(call)f(paths)g(through)4096 10748
+ y(the)42 b(SCC,)g(w)l(e)f(c)l(ho)t(ose)h(to)f(completely)h(ignore)g(in)
+ l(tra-SCC)f(con)l(text-)4096 10922 y(sensitivit)l(y)-13
+ b(.)106 b(W)-13 b(e)65 b(simply)e(merge)i(the)g(partial)f(BU)g(graphs)g
+ (of)h(all)4096 11097 y(functions)70 b(in)g(the)h(SCC,)f(resolving)f
+ (all)g(in)l(tra-SCC)h(calls)f(in)h(the)p eop end
+ %%Page: 7 7
+ TeXDict begin 7 6 bop -303 -137 a Fw(con)l(text)51 b(of)g(this)f
+ (single)h(merged)h(graph.)p -303 47 4001 17 v -24 259
+ a Fq(BottomUpAnalysis)p Fr(\(Program)47 b Fo(P)18 b Fr(\))115
+ 392 y Fp(8)45 b Fr(F)-11 b(unction)46 b Fo(F)55 b Fp(2)39
+ b Fo(P)-303 525 y Fr(.)520 b Fo(B)6 b(U)12 b(Gr)t(aph)p
+ Fp(f)p Fo(F)18 b Fp(g)38 b Fr(=)g Fo(Local)q(Gr)t(aph)p
+ Fp(f)p Fo(F)18 b Fp(g)-303 658 y Fr(.)520 b(V)-11 b(al[)p
+ Fo(F)18 b Fr(])44 b(=)g(0;)h(NextID)f(=)h(0)115 791 y(while)f(\()p
+ Fp(9)h Fr(un)l(visited)g(functions)g Fo(F)56 b Fp(2)38
+ b Fo(P)18 b Fr(\))178 b(\()p Fn(visit)50 b Fh(main)f
+ Fn(\014rst)h(if)g(available)p Fr(\))255 923 y(T)-11 b(arjanVisitNo)t
+ (de\()p Fo(F)18 b Fr(,)44 b(new)h(Stac)l(k\))-24 1189
+ y Fq(T)-12 b(arjanVisitNo)t(de)p Fr(\(F)h(unction)47
+ b Fo(F)18 b Fr(,)45 b(Stac)l(k)g(Stk\))115 1322 y(NextID++;)f(V)-11
+ b(al[F])44 b(=)g(NextID;)g(MinVisit)g(=)h(NextID;)f(Stk.push\(F\))115
+ 1455 y Fp(8)h Fr(call)f(sites)g Fo(C)i Fp(2)38 b Fo(B)6
+ b(U)12 b(Gr)t(aph)p Fp(f)p Fo(F)18 b Fp(g)255 1588 y(8)45
+ b Fr(kno)l(wn)g(non-external)g(callees)f Fo(F)2064 1605
+ y Fe(C)2206 1588 y Fr(at)h Fo(C)394 1721 y Fr(if)g(\(V)-11
+ b(al[)p Fo(F)883 1738 y Fe(C)979 1721 y Fr(])44 b(==)h(0\))358
+ b(\()p Fo(F)1922 1738 y Fe(C)2068 1721 y Fn(unvisite)-7
+ b(d)p Fr(\))534 1853 y(T)c(arjanVisitNo)t(de\()p Fo(F)1631
+ 1870 y Fe(C)1727 1853 y Fr(,)45 b(S\))394 1986 y(else)f(MinVisit)g(=)h
+ (min\(MinVisit,)e(V)-11 b(al[)p Fo(F)2522 2003 y Fe(C)2619
+ 1986 y Fr(]\))255 2119 y(if)44 b(\(MinVisit)g(==)h(V)-11
+ b(al[)p Fo(F)18 b Fr(]\))267 b(\()p Fn(new)50 b(SCC)g(at)g(top)g(of)f
+ (Stack)p Fr(\))394 2252 y(SCC)c(S)g(=)g Fp(f)f Fo(N)12
+ b Fr(:)60 b Fo(N)50 b Fr(=)38 b Fo(F)93 b Fp(_)75 b Fo(N)58
+ b Fr(app)t(ears)45 b(ab)t(o)l(v)l(e)g Fo(F)63 b Fr(on)45
+ b(stac)l(k)g Fp(g)394 2385 y(8)g Fo(F)56 b Fp(2)38 b
+ Fo(S)6 b Fr(:)104 b(V)-11 b(al[)p Fo(F)18 b Fr(])44 b(=)g(MAXINT;)h
+ (Stk.p)t(op\()p Fo(F)18 b Fr(\))394 2518 y(Pro)t(cessSCC\(S,)44
+ b(Stk\))-24 2783 y Fq(Pro)t(cessSCC)p Fr(\(SCC)h Fo(S)6
+ b Fr(,)44 b(Stac)l(k)h(Stk\))115 2954 y Fp(8)g Fr(F)-11
+ b(unction)46 b Fo(F)55 b Fp(2)39 b Fo(S)-303 3086 y Fr(\(1\))388
+ b Fp(8)45 b Fr(resolv)-7 b(able)43 b(call)i(sites)e Fo(C)j
+ Fp(2)39 b Fo(B)6 b(U)12 b(Gr)t(aph)p Fp(f)p Fo(F)18 b
+ Fp(g)314 b Fr(\()p Fn(se)-7 b(e)50 b(text)p Fr(\))394
+ 3219 y Fp(8)45 b Fr(kno)l(wn)h(callees)e Fo(F)1433 3236
+ y Fe(C)1574 3219 y Fr(at)h Fo(C)534 3352 y Fr(if)f(\()p
+ Fo(F)793 3369 y Fe(C)942 3352 y Fo(=)-82 b Fp(2)38 b
+ Fo(S)6 b Fr(\))358 b(\()p Fn(Pr)-7 b(o)g(c)g(ess)52 b(funcs)d(not)h(in)
+ g(SCC)p Fr(\))-303 3485 y(\(2\))806 b(Resolv)l(eCallee\(BUGraph)p
+ Fp(f)p Fo(F)2227 3502 y Fe(C)2324 3485 y Fp(g)p Fr(,)44
+ b(BUGraph)p Fp(f)p Fo(F)18 b Fp(g)p Fr(,)45 b Fo(F)3437
+ 3502 y Fe(C)3534 3485 y Fr(,)f Fn(CS)p Fr(\))-303 3655
+ y(\(3\))248 b(SCCGraph)45 b(=)g(BUGraph)p Fp(f)p Fo(F)1647
+ 3672 y Ff(0)1712 3655 y Fp(g)p Fr(,)g(for)g(some)f Fo(F)2482
+ 3672 y Ff(0)2585 3655 y Fp(2)38 b Fo(S)115 3788 y Fp(8)45
+ b Fr(F)-11 b(unction)46 b Fo(F)55 b Fp(2)39 b Fo(S)o(;)23
+ b(F)55 b Fp(6)p Fr(=)38 b Fo(F)1563 3805 y Ff(0)1807
+ 3788 y Fr(\()p Fn(Mer)-7 b(ge)51 b(al)7 b(l)49 b(BUGr)-7
+ b(aphs)51 b(of)e(SCC)p Fr(\))255 3921 y(cloneGraphIn)l(to\(BUGraph)p
+ Fp(f)p Fr(F)p Fp(g)p Fr(,)d(SCCGraph\))255 4054 y(BUGraph)p
+ Fp(f)p Fr(F)p Fp(g)f Fr(=)f(SCCGraph)-303 4224 y(\(4\))248
+ b Fp(8)45 b Fr(resolv)-7 b(able)44 b(call)g(sites)g Fo(C)i
+ Fp(2)38 b Fo(S)6 b(C)i(C)g(Gr)t(aph)358 b Fr(\()p Fn(se)-7
+ b(e)51 b(text)p Fr(\))255 4357 y Fp(8)45 b Fr(kno)l(wn)g(callees)f
+ Fo(F)1293 4374 y Fe(C)1435 4357 y Fr(at)g Fo(C)188 b
+ Fr(\()p Fn(Note:)63 b Fo(F)2402 4374 y Fe(C)2537 4357
+ y Fp(2)38 b Fo(S)6 b Fr(\))394 4490 y(Resolv)l(eArgumen)l
+ (ts\(SCCGraph,)46 b Fo(F)2312 4507 y Fe(C)2409 4490 y
+ Fr(,)e Fo(C)8 b(S)e Fr(\))-303 4660 y(\(5\))248 b(MarkCompleteNo)t
+ (des\(\))45 b(-)f(Section)h(3.2)-303 4793 y(\(6\))248
+ b Fn(r)-7 b(emove)51 b(unr)-7 b(e)g(achable)51 b(no)-7
+ b(des)-303 4963 y Fr(\(7\))248 b(if)45 b(\(SCCGraph)g(con)l(tains)g
+ (new)g(resolv)-7 b(able)44 b(call)g(sites\))255 5096
+ y Fp(8)h Fo(F)56 b Fp(2)38 b Fo(S)6 b Fr(:)103 b Fo(V)29
+ b(al)q Fr([)p Fo(F)18 b Fr(])37 b(=)h(0)268 b(\()p Fn(mark)50
+ b(unvisite)-7 b(d)p Fr(\))255 5229 y(T)c(arjanVisitNo)t(de\()p
+ Fo(F)1352 5246 y Ff(0)1416 5229 y Fr(,)45 b(Stk\),)f(for)h(some)f
+ Fo(F)2447 5246 y Ff(0)2550 5229 y Fp(2)39 b Fo(S)140
+ b Fr(\()p Fn(R)-7 b(e-visit)50 b(SCC)p Fr(\))417 5556
+ y Fw(Figure)h(8:)68 b Fm(Bottom-Up)46 b(Closure)g(Algorithm)p
+ -303 5639 V -258 5825 a Fi(3.3.3)183 b(Recur)n(sion)47
+ b(with)e(Function)h(P)-15 b(ointer)n(s)-154 6041 y Fw(The)53
+ b(\014nal)g(case)g(to)f(consider)h(is)f(a)g(recursiv)l(e)h(program)g
+ (with)f(in-)-303 6215 y(direct)65 b(calls.)107 b(The)65
+ b(di\016cult)l(y)g(is)f(that)g(some)g(indirect)h(calls)f(ma)l(y)-303
+ 6389 y(induce)h(cycles)f(in)g(the)g(SCC,)g(but)h(these)f(call)f(edges)i
+ (will)e(not)g(b)t(e)-303 6564 y(disco)l(v)l(ered)47 b(un)l(til)g(the)h
+ (indirect)g(call)f(is)f(resolv)l(ed.)67 b(W)-13 b(e)48
+ b(mak)l(e)f(a)g(k)l(ey)-303 6738 y(observ)-9 b(ation,)57
+ b(based)g(on)g(the)f(prop)t(erties)h(describ)t(ed)h(earlier,)g(that)
+ -303 6912 y(yields)46 b(a)h(simple)f(strategy)g(to)g(handle)i(suc)l(h)f
+ (situations:)64 b(some)46 b(call)-303 7087 y(edges)f(of)g(an)g(SCC)g
+ (can)h(b)t(e)f(resolv)l(ed)g Fv(b)-8 b(efor)g(e)49 b(disc)-8
+ b(overing)48 b(that)i(they)-303 7261 y(form)i(p)-8 b(art)52
+ b(of)g(an)g(SCC)22 b Fw(.)47 b(When)i(the)f(call)f(site)g(\\closing)f
+ (the)i(cycle")-303 7435 y(is)d(disco)l(v)l(ered)i(\(sa)l(y)e(in)h(the)h
+ (con)l(text)f(of)h(a)f(function)g Fs(F)2864 7452 y Ft(0)2934
+ 7435 y Fw(\),)g(the)h(e\013ect)-303 7610 y(of)42 b(the)i(complete)f
+ (SCC)h(will)e(b)t(e)i(incorp)t(orated)f(in)l(to)g(the)g(BU)g(graph)-303
+ 7784 y(for)51 b Fs(F)30 7801 y Ft(0)150 7784 y Fw(though)h(not)f(the)g
+ (graphs)g(for)g(functions)g(handled)i(earlier.)-154 7958
+ y(Based)i(on)h(this)f(observ)-9 b(ation,)56 b(w)l(e)f(ha)l(v)l(e)g
+ (sligh)l(tly)f(adapted)i(T)-13 b(ar-)-303 8133 y(jan's)38
+ b(algorithm)g(to)g(revisit)g(partial)g(SCCs)h(as)g(they)g(are)g(disco)l
+ (v)l(ered)-303 8307 y(\(but)64 b(visiting)e(only)h(unresolv)l(ed)i
+ (call)e(sites\).)104 b(After)64 b(the)h(curren)l(t)-303
+ 8481 y(SCC)59 b(is)g(fully)g(pro)t(cessed)h(\(i.e.,)g(after)g(step)f
+ (\(5\))g(in)g(Figure)h(8\),)g(w)l(e)-303 8656 y(c)l(hec)l(k)37
+ b(whether)i(the)e(SCC)g(graph)h(con)l(tains)e(an)l(y)h(newly)h(inlined)
+ f(call)-303 8830 y(no)t(des)45 b(that)g(are)h(no)l(w)f(resolv)-9
+ b(able.)66 b(If)45 b(so,)h(w)l(e)f(reset)g(the)h Fv(V)-12
+ b(al)46 b Fw(en)l(tries)-303 9004 y(for)59 b(all)h(functions)g(in)g
+ (the)g(SCC,)g(whic)l(h)g(are)g(used)h(in)f Fv(T)-12 b(arjanVis-)-303
+ 9179 y(itNo)k(de)59 b Fw(to)g(c)l(hec)l(k)h(if)f(a)g(no)t(de)h(has)f(b)
+ t(een)i(visited.)91 b(This)59 b(causes)g(all)-303 9353
+ y(the)f(no)t(des)h(in)f(the)g Fv(curr)-8 b(ent)58 b Fw(SCC)g(to)f(b)t
+ (e)i(revisited,)h(but)e(only)g(the)-303 9528 y(new)51
+ b(call)g(sites)f(are)h(pro)t(cessed)h(\(since)f(other)g(resolv)-9
+ b(able)51 b(call)g(sites)-303 9702 y(ha)l(v)l(e)42 b(already)g(b)t(een)
+ h(resolv)l(ed,)h(and)e(will)f(not)h(b)t(e)h(included)g(in)f(steps)-303
+ 9876 y(\(1\))50 b(and)i(\(4\)\).)-154 10051 y(F)-13 b(or)66
+ b(example,)i(consider)e(the)g(recursiv)l(e)f(call)g(graph)g(sho)l(wn)g
+ (in)-303 10225 y(Figure)56 b(9\(a\),)g(where)h(the)g(call)e(from)h
+ Fs(E)64 b Fw(to)56 b Fs(C)66 b Fw(is)56 b(an)g(indirect)g(call.)-303
+ 10399 y(Assume)i(this)g(call)g(is)g(resolv)l(ed)g(in)g(function)h
+ Fs(D)t Fw(,)h(e.g.,)g(b)t(ecause)f Fs(D)-303 10574 y
+ Fw(passes)74 b Fs(C)85 b Fw(explicitly)74 b(to)h Fs(E)83
+ b Fw(as)74 b(a)h(function)g(p)t(oin)l(ter)h(argumen)l(t.)-303
+ 10748 y(Since)44 b(the)h(edge)f Fs(E)51 b Fz(!)43 b Fs(C)54
+ b Fw(is)43 b(unkno)l(wn)i(when)f(visiting)f Fs(E)9 b
+ Fw(,)44 b(T)-13 b(arjan's)-303 10922 y(algorithm)44 b(will)g(\014rst)g
+ (disco)l(v)l(er)h(the)g(SCCs)g Fz(f)g Fw(F)g Fz(g)p Fw(,)h
+ Fz(f)f Fw(E)f Fz(g)p Fw(,)i(and)g(then)-303 11097 y Fz(f)i
+ Fw(D)h Fz(g)f Fw(\(Figure)h(9\(c\)\).)66 b(No)l(w,)48
+ b(it)g(will)f(\014nd)j(a)e(new)h(call)f(no)t(de)i(in)e(the)4096
+ -137 y(graph)g(for)g Fs(D)t Fw(,)h(\014nd)g(it)e(is)h(resolv)-9
+ b(able)48 b(as)f(a)h(call)g(to)f Fs(C)11 b Fw(,)48 b(and)h(mark)f
+ Fs(D)4096 37 y Fw(as)37 b(un)l(visited)g(\(Figure)h(9\(b\)\).)63
+ b(This)37 b(causes)h(T)-13 b(arjan's)37 b(algorithm)f(to)4096
+ 211 y(visit)50 b(the)h(\\phan)l(tom")g(edge)h Fs(D)47
+ b Fz(!)42 b Fs(C)11 b Fw(,)50 b(and)i(therefore)g(to)f(disco)l(v)l(er)
+ 4096 386 y(the)f(partial)f(SCC)i Fz(f)e Fw(B,)h(D,)g(C)g
+ Fz(g)p Fw(.)67 b(After)50 b(pro)t(cessing)g(this)g(SCC,)g(no)4096
+ 560 y(new)e(call)f(no)t(des)h(are)g(disco)l(v)l(ered.)67
+ b(A)l(t)47 b(this)g(p)t(oin)l(t,)g(the)h(BU)g(graphs)4096
+ 734 y(for)h Fs(B)7 b(;)26 b(D)54 b Fw(and)c Fs(C)60 b
+ Fw(will)48 b(all)h(correctly)h(re\015ect)g(the)g(e\013ect)g(of)f(the)h
+ (call)4096 909 y(from)k Fs(E)62 b Fw(to)53 b Fs(C)11
+ b Fw(,)54 b(but)g(the)h(graph)f(for)g Fs(E)62 b Fw(will)53
+ b(not)6963 845 y Ft(6)7032 909 y Fw(.)76 b(The)54 b(top-do)l(wn)4096
+ 1083 y(pass)46 b(will)f(resolv)l(e)h(the)h(call)f(from)g
+ Fs(E)55 b Fw(to)46 b Fs(C)57 b Fw(\(within)46 b Fs(E)9
+ b Fw(\))46 b(b)l(y)g(inlining)4096 1257 y(the)51 b(graph)h(for)f
+ Fs(D)k Fw(in)l(to)c Fs(E)9 b Fw(.)4245 1432 y(Note)66
+ b(that)g(ev)l(en)g(in)g(this)f(case,)k(the)d(algorithm)f(only)h(resolv)
+ l(es)4096 1606 y(eac)l(h)f(callee)f(at)g(eac)l(h)h(call)f(site)f(once:)
+ 95 b(no)65 b(iteration)e(is)h(required,)4096 1780 y(ev)l(en)52
+ b(for)f(SCCs)g(induced)i(b)l(y)e(indirect)g(calls.)4245
+ 1955 y(The)43 b(graph)g(of)f(Figure)g(10)g(sho)l(ws)f(the)i(BU)f(graph)
+ g(calculated)h(for)4096 2129 y(the)61 b Fy(main)h Fw(function)f(of)g
+ (our)g(example.)96 b(This)61 b(graph)g(has)f(disjoin)l(t)4096
+ 2304 y(subgraphs)54 b(for)f(the)h(lists)d(p)t(oin)l(ted)j(to)f(b)l(y)h
+ Fs(X)65 b Fw(and)54 b Fs(Y)34 b Fw(.)75 b(These)54 b(w)l(ere)4096
+ 2478 y(pro)l(v)l(ed)i(disjoin)l(t)f(b)t(ecause)i(w)l(e)e(cloned)i(and)f
+ (then)g(inlined)h(the)f(BU)4096 2652 y(graph)64 b(for)f(eac)l(h)i(call)
+ e(to)g Fy(addGToList\(\))p Fw(.)111 b(This)63 b(sho)l(ws)g(ho)l(w)g
+ (the)4096 2827 y(com)l(bination)51 b(of)h(con)l(text)g(sensitivit)l(y)e
+ (with)i(cloning)g(can)g(iden)l(tify)4096 3001 y(disjoin)l(t)c(data)i
+ (structures,)g(ev)l(en)g(when)h(complex)f(p)t(oin)l(ter)g(manip-)4096
+ 3175 y(ulation)g(is)h(in)l(v)l(olv)l(ed.)p 5145 3296
+ 1903 7 v 5145 4248 7 953 v 5196 4203 a @beginspecial
+ 35 @llx 35 @lly 346 @urx 184 @ury 1080 @rwi @setspecial
+ %%BeginDocument: Figures/bu.main.ps
+ %!PS-Adobe-2.0
+ %%Creator: dot version 1.9 (Thu Feb 13 13:41:01 CST 2003)
+ %%For: (vadve) Vikram Adve
+ %%Title: DataStructures
+ %%Pages: (atend)
+ %%BoundingBox: 35 35 346 184
+ %%EndComments
+ save
+ %%BeginProlog
+ /DotDict 200 dict def
+ DotDict begin
+ 
+ /setupLatin1 {
+ mark
+ /EncodingVector 256 array def
+  EncodingVector 0
+ 
+ ISOLatin1Encoding 0 255 getinterval putinterval
+ 
+ EncodingVector
+   dup 306 /AE
+   dup 301 /Aacute
+   dup 302 /Acircumflex
+   dup 304 /Adieresis
+   dup 300 /Agrave
+   dup 305 /Aring
+   dup 303 /Atilde
+   dup 307 /Ccedilla
+   dup 311 /Eacute
+   dup 312 /Ecircumflex
+   dup 313 /Edieresis
+   dup 310 /Egrave
+   dup 315 /Iacute
+   dup 316 /Icircumflex
+   dup 317 /Idieresis
+   dup 314 /Igrave
+   dup 334 /Udieresis
+   dup 335 /Yacute
+   dup 376 /thorn
+   dup 337 /germandbls
+   dup 341 /aacute
+   dup 342 /acircumflex
+   dup 344 /adieresis
+   dup 346 /ae
+   dup 340 /agrave
+   dup 345 /aring
+   dup 347 /ccedilla
+   dup 351 /eacute
+   dup 352 /ecircumflex
+   dup 353 /edieresis
+   dup 350 /egrave
+   dup 355 /iacute
+   dup 356 /icircumflex
+   dup 357 /idieresis
+   dup 354 /igrave
+   dup 360 /dcroat
+   dup 361 /ntilde
+   dup 363 /oacute
+   dup 364 /ocircumflex
+   dup 366 /odieresis
+   dup 362 /ograve
+   dup 365 /otilde
+   dup 370 /oslash
+   dup 372 /uacute
+   dup 373 /ucircumflex
+   dup 374 /udieresis
+   dup 371 /ugrave
+   dup 375 /yacute
+   dup 377 /ydieresis  
+ 
+ % Set up ISO Latin 1 character encoding
+ /starnetISO {
+         dup dup findfont dup length dict begin
+         { 1 index /FID ne { def }{ pop pop } ifelse
+         } forall
+         /Encoding EncodingVector def
+         currentdict end definefont
+ } def
+ /Times-Roman starnetISO def
+ /Times-Italic starnetISO def
+ /Times-Bold starnetISO def
+ /Times-BoldItalic starnetISO def
+ /Helvetica starnetISO def
+ /Helvetica-Oblique starnetISO def
+ /Helvetica-Bold starnetISO def
+ /Helvetica-BoldOblique starnetISO def
+ /Courier starnetISO def
+ /Courier-Oblique starnetISO def
+ /Courier-Bold starnetISO def
+ /Courier-BoldOblique starnetISO def
+ cleartomark
+ } bind def
+ 
+ %%BeginResource: procset
+ /coord-font-family /Times-Roman def
+ /default-font-family /Times-Roman def
+ /coordfont coord-font-family findfont 8 scalefont def
+ 
+ /InvScaleFactor 1.0 def
+ /set_scale {
+ 	dup 1 exch div /InvScaleFactor exch def
+ 	dup scale
+ } bind def
+ 
+ % styles
+ /solid { [] 0 setdash } bind def
+ /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+ /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+ /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+ /bold { 2 setlinewidth } bind def
+ /filled { } bind def
+ /unfilled { } bind def
+ /rounded { } bind def
+ /diagonals { } bind def
+ 
+ % hooks for setting color 
+ /nodecolor { sethsbcolor } bind def
+ /edgecolor { sethsbcolor } bind def
+ /graphcolor { sethsbcolor } bind def
+ /nopcolor {pop pop pop} bind def
+ 
+ /beginpage {	% i j npages
+ 	/npages exch def
+ 	/j exch def
+ 	/i exch def
+ 	/str 10 string def
+ 	npages 1 gt {
+ 		gsave
+ 			coordfont setfont
+ 			0 0 moveto
+ 			(\() show i str cvs show (,) show j str cvs show (\)) show
+ 		grestore
+ 	} if
+ } bind def
+ 
+ /set_font {
+ 	findfont exch
+ 	scalefont setfont
+ } def
+ 
+ % draw aligned label in bounding box aligned to current point
+ /alignedtext {			% width adj text
+ 	/text exch def
+ 	/adj exch def
+ 	/width exch def
+ 	gsave
+ 		width 0 gt {
+ 			text stringwidth pop adj mul 0 rmoveto
+ 		} if
+ 		[] 0 setdash
+ 		text show
+ 	grestore
+ } def
+ 
+ /boxprim {				% xcorner ycorner xsize ysize
+ 		4 2 roll
+ 		moveto
+ 		2 copy
+ 		exch 0 rlineto
+ 		0 exch rlineto
+ 		pop neg 0 rlineto
+ 		closepath
+ } bind def
+ 
+ /ellipse_path {
+ 	/ry exch def
+ 	/rx exch def
+ 	/y exch def
+ 	/x exch def
+ 	matrix currentmatrix
+ 	newpath
+ 	x y translate
+ 	rx ry scale
+ 	0 0 1 0 360 arc
+ 	setmatrix
+ } bind def
+ 
+ /endpage { showpage } bind def
+ /showpage { } def
+ 
+ /layercolorseq
+ 	[	% layer color sequence - darkest to lightest
+ 		[0 0 0]
+ 		[.2 .8 .8]
+ 		[.4 .8 .8]
+ 		[.6 .8 .8]
+ 		[.8 .8 .8]
+ 	]
+ def
+ 
+ /layerlen layercolorseq length def
+ 
+ /setlayer {/maxlayer exch def /curlayer exch def
+ 	layercolorseq curlayer 1 sub layerlen mod get
+ 	aload pop sethsbcolor
+ 	/nodecolor {nopcolor} def
+ 	/edgecolor {nopcolor} def
+ 	/graphcolor {nopcolor} def
+ } bind def
+ 
+ /onlayer { curlayer ne {invis} if } def
+ 
+ /onlayers {
+ 	/myupper exch def
+ 	/mylower exch def
+ 	curlayer mylower lt
+ 	curlayer myupper gt
+ 	or
+ 	{invis} if
+ } def
+ 
+ /curlayer 0 def
+ 
+ %%EndResource
+ %%EndProlog
+ %%BeginSetup
+ 14 default-font-family set_font
+ 1 setmiterlimit
+ % /arrowlength 10 def
+ % /arrowwidth 5 def
+ 
+ % make sure pdfmark is harmless for PS-interpreters other than Distiller
+ /pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+ % make '<<' and '>>' safe on PS Level 1 devices
+ /languagelevel where {pop languagelevel}{1} ifelse
+ 2 lt {
+     userdict (<<) cvn ([) cvn load put
+     userdict (>>) cvn ([) cvn load put
+ } if
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%PageBoundingBox: 36 36 346 184
+ %%PageOrientation: Portrait
+ gsave
+ 35 35 311 149 boxprim clip newpath
+ 36 36 translate
+ 0 0 1 beginpage
+ 0 0 translate 0 rotate
+ 0.000 0.000 0.000 graphcolor
+ 14.00 /Times-Roman set_font
+ 
+ %	Node0x840ff80
+ gsave 10 dict begin
+ newpath 11 27 moveto
+ 79 27 lineto
+ stroke
+ newpath 79 27 moveto
+ 86 27 92 32 92 38 curveto
+ stroke
+ newpath 92 38 moveto
+ 92 54 lineto
+ stroke
+ newpath 92 54 moveto
+ 92 60 86 67 80 67 curveto
+ stroke
+ newpath 80 67 moveto
+ 12 67 lineto
+ stroke
+ newpath 12 67 moveto
+ 5 67 0 61 0 55 curveto
+ stroke
+ newpath 0 55 moveto
+ 0 39 lineto
+ stroke
+ newpath 0 39 moveto
+ 0 33 5 27 11 27 curveto
+ stroke
+ gsave 10 dict begin
+ 46 52 moveto 78 -0.5 (list: HMRC) alignedtext
+ end grestore
+ newpath 0 47 moveto
+ 92 47 lineto
+ stroke
+ gsave 10 dict begin
+ 24 32 moveto 25 -0.5 (list*) alignedtext
+ end grestore
+ newpath 49 27 moveto
+ 49 47 lineto
+ stroke
+ gsave 10 dict begin
+ 70 32 moveto 18 -0.5 (int) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x840ff80 -> Node0x840ff80
+ newpath 40 27 moveto
+ 59 15 92 0 110 18 curveto
+ 128 36 128 57 110 76 curveto
+ 100 86 86 81 74 73 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 75 71 moveto
+ 66 67 lineto
+ 73 75 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x8410028
+ gsave 10 dict begin
+ newpath 139 27 moveto
+ 207 27 lineto
+ stroke
+ newpath 207 27 moveto
+ 214 27 220 32 220 38 curveto
+ stroke
+ newpath 220 38 moveto
+ 220 54 lineto
+ stroke
+ newpath 220 54 moveto
+ 220 60 214 67 208 67 curveto
+ stroke
+ newpath 208 67 moveto
+ 140 67 lineto
+ stroke
+ newpath 140 67 moveto
+ 133 67 128 61 128 55 curveto
+ stroke
+ newpath 128 55 moveto
+ 128 39 lineto
+ stroke
+ newpath 128 39 moveto
+ 128 33 133 27 139 27 curveto
+ stroke
+ gsave 10 dict begin
+ 174 52 moveto 78 -0.5 (list: HMRC) alignedtext
+ end grestore
+ newpath 128 47 moveto
+ 220 47 lineto
+ stroke
+ gsave 10 dict begin
+ 152 32 moveto 25 -0.5 (list*) alignedtext
+ end grestore
+ newpath 177 27 moveto
+ 177 47 lineto
+ stroke
+ gsave 10 dict begin
+ 198 32 moveto 18 -0.5 (int) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x8410028 -> Node0x8410028
+ newpath 167 27 moveto
+ 186 15 219 0 238 18 curveto
+ 256 36 256 57 238 76 curveto
+ 228 86 214 81 202 73 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.000 edgecolor
+ newpath 203 71 moveto
+ 194 67 lineto
+ 201 75 lineto
+ closepath
+ fill
+ 0.000 0.000 0.000 edgecolor
+ end grestore
+ 
+ %	Node0x840aa50
+ gsave 10 dict begin
+ 46 121 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 46 116 moveto 12 -0.5 (X) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x840aa50 -> Node0x840ff80
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 46 98 moveto
+ 46 91 46 84 46 76 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 49 98 moveto
+ 44 98 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 49 77 moveto
+ 46 67 lineto
+ 44 77 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x840aa98
+ gsave 10 dict begin
+ 174 121 27 18 ellipse_path
+ stroke
+ gsave 10 dict begin
+ 174 116 moveto 12 -0.5 (Y) alignedtext
+ end grestore
+ end grestore
+ 
+ %	Node0x840aa98 -> Node0x8410028
+ gsave 10 dict begin
+ 0.000 0.000 0.631 edgecolor
+ newpath 174 98 moveto
+ 174 91 174 84 174 76 curveto
+ stroke
+ gsave 10 dict begin
+ solid
+ newpath 177 98 moveto
+ 172 98 lineto
+ stroke
+ end grestore
+ gsave 10 dict begin
+ solid
+ 0.000 0.000 0.631 edgecolor
+ newpath 177 77 moveto
+ 174 67 lineto
+ 172 77 lineto
+ closepath
+ fill
+ 0.000 0.000 0.631 edgecolor
+ end grestore
+ end grestore
+ 
+ %	Node0x840f090
+ gsave 10 dict begin
+ newpath 231 103 moveto
+ 298 103 lineto
+ stroke
+ newpath 298 103 moveto
+ 304 103 310 108 310 114 curveto
+ stroke
+ newpath 310 114 moveto
+ 310 127 lineto
+ stroke
+ newpath 310 127 moveto
+ 310 133 303 139 297 139 curveto
+ stroke
+ newpath 297 139 moveto
+ 230 139 lineto
+ stroke
+ newpath 230 139 moveto
+ 224 139 219 133 219 127 curveto
+ stroke
+ newpath 219 127 moveto
+ 219 114 lineto
+ stroke
+ newpath 219 114 moveto
+ 219 108 225 103 231 103 curveto
+ stroke
+ gsave 10 dict begin
+ 264 124 moveto 77 -0.5 (int: GMRC) alignedtext
+ 264 108 moveto 45 -0.5 (Global) alignedtext
+ end grestore
+ end grestore
+ endpage
+ grestore
+ %%PageTrailer
+ %%EndPage: 1
+ %%Trailer
+ %%Pages: 1
+ end
+ restore
+ %%EOF
+ 
+ %%EndDocument
+  @endspecial 7041 4248 V 5145 4255 1903 7 v 4861 4378
+ a(Figure)g(10:)68 b Fm(Finished)48 b(BU)f(graph)g(for)f
+ Fj(main)4096 4759 y Fx(3.4)198 b(T)-18 b(op\255Do)n(wn)48
+ b(Analysis)h(Phase)4245 4975 y Fw(The)62 b(T)-13 b(op-Do)l(wn)62
+ b(construction)f(phase)h(is)f(v)l(ery)h(similar)d(to)i(the)4096
+ 5150 y(Bottom-Up)55 b(construction)g(phase.)81 b(The)56
+ b(BU)f(phase)h(has)f(already)4096 5324 y(iden)l(ti\014ed)k(the)g(call)f
+ (graph,)i(so)e(the)g(TD)h(phase)g(can)f(tra)l(v)l(erse)g(the)4096
+ 5498 y(SCCs)53 b(of)g(the)h(call)f(graph)g(directly)h(using)f(T)-13
+ b(arjan's)52 b(algorithm;)h(it)4096 5673 y(do)t(es)38
+ b(not)g(need)h(to)f(\\re-visit")e(SCCs)i(as)f(the)i(BU)f(phase)g(do)t
+ (es.)64 b(Note)4096 5847 y(that)48 b(some)g(SCCs)h(ma)l(y)f(ha)l(v)l(e)
+ h(b)t(een)h(visited)e(only)g(partially)g(in)g(the)4096
+ 6021 y(BU)k(phase,)g(so)g(the)g(TD)g(phase)h(is)e(resp)t(onsible)i(for)
+ e(merging)i(their)4096 6196 y(graphs.)4245 6370 y(Ov)l(erall,)k(the)f
+ (TD)g(phase)g(di\013ers)f(from)g(the)h(BU)g(phase)g(in)g(only)4096
+ 6544 y(4)67 b(w)l(a)l(ys:)100 b(First,)71 b(the)d(TD)g(phase)g(nev)l
+ (er)h(marks)e(an)h(SCC)g(as)f(un-)4096 6719 y(visited)52
+ b(as)g(explained)h(ab)t(o)l(v)l(e:)71 b(it)52 b(uses)g(the)h(call)f
+ (edges)h(disco)l(v)l(ered)4096 6893 y(and)47 b(recorded)h(b)l(y)e(the)h
+ (BU)f(phase.)67 b(Second,)48 b(the)f(TD)g(phase)f(visits)4096
+ 7067 y(SCCs)i(of)h(the)g(call)f(graph)h(computed)h(b)l(y)f(the)g
+ (Bottom-Up)f(tra)l(v)l(er-)4096 7242 y(sal)74 b(in)h(rev)l(erse)g(p)t
+ (ostorder)h(instead)e(of)h(p)t(ostorder.)139 b(Third,)81
+ b(the)4096 7416 y(T)-13 b(op-Do)l(wn)73 b(pass)f(inlines)g(eac)l(h)i
+ (function's)e(graph)h(in)l(to)f(eac)l(h)h(of)4096 7590
+ y(its)53 b(callees)g(\(rather)h(than)g(the)g(rev)l(erse\),)g(and)h(it)e
+ (inlines)g(a)h(caller's)4096 7765 y(graph)63 b(in)l(to)f(all)g(it's)g
+ (p)t(oten)l(tial)g(callees)h(directly)g(\(it)f(nev)l(er)i(needs)4096
+ 7939 y(to)53 b(\\defer")i(this)e(inlining)g(op)t(eration)h(since)g(the)
+ g(p)t(oten)l(tial)f(callees)4096 8113 y(at)48 b(eac)l(h)h(call)f(site)g
+ (are)h(kno)l(wn\).)67 b(The)50 b(\014nal)e(di\013erence)i(is)e(that)h
+ (for-)4096 8288 y(mal)56 b(argumen)l(t)h(no)t(des)g(are)g(mark)l(ed)g
+ (complete)g(if)g(all)e(callers)h(of)h(a)4096 8462 y(function)d(ha)l(v)l
+ (e)f(b)t(een)i(iden)l(ti\014ed)g(b)l(y)e(the)h(analysis,)f(i.e.,)g(the)
+ h(func-)4096 8637 y(tion)65 b(is)f(not)h(accessible)g(to)g(an)l(y)g
+ (external)g(functions.)110 b(Similarly)-13 b(,)4096 8811
+ y(global)66 b(v)-9 b(ariables)66 b(ma)l(y)g(b)t(e)i(mark)l(ed)e
+ (complete,)71 b(unless)66 b(they)h(are)4096 8985 y(accessible)51
+ b(to)g(external)g(functions.)4096 9311 y Fx(3.5)198 b(The)50
+ b(Globals)f(Graph)4245 9527 y Fw(In)82 b(the)e(algorithm)g(so)g(far,)87
+ b(global)79 b(v)-9 b(ariables)81 b(accessed)g(an)l(y-)4096
+ 9701 y(where)55 b(in)f(the)h(program)f(w)l(ould)g(propagate)h(b)t
+ (ottom-up)f(to)g Fy(main)p Fw(,)4096 9876 y(then)65 b(top-do)l(wn)g(to)
+ g(all)f(functions)g(in)h(the)g(program,)j(ballo)t(oning)4096
+ 10050 y(graph)45 b(size)f(b)l(y)h(a)g Fs(O)t Fw(\()p
+ Fs(N)5458 9986 y Ft(2)5527 10050 y Fw(\))f(factor.)65
+ b(A)45 b(k)l(ey)g(optimization)e(w)l(e)i(add)g(to)4096
+ 10224 y(the)59 b(Data)e(Structure)j(Analysis)d(algorithm)g(is)g(to)h
+ (use)h(a)f(separate)4096 10399 y(\\Globals)75 b(Graph")h(to)g(hold)h
+ (information)f(ab)t(out)g(global)g(no)t(des)p 4096 10527
+ 1601 7 v 4104 10635 a Ft(6)4173 10698 y Fr(Nor)62 b(should)g(it.)110
+ b(A)62 b(di\013eren)l(t)g(caller)g(of)g Fo(E)69 b Fr(ma)l(y)62
+ b(cause)h(the)f(edge)h(to)f(b)t(e)4096 10831 y(resolv)l(ed)57
+ b(to)h(a)f(di\013eren)l(t)h(function,)j(th)l(us)d(the)g(BU)g(graph)g
+ (for)g Fo(E)64 b Fr(do)t(es)57 b(not)4096 10964 y(include)40
+ b(information)h(ab)t(out)g(a)f(call)g(edge)g(whic)l(h)h(is)f(not)g
+ (necessarily)f(presen)l(t)4096 11097 y(in)45 b(all)f(calling)g(con)l
+ (texts.)p eop end
+ %%Page: 8 8
+ TeXDict begin 8 7 bop 1669 665 a @beginspecial 0 @llx
+ 0 @lly 241 @urx 529 @ury 360 @rwi @setspecial
+ %%BeginDocument: Figures/scc1.eps
+ %!PS-Adobe-2.0 EPSF-2.0
+ %%Title: test.dia
+ %%Creator: Dia v0.90
+ %%CreationDate: Sun Feb 16 03:45:30 2003
+ %%For: lattner
+ %%Magnification: 1.0000
+ %%Orientation: Portrait
+ %%BoundingBox: 0 0 241 529
+ %%Pages: 1
+ %%EndComments
+ %%BeginProlog
+ /cp {closepath} bind def
+ /c {curveto} bind def
+ /f {fill} bind def
+ /a {arc} bind def
+ /ef {eofill} bind def
+ /ex {exch} bind def
+ /gr {grestore} bind def
+ /gs {gsave} bind def
+ /sa {save} bind def
+ /rs {restore} bind def
+ /l {lineto} bind def
+ /m {moveto} bind def
+ /rm {rmoveto} bind def
+ /n {newpath} bind def
+ /s {stroke} bind def
+ /sh {show} bind def
+ /slc {setlinecap} bind def
+ /slj {setlinejoin} bind def
+ /slw {setlinewidth} bind def
+ /srgb {setrgbcolor} bind def
+ /rot {rotate} bind def
+ /sc {scale} bind def
+ /sd {setdash} bind def
+ /ff {findfont} bind def
+ /sf {setfont} bind def
+ /scf {scalefont} bind def
+ /sw {stringwidth pop} bind def
+ /tr {translate} bind def
+ 
+ /ellipsedict 8 dict def
+ ellipsedict /mtrx matrix put
+ /ellipse
+ { ellipsedict begin
+    /endangle exch def
+    /startangle exch def
+    /yrad exch def
+    /xrad exch def
+    /y exch def
+    /x exch def   /savematrix mtrx currentmatrix def
+    x y tr xrad yrad sc
+    0 0 1 startangle endangle arc
+    savematrix setmatrix
+    end
+ } def
+ 
+ /mergeprocs {
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+ %%EndProlog
+ 
+ %%BeginSetup
+ %%EndSetup
+ 28.346000 -28.346000 scale
+ -3.566753 -19.600000 translate
+ 
+ 1.000000 1.000000 1.000000 srgb
+ n 8.500000 2.275000 1.500000 1.275000 0 360 ellipse f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0.000000 0.000000 0.000000 srgb
+ n 8.500000 2.275000 1.500000 1.275000 0 360 ellipse cp s
+ 1.000000 1.000000 1.000000 srgb
+ n 8.500000 6.275000 1.500000 1.275000 0 360 ellipse f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0.000000 0.000000 0.000000 srgb
+ n 8.500000 6.275000 1.500000 1.275000 0 360 ellipse cp s
+ 1.000000 1.000000 1.000000 srgb
+ n 6.500000 10.275000 1.500000 1.275000 0 360 ellipse f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0.000000 0.000000 0.000000 srgb
+ n 6.500000 10.275000 1.500000 1.275000 0 360 ellipse cp s
+ 1.000000 1.000000 1.000000 srgb
+ n 10.500000 10.275000 1.500000 1.275000 0 360 ellipse f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0.000000 0.000000 0.000000 srgb
+ n 10.500000 10.275000 1.500000 1.275000 0 360 ellipse cp s
+ 1.000000 1.000000 1.000000 srgb
+ n 8.500000 14.275000 1.500000 1.275000 0 360 ellipse f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0.000000 0.000000 0.000000 srgb
+ n 8.500000 14.275000 1.500000 1.275000 0 360 ellipse cp s
+ 1.000000 1.000000 1.000000 srgb
+ n 8.500000 18.275000 1.500000 1.275000 0 360 ellipse f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0.000000 0.000000 0.000000 srgb
+ n 8.500000 18.275000 1.500000 1.275000 0 360 ellipse cp s
+  [ /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /F /A /B /C /D /E /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+ ] /e0 exch def
+ /Helvetica_e0 undefinefont
+ /Helvetica_e0
+   /Helvetica findfont
+   dup length dict begin
+   {1 index /FID ne {def} {pop pop} ifelse} forall
+   /Encoding e0 def
+   currentdict end
+ definefont pop
+ /Helvetica_e0 ff 1.500000 scf sf
+ ( ) sw
+ 2 div 8.600000 ex sub 18.700000 m ( )
+  gs 1 -1 sc sh gr
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 10.500000 11.550000 m 8.500000 13.000000 l s
+ 0 slj
+ n 8.912901 12.206582 m 8.500000 13.000000 l 9.382475 12.854270 l f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 8.500000 15.550000 m 8.500000 17.000000 l s
+ 0 slj
+ n 8.100000 16.200000 m 8.500000 17.000000 l 8.900000 16.200000 l f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 8.500000 7.550000 m 10.500000 9.000000 l s
+ 0 slj
+ n 9.617525 8.854270 m 10.500000 9.000000 l 10.087099 8.206582 l f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 8.500000 3.550000 m 8.500000 5.000000 l s
+ 0 slj
+ n 8.100000 4.200000 m 8.500000 5.000000 l 8.900000 4.200000 l f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slj
+ 0 slc
+ n 5.439340 11.176561 m 2.000000 13.000000 4.000000 3.000000 7.439340 5.373439 c s
+ 0 slj
+ n 6.553713 5.248279 m 7.439340 5.373439 l 7.008091 4.589842 l f
+ 0.100000 slw
+ [0.200000] 0 sd
+ [0.240000] 0 sd
+ 0 slj
+ 0 slc
+ n 7.439340 15.176561 m 3.000000 18.000000 2.439340 7.098439 5.439340 9.373439 c s
+ 0 slj
+ n 4.560202 9.208767 m 5.439340 9.373439 l 5.043595 8.571325 l f
+ /Helvetica_e0 ff 1.500000 scf sf
+ (!) sw
+ 2 div 8.546000 ex sub 2.665044 m (!)
+  gs 1 -1 sc sh gr
+ /Helvetica_e0 ff 1.500000 scf sf
+ (") sw
+ 2 div 8.496000 ex sub 6.765044 m (")
+  gs 1 -1 sc sh gr
+ /Helvetica_e0 ff 1.500000 scf sf
+ (#) sw
+ 2 div 6.546000 ex sub 10.715044 m (#)
+  gs 1 -1 sc sh gr
+ /Helvetica_e0 ff 1.500000 scf sf
+ ($) sw
+ 2 div 10.596000 ex sub 10.715044 m ($)
+  gs 1 -1 sc sh gr
+ /Helvetica_e0 ff 1.500000 scf sf
+ (%) sw
+ 2 div 8.496000 ex sub 14.765044 m (%)
+  gs 1 -1 sc sh gr
+ showpage
+ 
+ %%EndDocument
+  @endspecial 1078 839 a Fw(\(a\))66 b(Recursiv)l(e)88
+ b(Call)f(Graph)1078 989 y(\(indirect)52 b(call)e(is)h(dotted\))3597
+ 665 y @beginspecial 0 @llx 0 @lly 202 @urx 393 @ury 288
+ @rwi @setspecial
+ %%BeginDocument: Figures/scc2.eps
+ %!PS-Adobe-2.0 EPSF-2.0
+ %%Title: test.dia
+ %%Creator: Dia v0.90
+ %%CreationDate: Sun Feb 16 03:49:15 2003
+ %%For: lattner
+ %%Magnification: 1.0000
+ %%Orientation: Portrait
+ %%BoundingBox: 0 0 202 393
+ %%Pages: 1
+ %%EndComments
+ %%BeginProlog
+ /cp {closepath} bind def
+ /c {curveto} bind def
+ /f {fill} bind def
+ /a {arc} bind def
+ /ef {eofill} bind def
+ /ex {exch} bind def
+ /gr {grestore} bind def
+ /gs {gsave} bind def
+ /sa {save} bind def
+ /rs {restore} bind def
+ /l {lineto} bind def
+ /m {moveto} bind def
+ /rm {rmoveto} bind def
+ /n {newpath} bind def
+ /s {stroke} bind def
+ /sh {show} bind def
+ /slc {setlinecap} bind def
+ /slj {setlinejoin} bind def
+ /slw {setlinewidth} bind def
+ /srgb {setrgbcolor} bind def
+ /rot {rotate} bind def
+ /sc {scale} bind def
+ /sd {setdash} bind def
+ /ff {findfont} bind def
+ /sf {setfont} bind def
+ /scf {scalefont} bind def
+ /sw {stringwidth pop} bind def
+ /tr {translate} bind def
+ 
+ /ellipsedict 8 dict def
+ ellipsedict /mtrx matrix put
+ /ellipse
+ { ellipsedict begin
+    /endangle exch def
+    /startangle exch def
+    /yrad exch def
+    /xrad exch def
+    /y exch def
+    /x exch def   /savematrix mtrx currentmatrix def
+    x y tr xrad yrad sc
+    0 0 1 startangle endangle arc
+    savematrix setmatrix
+    end
+ } def
+ 
+ /mergeprocs {
+ dup length
+ 3 -1 roll
+ dup
+ length
+ dup
+ 5 1 roll
+ 3 -1 roll
+ add
+ array cvx
+ dup
+ 3 -1 roll
+ 0 exch
+ putinterval
+ dup
+ 4 2 roll
+ putinterval
+ } bind def
+ %%EndProlog
+ 
+ %%BeginSetup
+ %%EndSetup
+ 28.346000 -28.346000 scale
+ -4.950000 -14.805310 translate
+ 
+ 1.000000 1.000000 1.000000 srgb
+ n 8.500000 2.275000 1.500000 1.275000 0 360 ellipse f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0.000000 0.000000 0.000000 srgb
+ n 8.500000 2.275000 1.500000 1.275000 0 360 ellipse cp s
+ 1.000000 1.000000 1.000000 srgb
+ n 8.500000 6.275000 1.500000 1.275000 0 360 ellipse f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0.000000 0.000000 0.000000 srgb
+ n 8.500000 6.275000 1.500000 1.275000 0 360 ellipse cp s
+ 1.000000 1.000000 1.000000 srgb
+ n 6.500000 10.275000 1.500000 1.275000 0 360 ellipse f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0.000000 0.000000 0.000000 srgb
+ n 6.500000 10.275000 1.500000 1.275000 0 360 ellipse cp s
+ 1.000000 1.000000 1.000000 srgb
+ n 10.500000 10.275000 1.500000 1.275000 0 360 ellipse f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0.000000 0.000000 0.000000 srgb
+ n 10.500000 10.275000 1.500000 1.275000 0 360 ellipse cp s
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 9.000000 10.275000 m 8.000000 10.275000 l s
+ 0 slj
+ n 8.800000 9.875000 m 8.000000 10.275000 l 8.800000 10.675000 l f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 9.560660 7.176561 m 10.500000 9.000000 l s
+ 0 slj
+ n 9.778047 8.472001 m 10.500000 9.000000 l 10.489227 8.105638 l f
+ 0.100000 slw
+ [] 0 sd
+ [] 0 sd
+ 0 slc
+ n 8.500000 3.550000 m 8.500000 5.000000 l s
+ 0 slj
+ n 8.100000 4.200000 m 8.500000 5.000000 l 8.900000 4.200000 l f
+  [ /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /A /B /C /D /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+  /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi /xi
+ ] /e0 exch def
+ /Helvetica_e0 undefinefont
+ /Helvetica_e0
+   /Helvetica findfont
+   dup length dict begin
+   {1 index /FID ne {def} {pop pop} ifelse} forall
+   /Encoding e0 def
+   currentdict end
+ definefont pop
+ /Helvetica_e0 ff 1.500000 scf sf
+ ( ) sw
+ 2 div 8.546000 ex sub 2.665044 m ( )
+  gs 1 -1 sc sh gr
+ /Helvetica_e0 ff 1.500000 scf sf
+ (!) sw
+ 2 div 8.496000 ex sub 6.765044 m (!)
+  gs 1 -1 sc sh gr
+ /Helvetica_e0 ff 1.500000 scf sf
+ (") sw
+ 2 div 6.546000 ex sub 10.715044 m (")
+  gs 1 -1 sc sh gr
+ /Helvetica_e0 ff 1.500000 scf sf
+ (#) sw
+ 2 div 10.596000 ex sub 10.715044 m (#)
+  gs 1 -1 sc sh gr
+ 0.100000 slw
+ [1.000000] 0 sd
+ [1.000000] 0 sd
+ 0 slc
+ n 6.500000 9.000000 m 7.439340 7.176561 l s
+ 0 slj
+ n 7.428567 8.070923 m 7.439340 7.176561 l 6.717386 7.704560 l f
+ showpage
+ 
+ %%EndDocument
+  @endspecial 3065 839 a(\(b\))72 b(Call)102 b(No)t(de)h(Edges,)3065
+ 989 y(After)52 b(inlining)e(F)i(&)g(E)4864 -207 y(1.)68
+ b Fz(f)51 b Fw(F)g Fz(g)4864 -33 y Fw(2.)68 b Fz(f)51
+ b Fw(E)f Fz(g)4864 142 y Fw(3.)68 b Fz(f)51 b Fw(D)g
+ Fz(g)p Fw(:)68 b(mark)51 b(un)l(visited)4864 316 y(4.)68
+ b Fz(f)51 b Fw(B,)f(D,)h(C)g Fz(g)4864 491 y Fw(5.)68
+ b Fz(f)51 b Fw(A)g Fz(g)4951 839 y Fw(\(c\))f(SCC)h(visitation)f(order)
+ 1498 1228 y(Figure)i(9:)68 b Fm(Handling)47 b(recursion)g(due)h(to)e
+ (an)h(indirect)h(call)f(in)g(the)g(Bottom-Up)f(phase)-303
+ 1504 y Fw(and)e(all)f(no)t(des)h(reac)l(hable)g(from)g(global)e(no)t
+ (des.)66 b(This)43 b(allo)l(ws)f(us)i(to)-303 1678 y(remo)l(v)l(e)58
+ b(global)f(v)-9 b(ariables)58 b(from)g(a)g(function's)g(graph)h(if)f
+ (they)g(are)-303 1853 y(not)c(used)h(in)f(the)h(curren)l(t)g(function)f
+ (\(ev)l(en)h(though)g(they)g(ma)l(y)e(b)t(e)-303 2027
+ y(used)44 b(in)h(callers)e(or)h(callees)g(of)g(that)g(function\).)66
+ b(F)-13 b(or)44 b(example,)i(this)-303 2201 y(eliminates)61
+ b(the)h(t)l(w)l(o)f Fy(G)i Fw(no)t(des)f(in)h(the)f(example)h(graphs.)
+ 100 b(\(Liang)-303 2376 y(and)51 b(Harrold)g([15])f(use)i(a)f(v)l(ery)g
+ (similar)f(tec)l(hnique.\))-154 2550 y(W)-13 b(e)60 b(only)g(brie\015y)
+ h(describ)t(e)g(this)e(optimization)g(here,)k(and)d(will)-303
+ 2724 y(describ)t(e)71 b(it)f(in)g(more)g(detail)g(in)g(the)g(full)g(v)l
+ (ersion)g(of)g(the)g(pap)t(er)-303 2899 y(\(if)62 b(accepted\).)104
+ b(In)63 b(the)g(BU)g(phase,)j(after)c(step)h(4,)i(w)l(e)e(cop)l(y)g
+ (and)-303 3073 y(merge)70 b(in)f(the)h(no)t(des)h(from)e(the)h(Globals)
+ e(Graph)i(for)f(for)h(ev)l(ery)-303 3247 y(global)i Fs(G)i
+ Fw(that)f(has)g(a)h(no)t(de)g(in)g(the)g(curren)l(t)g(graph,)79
+ b(plus)73 b(an)l(y)-303 3422 y(no)t(des)55 b(reac)l(hable)h(from)e(suc)
+ l(h)h(no)t(des.)80 b(After)55 b(step)g(5,)g(w)l(e)g(cop)l(y)g(all)-303
+ 3596 y(suc)l(h)d(no)t(des)g(bac)l(k)g(in)l(to)f(the)i(globals)d(graph,)
+ i(and)g(after)g(step)g(6)f(w)l(e)-303 3770 y(eliminate)65
+ b(an)l(y)h(global)f(no)t(des)h(in)g(the)g(BU)g(graph)g(that)g(are)g
+ Fv(b)-8 b(oth)-303 3945 y Fw(not)50 b(reac)l(hable)i(from)e(and)i
+ (cannot)f(reac)l(h)g(an)l(y)g(lo)t(cally)f(liv)l(e)g(no)t(des.)-303
+ 4119 y(V)-13 b(ery)70 b(similar)d(steps)i(are)g(used)g(in)g(the)h(TD)f
+ (phase,)74 b(except)c(that)-303 4293 y(information)48
+ b(from)i(the)g(TD)g(graphs)f(do)h(not)f(ha)l(v)l(e)h(to)f(propagated)
+ -303 4468 y(in)l(to)k(the)h(globals)e(graph)i(\(since)g(information)f
+ (from)h(all)e(functions)-303 4642 y(has)43 b(b)t(een)i(merged)g(in\).)
+ 65 b(In)44 b(practice,)h(w)l(e)f(ha)l(v)l(e)g(found)g(the)g(Globals)
+ -303 4816 y(graph)61 b(to)f(mak)l(e)h(a)f(remark)-9 b(able)62
+ b(di\013erence)g(in)f(running)g(time)g(for)-303 4991
+ y(global-in)l(tensiv)l(e)50 b(programs.)-303 5300 y Fx(3.6)198
+ b(Bounding)48 b(Graph)i(Size)-154 5516 y Fw(In)i(the)f(common)g(case,)f
+ (the)i(merging)e(b)t(eha)l(vior)i(of)e(the)h(uni\014ca-)-303
+ 5690 y(tion)39 b(algorithm)f(w)l(e)i(use)g(k)l(eeps)g(individual)g
+ (data)f(structure)h(graphs)-303 5864 y(v)l(ery)73 b(compact,)78
+ b(whic)l(h)73 b(o)t(ccurs)g(whenev)l(er)h(a)f(data)f(structure)h(is)
+ -303 6039 y(pro)t(cessed)60 b(b)l(y)g(a)f(lo)t(op)h(or)f(recursion.)94
+ b(Nev)l(ertheless,)61 b(the)f(com)l(bi-)-303 6213 y(nation)52
+ b(of)g(\014eld)g(sensitivit)l(y)f(and)h(cloning)h(mak)l(es)e(it)h
+ (theoretically)-303 6387 y(p)t(ossible)59 b(for)h(a)g(program)f(to)h
+ (build)g(data)g(structure)g(graphs)g(that)-303 6562 y(are)46
+ b(exp)t(onen)l(tial)h(in)g(the)g(size)f(of)g(the)h(input)g(program.)66
+ b(Suc)l(h)48 b(cases)-303 6736 y(can)59 b(only)g(o)t(ccur)h(if)f(the)g
+ (program)g(builds)g(and)h(pro)t(cesses)f(a)g(large)-303
+ 6910 y(complex)65 b(data)f(structure)h(using)g(only)f(non-lo)t(op,)k
+ (non-recursiv)l(e)-303 7085 y(co)t(de,)51 b(and)h(are)g(th)l(us)e
+ Fv(extr)-8 b(emely)51 b Fw(unlik)l(ely)g(to)g(o)t(ccur)h(in)f
+ (practice.)-154 7259 y(Using)37 b(a)g(tec)l(hnique)h(lik)l(e)e
+ Fs(k)t Fw(-limiting)g([10])g(to)h(guard)g(against)f(suc)l(h)-303
+ 7433 y(unlik)l(ely)53 b(cases)g(is)g(unattractiv)l(e)g(b)t(ecause)i(it)
+ e(could)h(reduce)i(preci-)-303 7608 y(sion)e(for)g(reasonable)h(data)f
+ (structures)h(with)g(paths)f(more)h(than)g Fs(k)-303
+ 7782 y Fw(no)t(des)f(long.)75 b(Instead,)55 b(w)l(e)f(prop)t(ose)g
+ (that)f(implemen)l(tations)g(sim-)-303 7957 y(ply)c(imp)t(ose)h(a)f
+ (hard)h(limit)e(on)i(graph)g(size)f(\(10,000)f(no)t(des,)i(for)g(ex-)
+ -303 8131 y(ample,)g(whic)l(h)h(is)f(m)l(uc)l(h)h(larger)g(than)g(an)l
+ (y)f(real)h(program)f(is)g(lik)l(ely)-303 8305 y(to)43
+ b(need\).)66 b(If)44 b(this)f(limit)f(is)h(exceeded,)k(no)t(de)e
+ (merging)e(can)h(b)t(e)h(used)-303 8480 y(to)38 b(reduce)i(the)f(size)f
+ (of)h(the)g(graph.)64 b(Our)39 b(results)f(in)h(Section)g(4)f(sho)l(w)
+ -303 8654 y(that)52 b(the)i(maxim)l(um)f(function)g(graph)h(size)e(w)l
+ (e)i(ha)l(v)l(e)f(observ)l(ed)g(in)-303 8828 y(practice)g(across)e(a)i
+ (wide)g(range)f(of)h(programs)f(is)g(only)g(167)g(no)t(des,)-303
+ 9003 y(whic)l(h)45 b(is)f(quite)i(small)d(\(w)l(e)i(exclude)i(virtual)d
+ (registers)g(since)i(those)-303 9177 y(are)51 b(not)g(propagated)h(b)t
+ (et)l(w)l(een)g(functions\).)-303 9486 y Fx(3.7)198 b(Complexity)50
+ b(Analysis)-154 9702 y Fw(The)62 b(lo)t(cal)g(phase)g(adds)g(at)f(most)
+ g(one)h(new)g(no)t(de,)k(ScalarMap)-303 9876 y(en)l(try)-13
+ b(,)59 b(and/or)f(edge)g(for)g(eac)l(h)g(instruction)f(in)g(a)h(pro)t
+ (cedure)i(\(b)t(e-)-303 10051 y(fore)83 b(no)t(de)h(merging\).)164
+ b(F)-13 b(urthermore,)93 b(no)t(de)84 b(merging)f(or)g(col-)-303
+ 10225 y(lapsing)56 b(only)i(reduces)g(the)g(n)l(um)l(b)t(er)h(of)e(no)t
+ (des)h(and)g(edges)g(in)f(the)-303 10399 y(graphs.)66
+ b(W)-13 b(e)48 b(ha)l(v)l(e)f(implemen)l(ted)h(no)t(de)g(merging)f
+ (using)g(a)g(Union-)-303 10574 y(Find)54 b(data)f(structure,)h(whic)l
+ (h)g(ensures)g(that)f(this)g(phase)h(requires)-303 10748
+ y Fs(O)t Fw(\()p Fs(n\013)p Fw(\()p Fs(n)p Fw(\)\))h(time)h(and)g
+ Fs(O)t Fw(\()p Fs(n)p Fw(\))g(space)g(for)g(a)g(program)g(con)l
+ (taining)g Fs(n)-303 10922 y Fw(instructions)50 b(in)h(all)f([20].)-154
+ 11097 y(The)d(BU)g(and)f(TD)h(phases)g(op)t(erate)g(on)f(DS)h(graphs)g
+ (directly)-13 b(,)47 b(so)4096 1504 y(their)61 b(p)t(erformance)i(dep)t
+ (ends)h(on)d(the)h(size)f(of)h(the)g(graphs)f(b)t(eing)4096
+ 1678 y(cloned)70 b(and)h(the)f(time)g(to)f(clone)h(and)g(merge)h(eac)l
+ (h)f(graph.)124 b(W)-13 b(e)4096 1853 y(denote)52 b(these)g(b)l(y)g
+ Fs(K)62 b Fw(and)52 b Fs(l)i Fw(resp)t(ectiv)l(ely)-13
+ b(,)52 b(where)g Fs(l)i Fw(is)d Fs(O)t Fw(\()p Fs(K)11
+ b(\013)p Fw(\()p Fs(K)g Fw(\)\))4096 2027 y(in)49 b(the)h(w)l(orst)e
+ (case.)67 b(They)50 b(also)e(dep)t(end)k(on)d(the)h(a)l(v)l(erage)f(n)l
+ (um)l(b)t(er)4096 2201 y(of)i(callee)g(functions)g(p)t(er)h(caller)f
+ (\(not)g(call)g(site\),)f(denoted)i Fs(c)p Fw(.)4245
+ 2376 y(F)-13 b(or)39 b(the)g(BU)f(phase,)j(eac)l(h)e(function)g(m)l
+ (ust)f(inline)h(the)f(graphs)h(for)4096 2550 y Fs(c)54
+ b Fw(callee)g(functions,)g(on)g(a)l(v)l(erage.)75 b(Because)54
+ b(eac)l(h)g(inlining)f(op)t(era-)4096 2724 y(tion)39
+ b(requires)h Fs(l)i Fw(time,)f(this)e(requires)h Fs(f)16
+ b(cl)42 b Fw(time)d(if)g(there)i(are)e Fs(f)56 b Fw(func-)4096
+ 2899 y(tions)g(in)i(the)g(program.)86 b(The)58 b(call)f(sites)f(within)
+ h(an)h(SCC)f(do)h(not)4096 3073 y(in)l(tro)t(duce)49
+ b(additional)f(complexit)l(y)-13 b(,)48 b(since)h(ev)l(ery)g(p)t(oten)l
+ (tial)f(callee)4096 3247 y(is)41 b(again)h(inlined)h(only)f(once)h(in)l
+ (to)e(its)g(caller)h(within)g(or)g(outside)g(the)4096
+ 3422 y(SCC)55 b(\(in)f(fact,)h(these)g(are)g(sligh)l(tly)e(faster)h(b)t
+ (ecause)i(only)f(a)f(single)4096 3596 y(graph)48 b(is)f(built,)h
+ (causing)g(common)g(no)t(des)g(to)g(b)t(e)h(merged\).)67
+ b(Th)l(us,)4096 3770 y(the)i(time)g(to)g(compute)h(the)f(BU)g(graph)h
+ (is)e(\002\()p Fs(f)16 b(cl)r Fw(\).)123 b(The)69 b(space)4096
+ 3945 y(required)49 b(to)e(represen)l(t)h(the)g(Bottom-Up)f(graphs)h(is)
+ f(\002\()p Fs(f)16 b(K)11 b Fw(\).)66 b(The)4096 4119
+ y(TD)51 b(phase)h(is)e(iden)l(tical)h(in)g(complexit)l(y)g(to)g(the)g
+ (BU)g(phase.)4096 4562 y Fx(4.)199 b(EXPERIMENT)-18 b(AL)48
+ b(RESUL)-18 b(TS)4245 4778 y Fw(W)-13 b(e)48 b(ha)l(v)l(e)g(implemen)l
+ (ted)g(the)g(complete)g(Data)f(Structure)h(Anal-)4096
+ 4952 y(ysis)55 b(algorithm)g(in)h(the)h(LL)-17 b(VM)56
+ b(Compiler)g(Infrastructure,)i(using)4096 5126 y(a)43
+ b(C)h(fron)l(t-end)g(based)g(on)g(GCC)f([13].)64 b(The)44
+ b(analysis)e(is)h(p)t(erformed)4096 5301 y(en)l(tirely)38
+ b(at)f(link-time,)j(using)d(stubs)h(for)f(standard)h(C)g(library)g
+ (func-)4096 5475 y(tions)50 b(to)h(re\015ect)h(their)f(b)t(eha)l(vior)h
+ (\(as)e(in)i(other)f(w)l(ork)g([2]\).)4245 5649 y(W)-13
+ b(e)60 b(ev)-9 b(aluated)60 b(Data)f(Structure)h(Analysis)f(on)g(sev)l
+ (eral)g(b)t(enc)l(h-)4096 5824 y(mark)36 b(suites:)60
+ b(the)37 b(Olden)g(b)t(enc)l(hmarks,)j(the)d(\\ptrdist")e(1.1)h(b)t
+ (enc)l(h-)4096 5998 y(marks,)41 b(and)f(SPEC)f(2000)g(in)l(teger)h(and)
+ g(\015oating)f(p)t(oin)l(t)h(\(C\))f(b)t(enc)l(h-)4096
+ 6173 y(marks)4503 6109 y Ft(7)4623 6173 y Fw(and)52 b(a)f(set)g(of)g
+ (other,)h(un)l(bundled,)h(programs.)68 b(Note)51 b(that)4096
+ 6347 y Fy(povray31)46 b Fw(includes)e(sources)f(for)g(the)g
+ Fy(zlib)i Fw(and)e Fy(libpng)j Fw(libraries.)4245 6521
+ y(T)-13 b(able)61 b(1)e(describ)t(es)i(relev)-9 b(an)l(t)60
+ b(prop)t(erties)h(of)f(the)g(b)t(enc)l(hmarks.)4096 6696
+ y(\\LOC")47 b(is)g(the)h(ra)l(w)f(n)l(um)l(b)t(er)h(of)g(lines)f(of)g
+ (C)g(co)t(de)i(for)e(eac)l(h)h(b)t(enc)l(h-)4096 6870
+ y(mark,)59 b(\\MInsts")e(is)g(the)i(n)l(um)l(b)t(er)g(of)e(memory)i
+ (instructions)7787 6806 y Ft(8)7913 6870 y Fw(for)4096
+ 7044 y(eac)l(h)39 b(program)f(in)h(the)g(LL)-17 b(VM)38
+ b(represen)l(tation,)j(and)e(\\SCC")f(is)g(the)4096 7219
+ y(size)51 b(of)g(the)g(largest)g(SCC)g(in)g(the)h(call-graph)f(for)g
+ (the)g(program.)4245 7393 y(W)-13 b(e)37 b(ev)-9 b(aluated)38
+ b(the)f(time)g(and)g(space)g(usage)f(of)h(our)g(analysis)e(on)i(a)4096
+ 7567 y(Lin)l(ux)h(w)l(orkstation)e(with)i(a)f(3.06GHz)g(Xeon)i(pro)t
+ (cessor.)63 b(W)-13 b(e)38 b(com-)4096 7742 y(piled)52
+ b(LL)-17 b(VM)51 b(with)g(GCC)f(3.2)h(at)g(the)g Fy(-O3)i
+ Fw(lev)l(el)e(of)g(optimization.)4096 7916 y(T)-13 b(able)59
+ b(1)f(sho)l(ws)f(the)i(running)h(times)e(and)h(memory)f(usage)h(of)f
+ (DS)4096 8090 y(Analysis.)92 b(The)61 b(columns)f(lab)t(elled)g(\\Lo)t
+ (cal",)h(\\BU",)e(and)h(\\TD")4096 8265 y(sho)l(w)50
+ b(the)i(time)f(sp)t(en)l(t)g(in)h(the)f(three)h(phases)f(of)g(the)h
+ (analysis.)4245 8439 y(The)85 b(three)g(largest)e(programs)g(in)h(our)g
+ (study)-13 b(,)92 b Fy(255.vortex)p Fw(,)4096 8613 y
+ Fy(254.gap)42 b Fw(and)d Fy(povray31)j Fw(are)d(b)t(oth)g(fairly)f
+ (large)h(and)g(con)l(tain)f(non-)4096 8788 y(trivial)62
+ b(SCCs)i(in)g(the)g(call)g(graph.)106 b(Nev)l(ertheless,)67
+ b(it)d(tak)l(es)f(only)4096 8962 y(b)t(et)l(w)l(een)44
+ b(2.3)e(and)h(7.9)f(seconds)h(to)g(p)t(erform)h(all)e(three)h(steps)g
+ (of)f(the)4096 9136 y(algorithm)i(on)h(these)h(programs.)65
+ b(T)-13 b(o)45 b(put)h(this)e(in)h(p)t(ersp)t(ectiv)l(e,)j(w)l(e)4096
+ 9311 y(compared)69 b(them)g(to)f(the)h(total)e(time)i(to)f(compile)g
+ (and)h(link)f(the)4096 9485 y(b)t(enc)l(hmarks)53 b(with)f(GCC)f(3.2)h
+ (at)f(the)i Fy(-O3)g Fw(lev)l(el)f(of)g(optimization,)4096
+ 9659 y(on)40 b(the)h(same)e(system.)64 b(Data)39 b(Structure)j
+ (Analysis)d(required)i Fu(10\045)p Fw(,)4096 9834 y Fu(23\045)p
+ Fw(,)57 b(and)f Fu(31\045)h Fw(of)e(the)h(GCC)f(compile)g(times)g(for)g
+ Fy(255.vortex)p Fw(,)4096 10008 y Fy(gap)48 b Fw(and)g
+ Fy(povray31)i Fw(resp)t(ectiv)l(ely)-13 b(.)67 b(Note)47
+ b(that)g(GCC)f(3.2)g(includes)4096 10183 y Fv(no)74 b(aggr)-8
+ b(essive)71 b(interpr)-8 b(o)g(c)g(e)g(dur)g(al)75 b(optimization)p
+ Fw(,)j(indicating)71 b(that)4096 10357 y(this)45 b(is)f(a)i(v)l(ery)f
+ (reasonable)h(cost)f(for)g(an)h(aggressiv)l(e)e(in)l(terpro)t(cedu-)p
+ 4096 10493 1601 7 v 4104 10600 a Ft(7)4173 10663 y Fr(W)-11
+ b(e)49 b(omit)g(gcc)g(and)i(p)t(erlbmk,)e(whic)l(h)h(do)g(not)f(curren)
+ l(tly)h(w)l(ork)f(b)t(ecause)g(of)4096 10796 y(inciden)l(tal)c(bugs)g
+ (in)g(our)g(C)g(fron)l(t-end.)4104 10900 y Ft(8)4173
+ 10964 y Fr(Memory)51 b(instructions)e(are)i Fh(load)p
+ Fr(,)f Fh(store)p Fr(,)h Fh(malloc)p Fr(,)f Fh(alloca)p
+ Fr(,)g Fh(call)p Fr(,)g(and)h(ad-)4096 11097 y(dressing)44
+ b(instructions.)p eop end
+ %%Page: 9 9
+ TeXDict begin 9 8 bop -296 -471 8292 7 v -299 -322 7
+ 150 v 888 -322 V 918 -322 V 1499 -366 a Fd(Co)5 b(de)54
+ b(Size)p 2780 -322 V 2810 -322 V 1046 w(Analysis)h(Time)f(\(sec\))p
+ 5095 -322 V 5125 -322 V 709 w(Mem)46 b Fm(\(KB\))p 6338
+ -322 V 6368 -322 V 592 w Fd(#)54 b(of)h(No)5 b(des)p
+ 7992 -322 V -299 -201 V 888 -201 V 918 -201 V 1520 -201
+ V 2197 -201 V 2393 -246 a(max)p 2780 -201 V 2810 -201
+ V 3381 -201 V 3952 -201 V 4524 -201 V 5095 -201 V 5125
+ -201 V 5732 -201 V 6338 -201 V 6368 -201 V 6916 -201
+ V 7414 -201 V 4868 w(Coll-)p 7992 -201 V -299 -80 V -207
+ -125 a(Benc)-5 b(hmark)p 888 -80 V 918 -80 V 499 w(LOC)p
+ 1520 -80 V 178 w(MInsts)p 2197 -80 V 181 w Fc(j)p Fd(SCC)p
+ Fc(j)p 2780 -80 V 2810 -80 V 215 w Fd(Lo)5 b(cal)p 3381
+ -80 V 261 w(BU)p 3952 -80 V 333 w(TD)p 4524 -80 V 268
+ w(T)-14 b(otal)p 5095 -80 V 5125 -80 V 316 w(BU)p 5732
+ -80 V 367 w(TD)p 6338 -80 V 6368 -80 V 304 w(T)g(otal)p
+ 6916 -80 V 181 w(Max)p 7414 -80 V 179 w(apsed)p 7992
+ -80 V -296 -73 8292 7 v -296 -43 V -299 106 7 150 v -207
+ 61 a Fm(Olden-treeadd)p 888 106 V 918 106 V 551 w(220)p
+ 1520 106 V 534 w(38)p 2197 106 V 512 w(1)p 2780 106 V
+ 2810 106 V 209 w(0.0003)p 3381 106 V 177 w(0.0004)p 3952
+ 106 V 177 w(0.0003)p 4524 106 V 213 w(0.001)p 5095 106
+ V 5125 106 V 529 w(29)p 5732 106 V 465 w(25)p 6338 106
+ V 6368 106 V 435 w(22)p 6916 106 V 427 w(8)p 7414 106
+ V 507 w(0)p 7992 106 V -299 255 V -207 211 a(Olden-bisort)p
+ 888 255 V 918 255 V 660 w(316)p 1520 255 V 464 w(126)p
+ 2197 255 V 511 w(1)p 2780 255 V 2810 255 V 209 w(0.0005)p
+ 3381 255 V 177 w(0.0007)p 3952 255 V 177 w(0.0006)p 4524
+ 255 V 178 w(0.0018)p 5095 255 V 5125 255 V 493 w(48)p
+ 5732 255 V 465 w(42)p 6338 255 V 6368 255 V 435 w(34)p
+ 6916 255 V 427 w(9)p 7414 255 V 507 w(0)p 7992 255 V
+ -299 405 V -207 360 a(Olden-mst)p 888 405 V 918 405 V
+ 785 w(389)p 1520 405 V 464 w(182)p 2197 405 V 511 w(1)p
+ 2780 405 V 2810 405 V 209 w(0.0008)p 3381 405 V 177 w(0.0014)p
+ 3952 405 V 177 w(0.0011)p 4524 405 V 178 w(0.0033)p 5095
+ 405 V 5125 405 V 493 w(62)p 5732 405 V 465 w(54)p 6338
+ 405 V 6368 405 V 365 w(108)p 6916 405 V 356 w(14)p 7414
+ 405 V 506 w(0)p 7992 405 V -299 554 V -207 510 a(Olden-p)t(erimeter)p
+ 888 554 V 918 554 V 421 w(430)p 1520 554 V 464 w(151)p
+ 2197 554 V 511 w(1)p 2780 554 V 2810 554 V 209 w(0.0006)p
+ 3381 554 V 177 w(0.0008)p 3952 554 V 177 w(0.0006)p 4524
+ 554 V 213 w(0.002)p 5095 554 V 5125 554 V 529 w(51)p
+ 5732 554 V 465 w(44)p 6338 554 V 6368 554 V 435 w(24)p
+ 6916 554 V 427 w(7)p 7414 554 V 507 w(0)p 7992 554 V
+ -299 704 V -207 659 a(Olden-health)p 888 704 V 918 704
+ V 630 w(408)p 1520 704 V 464 w(293)p 2197 704 V 511 w(1)p
+ 2780 704 V 2810 704 V 209 w(0.0008)p 3381 704 V 177 w(0.0012)p
+ 3952 704 V 177 w(0.0016)p 4524 704 V 178 w(0.0036)p 5095
+ 704 V 5125 704 V 493 w(71)p 5732 704 V 465 w(56)p 6338
+ 704 V 6368 704 V 435 w(57)p 6916 704 V 357 w(14)p 7414
+ 704 V 506 w(2)p 7992 704 V -299 853 V -207 808 a(Olden-tsp)p
+ 888 853 V 918 853 V 825 w(520)p 1520 853 V 464 w(262)p
+ 2197 853 V 511 w(1)p 2780 853 V 2810 853 V 209 w(0.0007)p
+ 3381 853 V 177 w(0.0009)p 3952 853 V 177 w(0.0008)p 4524
+ 853 V 178 w(0.0024)p 5095 853 V 5125 853 V 493 w(57)p
+ 5732 853 V 465 w(50)p 6338 853 V 6368 853 V 435 w(37)p
+ 6916 853 V 357 w(10)p 7414 853 V 506 w(0)p 7992 853 V
+ -299 1003 V -207 958 a(Olden-p)t(o)l(w)l(er)p 888 1003
+ V 918 1003 V 649 w(524)p 1520 1003 V 464 w(354)p 2197
+ 1003 V 511 w(1)p 2780 1003 V 2810 1003 V 209 w(0.0008)p
+ 3381 1003 V 177 w(0.0010)p 3952 1003 V 177 w(0.0008)p
+ 4524 1003 V 178 w(0.0026)p 5095 1003 V 5125 1003 V 493
+ w(65)p 5732 1003 V 465 w(55)p 6338 1003 V 6368 1003 V
+ 435 w(57)p 6916 1003 V 357 w(13)p 7414 1003 V 506 w(0)p
+ 7992 1003 V -299 1152 V -207 1107 a(Olden-em3d)p 888
+ 1152 V 918 1152 V 684 w(587)p 1520 1152 V 464 w(324)p
+ 2197 1152 V 511 w(1)p 2780 1152 V 2810 1152 V 209 w(0.0012)p
+ 3381 1152 V 177 w(0.0022)p 3952 1152 V 177 w(0.0024)p
+ 4524 1152 V 178 w(0.0058)p 5095 1152 V 5125 1152 V 493
+ w(93)p 5732 1152 V 394 w(100)p 6338 1152 V 6368 1152
+ V 365 w(273)p 6916 1152 V 356 w(29)p 7414 1152 V 506
+ w(1)p 7992 1152 V -299 1302 V -207 1257 a(Olden-v)l(oronoi)p
+ 888 1302 V 918 1302 V 559 w(982)p 1520 1302 V 464 w(730)p
+ 2197 1302 V 511 w(1)p 2780 1302 V 2810 1302 V 209 w(0.0020)p
+ 3381 1302 V 177 w(0.0037)p 3952 1302 V 177 w(0.0031)p
+ 4524 1302 V 178 w(0.0088)p 5095 1302 V 5125 1302 V 422
+ w(166)p 5732 1302 V 394 w(150)p 6338 1302 V 6368 1302
+ V 365 w(249)p 6916 1302 V 356 w(44)p 7414 1302 V 506
+ w(0)p 7992 1302 V -299 1451 V -207 1406 a(Olden-bh)p
+ 888 1451 V 918 1451 V 788 w(1391)p 1520 1451 V 463 w(824)p
+ 2197 1451 V 511 w(1)p 2780 1451 V 2810 1451 V 209 w(0.0019)p
+ 3381 1451 V 177 w(0.0026)p 3952 1451 V 177 w(0.0022)p
+ 4524 1451 V 178 w(0.0067)p 5095 1451 V 5125 1451 V 422
+ w(141)p 5732 1451 V 394 w(119)p 6338 1451 V 6368 1451
+ V 365 w(113)p 6916 1451 V 356 w(11)p 7414 1451 V 436
+ w(25)p 7992 1451 V -296 1458 8292 7 v -299 1607 7 150
+ v -207 1562 a(ptrdist-anagram)p 888 1607 V 918 1607 V
+ 431 w(647)p 1520 1607 V 464 w(271)p 2197 1607 V 511 w(1)p
+ 2780 1607 V 2810 1607 V 209 w(0.0012)p 3381 1607 V 177
+ w(0.0028)p 3952 1607 V 177 w(0.0019)p 4524 1607 V 178
+ w(0.0059)p 5095 1607 V 5125 1607 V 422 w(111)p 5732 1607
+ V 465 w(89)p 6338 1607 V 6368 1607 V 365 w(163)p 6916
+ 1607 V 356 w(18)p 7414 1607 V 436 w(11)p 7992 1607 V
+ -299 1757 V -207 1712 a(ptrdist-ks)p 888 1757 V 918 1757
+ V 836 w(684)p 1520 1757 V 464 w(546)p 2197 1757 V 511
+ w(1)p 2780 1757 V 2810 1757 V 209 w(0.0017)p 3381 1757
+ V 177 w(0.0025)p 3952 1757 V 177 w(0.0022)p 4524 1757
+ V 178 w(0.0064)p 5095 1757 V 5125 1757 V 493 w(97)p 5732
+ 1757 V 465 w(68)p 6338 1757 V 6368 1757 V 365 w(207)p
+ 6916 1757 V 356 w(24)p 7414 1757 V 506 w(0)p 7992 1757
+ V -299 1906 V -207 1861 a(ptrdist-ft)p 888 1906 V 918
+ 1906 V 798 w(1301)p 1520 1906 V 463 w(433)p 2197 1906
+ V 511 w(1)p 2780 1906 V 2810 1906 V 209 w(0.0013)p 3381
+ 1906 V 177 w(0.0024)p 3952 1906 V 177 w(0.0021)p 4524
+ 1906 V 178 w(0.0058)p 5095 1906 V 5125 1906 V 422 w(112)p
+ 5732 1906 V 465 w(86)p 6338 1906 V 6368 1906 V 365 w(150)p
+ 6916 1906 V 356 w(14)p 7414 1906 V 506 w(0)p 7992 1906
+ V -299 2055 V -207 2011 a(ptrdist-y)l(acr2)p 888 2055
+ V 918 2055 V 566 w(3212)p 1520 2055 V 392 w(1621)p 2197
+ 2055 V 511 w(1)p 2780 2055 V 2810 2055 V 209 w(0.0051)p
+ 3381 2055 V 177 w(0.0078)p 3952 2055 V 177 w(0.0063)p
+ 4524 2055 V 178 w(0.0192)p 5095 2055 V 5125 2055 V 422
+ w(222)p 5732 2055 V 394 w(212)p 6338 2055 V 6368 2055
+ V 365 w(369)p 6916 2055 V 356 w(17)p 7414 2055 V 506
+ w(0)p 7992 2055 V -299 2205 V -207 2160 a(ptrdist-b)t(c)p
+ 888 2205 V 918 2205 V 751 w(6627)p 1520 2205 V 392 w(3729)p
+ 2197 2205 V 511 w(1)p 2780 2205 V 2810 2205 V 209 w(0.0099)p
+ 3381 2205 V 177 w(0.0241)p 3952 2205 V 177 w(0.0174)p
+ 4524 2205 V 178 w(0.0514)p 5095 2205 V 5125 2205 V 422
+ w(591)p 5732 2205 V 394 w(408)p 6338 2205 V 6368 2205
+ V 365 w(738)p 6916 2205 V 356 w(29)p 7414 2205 V 436
+ w(16)p 7992 2205 V -296 2211 8292 7 v -299 2361 7 150
+ v -207 2316 a(179.art)p 888 2361 V 918 2361 V 926 w(1283)p
+ 1520 2361 V 463 w(919)p 2197 2361 V 511 w(1)p 2780 2361
+ V 2810 2361 V 209 w(0.0025)p 3381 2361 V 177 w(0.0032)p
+ 3952 2361 V 177 w(0.0029)p 4524 2361 V 178 w(0.0086)p
+ 5095 2361 V 5125 2361 V 422 w(117)p 5732 2361 V 465 w(94)p
+ 6338 2361 V 6368 2361 V 365 w(235)p 6916 2361 V 356 w(39)p
+ 7414 2361 V 506 w(0)p 7992 2361 V -299 2510 V -207 2466
+ a(183.equak)l(e)p 888 2510 V 918 2510 V 688 w(1513)p
+ 1520 2510 V 392 w(1582)p 2197 2510 V 511 w(1)p 2780 2510
+ V 2810 2510 V 209 w(0.0031)p 3381 2510 V 177 w(0.0041)p
+ 3952 2510 V 177 w(0.0043)p 4524 2510 V 178 w(0.0115)p
+ 5095 2510 V 5125 2510 V 422 w(167)p 5732 2510 V 394 w(108)p
+ 6338 2510 V 6368 2510 V 365 w(314)p 6916 2510 V 356 w(60)p
+ 7414 2510 V 506 w(7)p 7992 2510 V -299 2660 V -207 2615
+ a(181.mcf)p 888 2660 V 918 2660 V 883 w(2412)p 1520 2660
+ V 392 w(1104)p 2197 2660 V 511 w(1)p 2780 2660 V 2810
+ 2660 V 209 w(0.0022)p 3381 2660 V 177 w(0.0033)p 3952
+ 2660 V 177 w(0.0034)p 4524 2660 V 178 w(0.0089)p 5095
+ 2660 V 5125 2660 V 422 w(157)p 5732 2660 V 394 w(115)p
+ 6338 2660 V 6368 2660 V 365 w(216)p 6916 2660 V 356 w(18)p
+ 7414 2660 V 506 w(3)p 7992 2660 V -299 2809 V -207 2764
+ a(256.bzip2)p 888 2809 V 918 2809 V 778 w(4647)p 1520
+ 2809 V 392 w(1723)p 2197 2809 V 511 w(1)p 2780 2809 V
+ 2810 2809 V 209 w(0.0048)p 3381 2809 V 177 w(0.0077)p
+ 3952 2809 V 177 w(0.0066)p 4524 2809 V 178 w(0.0191)p
+ 5095 2809 V 5125 2809 V 422 w(269)p 5732 2809 V 394 w(212)p
+ 6338 2809 V 6368 2809 V 365 w(425)p 6916 2809 V 356 w(29)p
+ 7414 2809 V 436 w(16)p 7992 2809 V -299 2959 V -207 2914
+ a(164.gzip)p 888 2959 V 918 2959 V 856 w(8616)p 1520
+ 2959 V 392 w(2634)p 2197 2959 V 511 w(1)p 2780 2959 V
+ 2810 2959 V 209 w(0.0065)p 3381 2959 V 177 w(0.0101)p
+ 3952 2959 V 177 w(0.0081)p 4524 2959 V 178 w(0.0247)p
+ 5095 2959 V 5125 2959 V 422 w(333)p 5732 2959 V 394 w(266)p
+ 6338 2959 V 6368 2959 V 365 w(610)p 6916 2959 V 356 w(29)p
+ 7414 2959 V 506 w(9)p 7992 2959 V -299 3108 V -207 3063
+ a(197.parser)p 888 3108 V 918 3108 V 658 w(11391)p 1520
+ 3108 V 392 w(7799)p 2197 3108 V 511 w(3)p 2780 3108 V
+ 2810 3108 V 209 w(0.0254)p 3381 3108 V 177 w(0.0668)p
+ 3952 3108 V 177 w(0.0683)p 4524 3108 V 178 w(0.1605)p
+ 5095 3108 V 5125 3108 V 352 w(1039)p 5732 3108 V 322
+ w(1063)p 6338 3108 V 6368 3108 V 294 w(1506)p 6916 3108
+ V 356 w(60)p 7414 3108 V 365 w(275)p 7992 3108 V -299
+ 3258 V -207 3213 a(188.ammp)p 888 3258 V 918 3258 V 651
+ w(13483)p 1520 3258 V 392 w(9645)p 2197 3258 V 511 w(2)p
+ 2780 3258 V 2810 3258 V 209 w(0.0232)p 3381 3258 V 177
+ w(0.0369)p 3952 3258 V 177 w(0.0289)p 4524 3258 V 213
+ w(0.089)p 5095 3258 V 5125 3258 V 458 w(653)p 5732 3258
+ V 394 w(563)p 6338 3258 V 6368 3258 V 294 w(1054)p 6916
+ 3258 V 356 w(64)p 7414 3258 V 365 w(140)p 7992 3258 V
+ -299 3407 V -207 3362 a(175.vpr)p 888 3407 V 918 3407
+ V 829 w(17729)p 1520 3407 V 392 w(8586)p 2197 3407 V
+ 511 w(1)p 2780 3407 V 2810 3407 V 209 w(0.0258)p 3381
+ 3407 V 177 w(0.0483)p 3952 3407 V 177 w(0.0487)p 4524
+ 3407 V 178 w(0.1228)p 5095 3407 V 5125 3407 V 422 w(951)p
+ 5732 3407 V 394 w(894)p 6338 3407 V 6368 3407 V 294 w(2461)p
+ 6916 3407 V 356 w(56)p 7414 3407 V 365 w(238)p 7992 3407
+ V -299 3556 V -207 3512 a(300.t)l(w)l(olf)p 888 3556
+ V 918 3556 V 734 w(20459)p 1520 3556 V 321 w(23340)p
+ 2197 3556 V 511 w(1)p 2780 3556 V 2810 3556 V 209 w(0.0388)p
+ 3381 3556 V 177 w(0.0483)p 3952 3556 V 177 w(0.0417)p
+ 4524 3556 V 178 w(0.1288)p 5095 3556 V 5125 3556 V 422
+ w(750)p 5732 3556 V 394 w(617)p 6338 3556 V 6368 3556
+ V 294 w(1262)p 6916 3556 V 356 w(45)p 7414 3556 V 365
+ w(166)p 7992 3556 V -299 3706 V -207 3661 a(186.craft)l(y)p
+ 888 3706 V 918 3706 V 679 w(20650)p 1520 3706 V 321 w(15866)p
+ 2197 3706 V 511 w(2)p 2780 3706 V 2810 3706 V 209 w(0.0390)p
+ 3381 3706 V 177 w(0.0981)p 3952 3706 V 177 w(0.1137)p
+ 4524 3706 V 178 w(0.2508)p 5095 3706 V 5125 3706 V 422
+ w(916)p 5732 3706 V 394 w(961)p 6338 3706 V 6368 3706
+ V 294 w(1996)p 6916 3706 V 285 w(107)p 7414 3706 V 506
+ w(7)p 7992 3706 V -299 3855 V -207 3810 a(255.v)l(ortex)p
+ 888 3855 V 918 3855 V 648 w(67223)p 1520 3855 V 321 w(39326)p
+ 2197 3855 V 440 w(38)p 2780 3855 V 2810 3855 V 209 w(0.0950)p
+ 3381 3855 V 177 w(0.9569)p 3952 3855 V 177 w(1.2428)p
+ 4524 3855 V 178 w(2.2947)p 5095 3855 V 5125 3855 V 352
+ w(4661)p 5732 3855 V 322 w(6143)p 6338 3855 V 6368 3855
+ V 294 w(8597)p 6916 3855 V 356 w(85)p 7414 3855 V 365
+ w(606)p 7992 3855 V -299 4005 V -207 3960 a(254.gap)p
+ 888 4005 V 918 4005 V 816 w(71363)p 1520 4005 V 321 w(40808)p
+ 2197 4005 V 440 w(20)p 2780 4005 V 2810 4005 V 209 w(0.1252)p
+ 3381 4005 V 177 w(2.4300)p 3952 4005 V 177 w(1.3767)p
+ 4524 4005 V 178 w(3.9319)p 5095 4005 V 5125 4005 V 207
+ w(12.5)p Fb(mb)p 5732 4005 V 179 w Fm(12.2)p Fb(mb)p
+ 6338 4005 V 6368 4005 V 294 w Fm(7038)p 6916 4005 V 356
+ w(59)p 7414 4005 V 365 w(803)p 7992 4005 V -296 4011
+ 8292 7 v -299 4161 7 150 v -207 4116 a(sgefa)p 888 4161
+ V 918 4161 V 1055 w(1176)p 1520 4161 V 463 w(429)p 2197
+ 4161 V 511 w(1)p 2780 4161 V 2810 4161 V 209 w(0.0016)p
+ 3381 4161 V 177 w(0.0030)p 3952 4161 V 177 w(0.0027)p
+ 4524 4161 V 178 w(0.0073)p 5095 4161 V 5125 4161 V 422
+ w(126)p 5732 4161 V 394 w(109)p 6338 4161 V 6368 4161
+ V 365 w(116)p 6916 4161 V 356 w(23)p 7414 4161 V 436
+ w(11)p 7992 4161 V -299 4310 V -207 4265 a(sim)p 888
+ 4310 V 918 4310 V 1146 w(1569)p 1520 4310 V 392 w(1247)p
+ 2197 4310 V 511 w(1)p 2780 4310 V 2810 4310 V 209 w(0.0028)p
+ 3381 4310 V 177 w(0.0035)p 3952 4310 V 177 w(0.0028)p
+ 4524 4310 V 178 w(0.0091)p 5095 4310 V 5125 4310 V 422
+ w(118)p 5732 4310 V 465 w(80)p 6338 4310 V 6368 4310
+ V 365 w(215)p 6916 4310 V 356 w(28)p 7414 4310 V 506
+ w(0)p 7992 4310 V -299 4460 V -207 4415 a(burg)p 888
+ 4460 V 918 4460 V 1077 w(6438)p 1520 4460 V 392 w(5224)p
+ 2197 4460 V 511 w(2)p 2780 4460 V 2810 4460 V 209 w(0.0165)p
+ 3381 4460 V 177 w(0.0405)p 3952 4460 V 177 w(0.0406)p
+ 4524 4460 V 178 w(0.0976)p 5095 4460 V 5125 4460 V 422
+ w(886)p 5732 4460 V 394 w(717)p 6338 4460 V 6368 4460
+ V 294 w(1614)p 6916 4460 V 356 w(29)p 7414 4460 V 365
+ w(162)p 7992 4460 V -299 4609 V -207 4564 a(gn)l(uc)l(hess)p
+ 888 4609 V 918 4609 V 753 w(10595)p 1520 4609 V 392 w(8058)p
+ 2197 4609 V 511 w(1)p 2780 4609 V 2810 4609 V 209 w(0.0276)p
+ 3381 4609 V 177 w(0.0689)p 3952 4609 V 177 w(0.0436)p
+ 4524 4609 V 178 w(0.1401)p 5095 4609 V 5125 4609 V 422
+ w(889)p 5732 4609 V 394 w(814)p 6338 4609 V 6368 4609
+ V 294 w(2132)p 6916 4609 V 356 w(56)p 7414 4609 V 436
+ w(79)p 7992 4609 V -299 4759 V -207 4714 a(larn)p 888
+ 4759 V 918 4759 V 1045 w(15179)p 1520 4759 V 321 w(13134)p
+ 2197 4759 V 511 w(1)p 2780 4759 V 2810 4759 V 209 w(0.0336)p
+ 3381 4759 V 177 w(0.0939)p 3952 4759 V 177 w(0.0857)p
+ 4524 4759 V 178 w(0.2132)p 5095 4759 V 5125 4759 V 352
+ w(1138)p 5732 4759 V 322 w(1053)p 6338 4759 V 6368 4759
+ V 294 w(2740)p 6916 4759 V 356 w(49)p 7414 4759 V 365
+ w(293)p 7992 4759 V -299 4908 V -207 4863 a(\015ex)p
+ 888 4908 V 918 4908 V 1073 w(20534)p 1520 4908 V 392
+ w(7113)p 2197 4908 V 511 w(3)p 2780 4908 V 2810 4908
+ V 209 w(0.0204)p 3381 4908 V 177 w(0.0409)p 3952 4908
+ V 177 w(0.0412)p 4524 4908 V 178 w(0.1025)p 5095 4908
+ V 5125 4908 V 422 w(638)p 5732 4908 V 394 w(608)p 6338
+ 4908 V 6368 4908 V 294 w(1597)p 6916 4908 V 356 w(57)p
+ 7414 4908 V 436 w(85)p 7992 4908 V -299 5057 V -207 5013
+ a(moria)p 888 5057 V 918 5057 V 934 w(36010)p 1520 5057
+ V 321 w(38299)p 2197 5057 V 511 w(4)p 2780 5057 V 2810
+ 5057 V 209 w(0.0726)p 3381 5057 V 177 w(0.2928)p 3952
+ 5057 V 177 w(0.5492)p 4524 5057 V 178 w(0.9146)p 5095
+ 5057 V 5125 5057 V 352 w(2604)p 5732 5057 V 322 w(4713)p
+ 6338 5057 V 6368 5057 V 294 w(2433)p 6916 5057 V 356
+ w(76)p 7414 5057 V 365 w(386)p 7992 5057 V -299 5207
+ V -207 5162 a(p)t(o)l(vra)l(y31)p 888 5207 V 918 5207
+ V 657 w(136951)p 1520 5207 V 320 w(57562)p 2197 5207
+ V 370 w(102)p 2780 5207 V 2810 5207 V 208 w(0.1471)p
+ 3381 5207 V 177 w(1.2116)p 3952 5207 V 177 w(6.5859)p
+ 4524 5207 V 178 w(7.9446)p 5095 5207 V 5125 5207 V 352
+ w(7901)p 5732 5207 V 178 w(16.0)p Fb(mb)p 6338 5207 V
+ 6368 5207 V 224 w Fm(26687)p 6916 5207 V 284 w(167)p
+ 7414 5207 V 294 w(2573)p 7992 5207 V -296 5214 8292 7
+ v 918 5364 a Fw(T)h(able)52 b(1:)68 b(Program)50 b(information,)g
+ (analysis)f(time,)i(memory)g(consumption,)g(and)h(graph)g(statistics)
+ -303 5634 y(ral)e(analysis)g(whic)l(h)h(has)g(man)l(y)g(p)t(oten)l
+ (tial)g(applications.)-154 5808 y(The)38 b(table)e(sho)l(ws)g(that)g
+ (memory)i(consumption)e(of)h(DS)h(Analysis)-303 5982
+ y(is)i(also)g(quite)h(small.)63 b(The)42 b(\\Mem")e(column)i(sho)l(ws)e
+ (the)h(amoun)l(t)g(of)-303 6157 y(memory)h(used)g(b)l(y)g(results)f(of)
+ g(the)h(BU)g(and)g(TD)g(the)g(analysis)e(algo-)-303 6331
+ y(rithm.)65 b(The)44 b(total)e(memory)i(consumed)g(for)f(the)h(largest)
+ e(co)t(de)j(\(for)-303 6505 y(b)t(oth)i(BU)g(and)h(TD\))f(is)f(less)h
+ (than)g Fu(24MB)p Fw(,)g(whic)l(h)g(seem)h(v)l(ery)f(rea-)-303
+ 6680 y(sonable)59 b(for)g(a)h(mo)t(dern)h(optimizing)d(compiler.)94
+ b(These)60 b(n)l(um)l(b)t(ers)-303 6854 y(are)44 b(notew)l(orth)l(y)f
+ (considering)h(that)f(the)h(algorithm)f(is)g(p)t(erforming)-303
+ 7028 y(a)38 b(con)l(text-sensitiv)l(e)g(whole-program)h(analysis)f
+ Fv(with)44 b(cloning)p Fw(,)d(and)-303 7203 y(memory)63
+ b(consumption)g(\(not)g(running)h(time\))e(can)i(often)f(b)t(e)h(the)
+ -303 7377 y(b)t(ottlenec)l(k)51 b(in)h(scaling)e(suc)l(h)h(analyses)g
+ (to)f(large)h(programs)3265 7314 y Ft(9)3334 7377 y Fw(.)-154
+ 7551 y(The)70 b(\\#)f(of)g(No)t(des")h(columns)f(sho)l(w)g(statistics)e
+ (for)i(the)h(con-)-303 7726 y(struction)51 b(pro)t(cess.)68
+ b(\\T)-13 b(otal")51 b(is)f(the)i Fv(aggr)-8 b(e)g(gate)50
+ b Fw(n)l(um)l(b)t(er)j(of)e(no)t(des)-303 7900 y(con)l(tained)57
+ b(in)g(the)h(TD)f(graphs)g(for)g(all)g(functions,)h(\\Max")f(is)f(the)
+ -303 8074 y(maxim)l(um)48 b(size)g(of)g(an)l(y)h(particular)f
+ (function's)g(graph,)h(and)g(\\Col-)-303 8249 y(lapsed")71
+ b(is)f(the)i(total)e(n)l(um)l(b)t(er)i(of)f(TD)g(graph)h(no)t(des)g
+ (collapsed)-303 8423 y(due)47 b(to)f(apparen)l(t)h(t)l(yp)t(e)g
+ (violations.)64 b(In)47 b(large)f(programs,)h(w)l(e)f(ha)l(v)l(e)-303
+ 8598 y(found)35 b(that)f(consisten)l(tly)f(ab)t(out)i(10\045)f(of)g
+ (the)h(no)t(des)g(are)g(collapsed.)-303 8772 y(The)56
+ b(most)f(common)h(reason)f(app)t(ears)i(to)e(b)t(e)h(merging)g(of)g
+ (Global)-303 8946 y(no)t(des)63 b(\(e.g.,)i(all)d(the)h(format)f
+ (strings)g(passed)h(to)f Fy(printf)k Fw(in)d(the)-303
+ 9121 y(program)41 b(are)g(usually)g(merged!\),)i(and)f(in)f(some)g
+ (cases)g(this)g(in)g(turn)-303 9295 y(causes)d(other)i(no)t(des)f(to)f
+ (b)t(e)i(merged.)65 b(P)l(erhaps)38 b(most)g(imp)t(ortan)l(tly)-13
+ b(,)-303 9469 y(the)58 b(table)f(sho)l(ws)f(that)i(the)f(aggregate)g(n)
+ l(um)l(b)t(er)i(of)e(no)t(des)h(in)g(the)-303 9644 y(graphs)f(as)f(w)l
+ (ell)g(as)h(the)g(maxim)l(um)g(p)t(er)h(graph)f(b)t(oth)h(gro)l(w)e
+ (quite)-303 9818 y(slo)l(wly)49 b(with)i(total)f(program)h(size.)-154
+ 9992 y(W)-13 b(e)38 b(ha)l(v)l(e)f(also)f(examined)i(the)g(scaling)e(b)
+ t(eha)l(vior)i(of)f(the)h(analysis)-303 10167 y(\(omitted)57
+ b(here)j(due)f(to)f(lac)l(k)g(of)h(space\).)89 b(Our)60
+ b(exp)t(erience)g(sho)l(ws)p -303 10394 1601 7 v -295
+ 10502 a Ft(9)-227 10565 y Fr(Ev)l(en)71 b(in)e(the)h(closest)f
+ (comparable)h(analysis)e([15],)75 b(for)70 b(example,)75
+ b(\014eld-)-303 10698 y(sensitivit)l(y)35 b(had)j(to)g(b)t(e)f
+ (disabled)g(for)h(the)g Fh(povray3)d Fr(program)j(for)g(the)g(analysis)
+ -303 10831 y(to)g(\014t)g(in)l(to)g(640M)h(of)g(ph)l(ysical)f(memory)
+ -11 b(.)56 b(Judging)39 b(b)l(y)g(LOC,)e(it)h(also)f(app)t(ears)-303
+ 10964 y(that)53 b(the)g Fh(zlib)f Fr(and)h Fh(libpng)f
+ Fr(libraries)f(w)l(ere)i(not)g(link)l(ed)g(in)l(to)h(the)f(program)-303
+ 11097 y(for)45 b(analysis.)4096 5634 y Fw(that)39 b(running)i(time)f
+ (app)t(ears)g(to)g(scale)f(roughly)h(as)g(\002\()p Fs(nl)r(og)5
+ b(n)p Fw(\))40 b(with)4096 5808 y(n)l(um)l(b)t(er)77
+ b(of)e(memory)h(instructions)f(in)h(the)g(program,)81
+ b(across)75 b(a)4096 5982 y(range)51 b(of)g(o)l(v)l(er)g(three)h
+ (orders-of-magnitude)g(of)f(co)t(de)h(size.)4096 6348
+ y Fx(5.)199 b(RELA)-19 b(TED)49 b(W)n(ORK)4245 6564 y
+ Fw(There)74 b(is)f(a)f(v)-9 b(ast)73 b(literature)g(on)g(p)t(oin)l(ter)
+ g(analyses)f(\(e.g.,)77 b(see)4096 6738 y(the)55 b(surv)l(ey)f(b)l(y)h
+ (Hind)f([10]\),)g(but)g(the)h(ma)9 b(jorit)l(y)53 b(of)h(that)g(w)l
+ (ork)g(fo-)4096 6912 y(cuses)59 b(on)g(con)l(text-insensitiv)l(e)e
+ (alias)h(information)g(and)h(do)t(es)g(not)4096 7087
+ y(attempt)j(to)g(extract)g(prop)t(erties)h(that)f(are)h(fundamen)l(tal)
+ f(to)g(our)4096 7261 y(goals)82 b(\(e.g.,)91 b(iden)l(tifying)83
+ b(disjoin)l(t)f(data)i(structure)g(instances\).)4096
+ 7435 y(Due)68 b(to)e(limited)h(space,)j(w)l(e)d(fo)t(cus)g(on)h(tec)l
+ (hniques)f(whose)g(goals)4096 7610 y(are)51 b(similar)f(to)h(ours.)4245
+ 7784 y(The)67 b(most)f(p)t(o)l(w)l(erful)g(class)f(of)h(related)h
+ (algorithms)d(are)j(those)4096 7958 y(referred)83 b(to)f(as)g(\\shap)t
+ (e)g(analysis")f([11,)88 b(9,)i(17].)160 b(These)82 b(algo-)4096
+ 8133 y(rithms)71 b(are)i(strictly)e(more)h(p)t(o)l(w)l(erful)g(than)h
+ (ours,)k(allo)l(wing)70 b(ad-)4096 8307 y(ditional)58
+ b(queries)h(suc)l(h)g(as)f(\\is)g(a)h(giv)l(en)g(data)f(structure)i
+ (instance)4096 8481 y(a)67 b(singly-link)l(ed)f(list?")113
+ b(Ho)l(w)l(ev)l(er,)70 b(this)c(extra)h(p)t(o)l(w)l(er)g(comes)g(at)
+ 4096 8656 y(v)l(ery)76 b(signi\014can)l(t)f(cost)g(in)h(sp)t(eed)g(and)
+ h(scalabilit)l(y)-13 b(,)79 b(particularly)4096 8830
+ y(due)60 b(to)e(the)i(need)g(for)f(\015o)l(w-sensitivit)l(y)e(and)i
+ (iteration)f([17].)91 b(Sig-)4096 9004 y(ni\014can)l(t)38
+ b(researc)l(h)h(is)f(necessary)g(b)t(efore)h(suc)l(h)g(algorithms)e
+ (are)h(scal-)4096 9179 y(able)51 b(enough)h(to)f(b)t(e)h(used)g(for)f
+ (mo)t(derate)h(or)f(large)g(programs.)4245 9353 y(The)d(prior)g(w)l
+ (ork)f(most)f(closely)h(related)h(to)f(our)g(goals)g(is)f(the)i(re-)
+ 4096 9528 y(cen)l(t)59 b(algorithm)f(b)l(y)h(Liang)g(and)g(Harrold)g
+ ([15],)g(named)h(MoPP)-13 b(A.)4096 9702 y(The)46 b(structure)f(of)g
+ (MoPP)-13 b(A)45 b(is)f(similar)g(to)g(our)i(algorithm,)f(includ-)4096
+ 9876 y(ing)59 b(Lo)t(cal,)j(Bottom-Up,)f(and)f(T)-13
+ b(op-Do)l(wn)61 b(phases,)g(and)f(using)g(a)4096 10051
+ y(separate)f(Globals)e(Graph.)90 b(The)59 b(analysis)f(p)t(o)l(w)l(er)g
+ (and)i(precision)4096 10225 y(of)46 b(MoPP)-13 b(A)46
+ b(b)t(oth)h(seem)g(v)l(ery)g(similar)e(to)h(Data)h(Structure)g(Analy-)
+ 4096 10399 y(sis.)67 b(Nev)l(ertheless,)51 b(their)g(algorithm)f(has)h
+ (sev)l(eral)f(limitations)f(for)4096 10574 y(practical)d(programs.)66
+ b(MoPP)-13 b(A)46 b(can)i(only)f(retain)g(\014eld-sensitivit)l(y)4096
+ 10748 y(for)g(completely)g(t)l(yp)t(e-safe)g(programs,)g(and)h
+ (otherwise)f(m)l(ust)f(turn)4096 10922 y(it)j(o\013)g(en)l(tirely)-13
+ b(.)67 b(It)50 b(requires)g(a)g(precomputed)h(call-graph)e(in)h(order)
+ 4096 11097 y(to)61 b(analyze)g(indirect)h(calls)e(through)i(function)g
+ (p)t(oin)l(ters.)98 b(It)62 b(also)p eop end
+ %%Page: 10 10
+ TeXDict begin 10 9 bop -303 -137 a Fw(requires)39 b(a)g(complete)g
+ (program,)i(whic)l(h)f(can)f(b)t(e)h(a)f(signi\014can)l(t)f(limi-)-303
+ 37 y(tation)i(in)i(practice.)65 b(Finally)-13 b(,)43
+ b(MoPP)-13 b(A's)39 b(handling)j(of)g(global)e(v)-9 b(ari-)-303
+ 211 y(ables)55 b(is)g(m)l(uc)l(h)h(more)f(complex)h(than)g(Data)f
+ (Structure)i(Analysis,)-303 386 y(whic)l(h)50 b(handles)h(them)f(as)g
+ (just)f(another)i(memory)f(class.)67 b(Both)50 b(al-)-303
+ 560 y(gorithms)44 b(ha)l(v)l(e)i(similar)f(compilation)g(times,)g(but)i
+ (MoPP)-13 b(A)45 b(seems)-303 734 y(to)36 b(require)i(m)l(uc)l(h)f
+ (higher)h(memory)f(than)g(our)g(algorithm)f(for)h(larger)-303
+ 909 y(programs:)83 b(MoPP)-13 b(A)59 b(runs)g(out)g(of)h(memory)f
+ (analyzing)g Fy(povray3)-303 1083 y Fw(with)50 b(\014eld-sensitivit)l
+ (y)h(on)g(a)g(mac)l(hine)h(with)e(640M)h(of)g(memory)-13
+ b(.)-154 1257 y(Ruf)12 b('s)91 b(sync)l(hronization)f(remo)l(v)-9
+ b(al)92 b(algorithm)e(for)h(Ja)l(v)-9 b(a)90 b([16])-303
+ 1432 y(also)49 b(shares)h(sev)l(eral)h(imp)t(ortan)l(t)f(prop)t(erties)
+ h(with)f(ours)h(and)g(with)-303 1606 y(MoPP)-13 b(A,)49
+ b(including)i(com)l(bining)f(con)l(text-sensitivit)l(y)f(with)i
+ (uni\014-)-303 1780 y(cation,)70 b(a)d(non-iterativ)l(e)g(analysis)f
+ (with)h(lo)t(cal,)j(b)t(ottom-up)e(and)-303 1955 y(top-do)l(wn)50
+ b(phases,)g(and)g(no)t(de)h(\015ags)f(to)f(mark)h(global)g(no)t(des.)68
+ b(Un-)-303 2129 y(lik)l(e)40 b(our)h(algorithm,)g(his)f(w)l(ork)h
+ (requires)g(a)g(call)f(graph)h(to)f(b)t(e)i(sp)t(eci-)-303
+ 2304 y(\014ed,)i(it)d(is)g(limited)g(to)g(t)l(yp)t(e-safe)h(programs,)h
+ (and)f(do)t(es)g(not)f(app)t(ear)-303 2478 y(to)50 b(handle)i
+ (incomplete)g(programs.)-154 2652 y(F\177)-77 b(ahndric)l(h)49
+ b(et)f(al.)e([7])h(describ)t(e)i(an)f(algorithm)e(that)h(is)g(con)l
+ (text-)-303 2827 y(sensitiv)l(e)62 b(in)i(a)f(fairly)g(limited)f(form,)
+ k(\015o)l(w-insensitiv)l(e,)g(and)e(dis-)-303 3001 y(co)l(v)l(ers)d
+ (the)g(call)g(graph)h(incremen)l(tally)f(during)h(the)f(analysis.)97
+ b(It)-303 3175 y(app)t(ears)48 b(comparable)g(to)f(ours)h(in)g(terms)f
+ (of)h(analysis)e(time.)67 b(Ho)l(w-)-303 3350 y(ev)l(er,)58
+ b(it)e(is)g(implemen)l(ted)h(b)l(y)g(naming)g(heap)g(ob)9
+ b(jects)56 b(based)i(only)-303 3524 y(on)40 b(allo)t(cation)f(site,)j
+ (i.e.,)f(w)l(ould)f(not)g(iden)l(tify)g(disjoin)l(t)f(data)h(struc-)
+ -303 3698 y(ture)51 b(instances)g(in)g(man)l(y)g(common)h(programs.)
+ -154 3873 y(Both)61 b(the)h(FICS)h(algorithm)d(of)i(Liang)f(and)h
+ (Harrold)f([14])g(and)-303 4047 y(the)53 b(Connection)g(Analysis)f(of)g
+ (Ghiy)l(a)g(and)h(Hendren)i([8])d(attempt)-303 4221 y(to)79
+ b(disam)l(biguate)f(p)t(oin)l(ters)i(referring)g(to)f(disjoin)l(t)f
+ (data)h(struc-)-303 4396 y(tures.)c(But)53 b(b)t(oth)h(ignore)g(heap)g
+ (lo)t(cations)f(not)g(relev)-9 b(an)l(t)54 b(for)g(alias)-303
+ 4570 y(analysis,)49 b(and)j(b)t(oth)f(algorithms)f(ha)l(v)l(e)h(higher)
+ h(complexit)l(y)-13 b(.)-154 4744 y(Cheng)69 b(and)g(Hwu)f([2])g
+ (describ)t(e)h(a)f(\015o)l(w-insensitiv)l(e,)j(con)l(text-)-303
+ 4919 y(sensitiv)l(e)54 b(algorithm)f(for)i(alias)f(analysis,)g(whic)l
+ (h)h(has)g(t)l(w)l(o)f(limita-)-303 5093 y(tions)h(relativ)l(e)g(to)h
+ (our)g(goals:)77 b(\(a\))55 b(they)i(represen)l(t)g(only)f(relev)-9
+ b(an)l(t)-303 5267 y(alias)57 b(pairs,)k(not)e(an)g(explicit)g(heap)h
+ (mo)t(del;)j(and)d(\(b\))f(they)g(use)h(a)-303 5442 y
+ Fs(k)t Fw(-limiting)65 b(tec)l(hnique)h(that)g(w)l(ould)g(lose)f
+ (connectivit)l(y)h(informa-)-303 5616 y(tion)49 b(for)g(no)t(des)i(b)t
+ (ey)l(ond)f Fs(k)55 b Fw(links.)66 b(They)51 b(allo)l(w)d(a)h(p)t(oin)l
+ (ter)h(to)f(ha)l(v)l(e)-303 5790 y(m)l(ultiple)43 b(targets)h(\(as)f
+ (in)h(Andersen's)h(algorithm\),)f(whic)l(h)h(is)e(more)-303
+ 5965 y(precise)76 b(but)g(in)l(tro)t(duces)g(sev)l(eral)f(iterativ)l(e)
+ g(phases)g(and)h(incurs)-303 6139 y(signi\014can)l(tly)50
+ b(higher)h(time)g(complexit)l(y)g(than)h(our)f(algorithm.)-154
+ 6313 y(Deutsc)l(h)67 b([4])f(presen)l(ts)g(a)g(p)t(o)l(w)l(erful)h
+ (heap)g(analysis)e(algorithm)-303 6488 y(that)36 b(is)g(b)t(oth)i
+ (\015o)l(w-)f(and)g(con)l(text-sensitiv)l(e)g(and)g(uses)g(access)g
+ (paths)-303 6662 y(represen)l(ted)87 b(b)l(y)f(regular)g(expressions)f
+ (to)g(represen)l(t)i(recursiv)l(e)-303 6837 y(structures)73
+ b(e\016cien)l(tly)-13 b(.)135 b(Although)74 b(based)g(on)f(access)h
+ (paths,)k(it)-303 7011 y(app)t(ears)64 b(p)t(ossible)f(to)g
+ (reconstruct)h(heap)h(information)e(from)g(the)-303 7185
+ y(regular)g(expressions)g(created.)105 b(In)64 b(practice)g(ho)l(w)l
+ (ev)l(er,)i(his)d(algo-)-303 7360 y(rithm)50 b(app)t(ears)g(to)g(ha)l
+ (v)l(e)g(m)l(uc)l(h)h(a)f(higher)h(complexit)l(y)f(than)g(ours.)-303
+ 7743 y Fx(6.)198 b(CONCLUSION)-154 7958 y Fw(This)72
+ b(pap)t(er)i(presen)l(ted)g(a)f(heap)g(analysis)e(algorithm)h(that)g
+ (is)-303 8133 y(designed)50 b(to)g(enable)h(analyses)e(and)i
+ (transformations)d(on)j(disjoin)l(t)-303 8307 y(instances)62
+ b(of)h(recursiv)l(e)g(data)g(structures.)103 b(The)64
+ b(algorithm)e(uses)-303 8481 y(a)47 b(com)l(bination)h(of)g(tec)l
+ (hniques)g(that)g(balance)g(heap)h(analysis)d(pre-)-303
+ 8656 y(cision)60 b(\(con)l(text)i(sensitivit)l(y)-13
+ b(,)62 b(cloning,)h(\014eld)f(sensitivit)l(y)-13 b(,)62
+ b(and)g(an)-303 8830 y(explicit)41 b(heap)i(mo)t(del\))f(with)f
+ (e\016ciency)i(\(\015o)l(w-insensitivit)l(y)-13 b(,)42
+ b(uni\014-)-303 9004 y(cation,)i(and)g(a)f(completely)h(non-iterativ)l
+ (e)f(analysis\).)64 b(W)-13 b(e)44 b(sho)l(w)l(ed)-303
+ 9179 y(that)64 b(the)i(algorithm)e(is)h(extremely)h(fast)e(in)h
+ (practice,)k(uses)c(v)l(ery)-303 9353 y(little)72 b(memory)-13
+ b(,)78 b(and)c(scales)e(almost)g(linearly)h(in)g(analysis)f(time)-303
+ 9528 y(for)59 b(35)g(b)t(enc)l(hmarks)i(spanning)f(3)f
+ (orders-of-magnitude)h(of)f(co)t(de)-303 9702 y(size.)66
+ b(W)-13 b(e)47 b(b)t(eliev)l(e)h(this)e(algorithm)g(enables)h(no)l(v)l
+ (el)f(approac)l(hes)i(for)-303 9876 y(the)62 b(analysis)f(and)h
+ (transformation)f(of)h(p)t(oin)l(ter-in)l(tensiv)l(e)g(co)t(des,)-303
+ 10051 y(b)l(y)e(op)t(erating)g(on)g(en)l(tire)g(recursiv)l(e)h(data)f
+ (structures)g(\(ac)l(hieving)-303 10225 y(some)47 b(of)h(the)g(goals)e
+ (of)i(shap)t(e)g(analysis,)f(with)h(a)f(w)l(eak)l(er)h(but)g(more)-303
+ 10399 y(e\016cien)l(t)60 b(approac)l(h\).)95 b(W)-13
+ b(e)61 b(are)f(exploring)g(sev)l(eral)g(suc)l(h)g(applica-)-303
+ 10574 y(tions)71 b(in)g(our)h(researc)l(h,)78 b(including)72
+ b(automatic)f(p)t(o)t(ol)h(allo)t(cation)-303 10748 y(for)59
+ b(distinct)h(data)f(structures)h(in)l(to)f(disjoin)l(t)g(p)t(o)t(ols)h
+ (in)g(the)g(heap,)-303 10922 y(transparen)l(t)74 b(p)t(oin)l(ter)g
+ (compression,)79 b(p)t(oin)l(ter)c(prefetc)l(hing,)80
+ b(and)-303 11097 y(automatic)50 b(parallelization.)4096
+ -137 y Fx(7.)199 b(REFERENCES)4166 -21 y Fm([1])75 b(L.)48
+ b(O.)f(Andersen.)g Fa(Pr)-7 b(o)g(gr)g(am)49 b(A)l(nalysis)j(and)f(Sp)
+ -7 b(e)g(cialization)50 b(for)4390 128 y(the)h(C)g(Pr)-7
+ b(o)g(gr)g(amming)48 b(L)-7 b(anguage)p Fm(.)46 b(PhD)h(thesis,)g
+ (DIKU,)4390 278 y(Univ)l(ersit)l(y)h(of)f(Cop)t(enhagen,)g(Ma)l(y)g
+ (1994.)4166 444 y([2])75 b(B.-C.)48 b(Cheng)f(and)g(W.)g(mei)g(Hwu.)g
+ (Mo)t(dular)h(in)l(terpro)t(cedural)4390 593 y(p)t(oin)l(ter)f
+ (analysis)g(using)h(access)d(paths:)63 b(Design,)4390
+ 743 y(implemen)l(tation,)47 b(and)g(ev)-8 b(alutation.)48
+ b(In)f Fa(A)l(CM)k(Conf.)f(on)h(Pr)-7 b(o)g(g.)4390 892
+ y(L)g(ang.)51 b(Design)f(and)g(Implementation)p Fm(,)d(V)-12
+ b(ancouv)l(er,)47 b(2000.)4166 1058 y([3])75 b(M.)48
+ b(Das,)e(B.)h(Liblit,)h(M.)g(F)-12 b(ahndric)l(h,)49
+ b(and)e(J.)h(Rehof.)f(Estimating)4390 1208 y(the)g(impact)g(of)f
+ (scalable)h(p)t(oin)l(ter)g(analysis)g(on)g(optimization.)f(In)4390
+ 1357 y Fa(8th)51 b(Int'l)h(Static)f(A)l(nalysis)h(Symp.,)p
+ Fm(,)47 b(2001.)4166 1523 y([4])75 b(A.)47 b(Deutsc)l(h.)g(In)l(terpro)
+ t(cedural)g(ma)l(y-alias)f(analysis)h(for)g(p)t(oin)l(ters:)4390
+ 1673 y(Bey)l(ond)h(k-limiting.)g(In)f Fa(A)l(CM)k(Conf.)g(on)g(Pr)-7
+ b(o)g(g.)49 b(L)-7 b(ang.)50 b(Design)4390 1822 y(and)h(Implementation)
+ p Fm(,)46 b(pages)g(230{241,)f(June)j(1994.)4166 1988
+ y([5])75 b(D.)47 b(Dh)l(urjati,)h(S.)g(Ko)l(wshik,)f(V.)g(Adv)l(e,)g
+ (and)h(C.)f(Lattner.)g(Memory)4390 2137 y(safet)l(y)g(without)g(run)l
+ (time)h(c)l(hec)l(ks)e(or)h(garbage)f(collection.)g(In)4390
+ 2287 y Fa(Pr)-7 b(o)g(c.)50 b(L)-7 b(anguages,)49 b(Compilers,)h(and)h
+ (T)-11 b(o)k(ols)51 b(for)g(Emb)-7 b(e)g(dde)g(d)4390
+ 2436 y(Systems)52 b(\(LCTES'03\))p Fm(,)47 b(San)h(Diego,)e(CA,)h(Jun)h
+ (2003.)4166 2602 y([6])75 b(M.)48 b(Emami,)e(R.)h(Ghiy)l(a,)h(and)f(L.)
+ h(J.)f(Hendren.)h(Con)l(text-sensitiv)l(e)4390 2752 y(in)l(terpro)t
+ (cedural)f(p)t(oin)l(ts-to)g(analysis)g(in)h(the)f(presence)f(of)4390
+ 2901 y(function)i(p)t(oin)l(ters.)f(In)g Fa(A)l(CM)k(Conf.)g(on)g(Pr)-7
+ b(o)g(g.)49 b(L)-7 b(ang.)51 b(Design)4390 3051 y(and)g(Implementation)
+ p Fm(,)46 b(Orlando,)i(FL,)f(1994.)4166 3217 y([7])75
+ b(M.)48 b(F\177)-71 b(ahndric)l(h,)48 b(J.)g(Rehof,)f(and)g(M.)h(Das.)e
+ (Scalable)4390 3366 y(con)l(text-sensitiv)l(e)h(\015o)l(w)g(analysis)g
+ (using)g(instan)l(tiation)4390 3516 y(constrain)l(ts.)g(In)g
+ Fa(A)l(CM)k(Conf.)f(on)h(Pr)-7 b(o)g(g.)50 b(L)-7 b(ang.)50
+ b(Design)g(and)4390 3665 y(Implementation)p Fm(,)c(V)-12
+ b(ancouv)l(er,)48 b(Canada,)e(June)i(2000.)4166 3831
+ y([8])75 b(R.)47 b(Ghiy)l(a)h(and)f(L.)h(J.)f(Hendren.)h(Connection)f
+ (analysis:)63 b(A)4390 3981 y(practical)47 b(in)l(terpro)t(cedural)g
+ (heap)g(analysis)g(for)g(C.)g Fa(International)4390 4130
+ y(Journal)k(of)g(Par)-7 b(al)7 b(lel)51 b(Pr)-7 b(o)g(gr)g(amming)p
+ Fm(,)44 b(24\(6\):547{578,)f(1996.)4166 4296 y([9])75
+ b(R.)47 b(Ghiy)l(a)h(and)f(L.)g(J.)h(Hendren.)g(Is)e(it)h(a)g(tree,)f
+ (a)h(D)l(A)l(G,)f(or)h(a)g(cyclic)4390 4445 y(graph?)63
+ b(A)46 b(shap)t(e)h(analysis)g(for)g(heap-directed)g(p)t(oin)l(ters)g
+ (in)h(C.)f(In)4390 4595 y Fa(Symp)-7 b(osium)50 b(on)h(Principles)f(of)
+ h(Pr)-7 b(o)g(gr)g(amming)48 b(L)-7 b(anguages)p Fm(,)4390
+ 4744 y(pages)46 b(1{15,)g(1996.)4096 4910 y([10])74 b(M.)48
+ b(Hind.)g(P)l(oin)l(ter)f(analysis:)62 b(ha)l(v)l(en't)48
+ b(w)l(e)f(solv)l(ed)g(this)g(problem)4390 5060 y(y)l(et?)63
+ b(In)47 b Fa(P)-11 b(ASTE)50 b('01)p Fm(,)d(pages)f(54{61.)f(A)l(CM)i
+ (Press,)f(2001.)4096 5226 y([11])74 b(J.)48 b(R.)f(Larus)g(and)g(P)-12
+ b(.)48 b(N.)f(Hil\014nger.)g(Detecting)f(con\015icts)h(b)t(et)l(w)l
+ (een)4390 5375 y(structure)g(accesses.)e(In)i Fa(A)l(CM)k(Conf.)f(Pr)-7
+ b(o)g(g.)50 b(L)-7 b(ang.)50 b(Design)g(and)4390 5525
+ y(Implementation)p Fm(,)c(pages)g(21{34,)g(July)i(1988.)4096
+ 5691 y([12])74 b(C.)47 b(Lattner)g(and)g(V.)g(Adv)l(e.)h(Automatic)e
+ (Po)t(ol)g(Allo)t(cation)g(for)4390 5840 y(Disjoin)l(t)h(Data)f
+ (Structures.)h(In)h Fa(Pr)-7 b(o)g(c.)49 b(A)l(CM)i(Workshop)g(on)4390
+ 5990 y(Memory)f(System)i(Performanc)-7 b(e)p Fm(,)44
+ b(Berlin,)k(Jun)g(2002.)4096 6156 y([13])74 b(C.)47 b(Lattner)g(and)g
+ (V.)g(Adv)l(e.)g(LL)-16 b(VM:)48 b(A)e(Compilation)h(Framew)l(ork)4390
+ 6305 y(for)g(Lifelong)g(Program)e(Analysis)i(and)h(Transformation.)d
+ (In)4390 6455 y Fa(Pr)-7 b(o)g(c.)50 b(2004)g(Int'l)i(Symp)-7
+ b(osium)49 b(on)i(Co)-7 b(de)50 b(Gener)-7 b(ation)51
+ b(and)4390 6604 y(Optimization)46 b(\(CGO\))h(\(to)f(app)-7
+ b(e)g(ar\))p Fm(,)42 b(San)g(Jose,)g(USA,)g(Mar)f(2004.)4096
+ 6770 y([14])74 b(D.)47 b(Liang)g(and)h(M.)f(J.)h(Harrold.)e(E\016cien)l
+ (t)h(p)t(oin)l(ts-to)g(analysis)g(for)4390 6920 y(whole-program)f
+ (analysis.)h(In)g Fa(ESEC)k(/)g(SIGSOFT)g(FSE)p Fm(,)c(pages)4390
+ 7069 y(199{215,)d(1999.)4096 7235 y([15])74 b(D.)47 b(Liang)g(and)h(M.)
+ f(J.)h(Harrold.)e(E\016cien)l(t)h(computation)f(of)4390
+ 7384 y(parameterized)g(p)t(oin)l(ter)h(information)g(for)f(in)l(terpro)
+ t(cedural)4390 7534 y(analysis.)h(In)g Fa(Static)52 b(A)l(nalysis)g
+ (Symp)-7 b(osium)p Fm(,)46 b(July)i(2001.)4096 7700 y([16])74
+ b(E.)47 b(Ruf.)h(E\013ectiv)l(e)f(sync)l(hronization)h(remo)l(v)-8
+ b(al)46 b(for)h(ja)l(v)-8 b(a.)47 b(In)g Fa(Conf.)4390
+ 7849 y(Pr)-7 b(o)g(g.)50 b(L)-7 b(ang.)50 b(Design)g(and)h
+ (Implementation)p Fm(,)46 b(June)i(2000.)4096 8015 y([17])74
+ b(M.)48 b(Sagiv,)f(T.)g(Reps,)g(and)h(R.)f(Wilhelm.)g(Solving)h(shap)t
+ (e-analysis)4390 8165 y(problems)f(in)g(languages)f(with)i(destructiv)l
+ (e)f(up)t(dating.)h Fa(A)l(CM)4390 8314 y(T)-11 b(r)k(ans.)51
+ b(on)g(Pr)-7 b(o)g(g.)50 b(L)-7 b(ang.)50 b(and)h(Systems)p
+ Fm(,)d(20\(1\),)d(Jan.)j(1998.)4096 8480 y([18])74 b(R.)47
+ b(Sedgewic)l(k.)h Fa(A)l(lgorithms)p Fm(.)f(Addison-W)-12
+ b(esley)g(,)48 b(Inc.,)f(Reading,)4390 8630 y(MA,)g(1988.)4096
+ 8796 y([19])74 b(B.)47 b(Steensgaard.)g(P)l(oin)l(ts-to)f(analysis)h(b)
+ l(y)h(t)l(yp)t(e)f(inference)h(of)4390 8945 y(programs)e(with)h
+ (structures)g(and)g(unions.)h(In)f Fa(Computational)4390
+ 9095 y(Complexity)p Fm(,)g(pages)f(136{150,)e(1996.)4096
+ 9261 y([20])74 b(B.)47 b(Steensgaard.)g(P)l(oin)l(ts-to)f(analysis)h
+ (in)g(almost)f(linear)h(time.)g(In)4390 9410 y Fa(Symp)-7
+ b(osium)50 b(on)h(Principles)f(of)h(Pr)-7 b(o)g(gr)g(amming)48
+ b(L)-7 b(anguages)p Fm(,)4390 9560 y(pages)46 b(32{41,)f(Jan)j(1996.)
+ 4096 9726 y([21])74 b(F.)47 b(Vivien)h(and)g(M.)f(Rinard.)h(Incremen)l
+ (talized)e(p)t(oin)l(ter)h(and)4390 9875 y(escap)t(e)f(analysis.)h(In)g
+ Fa(A)l(CM)k(Conf.)g(on)g(Pr)-7 b(o)g(g.)49 b(L)-7 b(ang.)51
+ b(Design)e(and)4390 10025 y(Implementation)p Fm(,)d(2001.)4096
+ 10191 y([22])74 b(R.)47 b(P)-12 b(.)48 b(Wilson)f(and)g(M.)h(S.)f(Lam.)
+ g(E\013ectiv)l(e)g(con)l(text)g(sensitiv)l(e)4390 10340
+ y(p)t(oin)l(ter)g(analysis)g(for)g(C)g(programs.)f(In)h
+ Fa(SIGPLAN)k(Confer)-7 b(enc)g(e)4390 10489 y(on)51 b(Pr)-7
+ b(o)g(gr)g(amming)48 b(L)-7 b(anguage)50 b(Design)f(and)i
+ (Implementation)p Fm(,)4390 10639 y(pages)46 b(1{12,)g(June)i(1995.)p
+ eop end
+ %%Trailer
+ 
+ userdict /end-hook known{end-hook}if
+ %%EOF





More information about the llvm-commits mailing list