]> granicus.if.org Git - re2c/commitdiff
Updated 1994 paper "RE@C: a More Versatile Parser Generator" (finer rendering quality).
authorUlya Trofimovich <skvadrik@gmail.com>
Fri, 26 Jul 2019 10:24:21 +0000 (11:24 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Fri, 26 Jul 2019 10:24:21 +0000 (11:24 +0100)
src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.pdf [deleted file]
src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.ps [new file with mode: 0644]
src/about/sample.bib [new file with mode: 0644]

diff --git a/src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.pdf b/src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.pdf
deleted file mode 100644 (file)
index c661f18..0000000
Binary files a/src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.pdf and /dev/null differ
diff --git a/src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.ps b/src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.ps
new file mode 100644 (file)
index 0000000..2067b58
--- /dev/null
@@ -0,0 +1,5249 @@
+%!PS-Adobe-2.0
+%%Creator: dvipsk 5.526a Copyright 1986, 1993 Radical Eye Software
+%%Title: paper.dvi
+%%Pages: 16
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%DVIPSCommandLine: dvips -o paper.ps paper
+%DVIPSParameters: dpi=300, compressed, comments removed
+%DVIPSSource:  TeX output 1994.04.15:2115
+%%BeginProcSet: texc.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
+/X{S N}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 dup dup 4 get round 4 exch put dup dup 5 get
+round 5 exch put 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 /IE 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 IE N end dup{/foo
+setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /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 dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}
+B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup
+length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B
+/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup 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 /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2
+index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff
+ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
+ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]/id
+ch-image N /rw ch-width 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 dup 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 dup gp add /gp X
+adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{dup
+255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 adv}
+B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 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}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
+}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
+length 1 sub dup 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 dup 1 get dup mul exch 0 get dup mul
+add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
+userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
+/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
+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 /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
+{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
+getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
+ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley
+false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley
+scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave
+transform round exch round exch itransform moveto rulex 0 rlineto 0
+ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta
+0 N /tail{dup /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: 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 false 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 /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 /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
+TeXDict begin 40258431 52099146 1000 300 300 (paper.dvi)
+@start /Fa 43 122 df<126012F0A212701210A31220A312401280040C7B830D>44
+D<126012F0A2126004047B830D>46 D<1303A3497EA2497E130BA2EB11E0A3EB20F0A249
+7E1478A2497EA33801FFFEEB001E0002131F80A248EB0780A2120C001E14C039FF803FFC
+1E1D7E9C22>65 D<B512C0380F0078141C141E140E140FA4140E141E5C14F8EBFFF0EB00
+3C140FEC0780A2EC03C0A5EC078015005C143CB512F01A1C7D9B20>I<90380FE0209038
+7018603801C00439030003E000061301000E13004814605A15201278127000F01400A800
+70142012781238A26C14407E000614806CEB01003801C00638007018EB0FE01B1E7D9C21
+>I<B512C0380F0078141C140715801403EC01C0A215E0140015F0A815E0A2140115C0EC
+0380A2EC0700141E1478B512E01C1C7D9B22>I<B6FC380F000F140380A215801400A214
+801500A3130113FF13011300A3154014001580A31401A2EC0300140FB6FC1A1C7D9B1F>
+I<B512FE380F001E14061402A214031401A214811480A3130113FF13011300A41400A77F
+EAFFF8181C7D9B1E>I<90381FC04090387030C03801C00C38030003000E1301120C001C
+13005A15401278127000F01400A6EC7FF8EC07C00070130312781238A27E120C120E0003
+13053801C008390070304090381FC0001D1E7D9C23>I<39FFF0FFF0390F000F00AC90B5
+FCEB000FAD39FFF0FFF01C1C7D9B22>I<380FFF8038007C00133CB3127012F8A21338EA
+7078EA4070EA30E0EA0F80111D7D9B18>74 D<39FFF00FF8390F0007C0EC030014025C5C
+5C1460148049C7FC13021307497E1317EB23C0EB43E01381EB00F08014788080141F80EC
+078015C015E039FFF03FFC1E1C7D9B23>I<EAFFF8EA0F8090C7FCB01404A3140CA21408
+1418143814F8B5FC161C7D9B1C>I<B46CEB3FE0000FEC3E00A2D80BC0135EA2D809E013
+9EA33908F0011EA2EB7802A3EB3C04A2EB1E08A3EB0F10A2EB07A0A3EB03C0A2EB018012
+1C3AFF8181FFE0231C7D9B29>I<B4EB1FF0390F8003809038C00100120BEA09E0EA08F0
+A21378133C133E131E130F14811307EB03C1EB01E114F113001479147D143D141FA28080
+80121CB46C7E1C1C7D9B22>I<B512E0380F0078141C80801580A51500140E5C1478EBFF
+E090C8FCACEAFFF0191C7D9B1F>80 D<B57E380F00F014388080140FA4140E5C5C14F0EB
+FF80EB01E0EB0070147880A61508A2141CEC1E1038FFF00EC7EA03E01D1D7D9B21>82
+D<3803E080EA0C19EA1005EA3003EA600112E01300A36C13007E127EEA7FE0EA3FFC6CB4
+FC00071380EA007FEB07C0EB03E0130113007EA36C13C0A238E0018038D00300EACE06EA
+81F8131E7D9C19>I<007FB512C038700F010060130000401440A200C014201280A30000
+1400B1497E3803FFFC1B1C7D9B21>I<39FFF01FF0390F000380EC0100B3A26C13021380
+00035BEA01C03800E018EB7060EB0F801C1D7D9B22>I<39FFE003FC001FC712F06C1440
+A26C6C1380A27F0003EB0100A23801E002A2EBF00600001304A2EB7808A2EB7C18EB3C10
+A26D5AA2EB1F60EB0F40A26D5AA36DC7FCA21E1D7E9B22>I<3BFFE07FF03FC03B1F000F
+800F00ED00066CEC8004A213800007496C5A1413A23A03C033E0101421A23A01E061F020
+1440A2D800F06D5AEC8078A20178EB7C80903879003CA2013D013FC7FC013E7FA2011E13
+1E011C130EA2010C130C010813042A1D7E9B2E>I<13201370A313B8A3EA011CA3EA020E
+A2487EA2EA07FF38080380A3381801C0EA380338FE0FF815157F9419>97
+D<EAFFFCEA1C07EB038014C0A414801307381FFF00A2381C038014C0EB01E0A414C01303
+EB078038FFFE0013157F9418>I<EBFC2038078260380E01E0EA1C004813600078132012
+7012F01400A5142012701278003813407E6C138038078300EA00FC13157E9419>I<EAFF
+FCEA1C07EB01C0EB00E0A21470A21478A71470A214E0A2EB01C0EB0700EAFFFC15157F94
+1A>I<B51280EA1C031300A21440A213101400A21330EA1FF0EA1C3013101420A2130014
+60144014C01301B5FC13157F9417>I<EBFC2038078260380E01E0EA1C00481360007813
+20127012F01400A3EB0FF8EB00E0A21270127812387E7E380783603800FC2015157E941B
+>103 D<38FF8FF8381C01C0A9EA1FFFEA1C01A938FF8FF815157F9419>I<EAFF80EA1C00
+B3EAFF8009157F940D>I<38FF83F8381C01E01480140013025B5B5B1330137013B8EA1D
+1C121EEA1C0E7F14801303EB01C014E014F038FF83FC16157F941A>107
+D<EAFFC0001CC7FCAC1480A3130114005B5BB5FC11157F9415>I<00FEEB0FE0001E1400
+00171317A338138027A23811C047A33810E087A2EB7107A3133AA2131CA2123839FE083F
+E01B157F941F>I<38FC03F8381E00E014401217EA138013C01211EA10E01370A2133813
+1CA2130E130714C0130313011300123800FE134015157F9419>I<EA01F8EA070EEA0C03
+001C1380383801C0007813E0EA700000F013F0A7007013E0EA7801003813C0381C0380EA
+1E0738070E00EA01F814157E941A>I<EAFFFCEA1C0FEB038014C0A51480EB0F00EA1FFC
+001CC7FCA9B47E12157F9417>I<EAFFF8EA1C0EEB0780130314C0A314801307EB0E00EA
+1FF8EA1C1C7F7FA31480148414C4EB03CC38FF80F816157F9419>114
+D<EA1F10EA30F0EA603012C01310A213007E127EEA3FC0EA1FE0EA03F0EA007813381318
+1280A21310EAC030EAF060EA8FC00D157E9413>I<387FFFF03860703000401310A20080
+1308A300001300ADEA07FF15157F9419>I<38FF83F8381C00E01440AE000C13C0000E13
+8038060100EA0386EA00FC15157F9419>I<38FF01F8383C00F0001C1340A2001E13C000
+0E1380A238070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3132015157F9419>
+I<38FF87F0381E0380000E1300EA0F026C5AEA038413C8EA01D0EA00F0A21370137813BC
+EA011C7FEA020F487EEB0380000C13C0123C38FE07F815157F9419>120
+D<38FF80FE381E0078000E1320000F13407E3803808013C100011300EA00E2A21374137C
+1338A848B4FC1715809419>I E /Fb 7 118 df<EA0780EA1840EA302012601340EAFF80
+EAC000A413201340EA6180EA3E000B0E7C8D10>101 D<123E120CA41218A41230A41260
+A412C012C8A312D0126007177D9609>108 D<3830783C38498CC6384E0502EA4C06389C
+0E06EA180CA348485A15801418A23960300900140E190E7D8D1D>I<EA0780EA18C0EA30
+40EA6060A212C0A3EA80C0A2EA8180EAC1001246123C0B0E7B8D12>111
+D<EA30F0EA4B18EA4E38EA4C30EA98001218A35AA45AA20D0E7D8D0F>114
+D<EA0780EA0C40EA18E0A2EA3800121EEA1F80EA07C01200126012E0EAC180EAC300123E
+0B0E7D8D0F>I<EA3804EA2C0C124CA2EA8C181218A3EA30301332A21372EA18B4EA0F1C
+0F0E7D8D13>117 D E /Fc 1 59 df<126012F0A2126004047D830A>58
+D E /Fd 1 111 df<EA30F8EA590C124E129C12981218A2EA301813191331A2EA603213
+1C100D7F8C15>110 D E /Fe 22 121 df<EAFF80A2090280880C>45
+D<12E0A303037D820A>I<130813181330A31360A313C0A3EA0180A3EA0300A21206A35A
+A35AA35AA35AA35AA20D217E9812>I<1202120E12FEA2120EB0EAFFE0A20B167D9512>
+49 D<B51280A2380007005B130E5B133C5B137013F0485A5B1203485A90C7FC5A121E12
+1C5A12781270B51280A211177E9616>90 D<EA1FC0EA7FE0EA7070EA40381200A2EA01F8
+121FEA7E3812F012E0A2EAF078EA7FF8EA3FB80D0F7F8E11>97 D<12E0A8EAE7C0EAFFE0
+EAF870EAE038A2131CA51338A2EAF0F0EAFFE0EAE7800E177E9612>I<EA07E0EA1FF8EA
+3838EA7000A25AA512701308EA3838EA1FF8EA07E00D0F7F8E10>I<EA0F80EA1FE0EA38
+70EA7030EA6038EAE018EAFFF8A2EAE000A212601270EA3818EA1FF8EA07E00D0F7F8E10
+>101 D<EA03E01207EA0C20EA1C00A5EAFF80A2EA1C00AD0B1780960B>I<EA0F9FEA1FFF
+EA38F0EA7070A4EA38E0EA3FC0EA6F80EA60001270EA7FF0EA3FF8EA7FFCEA701EEAE00E
+A3EA783CEA3FF8EA0FE010167F8E12>I<12E0A31200A612E0AF03187E9708>105
+D<12E0B3A503177E9608>108 D<38E7E1F838EFF3FC38F87E1E38F03C0EEAE038AB170F
+7E8E1C>I<EAE7E0EAEFF0EAF878EAF03812E0AB0D0F7E8E12>I<EA07C0EA1FF0EA3838EA
+701CA2EAE00EA5EA701CA2EA3C78EA1FF0EA07C00F0F7F8E12>I<EAE7C0EAFFE0EAF870
+EAE038A2131CA51338A2EAF0F0EAFFE0EAE780EAE000A60E157E8E12>I<EAE38012EFEA
+FC005A5AA25AA9090F7E8E0C>114 D<121FEA7FC012E01300A27E127FEA3F80EA0FC0EA
+01E0128012C0EAE1C0127FEA1F000B0F7F8E0E>I<1238A4EAFFC0A2EA3800AA1340EA1F
+C013000A137F920D>I<EAE038AC13F8127FEA3F380D0F7E8E12>I<EA701CEA7838EA3870
+121CEA0EE0EA07C0EA0380A2EA07C0EA0EE0EA0C60EA1C70EA3838EA701CEAF01E0F0F80
+8E10>120 D E /Ff 34 121 df<3801F1C0120312071301120EA7EAFFF1A2EA0E01B012
+1D809C16>13 D<EAFFE0A20B0280890E>45 D<12E0A303037C820C>I<130113031306A3
+130CA31318A31330A31360A213C0A3EA0180A3EA0300A31206A25AA35AA35AA35AA35AA2
+10297E9E15>I<EA03C0EA0FF0EA1FF8EA3C3CEA381CEA700EA3EAE007ADEA700EA3EA38
+1CEA3C3CEA1FF8EA0FF0EA07E0101D7E9B15>I<5A1207123FB4FC12C71207B3A3EAFFF8
+A20D1C7C9B15>I<EA07C0EA1FF0EA3878EA701CEA601EEAE00EEAC00F124013071200A2
+130F130E131E131C133C137813F0EA01E013C0EA0380EA0700120E5A5A5AB5FCA2101C7E
+9B15>I<EA07E0EA1FF0EA3838EA701CEAE01E1240A21200A2131C133C1378EA07F013E0
+13F0EA003C131C131E130FA41280A2EAC01EEA601CEA383CEA1FF0EA07E0101D7E9B15>
+I<133C137C135C13DC1201139C1203A2EA071CA2120EA2121C123C12381278127012F0B5
+12C0A238001C00A7121B7F9A15>I<EA7FFEA2EA7000A7EA73E0EA7FF013F8EA7E3CEA7C
+1E1278130F1200A6EA401E12C0EA603CEA3878EA1FF0EA0FC0101C7E9A15>I<B5FCA2EA
+0007130E131CA213381378137013F013E01201A2EA03C0A3EA0780A413005AA6101B7E9A
+15>55 D<EA03C0EA0FF0EA1C38EA381CEA700C130E12E013061307A5130F1270EA781FEA
+3C3FEA3FF7EA1FE7EA0F86EA000EA2130C131C1318EA2030EA70F0EA3FC0EA0F80101D7E
+9B15>57 D<B512C0A200F0C7FCABB51280A200F0C7FCACB512C0A2121D7C9C19>69
+D<387FFFF0A2380001E0130314C013071480EB0F005B131E133E133C5B13F85B12015B48
+5A12075B120F90C7FC121E123E123C127C1278B512F0A2141D7E9C19>90
+D<EA0FC0EA3FF0EA7FF8EA7038EA401C1200A213FC120F123FEA781C12E0A3EAF07CEA7F
+FC13DCEA3F1C0E127E9114>97 D<12E0ABEAE3E0EAEFF0EAFFF8EAF87CEAF01CEAE01E13
+0EA6131C12F0EAF87CEAFFF8EAEFF0EAE3C00F1D7D9C15>I<EA07E0EA0FF8EA1FFCEA3C
+1CEA700413005AA612701304EA3C1CEA1FFCEA0FF8EA07E00E127E9112>I<130EABEA0F
+8EEA1FEEEA3FFEEA7C3EEA700EA212E0A612F0EA701EEA7C3EEA3FFEEA1FEEEA0F8E0F1D
+7E9C15>I<EA07C0EA1FE0EA3FF0EA7878EA7018EA601CEAFFFCA3EAE000A312701304EA
+3C1CEA3FFCEA1FF8EA07E00E127E9112>I<13FC12011203EA0700120EA7EAFFE0A2EA0E
+00B00E1D809C0D>I<3803C3C0EA0FFF5A381C3800487EA56C5AEA1FF85BEA3BC00038C7
+FCA2EA1FFC13FF481380EA700738E001C0A3EAF003387C0F80383FFF006C5AEA07F8121B
+7F9115>I<12F0A41200A71270B2041D7E9C0A>105 D<12E0AB133C137813F0EAE1E0EAE3
+C0EAE780EAEF00B4FC138012FBEAF9C0EAF1E012E013F013781338133C131E0F1D7D9C14
+>107 D<12E0B3AB031D7D9C0A>I<38E3F03F39EFF8FF80D8FFFD13C039F81F81E038F00F
+00EAE00EAD1B127D9122>I<EAE3E0EAEFF0EAFFF8EAF83CEAF01C12E0AD0E127D9115>I<
+EA03F0EA0FFC487EEA3C0F38780780EA700338E001C0A5EAF00300701380EA7807383C0F
+00EA1FFE6C5AEA03F012127F9115>I<EAE3E0EAEFF0EAFFF8EAF87CEAF01CEAE01E130E
+A6131CEAF03CEAF87CEAFFF8EAEFF0EAE3C0EAE000A80F1A7D9115>I<EAE38012E712EF
+EAFC005A5AA25AAB09127D910E>114 D<EA1FC0EA3FF0127FEAF030EAE000A27E127FEA
+3FC0EA1FE0EA00F01338A21280EAF078EAFFF0EA7FE0EA1FC00D127F9110>I<121CA6EA
+FFE0A2EA1C00AC1320EA1FF0120FEA07C00C187F970F>I<EAE01CAE137CEAFFFCEA7FDC
+EA3F1C0E127D9115>I<39E03E0380A3D870371300EB7707A213733838E38EA33818E18C
+381CC1CC001D13DCA2380D80D8000F13F8A20007137019127F911C>119
+D<3870038038780700EA3C0EEA1C1C120E6C5AEA03F06C5A5B7F487EEA0738EA0E18131C
+487E487E3870038000F013C01212809113>I E /Fg 72 126 df<126012F0AA12701200
+A4126012F0A212600414799312>33 D<EA4040EAE0E0A7EA40400B097D9312>I<EA0E38
+A4EAFFFEA2127FEA1C70A5EA7FFE12FFA2EA38E0A50F147F9312>I<EA3018EA783812FC
+1370A313E0A21278EA31C01201A2EA0380A2EA0700A3EA0E18133C137E121CA31238133C
+EA18180F1A7F9612>37 D<1207EA1F80EA19C01239A3EA3B9E133EEA3E38EA1C70A2EA1E
+E0123E1267EAE7C0EAE3C413CE12E7EA7EFCEA3C380F147F9312>I<126012F012F81278
+1218A31230A2126012C01280050C799312>I<EA01801203EA06005A5A123812301270A2
+5AA71270A21230123812187E7EEA0380120109197B9612>I<128012C012601230121812
+1C120C120EA21207A7120EA2120C121C12181230126012C0128008197C9612>I<1207A3
+EAE738EAFFF8EA7FF0EA1FC0A2EA7FF0EAFFF8EAE738EA0700A30D0E7E9012>I<EA0380
+A6EAFFFEA3EA0380A60F0F7F9112>I<126012F012F8127812181230A212E012C0050979
+8312>I<EAFFF8A30D037E8B12>I<126012F0A212600404798312>I<13181338A21370A2
+13E0A2EA01C0A3EA0380A2EA0700A2120EA25AA35AA25AA25AA25A0D1A7E9612>I<EA07
+C0EA0FE0EA1C70EA3838EA701CA2EAE00EA7131EEA701CA2EA3838EA1C70EA0FE0EA07C0
+0F147F9312>I<1206A2120E121E12FE12EE120EACEAFFE0A20B147D9312>I<EA0F80EA3F
+C0EA70E0EAE0701338A2124012001330137013E013C0EA0180EA030012065AEA18381230
+EA7FF8A20D147E9312>I<EA0FC0EA3FF0EA7838EA701C1220120013381370EA07E013F0
+EA0038131C130EA2124012E0131CEA7838EA3FF0EA0FC00F147F9312>I<12E0EAFFFEA2
+EAE0181338EA007013E013C01201EA0380A2EA0700A4120EA512040F157F9412>55
+D<EA07C0EA1FF0EA3C78EA783CEA701CA3EA3838EA0FE0EA07C0EA3C78EA701CEAE00EA4
+EA701CEA783CEA1FF0EA0FE00F147F9312>I<EA07C0EA1FF0EA3838EA7018EAE01C130C
+130EA2EA701EEA383EEA1FEEEA0FCEEA000E131CA2EA7018133813F0EA3FC0EA0F800F14
+7F9312>I<126012F0A212601200A6126012F0A21260040E798D12>I<126012F0A2126012
+00A6126012F0A212701230A2126012C012800413798D12>I<13381378EA01F0EA03E0EA
+0F80EA1F00123C12F85A7E123C121FEA0F80EA03E0EA01F0EA007813380D117E9212>I<
+EAFFFEA2127FC7FCA3EA7FFE12FFA20F097F8E12>I<124012E07E127C7EEA0F80EA07C0
+EA01E0EA00F8137813F8EA01E0EA07C0EA0F80EA3E005A12F05A12400D137E9312>I<EA
+0380EA07C0A21206A2EA0EE0A4EA0C60EA1C70A3EA1FF0A2EA3838A3EAFC7EA20F147F93
+12>65 D<EAFFE013F0EA3838131CA413381378EA3FF013F8EA381C130EA4131E133CEAFF
+F813F00F147F9312>I<EA03E6EA0FFEEA1C3EEA381EEA700EA21260EAE000A6EA600E12
+70A2EA381CEA1C38EA0FF0EA03E00F147F9312>I<EAFFFEA2EA380EA31300A213E0A212
+3FA21238A21300130EA4EAFFFEA20F147F9312>69 D<EAFFFEA2EA380EA31300A21370A2
+EA3FF0A2EA3870A21300A512FEA20F147F9312>I<EAFFE0A2EA0E00B0EAFFE0A20B147D
+9312>73 D<EAFE7E127EEA3838137013E0A2EA39C0EA3B80123FA213C0123DEA3CE01238
+1370A21338A2EA7E7E12FE0F147F9312>75 D<B4FCA21238AC1304130EA3EAFFFEA20F14
+7F9312>I<EAFC7EA2EA7C7CEA745CEA76DCA61277EA739CA2EA701CA5EAF83EA20F147F
+9312>I<EA3FE0EA7FF0EA7070EAE038AEEA7070EA7FF0EA3FE00D147E9312>79
+D<EAFFE013F8EA383C131C130EA4131C133CEA3FF813E0EA3800A612FEA20F147F9312>
+I<EAFF8013E0EA38F013781338A3137813F0EA3FE013C0EA38E01370A41377A2EAFE3E13
+1C10147F9312>82 D<EA1F30EA3FF01270EAE070A313001270127FEA3FC0EA0FE0EA00F0
+13781338126012E01330EAF070EAFFE0EACF800D147E9312>I<EA7FFE12FFEAE38EA3EA
+0380ADEA0FE0A20F147F9312>I<38FE3F80A238380E00AE6C5A6C5AEA07F06C5A111480
+9312>I<EAFC7EA2EA3838A2EA1C70A2EA0EE0A3EA07C0A2EA0380A7EA0FE0A20F147F93
+12>89 D<EA7FF812FFEAE070A213E01200EA01C0EA0380A2EA0700A2120EA25AEA381CA2
+1270A2EAFFFCA20E147E9312>I<EAFFC0A2EAE000B3A4EAFFC0A20A1A7A9612>I<12C07E
+A21270A27EA27EA37EA27EA2EA0380A2EA01C0A3EA00E0A21370A21338A213180D1A7E96
+12>I<EAFFC0A21201B3A412FFA20A1A7F9612>I<EA1FC0EA3FF0EA3838EA101C1200EA07
+FC123FEA781C12E0A3EA703C383FFF80EA1FCF110E7F8D12>97 D<12F8A21238A4EA3BE0
+EA3FF0EA3C38EA381C130C130EA4130C131CEA3C38EA3FF0EA1BC00F147F9312>I<EA07
+F0EA1FF8EA3838EA7010EA600012E0A41260EA70381238EA1FF0EA07E00D0E7E8D12>I<
+13F8A21338A4EA07B8EA1FF8EA3878EA7038126012E0A41260EA70781238EA1FFEEA0FBE
+0F147F9312>I<EA0780EA1FE0EA38701270EA603812E0EAFFF8A2EAE0001260EA703812
+38EA1FF0EA07C00D0E7E8D12>I<137E13FFEA01C7EA03821380A2EA7FFE12FFEA0380AA
+EA3FF8A21014809312>I<EA0F9EEA1FFFEA38E7EA7070A4EA38E0EA3FC01380EA7000EA
+3FE013F813FCEA701EEAE00EA3EA600CEA783CEA1FF0EA0FE010167F8D12>I<12F8A212
+38A4EA39E0EA3FF0EA3E38123C1238A8EAFE3EA20F147F9312>I<1206120FA21206C7FC
+A3127FA21207AAEAFFF0A20C157D9412>I<12F8A21238A4EA3BFCA2EA38F0EA39E0EA3B
+C0EA3F80A213C0EA3DE0123813701338EAFC7EA20F147F9312>107
+D<B4FCA21207B0EAFFF8A20D147E9312>I<EAF71CEAFFBEEA79E7A2EA71C7A838F9E780
+EAF8E3110E808D12>I<EAF9E0EAFFF0EA3E38123C1238A8EAFE3EA20F0E7F8D12>I<EA0F
+80EA3FE01238EA7070EAE038A5EAF078EA7070EA38E0123FEA0F800D0E7E8D12>I<EAFB
+E0EAFFF0EA3C38EA381C130C130EA4130C131CEA3C38EA3FF0EA3BC0EA3800A512FEA20F
+157F8D12>I<EAFC78EAFDFCEA1F9CEA1E081300121CA7EAFFC0A20E0E7E8D12>114
+D<EA1FF0123FEA607012C0EAE000127FEA3FE0EA0FF0EA0078EA601812E0EAF030EAFFE0
+EADFC00D0E7E8D12>I<1206120EA3EA7FF812FFEA0E00A7131CA3EA07F8EA01E00E127F
+9112>I<EAF8F8A2EA3838A91378EA1FFEEA0FBE0F0E7F8D12>I<EAFC7EA2EA3838A2EA1C
+70A3EA0EE0A4EA07C0A2EA03800F0E7F8D12>I<EAFEFEA2EA701CA3EA3018EA3BB8EA3F
+F8A2EA3AB81238EA1CF0A30F0E7F8D12>I<EA7C7CA2EA1CF0EA0EE0EA0FC01207EA0380
+120713C0EA0EE0EA1EF0EA1C70EAFC7EA20F0E7F8D12>I<EAFC7EA2EA3838121C1370A2
+120E136013E01206A2EA07C01203A21380A3EA7700127F127E12380F157F8D12>I<EA3F
+FC127FEA70381370EA00E0EA01C0EA0380EA0700120EEA1C1C12381270EAFFFCA20E0E7F
+8D12>I<13F81201EA0380EA0700A8120E12FCA2120E7EA8EA0380EA01F812000D1A7E96
+12>I<127812FC120E7EA8EA0380EA01F8A2EA0380EA0700A8120E12FC12780D1A7E9612>
+125 D E /Fh 37 123 df<90383FE3F83901F03F1C3903C03E3E0007137CEA0F80151C15
+00A5B612C0A2390F807C00AE397FE1FFC0A21F1D809C1C>11 D<127812FCA4127806067D
+850D>46 D<1360EA01E0120F12FF12F31203B3A2387FFF80A2111B7D9A18>49
+D<EA07F8EA1FFE38383F8038780FC0EAFC0714E01303A21278EA000714C0A2EB0F80EB1F
+00131E13385B5B38018060EA03001206000813E0381FFFC05A5AB5FCA2131B7E9A18>I<
+EA03F8EA1FFEEA3C1FEB0F80387C07C0127E127C123838000F80A2EB1E005BEA03F8EA00
+1EEB0F80EB07C0A214E01230127812FCA214C038780F80EB1F00EA1FFEEA07F8131B7E9A
+18>I<EB018013031307130F131F133F136F13CF138F1201EA030F1206120C1218123012
+6012C0B512F8A238000F80A63801FFF8A2151B7F9A18>I<B512F814FF390FC01F80EC0F
+C0140715E0A515C0EC0F80EC3F00EBFFFE9038C00F80EC07C015E0140315F0A5EC07E0A2
+EC1FC0B6120014FC1C1C7E9B22>66 D<90381FE0209038FFF8E03803F80F3807C003380F
+800148C7FC123E1560127E127C00FC1400A8007C1460127E123E15C07E390F8001803907
+C003003803F80E3800FFFCEB1FE01B1C7D9B22>I<B6FCA2380FC01F1407801580A2EBC1
+81A3EC800013C313FFA213C313C1A21560A29038C000E015C0A21401A21403EC0F80B6FC
+A21B1C7E9B1F>69 D<D8FFC0EB03FF6D5B000F15F0D80DF0130DA3D80CF81319A2017C13
+31A26D1361A26D13C1A390380F8181A2903807C301A2EB03E6A2EB01FCA3EB00F8A23AFF
+C0701FFFA2281C7E9B2D>77 D<EB3FE03801F07C3803C01E390F800F80391F0007C0001E
+1303003E14E0007E14F0007C1301A200FC14F8A8007C14F0007E1303A2003E14E0003F13
+076C14C0390F800F803903C01E003801F07C38003FE01D1C7D9B24>79
+D<B512F014FE380FC03FEC0F806E7E81A55D4A5A023EC7FCEBFFF0EBC07C80143F6E7EA6
+ED8180A2EC0FC13AFFFC07C300EC01FE211C7E9B24>82 D<3807F820381FFEE0EA3C07EA
+7801EA700012F01460A26C130012FEEAFFE0EA7FFE6C7E1480000F13C06C13E0EA007FEB
+03F01301130012C0A214E07E38F001C0EAFC0338EFFF00EA83FC141C7D9B1B>I<007FB5
+12E0A238781F81007013800060146000E0147000C01430A400001400B03807FFFEA21C1C
+7E9B21>I<EA0FF8EA1C1E383E0F80130714C0121C1200137FEA07E7EA1F07123C127C12
+F8A3EA780B383E13F8EA0FE115127F9117>97 D<B4FCA2121FA9EB3F80EBE1E0EB8070EB
+0078143CA2143EA6143CA21478EB8070381EC1E0381C3F00171D7F9C1B>I<EA03FCEA0E
+0EEA1C1F123C1278130E00F8C7FCA61278EB0180123C381C0300EA0E0EEA03F811127E91
+15>I<EB0FF0A21301A9EA01F9EA0F07EA1C03EA3C011278A212F8A61278A2123CEA1C03
+380F0FFEEA03F9171D7E9C1B>I<EA01FCEA0F07381C0380383C01C0127814E012F8A2B5
+FC00F8C7FCA31278007C1360123C6C13C0380F03803801FC0013127F9116>I<137F3801
+E3803803C7C0EA0787120FEB8380EB8000A5EAFFF8A2EA0F80AEEA7FF8A2121D809C0F>
+I<3803F8F0380E0F38121E381C0730003C1380A4001C1300EA1E0FEA0E0EEA1BF80010C7
+FC1218A2EA1FFF14C06C13E04813F0387801F838F00078A300701370007813F0381E03C0
+3807FF00151B7F9118>I<B4FCA2121FA9EB0FC0EB31E0EB40F0EB80F8A21300AB38FFE7
+FFA2181D7F9C1B>I<121E123FA4121EC7FCA6B4FCA2121FAEEAFFE0A20B1E7F9D0E>I<B4
+FCA2121FA9EB0FF8A2EB0380EB0700130C5B137013F87F13BC133E7F7F1480EB07C0EB03
+E038FFC7FCA2161D7F9C19>107 D<B4FCA2121FB3A7EAFFE0A20B1D7F9C0E>I<39FF0FC0
+7E903831E18F3A1F40F20780D980FC13C0A2EB00F8AB3AFFE7FF3FF8A225127F9128>I<
+38FF0FC0EB31E0381F40F0EB80F8A21300AB38FFE7FFA218127F911B>I<EA01FC380F07
+80381C01C0003C13E0387800F0A200F813F8A6007813F0A2383C01E0381E03C0380F0780
+3801FC0015127F9118>I<38FF3F80EBE1E0381F80F0EB0078147C143C143EA6143C147C
+1478EB80F0EBC1E0EB3F0090C7FCA6EAFFE0A2171A7F911B>I<EAFE3E1347381E8F80A3
+381F070090C7FCAAEAFFF0A211127F9114>114 D<EA1FD8EA3078EA601812E0A2EAF000
+EAFF80EA7FE013F0EA1FF8EA07FCEA007CEAC01CA212E01318EAF830EACFC00E127E9113
+>I<1203A45AA25AA2EA3FFC12FFEA1F00A9130CA4EA0F08EA0798EA03F00E1A7F9913>I<
+38FF07F8A2EA1F00AC1301120F380786FFEA01F818127F911B>I<39FF8FF8FEA2391F03
+E030A201831370000FEBF0601386D807C613C0EBCEF8EBEC790003EB7D80EBF83D0001EB
+3F00A2497E0000131EEBE00EA21F127F9122>119 D<38FFC7FCA2381F8180EA0F833807
+C700EA03EEEA01FC5B1200137C13FEEA01DFEA039F38070F80380607C0380C03E038FF07
+FCA216127F9119>I<38FFC1FCA2381F0060EB80E0000F13C013C03807C180A23803E300
+A2EA01F713F6EA00FE5BA21378A21330A21370EA706012F85BEAF9800073C7FC123E161A
+7F9119>I<383FFF80383C1F00EA303F133E485A13FC5BEA01F01203485AEBC180EA0F81
+121F1303003E1300EA7E07EA7C0FB5FC11127F9115>I E /Fi 55
+124 df<1218123CA31204A21208A21210122012401280060C779C0D>39
+D<EB01C05CA3130391C7FCA35B1306A3B612C0A2D8000CC7FCA2131C1318A313381330A3
+137013601A1A7B9620>43 D<12181238127812381208A21210A212201240A21280050C7D
+830D>I<EAFFC0A30A037D890F>I<1230127812F0126005047C830D>I<14031407140E14
+0C141C141814381430147014E014C013011480130314005B1306130E5B13181338133013
+70136013E05B1201485A90C7FC5A1206120E120C121C121812385A126012E05AA218297F
+9E15>I<133C13C6EA0183EA030312061480120E120C121C1400485AA4EA700EA4485AA3
+5BA21330485A12E0EA60C0EA7180001EC7FC111D7B9B15>I<13021306130C131C137CEA
+039CEA0038A41370A413E0A4EA01C0A4EA0380A41207EAFFF00F1C7C9B15>I<133C13C3
+38010180120214C0EA0441A21208A338108380A238110700EA0E06C65A5B5B13C048C7FC
+12061208485A13021220EA4006EA7E0CEAC7F81283EA80E0121D7C9B15>I<133EEBC180
+EA0101380200C05A1340EA0841A3EB8380EA070338000700130EEA01F8EA0038130CA213
+0EA41270485A12805B1330EA4060EA21C0001FC7FC121D7C9B15>I<EB018014C0EB0380
+A314005BA21306130E130C131C1318A25BA25B134013C6EA018E130E1202EA061C120C12
+18123FEA40F8EA803FEA0038A25BA45B136012247E9B15>I<EBC060EBFFC0481380EBFE
+0090C7FCA21202A4EA0478EA058CEA060612041208EA0007A21306130EA21270130CEAE0
+1CEA80181338EA40305BEA21C0001FC7FC131D7C9B15>I<130FEB308013C0EA01831203
+90C7FC1206120E120C121C13F0EA3B18EA3C0C12381278EA700EA3EA601C12E0A35BA25B
+EA60605BEA2180001EC7FC111D7B9B15>I<131E1361EB8180EA0180380300C0A2380601
+80A3380703001386EA03CC13F01201EA0378EA063CEA081EEA180E1230EA6006A3485AA2
+5BEA60105BEA30C0000FC7FC121D7C9B15>56 D<133C13C6EA0183EA03031206120E000C
+1380121C1400A2485AA35B130EEA181EA2EA0C6CEA079CEA001C1318133813305BEAE0C0
+A2EA81800086C7FC127C111D7B9B15>I<1206120FA212061200AA1230127812F0126008
+127C910D>I<1418A21438A21478A214B8130114381302143CEB041CA213081318131013
+20A2EB7FFCEB401C1380120113001202A2487F120C001C131EB4EBFFC01A1D7E9C1F>65
+D<903803F02090381E0C6090383002E09038E003C03801C001EA038048C7FC000E148012
+1E121C123C15005AA35AA41404A35C12705C6C5B00185B6C485AD80706C7FCEA01F81B1E
+7A9C1E>67 D<48B512E038003C00013813601540A35BA214201500495AA214C013FF3801
+C080A43803810113801402A248485AA2140C5C000E1378B55A1B1C7D9B1C>69
+D<48B512C038003C01EB38001580A35BA214201500495AA214C013FF3801C080A4D80381
+C7FC1380A348C8FCA45AEAFFF01A1C7D9B1B>I<903803F02090381E0C6090383002E090
+38E003C03801C001EA038048C7FC000E1480121E121C123C15005AA35AA2903801FFC090
+38001E00141CA400705BA27E001813786C139038070710D801F8C7FC1B1E7A9C20>I<38
+01FFC038003C001338A45BA45BA4485AA4485AA448C7FCA45AEAFFE0121C7E9B10>73
+D<3801FFE038003C001338A45BA45BA4485AA438038008A31410EA07001430146014E038
+0E03C0B5FC151C7D9B1A>76 D<D801FEEB07F8D8003E1480012EEB0F001517A21527014E
+132E154EA2158E90388E011CA21402A23901070438A21408141000025C1420A214400004
+5C14801400120C381C060139FF861FFC251C7D9B25>I<3901FC03FE39001C0070013C13
+60012E1340A301471380A3EB43809038838100A2138114C1380101C2A2EB00E2A2000213
+E41474A3481338A3000C1318001C1310EAFF801F1C7D9B1F>I<EB07F0EB1C1CEB700E49
+7E3901C00380EA0380EA0700000E14C0121E121C123CA25AA348EB0780A3EC0F00A2140E
+141E5C007013385C00785B383801C06C485AD80E0EC7FCEA03F81A1E7A9C20>I<3801FF
+FC38003C079038380380EC01C0A3EB7003A31580EBE0071500140E14383801FFE001C0C7
+FCA3485AA448C8FCA45AEAFFE01A1C7D9B1C>I<3801FFF838003C0EEB3807EC0380A3EB
+7007A3EC0F00EBE00E5C1470EBFFC0EA01C014601470A2EA0380A4380700F01540A21580
+48137839FFE07900C7121E1A1D7D9B1E>82 D<EB0F84EB304CEB403CEB8018EA01005AA2
+00061310A214001207A2EA03E013FC6CB4FC38007F80EB07C01301A21300A21220A23860
+0180A2EB03001302EAF004EACC18EA83E0161E7D9C17>I<001FB512C0381C070138300E
+0000201480126012405B1280A2000014005BA45BA45BA4485AA41203EA7FFE1A1C799B1E
+>I<397FF0FF80390F001C00000E13181410A3485BA4485BA4485BA44848C7FCA31302A2
+5BA2EA6008EA3030EA1040EA0F80191D779B1F>I<3901FF81FE39001E00F0011C136001
+1E1380EB0E011500EB0F026D5A5C1490EB03A014C01301A28013021304497EEB10701320
+EB60381340EB803C3801001C12020006131E121E39FF80FFC01F1C7E9B1F>88
+D<EA03CCEA063C120CEA181CEA383812301270A2EAE070A413E212C0A2EA61E4EA6264EA
+3C380F127B9115>97 D<123F1207A2120EA45AA4EA39C0EA3E60EA3830A2EA7038A4EAE0
+70A3136013E0EAC0C012C1EA6180EA6300123C0D1D7B9C13>I<EA01F0EA0708120CEA18
+1CEA3838EA30001270A25AA513081310EA6020EA30C0EA1F000E127B9113>I<EB1F8013
+03A2EB0700A4130EA4EA03DCEA063C120CEA181CEA383812301270A2485AA413E212C0A2
+EA61E4EA6264EA3C38111D7B9C15>I<EA01E0EA0710120CEA1808EA381012701360EA7F
+80EAE000A51308EA60101320EA30C0EA1F000D127B9113>I<EB03C0EB0670130CEB1C60
+1400A25BA53803FF8038007000A55BA5485AA5485AA390C7FCA25A12C612E65A12781425
+819C0D>I<13F3EA018FEA030FEA0607EA0E0E120C121CA2EA381CA413381230A2EA1878
+13F0EA0F701200A213E0A2EAC0C012E1EAC300127E101A7D9113>I<EA0FC01201A2485A
+A448C7FCA4EA0E78138CEA0F0E120E121CA4485AA35B00701380A21370EB7100EAE032EA
+601C111D7D9C15>I<EA01801203EA0100C7FCA7121C12261247A2128EA2120E5AA35AA2
+1271A31272A2123C091C7C9B0D>I<EA1F801203A2EA0700A4120EA45AA45AA45AA412E4
+A412681238091D7C9C0B>108 D<393C1E078039266318C0394683A0E0384703C0008E13
+80A2120EA2391C0701C0A3EC0380D8380E1388A2EC0708151039701C032039300C01C01D
+127C9122>I<EA3C3CEA2646EA4687EA4707128EA2120EA2EA1C0EA35B00381340A21338
+148038701900EA300E12127C9117>I<EA01E0EA0718EA0C0C12181238EA300E1270A2EA
+E01CA31318133813301360EA60C0EA3180EA1E000F127B9115>I<EA07873804D9803808
+E0C0A23811C0E0A21201A2380381C0A31480EA070314005B1306EA0E8C137090C7FCA25A
+A4123CB47E131A7F9115>I<EA03C4EA062CEA0C3CEA181CEA383812301270A2EAE070A4
+13E012C0A21261EA63C0123D1201A2EA0380A41207EA3FF00E1A7B9113>I<EA3C3CEA26
+C2EA4687EA4707EA8E061300120EA25AA45AA45A123010127C9112>I<EA01F0EA060812
+0C131CEA1818EA1C00121F13C0EA0FF01207EA00781338EA603012E012C0EA8060EA60C0
+EA1F000E127D9111>I<13C01201A3EA0380A4EAFFE0EA0700A3120EA45AA4EA3840A313
+80EA1900120E0B1A7D990E>I<EA1E03EA27071247A2EA870EA2120EA2485AA438383880
+A21218EB3900EA1C59EA078E11127C9116>I<381E0183382703871247148338870701A2
+120EA2381C0E02A31404EA180C131C1408001C1310380C26303807C3C018127C911C>
+119 D<EA070EEA19913810E38012203841C30013C01201A2485AA4EA07021267EAE70412
+CBEA8B08EA70F011127D9113>I<EA1E03EA27071247A2EA870EA2120EA2EA1C1CA4EA38
+38A21218A2EA1C70EA07F0EA0070A213E0EAE0C012E1EA8180EA4700123C101A7C9114>
+I<B512C012017C8B15>123 D E /Fj 38 123 df<90380FF83F90397FFDFFC03A01F81F
+E3E03903E03F87EA07C0D80F801307ED03C06EC7FCA6B612FCA2260F801FC7FCB2397FF0
+FFF0A223237FA221>11 D<1238127C12FE12FFA2127F123B1203A212071206A2120C121C
+12181270122008117CA210>39 D<1238127C12FEA3127C123807077C8610>46
+D<13181378EA01F812FFA21201B3A7387FFFE0A213207C9F1C>49
+D<EA03FCEA0FFF383C1FC0387007E0007C13F0EAFE0314F8A21301127CEA3803120014F0
+A2EB07E014C0EB0F80EB1F00133E13385BEBE018EA01C0EA0380EA0700000E1338380FFF
+F05A5A5AB5FCA215207D9F1C>I<13FE3807FFC0380F07E0381E03F0123FEB81F8A3EA1F
+0314F0120014E0EB07C0EB1F803801FE007F380007C0EB01F014F8EB00FCA2003C13FE12
+7EB4FCA314FCEA7E01007813F8381E07F0380FFFC03801FE0017207E9F1C>I<14E01301
+1303A21307130F131FA21337137713E7EA01C71387EA03071207120E120C121812381270
+12E0B512FEA2380007E0A7EBFFFEA217207E9F1C>I<00101320381E01E0381FFFC01480
+14005B13F8EA1BC00018C7FCA4EA19FCEA1FFF381E0FC0381807E01303000013F0A214F8
+A21238127C12FEA200FC13F0A2387007E0003013C0381C1F80380FFF00EA03F815207D9F
+1C>I<1470A214F8A3497EA2497EA3EB06FF80010E7FEB0C3FA201187F141F01387FEB30
+0FA201607F140701E07F90B5FCA239018001FCA200038090C7FCA20006147FA23AFFE00F
+FFF8A225227EA12A>65 D<B67E15E03907F001F86E7E157EA2157FA5157E15FE5DEC03F8
+90B55AA29038F001FCEC007E811680151F16C0A6ED3F80A2ED7F00EC01FEB612F815C022
+227EA128>I<D903FE138090381FFF819038FF01E33901F8003FD803E0131F4848130F48
+481307121F48C71203A2481401127EA200FE91C7FCA8127EED0180127F7E15036C6C1400
+120F6C6C1306D803F05B6C6C13386CB413F090381FFFC0D903FEC7FC21227DA128>I<B6
+7E15F03907F003FCEC007E81ED1F80ED0FC0ED07E0A216F01503A316F8A916F0A3ED07E0
+A2ED0FC0ED1F80ED3F00157EEC03FCB612F0158025227EA12B>I<B612FCA23807F00015
+3C151C150C150EA215061418A3150014381478EBFFF8A2EBF07814381418A21503A21400
+1506A3150EA2151E153EEC01FCB6FCA220227EA125>I<B612F8A23807F001EC00781538
+1518151CA2150CA21418A21500A214381478EBFFF8A2EBF07814381418A491C7FCA8B512
+E0A21E227EA123>I<D903FE134090391FFFC0C090387F00F1D801F8133F4848130FD807
+C01307000F1403485A48C71201A2481400127EA200FE1500A791380FFFFC127E007F9038
+001FC0A27EA26C7E6C7E6C7E6C7ED801FC133F39007F80E790381FFFC30103130026227D
+A12C>I<B512E0A2D807F0C7FCB31518A41538A21570A215F014011407B6FCA21D227EA1
+22>76 D<EB07FC90383FFF809038FC07E03903F001F848486C7E4848137E48487FA248C7
+EA1F80A24815C0007E140FA200FE15E0A9007E15C0007F141FA26C15806D133F001F1500
+6C6C137E6C6C5B6C6C485A3900FC07E090383FFF80D907FCC7FC23227DA12A>79
+D<B6FC15E03907F007F0EC01FC1400157EA2157FA5157EA215FC1401EC07F090B512E015
+0001F0C7FCADB57EA220227EA126>I<B512FEECFFC03907F007F0EC01F86E7E157E157F
+A6157E5D4A5AEC07F090B512C05D9038F00FE06E7E6E7E6E7EA81606EC00FEEDFF0CB538
+803FF8ED0FF027227EA12A>82 D<007FB61280A2397E03F80F0078140700701403006014
+0100E015C0A200C01400A400001500B3A20003B512F8A222227EA127>84
+D<B53A0FFFF01FFEA2260FF00090C712E000076E14C0A26C6C9138800180153F6D150300
+0103C01300A26C6C90387FE006156F7F6D9038C7F00CA20280EBF81C90263F81831318A2
+D91FC36D5A150114E3903A0FE600FE60A202F6EBFFE0D907FC6D5AA201035D4A133FA26D
+486DC7FCA20100141E4A130EA237227FA13A>87 D<EA07FC381FFF80383F07C0EB03E013
+0114F0121E1200A2133FEA03FDEA1FC1EA3F01127E12FCA4EA7E02EB0CF8381FF87F3807
+E03F18167E951B>97 D<EBFF80000713E0380F83F0EA1F03123E127E387C01E090C7FC12
+FCA6127C127EA2003E13306C1360380FC0E03807FF803800FE0014167E9519>99
+D<EB01FEA2EB003EABEA01FC3807FFBE380F81FE381F007E003E133E127E127C12FCA812
+7CA26C137E001E13FE380F83BE3907FF3FC0EA01FC1A237EA21F>I<13FE3807FF80380F
+87C0381E01E0003E13F0EA7C0014F812FCA2B5FCA200FCC7FCA3127CA2127E003E13186C
+1330380FC0703803FFC0C6130015167E951A>I<3803FC1E380FFF7F381F0F8F383E07CF
+383C03C0007C13E0A5003C13C0EA3E07381F0F80EBFF00EA13FC0030C7FCA21238383FFF
+806C13F06C13F84813FCEA380048133E00F0131EA40078133C007C137C383F01F8380FFF
+E00001130018217E951C>103 D<B4FCA2121FABEB07E0EB1FF8EB307CEB403CEB803EA2
+1300AE39FFE1FFC0A21A237EA21F>I<121C123E127FA3123E121CC7FCA7B4FCA2121FB2
+EAFFE0A20B247EA310>I<3AFF07F007F090391FFC1FFC3A1F303E303E01401340496C48
+7EA201001300AE3BFFE0FFE0FFE0A22B167E9530>109 D<38FF07E0EB1FF8381F307CEB
+403CEB803EA21300AE39FFE1FFC0A21A167E951F>I<13FE3807FFC0380F83E0381E00F0
+003E13F848137CA300FC137EA7007C137CA26C13F8381F01F0380F83E03807FFC03800FE
+0017167E951C>I<38FF0FE0EB3FF8381FF07CEB803E497E1580A2EC0FC0A8EC1F80A290
+38803F00EBC03EEBE0FCEB3FF8EB0FC090C8FCA8EAFFE0A21A207E951F>I<EAFE1FEB3F
+C0381E67E013C71387A2381F83C090C7FCADEAFFF0A213167E9517>114
+D<EA0FF3EA3FFFEA781FEA6007EAE003A212F000FCC7FCEA7FE013F8EA3FFEEA0FFF1201
+38000F80EAC007130312E0A238F00700EAFC0EEAEFFCEAC7F011167E9516>I<487EA412
+03A21207A2120F123FB5FCA2EA0F80ABEB8180A5EB8300EA07C3EA03FEEA00F811207F9F
+16>I<38FF01FEA2381F003EAF147E14FE380F81BE3907FF3FC0EA01FC1A167E951F>I<39
+FFE01FE0A2390F800600A2EBC00E0007130CEBE01C00031318A26C6C5AA26C6C5AA2EB7C
+C0A2137F6D5AA26DC7FCA2130EA21B167F951E>I<387FFFF0A2387C03E0387007C0EA60
+0F38E01F8000C01300133E137EC65A5B485A00031330EA07E013C0380F8070121F383F00
+60003E13E0EA7C03B5FCA214167E9519>122 D E /Fk 4 122 df<EA07E0EA1FF8EA3FFC
+EA7FFEA2B5FCA6EA7FFEA2EA3FFCEA1FF8EA07E010107E9115>15
+D<133C13E0EA01C013801203AD13005A121C12F0121C12077E1380AD120113C0EA00E013
+3C0E297D9E15>102 D<12F0121C12077E1380AD120113C0EA00E0133C13E0EA01C01380
+1203AD13005A121C12F00E297D9E15>I<12021207A61202A3EA7270EAFFF8EA7270EA02
+00A21207B11202A60D267E9C12>121 D E /Fl 12 114 df<38078010EA1FC0383FE020
+EA7FF03860304038C01080128038000900A2130AA3130CA21308A31318A35BA45BA21340
+141B7F9115>13 D<126012F0A2126004047C830C>58 D<126012F0A212701210A41220A2
+12401280040C7C830C>I<140CA2141CA2143C147C145C149C148EEB010EA213021304A2
+1308A213101320EB3FFEEB4007A21380EA0100A21202A21206121E39FF807FF01C1D7F9C
+1F>65 D<3801FFE038003C001338A45BA45BA4485AA438038002A31404EA0700140C1418
+1438000E13F0B5FC171C7E9B1C>76 D<3801FFFE39003C03C090383800E015F01570A249
+13F0A3EC01E001E013C0EC0780EC1E00EBFFF03801C03080141CA2EA0380A43807003C15
+08A2151048131E39FFE00E20C7EA07C01D1D7E9B20>82 D<EB0FC1EB3033EB400FEB8006
+1201EA0300A200061304A200071300A27FEA03F06CB4FC6C13C0EB3FE01303EB00F01470
+1430A21220A200601360A214C0148038F00300EACC06EA83F8181E7E9C19>I<EA01E3EA
+0717EA0C0F1218EA380E12301270A2485AA4EB3880A3EA607838319900EA1E0E11127E91
+16>97 D<123F1207A2120EA45AA4EA39E0EA3A30EA3C1812381270131CA3EAE038A31330
+1370136013C01261EA2300121E0E1D7E9C12>I<EA01F0EA030C120EEA1C1EEA383CEA30
+18EA7000A25AA51304EA60081310EA3060EA1F800F127E9112>I<EA381F384E61803846
+81C0EA4701128F128E120EA2381C0380A3EB070000381310A2130E142038700640383003
+8014127E9119>110 D<EA01C2EA0626EA0C1E1218EA381C12301270A2EAE038A41370A3
+EA60F0EA23E0121C1200A2EA01C0A41203EA1FF80F1A7E9113>113
+D E /Fm 77 125 df<126012F0AF12601200A4126012F0A212600419779816>33
+D<EAE038EAF078A7EAE038A2EA60300D0B7C9816>I<EA0387A6387FFFC0B512E0A23807
+0E00A3EA0E1CA4B512E0A26C13C0381C3800A613197F9816>I<13C01201A3EA07F0EA1F
+FC48B4FCEA7DCF38F1C78012E1A338F1C300EA79C0127FEA1FF0EA07FCEA01FE13CFEBC7
+80EAF1C3A3EAE1C712F13879DF00EA3FFE6C5AEA07E0EA01C0A2120011207E9C16>I<EA
+0380EA07E0120FEA1E70121CA3EB77E013E7121D380FC700138E130E121EEA3F1C127FEA
+739CEAE3F812E138E0F1C0A2EA71F9EA7FFF383F9F80381E070013197F9816>38
+D<1218123C123E121E120EA3121E121C123C127812F01260070D799816>I<13E01201EA
+07C013005A121E5A123812781270A312F05AA77E1270A312781238123C7E7E7E13C0EA01
+E012000B217A9C16>I<12E07E127C121C121E7EEA0780120313C01201A313E01200A712
+0113C0A3120313801207EA0F00121E121C127C12F05A0B217C9C16>I<EA01C0A4EA71C7
+38F9CF80387FFF00EA1FFCEA07F0A2EA1FFCEA7FFF38F9CF803871C700EA01C0A411127E
+9516>I<EA01C0A8B51280A33801C000A811137E9516>I<1238127C127EA2123E120E121E
+123C127C12F81260070B798416>I<B51280A311037E8D16>I<127012F8A3127005057884
+16>I<EB01801303A2EB0700A2130EA25BA25BA25BA25BA2485AA2485AA248C7FCA2120E
+A25AA25AA25AA25AA25A11207E9C16>I<EA03E0EA0FF8487EEA1E3CEA380EEA780FEA70
+07A238E00380A8EAF00700701300A2EA780FEA3C1E6C5AEA1FFC6C5AEA03E011197E9816
+>I<EA01801203A21207120F127F12FF12731203AEEA7FF813FC13F80E197C9816>I<EA07
+E0EA1FF8EA7FFEEA783FEAF00FEB07801303A21200A2130714005B131E5B5B5BEA03E0EA
+078048C7FC381E0380123CEA7FFFB5FC7E11197E9816>I<EA07E0EA1FFCEA7FFEEA781F
+7F7F12005BA2133EEA07FC5B7FEA001E130714801303A212F013071400EAF81FEA7FFE6C
+5AEA07E011197E9816>I<137C13FC13DC1201EA039CA2EA071C120F120E121E123C1238
+127812F0B512E0A338001C00A53801FFC0A313197F9816>I<EA3FFEA30038C7FCA7EA3B
+F0EA3FFC7FEA3C0FEA3007000013801303126012F01307EB0F006C5AEA7FFEEA1FF8EA07
+E011197E9816>I<13F8EA03FEEA0FFFEA1F0F123E123CEA78060070C7FC12F0EAF3F8EA
+EFFE12FFEAF80F38F00780A2EAE00312F0A21270EA7807EB0F006C5AEA1FFEEA0FF8EA03
+E011197E9816>I<12E0B51280A338E00F00131EEA001C5B137813705BA2485AA3485AA4
+48C7FCA7111A7E9916>I<EA07F0EA1FFC487EEA7C1F38F00780EAE003A338700700EA7C
+1FEA1FFCEA07F0EA1FFCEA3C1EEA700700F01380EAE003A3EAF00700701300EA7C1FEA3F
+FE6C5AEA07F011197E9816>I<EA03E0EA0FF8EA3FFCEA7C1EEA780F487E12E01480A213
+03EAF007A2EA780FEA3FFF13FBEA0FE3EA00071400EA300FEA780E131E137CEA7FF8EA3F
+E0EA0F8011197E9816>I<127012F8A312701200A8127012F8A312700512789116>I<1238
+127CA312381200A81238127CA3123C121C123C123812F812F012600618799116>I<EB01
+801307131FEB3E0013F8485AEA07C0485A003EC7FC12FC12F012FC123EEA0F806C7EEA01
+F06C7E133EEB1F801307130111157E9616>I<EA7FFFB51280A2C8FCA5B51280A26C1300
+110B7E9116>I<12C012F012FC123EEA0F806C7EEA01F06C7E133EEB1F801307131FEB3E
+0013F8485AEA07C0485A003EC7FC12FC12F012C011157E9616>I<EA0FE0EA3FF8EA7FFC
+EAF01E130EA2EA601EEA007C13F8EA01F0EA03E013C01380A41300C7FCA41203EA0780A2
+EA03000F197D9816>I<13E0487EA213B0A2EA03B8A31318EA071CA5EA0E0EA2EA0FFEA2
+487EEA1C07A3387F1FC000FF13E0007F13C013197F9816>65 D<3801F180EA07FF5AEA1F
+0FEA3C0712781303127000F0C7FC5AA77E387003801278A2EA3C07381F0F00EA0FFE6C5A
+EA01F011197E9816>67 D<EA7FF8EAFFFE6C7EEA1C0FEB0780EB03C01301A214E01300A8
+EB01C0A21303EB0780130F387FFF00485AEA7FF81319809816>I<387FFFC0B5FC7EEA1C
+01A490C7FCA2131CA2EA1FFCA3EA1C1CA290C7FC14E0A5EA7FFFB5FC7E13197F9816>I<
+B512E0A3EA1C00A41400A2131CA2EA1FFCA3EA1C1CA290C7FCA6B47E7F5B13197F9816>
+I<387F1FC038FFBFE0387F1FC0381C0700A7EA1FFFA3EA1C07A9387F1FC038FFBFE0387F
+1FC013197F9816>72 D<EAFFFEA3EA0380B3EAFFFEA30F197D9816>I<387F0FE038FF8F
+F0387F0FE0381C0780EB0F00130E5B133C5B5B5BEA1DF0121F7F1338EA1E1C121C7FA27F
+A2EB0380387F07E038FF8FF0387F07E01419809816>75 D<EAFFC0A3001CC7FCAE144014
+E0A4B5FCA313197F9816>I<38FC07E0EAFE0FA2383A0B80EA3B1BA513BBEA39B3A413F3
+EA38E3A21303A538FE0FE0A313197F9816>I<387E1FC038FF3FE0387F1FC0381D070013
+87A313C7A2121CA213E7A31367A21377A21337A31317EA7F1FEAFF9FEA7F0F13197F9816
+>I<EA1FFC487E487EEA780F38F00780EAE003AEEAF007A238780F00EA7FFF6C5A6C5A11
+197E9816>I<EA7FF8EAFFFE6C7E381C0F80130314C01301A313031480130F381FFF005B
+13F8001CC7FCA7127F487E6CC7FC12197F9816>I<EA7FE0EAFFF86C7EEA1C1E7F7FA45B
+131EEA1FFC5B7FEA1C1C7FA414201470A2387F07E0EAFF87387F03C014197F9816>82
+D<EA07E3EA1FFF127FEA781F487E487EA290C7FC7E1278EA7F80EA1FF0EA07FCC67E130F
+EB07801303A212E0A2EAF00738F80F00EAFFFE5BEAC7F011197E9816>I<387FFFE0B5FC
+A2EAE0E0A400001300AFEA07FC487E6C5A13197F9816>I<387F07F038FF8FF8387F07F0
+381C01C0B0380E0380A23807070013FF6C5AEA00F81519809816>I<387F1F80133F131F
+380E1E00131CEA073C1338EA03B813F012015B120012017F120313B81207131CA2EA0E0E
+A2487E387F1FC000FF13E0007F13C013197F9816>88 D<38FE0FE0EAFF1FEAFE0F381C07
+00A2EA0E0EA26C5AA3EA03B8A2EA01F0A26C5AA8EA03F8487E6C5A13197F9816>I<EAFF
+F0A3EAE000B3A8EAFFF0A30C20789C16>91 D<12C07EA21270A27EA27EA27EA27EA26C7E
+A26C7EA26C7EA21370A27FA27FA27FA27FA2EB0380A2130111207E9C16>I<EAFFF0A3EA
+0070B3A8EAFFF0A30C207F9C16>I<120C121E123C1278127012F012E0A312F012F81278
+1230070D789B16>96 D<EA1FE0EA7FF87FEA783CEA301EEA000EA2EA03FE121FEA7E0E12
+F012E0A2EAF01EEAF83E387FFFE0EA3FE7EA0F8313127E9116>I<127E12FE127E120EA4
+133EEBFF80000F13C0EB83E01301380E00F0A21470A414F0000F13E01301EB83C013FF00
+0E1300EA063C1419809816>I<EA03F8EA0FFE121FEA3C1EEA780CEA700012F05AA47EEA
+70071278EA3E0FEA1FFEEA0FFCEA03F010127D9116>I<133F5B7F1307A4EA03C7EA0FF7
+EA3FFFEA3C1F487E487EA212E0A412F05BEA781FEA7C3F383FFFE0381FF7F03807C7E014
+197F9816>I<EA03E0EA0FF8EA1FFCEA3C1EEA780EEA700712E0B5FCA3EAE000A2EA7007
+1278EA3C0FEA1FFEEA0FFCEA03F010127D9116>I<131FEB7F8013FFEA01E7EBC30013C0
+A2EA7FFFB5FCA2EA01C0ACEA3FFE487E6C5A11197F9816>I<3803E3C0380FFFE05A381E
+3CC0383C1E00EA380EA3EA3C1E6C5AEA1FFC5BEA3BE00038C7FCA2EA1FFC13FF4813C0EA
+780338F001E0EAE000A3EAF001387C07C0383FFF80380FFE00EA03F8131C7F9116>I<12
+7E12FE127E120EA4133C13FF000F138013871303A2120EA9387FC7F038FFE7F8387FC7F0
+1519809816>I<EA0180EA03C0A2EA0180C7FCA4EA7FC0A31201ACEA7FFFB5FC7E101A7D
+9916>I<EAFFC0A31201B3B51280A311197E9816>108 D<38F9C38038FFEFC0EBFFE0EA3E
+7CEA3C78EA3870AA38FE7CF8A2EB3C781512809116>I<EA7E3CEAFEFF007F1380EA0F87
+1303A2120EA9387FC7F038FFE7F8387FC7F01512809116>I<EA03E0EA0FF8487EEA3C1E
+487EEA700738E00380A5EAF00700701300EA780FEA3C1EEA1FFC6C5AEA03E011127E9116
+>I<EA7E3E38FEFF80007F13C0380F83E01301380E00F0A21470A414F0000F13E01301EB
+83C013FF000E1300133C90C7FCA6EA7FC0487E6C5A141B809116>I<EA07C7EA1FF748B4
+FCEA7C3FEA781F487E7F12E0A412F05BEA781FEA7C3FEA3FFFEA1FF7EA07C7EA0007A6EB
+3FE0EB7FF0EB3FE0141B7E9116>I<38FF0FC0EB3FE0137F3807F040EBE0005B5BA290C7
+FCA7EAFFFCA313127F9116>I<EA0FECEA3FFC127FEAF03CEAE01CA2EAF000EA7F80EA1F
+F0EA07FCEA003EEAE00EA212F0EAF81EEAFFFC13F8EAC7E00F127D9116>I<12035AA4EA
+7FFFB5FCA20007C7FCA75BEB0380A2130713873803FF005BEA00F811177F9616>I<387E
+1F80EAFE3FEA7E1FEA0E03AA1307EA0F0FEBFFF06C13F83803E3F01512809116>I<38FF
+1FE013BF131F38380380A413E33819F300A213B3EA1DB7A4EA0F1EA313127F9116>119
+D<387F1FC0133F131F380F1C00EA073CEA03B813F012016C5A12017FEA03B8EA073C131C
+EA0E0E387F1FC038FF3FE0387F1FC013127F9116>I<387F1FC038FF9FE0387F1FC0381C
+0700120E130EA212075BA2EA039CA21398EA01B8A2EA00F0A35BA3485A1279127BEA7F80
+6CC7FC123C131B7F9116>I<383FFFC05AA238700780EB0F00131EC65A5B485A485AEA07
+8048C7FC381E01C0123C1278B5FCA312127F9116>I<12E0B3AE0320779C16>124
+D E /Fn 10 58 df<121FEA3180EA60C0EA4040EAC060A8EA4040EA60C0EA3180EA1F00
+0B107F8F0F>48 D<120C123C12CC120CACEAFF8009107E8F0F>I<121FEA6180EA40C0EA
+806012C01200A213C0EA0180EA030012065AEA10201220EA7FC012FF0B107F8F0F>I<12
+1FEA2180EA60C0A2120013801201EA0F00EA00801340136012C0A2EA8040EA6080EA1F00
+0B107F8F0F>I<1203A25A5A120B121312331223124312C3EAFFE0EA0300A4EA1FE00B10
+7F8F0F>I<EA2080EA3F00122C1220A3122FEA3080EA2040EA0060A312C0EA80C0EA6180
+EA1F000B107F8F0F>I<EA0780EA1840EA30C0126013005A12CFEAF080EAE040EAC060A3
+1240EA60C0EA3080EA1F000B107F8F0F>I<1240EA7FE013C0EA8080A2EA010012025AA2
+120C1208A21218A50B117E900F>I<121FEA3180EA60C0A3EA7180EA3F00120FEA3380EA
+61C0EAC060A3EA4040EA6080EA1F000B107F8F0F>I<121FEA3180EA60C0EAC0401360A3
+EA40E01221EA1E6012001340EA60C01380EA4300123E0B107F8F0F>I
+E /Fo 66 124 df<EBFCF83807839CEA0E07001C13081400A5B512E0381C0700AC38FF1F
+E01617809615>11 D<13FCEA0782EA0E07121C130290C7FCA4B5FCEA1C07AC38FF1FE013
+17809614>I<13FFEA0707120E121CA6B5FCEA1C07AC38FFBFE01317809614>I<12011202
+1204120C1218A21230A212701260A312E0AA1260A312701230A21218A2120C1204120212
+0108227D980E>40 D<12801240122012301218A2120CA2120E1206A31207AA1206A3120E
+120CA21218A2123012201240128008227E980E>I<126012F0A212701210A21220A21240
+A2040A7D830A>44 D<EAFF80A2090280870C>I<126012F0A2126004047D830A>I<130813
+181330A31360A313C0A3EA0180A3EA0300A21206A35AA35AA35AA35AA35AA20D217E9812
+>I<12035AB4FC1207B1EA7FF00C157E9412>49 D<EA0F80EA30E0EA4070EA8030EAC038
+12E0124012001370A2136013C0EA0180EA03001206EA0C081208EA1018EA3FF0127F12FF
+0D157E9412>I<EA0FE0EA3030EA6018EA701CA21200131813381360EA07E0EA00301318
+130C130EA212E0A2EAC00CEA4018EA3030EA0FE00F157F9412>I<1330A2137013F01201
+1370120212041208121812101220124012C0EAFFFEEA0070A5EA03FE0F157F9412>I<EA
+2030EA3FE013C0EA24001220A4EA2F80EA30E0EA2070EA00301338A2124012E0A2EA8030
+EA4060EA20C0EA1F000D157E9412>I<EA01F0EA0608EA080CEA181C1230EA7000126012
+E0EAE3E0EAEC30EAF018130CEAE00EA31260A2EA300C1318EA1830EA07C00F157F9412>
+I<1240EA7FFE13FC13F8EAC008EA80101320EA00401380A2EA0100A25A12021206A2120E
+A512040F167E9512>I<EA07C0EA1830EA30181260EAE00CA2130EA3EA601E1230EA186E
+EA0F8EEA000E130C131CEA7018A2EA6030EA20C0EA1F800F157F9412>57
+D<B512FCA2C8FCA6B512FCA2160A7E8C1B>61 D<13101338A3135CA3138EA3EA0107A200
+031380EA0203A23807FFC0EA0401A2380800E0A21218003813F038FE03FE17177F961A>
+65 D<EAFFFE381C0380EB00E014601470A414E0EB01C0381FFF8014C0381C00E0147014
+301438A4147014E0EB01C0B5120015177F9619>I<EBFC1038038330380E00B048137048
+1330123000701310126012E01400A51410126012700030132012386C13406C1380380383
+00EA00FC14177E9619>I<B5FC381C01C0EB00E0143014381418141C140C140EA7140C14
+1CA2143814301460EB01C0B5120017177F961B>I<B512E0EA1C00146014201410A3EB04
+00A3130CEA1FFCEA1C0C13041408A2130014181410A2143014F0B5FC15177F9618>I<B5
+12E0EA1C00146014201410A3EB0400A3130CEA1FFCEA1C0C1304A390C7FCA6EAFFC01417
+7F9617>I<EB7E0838038198380600584813384813185A00701308A25A1400A4EB03FEEB
+00381270A212307E7E7E380380D838007F0817177E961C>I<EAFFE0EA0E00B3A3EAFFE0
+0B177F960D>73 D<38FF80FE381C0078146014401480EB0100130613085B13381378139C
+EA1D0E121EEA1C07EB0380EB01C0A2EB00E014701478147C38FF80FF18177F961B>75
+D<EAFFC0001CC7FCAD1420A31460A2144014C01303B5FC13177F9616>I<00FEEB03F800
+1E14C000171305A338138009A23811C011A33810E021A2EB7041A3EB3881A2EB1D01A213
+0EA2123839FE040FF81D177F9620>I<00FC13FE001E1338001F13101217EA1380EA11C0
+A2EA10E013701338A2131C130E130F1307EB0390EB01D0A2EB00F014701430123800FE13
+1017177F961A>I<13FCEA0303380E01C0381C00E0481370003013300070133800601318
+00E0131CA700701338A200301330003813706C13E0380E01C038030300EA00FC16177E96
+1B>I<EAFFFE381C0380EB00C014601470A4146014C0EB0380381FFE00001CC7FCAAB47E
+14177F9618>I<EAFFFC381C0380EB00C014E01470A414E014C0EB0380381FFE00381C07
+80EB01C0EB00E0A514E1A2147238FF803C18177F961A>82 D<EA0FC4EA302CEA601CEA40
+0CEAC004A3EAE0001270127FEA3FE0EA0FF8EA01FCEA001C130E13061280A3EAC004EAE0
+08EAD810EA87E00F177E9614>I<387FFFF83860381800401308A200801304A300001300
+AF3807FFC016177F9619>I<38FF80FE383C0038001C1310A26C1320A26C1340A3380380
+80A213C100011300A2EA00E2A213F61374A21338A3131017177F961A>86
+D<38FF83FC381F01E0380E00807EEB8100EA0382EA01C213E4EA00E81378A21338137C13
+5E138EEA0187EB0780EA0203380601C0000413E0EA0C00001C13F038FF03FE17177F961A
+>88 D<12FCA212C0B3AB12FCA206217D980A>91 D<12FCA2120CB3AB12FCA2062180980A
+>93 D<EA1FC0EA38601330EA10381200EA03F8EA1E3812301270EAE039A21379EA70FFEA
+1F1E100E7F8D12>97 D<12FC121CA813F8EA1F06EA1C031480130114C0A4148013031400
+EA1B0EEA10F81217809614>I<EA07F0EA18381230EA7010EA600012E0A41260EA700812
+30EA1830EA07C00D0E7F8D10>I<137E130EA8EA07CEEA1C3EEA300E1270126012E0A412
+601270EA301EEA182E3807CFC012177F9614>I<EA0FC0EA1860EA3030EA7038EAE018EA
+FFF8EAE000A31260EA7008EA3010EA1830EA07C00D0E7F8D10>I<EA03E0EA0670120EEA
+1C201300A5EAFF80EA1C00ACEAFF800C1780960B>I<EA0F9EEA18E3EA3060EA7070A3EA
+3060EA18C0EA2F80EA20001260EA3FE013F813FCEA600EEAC006A3EA600CEA3838EA0FE0
+10157F8D12>I<12FC121CA8137CEA1D8EEA1E07121CAA38FF9FE01317809614>I<121812
+3CA212181200A5127C121CAC12FF081780960A>I<1203EA0780A2EA0300C7FCA5EA1F80
+1203AF1243EAE30012E7127C091D82960B>I<12FC121CA8EB3F80EB1C00131813205B13
+C0EA1FE0EA1CF0137013787F7FA238FF3FC01217809613>I<12FC121CB3A3EAFF800917
+80960A>I<38FC7C1F391D8E6380391E0781C0001C1301AA39FF9FE7F81D0E808D1E>I<EA
+FC7CEA1D8EEA1E07121CAA38FF9FE0130E808D14>I<EA07C0EA1830EA3018EA600CA2EA
+E00EA5EA701CEA3018EA1830EA07C00F0E7F8D12>I<EAFCF8EA1F0EEA1C031480130114
+C0A414801303EB0700EA1F0EEA1CF890C7FCA5B47E1214808D14>I<EA07C2EA1C26EA38
+1EEA700E126012E0A412601270EA301EEA1C2EEA07CEEA000EA5EB7FC012147F8D13>I<
+EAFCF0EA1D38121EEA1C101300A9EAFF800D0E808D0E>I<EA1F40EA60C0EAC040A2EAE0
+00B4FCEA7F80EA1FC0EA01E0EA8060A212C0EAE0C0EA9F000B0E7F8D0E>I<1208A31218
+A21238EAFF80EA3800A71340A4EA1C80EA0F000A147F930E>I<EAFC3FEA1C07AA5BEA0E
+173803E7E0130E808D14>I<EAFE1FEA3C0E130CEA1C08A2EA0E10A2EA0720A2EA03C0A3
+EA0180A2100E7F8D13>I<38FCFE7C383838381410381C3C20A2134C380E4E40A2138638
+078780A2130300031300A2160E7F8D19>I<EAFE3FEA3C18EA1C10EA0E20EA074013C0EA
+0380EA01C0EA02E0EA04F0EA0870EA1838EA383CEAFC7F100E7F8D13>I<EAFE1FEA3C0E
+130CEA1C08A2EA0E10A2EA0720A2EA03C0A3EA0180A21300A212E2A212A4127810147F8D
+13>I<EAFFF0EAC0E01280EA81C0EA83801287EA0700120EEA1E08121CEA3818EA701013
+30EAFFF00D0E7F8D10>I<B512801101808812>I E /Fp 1 4 df<120CA2EACCC012EDEA
+7F80EA0C00EA7F80EAEDC012CCEA0C00A20A0B7D8B10>3 D E /Fq
+10 58 df<120FEA30C0EA6060A2EA4020EAC030A9EA4020EA6060A2EA30C0EA0F000C13
+7E9211>48 D<120C121C12EC120CAFEAFFC00A137D9211>I<121FEA60C01360EAF07013
+301260EA0070A2136013C012011380EA02005AEA08101210EA2020EA7FE012FF0C137E92
+11>I<EA0FC0EA3070EA7038A31200133013E0EA0FC0EA007013381318131C126012F013
+18EAE038EA6070EA1FC00E137F9211>I<136013E0A2EA016012021206120C1208121012
+20126012C0EAFFFCEA0060A5EA03FC0E137F9211>I<EA6060EA7FC01380EA44001240A3
+124FEA70C0EA40E0EA00601370A212E0A21360EA40E0EA21C0EA1F000C137E9211>I<EA
+07C0EA0C20EA10701220EA6000A25A12CFEAD0C0EAE060EAC0201330A31240EA6020EA20
+60EA10C0EA0F000C137E9211>I<1240EA7FFC13F8EA401012801320EA00401380EA0100
+A25A12021206A2120EA512040E147E9311>I<EA0FC0EA1070EA20181260A21270EA3C30
+EA3F60EA0F8013E0EA31F0EA6078EAC01C130CA3EA6018EA3030EA0FC00E137F9211>I<
+120FEA3080EA6040EA4060EAC0201330A31240EA6070EA30B0EA0F30120013201360EAE0
+401380EA4100123E0C137E9211>I E /Fr 76 124 df<EB7E1F3901C1B180390303E3C0
+000713C3000EEBC180903801C000A6B512FC380E01C0B0387F87FC1A1D809C18>11
+D<137E3801C180EA0301380703C0120EEB018090C7FCA5B512C0EA0E01B0387F87F8151D
+809C17>I<EB7FC0EA01C1EA03031207EA0E01A7B5FCEA0E01B0387FCFF8151D809C17>I<
+90383F07E03901C09C18380380F0D80701133C000E13E00100131892C7FCA5B612FC390E
+00E01CB03A7FC7FCFF80211D809C23>I<EA6060EAF0F0EAF8F8EA6868EA0808A3EA1010
+A2EA2020EA4040EA80800D0C7F9C15>34 D<126012F012F812681208A31210A212201240
+1280050C7C9C0C>39 D<13401380EA0100120212065AA25AA25AA212701260A312E0AC12
+60A312701230A27EA27EA27E12027EEA008013400A2A7D9E10>I<7E12407E7E12187EA2
+7EA27EA213801201A313C0AC1380A312031300A21206A25AA25A12105A5A5A0A2A7E9E10
+>I<1306ADB612E0A2D80006C7FCAD1B1C7E9720>43 D<126012F0A212701210A41220A2
+12401280040C7C830C>I<EAFFE0A20B0280890E>I<126012F0A2126004047C830C>I<EA
+03C0EA0C30EA1818EA300CA2EA700EEA6006A2EAE007ADEA6006A2EA700EEA300CA2EA18
+18EA0C30EA07E0101D7E9B15>48 D<12035A123F12C71207B3A4EA0F80EAFFF80D1C7C9B
+15>I<EA07C0EA1830EA201CEA400C130EEAF00F12F81307A21270EA000F130EA2131CA2
+13381370136013C0EA0180EA0300EA0601120C1218EA1002EA3FFE127F12FF101C7E9B15
+>I<EA07E0EA1830EA201CA2EA781E130E131E1238EA001CA2131813301360EA07E0EA00
+30131CA2130E130FA2127012F8A3EAF00EEA401C1220EA1830EA07E0101D7E9B15>I<13
+0CA2131C133CA2135C13DC139CEA011C120312021204120C1208121012301220124012C0
+B512C038001C00A73801FFC0121C7F9B15>I<EA300CEA3FF813F013C0EA2000A6EA23E0
+EA2430EA2818EA301CEA200E1200130FA3126012F0A3EA800EEA401E131CEA2038EA1870
+EA07C0101D7E9B15>I<13F0EA030CEA0604EA0C0EEA181E1230130CEA7000A21260EAE3
+E0EAE430EAE818EAF00C130EEAE0061307A51260A2EA7006EA300E130CEA1818EA0C30EA
+03E0101D7E9B15>I<1240387FFF801400A2EA4002485AA25B485AA25B1360134013C0A2
+12015BA21203A41207A66CC7FC111D7E9B15>I<EA03E0EA0C30EA1008EA200C13061260
+A31270EA780CEA3E08EA3FB0EA1FE0EA07F013F8EA18FCEA307EEA601E130FEAC0071303
+A4EA60021304EA300CEA1C10EA07E0101D7E9B15>I<EA03C0EA0C30EA1818EA300C1270
+EA600EEAE006A21307A51260EA700F1230EA1817EA0C27EA07C7EA0006A2130EEA300C12
+781318EA7010EA2030EA30C0EA0F80101D7E9B15>I<126012F0A212601200AA126012F0
+A2126004127C910C>I<126012F0A212601200AA126012F0A212701210A41220A2124012
+80041A7C910C>I<1306A3130FA3EB1780A3EB23C0A3EB41E0A3EB80F0A200017FEB0078
+EBFFF83803007C0002133CA20006133E0004131EA2000C131F121E39FF80FFF01C1D7F9C
+1F>65 D<B512C0380F00F01438143C141C141EA4141C143C1478EB01F0EBFFE0EB007814
+3C141E140E140FA5141EA2143C1478B512E0181C7E9B1D>I<90381F8080EBE061380180
+1938070007000E13035A14015A00781300A2127000F01400A8007014801278A212386CEB
+0100A26C13026C5B380180083800E030EB1FC0191E7E9C1E>I<B512C0380F00F0143C14
+0E80A2EC038015C01401A215E0A815C0A21403158014071500140E5C1470B512C01B1C7E
+9B20>I<B512FC380F003C140C1404A214061402A213021400A3130613FE13061302A314
+0113001402A31406A2140C143CB512FC181C7E9B1C>I<B512F8380F007814181408A214
+0C1404A213021400A3130613FE13061302A490C7FCA77FEAFFF8161C7E9B1B>I<90381F
+8080EBE0613801801938070007000E13035A14015A00781300A2127000F01400A6ECFFF0
+EC0F80007013071278A212387EA27E6C130B380180113800E06090381F80001C1E7E9C21
+>I<39FFF3FFC0390F003C00ACEBFFFCEB003CAD39FFF3FFC01A1C7E9B1F>I<EAFFF0EA0F
+00B3A8EAFFF00C1C7F9B0F>I<EA1FFFEA00F81378B3127012F8A3EAF0F0EA40E0EA21C0
+EA1F00101D7F9B15>I<EAFFF8EA0F8090C7FCB01408A31418A2141014301470EB01F0B5
+FC151C7E9B1A>76 D<B46CEBFF80000FECF800A2390BC00178A33809E002A23808F004A3
+EB7808A3EB3C10A3EB1E20A3EB0F40A2EB0780A3EB0300121C3AFF8307FF80211C7E9B26
+>I<B4EB7FC0390F800E001404EA0BC0EA09E0A2EA08F013F81378133CA2131E130FA2EB
+078414C41303EB01E4A2EB00F4147CA2143CA2141C140C121C38FF80041A1C7E9B1F>I<
+EB3F80EBE0E03803803848487E000E7F487F003C148000381303007814C0A20070130100
+F014E0A8007014C000781303A200381480003C1307001C14006C130E6C5B6C6C5A3800E0
+E0EB3F801B1E7E9C20>I<B51280380F00E01478143C141C141EA5141C143C147814E0EB
+FF8090C7FCACEAFFF0171C7E9B1C>I<B5FC380F01E0EB007880141C141EA4141C143C5C
+EB01E001FFC7FCEB03C0EB00E0801478A61510A21438EC3C2038FFF01CC7EA07C01C1D7E
+9B1F>82 D<3807E080EA1C19EA3005EA7003EA600112E01300A36C13007E127CEA7FC0EA
+3FF8EA1FFEEA07FFC61380130FEB07C0130313011280A300C01380A238E00300EAD002EA
+CC0CEA83F8121E7E9C17>I<007FB512C038700F010060130000401440A200C014201280
+A300001400B1497E3803FFFC1B1C7F9B1E>I<39FFF07FC0390F000E001404B3A26C5B13
+8000035B12016C6C5AEB70C0011FC7FC1A1D7E9B1F>I<39FFE00FF0391F0003C06CEB01
+8015006D5A00071302A26C6C5AA36C6C5AA213F000005BA2EBF830EB7820A26D5AA36D5A
+A2131F6DC7FCA21306A31C1D7F9B1F>I<3AFFE0FFE0FF3A1F001F003C001E011E13186C
+011F1310A3D807801420EC2780A2D803C01440EC43C0A213E00001903881E080A33A00F1
+00F100A3017913FA017A137AA2013E137C013C133CA301181318A3281D7F9B2B>I<397F
+F0FFC0390FC03E0038078018EA03C0EBE01000015BEBF06000001340EB7880137D013DC7
+FC7F131F7F80A2EB13C0EB23E01321EB41F0EBC0F8EB80783801007C48133C00027F0006
+131F001FEB3F8039FFC0FFF01C1C7F9B1F>I<12FEA212C0B3B312FEA207297C9E0C>91
+D<EA0808EA1010EA2020EA4040A2EA8080A3EAB0B0EAF8F8EA7878EA30300D0C7A9C15>
+I<12FEA21206B3B312FEA20729809E0C>I<EA1FC0EA3070EA78387F12301200A2EA01FC
+EA0F1C12381270126000E01340A3EA603C38304E80381F870012127E9115>97
+D<12FC121CAA137CEA1D86EA1E03381C018014C0130014E0A614C013011480381E0300EA
+1906EA10F8131D7F9C17>I<EA07E0EA0C30EA18781230EA7030EA600012E0A61260EA70
+041230EA1808EA0C30EA07C00E127E9112>I<133F1307AAEA03E7EA0C17EA180F487E12
+70126012E0A61260127012306C5AEA0C373807C7E0131D7E9C17>I<EA03E0EA0C30EA18
+18EA300CEA700EEA600612E0EAFFFEEAE000A41260EA70021230EA1804EA0C18EA03E00F
+127F9112>I<13F8EA018CEA071E1206EA0E0C1300A6EAFFE0EA0E00B0EA7FE00F1D809C
+0D>I<EB03803803C4C0EA0C38001C138038181800EA381CA4EA1818EA1C38EA0C30EA13
+C00010C7FC12307EEA1FF813FF1480EA3003386001C0EAC000A33860018038300300EA1C
+0EEA07F8121C7F9215>I<12FC121CAA137C1387EA1D03001E1380121CAD38FF9FF0141D
+7F9C17>I<1218123CA21218C7FCA712FC121CB0EAFF80091D7F9C0C>I<13C0EA01E0A2EA
+00C01300A7EA0FE01200B3A21260EAF0C012F1EA6180EA3E000B25839C0D>I<12FC121C
+AAEB3FC0EB0F00130C13085B5B5B13E0121DEA1E70EA1C781338133C131C7F130F148038
+FF9FE0131D7F9C16>I<12FC121CB3A9EAFF80091D7F9C0C>I<39FC7E07E0391C83883839
+1D019018001EEBE01C001C13C0AD3AFF8FF8FF8021127F9124>I<EAFC7CEA1C87EA1D03
+001E1380121CAD38FF9FF014127F9117>I<EA03F0EA0E1CEA1806487E00701380EA6001
+00E013C0A600601380EA700300301300EA1806EA0E1CEA03F012127F9115>I<EAFC7CEA
+1D86EA1E03381C018014C0130014E0A6EB01C0A21480381E0300EA1D06EA1CF890C7FCA7
+B47E131A7F9117>I<EA03C1EA0C33EA180BEA300FEA7007A212E0A612601270EA300F12
+18EA0C37EA07C7EA0007A7EB3FE0131A7E9116>I<EAFCE0EA1D30EA1E78A2EA1C301300
+ACEAFFC00D127F9110>I<EA1F90EA3070EA4030EAC010A212E0EAF800EA7F80EA3FE0EA
+0FF0EA00F8EA8038131812C0A2EAE010EAD060EA8FC00D127F9110>I<1204A4120CA212
+1C123CEAFFE0EA1C00A91310A5120CEA0E20EA03C00C1A7F9910>I<38FC1F80EA1C03AD
+1307120CEA0E1B3803E3F014127F9117>I<38FF07E0383C0380381C0100A2EA0E02A26C
+5AA3EA0388A213D8EA01D0A2EA00E0A3134013127F9116>I<39FF3FCFE0393C0F038038
+1C07011500130B000E1382A21311000713C4A213203803A0E8A2EBC06800011370A2EB80
+30000013201B127F911E>I<387F8FF0380F03801400EA0702EA0384EA01C813D8EA00F0
+1370137813F8139CEA010E1202EA060738040380381E07C038FF0FF81512809116>I<38
+FF07E0383C0380381C0100A2EA0E02A26C5AA3EA0388A213D8EA01D0A2EA00E0A31340A2
+5BA212F000F1C7FC12F31266123C131A7F9116>I<EA7FFCEA70381260EA407013F013E0
+EA41C012031380EA0700EA0F04120E121CEA3C0CEA380812701338EAFFF80E127F9112>
+I<B512F01401808B15>I E /Fs 40 122 df<49B4FC011F13C090387F81E0EBFC013901
+F807F01203EA07F0A4EC01C091C8FCA3EC3FF8B6FCA33807F003B3A33A7FFF3FFF80A321
+2A7FA925>12 D<130E131E137EEA07FE12FFA212F81200B3AB387FFFFEA317277BA622>
+49 D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E014
+0FA2127E003C131FC7FC15C0A2EC3F801500147E5C5C495A495AEB078049C7FC131E4913
+E013705B3901C001C0EA0380EA0600000FB5FC5A5A5AB61280A31B277DA622>I<EB7F80
+3803FFF04813FC380F80FE381F007FEA3F80EC3F80A3121F1300C7EA7F00A2147E5C495A
+EB07F0EBFFC0A2EB01F8EB007E801580EC1FC0A215E0A2123C127EB4FCA215C0143F4814
+80007CEB7F00003F13FE6CB45A000713F0C613801B277DA622>I<140E141E143E147E14
+FEA213011303EB077E130EA2131C1338137013E0A2EA01C0EA0380EA0700120EA25A5A5A
+5AB612F8A3C7EAFE00A890387FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C
+5C14C091C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215
+E0A21218127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C61380
+1B277DA622>I<EB07F8EB3FFE90B5FC3901FC07803903F00FC03807C01FEA0F80121F13
+0048EB0F8091C7FC127EA3EAFE02EB1FF0EB3FFCEB603EEB801F00FF14809038000FC0A2
+4814E0A4127EA4123E003F14C07EEC1F80D80F8013003807E07E6CB45A6C5B38003FC01B
+277DA622>I<1238123E003FB512F0A34814E015C0158015003870000EA25C485B5C5CEA
+00015C495A130791C7FC5B5B131E133EA2137E137CA213FCA41201A76C5A13701C297CA8
+22>I<EC0780A24A7EA34A7EA24A7EA3EC77F8A2ECF7FC14E3A2903801C1FEA201037F14
+80A249486C7EA24980010E133FA2496D7EA2013FB57EA39039700007F8A201F080491303
+A248486D7EA2000381D8FFFE013F13FCA32E297EA833>65 D<91387FE003903907FFFC07
+011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F4848147F4848143F4848141F485A16
+0F485A1607127FA290C9FC5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C
+14786CB4EB01F090397FF007C0011FB512800107EBFE009038007FF028297CA831>67
+D<B612FCEDFF8016E03A03FC001FF8ED03FCED00FE167FEE3F80EE1FC0A2EE0FE0A2EE07
+F0A417F8AA17F0A3EE0FE0A217C0161FEE3F80EE7F005EED03FCED1FF8B75A168003FCC7
+FC2D297EA834>I<B712E0A33903FC001FED07F01501A215001670A3913801C0781638A3
+02031300A2140F90B5FCA3EBFC0F1403A20201130EA3161C91C7FCA3163C1638167816F8
+15011503151FB712F0A327297EA82C>I<B712C0A33903FC003FED0FE015031501A21500
+A316F0913801C070A316001403A2140F90B5FCA3EBFC0F1403A21401A491C8FCA9B512FC
+A324297EA82A>I<91387FE003903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FF
+D801FC7F484880484880484880485A82485A82127FA290CAFC5AA892B512F87E7F030013
+00123FA26C7EA26C7E6C7E6C7E6C7E6CB45B90387FF007011FB5129F0107EBFE0F903900
+7FF0032D297CA835>I<B512FCA33801FE00B3B1B512FCA316297FA819>73
+D<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A65E4B5A1507ED0FE0ED3FC0
+90B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170EA21503923801FC1CB538F0
+00FEEE7FF8EE0FE02F297EA832>82 D<01FF13C0000313E1000F13F9381F80FF383F003F
+003E130F481307A200FC1303A214017EA26C90C7FC13C0EA7FFCEBFFE06C13F86C13FE80
+000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E01303A46C14E0A26C13076C
+14C0B4EB0F80EBE01F00E3B5120000E113FC38C01FF01C297CA825>I<B500E0B539E01F
+FFC0A32803FC0003FCC7EA7000A26D6E14F0000102015DA26D6E13016C60A26D6C486D48
+5AA26E48EBC007013F023F91C7FCA2DAE00F6D5A011FD90E1F130EA26D6C486C6C5AA217
+F8902707F838075BA2DAFC78EBFC780103D970031370A2DAFEF0EBFEF00101D9E0015BA2
+6D6C486C6C5AA36E486D5AA36EC76CC8FCA3021E141EA242297FA845>87
+D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA
+0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F3803F8031E1B7E9A21
+>97 D<EAFFE0A3120FACEBE1FE9038E7FF809038FE07E09038F803F09038F001F89038E0
+00FCA2157EA2157FA8157EA315FCA29038F001F89038F803F090389C0FE090380FFF8039
+0E01FC00202A7EA925>I<EB3FF03801FFFC3803F03E380FC07FEA1F80EA3F00A248133E
+007E90C7FCA212FEA7127EA2127F6CEB03801380001FEB0700380FE00E3803F83C3801FF
+F838003FC0191B7E9A1E>I<EC7FF0A31407ACEB3F873801FFF73807F03F380FC00F381F
+8007EA3F00A2127EA312FEA8127EA27EA2381F800F380FC01F3907E07FFF3801FFE73800
+7F87202A7EA925>I<EB3FC03801FFF03803E07C380F803E001F7F130048EB0F80127E15
+C0A200FE1307A2B6FCA248C8FCA3127EA2127F6CEB01C07E390F8003803907C007003803
+F01E3800FFFCEB3FE01A1B7E9A1F>I<EB07F8EB3FFCEB7E3E3801FC7FEA03F813F01207
+143E1400A7B512C0A33807F000B3A3387FFF80A3182A7EA915>I<90387F80F03901FFE3
+F83907C0FE1C390F807C7C381F003E151048EB3F00A66C133EA26C6C5A6C6C5A3805FFE0
+380C7F8048C8FC121CA2121E381FFFF814FF6C14C06C14E06C14F0120F383E000748EB01
+F8481300A4007CEB01F0A2003FEB07E0390FC01F806CB5120038007FF01E287E9A22>I<
+EAFFE0A3120FAC147E9038E1FF809038E30FC001E413E0EBE80701F813F013F0A213E0B0
+39FFFE3FFFA3202A7DA925>I<1207EA0F80EA1FC0EA3FE0A3EA1FC0EA0F80EA0700C7FC
+A7EAFFE0A3120FB3A3EAFFFEA30F2B7EAA12>I<EAFFE0A3120FACEC3FF8A3EC0700140E
+143C5C5CEBE1E0EBE3C0EBE780EBEFC0EBFFE0A2EBF7F0EBE3F8EBC1FCA2EBC0FE147FA2
+EC3F80EC1FC0A239FFFC7FFCA31E2A7EA923>107 D<EAFFE0A3120FB3B2EAFFFEA30F2A
+7EA912>I<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0C1F8D80FC49038F101FC9039
+C803F20001D801FE7F01D05BA201E05BB03CFFFE3FFF8FFFE0A3331B7D9A38>I<38FFC0
+7E9038C1FF809038C30FC0D80FC413E0EBC80701D813F013D0A213E0B039FFFE3FFFA320
+1B7D9A25>I<EB3FE03801FFFC3803F07E390FC01F80391F800FC0393F0007E0A2007EEB
+03F0A300FE14F8A8007E14F0A26CEB07E0A2391F800FC0390FC01F803907F07F003801FF
+FC38003FE01D1B7E9A22>I<38FFE1FE9038E7FF809038FE0FE0390FF803F09038F001F8
+01E013FC140015FEA2157FA8157E15FEA215FC140101F013F89038F803F09038FC0FE090
+38EFFF809038E1FC0001E0C7FCA9EAFFFEA320277E9A25>I<38FFC3E0EBC7F8EBCC7C38
+0FD8FE13D0A213F0EBE07C1400B0B5FCA3171B7E9A1B>114 D<3803FE30380FFFF0EA3E
+03EA7800127000F01370A27E00FE1300EAFFE06CB4FC14C06C13E06C13F0000713F8C6FC
+EB07FC130000E0137C143C7E14387E6C137038FF01E038E7FFC000C11300161B7E9A1B>
+I<1370A413F0A312011203A21207381FFFE0B5FCA23807F000AD1470A7000313E03801F8
+C0EA00FFEB3F0014267FA51A>I<39FFE07FF0A3000F1307B2140FA2000713173903F067
+FF3801FFC738007F87201B7D9A25>I<3BFFFC7FFC1FFCA33B0FE00FE001C02607F007EB
+0380A201F8EBF0070003160015F82601FC0F130EA29039FE1FFC1E0000011C131C15FE90
+39FF387E3C017F1438EC787F6D486C5AA29138E01FF0011F5CA26D486C5AA36D486C5AA2
+2E1B7F9A31>119 D<39FFFC1FFEA33907F00780D803F813006C6C5AEBFE1E00005BEB7F
+78EB3FF85C6D5A130F6D7E80130F497EEB3DFEEB38FFEB787F9038F03F80D801E013C039
+03C01FE0EB800F39FFF03FFFA3201B7F9A23>I<39FFFE07FFA33907F000E0A2EBF80100
+0314C0A23901FC0380A2EBFE07000014006D5AEB7F0EA2EB3F9CA214FC6D5AA26D5AA213
+075CA26D5AA25CA21307003890C7FC127CEAFE0EA25B5BEA7C70EA3FE0EA0F8020277F9A
+23>I E /Ft 14 123 df<EA03CCEA0E2EEA181C123812301270EAE038A4EAC072A3EA60
+F2EA6134EA1E180F107C8F14>97 D<EA01E0EA0618120CEA1838EA3010EA7000126012E0
+A413081310EA6020EA30C0EA1F000D107C8F12>99 D<EB1F801303A3EB0700A4130EA2EA
+03CEEA0E2EEA181C123812301270485AA4EAC072A3EA60F2EA6134EA1E18111A7C9914>
+I<EA01E0EA0E18EA1C08123812701310EAFFE0EAE000A41308EA60101320EA30C0EA1F00
+0D107C8F12>I<13F338038B8038060700120E120C121CEA380EA4EA301CA3EA183C5BEA
+07B8EA0038A25B1260EAE0E0EAC1C0007FC7FC11177E8F12>103
+D<1203120712061200A61238124C124E128E129CA2121C1238A212701272A212E212E412
+64123808197C980C>105 D<121F1207A3120EA4121CA41238A41270A412E4A412E81230
+081A7D990A>108 D<EA307CEA5986EA9E07A2129CA2EA380EA35B00701380A21338EB39
+00EAE019EA600E11107C8F16>110 D<EA01F0EA0618EA0C0CEA180E12301270126012E0
+A2130C131C13181330EA6060EA30C0EA1F000F107C8F14>I<EA030F380590C0EA09E0EB
+C060A3380380E0A4380701C0148013031400EA0E8E137890C7FCA25AA4B4FC1317808F14
+>I<EA03E0EA04301208EA18701360EA1C00EA1F8013C0EA0FE01200136012E0A2EA80C0
+EA4180EA3E000C107D8F10>115 D<1206120EA45AA2EAFFC0EA1C005AA45AA412E1A312
+E212E412380A177C960D>I<EA3806EA4C07EA4E0E128E129CA2EA1C1C1238A3EA7039A3
+EA3079EA389AEA0F0C10107C8F15>I<EA0382EA07C4EA0FFCEA10081310EA00201340EA
+0180EA03001204EA08081210EA2018EA7FF0EA43E0EA81C00F107E8F10>122
+D E /Fu 54 124 df<13FCEA0182EA0703EA0607EA0E0290C7FCA5B5FCEA0E07AE387F0F
+E0131A809915>12 D<90387E1F803901C17040390703C0600006EB80E0000E14401500A5
+B612E0380E0380AE397F8FE3FC1E1A809920>14 D<1380EA010012025A120C120812185A
+A35AA412E0AA1260A47EA37E1208120C12047E7EEA008009267D9B0F>40
+D<7E12407E7E12181208120C7EA37EA41380AA1300A41206A35A1208121812105A5A5A09
+267E9B0F>I<126012F0A212701210A31220A212401280040B7D830B>44
+D<EAFFC0A20A0280880D>I<126012F0A2126004047D830B>I<EA0F80EA1060EA2030EA40
+38EA803CEAC01C12E01240EA003C1338A21370136013C0EA018013001202EA0404120812
+10EA3008EA3FF8127F12FF0E187E9713>50 D<EA0F80EA10E0EA2070EA6078EA70381220
+EA00781370A2136013C0EA0F80EA00E013701338133CA212E0A212C0EA40381370EA30E0
+EA0F800E187E9713>I<1330A2137013F0A2EA0170120312021204120C12081210123012
+20124012C0B5FCEA0070A6EA07FF10187F9713>I<1240EA7FFE13FCA2EA4008EA8010A2
+1320EA0040A213801201A213005AA45AA612020F197E9813>55 D<126012F0A212601200
+A8126012F0A2126004107D8F0B>58 D<126012F0A212601200A8126012F0A212701210A3
+1220A21240128004177D8F0B>I<130CA3131EA2133F1327A2EB4380A3EB81C0A348C67E
+A213FF38020070A20006137800041338A2487FA2001C131EB4EBFFC01A1A7F991D>65
+D<EB3F023801C0C63803002E000E131E48130E14065A007813021270A200F01300A60070
+1302A21278003813047E14087E000313303801C0C038003F00171A7E991C>67
+D<B5FC380E01C0EB00E014301438141CA2140EA2140FA8140EA2141E141C1438A21470EB
+01C0B51200181A7E991D>I<B512F0380E00701430141014181408A3EB0400A3130CEA0F
+FCEA0E0C1304A3EB0004A21408A3141814381470B512F0161A7E991A>I<EB3F023801C0
+C63803002E000E131E48130E14065A007813021270A200F090C7FCA5903801FFC0397000
+0E00A2127812387EA27E000313163801C06638003F821A1A7E991E>71
+D<38FFE7FF380E0070AB380FFFF0380E0070AC38FFE7FF181A7E991D>I<EAFFE0EA0E00
+B3A6EAFFE00B1A7F990E>I<39FFE07F80390E001E00141814105C5C5C49C7FC13025B5B
+131C132E134E1387380F0380120E6D7E6D7EA21470A28080143E39FFE0FF80191A7E991E
+>75 D<EAFFF0000EC7FCB01420A314601440A214C01303B5FC131A7E9918>I<B5FC380E
+03C0EB00E01470A21478A41470A214E0EB03C0380FFF00000EC7FCABEAFFE0151A7E991A
+>80 D<EAFFFC380E0780EB01C06D7E80A55C495AEB0780D80FFCC7FCEA0E067F6D7E80A3
+80A31580EB00F0EC710038FFE03E191A7E991C>82 D<EA0FC2EA1836EA200EEA600612C0
+1302A3EAE0001270127EEA3FE0EA1FF8EA07FCEA003E130E130713031280A3EAC0021306
+EAE004EAD818EA87E0101A7E9915>I<007FB5FC38701C0700401301A200C01480008013
+00A300001400B13803FFE0191A7F991C>I<3AFF83FF0FF03A3C007801C0001CEC0080A2
+6CEC0100A2149C6C1402A2EB010EA2D803815BEB8207A2D801C25B9038C40388A2D800E4
+1390A29038E801D0017813E0A2EB7000A201305B01201340241A7F9927>87
+D<12FEA212C0B3AF12FEA207257D9B0B>91 D<12FEA21206B3AF12FEA20725809B0B>93
+D<EA3F80EA70C013E0EA20701200A2EA07F0EA1C701230127012E01371A213F1EA71FBEA
+1E3C10107E8F13>97 D<12FC121CA913F8EA1F0EEA1E07381C0380130114C0A6EB038014
+00EA1E07EA1B0CEA10F0121A7F9915>I<EA07F8EA0C1C1238EA3008EA70005AA61270EA
+3004EA3808EA0C18EA07E00E107F8F11>I<137E130EA9EA03CEEA0C3EEA380E12301270
+12E0A612601270EA381EEA1C2E3807CFC0121A7F9915>I<EA07C0EA1C30EA30181270EA
+600C12E0EAFFFCEAE000A41260EA3004EA3808EA0C18EA07E00E107F8F11>I<EA01F0EA
+0318EA0738EA0E101300A6EAFFC0EA0E00AEEA7FE00D1A80990C>I<EA0FCEEA1873EA30
+30EA7038A4EA3030EA1860EA2FC0EA200012601270EA3FF013FCEA1FFEEA600FEAC003A4
+EA6006EA381CEA07E010187F8F13>I<12FC121CA913F8EA1D0CEA1E0EA2121CAB38FF9F
+C0121A7F9915>I<1218123CA21218C7FCA612FC121CAEEAFF80091A80990A>I<EA0180EA
+03C0A2EA0180C7FCA6EA0FC01201B21241EAE180EAE300127E0A2182990C>I<12FC121C
+A9EB3F80EB1E00131813105B5BEA1DC0EA1FE0121C1370137813387F131E131F38FF3FC0
+121A7F9914>I<12FC121CB3A6EAFF80091A80990A>I<38FC7C1F391D8E6380391E0781C0
+A2001C1301AB39FF9FE7F81D107F8F20>I<EAFCF8EA1D0CEA1E0EA2121CAB38FF9FC012
+107F8F15>I<EA07E0EA1C38EA300CEA700EEA6006EAE007A6EA6006EA700EEA381CEA1C
+38EA07E010107F8F13>I<EAFCF8EA1F0EEA1E07381C0380A2EB01C0A6EB03801400EA1E
+07EA1F0CEA1CF090C7FCA6B47E12177F8F15>I<EAFCE0EA1D70121E1320EA1C00ABEAFF
+C00C107F8F0F>114 D<EA1F20EA60E0EA402012C0A2EAF000127FEA3FC0EA1FE0EA00F0
+EA8070133012C01320EAF040EA8F800C107F8F0F>I<1204A3120CA2121C123CEAFFC0EA
+1C00A81320A5EA0E40EA03800B177F960F>I<EAFC7EEA1C0EAC131EEA0C2E3807CFC012
+107F8F15>I<38FF1F80383C0600EA1C04A2EA1E0CEA0E08A26C5AA21390EA03A0A2EA01
+C0A36C5A11107F8F14>I<39FF3F9F80393C0E070000381306381C16041317001E130C38
+0E23081488000F13983807419014D03803C1E01380A200015BEB004019107F8F1C>I<38
+FF3F80383C1C00EA1C18EA0E106C5A13606C5A12017F1203EA0270487E1208EA181CEA38
+1E38FC3FC012107F8F14>I<38FF1F80383C0600EA1C04A2EA1E0CEA0E08A26C5AA21390
+EA03A0A2EA01C0A36C5AA248C7FCA212E112E212E4127811177F8F14>I<B512C0120180
+8913>123 D E /Fv 16 118 df<1303497EA3497EA2EB1BE0A3EB31F0A2EB60F8A2EBE0
+FCEBC07CA248487EEBFFFE487FEB001FA20006EB0F80A2000E14C039FFC07FFCA21E1A7F
+9921>65 D<EAFFFCA2EA0F80AE140CA3141CA21438147814F8B5FCA2161A7E991B>76
+D<B512E014F8380F807E80801580A51500143E5CEBFFF80180C7FCAAEAFFF8A2191A7E99
+1E>80 D<EA0FF0EA1C3CEA3E1E130E130F121C120013FFEA0FCFEA3E0F127C12F8A31317
+387C27E0EA1FC313117F9015>97 D<12FEA2121EA7137F381FC3C0EB00E0001E13F01478
+A2147CA51478A214F0001F13E0381D83C038187F00161A7F9919>I<EA03FCEA0F0EEA1C
+1F123C1278130E00F8C7FCA51278A2383C0180381C0300EA0F06EA03FC11117F9014>I<
+EA03F0EA0E1C487EEA3C071278148012F8A2B5FC00F8C7FCA21278A2383C0180381C0300
+EA0E06EA03FC11117F9014>101 D<3807E3C0381C3CE0EA381C38781EC01400A4EA381C
+6C5AEA27E00020C7FCA21230EA3FFE381FFF8014C0EA700338E000E0A4387001C0383C07
+803807FC0013197F9016>103 D<123C127EA4123CC7FCA4127EA2121EADEAFF80A2091B
+7F9A0D>105 D<39FE1F01F0903863C63C391E81C81C391F01F01EA2001E13E0AA3AFFCF
+FCFFC0A222117F9025>109 D<EAFE1FEB63C0EA1E81381F01E0A2121EAA38FFCFFCA216
+117F9019>I<EA03F8EA0E0E383C0780EA3803007813C0A200F813E0A6007813C0EA7C07
+003C1380380E0E00EA03F813117F9016>I<EAFC78139CEA1D3EA2121E131C1300A9EAFF
+C0A20F117F9012>114 D<EA1FB0EA2070EA403012C0A2EAF000EAFF80EA7FE0EA3FF812
+07EA003CEAC00CA212E01308EAF830EACFE00E117F9011>I<1206A4120EA2121EEA3FF0
+12FFEA1E00A81318A5EA0F30EA03E00D187F9711>I<38FE0FE0A2EA1E01AB1303A2380F
+05FCEA03F916117F9019>I E /Fw 1 4 df<1202A3EAC218EAF278EA3AE0EA0F80A2EA3A
+E0EAF278EAC218EA0200A30D0E7E8E12>3 D E /Fx 34 122 df<127012F812FCA21274
+1204A41208A21210A212201240060F7C840E>44 D<127012F8A3127005057C840E>46
+D<13801203120F12F31203B3A9EA07C0EAFFFE0F217CA018>49 D<13021306130EA2131E
+A2132E134EA2138EA2EA010E1202A21204A212081210A21220A212401280B512F838000E
+00A7131F3801FFF015217FA018>52 D<00101380381E0700EA1FFF5B13F8EA13E00010C7
+FCA613F8EA130EEA1407381803801210380001C0A214E0A4127012F0A200E013C01280EA
+4003148038200700EA1006EA0C1CEA03F013227EA018>I<EA01F0EA060C487EEA180738
+3803801270A238F001C0A314E0A5127013031238EA1805120CEA0619EA03E1380001C0A3
+EB0380A200301300EA78071306EA700CEA20186C5AEA0FC013227EA018>57
+D<497EA3497EA3EB05E0A2EB0DF01308A2497E1478A2497EA3497EA3497EA290B5FC3901
+000780A24814C000021303A24814E01401A2000CEB00F0A2003EEB01F839FF800FFF2023
+7EA225>65 D<B512F8380F800E0007EB0780EC03C015E0140115F0A515E01403EC07C0EC
+0F80EC3E00EBFFFE9038800780EC03C0EC01E015F0140015F8A6EC01F0A2EC03E0EC07C0
+000FEB0F00B512FC1D227EA123>I<903807E0109038381830EBE0063901C00170390380
+00F048C7FC000E1470121E001C1430123CA2007C14101278A200F81400A812781510127C
+123CA2001C1420121E000E14407E6C6C13803901C001003800E002EB381CEB07E01C247D
+A223>I<B512F0380F801E00071307EC03C01401EC00E015F01578A2157C153CA3153EA9
+153CA2157C1578A215F015E01401EC03C0EC0700000F131EB512F81F227EA125>I<9038
+07F00890383C0C18EBE0023901C001B839038000F848C71278481438121E15185AA2007C
+14081278A200F81400A7EC1FFF0078EB00F81578127C123CA27EA27E7E6C6C13B86C7E39
+00E0031890383C0C08903807F00020247DA226>71 D<B512F0380F803C0007130FEC0780
+15C0140315E0A615C014071580EC0F00143CEBFFF00180C7FCAE487EEAFFFC1B227EA121
+>80 D<3803F020380C0C60EA1802383001E0EA70000060136012E0A21420A36C1300A212
+78127FEA3FF0EA1FFE6C7E0003138038003FC0EB07E01301EB00F0A214707EA46C1360A2
+6C13C07E38C8018038C60700EA81FC14247DA21B>83 D<39FFFC07FF390FC000F86C4813
+701520B3A5000314407FA2000114806C7E9038600100EB3006EB1C08EB03F020237EA125
+>85 D<3BFFF03FFC03FE3B1F8007E000F86C486C4813701720A26C6C6C6C1340A32703C0
+02F01380A33B01E004780100A33A00F0083C02A39039F8183E06903978101E04A2137C90
+393C200F08A390391E400790A390390F8003E0A36D486C5AA36D5C010213002F237FA132
+>87 D<EA0FE0EA1838EA3C0C130EEA18071200A313FFEA07C7EA1E07123C1278127000F0
+1308A3130FEA7817383C2390380FC1E015157E9418>97 D<120E12FE121E120EAB131FEB
+61C0EB8060380F0030000E1338143C141C141EA7141C143C1438000F1370380C8060EB41
+C038083F0017237FA21B>I<EA01FEEA0703380C0780121C383803000078C7FC127012F0
+A712700078134012386C1380380C0100EA0706EA01F812157E9416>I<14E0130F130113
+00ABEA01F8EA0704EA0C02EA1C01EA38001278127012F0A7127012781238EA1801EA0C02
+38070CF03801F0FE17237EA21B>I<EA01FCEA0707380C0380381C01C01238007813E0EA
+700012F0B5FC00F0C7FCA512700078132012386C13406C138038070300EA00FC13157F94
+16>I<133C13C6EA018F1203130FEA0700A9EAFFF8EA0700B21380EA7FF8102380A20F>I<
+121C123EA3121CC7FCA8120E12FE121E120EB1EAFFC00A227FA10E>105
+D<120E12FE121E120EB3ADEAFFE00B237FA20E>108 D<390E1FC07F3AFE60E183803A1E
+807201C03A0F003C00E0A2000E1338AF3AFFE3FF8FFE27157F942A>I<380E1F8038FE60
+C0381E80E0380F0070A2120EAF38FFE7FF18157F941B>I<EA01FCEA0707380C01803818
+00C0003813E0481370A200F01378A700701370007813F0003813E0381C01C0380E038038
+070700EA01FC15157F9418>I<EA0E1F38FE61C0380E8060380F0070000E1338143C141C
+141EA7143CA21438000F1370380E80E0EB41C0EB3F0090C7FCA9EAFFE0171F7F941B>I<
+EA0E3CEAFE46EA1E8FEA0F0F13061300120EAD120FEAFFF010157F9413>114
+D<EA0F88EA3078EA601812C01308A212E0EAF000EA7F80EA3FE0EA0FF0EA01F8EA003CEA
+801C130CA212C01308EAE018EAD030EA8FC00E157E9413>I<1202A41206A3120E121E12
+3EEAFFF8EA0E00AB1304A6EA07081203EA01F00E1F7F9E13>I<000E137038FE07F0EA1E
+00000E1370AD14F0A238060170380382783800FC7F18157F941B>I<38FFC1FE381E0078
+000E13301420A26C1340A238038080A33801C100A2EA00E2A31374A21338A3131017157F
+941A>I<39FF8FF8FF391E01E03C001CEBC018120EECE010A239070260201470A2390384
+30401438A23901C81880141CA23900F00D00140FA2EB6006A320157F9423>I<38FFC1FE
+381E0078000E13301420A26C1340A238038080A33801C100A2EA00E2A31374A21338A313
+10A25BA35B12F05B12F10043C7FC123C171F7F941A>121 D E /Fy
+20 124 df<EB7F803801FFF0380701F8380C007E48131F00107F48148048EB07C0A2EC03
+E012B012F87EA31278C7FCEC07C0A21580140F15005C141E5C5C14705C495A495A49C7FC
+130E130C5B5B5B491320485A48C7FC000614405A12084814C0003FB5FC481480B6FCA21B
+2F7DAE21>50 D<1403A34A7EA24A7EA3EC17E01413A2EC23F01421A2EC40F8A3EC807CA2
+0101137EEC003EA20102133F81A2496D7EA3496D7EA2011880011FB5FCA29039200003F0
+1501A249801500A249147CA348C87EA248153F825AD81F80EC3F80D8FFE0903803FFFCA2
+2E327EB132>65 D<91383FE001903901FFF803903807F01E90391F800307013EC7128701
+78144F49142F4848141F4848140F485A000F150790C8FC481503121E123E003C1501127C
+A30078150012F8AB1278127C1601A2123C123E121E001F15027E6D1406000715046C6C14
+086C7E6C6C141001781420013E14C090391F800380903907F00F00903801FFFC9038003F
+E028337CB130>67 D<B712E0A23907E0000F00031401ED00F016701630A21610A41608A3
+15801600A41401A2140790B5FCA2EBE0071401A21400A31602A215001604A4160CA21608
+1618A216381678ED01F80007EC0FF0B7FCA227317CB02D>69 D<DA1FE013809138FFFC01
+903807F00F90390F800183013EC712C3017814274914174848140F485A48481407160348
+C8FC481501121E123E123C1600127CA20078160012F8AA92380FFFFC1278007C9138001F
+C0EE0F80123CA2123E121E121F7E6C7E7F12036C7E6C6C1417137C6D1463D90F8013C390
+3907F00781903900FFFE00DA1FF013002E337CB134>71 D<D8FFF0ED7FF8A200071700D8
+02F815BEA3017CEC013EA26D1402A36D1404A36D6C1308A36D6C1310A36D6C1320A26D6C
+1340A36D6C1380A391387C0100A3EC3E02A36E5AA2EC0F88A3EC07D0A3EC03E0A300076D
+5AD80F80157FD8FFF891380FFFF8EC008035317CB03D>77 D<B6FC15F03907E001FC0003
+EB003EED0F806F7E6F7E150182150082A65E15015E4B5A4B5A4BC7FC153CEC01F090B5C8
+FC9038E001F0EC007C151E6F7E1507826F7EAB1708A21501A2486C903800F010B56C1370
+EE3860C9EA0F802D327CB031>82 D<90387F80203801FFE03907C07860380F001C001EEB
+06E048130300381301007813001270156012F0A21520A37E1500127C127E7E13C0EA1FF8
+6CB47E6C13F86C7FC613FF010F1380010013C0EC1FE01407EC03F01401140015F8A26C14
+78A57E15706C14F015E07E6CEB01C000ECEB038000C7EB070038C1F01E38807FFCEB0FF0
+1D337CB125>I<D8FFFEEC07FFA2D807F0EC01F86C48EC00E017C07F00011680A26C6CEC
+0100A27F017C1402A2017E1406013E1404A26D5CA280010F5CA26D6C5BA28001035CA26E
+13C001015CA26D6C48C7FCA214FCEC7C02A26E5AA2143F6E5AA21598EC0F90A2EC07E0A3
+6E5AA26E5AA330327FB032>86 D<13FE380303C0380C00E00010137080003C133C003E13
+1C141EA21208C7FCA3EB0FFEEBFC1EEA03E0EA0F80EA1F00123E123C127C481404A3143E
+A21278007C135E6CEB8F08390F0307F03903FC03E01E1F7D9E21>97
+D<EB3F80EBE06038038018380700045A001E131E001C133E123C127C14080078130012F8
+A91278127CA2003C13017E14027E6C1304380380183800E060EB3F80181F7D9E1D>99
+D<EB3F80EBE0E0380380383807003C000E7F121E001C7F123C127C00781480140712F8A2
+B6FC00F8C8FCA61278127C123C15807E000EEB0100000F1302EA07803801C00C3800F030
+EB1FC0191F7E9E1D>101 D<120FEA1F80A4EA0F00C7FCABEA078012FFA2120F1207B3A6
+EA0FC0EAFFF8A20D307EAF12>105 D<EA078012FFA2120F1207B3B3A7EA0FC0EAFFFCA2
+0E327EB112>108 D<380780FE39FF83078090388C03C0390F9001E0EA07A06E7E13C0A2
+5BB3A2486C487E3AFFFC1FFF80A2211F7E9E25>110 D<EB1FC0EBF0783801C01C380700
+07481480001EEB03C0001C1301003C14E0A248EB00F0A300F814F8A8007814F0007C1301
+003C14E0A26CEB03C0A26CEB07803907800F003801C01C3800F078EB1FC01D1F7E9E21>
+I<380783E038FF8C18EB907C120FEA07A0EBC0381400A35BB3487EEAFFFEA2161F7E9E19
+>114 D<3801FC10380E0330381800F048137048133012E01410A37E6C1300127EEA3FF0
+6CB4FC6C13C0000313E038003FF0EB01F813006C133CA2141C7EA27E14186C1338143000
+CC136038C301C03880FE00161F7E9E1A>I<1340A513C0A31201A212031207120F381FFF
+E0B5FC3803C000B01410A80001132013E000001340EB78C0EB1F00142C7FAB19>I<B712
+802101809321>123 D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop 284 369 a Fy(RE2C)21 b({)h(A)f(More)h(V)-6 b(ersatile)23
+b(Scanner)e(Generator)472 490 y Fx(P)o(eter)15 b(Bum)o(bulis)209
+b(Donald)17 b(D.)f(Co)o(w)o(an)272 548 y(Computer)g(Science)e
+(Departmen)o(t)h(and)i(Computer)e(Systems)g(Group)692
+606 y(Univ)o(ersit)o(y)e(of)k(W)l(aterlo)q(o)1175 588
+y Fw(\003)782 704 y Fx(April)e(15,)i(1994)849 895 y Fv(Abstract)120
+960 y Fu(It)f(is)g(usually)j(claimed)f(that)e(lexical)j(analysis)f
+(routines)g(are)e(still)i(co)q(ded)f(b)o(y)f(hand,)i(despite)g(the)e
+(widespread)62 1005 y(a)o(v)n(ailabil)q(i)q(t)o(y)h(of)d(scanner)i
+(generators,)f(for)f(e\016ciency)i(reasons.)23 b(While)16
+b(e\016ciency)g(is)f(a)f(consideration)q(,)j(there)e(exist)62
+1051 y(freely)k(a)o(v)n(ailable)j(scanner)d(generators)g(suc)o(h)g(as)g
+(GLA)f([7])g(that)g(can)h(generate)g(scanners)h(that)e(are)h(faster)f
+(than)62 1097 y(most)g(hand-co)q(ded)h(ones.)30 b(Ho)o(w)o(ev)o(er,)18
+b(most)g(generated)g(scanners)g(are)g(tailored)h(for)e(a)g(particular)j
+(en)o(vironmen)o(t,)62 1142 y(and)c(retargetting)h(these)e(scanners)i
+(to)e(other)h(en)o(vironmen)o(ts,)h(if)f(p)q(ossible,)h(is)f(usually)i
+(complex)f(enough)f(to)f(mak)o(e)62 1188 y(a)h(hand-co)q(ded)h(scanner)
+f(more)g(app)q(ealing.)26 b(In)16 b(this)g(pap)q(er)g(w)o(e)f(describ)q
+(e)i(RE2C,)e(a)g(scanner)i(generator)f(that)f(not)62
+1234 y(only)e(generates)f(scanners)h(whic)o(h)f(are)g(faster)f(\(and)h
+(usually)i(smaller\))f(than)f(those)g(pro)q(duced)h(b)o(y)f(an)o(y)g
+(other)g(scanner)62 1279 y(generator)i(kno)o(wn)g(to)f(the)g(authors,)g
+(includin)q(g)j(GLA,)c(but)i(also)g(adapt)f(easily)i(to)e(an)o(y)h(en)o
+(vironmen)o(t.)62 1371 y(Categories)19 b(and)f(Sub)r(ject)g
+(Descriptors:)27 b(D.3.2)17 b([)p Fv(Programming)j(Languages)p
+Fu(]:)25 b(Language)19 b(Classi\014cations)i({)62 1416
+y Ft(sp)n(e)n(cialize)n(d)11 b(applic)n(atio)o(n)g(languages)o
+Fu(;)f(D.3.4)j([)p Fv(Programming)h(Languages)p Fu(]:)j(Pro)q(cessors)
+62 1508 y(General)e(T)m(erms:)h(Algorithms,)e(Languages,)h(P)o
+(erformance)62 1599 y(Additional)h(Key)d(W)m(ords)h(and)g(Phrases:)j
+(Lexical)e(analysis,)g(scanner)f(generator)-42 1736 y
+Fs(1)67 b(In)n(tro)r(duction)-42 1827 y Fr(Lexical)14
+b(analysis)g(routines)h(are)g(still)f(often)g(co)q(ded)i(b)o(y)e(hand)g
+(despite)i(the)f(widespread)g(a)o(v)n(ailabilit)o(y)c(of)j(scanner)i
+(gener-)-42 1877 y(ators.)k(F)m(or)14 b(example,)e(while)i(most)f(Unix)
+h(systems)g(ha)o(v)o(e)g(a)g(scanner)i(generator)f(installed)f(\(t)o
+(ypically)f(LEX)h([15)o(])g(or)g(\015ex)-42 1927 y([16]\),)d(few)i
+(Unix)f(applications)f(use)i(a)f(mec)o(hanically)e(generated)k
+(scanner.)19 b(One)13 b(commonly)c(cited)k(reason)g(for)e(not)i(using)
+-42 1977 y(LEX-generated)k(scanners)f(is)f(p)q(erformance:)20
+b(they)15 b(can)g(b)q(e)g(10)g(times)f(slo)o(w)o(er)g(than)h(equiv)n
+(alen)o(t)f(hand-co)q(ded)i(scanners)-42 2026 y([13].)h(As)d(a)g
+(result,)g(there)h(has)f(b)q(een)h(considerable)f(researc)o(h)i(in)o
+(to)d(impro)o(ving)e(the)j(p)q(erformance)g(of)f(mec)o(hanically)e
+(gen-)-42 2076 y(erated)17 b(scanners)f([16)o(,)f(7,)f(9].)21
+b(GLA)15 b([7)o(],)g(one)g(suc)o(h)h(scanner)g(generator,)g(can)f(pro)q
+(duce)h(scanners)h(that)e(are)h(faster)f(than)-42 2126
+y(most)h(hand-co)q(ded)h(scanners.)29 b(Ho)o(w)o(ev)o(er,)17
+b(the)h(use)f(of)f(hand-co)q(ded)i(scanners)g(is)f(still)f(prev)n(alen)
+o(t.)27 b(One)17 b(p)q(ossibilit)o(y)f(is)-42 2176 y(that)e(this)g(is)g
+(due)h(to)e(the)i(di\016cult)o(y)e(of)g(adapting)g(the)h(generated)i
+(scanners)f(to)f(sp)q(eci\014c)h(applications.)21 2226
+y(Most)g(scanner)g(generators)h(are)f(tailored)f(to)g(a)h(particular)f
+(en)o(vironmen)o(t.)19 b(In)14 b(fact,)g(the)i(trend)f(in)f(recen)o(t)i
+(y)o(ears)f(has)-42 2276 y(b)q(een)i(to)e(in)o(tegrate)g(scanner)i
+(generators)f(with)f(compiler)f(to)q(olkits.)21 b(F)m(or)15
+b(example,)f(GLA)h(is)g(part)g(of)g(the)g(Eli)g(compiler)-42
+2325 y(construction)k(system)f([8)o(],)g(and)g(Rex)f([9])g(is)h(part)g
+(of)f(the)h(GMD)f(T)m(o)q(olb)q(o)o(x)g(for)g(Compiler)f(Construction)
+1688 2310 y Fq(1)1707 2325 y Fr(.)30 b(Scanners)p -42
+2362 780 2 v 4 2389 a Fp(\003)22 2401 y Fo(P)o(ermission)9
+b(to)j(cop)o(y)e(without)h(fee)g(all)g(or)g(part)g(of)g(this)g
+(material)e(is)j(gran)o(ted)d(pro)o(vided)h(that)g(the)h(copies)f(are)h
+(not)g(made)f(or)i(distributed)-42 2440 y(for)g(direct)e(commercial)f
+(adv)n(an)o(tage,)g(the)i(A)o(CM)j(cop)o(yrigh)o(t)9
+b(notice)i(and)g(the)g(title)g(of)h(the)f(publication)e(and)i(its)g
+(date)g(app)q(ear,)f(and)h(notice)g(is)-42 2480 y(giv)o(en)g(that)g
+(cop)o(ying)f(is)i(b)o(y)f(p)q(ermission)e(of)j(the)f(Asso)q(ciation)f
+(for)h(Computing)f(Mac)o(hinery)m(.)15 b(T)m(o)d(cop)o(y)f(otherwise,)f
+(or)i(to)f(republish,)f(requires)-42 2519 y(a)k(fee)f(and/or)f(sp)q
+(eci\014c)g(p)q(ermission.)19 b(Cop)o(yrigh)o(t)12 b(1994)h(b)o(y)g
+(the)g(Asso)q(ciation)f(for)h(Computing)e(Mac)o(hinery)m(,)h(Inc.)22
+b(T)m(o)14 b(app)q(ear)e(in)h(LOPLAS)-42 2558 y(2\(1{4\).)5
+2586 y Fn(1)22 2598 y Fo(Also)f(kno)o(wn)e(as)i(Co)q(c)o(ktail)e
+(\(Compiler-Compi)o(ler-)o(T)m(o)q(olb)q(o)n(x)f(Karlsruhe\).)923
+2748 y Fr(1)p eop
+%%Page: 2 2
+2 1 bop -42 195 a Fr(generated)21 b(b)o(y)d(these)i(to)q(ols)f(assume)f
+(the)i(existence)g(of)e(a)h(library)f(of)g(supp)q(ort)h(mo)q(dules)f
+(for)h(error)g(handling,)g(input)-42 245 y(bu\013ering,)c(sym)o(b)q(ol)
+d(table)i(managemen)o(t,)d(and)j(similar)e(functions.)18
+b(While)c(these)h(supp)q(ort)g(mo)q(dules)e(simplify)f(the)i(task)-42
+295 y(of)c(implemen)o(ting)c(a)k(compiler)f(or)h(in)o(terpreter,)i
+(they)e(mak)o(e)f(adaptation)g(to)h(other)g(purp)q(oses)i(more)d
+(di\016cult.)16 b(Adaptation)-42 345 y(to)e(other)h(en)o(vironmen)o(ts)
+e(is)h(also)f(made)g(more)g(di\016cult)g(b)q(ecause)j(often)e
+(assumptions)f(are)i(made)d(ab)q(out)i(the)h(input)f(and)-42
+394 y(restrictions)j(are)e(placed)g(on)g(tok)o(ens)g(in)g(order)g(to)g
+(ac)o(hiev)o(e)g(b)q(etter)i(p)q(erformance.)k(RE2C)14
+b(go)q(es)i(to)f(the)g(other)h(extreme:)-42 444 y(it)e(concen)o(trates)
+i(solely)d(on)h(generating)g(co)q(de)h(for)e(matc)o(hing)f(regular)i
+(expressions.)21 494 y(RE2C)f(is)h(successful)h(at)f(its)g(task:)k(not)
+13 b(only)g(do)q(es)i(it)e(pro)q(duce)i(scanners)h(whic)o(h)e(are)g
+(faster)g(than)g(those)g(created)i(b)o(y)-42 544 y(other)g(scanner)h
+(generators)f(but,)f(surprisingly)m(,)f(they)i(are)g(usually)e(smaller)
+f(as)j(w)o(ell.)21 b(F)m(urther,)15 b(RE2C)g(do)q(es)h(not)f(mak)o(e)
+-42 594 y(an)o(y)i(assumptions)e(ab)q(out)h(the)h(input)g(or)f(place)h
+(an)o(y)f(restrictions)i(on)e(tok)o(ens.)26 b(T)m(o)16
+b(a)g(large)g(degree,)i(the)g(p)q(erformance)-42 643
+y(and)d(\015exibilit)o(y)d(of)i(RE2C-generated)h(scanners)h(is)f(due)f
+(to)h(a)f(no)o(v)o(el)f(metho)q(d)h(for)g(determining)f(when)i(to)f
+(re\014ll)g(a)g(bu\013er)-42 693 y(whic)o(h)g(a)o(v)o(oids)f(the)i
+(complications)c(in)o(tro)q(duced)k(b)o(y)f(the)g(sen)o(tinel)h(metho)q
+(d)e([1)o(].)21 743 y(The)e(follo)o(wing)d(sections)j(of)f(this)h(pap)q
+(er)g(describ)q(e)i(RE2C)d(scanner)i(sp)q(eci\014cations,)f(discuss)h
+(ho)o(w)e(these)i(sp)q(eci\014cations)-42 793 y(are)21
+b(con)o(v)o(erted)g(in)o(to)f(scanners,)j(and)d(giv)o(e)f(p)q
+(erformance)h(results)h(ac)o(hiev)o(ed)g(b)o(y)f(our)g(implemen)o
+(tatio)o(n)d(\(including)j(a)-42 843 y(comparison)13
+b(with)g(GLA\).)-42 980 y Fs(2)67 b(Scanner)24 b(Sp)r(eci\014cations)
+-42 1071 y Fr(An)14 b(RE2C)g(source)h(\014le)f(consists)h(of)e(C[14)o
+(])g(or)h(C++[4])842 1056 y Fq(2)874 1071 y Fr(co)q(de)g(in)o(terlea)o
+(v)o(ed)g(with)g(commen)o(ts)e(of)h(the)i(form)d Fm(/*!re2c)20
+b Fl(:)7 b(:)g(:)-42 1121 y Fm(*/)15 b Fr(con)o(taining)f(scanner)i(sp)
+q(eci\014cations.)23 b(These)16 b(sp)q(eci\014cations)g(are)g(replaced)
+g(with)e(generated)j(co)q(de)e(that)g(is)g(in)o(v)o(ok)o(ed)-42
+1170 y(simply)d(b)o(y)i(\\falling)d(in)o(to")i(the)i(commen)o(ts)d(as)i
+(illustrated)g(in)f(Figure)h(1)g(and)f(in)h(App)q(endix)g(A)1481
+1155 y Fq(3)1500 1170 y Fr(.)469 1254 y Fm(#define)20
+b(YYCURSOR)42 b(p)469 1304 y(unsigned)20 b(char)h(*scan)p
+887 1304 14 2 v 14 w(uint\(unsigned)e(char)i(*p\))p Fk(f)469
+1353 y Fm(/*!re2c)556 1403 y([0-9]+)195 b Fk(f)p Fm(return)20
+b(p;)p Fk(g)556 1453 y Fm([\\)o(000-\\)o(377])87 b Fk(f)p
+Fm(return)20 b(NULL;)p Fk(g)469 1503 y Fm(*/)469 1553
+y Fk(g)681 1634 y Fr(Figure)14 b(1:)k(A)c(simple)f(scanner.)21
+1733 y(A)i(scanner)h(sp)q(eci\014cation)f(tak)o(es)g(the)g(form)e(of)h
+(a)h(list)f(of)g(rules,)h(eac)o(h)g(rule)g(consisting)g(of)f(a)g
+(regular)h(expression)h([10)o(])-42 1783 y(and)g(an)g(action)f
+(expressed)k(in)c(executable)i(co)q(de.)25 b(Figure)16
+b(2)g(illustrates)g(a)g(trivial)e(RE2C)h(scanner)j(sp)q(eci\014cation)e
+(that)-42 1833 y(will)c(b)q(e)h(used)h(as)f(an)f(example)g(throughout)g
+(this)h(pap)q(er.)36 b(Eac)o(h)14 b(call)d(to)i(the)g(co)q(de)h
+(generated)g(from)d(a)h(sp)q(eci\014cation)i(will)416
+1926 y Fm("print")201 b Fk(f)22 b Fm(return)e(PRINT;)49
+b(/*)21 b(rule)g(5)h(*/)f Fk(g)416 1975 y Fm([a-z])o(+)224
+b Fk(f)22 b Fm(return)e(ID;)115 b(/*)21 b(rule)g(4)h(*/)f
+Fk(g)416 2025 y Fm([0-9])o(+)224 b Fk(f)22 b Fm(return)e(DEC;)93
+b(/*)21 b(rule)g(3)h(*/)f Fk(g)416 2075 y Fm("0x")g([0-9a-f])n(+)50
+b Fk(f)22 b Fm(return)e(HEX;)93 b(/*)21 b(rule)g(2)h(*/)f
+Fk(g)416 2125 y Fm([\\000-\\)o(377])114 b Fk(f)22 b Fm(return)e(ERR;)93
+b(/*)21 b(rule)g(1)h(*/)f Fk(g)108 2214 y Fr(Figure)15
+b(2:)20 b(Sample)13 b(sp)q(eci\014cation.)22 b Fm([)p
+Fl(a)p Fm(-)p Fl(b)p Fm(])14 b Fr(matc)o(hes)h(an)o(y)f(c)o(haracter)i
+(b)q(et)o(w)o(een)g Fl(a)f Fr(and)g Fl(b)p Fr(,)f(inclusiv)o(ely)m(.)
+108 2264 y(The)i(last)f(rule,)g(for)g(example,)e(will)h(matc)o(h)g(an)o
+(y)g(eigh)o(t)h(bit)g(c)o(haracter.)23 b(Rules)15 b(are)g(listed)h(in)e
+(order)i(of)108 2314 y(precedence)q(.)-42 2414 y(\014rst)d(determine)g
+(the)f(longest)h(p)q(ossible)f(pre\014x)h(of)f(the)h(remaining)d(input)
+i(that)g(matc)o(hes)g(one)g(of)g(the)h(regular)f(expressions)-42
+2463 y(and)i(will)f(then)h(execute)i(the)e(action)g(in)f(the)i(\014rst)
+g(applicable)e(rule.)p -42 2498 780 2 v 5 2525 a Fn(2)22
+2537 y Fo(Retargetting)8 b(RE2C)k(to)f(a)h(di\013eren)o(t)d(language)g
+(is)i(straigh)o(tforw)o(ard.)5 2564 y Fn(3)22 2576 y
+Fo(RE2C-generated)e(scanners)g(require)h(no)h(additional)d(supp)q(ort)i
+(co)q(de.)923 2748 y Fr(2)p eop
+%%Page: 3 3
+3 2 bop 138 1062 a @beginspecial 53 @llx 268 @lly 435
+@urx 486 @ury 3820 @rwi @setspecial
+%%BeginDocument: scanner.eps
+
+
+
+
+
+
+
+
+
+
+
+/AutoFlatness false def
+
+% -------------- POSTSCRIPT PROLOG FOR CORELDRAW 3.X ------
+
+% Copyright 1992 Corel Corporation.  All rights reserved.
+
+/wCorelDict 300 dict def wCorelDict begin/bd{bind def}bind def
+
+/ld{load def}bd/xd{exch def}bd/_ null def
+
+/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def
+
+/$n _ def/$o 0 def/$fil 0 def/$bkg false def
+
+/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def
+
+/$N _ def/$O 0 def/$PF false def/$ctm matrix currentmatrix def
+
+/$ptm matrix def/$ttm matrix def/$stm matrix def
+
+/$fst 128 def/$pad 0 def/$rox 0 def/$roy 0 def
+
+currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd
+
+/$dsf xd/$sdf false def/$SDF false def/$Scra 0.0 def
+
+/$sv 0 def/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld
+
+/@np/newpath ld/@sv{/$sv save def}bd/@rs{$sv restore}bd
+
+/@ss{exch $Scra add exch load setscreen}bd
+
+AutoFlatness{/$cpx ([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n) def
+
+/@err1{$cpx print flush newpath}bd/@ifl{dup currentflat exch sub 10 gt
+
+{@err1 exit}{currentflat 2 add setflat}ifelse}bd
+
+/@fill/fill ld/fill{currentflat{{@fill}stopped{@ifl}{exit}ifelse
+
+}bind loop setflat}bd/@eofill/eofill ld/eofill{currentflat{{@eofill}
+
+stopped{@ifl}{exit}ifelse}bind loop setflat}bd
+
+/@clip/clip ld/clip{currentflat{{@clip}stopped{initclip @ifl}{exit
+
+}ifelse}bind loop setflat}bd/@eoclip/eoclip ld
+
+/eoclip{currentflat{{@eoclip}stopped{initclip @ifl}{exit}ifelse
+
+}bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke}
+
+stopped{@ifl}{exit}ifelse}bind loop setflat}bd}if
+
+/InRange{3 -1 roll 2 copy le{pop}{exch pop}ifelse
+
+2 copy ge{pop}{exch pop}ifelse}bd/wDstChck{2 1 roll dup 3 -1 roll
+
+eq{1 add}if}bd/@dot{dup mul exch dup mul add 1 exch sub 2 div}bd
+
+/@lin{exch pop abs 1 exch sub}bd/@MN{2 copy le{pop}{exch pop}ifelse}bd
+
+/setcmykcolor where{pop}{/setcmykcolor{4 1 roll
+
+3{3 index add 1 @MN 1 exch sub 3 1 roll}repeat
+
+setrgbcolor pop}bd}ifelse/setoverprint{/$op xd}bd
+
+/currentoverprint{$op}bd/setsepcolor{1 exch sub setgray}bd
+
+/checksepcolor{1 exch sub dup setgray 1 eq exch 1 eq and not}bd
+
+/setprocesscolor{ColorSeparationMode 0 eq{setcmykcolor}{
+
+0 4 $ink sub index exch pop 5 1 roll 4{pop}repeat
+
+setsepcolor}ifelse}bd/findcmykcustomcolor{5 array astore}bd
+
+/setcustomcolor where{pop}{/setcustomcolor{ColorSeparationMode 0 eq{
+
+exch aload pop pop 4{4 index mul 4 1 roll}repeat
+
+5 -1 roll pop setcmykcolor}{exch aload pop
+
+CurrentInkName eq{4 index}{0}ifelse 6 1 roll
+
+5{pop}repeat setsepcolor}ifelse}bd}ifelse/colorimage where{pop}{
+
+/colorimage{pop pop pop pop pop{currentfile $dat readhexstring pop pop}
+
+repeat pop}bd}ifelse/@tc{dup 1 ge{pop}{4{dup
+
+6 -1 roll mul exch}repeat pop}ifelse}bd/@scc{1 eq setoverprint
+
+dup _ eq{pop setprocesscolor pop}{findcmykcustomcolor
+
+exch setcustomcolor}ifelse ColorSeparationMode 0 eq{true}{
+
+currentgray 1 eq currentoverprint and not}ifelse}bd
+
+/@sft{/$tx $tllx $pxf add dup $tllx gt{$pwid sub}if def
+
+/$ty $tury $pyf sub dup $tury lt{$phei add}if def}bd
+
+/@stb{pathbbox/$ury xd/$urx xd/$lly xd/$llx xd}bd
+
+/@ep{{cvx exec}forall}bd/@tp{@sv/$in true def
+
+2 copy dup $lly le{/$in false def}if $phei sub $ury ge{/$in false def}if
+
+dup $urx ge{/$in false def}if $pwid add $llx le{/$in false def}if
+
+$in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl
+
+0 $phei rl clip @np $pn cvlit load aload pop
+
+7 -1 roll 5 index sub 7 -1 roll 3 index sub translate
+
+/$ctm matrix currentmatrix def @ep pop pop pop pop}{pop pop}ifelse
+
+@rs}bd/@th{@sft 0 1 $tly 1 sub{dup $psx mul $tx add{
+
+dup $llx gt{$pwid sub}{exit}ifelse}loop exch $phei mul $ty exch sub
+
+0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1 roll add exch
+
+@tp pop}for pop pop}for}bd/@tv{@sft 0 1 $tlx 1 sub{dup $pwid mul $tx add
+
+exch $psy mul $ty exch sub{dup $ury lt{$phei add}{exit}ifelse}loop
+
+0 1 $tly 1 sub{$phei mul 3 copy sub @tp pop}for
+
+pop pop}for}bd/@pf{@gs $ctm setmatrix $pm concat
+
+@stb eoclip Bburx Bbury $pm itransform/$tury xd/$turx xd
+
+Bbllx Bblly $pm itransform/$tlly xd/$tllx xd
+
+/$wid $turx $tllx sub def/$hei $tury $tlly sub def
+
+@gs $vectpat{1 0 0 0 0 _ $o @scc{eofill}if}{$t $c $m $y $k $n $o @scc{
+
+$tllx $tlly translate $wid $hei scale <00> 8 1 false [ 8 0 0 1 0 0 ]{}imagemask
+
+/$bkg true def}if}ifelse @gr $wid 0 gt $hei 0 gt and{
+
+$pn cvlit load aload pop/$pd xd 3 -1 roll sub/$phei xd
+
+exch sub/$pwid xd/$tlx $wid $pwid div ceiling 1 add def
+
+/$tly $hei $phei div ceiling 1 add def $psx 0 eq{@tv}{@th}ifelse}if
+
+@gr @np/$bkg false def}bd/@dlt{ColorSeparationMode 0 eq{
+
+/$dc $toc $tot mul $frc $frt mul dup/$c xd sub $fst 1 sub div def
+
+/$dm $tom $tot mul $frm $frt mul dup/$m xd sub $fst 1 sub div def
+
+/$dy $toy $tot mul $fry $frt mul dup/$y xd sub $fst 1 sub div def
+
+/$dk $tok $tot mul $frk $frt mul dup/$k xd sub $fst 1 sub div def
+
+true}{$frt $frc $frm $fry $frk $frn $o @scc
+
+dup{/$frk 1 currentgray sub def}{/$frk 0 def}ifelse
+
+$tot $toc $tom $toy $tok $ton $o @scc dup{/$tok 1 currentgray sub def}{
+
+/$tok 0 def}ifelse or dup{/$c 0 def/$m 0 def/$y 0 def/$k $frk def
+
+/$dc 0 def/$dm 0 def/$dy 0 def/$dk $tok $frk sub $fst 1 sub div def}if
+
+}ifelse}bd/@ftl{1 index 4 index sub dup $pad mul dup/$pdw xd
+
+2 mul sub $fst div/$wid xd 2 index sub/$hei xd
+
+pop translate $c $m $y $k 4 copy ColorSeparationMode 0 ne
+
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+
+0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill
+
+$pdw 0 translate $fst{4 copy ColorSeparationMode 0 ne
+
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+
+0 0 moveto 0 $hei lineto $wid $hei lineto $wid 0 lineto 0 0 lineto fill
+
+$wid 0 translate $dk add 4 1 roll $dy add 4 1 roll
+
+$dm add 4 1 roll $dc add 4 1 roll}repeat $dk sub 4 1 roll
+
+$dy sub 4 1 roll $dm sub 4 1 roll $dc sub 4 1 roll
+
+ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop}
+
+{setcmykcolor}ifelse 0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill
+
+}bd/@ftr{1 index 4 index sub dup $rox mul/$row xd
+
+2 div 1 index 4 index sub dup $roy mul/$roh xd
+
+2 div 2 copy dup mul exch dup mul add sqrt
+
+$row dup mul $roh dup mul add sqrt add dup/$hei xd $fst div/$wid xd
+
+4 index add $roh add exch 5 index add $row add
+
+exch translate pop pop pop pop currentflat dup 5 mul setflat
+
+$c $m $y $k 4 copy ColorSeparationMode 0 ne
+
+{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse
+
+$wid 0 moveto 0 0 $hei 0 360 arc fill 1.0 $pad 2 mul sub dup scale
+
+$fst{4 copy ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop}
+
+{setcmykcolor}ifelse $wid 0 moveto 0 0 $hei 0 360 arc fill
+
+/$hei $hei $wid sub def $dk add 4 1 roll $dy add 4 1 roll
+
+$dm add 4 1 roll $dc add 4 1 roll}repeat pop pop pop pop
+
+setflat}bd/@ff{@gs @dlt{$ctm setmatrix eoclip
+
+newpath Bbllx Bblly moveto Bbllx Bbury lineto
+
+Bburx Bbury lineto Bburx Bblly lineto $fan rotate
+
+pathbbox newpath $fty 1 eq{@ftr}{@ftl}ifelse}if
+
+@gr @np}bd/@Pf{@sv ColorSeparationMode 0 eq $ink 3 eq or{0 J 0 j [] 0 d
+
+$t $c $m $y $k $n $o @scc pop $ctm setmatrix
+
+72 1000 div dup matrix scale dup concat dup Bburx exch Bbury exch itransform
+
+ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch itransform
+
+floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop
+
+$Psn load exec}{1 setgray eofill}ifelse @rs
+
+@np}bd/g{1 exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def
+
+}bd/G{1 exch sub/$K xd/$C 0 def/$M 0 def/$Y 0 def/$T 1 def/$N _ def}bd
+
+/k{/$k xd/$y xd/$m xd/$c xd/$t 1 def/$n _ def/$fil 0 def}bd
+
+/K{/$K xd/$Y xd/$M xd/$C xd/$T 1 def/$N _ def}bd
+
+/x{/$t xd/$n xd/$k xd/$y xd/$m xd/$c xd/$fil 0 def}bd
+
+/X{/$T xd/$N xd/$K xd/$Y xd/$M xd/$C xd}bd
+
+/d/setdash ld/i{dup 0 ne{setflat}{pop}ifelse}bd
+
+/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit ld
+
+/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd
+
+/c/curveto ld/C/c ld/v{4 -2 roll 2 copy 6 -2 roll curveto}bd
+
+/V/v ld/y{2 copy curveto}bd/Y/y ld/l/lineto ld
+
+/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld
+
+/N/newpath ld/F{matrix currentmatrix $sdf{$scf $sca $scp @ss}if
+
+$fil 1 eq{@pf}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$t $c $m $y $k $n $o @scc
+
+{eofill}{@np}ifelse}ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if
+
+setmatrix}bd/f{@cp F}bd/S{matrix currentmatrix
+
+$ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K $N $O @scc{
+
+matrix currentmatrix $ptm concat stroke setmatrix}{@np}ifelse
+
+$SDF{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp
+
+S}bd/B{@gs F @gr S}bd/b{@cp B}bd/W{eoclip}bd
+
+/p{/$pm xd 7{pop}repeat/$pyf xd/$pxf xd/$pn xd
+
+/$fil 1 def}bd/P{11{pop}repeat}bd/u{}bd/U{}bd
+
+/A{pop}bd/q/@gs ld/Q/@gr ld/E{5 array astore
+
+exch cvlit exch def}bd/`{}bd/~{}bd/@{}bd/&{}bd
+
+/CorelDrawReencodeVect [ 16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
+
+16#88/circumflex/perthousand/Scaron/guilsinglleft/OE
+
+16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
+
+16#98/tilde/trademark/scaron/guilsinglright/oe
+
+16#9F/Ydieresis 16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section
+
+16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron
+
+16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
+
+16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+
+16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+
+16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+
+16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+
+16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+
+16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+
+16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+
+16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+
+16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis
+
+] def/@cc{currentfile $dat readhexstring pop}bd
+
+/@sm{/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd
+
+/Bblly xd/Bbllx xd}bd/@c{@cp}bd/@p{/$fil 1 def
+
+1 eq/$vectpat xd/$pm xd/$psy xd/$psx xd/$pyf xd/$pxf xd
+
+/$pn xd}bd/@P{/$fil 3 def/$Psn xd array astore
+
+/$Prm xd}bd/@k{/$fil 2 def/$roy xd/$rox xd/$pad xd
+
+/$fty xd/$fan xd $fty 1 eq{/$fan 0 def}if/$tok xd/$toy xd/$tom xd/$toc xd
+
+/$frk xd/$fry xd/$frm xd/$frc xd/$frn _ def/$frt 1 def/$ton _ def/$tot 1 def
+
+}bd/@x{/$fil 2 def/$roy xd/$rox xd/$pad xd
+
+/$fty xd/$fan xd/$tot xd/$ton xd/$tok xd/$toy xd/$tom xd/$toc xd
+
+/$frt xd/$frn xd/$frk xd/$fry xd/$frm xd/$frc xd}bd
+
+/@ii{concat 3 index 3 index m 3 index 1 index l
+
+2 copy l 1 index 3 index l 3 index 3 index l
+
+clip pop pop pop pop}bd/@i{@sm @gs @ii 6 index 1 ne{/$frg true def
+
+pop pop}{1 eq{$T $C $M $Y $K $N $O @scc/$frg xd}{/$frg false def
+
+}ifelse 1 eq{@gs $ctm setmatrix $t $c $m $y $k $n $o @scc{eofill}if
+
+@gr}if}ifelse/$frg $frg $bkg or def @np/$ury xd/$urx xd/$lly xd/$llx xd
+
+/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi string def
+
+$frg{$SDF{$SCF $SCA $SCP @ss}if $llx $lly translate
+
+$urx $llx sub $ury $lly sub scale $wid $hei abs
+
+$bts 1 eq{false}{$bts}ifelse [ $wid 0 0 $hei neg 0
+
+$hei 0 gt{$hei}{0}ifelse]/@cc load $bts 1 eq{imagemask}{image}ifelse
+
+$SDF{$dsf $dsa $dsp @ss}if}{$hei abs{@cc pop}repeat}ifelse
+
+@gr $ctm setmatrix}def/@M{@sv}bd/@N{/@cc{}def
+
+1 eq{12 -1 roll neg 12 1 roll @I}{13 -1 roll neg 13 1 roll
+
+@i}ifelse @rs}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx xd
+
+/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling cvi string def
+
+$llx $lly translate $urx $llx sub $ury $lly sub scale
+
+$wid $hei abs $bts [ $wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]
+
+/@cc load false $ncl colorimage @gr $ctm setmatrix}bd
+
+/z{exch findfont exch scalefont setfont}bd
+
+/ZB{9 dict dup begin 4 1 roll/FontType 3 def
+
+/FontMatrix xd/FontBBox xd/Encoding 256 array def
+
+0 1 255{Encoding exch/.notdef put}for/CharStrings 256 dict def
+
+CharStrings/.notdef{}put/Metrics 256 dict def
+
+Metrics/.notdef 3 -1 roll put/BuildChar{exch
+
+dup/$char exch/Encoding get 3 index get def
+
+dup/Metrics get $char get aload pop setcachedevice
+
+begin Encoding exch get CharStrings exch get
+
+end exec}def end definefont pop}bd/ZBAddChar{findfont begin
+
+dup 4 1 roll dup 6 1 roll Encoding 3 1 roll put
+
+CharStrings 3 1 roll put Metrics 3 1 roll put
+
+end}bd/Z{findfont dup maxlength 2 add dict exch
+
+dup{1 index/FID ne{3 index 3 1 roll put}{pop pop}ifelse}forall
+
+pop dup dup/Encoding get 256 array copy dup/$fe xd
+
+/Encoding exch put dup/Fontname 3 index put
+
+3 -1 roll dup length 0 ne{0 exch{dup type 0 type eq{exch pop}{
+
+$fe exch 2 index exch put 1 add}ifelse}forall
+
+pop}if dup 256 dict dup/$met xd/Metrics exch put
+
+dup/FontMatrix get 0 get 1000 mul 1 exch div
+
+3 index length 256 eq{0 1 255{dup $fe exch get
+
+dup/.notdef eq{pop pop}{5 index 3 -1 roll get
+
+2 index mul $met 3 1 roll put}ifelse}for}if
+
+pop definefont pop pop}bd/@ftx{{currentpoint 3 -1 roll
+
+(0) dup 3 -1 roll 0 exch put dup @gs true charpath
+
+$ctm setmatrix @@txt @gr @np stringwidth pop 3 -1 roll add exch moveto
+
+}forall}bd/@ft{matrix currentmatrix exch $sdf{$scf $sca $scp @ss}if
+
+$fil 1 eq{/@@txt/@pf ld @ftx}{$fil 2 eq{/@@txt/@ff ld @ftx}{$fil 3 eq
+
+{/@@txt/@Pf ld @ftx}{$t $c $m $y $k $n $o @scc{show}{pop}ifelse}ifelse
+
+}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd
+
+/@st{matrix currentmatrix exch $SDF{$SCF $SCA $SCP @ss}if
+
+$T $C $M $Y $K $N $O @scc{{currentpoint 3 -1 roll
+
+(0) dup 3 -1 roll 0 exch put dup @gs true charpath
+
+$ctm setmatrix $ptm concat stroke @gr @np stringwidth pop 3 -1 roll add exch moveto
+
+}forall}{pop}ifelse $SDF{$dsf $dsa $dsp @ss}if
+
+setmatrix}bd/@te{@ft}bd/@tr{@st}bd/@ta{dup
+
+@gs @ft @gr @st}bd/@t@a{dup @gs @st @gr @ft}bd
+
+/@tm{/$textsave save def @sm concat}bd/e{/t{@te}def}bd
+
+/r{/t{@tr}def}bd/o{/t{pop}def}bd/a{/t{@ta}def}bd
+
+/@a{/t{@t@a}def}bd/t{@te}def/T{@np $ctm setmatrix
+
+/$ttm matrix def $textsave restore}bd/@t{/$stm $stm currentmatrix def
+
+3 1 roll moveto $ttm concat t $stm setmatrix}def
+
+/@n{/$ttm exch matrix rotate def}bd/@s{}bd
+
+/@l{}bd/@B{@gs S @gr F}bd/@b{@cp @B}bd/@w{matrix rotate/$ptm xd
+
+matrix scale $ptm dup concatmatrix/$ptm xd
+
+1 eq{$ptm exch dup concatmatrix/$ptm xd}if
+
+1 w}bd/@g{1 eq dup/$sdf xd{/$scp xd/$sca xd
+
+/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd
+
+/$SCA xd/$SCF xd}if}bd/@D{3 copy @ss/$dsp xd
+
+/$dsa xd/$dsf xd}bd/@j{@sv @np}bind def/@J{@rs}bind def
+
+/@sep{/ColorSeparationMode where{pop}{/ColorSeparationMode 0 def
+
+/CurrentInkName (Composite) def}ifelse ColorSeparationMode 0 eq{
+
+/CurrentInkName (Composite) def}if/CurrentInkName where{pop}{
+
+/CurrentInkName (Composite) def}ifelse CurrentInkName (Composite) eq
+
+{/$ink -1 def}{CurrentInkName (Cyan) eq{/$ink 0 def}{
+
+CurrentInkName (Magenta) eq{/$ink 1 def}{CurrentInkName (Yellow) eq
+
+{/$ink 2 def}{CurrentInkName (Black) eq{/$ink 3 def}{/$ink 4 def
+
+}ifelse}ifelse}ifelse}ifelse}ifelse}bd @sep
+
+/@whi{@gs -72000 dup moveto -72000 72000 lineto
+
+72000 dup lineto 72000 -72000 lineto closepath 1 setgray fill
+
+@gr}bd/@neg{ [{1 exch sub}/exec cvx currenttransfer/exec cvx] cvx settransfer
+
+@whi}bd/@reg{[] 0 d 0 setgray .3 setlinewidth
+
+2 copy 5.4 0 360 arc closepath 2 copy moveto 9 0 rlineto
+
+2 copy moveto -9 0 rlineto 2 copy moveto 0 9 rlineto
+
+moveto 0 -9 rlineto stroke}bd/leftbracket{(\050)}def
+
+/rightbracket{(\051)}def
+
+
+
+
+
+11.4737 setmiterlimit
+
+1.00 setflat
+
+/$fst 128 def
+
+[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 229 
+
+229 291 457 457 732 543 182 275 275 322 480 229 275 229 229 457 
+
+457 457 457 457 457 457 457 457 457 229 229 480 480 480 457 836 
+
+543 543 592 592 543 504 639 592 229 408 543 457 686 592 639 543 
+
+639 592 543 504 592 543 771 543 543 504 229 229 229 387 457 275 
+
+457 457 408 457 457 229 457 457 182 182 408 182 686 457 457 457 
+
+457 275 408 229 457 408 592 408 408 408 275 213 275 480 750 750 
+
+750 750 457 275 818 457 457 275 818 750 275 818 750 750 750 750 
+
+182 182 275 275 229 457 818 275 818 750 275 771 750 750 750 750 
+
+275 457 457 457 457 148 457 275 605 299 457 480 750 605 750 750 
+
+750 750 750 275 750 441 750 275 750 299 457 750 750 750 504 543 
+
+543 543 543 543 543 818 592 543 543 543 543 229 229 229 229 750 
+
+592 639 639 639 639 639 750 639 592 592 592 592 543 750 504 457 
+
+457 457 457 457 457 732 408 457 457 457 457 229 229 229 229 750 
+
+457 457 457 457 457 457 750 504 457 457 457 457 408 750 408 ]
+
+CorelDrawReencodeVect /_Helvetica-Narrow /Helvetica-Narrow Z
+
+[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 
+
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ]
+
+CorelDrawReencodeVect /_Courier /Courier Z
+
+
+
+
+@sv
+
+/$ctm matrix currentmatrix def
+
+@sv
+
+
+106.13 392.62 110.02 399.38 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 106 392] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 125.00 z
+
+0 0 (0) @t
+
+T
+
+
+160.70 392.69 163.30 399.31 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 160 392] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 125.00 z
+
+0 0 (1) @t
+
+T
+
+
+214.06 392.69 217.94 399.24 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 214 392] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 125.00 z
+
+0 0 (2) @t
+
+T
+
+
+268.06 392.54 271.94 399.24 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 268 392] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 125.00 z
+
+0 0 (3) @t
+
+T
+
+
+321.98 392.47 325.94 399.10 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 322 392] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 125.00 z
+
+0 0 (4) @t
+
+T
+
+
+375.98 392.40 379.94 399.10 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 376 392] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 125.00 z
+
+0 0 (5) @t
+
+T
+
+
+159.98 446.69 163.94 453.38 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 160 446] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 125.00 z
+
+0 0 (6) @t
+
+T
+
+
+106.06 338.83 110.09 345.38 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 106 338] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 125.00 z
+
+0 0 (7) @t
+
+T
+
+
+159.98 338.62 163.94 345.46 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 160 338] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 125.00 z
+
+0 0 (8) @t
+
+T
+
+
+106.13 284.62 110.02 291.46 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 106 284] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 125.00 z
+
+0 0 (9) @t
+
+T
+
+
+157.97 284.69 166.10 291.53 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 158 285] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 125.00 z
+
+0 0 (10) @t
+
+T
+
+
+104.54 446.69 111.53 453.31 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 104 446] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 125.00 z
+
+0 0 (11) @t
+
+T
+
+
+112.54 440.93 114.55 445.97 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 112 440] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 97.00 z
+
+0 0 (1) @t
+
+T
+
+
+166.46 278.93 169.49 283.97 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 166 278] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 97.00 z
+
+0 0 (2) @t
+
+T
+
+
+112.46 332.86 115.49 337.90 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 112 332] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 97.00 z
+
+0 0 (3) @t
+
+T
+
+
+166.46 332.86 169.49 337.90 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 166 332] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 97.00 z
+
+0 0 (3) @t
+
+T
+
+
+328.46 386.93 331.56 391.97 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 328 386] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 97.00 z
+
+0 0 (4) @t
+
+T
+
+
+274.46 386.93 277.56 391.97 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 274 386] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 97.00 z
+
+0 0 (4) @t
+
+T
+
+
+220.46 386.93 223.56 391.97 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 220 386] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 97.00 z
+
+0 0 (4) @t
+
+T
+
+
+166.46 386.93 169.56 391.97 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 166 386] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 97.00 z
+
+0 0 (4) @t
+
+T
+
+
+166.46 440.93 169.56 445.97 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 166 440] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 97.00 z
+
+0 0 (4) @t
+
+T
+
+
+382.46 386.78 385.56 391.90 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 382 386] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Helvetica-Narrow 97.00 z
+
+0 0 (5) @t
+
+T
+
+
+94.54 382.54 121.61 409.46 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+108.07 409.46 m
+
+115.49 409.46 121.61 403.42 121.61 396.00 c
+
+121.61 388.58 115.49 382.54 108.07 382.54 c
+
+100.66 382.54 94.54 388.58 94.54 396.00 c
+
+94.54 403.42 100.66 409.46 108.07 409.46 c
+
+@c
+
+S
+
+
+94.54 274.54 121.61 301.46 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+108.07 301.46 m
+
+115.49 301.46 121.61 295.42 121.61 288.00 c
+
+121.61 280.58 115.49 274.54 108.07 274.54 c
+
+100.66 274.54 94.54 280.58 94.54 288.00 c
+
+94.54 295.42 100.66 301.46 108.07 301.46 c
+
+@c
+
+S
+
+
+94.54 328.61 121.61 355.54 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+108.07 355.54 m
+
+115.49 355.54 121.61 349.49 121.61 342.07 c
+
+121.61 334.66 115.49 328.61 108.07 328.61 c
+
+100.66 328.61 94.54 334.66 94.54 342.07 c
+
+94.54 349.49 100.66 355.54 108.07 355.54 c
+
+@c
+
+S
+
+
+95.83 329.98 120.17 354.31 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+108.00 354.31 m
+
+114.62 354.31 120.17 348.91 120.17 342.14 c
+
+120.17 335.45 114.62 329.98 108.00 329.98 c
+
+101.30 329.98 95.83 335.45 95.83 342.14 c
+
+95.83 348.91 101.30 354.31 108.00 354.31 c
+
+@c
+
+S
+
+
+148.46 328.54 175.54 355.46 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+162.00 355.46 m
+
+169.42 355.46 175.54 349.42 175.54 342.00 c
+
+175.54 334.58 169.42 328.54 162.00 328.54 c
+
+154.58 328.54 148.46 334.58 148.46 342.00 c
+
+148.46 349.42 154.58 355.46 162.00 355.46 c
+
+@c
+
+S
+
+
+149.76 329.90 174.10 354.24 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+161.93 354.24 m
+
+168.55 354.24 174.10 348.84 174.10 342.07 c
+
+174.10 335.38 168.55 329.90 161.93 329.90 c
+
+155.23 329.90 149.76 335.38 149.76 342.07 c
+
+149.76 348.84 155.23 354.24 161.93 354.24 c
+
+@c
+
+S
+
+
+148.46 436.54 175.54 463.46 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+162.00 463.46 m
+
+169.42 463.46 175.54 457.42 175.54 450.00 c
+
+175.54 442.58 169.42 436.54 162.00 436.54 c
+
+154.58 436.54 148.46 442.58 148.46 450.00 c
+
+148.46 457.42 154.58 463.46 162.00 463.46 c
+
+@c
+
+S
+
+
+149.76 437.90 174.10 462.24 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+161.93 462.24 m
+
+168.55 462.24 174.10 456.84 174.10 450.07 c
+
+174.10 443.38 168.55 437.90 161.93 437.90 c
+
+155.23 437.90 149.76 443.38 149.76 450.07 c
+
+149.76 456.84 155.23 462.24 161.93 462.24 c
+
+@c
+
+S
+
+
+94.54 436.54 121.61 463.46 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+108.07 463.46 m
+
+115.49 463.46 121.61 457.42 121.61 450.00 c
+
+121.61 442.58 115.49 436.54 108.07 436.54 c
+
+100.66 436.54 94.54 442.58 94.54 450.00 c
+
+94.54 457.42 100.66 463.46 108.07 463.46 c
+
+@c
+
+S
+
+
+95.83 437.90 120.17 462.24 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+108.00 462.24 m
+
+114.62 462.24 120.17 456.84 120.17 450.07 c
+
+120.17 443.38 114.62 437.90 108.00 437.90 c
+
+101.30 437.90 95.83 443.38 95.83 450.07 c
+
+95.83 456.84 101.30 462.24 108.00 462.24 c
+
+@c
+
+S
+
+
+148.46 382.54 175.54 409.46 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+162.00 409.46 m
+
+169.42 409.46 175.54 403.42 175.54 396.00 c
+
+175.54 388.58 169.42 382.54 162.00 382.54 c
+
+154.58 382.54 148.46 388.58 148.46 396.00 c
+
+148.46 403.42 154.58 409.46 162.00 409.46 c
+
+@c
+
+S
+
+
+149.76 383.90 174.10 408.24 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+161.93 408.24 m
+
+168.55 408.24 174.10 402.84 174.10 396.07 c
+
+174.10 389.38 168.55 383.90 161.93 383.90 c
+
+155.23 383.90 149.76 389.38 149.76 396.07 c
+
+149.76 402.84 155.23 408.24 161.93 408.24 c
+
+@c
+
+S
+
+
+148.54 274.61 175.61 301.54 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+162.07 301.54 m
+
+169.49 301.54 175.61 295.49 175.61 288.07 c
+
+175.61 280.66 169.49 274.61 162.07 274.61 c
+
+154.66 274.61 148.54 280.66 148.54 288.07 c
+
+148.54 295.49 154.66 301.54 162.07 301.54 c
+
+@c
+
+S
+
+
+149.83 275.98 174.17 300.31 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+162.00 300.31 m
+
+168.62 300.31 174.17 294.91 174.17 288.14 c
+
+174.17 281.45 168.62 275.98 162.00 275.98 c
+
+155.30 275.98 149.83 281.45 149.83 288.14 c
+
+149.83 294.91 155.30 300.31 162.00 300.31 c
+
+@c
+
+S
+
+
+202.46 382.46 229.54 409.39 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+216.00 409.39 m
+
+223.42 409.39 229.54 403.34 229.54 395.93 c
+
+229.54 388.51 223.42 382.46 216.00 382.46 c
+
+208.58 382.46 202.46 388.51 202.46 395.93 c
+
+202.46 403.34 208.58 409.39 216.00 409.39 c
+
+@c
+
+S
+
+
+203.76 383.83 228.10 408.17 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+215.93 408.17 m
+
+222.55 408.17 228.10 402.77 228.10 396.00 c
+
+228.10 389.30 222.55 383.83 215.93 383.83 c
+
+209.23 383.83 203.76 389.30 203.76 396.00 c
+
+203.76 402.77 209.23 408.17 215.93 408.17 c
+
+@c
+
+S
+
+
+256.46 382.39 283.54 409.32 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+270.00 409.32 m
+
+277.42 409.32 283.54 403.27 283.54 395.86 c
+
+283.54 388.44 277.42 382.39 270.00 382.39 c
+
+262.58 382.39 256.46 388.44 256.46 395.86 c
+
+256.46 403.27 262.58 409.32 270.00 409.32 c
+
+@c
+
+S
+
+
+257.76 383.76 282.10 408.10 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+269.93 408.10 m
+
+276.55 408.10 282.10 402.70 282.10 395.93 c
+
+282.10 389.23 276.55 383.76 269.93 383.76 c
+
+263.23 383.76 257.76 389.23 257.76 395.93 c
+
+257.76 402.70 263.23 408.10 269.93 408.10 c
+
+@c
+
+S
+
+
+310.46 382.32 337.54 409.25 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+324.00 409.25 m
+
+331.42 409.25 337.54 403.20 337.54 395.78 c
+
+337.54 388.37 331.42 382.32 324.00 382.32 c
+
+316.58 382.32 310.46 388.37 310.46 395.78 c
+
+310.46 403.20 316.58 409.25 324.00 409.25 c
+
+@c
+
+S
+
+
+311.76 383.69 336.10 408.02 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+323.93 408.02 m
+
+330.55 408.02 336.10 402.62 336.10 395.86 c
+
+336.10 389.16 330.55 383.69 323.93 383.69 c
+
+317.23 383.69 311.76 389.16 311.76 395.86 c
+
+311.76 402.62 317.23 408.02 323.93 408.02 c
+
+@c
+
+S
+
+
+364.46 382.25 391.54 409.18 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+378.00 409.18 m
+
+385.42 409.18 391.54 403.13 391.54 395.71 c
+
+391.54 388.30 385.42 382.25 378.00 382.25 c
+
+370.58 382.25 364.46 388.30 364.46 395.71 c
+
+364.46 403.13 370.58 409.18 378.00 409.18 c
+
+@c
+
+S
+
+
+365.76 383.62 390.10 407.95 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+377.93 407.95 m
+
+384.55 407.95 390.10 402.55 390.10 395.78 c
+
+390.10 389.09 384.55 383.62 377.93 383.62 c
+
+371.23 383.62 365.76 389.09 365.76 395.78 c
+
+365.76 402.55 371.23 407.95 377.93 407.95 c
+
+@c
+
+S
+
+
+121.54 395.86 148.54 396.14 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+121.54 396.00 m
+
+147.17 396.00 L
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+144.00 398.52 m
+
+147.96 396.00 L
+
+144.00 393.48 L
+
+S 
+
+@J
+
+
+175.54 395.86 202.54 396.14 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+175.54 396.00 m
+
+201.17 396.00 L
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+198.00 398.52 m
+
+201.96 396.00 L
+
+198.00 393.48 L
+
+S 
+
+@J
+
+
+229.54 395.86 256.54 396.14 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+229.54 396.00 m
+
+255.17 396.00 L
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+252.00 398.52 m
+
+255.96 396.00 L
+
+252.00 393.48 L
+
+S 
+
+@J
+
+
+283.54 395.86 310.54 396.14 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+283.54 396.00 m
+
+309.17 396.00 L
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+306.00 398.52 m
+
+309.96 396.00 L
+
+306.00 393.48 L
+
+S 
+
+@J
+
+
+337.54 395.86 364.54 396.14 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+337.54 396.00 m
+
+363.17 396.00 L
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+360.00 398.52 m
+
+363.96 396.00 L
+
+360.00 393.48 L
+
+S 
+
+@J
+
+
+125.57 268.56 143.86 284.98 @E
+
+
+[0.07198 0.00000 0.00000 0.07199 125 278] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (\133) @t
+
+60 0 (0) @t
+
+120 0 (-) @t
+
+180 0 (9) @t
+
+0 -125 (a) @t
+
+60 -125 (-) @t
+
+120 -125 (f) @t
+
+180 -125 (\135) @t
+
+T
+
+
+121.54 287.86 148.54 288.14 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+121.54 288.00 m
+
+147.17 288.00 L
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+144.00 290.52 m
+
+147.96 288.00 L
+
+144.00 285.48 L
+
+S 
+
+@J
+
+
+121.54 341.86 148.54 342.14 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+121.54 342.00 m
+
+147.17 342.00 L
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+144.00 344.52 m
+
+147.96 342.00 L
+
+144.00 339.48 L
+
+S 
+
+@J
+
+
+107.86 301.54 108.14 328.54 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+108.00 328.54 m
+
+108.00 302.90 L
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+110.52 306.14 m
+
+108.00 302.18 L
+
+105.48 306.14 L
+
+S 
+
+@J
+
+
+107.86 355.54 108.14 382.54 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+108.00 382.54 m
+
+108.00 356.90 L
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+110.52 360.14 m
+
+108.00 356.18 L
+
+105.48 360.14 L
+
+S 
+
+@J
+
+
+107.86 409.54 108.14 436.54 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+108.00 409.54 m
+
+108.00 435.17 L
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+105.41 432.00 m
+
+108.00 435.96 L
+
+110.59 432.00 L
+
+S 
+
+@J
+
+
+117.00 405.00 153.00 441.00 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+117.00 405.00 m
+
+152.06 440.06 L
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+147.96 439.63 m
+
+152.64 440.64 L
+
+151.70 436.03 L
+
+S 
+
+@J
+
+
+117.00 351.00 153.00 387.00 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+117.00 387.00 m
+
+152.06 351.94 L
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+151.63 356.04 m
+
+152.64 351.43 L
+
+148.03 352.44 L
+
+S 
+
+@J
+
+
+166.39 341.93 196.63 377.14 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+173.38 346.82 m
+
+177.48 347.47 182.59 350.42 186.77 354.60 c
+
+193.75 361.58 196.63 370.22 193.18 373.68 c
+
+189.72 377.14 181.08 374.33 174.10 367.34 c
+
+169.92 363.17 166.90 358.06 166.39 353.95 C
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+169.34 356.90 m
+
+166.39 353.30 L
+
+164.30 357.62 L
+
+S 
+
+@J
+
+
+166.39 450.72 196.63 485.93 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+173.38 455.62 m
+
+177.48 456.26 182.59 459.22 186.77 463.39 c
+
+193.75 470.38 196.63 479.02 193.18 482.47 c
+
+189.72 485.93 181.08 483.12 174.10 476.14 c
+
+169.92 471.96 166.90 466.85 166.39 462.74 C
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+169.34 465.70 m
+
+166.39 462.10 L
+
+164.30 466.42 L
+
+S 
+
+@J
+
+
+166.39 287.93 196.63 323.14 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+173.38 292.82 m
+
+177.48 293.47 182.59 296.42 186.77 300.60 c
+
+193.75 307.58 196.63 316.22 193.18 319.68 c
+
+189.72 323.14 181.08 320.33 174.10 313.34 c
+
+169.92 309.17 166.90 304.06 166.39 299.95 C
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+169.34 302.90 m
+
+166.39 299.30 L
+
+164.30 303.62 L
+
+S 
+
+@J
+
+
+166.61 396.00 198.00 450.00 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+182.30 396.00 m
+
+190.94 396.00 198.00 408.17 198.00 423.00 c
+
+198.00 437.83 190.94 450.00 182.30 450.00 C
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+185.54 447.41 m
+
+181.58 450.00 L
+
+185.54 452.59 L
+
+S 
+
+@J
+
+
+220.61 396.00 252.00 450.00 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+236.30 396.00 m
+
+244.94 396.00 252.00 408.17 252.00 423.00 c
+
+252.00 437.83 244.94 450.00 236.30 450.00 C
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+239.54 447.41 m
+
+235.58 450.00 L
+
+239.54 452.59 L
+
+S 
+
+@J
+
+
+274.61 396.00 306.00 450.00 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+290.30 396.00 m
+
+298.94 396.00 306.00 408.17 306.00 423.00 c
+
+306.00 437.83 298.94 450.00 290.30 450.00 C
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+293.54 447.41 m
+
+289.58 450.00 L
+
+293.54 452.59 L
+
+S 
+
+@J
+
+
+328.61 396.00 360.00 450.00 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+344.30 396.00 m
+
+352.94 396.00 360.00 408.17 360.00 423.00 c
+
+360.00 437.83 352.94 450.00 344.30 450.00 C
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+347.54 447.41 m
+
+343.58 450.00 L
+
+347.54 452.59 L
+
+S 
+
+@J
+
+
+382.54 396.00 413.93 450.00 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+398.23 396.00 m
+
+406.87 396.00 413.93 408.17 413.93 423.00 c
+
+413.93 437.83 406.87 450.00 398.23 450.00 C
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+401.47 447.41 m
+
+397.51 450.00 L
+
+401.47 452.59 L
+
+S 
+
+@J
+
+
+391.54 395.86 398.23 396.14 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+391.54 396.00 m
+
+398.23 396.00 L
+
+S
+
+
+175.54 449.86 398.23 450.14 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+398.23 450.00 m
+
+175.54 450.00 L
+
+S
+
+
+139.46 385.27 144.43 391.03 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 139 386] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (p) @t
+
+T
+
+
+188.93 386.93 193.90 390.96 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 188 386] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (r) @t
+
+T
+
+
+242.93 386.93 247.61 392.76 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 242 386] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (i) @t
+
+T
+
+
+296.93 386.93 301.97 391.03 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 296 386] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (n) @t
+
+T
+
+
+350.93 386.86 355.82 392.18 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 350 386] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (t) @t
+
+T
+
+
+98.93 364.39 103.46 370.22 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 98 364] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (0) @t
+
+T
+
+
+98.93 310.46 103.97 314.42 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 98 310] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (x) @t
+
+T
+
+
+125.50 331.78 146.66 338.76 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 125 332] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (\133) @t
+
+60 0 (0) @t
+
+120 0 (-) @t
+
+180 0 (9) @t
+
+240 0 (\135) @t
+
+T
+
+
+134.50 367.78 155.66 374.76 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 134 368] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (\133) @t
+
+60 0 (1) @t
+
+120 0 (-) @t
+
+180 0 (9) @t
+
+240 0 (\135) @t
+
+T
+
+
+134.28 416.74 166.46 424.73 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 134 418] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (\133) @t
+
+60 0 (a) @t
+
+120 0 (-) @t
+
+180 0 (z) @t
+
+240 0 (\135) @t
+
+300 0 (\134) @t
+
+360 0 (p) @t
+
+T
+
+
+197.28 417.31 229.46 424.73 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 197 418] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (\133) @t
+
+60 0 (a) @t
+
+120 0 (-) @t
+
+180 0 (z) @t
+
+240 0 (\135) @t
+
+300 0 (\134) @t
+
+360 0 (r) @t
+
+T
+
+
+251.28 417.31 283.18 424.73 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 251 418] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (\133) @t
+
+60 0 (a) @t
+
+120 0 (-) @t
+
+180 0 (z) @t
+
+240 0 (\135) @t
+
+300 0 (\134) @t
+
+360 0 (i) @t
+
+T
+
+
+305.28 417.31 337.54 424.73 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 305 418] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (\133) @t
+
+60 0 (a) @t
+
+120 0 (-) @t
+
+180 0 (z) @t
+
+240 0 (\135) @t
+
+300 0 (\134) @t
+
+360 0 (n) @t
+
+T
+
+
+359.28 417.31 391.39 424.73 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 359 418] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (\133) @t
+
+60 0 (a) @t
+
+120 0 (-) @t
+
+180 0 (z) @t
+
+240 0 (\135) @t
+
+300 0 (\134) @t
+
+360 0 (t) @t
+
+T
+
+
+413.50 417.31 434.66 424.15 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 413 418] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (\133) @t
+
+60 0 (a) @t
+
+120 0 (-) @t
+
+180 0 (z) @t
+
+240 0 (\135) @t
+
+T
+
+
+193.03 475.78 214.20 482.62 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 193 476] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (\133) @t
+
+60 0 (a) @t
+
+120 0 (-) @t
+
+180 0 (z) @t
+
+240 0 (\135) @t
+
+T
+
+
+193.03 367.78 214.20 374.76 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 193 368] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (\133) @t
+
+60 0 (0) @t
+
+120 0 (-) @t
+
+180 0 (9) @t
+
+240 0 (\135) @t
+
+T
+
+
+192.74 313.78 227.45 320.76 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 193 314] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (\133) @t
+
+60 0 (0) @t
+
+120 0 (-) @t
+
+180 0 (9) @t
+
+240 0 (a) @t
+
+300 0 (-) @t
+
+360 0 (f) @t
+
+420 0 (\135) @t
+
+T
+
+
+52.70 412.56 107.21 429.41 @E
+
+
+[0.07199 0.00000 0.00000 0.07199 53 422] @tm
+
+ 0 O 0 @g
+
+0.00 0.00 0.00 1.00 k
+
+e
+
+/_Courier 125.00 z
+
+0 0 (\133) @t
+
+60 0 (\134) @t
+
+120 0 (0) @t
+
+180 0 (0) @t
+
+240 0 (0) @t
+
+300 0 (-) @t
+
+360 0 (\134) @t
+
+420 0 (3) @t
+
+480 0 (7) @t
+
+540 0 (7) @t
+
+600 0 (\135) @t
+
+660 0 (\134) @t
+
+0 -125 (\133) @t
+
+60 -125 (0) @t
+
+120 -125 (-) @t
+
+180 -125 (9) @t
+
+240 -125 (a) @t
+
+300 -125 (-) @t
+
+360 -125 (z) @t
+
+420 -125 (\135) @t
+
+T
+
+
+54.00 391.54 94.54 401.83 @E
+
+0 J 0 j [] 0 d 0 R 0 @G
+
+0.00 0.00 0.00 1.00 K
+
+0 0.22 0.22 0.00 @w
+
+
+54.00 396.65 m
+
+55.51 398.16 56.52 401.83 58.54 401.18 c
+
+62.50 399.89 63.29 392.18 67.54 392.18 c
+
+71.71 392.18 72.29 401.18 76.54 401.18 c
+
+80.71 401.18 81.50 393.55 85.54 392.18 c
+
+87.48 391.54 88.27 396.58 90.00 396.65 C
+
+93.17 396.65 L
+
+S
+
+@j
+
+0.00 0.00 0.00 1.00 K
+
+0.00 0.00 0.00 1.00 k
+
+0 @g
+
+0 @G
+
+[] 0 d 0 J 0 j
+
+0 R 0 O 0 1.01 1.01 0 @w
+
+90.00 399.17 m
+
+93.96 396.65 L
+
+90.00 394.13 L
+
+S 
+
+@J
+
+@rs
+
+@rs
+
+
+ end
+
+%%EndDocument
+ @endspecial 108 1136 a Fr(Figure)21 b(3:)32 b(A)20 b(DF)-5
+b(A)21 b(for)f(the)i(sample)d(sp)q(eci\014cation)j(in)e(Figure)g(2.)39
+b(State)21 b(0)f(is)h(the)g(start)g(state.)108 1186 y(Accepting)d
+(states)g(are)g(lab)q(eled)e(with)h(the)g(n)o(um)o(b)q(er)f(of)g(the)i
+(rule)f(that)g(they)g(matc)o(h.)26 b(F)m(or)16 b(example,)108
+1236 y(state)i(10)d(accepts)j(rule)f(2.)25 b(T)m(ransitions)16
+b(di\013ering)g(only)g(b)o(y)g(lab)q(el)f(are)i(represen)o(ted)i(with)d
+(the)h(same)108 1286 y(arc.)i(F)m(or)12 b(example,)f(state)j(0)e(has)h
+(transitions)g(to)f(state)i(6)e(on)h(all)e(of)i(the)g(follo)o(wing)d(c)
+o(haracters:)19 b Fm(a)p Fr(,)13 b Fl(:)7 b(:)g(:)n Fr(,)108
+1336 y Fm(o)p Fr(,)14 b Fm(q)p Fr(,)f Fl(:)7 b(:)g(:)12
+b Fm(z)p Fr(.)21 1469 y(RE2C)i(is)g(di\013eren)o(t)h(from)e(most)g
+(other)i(scanner)h(generators)f(in)f(that)h(the)g(user)g(m)o(ust)f(pro)
+o(vide)g(the)h(input)f(bu\013ering)-42 1519 y(mec)o(hanism)i(for)h(the)
+i(scanner;)h(the)f(generated)g(co)q(de)g(simply)c(assumes)j(that)g(the)
+g(user)h(has)f(de\014ned)h(three)g(p)q(oin)o(ters:)-42
+1569 y Fm(YYCURSOR)p Fr(,)9 b Fm(YYLIMIT)g Fr(and)h Fm(YYMARKER)p
+Fr(,)e(and)i(a)h(routine)f Fm(YYFILL\()p Fl(n)p Fm(\))p
+Fr(.)15 b(Before)d(executing)f(the)g(generated)h(co)q(de,)f
+Fm(YYCURSOR)-42 1619 y Fr(and)h Fm(YYLIMIT)d Fr(m)o(ust)h(b)q(e)i(set)g
+(to)g(p)q(oin)o(t)e(to)h(the)h(\014rst)g(and)f(one)h(past)f(the)h(last)
+f(c)o(haracter)i(in)e(the)g(bu\013er,)i(resp)q(ectiv)o(ely)m(.)18
+b(After)-42 1669 y(a)f(tok)o(en)g(is)f(recognized,)i(and)f(b)q(efore)g
+(an)o(y)f(action)g(is)h(executed,)i Fm(YYCURSOR)c Fr(is)h(set)i(to)e(p)
+q(oin)o(t)g(to)h(just)g(past)g(the)g(tok)o(en.)-42 1718
+y Fm(YYFILL)d Fr(will)g(b)q(e)i(called)f(as)g(the)h(bu\013er)h(needs)f
+(\014lling;)e(at)h(least)h Fl(n)f Fr(additional)e(input)i(c)o
+(haracters)i(should)e(b)q(e)h(pro)o(vided.)-42 1768 y(When)g
+Fm(YYFILL)d Fr(is)i(called,)f Fm(YYCURSOR)f Fr(will)h(p)q(oin)o(t)g(to)
+h(the)g(next)h(c)o(haracter)g(to)f(b)q(e)g(scanned)h(and)f
+Fm(YYMARKER)p Fr(,)d(if)i(set,)i(will)-42 1818 y(p)q(oin)o(t)f(to)f(a)g
+(p)q(ossible)h(bac)o(ktrac)o(king)g(p)q(oin)o(t)f(in)g(the)h(bu\013er.)
+21 b Fm(YYFILL)14 b Fr(m)o(ust)f(up)q(date)j Fm(YYLIMIT)p
+Fr(,)c(and)j(p)q(ossibly)f Fm(YYCURSOR)-42 1868 y Fr(and)f
+Fm(YYMARKER)f Fr(b)q(efore)h(returning.)18 b(T)o(ypically)12
+b Fm(YYCURSOR)p Fr(,)f Fm(YYLIMIT)p Fr(,)g Fm(YYMARKER)p
+Fr(,)f(and)j Fm(YYFILL\()p Fl(n)p Fm(\))e Fr(will)h(b)q(e)h(de\014ned)h
+(as)-42 1918 y(macros.)-42 2034 y Fj(2.1)56 b(Things)19
+b(That)g(RE2C)f(Do)r(esn't)g(Pro)n(vide)-42 2111 y Fr(RE2C)11
+b(do)q(esn't)h(pro)o(vide)f(man)o(y)e(things)j(a)o(v)n(ailable)d(in)h
+(more)h(con)o(v)o(en)o(tional)f(scanner)j(generators)f(including)e
+(default)h(rules,)-42 2160 y(end-of-input)17 b(pseudo-tok)o(ens,)i(and)
+e(bu\013er)i(managemen)o(t)14 b(routines.)29 b(All)17
+b(of)f(these)j(m)o(ust)d(b)q(e)i(supplied)g(b)o(y)f(the)h(user.)-42
+2210 y(Rather)10 b(than)g(b)q(eing)f(a)g(handicap,)h(this)g(allo)o(ws)e
+(RE2C-generated)i(scanners)h(to)f(b)q(e)g(tailored)f(to)g(almost)f(an)o
+(y)h(en)o(vironmen)o(t.)-42 2260 y(F)m(or)k(example,)f(the)i(scanner)h
+(de\014ned)f(in)f(Figure)h(1)f(compiles)f(in)o(to)h(32)g(b)o(ytes)h(of)
+e(i486)h(co)q(de)h(\(using)f(W)m(atcom)e(C)j(9.5\);)e(the)-42
+2310 y(same)g(size)h(as)f(an)g(equiv)n(alen)o(t)g(hand-co)q(ded)h
+(routine.)k(Most)c(other)g(scanner)g(generators)h(cannot)e(pro)q(duce)h
+(scanners)h(that)-42 2360 y(are)k(comp)q(etitiv)o(e)e(with)g(hand-co)q
+(ded)i(analyzers)f(in)f(this)h(case.)28 b(F)m(urther,)18
+b(it)f(is)g(not)f(o)o(v)o(erly)h(di\016cult)f(to)h(implem)o(en)o(t)e(a)
+-42 2409 y(more)c(traditional)f(scanner)j(using)f(RE2C.)e(F)m(or)h
+(example,)g(App)q(endix)h(A)f(con)o(tains)h(the)g(supp)q(ort)h(co)q(de)
+f(for)f(the)i(C)e(scanner)-42 2459 y(b)q(enc)o(hmark)o(ed)j(in)f(T)m
+(able)g(1.)k(Note)d(that)g(this)f(co)q(de)h(allo)o(ws)f(for)g
+(arbitrarily)f(long)h(con)o(tiguous)g(tok)o(ens)h(and)f(pro)o(vides)h
+(line)-42 2509 y(and)g(column)e(n)o(um)o(b)q(er)i(information.)923
+2748 y(3)p eop
+%%Page: 4 4
+4 3 bop -42 195 a Fs(3)67 b(Generating)23 b(Directly)h(Executable)g
+(Scanners)-42 286 y Fr(As)14 b(demonstrated)g(b)o(y)f(GLA)g([7)o(])g
+(generating)h(directly)g(executable)g(co)q(de)g(instead)g(of)f(tables)h
+(can)f(result)i(in)e(m)o(uc)o(h)f(faster)-42 336 y(scanners.)20
+b(Ho)o(w)o(ev)o(er,)13 b(to)g(ac)o(hiev)o(e)h(this)f(sp)q(eed,)h
+(GLA-generated)h(scanners)f(mak)o(e)e(some)g(assumptions)h(ab)q(out)g
+(the)h(input)-42 386 y(and)i(place)g(certain)g(restrictions)g(on)g(tok)
+o(ens)680 371 y Fq(4)699 386 y Fr(.)23 b(In)15 b(this)h(section)g(w)o
+(e)g(will)e(sho)o(w)h(ho)o(w)g(to)h(generate)g(directly)g(executable)
+-42 435 y(scanners)22 b(whic)o(h)d(not)g(only)g(a)o(v)o(oid)f(suc)o(h)i
+(restrictions,)h(but)f(are)g(also)e(faster)i(and)f(usually)g(smaller.)
+33 b(The)19 b(approac)o(h)-42 485 y(presen)o(ted)f(here)f(has)f(the)g
+(added)g(b)q(ene\014t)h(that)f(ev)o(en)g(faster)h(scanners)g(can)f(b)q
+(e)g(easily)f(b)q(e)i(created,)g(at)e(the)i(exp)q(ense)g(of)-42
+535 y(increased)f(co)q(de)e(size,)h(b)o(y)e(using)h(a)f(tec)o(hnique)i
+(akin)e(to)h(lo)q(op)f(unrolling.)-42 651 y Fj(3.1)56
+b(Constructing)19 b(a)g(DF)-6 b(A)-42 728 y Fr(The)15
+b(\014rst)g(step)g(in)f(generating)h(a)f(directly)g(executable)h
+(scanner)h(is)e(to)g(construct)i(a)e(DF)-5 b(A)15 b(that)f(recognizes)i
+(the)e(regular)-42 778 y(expressions)g(in)e(the)h(sp)q(eci\014cation.)
+18 b(Figure)12 b(3)g(presen)o(ts)i(a)e(DF)-5 b(A)13 b(that)f
+(recognizes)h(the)g(regular)f(expressions)i(in)e(Figure)g(2.)-42
+828 y(One)18 b(p)q(ossible)f(algorithm)e(for)h(constructing)i(suc)o(h)g
+(a)e(DF)-5 b(A)18 b(can)f(b)q(e)g(found)g(in)f([1].)26
+b(Giv)o(en)16 b(suc)o(h)i(a)f(DF)-5 b(A,)16 b(the)i(task)f(of)p
+-42 864 780 2 v 5 891 a Fn(4)22 903 y Fo(These)11 b(assumptions)e(and)h
+(restrictions)f(are)i(discussed)e(in)j(more)e(detail)g(in)h(Sections)e
+(3.3.1)i(and)f(5.1.)923 2748 y Fr(4)p eop
+%%Page: 5 5
+5 4 bop -42 195 a Fr(scanning)14 b(the)h(input)f(can)g(b)q(e)g
+(expressed)i(as)e(follo)o(ws:)125 278 y(Starting)i(from)g(the)i(start)g
+(state,)g(mo)o(v)o(e)e(from)f(state)j(to)f(state)h(along)e(transitions)
+i(lab)q(eled)f(with)g(con-)62 328 y(secutiv)o(e)f(c)o(haracters)h(from)
+c(the)i(input.)21 b(When)15 b(no)f(further)i(transitions)f(can)g(b)q(e)
+g(made,)e(bac)o(ktrac)o(k)i(to)g(the)62 378 y(last)h(accepting)g
+(state,)h(sa)o(y)f Fl(q)q Fr(.)24 b(The)16 b(path)g(to)f
+Fl(q)i Fr(sp)q(ells)g(the)f(next)g(tok)o(en)g(and)g(the)g(rule)h(asso)q
+(ciated)f(with)g Fl(q)62 428 y Fr(determines)e(the)h(co)q(de)g(to)e(b)q
+(e)i(executed.)-42 511 y(As)d(a)e(result,)h(the)h(problem)d(of)h
+(generating)h(scanners)h(essen)o(tially)f(reduces)h(to)f(the)g(problem)
+e(of)h(generating)h(an)f(executable)-42 560 y(represen)o(tation)16
+b(for)d(a)h(DF)-5 b(A.)-42 677 y Fj(3.2)56 b(Generating)18
+b(Co)r(de)-42 753 y Fr(If)g(w)o(e)g(assume)g(that)g(the)h(input)f(is)g
+(en)o(tirely)g(con)o(tained)g(in)g(a)f(single)h(bu\013er)h(then)g
+(generating)f(co)q(de)h(for)f(the)g(DF)-5 b(A)19 b(is)-42
+803 y(relativ)o(ely)13 b(straigh)o(tforw)o(ard,)f(as)h(is)g
+(illustrated)g(b)o(y)f(the)i(co)q(de)g(templates)e(in)h(Figure)g(4.)35
+b(Note)14 b(that)f(the)g(only)g(di\013erence)p 575 863
+717 2 v 575 912 2 50 v 856 897 a Fi(Pr)n(olo)n(gue)p
+1290 912 V 575 914 717 2 v 575 964 2 50 v 720 949 a Fm(int)21
+b(yyaccept;)p 1290 964 V 575 1014 V 720 999 a(goto)g(M)p
+Fi(start)p Fm(;)p 1290 1014 V 575 1063 V 720 1049 a(fin:)g(YYCURSOR)f
+(=)i(YYMARKER;)p 1290 1063 V 575 1113 V 720 1098 a(switch\(yyaccept\))p
+Fk(f)p 1290 1113 V 575 1163 V 807 1148 a Fl(:)7 b(:)g(:)p
+1290 1163 V 575 1213 V 602 1198 a Fm(A)p Fl(n)p Fm(:)93
+b(case)21 b Fl(n)p Fm(:)43 b Fi(action)p Fr(\()p Fl(n)p
+Fr(\))p Fm(;)p 1290 1213 V 575 1263 V 807 1248 a Fl(:)7
+b(:)g(:)p 1290 1263 V 575 1313 V 720 1298 a Fk(g)p 1290
+1313 V 575 1362 V 720 1347 a Fi(c)n(o)n(de)15 b(for)g(states)p
+1290 1362 V 575 1364 717 2 v 204 1370 720 2 v 204 1420
+2 50 v 346 1405 a(Co)n(de)g(for)f(ac)n(c)n(epting)h(state)p
+921 1420 V 204 1421 720 2 v 204 1471 2 50 v 230 1456
+a Fm(L)p Fl(q)q Fm(:)50 b(++YYCURSOR;)p 921 1471 V 204
+1521 V 344 1506 a(yyaccept)20 b(=)h Fi(rule)p Fr(\()p
+Fl(q)q Fr(\))p Fm(;)p 921 1521 V 204 1571 V 344 1556
+a(YYMARKER)f(=)h(YYCURSOR;)p 921 1571 V 204 1621 V 230
+1606 a(M)p Fl(q)q Fm(:)50 b(switch\(*YYCURSO)o(R\))p
+Fk(f)p 921 1621 V 204 1670 V 431 1655 a Fl(:)7 b(:)g(:)p
+921 1670 V 204 1720 V 387 1705 a Fm(case)21 b Fl(c)p
+Fm(:)43 b(goto)21 b(L)p Fi(goto)q Fr(\()p Fl(q)q(;)7
+b(c)p Fr(\))p Fm(;)p 921 1720 V 204 1770 V 431 1755 a
+Fl(:)g(:)g(:)p 921 1770 V 204 1820 V 387 1805 a Fm(default:)42
+b(goto)21 b(fin;)p 921 1820 V 204 1870 V 344 1855 a Fk(g)p
+921 1870 V 204 1871 720 2 v 944 1370 V 944 1420 2 50
+v 1045 1405 a Fi(Co)n(de)15 b(for)g(non-ac)n(c)n(epting)h(state)p
+1662 1420 V 944 1421 720 2 v 944 1471 2 50 v 971 1456
+a Fm(L)p Fl(q)q Fm(:)49 b(++YYCURSOR;)p 1662 1471 V 944
+1521 V 1662 1521 V 944 1571 V 1662 1571 V 944 1621 V
+971 1606 a(M)p Fl(q)q Fm(:)g(switch\(*YYCURSOR\))p Fk(f)p
+1662 1621 V 944 1670 V 1172 1655 a Fl(:)7 b(:)g(:)p 1662
+1670 V 944 1720 V 1128 1705 a Fm(case)21 b Fl(c)p Fm(:)43
+b(goto)21 b(L)p Fi(goto)p Fr(\()p Fl(q)q(;)7 b(c)p Fr(\))p
+Fm(;)p 1662 1720 V 944 1770 V 1172 1755 a Fl(:)g(:)g(:)p
+1662 1770 V 944 1820 V 1128 1805 a Fm(default:)42 b(goto)21
+b(fin;)p 1662 1820 V 944 1870 V 1084 1855 a Fk(g)p 1662
+1870 V 944 1871 720 2 v 108 1946 a Fr(Figure)g(4:)30
+b(Directly)20 b(executable)h(scanner.)38 b(The)20 b(co)q(de)h
+(generated)g(for)f(a)g(scanner)h(consists)g(of)f(a)108
+1996 y(prologue)12 b(follo)o(w)o(ed)f(b)o(y)h(co)q(de)i(for)e(eac)o(h)h
+(state.)18 b Fi(start)11 b Fr(is)i(the)g(start)g(state.)18
+b Fi(action)p Fr(\()p Fl(n)p Fr(\))13 b(denotes)h(the)f(co)q(de)108
+2045 y(asso)q(ciated)h(with)e(rule)h Fl(n)p Fr(,)f Fi(goto)p
+Fr(\()p Fl(q)q(;)7 b(c)p Fr(\))12 b(denotes)i(the)f(state)g(reac)o(hed)
+h(from)d(state)i Fl(q)h Fr(along)d(the)i(transition)108
+2095 y(lab)q(eled)18 b(with)e Fl(c)h Fr(and)g Fi(rule)p
+Fr(\()p Fl(q)q Fr(\))g(denotes)i(the)e(rule)h(asso)q(ciated)g(with)e
+(state)i Fl(q)q Fr(.)28 b Fm(yyaccept)16 b Fr(is)h(used)h(to)108
+2145 y(sa)o(v)o(e)d(bac)o(ktrac)o(king)e(information.)i(The)g
+Fm(M)p Fr(-lab)q(els)e(will)f(b)q(e)j(used)g(in)e(section)i(3.4.2.)-42
+2245 y(b)q(et)o(w)o(een)j(the)f(templates)f(for)g(accepting)g(and)h
+(non-accepting)f(states)i(is)e(that)g(the)h(accepting)g(states)g(ha)o
+(v)o(e)f(additional)-42 2294 y(co)q(de)e(to)f(sa)o(v)o(e)g(bac)o(ktrac)
+o(king)f(information.)j(Figure)e(5)g(sho)o(ws)g(co)q(de)h(that)f(migh)o
+(t)d(b)q(e)k(generated)g(for)f(state)g(1)g(in)f(Figure)h(3.)-42
+2460 y Fj(3.3)56 b(Bu\013ering)-42 2537 y Fr(Complications)13
+b(arise)i(when)g(the)g(input)g(is)g(not)f(con)o(tained)h(in)g(a)f
+(single)g(bu\013er:)21 b(additional)13 b(co)q(de)j(is)e(needed)j(for)d
+(\014lling)-42 2587 y(the)h(bu\013er)g(as)f(necessary)m(.)923
+2748 y(5)p eop
+%%Page: 6 6
+6 5 bop 647 188 a Fm(L1:)49 b(++YYCURSOR;)762 238 y(yyaccept)20
+b(=)i(4;)762 288 y(YYMARKER)e(=)i(YYCURSOR;)647 338 y(M1:)49
+b(switch\(*YYCURSOR\))p Fk(f)806 388 y Fm(case)21 b('a':)43
+b(goto)21 b(L6;)849 438 y Fl(:)7 b(:)g(:)806 487 y Fm(case)21
+b('q':)43 b(goto)21 b(L6;)806 537 y(case)g('r':)43 b(goto)21
+b(L2;)806 587 y(case)g('s':)43 b(goto)21 b(L6;)849 637
+y Fl(:)7 b(:)g(:)806 687 y Fm(case)21 b('z':)43 b(goto)21
+b(L6;)806 736 y(default:)42 b(goto)21 b(fin;)762 786
+y Fk(g)690 876 y Fr(Figure)14 b(5:)k(Co)q(de)c(for)g(state)g(1.)505
+968 y Fm(L6:)50 b(++YYCURSOR;)621 1018 y(if\(YYLIMIT)19
+b(==)j(YYCURSOR\))e(YYFILL\(1\);)621 1068 y(yyaccept)g(=)h(4;)621
+1118 y(YYMARKER)f(=)h(YYCURSOR;)505 1168 y(M6:)50 b(switch\(*YYCURSO)o
+(R\))p Fk(f)708 1217 y Fl(:)7 b(:)g(:)621 1267 y Fk(g)690
+1357 y Fr(Figure)14 b(6:)k(Co)q(de)c(for)g(state)g(6.)-42
+1489 y Fh(3.3.1)48 b(The)16 b(Sen)o(tinel)c(Metho)q(d)-42
+1566 y Fr(Most)20 b(scanner)g(generators)g(use)g(the)g(sen)o(tinel)f
+(metho)q(d)g([1)o(])f(to)h(determine)g(when)h(the)f(bu\013er)i(needs)f
+(\014lling.)32 b(In)19 b(the)-42 1616 y(simplest)d(case,)h(a)f(sym)o(b)
+q(ol)f(that)h(do)q(es)i(not)e(app)q(ear)h(in)f(v)n(alid)f(input)h(is)g
+(c)o(hosen)h(as)g(the)g(sen)o(tinel)g(c)o(haracter.)26
+b(An)17 b(extra)-42 1666 y(state)12 b(is)f(added)g(to)g(the)h(DF)-5
+b(A)11 b(and)g(transitions)f(to)h(this)g(state)h(on)f(the)g(sen)o
+(tinel)h(sym)o(b)q(ol)d(are)i(added)g(to)g(the)h(original)d(states.)-42
+1715 y(When)16 b(the)g(DF)-5 b(A)16 b(arriv)o(es)f(in)g(this)h(new)f
+(state)i(it)e(is)g(time)f(to)h(re\014ll)g(the)h(bu\013er.)23
+b(After)16 b(the)g(bu\013er)h(is)e(re\014lled,)g(scanning)-42
+1765 y(m)o(ust)h(b)q(e)g(restarted)i(in)e(the)h(previous)f(state.)26
+b(Unfortunately)m(,)16 b(this)g(is)g(not)g(p)q(ossible)g(with)g(the)h
+(approac)o(h)f(outlined)g(in)-42 1815 y(Figure)j(4:)26
+b(the)19 b(necessary)h(information)15 b(is)j(simply)e(not)i(a)o(v)n
+(ailable.)28 b(Co)q(de)19 b(could)f(b)q(e)g(added)h(to)f(eac)o(h)g
+(state)h(to)f(sa)o(v)o(e)-42 1865 y(the)e(necessary)g(information)c
+(but)j(this)g(w)o(ould)e(result)j(in)e(slo)o(w)o(er)h(and)f(larger)h
+(scanners.)22 b(GLA)14 b(solv)o(es)h(this)f(problem)g(b)o(y)-42
+1915 y(ensuring)i(that)g(the)f(sen)o(tinel)h(only)f(gets)g(inserted)i
+(b)q(et)o(w)o(een)g(tok)o(ens:)k(if)14 b(this)i(is)f(the)h(case,)g(the)
+g(scanner)g(can)g(alw)o(a)o(ys)e(b)q(e)-42 1964 y(restarted)k(from)c
+(the)j(start)f(state.)25 b(T)m(o)15 b(ensure)i(that)f(the)h(sen)o
+(tinel)f(only)f(gets)i(inserted)g(b)q(et)o(w)o(een)g(tok)o(ens,)f(GLA)g
+(allo)o(ws)-42 2014 y(newline)g(\(ASCI)q(I)g(LF\))g(c)o(haracters)h(to)
+f(app)q(ear)g(only)f(at)g(the)h(end)g(of)f(a)h(tok)o(en)g(and)f
+(disallo)o(ws)f(the)i(bu\013ering)g(of)f(partial)-42
+2064 y(lines)39 2049 y Fq(5)58 2064 y Fr(.)-42 2172 y
+Fh(3.3.2)48 b(Bu\013ering)-42 2249 y Fr(RE2C-generated)17
+b(scanners)h(c)o(hec)o(k)f(if)e(the)i(bu\013er)g(needs)g(\014lling)e
+(simply)f(b)o(y)i(comparing)e Fm(YYCURSOR)g Fr(and)i
+Fm(YYLIMIT)p Fr(.)e(A)-42 2298 y(metho)q(d)d(inspired)g(b)o(y)g(the)h
+(mec)o(hanism)d(used)j(to)f(guard)g(against)g(stac)o(k)g(o)o(v)o
+(er\015o)o(w)g(in)g([17)o(])1365 2283 y Fq(6)1394 2298
+y Fr(is)g(used)i(to)e(reduce)h(the)g(amoun)o(t)-42 2348
+y(of)i(c)o(hec)o(king.)21 2398 y(Chec)o(ks)j(are)g(only)f(inserted)h
+(in)f(certain)h(k)o(ey)f(states.)27 b(These)18 b(c)o(hec)o(ks)g(simply)
+c(ensure)k(that)e(there)i(is)e(enough)h(input)-42 2448
+y(in)g(the)g(bu\013er)h(for)f(the)h(scan)f(to)g(pro)q(ceed)h(un)o(til)e
+(the)i(next)f(k)o(ey)g(state.)28 b(F)m(or)17 b(example,)f(in)g(the)i
+(DF)-5 b(A)17 b(of)f(Figure)h(3)g(it)g(is)-42 2498 y(su\016cien)o(t)e
+(to)e(c)o(hec)o(k)i(that)f(there)h(are)g(at)e(least)h(6)g(c)o
+(haracters)h(in)f(the)g(bu\013er)h(when)f(it)g(starts,)g(and)g(that)g
+(there)h(is)f(at)f(least)-42 2547 y(one)i(c)o(haracter)g(in)e(the)i
+(bu\013er)g(when)f(the)h(DF)-5 b(A)14 b(is)g(in)f(states)j(6,)d(8,)g
+(or)h(10.)k(No)13 b(other)i(c)o(hec)o(ks)g(are)g(required.)k(The)14
+b(c)o(hec)o(ks)-42 2597 y(inserted)i(in)d(k)o(ey)h(states)h(are)f(of)g
+(the)g(form)923 2748 y(6)p eop
+%%Page: 7 7
+7 6 bop 62 195 a Fm(if\(\(YYLIMIT)20 b(-)h(YYCURSOR\))f(<)i
+Fl(n)p Fm(\))f(YYFILL\()p Fl(n)p Fm(\);)-42 278 y Fr(where)c
+Fl(n)f Fr(is)f(the)i(maxim)n(um)11 b(n)o(um)o(b)q(er)k(of)g(c)o
+(haracters)i(that)f(can)g(b)q(e)g(consumed)g(b)q(efore)g(another)g(k)o
+(ey)g(state)g(is)g(reac)o(hed.)-42 328 y(F)m(or)e(example,)e(Figure)i
+(6)g(sho)o(ws)g(the)g(co)q(de)h(generated)g(for)f(state)h(6)e(in)h
+(Figure)g(3.)21 378 y(A)h(set)g(of)f(k)o(ey)h(states)h(can)f(b)q(e)g
+(determined)g(b)o(y)f(disco)o(v)o(ering)h(the)g(strongly-connected)h
+(comp)q(onen)o(ts)e(\(SCCs\))i(of)e(the)-42 428 y(DF)-5
+b(A.)12 b(An)h(SCC)f(is)f(a)h(maxima)o(l)d(subset)k(of)f(states)h(suc)o
+(h)g(that)f(there)h(exists)g(a)f(path)g(from)e(an)o(y)i(state)g(in)g
+(the)h(subset)g(to)f(an)o(y)-42 477 y(other.)24 b(The)16
+b(set)g(of)f(k)o(ey)h(states)g(consists)h(of)e(all)f(of)h(the)h(states)
+h(in)e(non-trivial)f(SCCs,)h(together)i(with)e(the)h(start)g(state.)-42
+527 y(Note)d(that)f(for)g(eac)o(h)g(SCC)g Fl(S)r Fr(,)h(w)o(e)f
+(actually)g(only)f(ha)o(v)o(e)h(to)g(include)g(a)f(subset)j(of)d
+(states)j(of)d Fl(S)k Fr(suc)o(h)e(that)f(when)g(the)h(subset)-42
+577 y(is)f(remo)o(v)o(ed,)f Fl(S)k Fr(b)q(ecomes)d(acyclic.)17
+b(Indeed,)c([17)o(])e(describ)q(es)j(a)e(simple)e(heuristic)j(for)e(c)o
+(ho)q(osing)h(suc)o(h)g(a)g(subset.)18 b(Ho)o(w)o(ev)o(er,)-42
+627 y(since)c(in)f(practice)h(most)d(of)i(the)g(\(non-trivial\))f(SCCs)
+h(encoun)o(tered)i(will)c(consist)j(of)e(a)h(single)g(state)g(the)h
+(curren)o(t)g(v)o(ersion)-42 677 y(of)f(RE2C)g(simply)e(includes)j(all)
+d(states)k(in)e(non-trivial)e(SCCs)943 662 y Fq(7)962
+677 y Fr(.)18 b(An)13 b(algorithm)e(giv)o(en)h(in)h([3)o(])g(w)o(as)g
+(used)h(to)f(compute)g(the)-42 726 y(SCCs.)-42 843 y
+Fj(3.4)56 b(Optimizations)-42 919 y Fr(Ev)o(en)17 b(go)q(o)q(d)f
+(optimizing)e(C)i(compilers)f(can)i(b)q(e)g(coaxed)f(in)o(to)g
+(generating)g(m)o(uc)o(h)f(smaller)g(and)h(sligh)o(tly)f(faster)i(co)q
+(de)g(if)-42 969 y(some)c(transformations)g(are)h(\014rst)h(applied)e
+(to)h(the)g(generated)i(co)q(de.)-42 1077 y Fh(3.4.1)48
+b(Eliminatin)o(g)13 b(Bac)o(ktrac)o(king)-42 1154 y Fr(Consider)19
+b(state)g(1)f(in)g(the)h(DF)-5 b(A)18 b(in)g(Figure)g(3.)31
+b(Note)19 b(that)f(since)h(all)e(of)h(the)h(transitions)f(from)e(state)
+j(1)f(reac)o(h)h(only)-42 1203 y(accepting)f(states,)h(bac)o(ktrac)o
+(king)f(information)c(do)q(es)k(not)f(need)i(to)e(b)q(e)h(sa)o(v)o(ed)g
+(if)e(the)i(co)q(de)g(for)f(the)h Fm(default)e Fr(case)j(is)-42
+1253 y(c)o(hanged)h(to)e(go)g(directly)h(to)g(the)g(co)q(de)h(asso)q
+(ciated)f(with)f(state)i(1.)32 b(The)19 b(result)h(of)e(this)h
+(optimization)d(is)i(sho)o(wn)h(in)-42 1303 y(Figure)d(7.)48
+b(More)17 b(generally)m(,)e(this)h(optimization)d(can)j(b)q(e)g
+(applied)f(to)h(all)f(accepting)h(states)h(whic)o(h)f(ha)o(v)o(e)g
+(transitions)647 1396 y Fm(L1:)49 b(++YYCURSOR;)647 1446
+y(M1:)g(switch\(*YYCURSOR\))p Fk(f)806 1495 y Fm(case)21
+b('a':)43 b(goto)21 b(L6;)849 1545 y Fl(:)7 b(:)g(:)806
+1595 y Fm(case)21 b('q':)43 b(goto)21 b(L6;)806 1645
+y(case)g('r':)43 b(goto)21 b(L2;)806 1695 y(case)g('s':)43
+b(goto)21 b(L6;)849 1744 y Fl(:)7 b(:)g(:)806 1794 y
+Fm(case)21 b('z':)43 b(goto)21 b(L6;)806 1844 y(default:)42
+b(goto)21 b(A4;)762 1894 y Fk(g)419 1983 y Fr(Figure)14
+b(7:)k(Co)q(de)c(for)g(state)g(1)g(with)g(bac)o(ktrac)o(king)f
+(eliminated.)-42 2083 y(only)h(to)f(accepting)i(states.)-42
+2191 y Fh(3.4.2)48 b(Optimizing)12 b Fm(switch)p Fh(es)-42
+2268 y Fr(Most)21 b(C)g(compilers)f(will)f(generate)j(either)f(a)g
+(jump)e(table)h(or)h(a)g(set)g(of)f Fm(if)g Fr(statemen)o(ts)h(for)g(a)
+f Fm(switch)g Fr(statemen)o(t)-42 2317 y(dep)q(ending)e(on)e(the)i
+(distribution)e(of)g(the)i Fm(case)e Fr(lab)q(els.)26
+b(In)17 b(man)o(y)e(compilers)h(the)h(decision)g(as)g(to)g(whic)o(h)g
+(metho)q(d)f(to)-42 2367 y(use)j(is)f(biased)f(to)o(w)o(ards)h
+(generating)g(jump)e(tables)i(since)g(in)g(most)e(cases)j(this)f
+(results)h(in)e(faster)h(alb)q(eit)f(larger)h(co)q(de.)-42
+2417 y(Ho)o(w)o(ev)o(er,)c(exp)q(erience)h(with)e(directly)h
+(executable)h(scanners)g(has)e(sho)o(wn,)g(that)g(replacing)h(man)o(y)d
+(of)i(these)h(jump)e(tables)p -42 2452 780 2 v 5 2478
+a Fn(5)22 2490 y Fo(If)f(the)g(input)f(con)o(tains)g(no)h(newlines,)f
+(a)h(GLA)h(scanner)e(will)h(attempt)f(to)h(bu\013er)f(the)g(en)o(tire)g
+(input)h(stream.)5 2518 y Fn(6)22 2530 y Fo(The)h(problem)d(of)i
+(detecting)e(stac)o(k)h(o)o(v)o(er\015o)o(w)g(in)i(LR)f(parsers)f(is)i
+(probably)d(b)q(est)i(left)f(to)h(hardw)o(are)f(mec)o(hanisms)f([12)o
+(].)5 2558 y Fn(7)22 2569 y Fo(It)i(should)f(b)q(e)h(noted)f(that)g
+(\014nding)f(the)i(minimal)e(set)i(of)g(states)f(to)h(remo)o(v)o(e)f
+(from)g(an)h(SCC)h(in)f(order)f(to)h(render)f(it)h(acyclic)e(is)j
+(equiv)n(alen)o(t)-42 2609 y(to)g(the)e(FEEDBA)o(CK)j(VER)m(TEX)h(SET)d
+(problem)f(whic)o(h)h(is)g(NP-complete)e([6].)923 2748
+y Fr(7)p eop
+%%Page: 8 8
+8 7 bop -42 195 a Fr(with)12 b Fm(if)g Fr(statemen)o(ts)g(results)h(in)
+f(scanners)i(whic)o(h)d(are)i(m)o(uc)o(h)e(smaller,)f(and)i
+(surprisingly)m(,)f(in)h(some)f(cases)i(sligh)o(tly)e(faster)-42
+245 y(as)h(w)o(ell)78 230 y Fq(8)96 245 y Fr(.)17 b(As)c(a)e(result,)h
+(the)h(capabilit)o(y)d(of)h(replacing)g(a)h Fm(switch)e
+Fr(statemen)o(t)i(with)f Fm(if)g Fr(statemen)o(ts)h(w)o(as)g(added)g
+(to)f(RE2C.)21 295 y(RE2C)j(bases)j(its)e(decision)g(on)g(whether)i(to)
+e(generate)i(a)d Fm(switch)g Fr(statemen)o(t)i(or)f(to)g(replace)h(it)f
+(with)g Fm(if)p Fr(s)g(solely)g(on)-42 345 y(the)j(densit)o(y)162
+329 y Fq(9)198 345 y Fr(of)f(the)g Fm(switch)f Fr(statemen)o(t.)27
+b(It)18 b(is)e(surprising)i(that)f(suc)o(h)h(a)e(simple)g(heuristic)i
+(w)o(orks)f(w)o(ell.)27 b(F)m(or)16 b(more)-42 394 y(esoteric)h
+(applications)e(in)g(whic)o(h)h(the)g(input)f(alphab)q(et)h(is)f(not)h
+(a)f(simple)f(in)o(terv)n(al)h(RE2C)g(has)g(the)i(adv)n(an)o(tage)d(in)
+h(that)-42 444 y(there)f(is)e(no)g(pro)o(vision)f(for)h(don't)f(care)i
+(en)o(tries)g(in)f(a)g Fm(switch)f Fr(statemen)o(t:)17
+b(if)11 b(no)h Fm(case)f Fr(matc)o(hes)h(none)g(of)f(the)i(statemen)o
+(ts)-42 494 y(in)i(the)g Fm(switch)e Fr(m)o(ust)g(b)q(e)i(executed.)22
+b(Ho)o(w)o(ev)o(er,)15 b(for)f(the)h(examples)f(in)g(T)m(able)f(1)h
+(this)h(is)f(not)h(so:)k(RE2C)14 b(simply)f(do)q(es)i(a)-42
+544 y(b)q(etter)j(job)d(of)g(generating)g(co)q(de)i(for)e
+Fm(switch)f Fr(statemen)o(ts)i(than)g(the)g(compiler.)21
+b([18)o(],)15 b([11)o(],)g(and)h([2)o(])f(also)g(address)i(the)-42
+594 y(problem)c(of)g(generating)h(go)q(o)q(d)g(co)q(de)h(for)e
+Fm(switch)g Fr(statemen)o(ts.)-42 702 y Fh(Replacing)18
+b Fm(switch)p Fh(es)g(with)g Fm(if)p Fh(s)41 b Fr(When)17
+b(replacing)g(a)f Fm(switch)g Fr(statemen)o(t)h(with)g
+Fm(if)f Fr(statemen)o(ts,)i(it)f(is)f(useful)i(to)-42
+751 y(sort)g(the)f Fm(case)p Fr(s)f(b)o(y)h(lab)q(el)f(and)g(then)h
+(group)g(them)f(according)h(to)f(rule)h(in)o(to)f(subranges,)i(as)f
+(illustrated)f(in)g(Figure)h(8.)-42 801 y(RE2C)c(replaces)h(a)f
+Fm(switch)f Fr(with)g(either)i(a)f(linear)f(or)h(binary)g(searc)o(h,)h
+(dep)q(ending)f(on)g(the)h(n)o(um)o(b)q(er)e(of)g(subranges)i(in)f(the)
+467 894 y Fm(switch\(*YYCURSOR\))p Fk(f)511 944 y Fm(case)21
+b('\\)o(000':)49 b Fl(:)7 b(:)g(:)20 b Fm(case)h('/':)115
+b(goto)21 b(L11;)576 994 y(case)g('0':)431 b(goto)21
+b(L7;)576 1043 y(case)g('1':)49 b Fl(:)7 b(:)g(:)20 b
+Fm(case)h('9':)115 b(goto)21 b(L8;)576 1093 y(case)g(':':)49
+b Fl(:)7 b(:)g(:)20 b Fm(case)h('`':)115 b(goto)21 b(L11;)576
+1143 y(case)g('a':)49 b Fl(:)7 b(:)g(:)20 b Fm(case)h('o':)115
+b(goto)21 b(L6;)576 1193 y(case)g('p':)431 b(goto)21
+b(L1;)576 1243 y(case)g('r':)49 b Fl(:)7 b(:)g(:)20 b
+Fm(case)h('z':)115 b(goto)21 b(L6;)577 1292 y(case)g(')p
+Fk(f)p Fm(':)49 b Fl(:)7 b(:)g(:)20 b Fm(case)h('\\377':)49
+b(goto)21 b(L11;)467 1342 y Fk(g)672 1432 y Fr(Figure)14
+b(8:)j Fm(switch)c Fr(for)g(state)i(0.)-42 1531 y Fm(switch)p
+Fr(.)i(If)d(there)h(are)f(only)f(a)h(few)g(subranges)h(a)e(linear)h
+(searc)o(h)h(is)f(generated;)g(otherwise,)h(a)e(binary)h(searc)o(h)h
+(is)f(used.)21 1581 y(Figure)f(9)f(and)g(Figure)h(10)f(sho)o(w)h
+(linear)f(and)h(binary)f(searc)o(hes,)i(resp)q(ectiv)o(ely)m(,)g(that)f
+(could)f(b)q(e)h(used)h(to)e(replace)52 b(the)607 1674
+y Fm(if\(*YYCURSOR)19 b(<=)i('/'\))g(goto)g(L11;)607
+1724 y(if\(*YYCURSOR)e(<=)i('0'\))g(goto)g(L7;)607 1773
+y(if\(*YYCURSOR)e(<=)i('9'\))g(goto)g(L8;)607 1823 y(if\(*YYCURSOR)e
+(<=)i('`'\))g(goto)g(L11;)607 1873 y(if\(*YYCURSOR)e(==)i('p'\))g(goto)
+g(L1;)607 1923 y(if\(*YYCURSOR)e(<=)i('z'\))g(goto)g(L6;)607
+1973 y(goto)g(L11;)477 2062 y Fr(Figure)14 b(9:)k(Linear)c(lo)q(okup)f
+(co)q(de)h(sequence)i(for)e(state)h(0.)p -42 2147 780
+2 v 5 2173 a Fn(8)22 2185 y Fo(See)c(T)m(able)g(1)g(for)g(examples.)5
+2213 y Fn(9)22 2225 y Fo(The)h(n)o(um)o(b)q(er)d(of)i(distinct)f
+(subranges)f(divided)g(b)o(y)i(the)g(total)f(n)o(um)o(b)q(er)g(of)h
+Fg(case)p Fo(s.)923 2748 y Fr(8)p eop
+%%Page: 9 9
+9 8 bop 563 188 a Fm(if\(*YYCURSOR)19 b(<=)j('`'\))p
+Fk(f)650 238 y Fm(if\(*YYCURSOR)d(<=)j('/'\))f(goto)g(L11;)650
+288 y(if\(*YYCURSOR)e(<=)j('0'\))f(goto)g(L7;)650 338
+y(if\(*YYCURSOR)e(<=)j('9'\))f(goto)g(L8;)650 388 y(goto)g(L11;)563
+438 y Fk(g)h Fm(else)f Fk(f)650 487 y Fm(if\(*YYCURSOR)e(==)j('p'\))f
+(goto)g(L1;)650 537 y(if\(*YYCURSOR)e(<=)j('z'\))f(goto)g(L6;)650
+587 y(goto)g(L11;)563 637 y Fk(g)463 726 y Fr(Figure)14
+b(10:)k(Binary)13 b(lo)q(okup)h(co)q(de)g(sequence)i(for)e(state)g(0.)
+-42 826 y Fm(switch)e Fr(in)g(Figure)h(8.)k(Note)d(in)e(particular)g
+(the)i(comparison)d(for)i(the)g(\\)p Fm(p)p Fr(")f(in)g(Figure)h(9.)k
+(This)c(optimization)d(eliminates)-42 876 y(a)k(comparison)f(eac)o(h)i
+(time)d(it)i(is)g(applied.)k(Also)c(note)h(that)f(no)g(comparisons)f
+(are)i(required)g(at)f(the)g(top)g(and)g(b)q(ottom)f(of)-42
+925 y(the)i(range.)-42 1033 y Fh(Simplifyi)o(ng)j Fm(switch)p
+Fh(es)40 b Fr(As)19 b(a)f(general)g(rule,)i(b)q(etter)g(replacemen)o(t)
+e(co)q(de)h(can)g(b)q(e)g(generated)h(for)e(a)g Fm(switch)f
+Fr(if)h(it)-42 1083 y(con)o(tains)g(few)o(er)g(subranges.)31
+b(One)18 b(w)o(a)o(y)f(of)g(reducing)h(the)g(n)o(um)o(b)q(er)f(of)g
+(subranges)i(in)e(a)g Fm(switch)p Fr(,)g(at)g(the)i(exp)q(ense)g(of)-42
+1133 y(some)c(sp)q(eed,)j(is)d(to)h(lo)q(cate)g(a)f Fi(b)n(ase)h
+Fm(switch)f Fr(whic)o(h)g(is)h(v)o(ery)g(similar)d(and)j(then)g
+(replace)h(the)f(co)q(de)h(for)e(all)f(cases)k(whic)o(h)-42
+1183 y(app)q(ear)d(iden)o(tically)d(in)i(the)g(base)h
+Fm(switch)d Fr(with)i(a)f Fm(goto)g Fr(to)h(\(the)h(co)q(de)f
+(generated)i(for\))d(the)i(base)f Fm(switch)p Fr(.)j(RE2C)c(uses)-42
+1233 y(this)18 b(optimization)d(to)i(go)q(o)q(d)g(adv)n(an)o(tage)g
+(when)h(generating)g(co)q(de)g(in)f(the)h(transitions)g(of)f(states)i
+(used)f(for)f(matc)o(hing)-42 1282 y(k)o(eyw)o(ords.)i(F)m(or)12
+b(example,)f(note)j(that)f(the)g Fm(switch)p Fr(es)f(for)h(states)h(1)f
+(through)g(4)f(di\013er)h(from)f(the)h Fm(switch)f Fr(of)g(state)i(6)e
+(only)-42 1332 y(on)i(\\)p Fm(r)p Fr(",)f(\\)p Fm(i)p
+Fr(",)g(\\)p Fm(n)p Fr(",)f(and)i(\\)p Fm(t)p Fr(",)f(resp)q(ectiv)o
+(ely)m(.)19 b(Figure)14 b(11)f(sho)o(ws)h(the)h(co)q(de)g(generated)g
+(for)e(these)j(states.)37 b(Another)15 b(w)o(a)o(y)560
+1425 y Fm(L1:)49 b(++YYCURSOR;)560 1475 y(M1:)g(if\(*YYCURSOR)19
+b(!=)j('r'\))f(goto)g(M6;)560 1525 y(L2:)49 b(++YYCURSOR;)560
+1574 y(M2:)g(if\(*YYCURSOR)19 b(!=)j('i'\))f(goto)g(M6;)560
+1624 y(L3:)49 b(++YYCURSOR;)560 1674 y(M3:)g(if\(*YYCURSOR)19
+b(!=)j('n'\))f(goto)g(M6;)560 1724 y(L4:)49 b(++YYCURSOR;)560
+1774 y(M4:)g(if\(*YYCURSOR)19 b(!=)j('t'\))f(goto)g(M6;)675
+1824 y(goto)g(L5;)444 1913 y Fr(Figure)14 b(11:)j(Co)q(de)d(for)g
+(states)h(1{4)e(after)h(all)f(optimizations.)-42 2013
+y(of)h(implemen)o(ting)d(this)j(optimization)e(is)i(to)g(construct)i(a)
+e(tunnel)g(automaton)f([9)o(])h(from)e(the)j(DF)-5 b(A,)14
+b(and)g(then)h(generate)-42 2062 y(co)q(de)g(from)d(the)j(tunnel)f
+(automaton.)-42 2170 y Fh(Common)i(Sub)q(expression)d(Eliminatio)o(n)38
+b Fr(Man)o(y)14 b(compilers)g(will)f(miss)g(the)i(fact)f(that)h
+Fm(*YYCURSOR)d Fr(in)i(Figures)h(9)-42 2220 y(and)e(10)f(should)h(b)q
+(e)g(loaded)f(in)o(to)g(a)h(register.)19 b(Most)13 b(can)f(b)q(e)i
+(coaxed)f(to)f(do)h(so)g(b)o(y)f(\014rst)i(assigning)e
+Fm(*YYCURSOR)e Fr(to)j(a)f(lo)q(cal)-42 2270 y(v)n(ariable.)-42
+2407 y Fs(4)67 b(Exp)r(erimen)n(tal)25 b(Results)-42
+2498 y Fr(T)m(able)16 b(1)h(compares)f(t)o(w)o(o)g(RE2C-generated)h(C)g
+(scanners)h(with)e(the)i(\(hand-co)q(ded\))f(lcc)g(scanner)h([5)o(])e
+(and)h(comparable)-42 2548 y(GLA-)f(and)g(\015ex-generated)i(scanners)f
+(on)f(a)g(v)n(ariet)o(y)g(of)f(platforms.)48 b(It)16
+b(rep)q(orts)i(the)e(times)f(in)h(seconds)i(required)f(b)o(y)-42
+2598 y(the)e(v)n(arious)e(scanners)i(to)e(scan)h(ab)q(out)g(170,000)e
+(lines)h(of)g(C)h(source.)19 b(The)14 b(5,607,820)d(b)o(yte)j(source)g
+(\014le)g(used)h(essen)o(tially)923 2748 y(9)p eop
+%%Page: 10 10
+10 9 bop 707 452 a Fr(time)438 b(space)328 502 y(program)p
+516 517 2 50 v 82 w(user)83 b(sys)76 b(total)p 975 517
+V 82 w(text)j(data)d(bss)f(total)p 292 519 1284 2 v 860
+554 a Fi(R4000)16 b(/)f(gc)n(c2.3.3)h(-O)p 292 570 V
+317 605 a Fr(\015ex)e(-Cem)p 516 620 2 50 v 71 w(10.36)p
+683 620 V 50 w(0.87)p 808 620 V 71 w(11.23)p 975 620
+V 71 w(5200)p 1130 620 V 71 w(4192)p 1285 620 V 92 w(48)p
+1420 620 V 72 w(9440)357 655 y(\015ex)h(-Cf)p 516 670
+V 92 w(5.44)p 683 670 V 50 w(0.72)p 808 670 V 92 w(6.16)p
+975 670 V 71 w(4688)p 1130 670 V 51 w(64384)p 1285 670
+V 91 w(48)p 1420 670 V 51 w(69120)443 705 y(lcc)p 516
+720 V 93 w(3.19)p 683 720 V 50 w(0.67)p 808 720 V 92
+w(3.86)p 975 720 V 71 w(7328)p 1130 720 V 71 w(1216)p
+1285 720 V 51 w(8256)p 1420 720 V 50 w(16800)438 754
+y(gla)p 516 769 V 92 w(2.89)p 683 769 V 50 w(0.63)p 808
+769 V 92 w(3.52)p 975 769 V 50 w(11552)p 1130 769 V 71
+w(3056)p 1285 769 V 72 w(144)p 1420 769 V 50 w(14752)417
+804 y(re2c)p 516 819 V 94 w(2.54)p 683 819 V 50 w(0.68)p
+808 819 V 92 w(3.22)p 975 819 V 50 w(13264)p 1130 819
+V 92 w(512)p 1285 819 V 113 w(0)p 1420 819 V 51 w(13776)373
+854 y(re2c)g(-s)p 516 869 V 93 w(2.38)p 683 869 V 50
+w(0.67)p 808 869 V 92 w(3.05)p 975 869 V 50 w(11056)p
+1130 869 V 71 w(4528)p 1285 869 V 113 w(0)p 1420 869
+V 51 w(15584)p 292 871 1284 2 v 737 906 a Fi(R4000)h(/)f(c)n(c2.11.2)g
+(-O)g(-Olimit)e(5000)p 292 922 V 317 957 a Fr(\015ex)h(-Cem)p
+516 972 2 50 v 92 w(9.97)p 683 972 V 50 w(0.89)p 808
+972 V 71 w(10.86)p 975 972 V 71 w(4704)p 1130 972 V 71
+w(4240)p 1285 972 V 92 w(32)p 1420 972 V 72 w(8976)357
+1007 y(\015ex)h(-Cf)p 516 1022 V 92 w(6.19)p 683 1022
+V 50 w(0.72)p 808 1022 V 92 w(6.91)p 975 1022 V 71 w(4256)p
+1130 1022 V 51 w(64432)p 1285 1022 V 91 w(32)p 1420 1022
+V 51 w(68720)443 1057 y(lcc)p 516 1072 V 93 w(2.74)p
+683 1072 V 50 w(0.72)p 808 1072 V 92 w(3.46)p 975 1072
+V 71 w(9664)p 1130 1072 V 92 w(864)p 1285 1072 V 51 w(8256)p
+1420 1072 V 50 w(18784)438 1106 y(gla)p 516 1121 V 92
+w(2.46)p 683 1121 V 50 w(0.69)p 808 1121 V 92 w(3.15)p
+975 1121 V 50 w(19232)p 1130 1121 V 71 w(2992)p 1285
+1121 V 72 w(128)p 1420 1121 V 50 w(22352)417 1156 y(re2c)p
+516 1171 V 94 w(2.97)p 683 1171 V 50 w(0.63)p 808 1171
+V 92 w(3.60)p 975 1171 V 50 w(15088)p 1130 1171 V 92
+w(528)p 1285 1171 V 113 w(0)p 1420 1171 V 51 w(15616)373
+1206 y(re2c)g(-s)p 516 1221 V 93 w(2.94)p 683 1221 V
+50 w(0.61)p 808 1221 V 92 w(3.55)p 975 1221 V 50 w(16080)p
+1130 1221 V 51 w(11808)p 1285 1221 V 112 w(0)p 1420 1221
+V 51 w(27888)p 292 1223 1284 2 v 849 1258 a Fi(SP)m(AR)o(C)g(/)g(gc)n
+(c2.3.3)g(-O)p 292 1274 V 317 1309 a Fr(\015ex)f(-Cem)p
+516 1324 2 50 v 71 w(16.03)p 683 1324 V 50 w(2.78)p 808
+1324 V 71 w(18.81)p 975 1324 V 71 w(8992)p 1130 1324
+V 113 w(24)p 1285 1324 V 92 w(48)p 1420 1324 V 72 w(9064)357
+1359 y(\015ex)h(-Cf)p 516 1374 V 92 w(7.84)p 683 1374
+V 50 w(2.69)p 808 1374 V 71 w(10.53)p 975 1374 V 71 w(6560)p
+1130 1374 V 51 w(62232)p 1285 1374 V 91 w(48)p 1420 1374
+V 51 w(68840)443 1409 y(lcc)p 516 1424 V 93 w(4.46)p
+683 1424 V 50 w(2.01)p 808 1424 V 92 w(6.47)p 975 1424
+V 71 w(7800)p 1130 1424 V 92 w(384)p 1285 1424 V 51 w(8256)p
+1420 1424 V 50 w(16440)438 1459 y(gla)p 516 1473 V 92
+w(4.08)p 683 1473 V 50 w(1.56)p 808 1473 V 92 w(5.64)p
+975 1473 V 50 w(10864)p 1130 1473 V 71 w(2168)p 1285
+1473 V 72 w(136)p 1420 1473 V 50 w(13168)417 1508 y(re2c)p
+516 1523 V 94 w(3.67)p 683 1523 V 50 w(1.76)p 808 1523
+V 92 w(5.43)p 975 1523 V 50 w(13552)p 1130 1523 V 134
+w(0)p 1285 1523 V 113 w(0)p 1420 1523 V 51 w(13552)373
+1558 y(re2c)g(-s)p 516 1573 V 93 w(3.48)p 683 1573 V
+50 w(1.70)p 808 1573 V 92 w(5.18)p 975 1573 V 50 w(15464)p
+1130 1573 V 134 w(0)p 1285 1573 V 113 w(0)p 1420 1573
+V 51 w(15464)p 292 1575 1284 2 v 880 1610 a Fi(i486)g(/)g(gc)n(c2.4.5)g
+(-O)p 292 1626 V 317 1661 a Fr(\015ex)f(-Cem)p 516 1676
+2 50 v 71 w(21.86)p 683 1676 V 50 w(1.26)p 808 1676 V
+71 w(23.12)p 975 1676 V 71 w(8536)p 1130 1676 V 113 w(20)p
+1285 1676 V 92 w(24)p 1420 1676 V 72 w(8580)357 1711
+y(\015ex)h(-Cf)p 516 1726 V 92 w(9.12)p 683 1726 V 50
+w(1.18)p 808 1726 V 71 w(10.30)p 975 1726 V 71 w(6200)p
+1130 1726 V 51 w(62228)p 1285 1726 V 91 w(24)p 1420 1726
+V 51 w(68452)443 1761 y(lcc)p 516 1776 V 93 w(5.45)p
+683 1776 V 50 w(1.22)p 808 1776 V 92 w(6.67)p 975 1776
+V 71 w(5924)p 1130 1776 V 92 w(384)p 1285 1776 V 51 w(8240)p
+1420 1776 V 50 w(14548)438 1811 y(gla)p 516 1825 V 92
+w(5.11)p 683 1825 V 50 w(1.18)p 808 1825 V 92 w(6.29)p
+975 1825 V 50 w(15496)p 1130 1825 V 71 w(2144)p 1285
+1825 V 72 w(108)p 1420 1825 V 50 w(17748)417 1860 y(re2c)p
+516 1875 V 94 w(4.73)p 683 1875 V 50 w(1.13)p 808 1875
+V 92 w(5.86)p 975 1875 V 71 w(9800)p 1130 1875 V 134
+w(0)p 1285 1875 V 113 w(0)p 1420 1875 V 72 w(9800)373
+1910 y(re2c)g(-s)p 516 1925 V 93 w(4.85)p 683 1925 V
+50 w(1.17)p 808 1925 V 92 w(6.02)p 975 1925 V 50 w(12968)p
+1130 1925 V 134 w(0)p 1285 1925 V 113 w(0)p 1420 1925
+V 51 w(12968)p 292 1927 1284 2 v 871 1962 a Fi(68020)h(/)f(gc)n(c1.40)h
+(-O)p 292 1978 V 317 2013 a Fr(\015ex)e(-Cem)p 516 2028
+2 50 v 50 w(117.37)p 683 2028 V 50 w(5.89)p 808 2028
+V 51 w(123.26)p 975 2028 V 70 w(7700)p 1130 2028 V 113
+w(20)p 1285 2028 V 92 w(22)p 1420 2028 V 72 w(7742)357
+2063 y(\015ex)h(-Cf)p 516 2078 V 71 w(50.93)p 683 2078
+V 50 w(5.27)p 808 2078 V 71 w(56.20)p 975 2078 V 71 w(5388)p
+1130 2078 V 51 w(62228)p 1285 2078 V 91 w(22)p 1420 2078
+V 51 w(67638)443 2113 y(lcc)p 516 2128 V 72 w(33.28)p
+683 2128 V 50 w(6.28)p 808 2128 V 71 w(39.56)p 975 2128
+V 71 w(4956)p 1130 2128 V 92 w(384)p 1285 2128 V 51 w(8236)p
+1420 2128 V 50 w(13576)438 2163 y(gla)p 516 2177 V 71
+w(33.80)p 683 2177 V 50 w(4.20)p 808 2177 V 71 w(38.00)p
+975 2177 V 50 w(13904)p 1130 2177 V 71 w(2144)p 1285
+2177 V 72 w(106)p 1420 2177 V 50 w(16154)417 2212 y(re2c)p
+516 2227 V 73 w(28.92)p 683 2227 V 50 w(2.91)p 808 2227
+V 71 w(31.83)p 975 2227 V 71 w(8556)p 1130 2227 V 134
+w(0)p 1285 2227 V 113 w(0)p 1420 2227 V 72 w(8556)373
+2262 y(re2c)g(-s)p 516 2277 V 72 w(30.72)p 683 2277 V
+50 w(3.19)p 808 2277 V 71 w(33.91)p 975 2277 V 71 w(9856)p
+1130 2277 V 134 w(0)p 1285 2277 V 113 w(0)p 1420 2277
+V 72 w(9856)513 2352 y(T)m(able)e(1:)18 b(Comparison)12
+b(of)h(generated)j(C)d(scanners.)913 2748 y(10)p eop
+%%Page: 11 11
+11 10 bop -42 195 a Fr(consists)15 b(of)d(10)h(copies)h(of)e(the)i
+(source)h(to)e(James)f(Clark's)h(SGML)f(parser,)i(sgmls)1263
+180 y Fq(10)1297 195 y Fr(.)k(The)c(times)e(rep)q(orted)i(are)g(a)o(v)o
+(erages)-42 245 y(for)j(10)g(trials;)h(the)g(sizes)g(rep)q(orted)h
+(include)e(ev)o(erything)h(but)g(C)f(library)f(co)q(de)1251
+230 y Fq(11)1287 245 y Fr(.)28 b(\015ex)18 b(pro)o(vides)f(a)g(n)o(um)o
+(b)q(er)g(of)g(table)-42 295 y(compression)e(options)g(including)f
+Fm(-Cem)g Fr(for)h(tables)g(optimized)f(for)h(space,)h(and)f
+Fm(-Cf)f Fr(for)h(tables)g(optimized)f(for)g(sp)q(eed.)-42
+345 y(By)f(default,)e(RE2C)h(will)f(use)h(a)g(heuristic)h(to)f(decide)h
+(if)e(a)h Fm(switch)f Fr(should)h(b)q(e)g(replaced)h(with)f
+Fm(if)p Fr(s:)17 b(the)c Fm(-s)e Fr(option)h(forces)-42
+394 y(RE2C)i(to)g(alw)o(a)o(ys)e(generate)k Fm(switch)p
+Fr(es.)21 444 y(T)m(o)21 b(mak)o(e)g(comparisons)g(more)g(meaningful,)h
+(all)e(seman)o(tic)i(pro)q(cessing)h(co)q(de)g(w)o(as)f(remo)o(v)o(ed)g
+(from)e(the)j(GLA-)-42 494 y(generated)d(and)f(lcc)f(scanners,)j(and)d
+(co)q(de)i(to)e(pro)o(vide)g(line)g(and)g(column)f(n)o(um)o(b)q(er)h
+(information)d(w)o(as)k(added)g(to)f(the)-42 544 y(RE2C)c(sp)q
+(eci\014cation.)19 b(The)14 b(remaining)e(di\013erences)k(of)d(note)h
+(b)q(et)o(w)o(een)i(the)e(scanners)i(include:)21 627
+y Fk(\017)k Fr(The)15 b(\015ex-generated)g(scanners)h(do)d(not)h(pro)o
+(vide)g(line)f(or)h(column)e(n)o(um)o(b)q(er)i(information.)21
+710 y Fk(\017)20 b Fr(The)15 b(GLA-generated)f(scanner)i(assumes)d
+(7-bit)h(input.)21 793 y(As)e(a)g(general)g(rule,)h(the)f
+(RE2C-generated)h(scanners)h(w)o(ere)f(the)f(fastest,)h(follo)o(w)o(ed)
+e(b)o(y)h(the)g(GLA-generated)h(scanner)-42 843 y(and)j(then)g(the)g
+(lcc)g(scanner.)24 b(The)15 b(\015ex-generated)i(scanners)h(w)o(ere)e
+(signi\014can)o(tly)e(slo)o(w)o(er.)23 b(Only)15 b(the)h
+(space-optimized)-42 892 y(\015ex)i(scanner)h(w)o(as)e(smaller)f(than)h
+(the)h(default)f(RE2C)g(scanner,)i(and)e(only)g(b)o(y)g(a)g(narro)o(w)g
+(margin.)26 b(There)19 b(are)e(some)-42 942 y(arc)o(hitectures,)j
+(notably)d(the)g(IBM)h(370,)f(on)g(whic)o(h)g(table)g(driv)o(en)g
+(scanners)i(will)d(probably)h(pro)q(duce)h(b)q(etter)h(results:)-42
+992 y(IBM)c(370)e(compilers)g(t)o(ypically)f(generate)j(p)q(o)q(or)f
+(co)q(de)h(for)f(large)f(routines.)21 1042 y(The)22 b(v)n(arious)f
+(scanners)j(and)d(input)h(\014les)g(used)h(for)e(the)i(tests)g(are)f(a)
+o(v)n(ailable)e(for)h(anon)o(ymous)f(ftp)i(from)e Ff(csg.-)-42
+1092 y(u)o(w)o(aterlo)q(o.ca)10 b Fr(in)f Ff(/pub/p)q
+(eter/re2c/sampler.ta)o(r.Z)p Fr(.)i(\015ex)f(is)f(a)o(v)n(ailable)e
+(for)i(anon)o(ymous)e(ftp)i(from)f Ff(ftp.uu.net)i Fr(as)f
+Ff(/pack)o(ages/-)-42 1142 y(gnu/\015ex-2.3.7.ta)o(r.Z)p
+Fr(,)14 b(GLA)h(is)g(a)o(v)n(ailable)e(for)i(anon)o(ymous)f(ftp)h(from)
+f Ff(ftp.cs.colo)o(rado.edu)i Fr(as)f(part)g(of)g(the)h(Eli)f(pac)o(k)n
+(age)-42 1191 y Ff(/pub/cs/distribs/eli/Eli3.4.2.ta)o(r.Z)p
+Fr(,)i(and)h(the)g(lcc)h(fron)o(t)e(end)i(is)f(a)o(v)n(ailable)e(for)h
+(anon)o(ymous)g(ftp)g(from)g Ff(p)o(rinceton.edu)-42
+1241 y Fr(as)f Ff(/pub/lcc/lccfe-1.9.ta)o(r.Z)p Fr(.)g(An)f(alpha)g(v)o
+(ersion)g(of)g(RE2C)g(will)f(so)q(on)i(b)q(e)g(made)e(a)o(v)n(ailable)f
+(for)i(anon)o(ymous)f(ftp)h(from)-42 1291 y Ff(csg.u)o(w)o(aterlo)q
+(o.ca)g Fr(as)f Ff(/pub/p)q(eter/re2c/re2c-0.5.ta)o(r.Z)p
+Fr(.)-42 1428 y Fs(5)67 b(Related)23 b(W)-6 b(ork)-42
+1519 y Fr(The)18 b(k)o(ey)g(to)f(the)h(p)q(erformance)f(and)g
+(\015exibilit)o(y)e(of)i(an)g(RE2C-generated)h(scanner)h(is)e(the)h
+(approac)o(h)f(used)h(to)f(deter-)-42 1569 y(mine)e(when)i(the)g
+(bu\013er)g(needs)g(\014lling.)23 b(In)o(terestingly)m(,)16
+b(the)h(lcc)g(scanner)g([5)o(])f(uses)h(a)f(similar)e(approac)o(h)i
+(\(with)g(certain)-42 1619 y(concessions)g(to)e(k)o(eep)g(the)h(b)q(o)q
+(okk)o(eeping)e(manageable.\))-42 1735 y Fj(5.1)56 b(Comparison)18
+b(With)g(GLA)-42 1812 y Fr(It)h(is)f(natural)f(to)h(compare)f(RE2C)h
+(to)g(GLA)f([7])g(as)h(it)g(also)f(generates)j(directly)f(executable)g
+(scanners.)32 b(RE2C)18 b(and)-42 1861 y(GLA)d(ha)o(v)o(e)g(man)o(y)e
+(di\013erences)k(simply)c(b)q(ecause)j(they)g(are)f(targeted)h(for)e
+(di\013eren)o(t)i(t)o(yp)q(es)g(of)e(users:)22 b(GLA)14
+b(is)h(in)o(tended)-42 1911 y(for)g(p)q(eople)h(who)f(simply)e(wish)i
+(to)f(lev)o(erage)i(their)f(e\013orts)i(with)d(existing)h(to)q(ols)g
+(and)g(libraries;)g(RE2C)f(is)h(in)o(tended)h(for)-42
+1961 y(p)q(eople)d(that)g(ha)o(v)o(e)f(more)g(sp)q(ecialized)h(needs)h
+(and)e(are)h(willing)d(to)j(pro)o(vide)f(their)h(o)o(wn)f(supp)q(ort)h
+(routines.)18 b(F)m(or)12 b(example,)-42 2011 y(GLA)h(pro)o(vides)h(a)f
+(go)q(o)q(d)f(bu\013ering)i(mec)o(hanism,)c(RE2C)j(users)i(m)o(ust)d
+(supply)h(their)h(o)o(wn.)j(These)d(di\013erences,)i(ho)o(w)o(ev)o(er,)
+-42 2061 y(are)f(not)f(unique)f(to)h(GLA)g(and)f(ha)o(v)o(e)h(b)q(een)h
+(addressed)h(for)d(the)i(most)e(part)h(in)f(previous)h(sections.)21
+2111 y(Of)j(more)f(in)o(terest)i(is)f(the)h(di\013erences)i(in)c(the)i
+(co)q(de)g(that)f(RE2C)g(and)g(GLA)g(generate.)29 b(Scanners)18
+b(generated)h(b)o(y)-42 2160 y(RE2C)14 b(and)g(GLA)f(di\013er)h
+(primarily)e(in)h(t)o(w)o(o)h(asp)q(ects:)19 b(ho)o(w)14
+b(they)g(determine)g(when)h(the)f(bu\013er)h(needs)g(\014lling,)d(and)i
+(ho)o(w)-42 2210 y(they)h(generate)g(co)q(de)g(for)e
+Fm(switch)p Fr(es.)21 2260 y(GLA)d(uses)i(the)f(ASCI)q(I)g(NUL)f(c)o
+(haracter)i(as)f(the)g(sen)o(tinel)g(to)f(determine)h(when)g(the)g
+(bu\013er)g(needs)h(\014lling.)j(T)m(o)10 b(impro)o(v)o(e)-42
+2310 y(the)j(sp)q(eed)h(and)e(reduce)i(the)f(size)g(of)e(the)i
+(generated)g(scanners)h(GLA)e(bu\013ers)i(only)d(complete)h(lines)g
+(and)g(restricts)i(tok)o(ens)-42 2360 y(to)d(those)g(that)f(do)g(not)g
+(con)o(tain)g(newline)g(\(ASCI)q(I)h(LF\))f(c)o(haracters)1013
+2345 y Fq(12)1050 2360 y Fr(.)17 b(If)10 b(a)g(tok)o(en)g(with)g(an)g
+(em)o(b)q(edded)h(newline)f(c)o(haracter)-42 2409 y(\(suc)o(h)k(as)f(a)
+f(commen)o(t\))f(is)h(required)i(it)e(m)o(ust)f(b)q(e)j(recognized)g
+(with)e(an)g(auxiliary)f(scanner)j(written)f(in)f(C.)g(This)h(co)q(de)g
+(has)-42 2459 y(to)h(p)q(erform)f(the)i(bu\013ering-related)f(b)q(o)q
+(okk)o(eeping)g(that)g(is)g(done)g(automatically)d(b)o(y)i
+(GLA-generated)i(co)q(de.)p -42 2494 780 2 v -11 2521
+a Fn(10)22 2532 y Fo(Av)n(ailable)10 b(for)h(anon)o(ymous)d(ftp)j(from)
+f Fe(ftp.uu.net)i Fo(as)f Fe(/pub/text-p)o(ro)q(cessing/sg)o(ml/sgmls-)
+o(1.1.)o(ta)o(r.Z)o Fo(.)-11 2560 y Fn(11)22 2572 y Fo(The)h
+(GLA-generated)c(scanner)i(sizes)h(also)f(do)h(not)g(include)f(the)g
+(size)h(of)g(an)g(error)g(rep)q(orting)e(mo)q(dule)g
+Fg(err.o)p Fo(.)-11 2600 y Fn(12)22 2612 y Fo(This)j(is)f(discussed)f
+(in)h(more)f(detail)g(in)h(Section)f(3.3.1.)913 2748
+y Fr(11)p eop
+%%Page: 12 12
+12 11 bop 21 195 a Fr(The)20 b(mec)o(hanism)e(RE2C)h(uses)i(to)f
+(re\014ll)g(the)g(bu\013er)h(eliminates)d(these)k(restrictions)f(and)e
+(y)o(et)i(allo)o(ws)d(RE2C)i(to)-42 245 y(generate)15
+b(faster)f(and)g(smaller)e(scanners.)19 b(RE2C)13 b(also)g(allo)o(ws)g
+(b)q(oth)g(auxiliary)f(and)h(primary)f(scanners)j(to)f(b)q(e)g(sp)q
+(eci\014ed)-42 295 y(using)g(regular)g(expressions.)20
+b(F)m(or)13 b(example,)f(App)q(endix)i(A)g(con)o(tains)g(an)g
+(auxiliary)e(scanner)j(for)f(commen)o(ts.)21 345 y(Lik)o(e)i(RE2C,)g
+(GLA)h(usually)f(replaces)i Fm(switch)p Fr(es)e(with)h
+Fm(if)p Fr(s.)27 b(Unlik)o(e)16 b(RE2C,)g(GLA)g(do)q(es)i(not)f(use)g
+(a)g Fm(case)p Fr(-based)-42 394 y(heuristic)f(to)f(decide)h(whic)o(h)f
+Fm(switch)p Fr(es)g(to)g(replace:)21 b(rather,)16 b(it)f(alw)o(a)o(ys)f
+(generates)j(a)e Fm(switch)e Fr(for)i(the)h(start)g(state)g(and)-42
+444 y(uses)g Fm(if)p Fr(s)d(for)h(the)g(rest.)20 b(GLA)13
+b(replaces)i Fm(switch)p Fr(es)f(with)f(co)q(de)i(sequences)h(of)e(the)
+g(form:)138 518 y Fm(if\(*YYCURSOR)20 b Fi(in)i Fl(S)505
+524 y Fq(1)524 518 y Fm(\))f(goto)g(L)698 524 y Fq(1)717
+518 y Fm(;)226 562 y(.)226 579 y(.)226 595 y(.)138 645
+y(if\(*YYCURSOR)f Fi(in)i Fl(S)505 651 y Fd(n)528 645
+y Fm(\))f(goto)g(L)702 651 y Fd(n)725 645 y Fm(;)-42
+737 y Fr(Bit)12 b(v)o(ectors)h(are)f(used)h(for)e(all)f(mem)o(b)q
+(ership)g(tests)k(in)o(v)o(olving)9 b(sets)k(with)e(more)g(than)g(one)h
+(elemen)o(t.)17 b(As)12 b(an)g(optimization,)-42 787
+y(if)k(a)f(state)i(has)f(a)g(transition)g(to)g(itself)f(the)i(test)g
+(as)f(to)g(whether)h(to)f(remain)f(in)g(the)i(same)e(state)i(or)f(not)g
+(is)g(p)q(erformed)-42 837 y(\014rst.)25 b(F)m(or)16
+b(example,)e(Figure)i(12)f(sho)o(ws)i(the)f(GLA-generated)h(co)q(de)f
+(for)g(state)g(8)g(in)f(Figure)h(2)1506 822 y Fq(13)1541
+837 y Fr(.)73 b(Note)16 b(the)g(use)h(of)291 926 y Fm(static)j
+(unsigned)g(char)h(yytable[])f(=)i Fk(f)291 976 y Fm(0x00,)e(0x00,)h
+(0x00,)g(0x00,)g(/*)65 b(0.)g(1.)g(2.)f(3.)22 b(*/)291
+1025 y Fl(:)7 b(:)g(:)291 1075 y Fm(0x00,)20 b(0x00,)h(0x00,)g(0x00,)g
+(/*)43 b(,)g(-)h(.)f(/)22 b(*/)291 1125 y(0x01,)e(0x01,)h(0x01,)g
+(0x01,)g(/*)43 b(0)g(1)h(2)f(3)22 b(*/)291 1175 y(0x01,)e(0x01,)h
+(0x01,)g(0x01,)g(/*)43 b(4)g(5)h(6)f(7)22 b(*/)291 1225
+y(0x01,)e(0x01,)h(0x00,)g(0x00,)g(/*)43 b(8)g(9)h(:)f(;)22
+b(*/)291 1275 y(0x00,)e(0x00,)h(0x00,)g(0x00,)g(/*)43
+b(<)g(=)h(>)f(?)22 b(*/)291 1324 y Fl(:)7 b(:)g(:)291
+1374 y Fm(0x00,)20 b(0x00,)h(0x00,)g(0x00)g Fk(g)p Fm(;)g(/*)43
+b(|)h Fk(g)108 b Fm(127.)21 b(*/)378 1419 y(.)378 1435
+y(.)378 1452 y(.)291 1502 y(L8:)g(if\(yytable[\(*YYC)o(URSOR)o(++\)+0)o
+(])e(&)j(1<<0\))e(goto)h(L8;--YYCURSOR;)291 1552 y(goto)g(A3;)527
+1631 y Fr(Figure)14 b(12:)j(GLA)d(co)q(de)h(for)e(state)i(8)e(in)h
+(Figure)g(2.)-42 1731 y(128)i(elemen)o(t)f(en)o(tries)i(for)e(the)i
+(bit)f(v)o(ectors)h(to)e(reduce)j(the)e(scanner)i(size:)k(A)16
+b(GLA-generated)h(scanner)g(will)e(crash)h(or)-42 1781
+y(otherwise)f(b)q(eha)o(v)o(e)g(unpredictably)f(if)f(a)h(non-ASCI)q(I)f
+(c)o(haracter)j(app)q(ears)e(in)g(the)g(source)1395 1766
+y Fq(14)1432 1781 y Fr(.)21 1831 y(In)k(some)g(sense)j(the)e(results)h
+(of)e(Section)h(4)f(are)i(a)e(bit)g(misleading:)26 b(the)19
+b(GLA)f(sp)q(eci\014cation)i(that)e(w)o(as)h(used)h(to)-42
+1880 y(obtain)15 b(the)g(\014gures)h(in)e(T)m(able)g(1)h(is)g(not)f(a)h
+(t)o(ypical)f(GLA)g(sp)q(eci\014cation.)22 b(Usually)14
+b(scanners)j(implem)o(en)o(ted)c(using)i(GLA)-42 1930
+y(will)h(handle)i(k)o(eyw)o(ords)f(as)h(iden)o(ti\014ers)g(as)g(GLA)f
+(has)g(b)q(een)i(optimized)d(for)h(this)g([7)o(].)29
+b(T)m(able)16 b(2)h(presen)o(ts)j(a)d(more)f(fair)-42
+1980 y(comparison:)h(the)e(k)o(eyw)o(ord)f(matc)o(hing)e(rules)j(w)o
+(ere)g(remo)o(v)o(ed)e(from)f(b)q(oth)j(the)f(GLA)g(and)g(RE2C)f(sp)q
+(eci\014cations.)39 b(The)-42 2030 y(RE2C-generated)18
+b(scanners)g(w)o(ere)f(still)e(faster)i(and)g(smaller)d(except)k(on)e
+(the)h(MIPS)g(R4000,)e(where)i(the)g(cc-compiled)-42
+2080 y(GLA)d(scanner)h(w)o(as)f(sligh)o(tly)f(faster.)21
+2130 y(Note)k(ho)o(w)o(ev)o(er,)g(that)g(the)g(RE2C)g(sp)q
+(eci\014cation)g(can)g(b)q(e)g(substan)o(tially)f(sp)q(ed)i(up)f(b)o(y)
+f(using)h(a)f(tec)o(hnique)i(akin)e(to)-42 2179 y(lo)q(op)e(unrolling.)
+i(Replacing)d(the)i(original)d(k)o(eyw)o(ord)h(matc)o(hing)f(rule)j(in)
+e(the)i(RE2C)e(sp)q(eci\014cation)1548 2164 y Fq(15)138
+2252 y Fm(L)22 b(I*)435 b Fk(f)22 b Fm(RET\(ID\);)e Fk(g)-42
+2345 y Fr(with)14 b(the)h(follo)o(wing)c(rules)p -42
+2380 780 2 v -11 2407 a Fn(13)22 2419 y Fo(Actually)m(,)f(GLA)i(w)o
+(ould)f(generate)e(a)i Fg(while)f Fo(statemen)o(t.)j(Most)e(compilers)e
+(will)j(generate)d(the)i(same)f(ob)r(ject)g(co)q(de)g(for)h(b)q(oth.)
+-11 2446 y Fn(14)22 2458 y Fo(No)h(c)o(hec)o(ks)e(are)h(made)f(to)h
+(ensure)f(that)g(only)h(7-bit)f(c)o(haracters)f(app)q(ear)h(in)h(the)g
+(input.)-11 2486 y Fn(15)22 2498 y Fg(L)e Fo(=)i Fg([a-zA-Z)p
+215 2498 11 2 v 10 w(])g Fo(and)g Fg(I)e Fo(=)i Fg([a-zA-Z)p
+514 2498 V 10 w(0-9])n Fo(.)913 2748 y Fr(12)p eop
+%%Page: 13 13
+13 12 bop 727 776 a Fr(time)387 b(space)380 826 y(program)p
+557 841 2 50 v 61 w(user)72 b(sys)65 b(total)p 974 841
+V 62 w(text)58 b(data)e(bss)64 b(total)p 355 842 1158
+2 v 850 877 a Fi(R4000)16 b(/)f(gc)n(c2.3.3)g(-O)p 355
+894 V 479 929 a Fr(gla)p 557 944 2 50 v 71 w(2.63)p 703
+944 V 51 w(0.58)p 828 944 V 71 w(3.21)p 974 944 V 50
+w(5040)p 1109 944 V 50 w(2496)p 1243 944 V 51 w(144)p
+1357 944 V 71 w(7680)458 979 y(re2c)p 557 994 V 73 w(2.50)p
+703 994 V 51 w(0.65)p 828 994 V 71 w(3.15)p 974 994 V
+50 w(6448)p 1109 994 V 71 w(512)p 1243 994 V 92 w(0)p
+1357 994 V 72 w(6960)414 1028 y(re2c)g(-s)p 557 1043
+V 72 w(2.49)p 703 1043 V 51 w(0.67)p 828 1043 V 71 w(3.16)p
+974 1043 V 50 w(4976)p 1109 1043 V 50 w(4224)p 1243 1043
+V 92 w(0)p 1357 1043 V 72 w(9200)382 1078 y(re2c)g(-s)f
+Fk(y)p 557 1093 V 72 w Fr(2.08)p 703 1093 V 51 w(0.59)p
+828 1093 V 71 w(2.67)p 974 1093 V 50 w(5792)p 1109 1093
+V 50 w(4224)p 1243 1093 V 92 w(0)p 1357 1093 V 52 w(10016)p
+355 1095 1158 2 v 726 1130 a Fi(R4000)i(/)f(c)n(c2.11.2)g(-O)g(-Olimit)
+e(5000)p 355 1146 V 479 1181 a Fr(gla)p 557 1196 2 50
+v 71 w(2.43)p 703 1196 V 51 w(0.64)p 828 1196 V 71 w(3.07)p
+974 1196 V 50 w(6512)p 1109 1196 V 50 w(2416)p 1243 1196
+V 51 w(128)p 1357 1196 V 71 w(9056)458 1231 y(re2c)p
+557 1246 V 73 w(2.93)p 703 1246 V 51 w(0.67)p 828 1246
+V 71 w(3.60)p 974 1246 V 50 w(8048)p 1109 1246 V 71 w(528)p
+1243 1246 V 92 w(0)p 1357 1246 V 72 w(8576)414 1281 y(re2c)i(-s)p
+557 1296 V 72 w(3.04)p 703 1296 V 51 w(0.64)p 828 1296
+V 71 w(3.68)p 974 1296 V 50 w(9952)p 1109 1296 V 50 w(2208)p
+1243 1296 V 92 w(0)p 1357 1296 V 52 w(12160)p 355 1297
+1158 2 v 838 1332 a Fi(SP)m(AR)o(C)g(/)g(gc)n(c2.3.3)g(-O)p
+355 1349 V 479 1384 a Fr(gla)p 557 1399 2 50 v 71 w(4.08)p
+703 1399 V 51 w(1.65)p 828 1399 V 71 w(5.73)p 974 1399
+V 50 w(5472)p 1109 1399 V 50 w(1656)p 1243 1399 V 51
+w(136)p 1357 1399 V 71 w(7264)458 1434 y(re2c)p 557 1449
+V 73 w(3.77)p 703 1449 V 51 w(1.67)p 828 1449 V 71 w(5.44)p
+974 1449 V 50 w(7008)p 1109 1449 V 113 w(0)p 1243 1449
+V 92 w(0)p 1357 1449 V 72 w(7008)414 1483 y(re2c)g(-s)p
+557 1498 V 72 w(3.66)p 703 1498 V 51 w(2.37)p 828 1498
+V 71 w(6.03)p 974 1498 V 50 w(9112)p 1109 1498 V 113
+w(0)p 1243 1498 V 92 w(0)p 1357 1498 V 72 w(9112)p 355
+1500 1158 2 v 869 1535 a Fi(i486)g(/)g(gc)n(c2.4.5)g(-O)p
+355 1551 V 479 1586 a Fr(gla)p 557 1601 2 50 v 71 w(5.04)p
+703 1601 V 51 w(1.15)p 828 1601 V 71 w(6.19)p 974 1601
+V 50 w(5368)p 1109 1601 V 50 w(1632)p 1243 1601 V 51
+w(108)p 1357 1601 V 71 w(7108)458 1636 y(re2c)p 557 1651
+V 73 w(4.75)p 703 1651 V 51 w(1.17)p 828 1651 V 71 w(5.92)p
+974 1651 V 50 w(5448)p 1109 1651 V 113 w(0)p 1243 1651
+V 92 w(0)p 1357 1651 V 72 w(5448)414 1686 y(re2c)g(-s)p
+557 1701 V 72 w(5.06)p 703 1701 V 51 w(1.13)p 828 1701
+V 71 w(6.19)p 974 1701 V 50 w(8248)p 1109 1701 V 113
+w(0)p 1243 1701 V 92 w(0)p 1357 1701 V 72 w(8248)p 355
+1703 1158 2 v 860 1737 a Fi(68020)h(/)f(gc)n(c1.40)h(-O)p
+355 1754 V 479 1789 a Fr(gla)p 557 1804 2 50 v 51 w(32.69)p
+703 1804 V 50 w(3.37)p 828 1804 V 50 w(36.06)p 974 1804
+V 50 w(4772)p 1109 1804 V 50 w(1632)p 1243 1804 V 51
+w(106)p 1357 1804 V 71 w(6510)458 1839 y(re2c)p 557 1854
+V 53 w(29.86)p 703 1854 V 50 w(3.74)p 828 1854 V 50 w(33.60)p
+974 1854 V 50 w(4468)p 1109 1854 V 113 w(0)p 1243 1854
+V 92 w(0)p 1357 1854 V 72 w(4468)414 1889 y(re2c)f(-s)p
+557 1904 V 52 w(28.77)p 703 1904 V 50 w(3.55)p 828 1904
+V 50 w(32.32)p 974 1904 V 50 w(5616)p 1109 1904 V 113
+w(0)p 1243 1904 V 92 w(0)p 1357 1904 V 72 w(5616)108
+1978 y(T)m(able)i(2:)24 b(Scanner)18 b(p)q(erformance)f(with)g(k)o(eyw)
+o(ords)g(treated)h(as)f(iden)o(ti\014ers.)29 b Fk(y)17
+b Fr(uses)h(an)f(\\unrolled")108 2028 y(sp)q(eci\014cation.)913
+2748 y(13)p eop
+%%Page: 14 14
+14 13 bop 138 185 a Fm(L)501 b Fk(f)22 b Fm(RET\(ID\);)e
+Fk(g)138 235 y Fm(L)i(I)457 b Fk(f)22 b Fm(RET\(ID\);)e
+Fk(g)138 284 y Fm(L)i(I)g(I)413 b Fk(f)22 b Fm(RET\(ID\);)e
+Fk(g)138 334 y Fm(L)i(I)g(I)f(I)370 b Fk(f)22 b Fm(RET\(ID\);)e
+Fk(g)138 384 y Fm(L)i(I)g(I)f(I)h(I)326 b Fk(f)22 b Fm(RET\(ID\);)e
+Fk(g)138 434 y Fm(L)i(I)g(I)f(I)h(I)f(I)283 b Fk(f)22
+b Fm(RET\(ID\);)e Fk(g)138 484 y Fm(L)i(I)g(I)f(I)h(I)f(I)h(I)239
+b Fk(f)22 b Fm(RET\(ID\);)e Fk(g)138 533 y Fm(L)i(I)g(I)f(I)h(I)f(I)h
+(I)f(I)196 b Fk(f)22 b Fm(RET\(ID\);)e Fk(g)138 583 y
+Fm(L)i(I*)435 b Fk(f)22 b Fm(RET\(ID\);)e Fk(g)-42 677
+y Fr(reduces)f(the)e(n)o(um)o(b)q(er)f(of)g(end-of-bu\013er)h(c)o(hec)o
+(ks)h(and)e(results)i(in)e(a)g(signi\014can)o(t)g(sp)q(eed)i(impro)o(v)
+o(emen)o(t)13 b(o)o(v)o(er)k(the)g(GLA-)-42 726 y(generated)f(scanner.)
+-42 864 y Fs(6)67 b(Summary)24 b(and)f(F)-6 b(urther)25
+b(W)-6 b(ork)-42 955 y Fr(This)16 b(pap)q(er)h(has)f(describ)q(ed)h
+(RE2C,)e(a)h(to)q(ol)f(for)g(creating)h(lexical)f(analyzers.)24
+b(Unlik)o(e)16 b(other)g(suc)o(h)h(to)q(ols,)e(RE2C)g(con-)-42
+1004 y(cen)o(trates)i(solely)d(on)g(generating)g(e\016cien)o(t)h(co)q
+(de)g(for)f(matc)o(hing)f(regular)h(expressions.)21 b(Not)14
+b(only)g(do)q(es)h(this)g(singleness)-42 1054 y(of)h(purp)q(ose)i(mak)o
+(e)c(RE2C)i(more)g(suitable)g(for)g(a)g(wider)g(v)n(ariet)o(y)g(of)g
+(applications,)f(it)h(allo)o(ws)f(it)h(to)g(generate)i(scanners)-42
+1104 y(whic)o(h)c(approac)o(h)g(hand-crafted)h(scanners)g(in)f(terms)g
+(of)f(size)i(and)e(sp)q(eed.)20 b(Compared)13 b(to)h(scanners)i
+(generated)f(b)o(y)f(\015ex,)-42 1154 y(and)g(GLA,)f(RE2C-generated)i
+(scanners)g(are)g(faster)f(and)g(in)f(man)o(y)f(cases)k(smaller)c(as)i
+(w)o(ell.)21 1204 y(While)g(RE2C-generated)h(scanners)h(p)q(erform)e(w)
+o(ell,)g(there)i(is)e(still)g(ro)q(om)f(for)h(impro)o(v)o(emen)o(t.)k
+(Near)d(term)f(impro)o(v)o(e-)-42 1254 y(men)o(ts)g(include)g(using)f
+(GLA's)h(bit)f(v)o(ectors)i(to)f(simplify)d(some)i Fm(switch)p
+Fr(es)h(and)f(adding)g(a)h(state)h(unrolling)d(op)q(erator.)21
+1303 y(In)i(the)g(longer)g(term,)f(inline)g(actions)h(will)e(b)q(e)i
+(added)h(to)e(RE2C.)g(F)m(or)h(example,)e(a)h(sp)q(eci\014cation)i(lik)
+o(e)138 1386 y Fm(D)22 b Fk(f)p Fm(c)f(=)h($)p Fk(g)f
+Fm(\(D)h Fk(f)p Fm(c)f(=)h(10*c)e(+)i($)p Fk(g)p Fm(\)*)-42
+1469 y Fr(migh)o(t)15 b(b)q(e)i(used)g(to)f(obtain)g(the)h(v)n(alue)f
+(of)g(a)g(previously)g(scanned)i(in)o(teger.)26 b(T)o(ypically)m(,)14
+b(these)k(sorts)g(of)d(sp)q(eci\014cations)-42 1519 y(w)o(ould)f(b)q(e)
+g(used)h(as)f(an)f(action)h(in)f(some)g(other)i(sp)q(eci\014cation.)-42
+1656 y Fs(7)67 b(Ac)n(kno)n(wledgmen)n(ts)-42 1747 y
+Fr(The)15 b(authors)f(thank)g(the)g(referees)j(for)c(their)h(man)o(y)e
+(v)n(aluable)h(commen)o(ts)f(and)i(suggestions.)913 2748
+y(14)p eop
+%%Page: 15 15
+15 14 bop -42 195 a Fs(A)68 b(C)22 b(Scanner)-42 276
+y Fg(#define)16 b(BSIZE)192 b(8192)-42 315 y(#define)16
+b(RET\(i\))174 b({s->cur)15 b(=)i(cursor;)e(return)h(i;})-42
+394 y(#define)g(YYCTYPE)156 b(uchar)-42 433 y(#define)16
+b(YYCURSOR)138 b(cursor)-42 473 y(#define)16 b(YYLIMIT)156
+b(s->lim)-42 512 y(#define)16 b(YYMARKER)138 b(s->ptr)-42
+552 y(#define)16 b(YYFILL\(n\))120 b({cursor)15 b(=)i(fill\(s,)e
+(cursor\);})-42 631 y(typedef)h(struct)f(Scanner)g({)29
+670 y(int)299 b(fd;)29 709 y(uint)281 b(line;)29 749
+y(uchar)263 b(*bot,)16 b(*tok,)g(*ptr,)f(*cur,)h(*pos,)g(*lim,)g(*top,)
+g(*eof;)-42 788 y(})i(Scanner;)-42 867 y(uchar)e(*fill\(Scann)o(er)e
+(*s,)j(uchar)f(*cursor\){)29 907 y(if\(!s->eof)o(\){)100
+946 y(uint)g(cnt)g(=)i(s->tok)d(-)i(s->bot;)100 985 y(if\(cnt\){)d(/*)j
+(move)g(partial)e(token)h(to)g(bottom)g(*/)170 1025 y(memcpy\(s->b)o
+(ot,)e(s->tok,)h(s->lim)g(-)j(s->tok\);)d(s->tok)g(=)i(s->bot;)170
+1064 y(s->ptr)f(-=)h(cnt;)f(cursor)f(-=)i(cnt;)f(s->pos)g(-=)h(cnt;)f
+(s->lim)g(-=)h(cnt;)100 1104 y(})100 1143 y(if\(\(s->to)o(p)e(-)i
+(s->lim\))e(<)i(BSIZE\){)f(/*)g(buffer)g(needs)g(to)h(be)g(expanded)d
+(*/)170 1183 y(uchar)i(*buf)g(=)i(\(uchar*\))c(malloc\(\(\(s-)o(>li)o
+(m)h(-)i(s->bot\))e(+)i(BSIZE\)*size)o(of\()o(uch)o(ar\))o(\);)170
+1222 y(memcpy\(buf,)d(s->tok,)h(s->lim)h(-)h(s->tok\);)e(s->tok)g(=)i
+(buf;)170 1262 y(s->ptr)f(=)h(&buf[s->pt)o(r)e(-)i(s->bot];)e(cursor)g
+(=)j(&buf[curs)o(or)c(-)k(s->bot];)170 1301 y(s->pos)e(=)h(&buf[s->po)o
+(s)e(-)i(s->bot];)e(s->lim)g(=)j(&buf[s->l)o(im)c(-)k(s->bot];)170
+1340 y(s->top)e(=)h(&s->lim[BS)o(IZE)o(];)170 1380 y(free\(s->bot)o
+(\);)d(s->bot)i(=)h(buf;)100 1419 y(})100 1459 y(if\(\(cnt)e(=)i
+(read\(s->fd)o(,)e(\(char*\))g(s->lim,)g(BSIZE\)\))g(!=)i(BSIZE\){)e
+(/*)i(EOF)g(*/)170 1498 y(s->eof)f(=)h(&s->lim[cn)o(t];)d(*\(s->eof\)+)
+o(+)h(=)i('\\n';)100 1538 y(})100 1577 y(s->lim)e(+=)i(cnt;)29
+1616 y(})29 1656 y(return)f(cursor;)-42 1695 y(})-42
+1774 y(int)h(scan\(Scann)o(er)d(*s\){)100 1814 y(uchar)h(*cursor)h(=)h
+(s->cur;)-42 1853 y(std:)70 b(s->tok)15 b(=)i(cursor;)-42
+1892 y(/*!re2c)100 1932 y("/*")157 b({)17 b(goto)f(comment;)f(})-42
+2013 y Fc(:)6 b(:)g(:)11 b Fb(mor)n(e)j(rules)e Fc(:)6
+b(:)g(:)100 2086 y Fg([)17 b(\\t\\v\\f]+)50 b({)17 b(goto)f(std;)h(})
+100 2125 y("\\n")157 b({)17 b(if\(cursor)e(==)i(s->eof\))e(RET\(EOI\);)
+f(s->pos)i(=)h(cursor;)e(s->line++;)364 2164 y(goto)h(std;)h(})100
+2204 y([\\000-\\37)o(7])32 b({)17 b(printf\("une)o(xpe)o(cte)o(d)d
+(character:)h('\045c'\\n",)f(*s->tok\);)364 2243 y(goto)i(std;)h(})-42
+2283 y(*/)-42 2322 y(comment:)-42 2362 y(/*!re2c)100
+2401 y("*/")157 b({)17 b(goto)f(std;)h(})100 2440 y("\\n")157
+b({)17 b(if\(cursor)e(==)i(s->eof\))e(RET\(EOI\);)f(s->tok)i(=)h
+(s->pos)e(=)j(cursor;)d(s->line++;)364 2480 y(goto)h(comment;)f(})100
+2519 y([\\000-\\37)o(7])32 b({)17 b(goto)f(comment;)f(})-42
+2559 y(*/)-42 2598 y(})913 2748 y Fr(15)p eop
+%%Page: 16 16
+16 15 bop -42 195 a Fs(References)-21 286 y Fr([1])20
+b Fa(Aho,)d(A.)g(V.,)f(Sethi,)h(R.,)h(and)f(Ullman,)h(J.)e(D.)21
+b Fi(Compilers:)e(principles,)c(te)n(chniques,)h(and)g(to)n(ols)p
+Fr(.)k(Addison-)44 336 y(W)m(esley)m(,)13 b(1988.)k(Reprin)o(ted)d
+(with)f(corrections.)-21 419 y([2])20 b Fa(Bernstein,)c(R.)f(L.)k
+Fr(Pro)q(ducing)13 b(go)q(o)q(d)g(co)q(de)i(for)e(the)h(case)g
+(statemen)o(t.)j Fi(Softwar)n(e{Pr)n(actic)n(e)d(and)h(Exp)n(erienc)n
+(e)g(15)p Fr(,)44 469 y(10)e(\(Octob)q(er)j(1985\),)c(1021{1024.)-21
+552 y([3])20 b Fa(DeRemer,)e(F.,)f(and)g(Pennello,)i(T.)h
+Fr(E\016cien)o(t)15 b(computation)e(of)h Fl(LALR)p Fr(\(1\))h(lo)q
+(ok-ahead)f(sets.)21 b Fi(A)o(CM)15 b(T)m(r)n(ans-)44
+602 y(actions)g(on)g(Pr)n(o)n(gr)n(amming)g(L)n(anguages)h(and)f
+(Systems)g(4)p Fr(,)f(4)g(\(Octob)q(er)h(1982\),)e(615{649.)-21
+685 y([4])20 b Fa(Ellis,)c(M.,)g(and)g(Str)o(oustr)o(up,)h(B.)i
+Fi(The)c(A)o(nnotate)n(d)h(C++)e(R)n(efer)n(enc)n(e)h(Manual)p
+Fr(.)j(Addison-W)m(esley)m(,)13 b(1990.)-21 768 y([5])20
+b Fa(Fraser,)c(C.)f(W.,)h(and)g(Hanson,)h(D.)f(R.)i Fr(A)c
+(retargetable)g(compiler)e(for)h(ANSI)h(C.)j Fi(SIGPLAN)e(Notic)n(es)f
+(26)p Fr(,)g(10)44 817 y(\(Octob)q(er)h(1991\),)e(29{43.)-21
+900 y([6])20 b Fa(Garey,)g(M.)d(R.,)i(and)g(Johnson,)h(D.)e(S.)25
+b Fi(Computers)16 b(and)h(Intr)n(actability:)k(A)c(Guide)g(to)f(the)h
+(The)n(ory)f(of)h(NP-)44 950 y(Completeness)p Fr(.)h(W.)13
+b(H.)g(F)m(reeman)g(and)h(Compan)o(y)m(,)d(1991.)-21
+1033 y([7])20 b Fa(Gra)m(y,)14 b(R.)e(W.)g Fl(\015)r
+Fr(-GLA)e(-)g(A)g(generator)g(for)g(lexical)f(analyzers)h(that)g
+(programmers)e(can)i(use.)i Fi(USENIX)g(Confer)n(enc)n(e)44
+1083 y(Pr)n(o)n(c)n(e)n(e)n(dings)17 b Fr(\(June)e(1988\),)d(147{160.)
+-21 1166 y([8])20 b Fa(Gra)m(y,)c(R.)f(W.,)g(Heuring,)g(V.)f(P.,)h
+(Levi,)h(S.)f(P.,)g(Slo)o(ane,)i(A.)d(M.,)h(and)g(W)-5
+b(aite,)15 b(W.)g(M.)h Fr(Eli:)h(A)c(complete,)44 1216
+y(\015exible)h(compiler)e(construction)j(system.)j Fi(Communic)n
+(ations)d(of)g(the)g(A)o(CM)f(35)p Fr(,)g(2)g(\(F)m(ebruary)g(1992\),)f
+(121{131.)-21 1299 y([9])20 b Fa(Gr)o(osch,)e(J.)i Fr(E\016cien)o(t)15
+b(generation)g(of)f(lexical)f(analysers.)21 b Fi(Softwar)n(e{Pr)n
+(actic)n(e)15 b(and)h(Exp)n(erienc)n(e)g(19)p Fr(,)f(11)f(\(1989\),)44
+1349 y(1089{1103.)-42 1432 y([10])20 b Fa(Harrison,)c(M.)g(A.)j
+Fi(Intr)n(o)n(duction)c(to)g(F)m(ormal)f(L)n(anguage)i(The)n(ory)p
+Fr(.)i(Addison-W)m(esley)m(,)13 b(1978.)-42 1515 y([11])20
+b Fa(Hennessy,)15 b(J.)e(L.,)i(and)f(Mendelsohn,)i(N.)f
+Fr(Compilation)8 b(of)j(the)h(Pascal)g(case)g(statemen)o(t.)i
+Fi(Softwar)n(e{Pr)n(actic)n(e)44 1565 y(and)h(Exp)n(erienc)n(e)h(12)p
+Fr(,)d(9)h(\(Septem)o(b)q(er)h(1982\),)d(879{882.)-42
+1648 y([12])20 b Fa(Horspool,)c(R.)g(N.,)f(and)g(Whitney,)h(M.)h
+Fr(Ev)o(en)d(faster)g(LR)e(parsing.)k Fi(Softwar)n(e{Pr)n(actic)n(e)d
+(and)i(Exp)n(erienc)n(e)g(20)p Fr(,)44 1697 y(6)e(\(1990\),)g(515{535.)
+-42 1780 y([13])20 b Fa(Ja)o(cobson,)d(V.)i Fr(T)m(uning)14
+b(UNIX)g(Lex)h(or)f(it's)f(NOT)i(true)g(what)f(they)h(sa)o(y)f(ab)q
+(out)g(Lex.)19 b(In)14 b Fi(USENIX)i(Confer)n(enc)n(e)44
+1830 y(Pr)n(o)n(c)n(e)n(e)n(dings)h Fr(\(W)m(ashington,)12
+b(DC,)h(Win)o(ter)h(1987\),)f(pp.)g(163{164.)j(Abstract)f(only)m(.)-42
+1913 y([14])20 b Fa(Kernighan,)h(B.)e(W.,)h(and)g(Ritchie,)f(D.)h(M.)28
+b Fi(The)18 b(C)f(Pr)n(o)n(gr)n(amming)g(L)n(anguage,)i(2nd)g(Ed.)28
+b Fr(Pren)o(tice-Hall,)44 1963 y(Inc.,)13 b(1988.)-42
+2046 y([15])20 b Fa(Lesk,)25 b(M.)e(E.)38 b Fr(LEX)20
+b({)g(a)g(lexical)g(analyzer)g(generator.)38 b(Computing)18
+b(Science)k(T)m(ec)o(hnical)e(Rep)q(ort)h(39,)g(Bell)44
+2096 y(T)m(elephone)14 b(Lab)q(oratories,)g(Murra)o(y)g(Hill,)e(NJ,)h
+(1975.)-42 2179 y([16])20 b Fa(P)l(axson,)e(V.)h Fr(\015ex)14
+b({)g(man)e(pages,)i(1988.)j(In)d Ff(\015ex-2.3.7.ta)o(r.Z)p
+Fr(.)e(Av)n(ailable)g(for)i(anon)o(ymous)e(ftp)i(from)e
+Ff(ftp.uu.net)j Fr(in)44 2229 y Ff(/pack)o(ages/gnu)p
+Fr(.)-42 2312 y([17])20 b Fa(Pennello,)k(T.)d(J.)33 b
+Fr(V)m(ery)19 b(fast)g(LR)f(parsing.)33 b(In)19 b Fi(Pr)n(o)n(c)n(e)n
+(e)n(dings)g(of)g(the)h(A)o(CM)f(SIGPLAN'86)h(Symp)n(osium)g(on)44
+2362 y(Compiler)14 b(Construction)j Fr(\(July)c(1986\),)g(A)o(CM.)-42
+2445 y([18])20 b Fa(Sale,)g(A.)25 b Fr(The)17 b(implemen)o(tatio)o(n)c
+(of)j(case)h(statemen)o(ts)g(in)e(Pascal.)25 b Fi(Softwar)n(e{Pr)n
+(actic)n(e)16 b(and)i(Exp)n(erienc)n(e)f(11)p Fr(,)g(9)44
+2494 y(\(Septem)o(b)q(er)d(1981\),)f(929{942.)913 2748
+y(16)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/src/about/sample.bib b/src/about/sample.bib
new file mode 100644 (file)
index 0000000..1f34ab1
--- /dev/null
@@ -0,0 +1,48 @@
+@Article{Bumbulis94,
+  author = {Peter Bumbulis and Donald D. Cowan},
+  title = {RE2C -- A More Versatile Scanner Generator},
+  journal = "ACM Letters on Programming Languages and Systems",
+  volume = 2,
+  number = "1--4",
+  year = 1994,
+  abstract = {
+  It is usually claimed that lexical analysis routines are still coded by
+  hand, despite the widespread availability of scanner generators, for
+  efficiency reasons.  While efficiency is a consideration, there exist
+  freely available scanner generators such as GLA \cite{Gray88} that can
+  generate scanners that are faster than most hand-coded ones.  However,
+  most generated scanners are tailored for a particular environment, and
+  retargetting these scanners to other environments, if possible, is
+  usually complex enough to make a hand-coded scanner more appealing.  In
+  this paper we describe RE2C, a scanner generator that not only generates
+  scanners which are faster (and usually smaller) than those produced by
+  any other scanner generator known to the authors, including GLA, but
+  also adapt easily to any environment.
+  }
+}
+@Article{Gray88,
+  author = {Robert W. Gray},
+  title = {{$\gamma$-GLA} - {A} Generator for Lexical Analyzers That
+  Programmers Can Use},
+  journal = {USENIX Conference Proceedings},
+  year = {1988},
+  month = {June},
+  pages = {147-160},
+  abstract = {Writing an efficient lexical analyzer for even a simple
+  language is not a trivial task, and should not be done by hand. We
+  describe GLA, a tool that generates very efficient scanners. These
+  scanners do not use the conventional transition matrix, but instead
+  use a few 128 element vectors.  Scanning time is only slightly
+  greater than the absolute minimum --- the time it takes to look at
+  each character in a file. The GLA language allows simple, concise
+  specification of scanners. Augmenting regular expressions with
+  auxiliary scanners easily handles nasty problems such as C comments
+  and C literal constants. We formalize the connection between token
+  scanning and token processing by associating a processor with
+  appropriate patterns. A library of canned descriptions simplifies the
+  specification of commonly used language pieces --- such as,
+  C\_IDENTIFIERS, C\_STRINGS, PASCAL\_COMMENTS, etc. Finally, carefully
+  tuned lexical analysis support modules are provided for error
+  handling, input buffering, storing identifiers in hash tables and
+  manipulating denotations.}
+}