Nonrestoringinteger

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 67

%!PS-Adobe-2.

0
%%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software
%%Title: tpcd94.dvi
%%Pages: 21 1
%%BoundingBox: 0 0 612 792
%%EndComments
%%BeginProcSet: tex.pro
/TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get
round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10
N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{
/vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 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]{ch-image}
imagemask restore}B /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}N /eop{clear SI restore
showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
known{start-hook}if /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}N /p /show load 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 statusdict begin /product where{pop product dup length 7 ge{0
7 getinterval(Display)eq}{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 /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{clear 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 false N /BBcalc false N
/p 3 def}B /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{
@scaleunit div /vsc X}B /@hsize{/hs X /CLIP true N}B /@vsize{/vs X /CLIP true
N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{10 div /rwi X}
B /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X /BBcalc true N}B
/magscale true def end /@MacSetUp{userdict /md known{userdict /md get type
/dicttype eq{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}N /psfts{S 65536 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}N /@setspecial{CLIP{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 BBcalc{rwi urx llx sub div dup scale llx neg lly neg
TR}if /showpage{}N /erasepage{}N /copypage{}N newpath}N /@endspecial{grestore
clear 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 1000 300 300 @start /Fa 1 98 df<00600000600000F00000F00000F00001
3800013800013800021C00021C00040E00040E0007FE000807000807001003801003803803C0FC
0FF014137F9217>97 D E /Fb 35 123 df<FF80FF80FF0009037D880E>45
D<3078F06005047C830C>I<0000200000600000600000E00001E00001E0000270000270000470
00087000087000107000107000207000207000407000807000FFF0010038010038020038040038
0400380C00381C0038FF01FF181A7E991D>65 D<000F8200706200C01603801E07000C0E000C1C
000C18000C380008300008700000700000E00000E00000E00000E00000E00020E00020E00020E0
00406000406000803001001006000C180003E000171A7A991B>67 D<03FFF80000700E00007007
000070030000E0018000E0018000E0018000E001C001C001C001C001C001C001C001C001C00380
0380038003800380038003800300070007000700070007000E0007000C000E001C000E0038000E
0070000E00E0001C038000FFFE00001A1A7D991D>I<03FFFF00700700700300700100E00100E0
0100E00100E00101C08001C08001C08001C18003FF000381000381000381000702000700040700
040700080E00080E00180E00100E00301C00E0FFFFE0181A7D991A>I<03FFFF00700700700300
700100E00100E00100E00100E00101C08001C08001C08001C18003FF0003810003810003810007
02000700000700000700000E00000E00000E00000E00001E0000FFE000181A7D9919>I<000FC1
00302100C01301800F0700060E00060C0006180006380004300004700000700000E00000E00000
E00000E007FEE00070E00070E00070E000706000E06000E03000E01801E00C064003F840181A7A
991E>I<03FF1FF800700380007003800070038000E0070000E0070000E0070000E0070001C00E
0001C00E0001C00E0001C00E0003FFFC0003801C0003801C0003801C0007003800070038000700
3800070038000E0070000E0070000E0070000E0070001C00E000FFC7FE001D1A7D991D>I<01FF
8000380000380000380000700000700000700000700000E00000E00000E00000E00001C00001C0
0001C00001C0000380000380000380000380000700000700000700000700000E0000FFE000111A
7E990F>I<03FF8000700000700000700000E00000E00000E00000E00001C00001C00001C00001
C0000380000380000380000380000700000700100700100700200E00200E00600E00400E00C01C
0380FFFF80141A7D9918>76 D<03F8001FC00078003C000078003C000078005C0000B800B80000
B800B800009C013800009C013800011C027000011C027000011C047000011C087000021C08E000
021C10E000021C10E000021C20E000041C41C000041C41C000041C81C000041C81C000080F0380
00080F038000080E038000180C038000380C070000FF083FF000221A7D9922>I<03FFF000701C
00700E00700700E00700E00700E00700E00701C00E01C01C01C03801C0E003FF800380C0038060
0380700700700700700700700700700E00E00E00E00E00E10E00E21C0062FFC03C181A7D991C>
82 D<003F1000609001807001007003002006002006002006002006000007000007C00003F800
01FE00007F00000F80000380000180000180200180200180600300600300600600700C00C81800
87E000141A7D9916>I<3FFFFC381C0C201C04401C044038048038048038048038040070000070
0000700000700000E00000E00000E00000E00001C00001C00001C00001C0000380000380000380
00038000078000FFF800161A79991B>I<03CC0E2E181C381C301C701CE038E038E038E038C072
C072C07260F261341E180F107C8F14>97 D<01F006080C181838301070006000E000E000E000E0
00E008E010602030C01F000D107C8F12>99 D<001F800003800003800003800007000007000007
00000700000E00000E0003CE000E2E00181C00381C00301C00701C00E03800E03800E03800E038
00C07200C07200C0720060F2006134001E1800111A7C9914>I<01E006181C08380870087010FF
E0E000E000E000E000E0086010602030C01F000D107C8F12>I<000700001980001B80003B0000
300000300000700000700000700000700007FF0000E00000E00000E00000E00000E00001C00001
C00001C00001C00001C000038000038000038000038000038000070000070000070000660000E4
0000CC0000700000112181990C>I<00F300038B800607000E07000C07001C0700380E00380E00
380E00380E00301C00301C00301C00183C0018780007B800003800003800007000607000E0E000
C1C0007F000011177E8F12>I<1F80000380000380000380000700000700000700000700000E00
000E00000E7C000F86001E07001E07001C07001C0700380E00380E00380E00381C00701C80701C
80703880703900E01900600E00111A7E9914>I<030706000000000000384C4E8E9C9C1C383870
7272E2E4643808197C980C>I<3F0707070E0E0E0E1C1C1C1C3838383870707070E4E4E4E46830
081A7D990A>108 D<307C1E00598663009E0783809E0703809C0703809C070380380E0700380E
0700380E0700380E0E00701C0E40701C0E40701C1C40701C1C80E0380C80601807001A107C8F1F
>I<307C005986009E07009E07009C07009C0700380E00380E00380E00381C00701C80701C8070
3880703900E01900600E0011107C8F16>I<01F006180C0C180E300E700E600EE00EE00EE00CE0
1CE018E030606030C01F000F107C8F14>I<030F000590C009E0C009C06009C06009C0600380E0
0380E00380E00380E00701C00701800703800703000E8E000E78000E00000E00001C00001C0000
1C00001C0000FF00001317808F14>I<30F059189E389C189C009C003800380038003800700070
0070007000E00060000D107C8F10>114 D<03E004300830187018601C001F801FC00FE000E000
60E060E06080C041803E000C107D8F10>I<06000E000E000E000E001C001C00FFC01C00380038
00380038007000700070007000E100E100E100E200640038000A177C960D>I<38064C074E0E8E
0E9C0E9C0E1C1C381C381C381C7039703970393079389A0F0C10107C8F15>I<380C304C0E384E
1C388E1C189C1C189C1C181C381038381038381038381070702070702070704030704018B8800F
0F0015107C8F19>119 D<38064C074E0E8E0E9C0E9C0E1C1C381C381C381C7038703870383078
38F00F700070006060E0E1C0C18047003C0010177C8F13>121 D<038207C40FFC100810100020
00400180030004000808100820187FF043E081C00F107E8F10>I E /Fc
9 119 df<03E0000638101C1820381C20300E20700E40600E40E00E80E00E80E00F00E00E00C0
0E00E00E00603E0020C6401F038014107E8F19>11 D<01FFFC0000380F00003803800038038000
7003C0007003C0007003C0007003C000E0078000E0078000E00F0000E01E0001C0380001FFE000
01C0000001C0000003800000038000000380000003800000070000000700000007000000070000
000E000000FFE000001A1A7E9919>80 D<000FE0000038380000E00E0001C00700078007000F00
07800E0003801C0003803C0003C0380003C0780003C0780003C0F0000780F0000780F0000780F0
000700F0000F00F0000E00F0001E00F0001C0070703800708070003904E0001D07C0000F0F0000
03FC04000006040000060C00000618000007F8000007F0000007E0000003C0001A217E991E>I<
03980C5C1838383830387038E070E070E070E070C0E2C0E2C0E2E1E262643C380F107E8F14>97
D<7E000E000E000E001C001C001C001C00380038003BC03C607870703070307030E070E070E070
E070C0E0C0C0C1C0E18063003C000C1A7E9910>I<03E00E101810381070107020FFC0E000E000
E000E000E008E010602030C01F000D107E8F12>101 D<0007C0000C600018E00018C000380000
380000380000380000700000700007FF0000700000700000E00000E00000E00000E00000E00000
E00001C00001C00001C00001C00001C000038000038000038000030000030000670000E60000CC
000078000013217E9913>I<03E006180818183818301C001FC00FE007F000700030E030E03080
6040C03F000D107E8F12>115 D<1C0C261E470E87068E068E060E041C041C041C083808380838
1018200C4007800F107E8F13>118 D E /Fd 61 126 df<00800180018007E01FF039BC619CC1
8EC18EC18EC18471807F803FE00FF001F8019C018E4186E186E186E186718C39B81FF00FC00180
018000800F1D7E9914>36 D<3806007C0E006C0E00EE1C00EE1C00EE3800EE38006C38007C7000
38700000700000E00000E00001C00001C00001C000038000038000070000070E00071F000E1B00
0E3B800E3B801C3B801C3B80381B00381F00180E00111D7F9914>I<60F0F878181818303060C0
80050C789614>39 D<00C001C0030006000C001C0038003000700070006000E000E000E000E000
E000E000E000600070007000300038001C000C000600030001C000C00A1D7A9914>I<8000C000
6000300018001C000E000600070007000300038003800380038003800380038003000700070006
000E001C00180030006000C0008000091D7C9914>I<038003800380638CF39EFFFE3FF80FE00F
E03FF8FFFEF39E638C0380038003800F107E9214>I<01C00001C00001C00001C00001C00001C0
0001C000FFFF80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00011117F9314
>I<70F8FCFC7C0C1830E0C0060A798414>I<FFFEFFFEFFFE0F037E8C14>I<07C00FE01C703838
3018701C701CE00EE00EE00EE00EE00EE00EE00EE00EE00E701C701C383838381C700FE007C00F
177E9614>48 D<0300030007000F003F00F7004700070007000700070007000700070007000700
070007000700070007007FF07FF00C177C9614>I<0FC01FF03838701CE00EE00EE00E400E000E
001C001C00380030007000E001C0030006000C00180E300E7FFE7FFE0F177E9614>I<0FC01FF0
3838701C701C201C001C001C0038007007E007F00038001C000E000E400EE00EE00E701C78383F
F00FC00F177E9614>I<00780000F80001B80001B8000338000338000638000E38000C38001C38
00383800303800703800E03800FFFF80FFFF8000380000380000380000380000380001FF0001FF
0011177F9614>I<01F007F80E1C1C1C381C300070007000E000E7C0EFF0F838F01CF00CE00EE0
0E600E700E700C381C1C380FF007C00F177E9614>54 D<0FE03FF8783C701CE00EE00EE00EE00E
701C1EF003801FF03838701CE00EE00EE00EE00EF01E701C38381FF007C00F177E9614>56
D<70F8F8F87000000000000060F0F8F878183070E0800515798F14>59 D<000E003E007C00F003
E007C01F003E00F800F000F8003E001F0007C003E000F0007C003E000E0F137E9414>I<FFFF80
FFFF807FFF800000000000000000007FFF80FFFF80FFFF8011097F8F14>I<4000E000F8007C00
1E000F8007C001F000F8003E001E003E00F801F007C00F801E007C00F800E00040000F157E9514
>I<01C00003E00003E0000360000360000770000770000770000770000630000E38000E38000E
38000E38000E38001FFC001FFC001C1C001C1C003C1E00380E00FE3F80FE3F8011177F9614>65
D<FFF0FFFC381E380E3807380738073807380E381E3FFC3FFC381E380E38073807380738073807
380E381EFFFCFFF810177F9614>I<FFE000FFF800383C00381E00380E00380700380700380700
380380380380380380380380380380380380380380380380380700380700380E00381E00383C00
FFF800FFE00011177F9614>68 D<FFFF00FFFF0038070038070038070038070038000038000038
70003870003FF0003FF000387000387000380000380000380000380380380380380380380380FF
FF80FFFF8011177F9614>I<FE3F80FE3F80380E00380E00380E00380E00380E00380E00380E00
380E003FFE003FFE00380E00380E00380E00380E00380E00380E00380E00380E00380E00FE3F80
FE3F8011177F9614>72 D<FFF8FFF8070007000700070007000700070007000700070007000700
0700070007000700070007000700FFF8FFF80D177D9614>I<FE0FE0FE0FE03E0F803B1B803B1B
803B1B803B1B803BBB803BBB8039B38039B38039B38039F38038E38038E3803803803803803803
80380380380380380380FE0FE0FE0FE01317809614>77 D<FE3F80FE3F803E0E003B0E003B0E00
3B0E003B0E003B8E00398E00398E0039CE0039CE0039CE0038CE0038CE0038EE00386E00386E00
386E00386E00383E00FE3E00FE3E0011177F9614>I<1FF07FFC783C701CE00EE00EE00EE00EE0
0EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00E701C783C7FFC1FF00F177E9614>I<FFE000
FFF800383C00381C00380E00380E00380E00380E00381C00383C003FF8003FF000383800381C00
381C00381C00381C00381C00381C80381DC0381DC0FE0F80FE070012177F9614>82
D<0FCC1FFC307C603CE01CE01CE01CE00070007E003FE00FF001F8001C001E000E600EE00EE00E
F01CF838FFF0C7E00F177E9614>I<7FFF80FFFF80E1C380E1C380E1C380E1C38001C00001C000
01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
0FF8000FF80011177F9614>I<7E3E007E3E001C38001E38000E78000F700007F00007E00003E0
0003C00001C00003C00003E00003E0000770000770000E78000E38001C3C001C1C003C1E00FE3F
80FE3F8011177F9614>88 D<FE3F80FE3F80380E003C1E001C1C001E3C000E38000E3800077000
07700003600003E00003E00001C00001C00001C00001C00001C00001C00001C00001C00007F000
07F00011177F9614>I<7FFEFFFEE01CE01CE038E038007000E000E001C001C00380070007000E
000E001C00380E380E700E700EFFFEFFFE0F177E9614>I<1FC0007FF000707800201800001C00
001C0007FC001FFC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F8011107E8F14>
97 D<FC0000FC00001C00001C00001C00001C00001C00001CF8001DFE001F07001E03001C0380
1C01C01C01C01C01C01C01C01C01C01C01C01C03801E03001F0E001DFC000CF8001217809614>
I<03F80FFC1C1C380870006000E000E000E000E00060007000380E1C1E0FFC03F00F107E8F14>
I<007E00007E00000E00000E00000E00000E00000E0007CE000FFE001C3E00301E00700E00E00E
00E00E00E00E00E00E00E00E00E00E00700E00301E00383E001FEFC007CFC012177F9614>I<07
E00FF01C38301C700CE00EE00EFFFEFFFEE00060007000380E1C1E0FFC03F00F107E8F14>I<00
7C00FE01CE03840380038003807FFEFFFE03800380038003800380038003800380038003800380
03807FFC7FFC0F177F9614>I<07CF001FFF80383B80301800701C00701C00701C003018003838
003FF00037C0007000007000003FF8001FFC003FFE00700F00E00380E00380E00380E003807007
003C1E001FFC0007F00011197F8F14>I<FC0000FC00001C00001C00001C00001C00001C00001C
78001DFE001F86001E07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C
0700FF8FE0FF8FE01317809614>I<030007800780030000000000000000007F807F8003800380
0380038003800380038003800380038003800380FFFCFFFC0E187D9714>I<FF80FF8003800380
03800380038003800380038003800380038003800380038003800380038003800380FFFEFFFE0F
177E9614>108 D<FB8E00FFDF003CF3803CF38038E38038E38038E38038E38038E38038E38038
E38038E38038E38038E380FEFBE0FE79E01310808F14>I<FC7800FDFE001F86001E07001C0700
1C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0FF8FE01310808F14>
I<07C01FF03C78701C701CE00EE00EE00EE00EE00EE00E701C783C3C781FF007C00F107E8F14>
I<FCF800FDFE001F07001E03001C03801C01C01C01C01C01C01C01C01C01C01C01C01C03801E03
001F0E001DFC001CF8001C00001C00001C00001C00001C00001C0000FF8000FF80001218808F14
>I<03CE000FFE001C3E00301E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E0030
1E001C3E000FEE0007CE00000E00000E00000E00000E00000E00000E00007FC0007FC012187F8F
14>I<FE1F00FE7F800EE3800F81000F00000F00000E00000E00000E00000E00000E00000E0000
0E00000E0000FFF000FFF00011107F8F14>I<0FD83FF86038C038C038F0007F803FF007F8001C
6006E006F006F81CFFF8CFE00F107E8F14>I<030007000700070007007FFCFFFC070007000700
07000700070007000700070E070E070E070C03FC00F00F157F9414>I<FC3F00FC3F001C07001C
07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C1F000FFFE003E7E013
10808F14>I<FE3F80FE3F801C1C001C1C001C1C001C1C000E38000E38000E3800063000077000
07700007700003E00003E00003E00011107F8F14>I<7E3F007E3F001E38000E780007700007E0
0003E00001C00003C00003E0000770000E78000E38001C1C00FE3F80FE3F8011107F8F14>120
D<FE3F80FE3F801C1C001C1C001C1C000E1C000E38000E38000738000730000730000370000370
0001E00001E00001E00001C00001C00001C0000380007380007700007E00003C000011187F8F14
>I<3FFF7FFF700E701C7038007000E001C0038007000E001C0738077007FFFFFFFF10107F8F14>
I<003E00FE01E003800380038003800380038003800380038003807F00FE007F00038003800380
038003800380038003800380038001E000FE003E0F1D7E9914>I<E0E0E0E0E0E0E0E0E0E0E0E0
E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0031D789914>I<7800FE000F00038003800380038003
800380038003800380038001FC00FE01FC03800380038003800380038003800380038003800F00
FE0078000F1D7E9914>I E /Fe 51 125 df<00C00001C00001C00001C00007F0001FFC003FFE
007DCF0071C780E1C380E1C780E1C780F1C30079C0003FC0001FF00007FC0001FE0001CF0001C7
0061C380F1C380F1C380E1C38071C70079DF003FFE001FF80007E00001C00001C00000C0001120
7E9C16>36 D<3801807C03807C0380EE0700EE0700EE0E00EE0E00EE0E00EE1C007C1C007C3800
38380000700000700000700000E00000E00001C00001C00001C0000380000383800707C00707C0
0E0EE00E0EE00E0EE01C0EE01C0EE03807C03807C018038013207F9C16>I<30787C3C1C1C1C1C
3878F0E040060D789816>39 D<00E001E0038007000E001C001C0038003800700070007000E000
E000E000E000E000E000E000E000E000700070007000380038001C001C000E000700038001E000
E00B217A9C16>I<C000E000700038001C000E000E000700070003800380038001C001C001C001
C001C001C001C001C001C0038003800380070007000E000E001C0038007000E000C0000A217B9C
16>I<01C00001C00001C00001C00071C700F9CF807FFF001FFC0007F00007F0001FFC007FFF00
F9CF8071C70001C00001C00001C00001C00011127E9516>I<387C7E7E3E0E1E1C78F060070B79
8416>44 D<FFFF80FFFF80FFFF8011037E8D16>I<03E0000FF8001FFC001E3C00380E00780F00
700700700700E00380E00380E00380E00380E00380E00380E00380E00380F00780700700700700
780F003C1E001E3C001FFC000FF80003E00011197E9816>48 D<01800380038007800F807F80FF
807380038003800380038003800380038003800380038003800380038003807FF87FFC7FF80E19
7C9816>I<07E0001FF8003FFC00783E00E00700F00780F0038060038000038000038000070000
0700000E00001C0000380000700000E00001C0000380000F00001E03803803807FFF80FFFF807F
FF8011197E9816>I<007C0000FC0000DC0001DC00039C00039C00071C000F1C000E1C001E1C00
3C1C00381C00781C00F01C00FFFFE0FFFFE0FFFFE0001C00001C00001C00001C00001C0001FFC0
01FFC001FFC013197F9816>52 D<000180000780001F80003E0000F80001F00007C0000F80003E
0000FC0000F00000FC00003E00000F800007C00001F00000F800003E00001F8000078000018011
157E9616>60 D<7FFF00FFFF80FFFF80000000000000000000000000000000FFFF80FFFF807FFF
00110B7E9116>I<C00000F00000FC00003E00000F800007C00001F00000F800003E00001F8000
0780001F80003E0000F80001F00007C0000F80003E0000FC0000F00000C0000011157E9616>I<
00E00001F00001F00001B00001B00003B80003B80003B800031800071C00071C00071C00071C00
071C000E0E000E0E000FFE000FFE001FFF001C07001C07001C07007F1FC0FF1FE07F1FC013197F
9816>65 D<7FF800FFFE007FFF001C0F001C07801C03801C03801C03801C07801C07001FFF001F
FE001FFE001C1F001C03801C03C01C01C01C01C01C01C01C01C01C03C01C07807FFF80FFFF007F
FC0012197F9816>I<7FF800FFFE007FFF001C0F001C07801C03C01C01C01C01C01C01E01C00E0
1C00E01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C03C01C07801C0F807FFF00
FFFE007FF8001319809816>68 D<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C
00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C
00E07FFFE0FFFFE07FFFE013197F9816>I<7F1FC0FFBFE07F1FC01C07001C07001C07001C0700
1C07001C07001C07001FFF001FFF001FFF001C07001C07001C07001C07001C07001C07001C0700
1C07001C07007F1FC0FFBFE07F1FC013197F9816>72 D<FFFEFFFEFFFE03800380038003800380
03800380038003800380038003800380038003800380038003800380FFFEFFFEFFFE0F197D9816
>I<FC07E0FE0FE0FE0FE03A0B803B1B803B1B803B1B803B1B803B1B803BBB8039B38039B38039
B38039B38039F38038E38038E380380380380380380380380380380380FE0FE0FE0FE0FE0FE013
197F9816>77 D<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03C01C03
801C0F801FFF001FFE001FF8001C00001C00001C00001C00001C00001C00001C00007F0000FF80
007F000012197F9816>80 D<7FE000FFF8007FFC001C1E001C0F001C07001C07001C07001C0700
1C0F001C1E001FFC001FF8001FFC001C1C001C0E001C0E001C0E001C0E001C0E201C0E701C0E70
7F07E0FF87E07F03C014197F9816>82 D<07E3001FFF003FFF00781F00F00700E00700E00700E0
0000F000007800003F80001FF00007FC0000FE00000F00000700000380000380600380E00380E0
0700F80F00FFFE00FFFC00C7F00011197E9816>I<7FFFE0FFFFE0FFFFE0E0E0E0E0E0E0E0E0E0
E0E0E000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
00E00000E00000E00007FC000FFE0007FC0013197F9816>I<7F1F807F3F807F1F800E1E000E1C
00073C0007380003B80003F00001F00001E00000E00001E00001F00003F00003B80007B800071C
00071C000E0E000E0E001C07007F1FC0FF1FE07F1FC013197F9816>88 D<FE0FE0FF1FE0FE0FE0
1C07001C07000E0E000E0E00071C00071C00071C0003B80003B80001F00001F00000E00000E000
00E00000E00000E00000E00000E00000E00003F80007FC0003F80013197F9816>I<1FE0003FF0
007FF800783C00300E00000E00000E0003FE001FFE003E0E00700E00E00E00E00E00E00E00783E
007FFFE03FE7E00F83E013127E9116>97 D<7E0000FE00007E00000E00000E00000E00000E0000
0E3E000EFF000FFF800F83C00F00E00E00E00E00700E00700E00700E00700E00700E00700E00E0
0F01E00F83C00FFF800EFF00063C001419809816>I<03F80FFC1FFE3C1E780C7000E000E000E0
00E000E000F000700778073E0E1FFC0FF803F010127D9116>I<003F00007F00003F0000070000
070000070000070003C7000FF7001FFF003C1F00780F00700700E00700E00700E00700E00700E0
0700E00700700F00700F003C1F001FFFE00FE7F007C7E014197F9816>I<03E00FF81FFC3C1E78
0E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03F010127D9116>I<001F00007F
8000FF8001E78001C30001C00001C0007FFF00FFFF00FFFF0001C00001C00001C00001C00001C0
0001C00001C00001C00001C00001C00001C00001C0003FFE007FFF003FFE0011197F9816>I<03
E3C007F7E00FFFE01C1CC0380E00380E00380E00380E00380E001C1C000FF8001FF0001BE00038
00001800001FFC001FFF003FFF807803C0E000E0E000E0E000E0E000E07001C07C07C03FFF800F
FE0003F800131C7F9116>I<7E0000FE00007E00000E00000E00000E00000E00000E3C000EFE00
0FFF000F87800F03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E0380
7FC7F0FFE7F87FC7F01519809816>I<018003C003C0018000000000000000007FC07FC07FC001
C001C001C001C001C001C001C001C001C001C001C001C07FFFFFFF7FFF101A7D9916>I<FFC000
FFC000FFC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
01C00001C00001C00001C00001C00001C00001C00001C000FFFF80FFFF80FFFF8011197E9816>
108 D<F9C380FFEFC0FFFFE03C78E03C78E03870E03870E03870E03870E03870E03870E03870E0
3870E03870E03870E0FE7CF8FE7CF8FE3C781512809116>I<7E3C00FEFE007FFF000F87800F03
800E03800E03800E03800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7
F01512809116>I<03E0000FF8001FFC003C1E00780F00700700E00380E00380E00380E00380E0
0380F00780700700780F003C1E001FFC000FF80003E00011127E9116>I<7E3E00FEFF007FFF80
0F83C00F00E00E00E00E00700E00700E00700E00700E00700E00700E00E00F01E00F83C00FFF80
0EFF000E3C000E00000E00000E00000E00000E00000E00007FC000FFE0007FC000141B809116>
I<07C7000FE7001FF7003C1F00700F00700F00E00700E00700E00700E00700E00700E00700700F
00700F003C3F003FF7001FE70007C700000700000700000700000700000700000700003FE0007F
F0003FE0141B7E9116>I<FF0FC0FF3FE0FF7FE007F04007C00007800007800007000007000007
0000070000070000070000070000070000FFFC00FFFC00FFFC0013127F9116>I<0FEC3FFC7FFC
F03CE01CE01C70007F801FF007F8003C600EE00EF00EF81EFFFCFFF8C7E00F127D9116>I<0300
000700000700000700000700007FFF00FFFF00FFFF000700000700000700000700000700000700
0007000007010007038007038007038007870003FE0001FC0000F80011177F9616>I<7E1F80FE
3F807E1F800E03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E03800E
0F800FFFF007FBF803E3F01512809116>I<7F1FC0FF1FE07F1FC01C07001E0F000E0E000E0E00
0E0E00071C00071C00071C00071C0003B80003B80003B80001F00001F00000E00013127F9116>
I<7F1FC07F3FC07F1FC00F1C00073C0003B80003F00001F00000E00001E00001F00003B800073C
00071C000E0E007F1FC0FF3FE07F1FC013127F9116>120 D<7F1FC0FF9FE07F1FC01C07000E07
000E0E000E0E00070E00071C00071C00039C00039C0003980001B80001B80000F00000F00000F0
0000E00000E00000E00001C00079C0007BC0007F80003F00003C0000131B7F9116>I<E0E0E0E0
E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E00320779C16>124
D E /Ff 3 49 df<FFFFC0FFFFC012027D871A>0 D<040004000400C460E4E03F800E003F80E4
E0C4600400040004000B0D7E8D11>3 D<040E0E1C1C1C38383070706060C0C0070F7F8F0A>48
D E /Fg 4 117 df<3E0006000C000C000C000C00180019E01E30183038303030303030306060
606460C460C4C0C8C0700E147E9313>104 D<06070600000000384C4C8C981818303262626438
08147F930C>I<30F8590C4E0C9C0C980C180C180C30183019303130316032601C100D7F8C15>
110 D<02000600060006000C00FF800C000C001800180018001800300031003100320032001C00
09127F910D>116 D E /Fh 45 122 df<003FC00001F0300003C0380007C07C000F807C000F80
7C000F8038000F8000000F8000000F8000000F800000FFFFFC00FFFFFC000F807C000F807C000F
807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C00
0F807C000F807C007FE1FF807FE1FF80191D809C1B>12 D<78FCFCFCFC7806067D850D>46
D<00600001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E00003E0
0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0007FFF
807FFF80111B7D9A18>49 D<07F8001FFE00383F80780FC0FC07C0FC07E0FC03E0FC03E07803E0
0007E00007C00007C0000F80001F00001E0000380000700000E0000180600300600600600800E0
1FFFC03FFFC07FFFC0FFFFC0FFFFC0131B7E9A18>I<03F8001FFE003C1F003C0F807C07C07E07
C07C07C03807C0000F80000F80001E00003C0003F800001E00000F800007C00007C00007E03007
E07807E0FC07E0FC07E0FC07C0780F80781F001FFE0007F800131B7E9A18>I<00018000038000
0780000F80001F80003F80006F8000CF80008F80018F80030F80060F800C0F80180F80300F8060
0F80C00F80FFFFF8FFFFF8000F80000F80000F80000F80000F80000F8001FFF801FFF8151B7F9A
18>I<1801801FFF001FFE001FFC001FF8001FC00018000018000018000018000019F8001E0E00
180F801007800007C00007E00007E00007E07807E0F807E0F807E0F807C0F007C0600F80381F00
1FFE0007F000131B7E9A18>I<007E0003FF000781800F03C01E07C03C07C03C03807800007800
00F80000F8F800FB0E00FA0780FC0380FC03C0F803E0F803E0F803E0F803E07803E07803E07803
C03C03C03C07801E0F0007FE0003F800131B7E9A18>I<6000007FFFE07FFFE07FFFC07FFF807F
FF80E00300C00600C00C00C0180000300000300000600000E00000E00001E00001C00003C00003
C00003C00003C00007C00007C00007C00007C00007C00007C000038000131C7D9B18>I<000380
00000380000007C0000007C0000007C000000FE000000FE000001FF000001BF000001BF0000031
F8000031F8000061FC000060FC0000E0FE0000C07E0000C07E0001803F0001FFFF0003FFFF8003
001F8003001F8006000FC006000FC00E000FE00C0007E0FFC07FFEFFC07FFE1F1C7E9B24>65
D<FFFFF800FFFFFF000FC01F800FC00FC00FC007C00FC007E00FC007E00FC007E00FC007E00FC0
07E00FC007C00FC00F800FC03F000FFFFE000FC00F800FC007C00FC007E00FC003E00FC003F00F
C003F00FC003F00FC003F00FC003F00FC007E00FC007E00FC01FC0FFFFFF00FFFFFC001C1C7E9B
22>I<001FE02000FFF8E003F80FE007C003E00F8001E01F0000E03E0000E03E0000607E000060
7C000060FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC0000007C0000
607E0000603E0000603E0000C01F0000C00F80018007C0030003F80E0000FFFC00001FE0001B1C
7D9B22>I<FFFFF800FFFFFF000FC01FC00FC007E00FC001F00FC001F80FC000F80FC000FC0FC0
007C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0F
C0007C0FC0007C0FC0007C0FC000F80FC000F80FC001F00FC007E00FC01FC0FFFFFF00FFFFF800
1F1C7E9B25>I<FFFFFF00FFFFFF000FC01F000FC007000FC003000FC003800FC003800FC00180
0FC181800FC181800FC180000FC180000FC380000FFF80000FFF80000FC380000FC180000FC180
000FC180000FC180000FC000000FC000000FC000000FC000000FC000000FC00000FFFF0000FFFF
0000191C7E9B1E>70 D<FFFC3FFFFFFC3FFF0FC003F00FC003F00FC003F00FC003F00FC003F00F
C003F00FC003F00FC003F00FC003F00FC003F00FFFFFF00FFFFFF00FC003F00FC003F00FC003F0
0FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F0FFFC3F
FFFFFC3FFF201C7E9B25>72 D<FFFF00FFFF000FC0000FC0000FC0000FC0000FC0000FC0000FC0
000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0030FC0030FC0030FC0070FC0
070FC0060FC00E0FC01E0FC07EFFFFFEFFFFFE181C7E9B1D>76 D<FFC00003FFFFE00007FF0FE0
0007F00DF0000DF00DF0000DF00DF0000DF00CF80019F00CF80019F00C7C0031F00C7C0031F00C
3E0061F00C3E0061F00C1F00C1F00C1F00C1F00C1F00C1F00C0F8181F00C0F8181F00C07C301F0
0C07C301F00C03E601F00C03E601F00C01FC01F00C01FC01F00C01FC01F00C00F801F00C00F801
F0FFC0701FFFFFC0701FFF281C7E9B2D>I<003FE00001F07C0003C01E000F800F801F0007C01E
0003C03E0003E07E0003F07C0001F07C0001F0FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8
FC0001F8FC0001F8FC0001F87C0001F07E0003F07E0003F03E0003E03F0007E01F0007C00F800F
8003C01E0001F07C00003FE0001D1C7D9B24>79 D<FFFFF800FFFFFE000FC03F800FC00F800FC0
07C00FC007E00FC007E00FC007E00FC007E00FC007E00FC007C00FC007C00FC00F800FC03F000F
FFFC000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC00000
0FC000000FC00000FFFC0000FFFC00001B1C7E9B21>I<FFFFF00000FFFFFE00000FC03F00000F
C00F80000FC007C0000FC007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007C000
0FC00F80000FC03E00000FFFF000000FC07C00000FC03E00000FC03F00000FC01F80000FC01F80
000FC01F80000FC01F80000FC01F80000FC01F80000FC01F81800FC01F81800FC00FC180FFFC07
C300FFFC01FE00211C7E9B24>82 D<07F8201FFEE03C07E07801E07000E0F000E0F00060F00060
F80000FE0000FFE0007FFE003FFF003FFF800FFFC007FFE0007FE00003F00001F00000F0C000F0
C000F0C000E0E000E0F001C0FC03C0EFFF0083FC00141C7D9B1B>I<7FFFFFE07FFFFFE0781F81
E0701F80E0601F8060E01F8070C01F8030C01F8030C01F8030C01F8030001F8000001F8000001F
8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
1F8000001F8000001F8000001F800007FFFE0007FFFE001C1C7E9B21>I<FFFC01FF80FFFC01FF
800FC000180007E000300007E000300007F000700003F000600003F800E00001F800C00001FC00
C00000FC01800000FC018000007E030000007E030000007F070000003F060000003F8E0000001F
8C0000001FCC0000000FD80000000FD800000007F000000007F000000007F000000003E0000000
03E000000001C000000001C00000211C7F9B24>86 D<7FFFFC7FFFFC7E01F87803F87003F0E007
E0E007E0C00FC0C01FC0C01F80003F00007F00007E0000FC0000FC0001F80003F80603F00607E0
060FE0060FC00E1F800E1F801C3F001C7F003C7E00FCFFFFFCFFFFFC171C7D9B1D>90
D<0FF8001C1E003E0F803E07803E07C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807
C0F807C0F807C0780BC03E13F80FE1F815127F9117>97 D<03FC000E0E001C1F003C1F00781F00
780E00F80000F80000F80000F80000F80000F800007800007801803C01801C03000E0E0003F800
11127E9115>99 D<000FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F000
01F001F9F00F07F01C03F03C01F07801F07801F0F801F0F801F0F801F0F801F0F801F0F801F078
01F07801F03C01F01C03F00F0FFE03F9FE171D7E9C1B>I<01FC000F07001C03803C01C07801C0
7801E0F801E0F801E0FFFFE0F80000F80000F800007800007C00603C00601E00C00F038001FC00
13127F9116>I<007F0001E38003C7C00787C00F87C00F83800F80000F80000F80000F80000F80
00FFF800FFF8000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80
000F80000F80000F80007FF8007FF800121D809C0F>I<03F8F00E0F381E0F381C07303C07803C
07803C07803C07801C07001E0F000E0E001BF8001000001800001800001FFF001FFFC00FFFE01F
FFF07801F8F00078F00078F000787000707800F01E03C007FF00151B7F9118>I<FF0000FF0000
1F00001F00001F00001F00001F00001F00001F00001F00001F00001F0FC01F31E01F40F01F80F8
1F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE7FF
FFE7FF181D7F9C1B>I<1E003F003F003F003F001E00000000000000000000000000FF00FF001F
001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1E7F9D0E>I<FF
0000FF00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0FF81F0FF81F
03801F07001F0C001F18001F70001FF8001FFC001FBC001F3E001F1F001F0F001F0F801F07C01F
03E0FFC7FCFFC7FC161D7F9C19>107 D<FF00FF001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1D7F
9C0E>I<FF0FC07E00FF31E18F001F40F207801F80FC07C01F80FC07C01F00F807C01F00F807C0
1F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807
C01F00F807C0FFE7FF3FF8FFE7FF3FF825127F9128>I<FF0FC0FF31E01F40F01F80F81F80F81F
00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE7FFFFE7FF18
127F911B>I<01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8F800F8F800F8
F800F87800F07800F03C01E01E03C00F078001FC0015127F9118>I<FF3F80FFE1E01F80F01F00
781F007C1F003C1F003E1F003E1F003E1F003E1F003E1F003E1F003C1F007C1F00781F80F01FC1
E01F3F001F00001F00001F00001F00001F00001F0000FFE000FFE000171A7F911B>I<FE3E00FE
47001E8F801E8F801E8F801F07001F00001F00001F00001F00001F00001F00001F00001F00001F
00001F0000FFF000FFF00011127F9114>114 D<1FD830786018E018E018F000FF807FE07FF01F
F807FC007CC01CC01CE01CE018F830CFC00E127E9113>I<0300030003000300070007000F000F
003FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F08079803F00E1A
7F9913>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F
00F81F00F81F00F81F01F80F01F80786FF01F8FF18127F911B>I<FFC1FCFFC1FC1F00601F80E0
0F80C00FC0C007C18007C18003E30003E30001F60001F60001FE0000FC0000FC00007800007800
00300016127F9119>I<FF8FF8FEFF8FF8FE1F03E0301F03E0301F83E0700F83F0600F86F06007
C6F0C007CEF8C007EC79C003EC7D8003F83D8001F83F0001F83F0001F01F0000F01E0000E00E00
00E00E001F127F9122>I<FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C18007C18003E30003
E30001F70001F60000FE0000FC0000FC00007800007800003000003000007000706000F86000F8
C000F980007300003E0000161A7F9119>121 D E /Fi 31 123 df<0001FC3C00060E67000C0E
C7001C0DC6001C01C0003801C0003803800038038000380380003803800070038007FFFFF80070
0700007007000070070000E0070000E00E0000E00E0000E00E0000E00E0001C00E0001C01C0001
C01C0001C01C0001C01C0003801C00038038000380380003803800030038000700300007007000
06006000C6606000E470C000C8618000703E00002025819C19>11 D<FFC0FFC0FFC00A037D890F
>45 D<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E0000801E000080
1C0000803C0000803C000000780000007800000078000000F0000000F0000000F0000000F00000
00F0000400F0000400F0000400F0000800700008007000100038002000180040000C0180000706
000001F800001B1E7A9C1E>67 D<01FFC0003C0000380000380000380000380000700000700000
700000700000E00000E00000E00000E00001C00001C00001C00001C00003800003800003800003
80000700000700000700000700000F0000FFE000121C7E9B10>73 D<01FFE0003C000038000038
0000380000380000700000700000700000700000E00000E00000E00000E00001C00001C00001C0
0001C0000380080380080380080380100700100700300700600700E00E03C0FFFFC0151C7D9B1A
>76 D<01FFF800003C0E0000380700003803800038038000380380007007800070078000700780
00700F0000E00E0000E01C0000E0700000FFC00001C0C00001C0600001C0700001C07000038070
000380700003807000038070000700F0000700F0400700F0400700F0800F007880FFE079000000
1E001A1D7D9B1E>82 D<000F8400304C00403C0080180100180300180300180600100600100600
0007000007000003E00003FC0001FF00007F800007C00001C00001C00000C00000C02000C02000
C0600180600180600300600200F00400CC180083E000161E7D9C17>I<7FF0FF800F001C000E00
18000E0010000E0010000E0010001C0020001C0020001C0020001C002000380040003800400038
0040003800400070008000700080007000800070008000E0010000E0010000E0010000E0020000
E0020000E0040000E00400006008000030300000104000000F800000191D779B1F>85
D<03CC063C0C3C181C3838303870387038E070E070E070E070E0E2C0E2C0E261E462643C380F12
7B9115>97 D<3F00070007000E000E000E000E001C001C001C001C0039C03E6038303830703870
3870387038E070E070E070E060E0E0C0C0C1C0618063003C000D1D7B9C13>I<01F007080C0818
1C3838300070007000E000E000E000E000E000E008E010602030C01F000E127B9113>I<001F80
000380000380000700000700000700000700000E00000E00000E00000E0003DC00063C000C3C00
181C00383800303800703800703800E07000E07000E07000E07000E0E200C0E200C0E20061E400
6264003C3800111D7B9C15>I<01E007100C1018083810701070607F80E000E000E000E000E000
E0086010602030C01F000D127B9113>I<0003C0000670000C70001C60001C00001C0000380000
380000380000380000380003FF8000700000700000700000700000700000E00000E00000E00000
E00000E00001C00001C00001C00001C00001C000038000038000038000030000030000070000C6
0000E60000CC00007800001425819C0D>I<00F3018F030F06070E0E0C0E1C0E1C0E381C381C38
1C381C383830383038187818F00F700070007000E000E0C0C0E1C0C3007E00101A7D9113>I<0F
C00001C00001C0000380000380000380000380000700000700000700000700000E78000E8C000F
0E000E0E001C0E001C0E001C0E001C0E00381C00381C00381C0038380070388070388070708070
7100E03200601C00111D7D9C15>I<01800380010000000000000000000000000000001C002600
470047008E008E000E001C001C001C0038003800710071007100720072003C00091C7C9B0D>I<
1F800380038007000700070007000E000E000E000E001C001C001C001C00380038003800380070
00700070007000E400E400E400E40068003800091D7C9C0B>108 D<3C1E0780266318C04683A0
E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C0701C01C070380380E
0388380E0388380E0708380E0710701C0320300C01C01D127C9122>I<3C3C0026460046870047
07008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C40381C4038384038388070
1900300E0012127C9117>I<01E007180C0C180C380C300E700E700EE01CE01CE01CE018E038E0
30E06060C031801E000F127B9115>I<07870004D98008E0C008E0C011C0E011C0E001C0E001C0
E00381C00381C00381C00381800703800703000707000706000E8C000E70000E00000E00001C00
001C00001C00001C00003C0000FF8000131A7F9115>I<03C4062C0C3C181C3838303870387038
E070E070E070E070E0E0C0E0C0E061E063C03DC001C001C0038003800380038007803FF00E1A7B
9113>I<3C3C26C2468747078E068E000E000E001C001C001C001C003800380038003800700030
0010127C9112>I<01F006080C080C1C18181C001F001FC00FF007F0007800386030E030C03080
6060C01F000E127D9111>I<00C001C001C001C00380038003800380FFE00700070007000E000E
000E000E001C001C001C001C00384038403840388019000E000B1A7D990E>I<1E030027070047
0700470700870E00870E000E0E000E0E001C1C001C1C001C1C001C1C0038388038388018388018
39001C5900078E0011127C9116>I<1E06270E470E4706870287020E020E021C041C041C041C08
18083808181018200C4007800F127C9113>I<070E0019910010E38020E38041C30041C00001C0
0001C000038000038000038000038000070200670200E70400CB04008B080070F00011127D9113
>120 D<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C1C1C1C38383838183818381C7007
F00070007000E0E0C0E1C0818047003C00101A7C9114>I<038207C20FEC083810080010002000
40008001000200040008081008383067F043E081C00F127D9111>I E /Fj
20 113 df<FFFFFF80FFFFFF8019027D8A20>0 D<01800180018001804182F18F399C0FF003C0
03C00FF0399CF18F4182018001800180018010127E9215>3 D<00040000000600000006000000
060000000600000006000000060000000600000006000000060000000600000006000000060000
FFFFFFE0FFFFFFE000060000000600000006000000060000000600000006000000060000000600
00000600000006000000060000FFFFFFE0FFFFFFE01B1C7E9A20>6 D<FFFFFFE0FFFFFFE00006
000000060000000600000006000000060000000600000006000000060000000600000006000000
060000FFFFFFE0FFFFFFE000060000000600000006000000060000000600000006000000060000
0006000000060000000600000006000000060000000400001B1C7E9420>I<03C00FF01C38300C
60066006C003C003C003C00360066006300C1C380FF003C010107E9115>14
D<000001800000078000001E00000078000001E00000078000001E00000078000001E000000780
00001E00000078000000E0000000780000001E0000000780000001E0000000780000001E000000
0780000001E0000000780000001E00000007800000018000000000000000000000000000000000
0000000000000000000000007FFFFF00FFFFFF8019227D9920>20 D<C0000000F00000003C0000
000F00000003C0000000F00000003C0000000F00000003C0000000F00000003C0000000F000000
038000000F0000003C000000F0000003C000000F0000003C000000F0000003C000000F0000003C
00000070000000C000000000000000000000000000000000000000000000000000000000000000
7FFFFF00FFFFFF8019227D9920>I<020000000004000000000400000000080000000010000000
002000000000FFFFFFFFF0FFFFFFFFF02000000000100000000008000000000400000000040000
00000200000000240E7D902A>32 D<000000040000000002000000000200000000010000000000
800000000040FFFFFFFFF8FFFFFFFFF80000000040000000008000000001000000000200000000
02000000000400250E7E902A>I<0000030000000003000000000180000000018000000000C000
00000060007FFFFFF000FFFFFFF8000000000E00000000070000000001E0000000007800000001
E0000000038000000006000000001C00FFFFFFF8007FFFFFF0000000006000000000C000000001
800000000180000000030000000003000025187E952A>41 D<400004C0000C6000186000186000
183000303000303000301800601800601FFFE00FFFC00C00C00C00C00601800601800303000303
0003030001860001860001860000CC0000CC0000CC00007800007800007800003000003000161E
809C17>56 D<FFFFFEFFFFFE000006000006000006000006000006000006000006000006000006
170B7E8E1C>58 D<003FFF8001FFFF000700C0000C01C0001C0380003003800020070000000700
00000F0000000F0000000E0000000E0000001E0000001E0000001C0000001C0000003C00000038
00000038000000780000007000000070000000E0000000E0180001C07000018060007FFF8000FF
FF0000191C819B17>73 D<00007E000001FF0000031F0000060F00000C0F0000180F0000380C00
00780800007000000070000000E0000000E0000001E0000001E0000001C0000001C0000003C000
000380000003800000078000000780000007000000070000000E0000800E0003801FE007001FFC
060031FF8C00603FF800C007E000191E7F9C1D>76 D<0000000400FFFFF803FFFFE00400E0001C
00E0003801C0003001C0007003C000E003C000C003800000038000000780000007800000070000
00070000000F0000000E0000000E0000001E0000001E0000001C0000001C000000380000003800
00007000000060000000C0000007FF00000FFC00001E1D7F9C17>84 D<00100000380000380000
6C00006C00006C0000C60000C6000183000183000301800301800600C00600C00600C00C00600C
006018003018003030001830001830001860000C60000CC00006C00002171A7E981C>94
D<400000C00000C00000C00000C00000C00000C00000C00000C00000C00000C00000C00000C000
00FFFFE0FFFFF0C00000C00000C00000C00000C00000C00000C00000C00000C00000C00000C000
00C00000C00000400000141D7E9C19>96 D<003C00E001C0018003800380038003800380038003
80038003800380038003800380030007001C00F0001C0007000300038003800380038003800380
0380038003800380038003800380018001C000E0003C0E297D9E15>102
D<F0001C00070003000380038003800380038003800380038003800380038003800380018001C0
00E0003C00E001C001800380038003800380038003800380038003800380038003800380030007
001C00F0000E297D9E15>I<000000004000000000C00000000180000000018000000003000000
000300000000060000000006000000000C000000000C0000000018000000001800000000300000
0000300000000060000000006000000000C000000000C000000001800000000180000000030000
0C000300003C000600004E000600008E000C000007000C00000700180000038018000003803000
00038030000001C060000001C060000000E0C0000000E0C0000000718000000071800000003B00
0000003B000000001E000000001E000000000C000000000C000000222A7E8123>112
D E /Fk 22 122 df<60F0F06004047C830C>58 D<60F0F0701010101020204080040C7C830C>
I<0000038000000F0000003C000000F0000003C000000F0000003C000000F0000003C000000F00
00003C000000F0000000F00000003C0000000F00000003C0000000F00000003C0000000F000000
03C0000000F00000003C0000000F000000038019187D9520>I<E0000000780000001E00000007
80000001E0000000780000001E0000000780000001E0000000780000001E000000078000000780
00001E00000078000001E00000078000001E00000078000001E00000078000001E000000780000
00E000000019187D9520>62 D<01FFFF00003C03C0003800E0003800F000380070003800700070
00F0007000F0007000F0007000E000E001E000E003C000E0078000E01E0001FFF00001C0000001
C0000001C000000380000003800000038000000380000007000000070000000700000007000000
0F000000FFE000001C1C7E9B1B>80 D<0003F800000E0E000038038000E001C001C001C0038000
E0070000E00F0000F01E0000F01C0000F03C0000F03C0000F0780000F0780000F0780000F0F000
01E0F00001E0F00001E0F00003C0F00003C0F0000380F0000780F0000F00703C0E0070421C0038
823800388270001C83C0000787810001FF0100000303000003020000038E000003FC000003F800
0001F8000001E0001C257E9C21>I<01E3000717000C0F00180F00380E00300E00700E00700E00
E01C00E01C00E01C00E01C00E03880E03880E038806078803199001E0E0011127E9116>97
D<3F00070007000E000E000E000E001C001C001C001C0039E03A303C1838187018701C701C701C
E038E038E038E030E070E060E0C061C023001E000E1D7E9C12>I<01F0030C0E0C1C1E383C3018
70007000E000E000E000E000E000E0046008601030601F800F127E9112>I<0007E00000E00000
E00001C00001C00001C00001C000038000038000038000038001E7000717000C0F00180F00380E
00300E00700E00700E00E01C00E01C00E01C00E01C00E03880E03880E038806078803199001E0E
00131D7E9C16>I<01F007080C0818043808300870307FC0E000E000E000E000E000E004600860
1030600F800E127E9113>I<0001E0000630000E78000CF0001C60001C00001C00001C00003C00
00380000380003FFC000380000380000700000700000700000700000700000E00000E00000E000
00E00000E00001C00001C00001C00001C00001C000018000038000038000630000F30000F60000
E4000078000015257E9C14>I<01C003C003C001800000000000000000000000001C0027004700
4700870087000E000E001C001C001C003800388038807080710032001C000A1C7E9B0E>105
D<1F800380038007000700070007000E000E000E000E001C001C001C001C003800380038003800
7000700070007000E400E400E400E40064003800091D7E9C0C>108 D<381F004E61804681C047
01C08F01C08E01C00E01C00E01C01C03801C03801C03801C0700380710380710380E10380E2070
064030038014127E9119>110 D<07078009C86008D03008E03011C03011C03801C03801C03803
80700380700380700380600700E00700C00701800783000E86000E78000E00000E00001C00001C
00001C00001C00003C0000FF8000151A819115>112 D<383C4E424687470F8E1E8E0C0E000E00
1C001C001C001C0038003800380038007000300010127E9113>114 D<01F0060C04040C0E180C
1C001F000FE00FF003F80038201C7018F018F010803060601F800F127E9113>I<00C001C001C0
01C00380038003800380FFF00700070007000E000E000E000E001C001C001C001C003820382038
40384018800F000C1A80990F>I<1C02270747074703870187010E010E011C021C021C021C0418
04180818081C100C2007C010127E9114>118 D<07878008C84010F0C020F1E020E3C040E18000
E00000E00001C00001C00001C00001C000638080F38080F38100E5810084C60078780013127E91
18>120 D<1C00C02701C04701C04701C08703808703800E03800E03801C07001C07001C07001C
0700180E00180E00180E001C1E000C3C0007DC00001C00001800603800F03000F06000E0C00041
80003E0000121A7E9114>I E /Fl 36 120 df<FFFCFFFCFFFCFFFC0E047F8C13>45
D<00180000780001F800FFF800FFF80001F80001F80001F80001F80001F80001F80001F80001F8
0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8
0001F80001F80001F80001F8007FFFE07FFFE013207C9F1C>49 D<03FC000FFF003C1FC07007E0
7C07F0FE03F0FE03F8FE03F8FE01F87C01F83803F80003F80003F00003F00007E00007C0000F80
001F00003E0000380000700000E01801C0180380180700180E00380FFFF01FFFF03FFFF07FFFF0
FFFFF0FFFFF015207D9F1C>I<00FE0007FFC00F07E01E03F03F03F03F81F83F81F83F81F81F03
F81F03F00003F00003E00007C0001F8001FE0001FF000007C00001F00001F80000FC0000FC3C00
FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01FC7801F81E07F00FFFC001FE0017207E9F1C>I<00
00E00001E00003E00003E00007E0000FE0001FE0001FE00037E00077E000E7E001C7E00187E003
07E00707E00E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007E000
07E00007E00007E00007E000FFFE00FFFE17207E9F1C>I<000070000000007000000000F80000
0000F800000000F800000001FC00000001FC00000003FE00000003FE00000003FE00000006FF00
0000067F0000000E7F8000000C3F8000000C3F800000183FC00000181FC00000381FE00000300F
E00000300FE00000600FF000006007F00000E007F80000FFFFF80000FFFFF800018001FC000180
01FC00038001FE00030000FE00030000FE000600007F000600007F00FFE00FFFF8FFE00FFFF825
227EA12A>65 D<FFFFFF8000FFFFFFE00007F001F80007F000FC0007F0007E0007F0007E0007F0
007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007E0007F000FE0007F000FC0007
F003F80007FFFFF00007FFFFF00007F001FC0007F0007E0007F0003F0007F0003F8007F0001F80
07F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0003F8007F0003F
8007F0007F0007F001FE00FFFFFFF800FFFFFFC00022227EA128>I<FFFFFF8000FFFFFFF00007
F003FC0007F0007E0007F0003F0007F0001F8007F0000FC007F00007E007F00007E007F00007F0
07F00003F007F00003F007F00003F007F00003F807F00003F807F00003F807F00003F807F00003
F807F00003F807F00003F807F00003F807F00003F807F00003F007F00003F007F00003F007F000
07E007F00007E007F0000FC007F0001F8007F0003F0007F0007E0007F003FC00FFFFFFF000FFFF
FF800025227EA12B>68 D<FFFF83FFFEFFFF83FFFE07F0001FC007F0001FC007F0001FC007F000
1FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0
001FC007F0001FC007FFFFFFC007FFFFFFC007F0001FC007F0001FC007F0001FC007F0001FC007
F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC007F0001FC0
07F0001FC007F0001FC007F0001FC0FFFF83FFFEFFFF83FFFE27227EA12C>72
D<FFFFE0FFFFE003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F8
0003F80003F80003F80003F80003F80003F800FFFFE0FFFFE013227FA115>I<FFFFE000FFFFE0
0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0
000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
F0001807F0001807F0001807F0001807F0003807F0003807F0007007F0007007F000F007F001F0
07F007F0FFFFFFF0FFFFFFF01D227EA122>76 D<FFF000000FFFFFF800001FFF07F800001FE006
FC000037E006FC000037E006FC000037E0067E000067E0067E000067E0063F0000C7E0063F0000
C7E0061F800187E0061F800187E0060FC00307E0060FC00307E0060FC00307E00607E00607E006
07E00607E00603F00C07E00603F00C07E00601F81807E00601F81807E00601F81807E00600FC30
07E00600FC3007E006007E6007E006007E6007E006003FC007E006003FC007E006001F8007E006
001F8007E006001F8007E006000F0007E0FFF00F00FFFFFFF00600FFFF30227EA135>I<FFF800
1FFEFFFC001FFE07FC0000C007FE0000C006FF0000C0067F8000C0063FC000C0061FE000C0060F
E000C0060FF000C00607F800C00603FC00C00601FE00C00600FE00C00600FF00C006007F80C006
003FC0C006001FE0C006000FF0C0060007F0C0060007F8C0060003FCC0060001FEC0060000FFC0
0600007FC00600007FC00600003FC00600001FC00600000FC006000007C006000003C006000003
C0FFF00001C0FFF00000C027227EA12C>I<FFFFFE0000FFFFFFC00007F007F00007F001F80007
F000FC0007F0007E0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00
07F0007E0007F000FC0007F001F80007F007F00007FFFFC00007FFFF800007F00FE00007F007F0
0007F003F80007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001
FC0007F001FC0007F001FC0607F000FE0607F000FF0CFFFF803FF8FFFF800FF027227EA12A>82
D<01FC0407FF8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC000CFC0000FF0000FFE0
007FFF007FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F00003F00003FC0001FC000
1FC0001FE0001EE0001EF0003CFC003CFF00F8C7FFE080FF8018227DA11F>I<7FFFFFFF807FFF
FFFF807E03F80F807803F807807003F803806003F80180E003F801C0E003F801C0C003F800C0C0
03F800C0C003F800C0C003F800C00003F800000003F800000003F800000003F800000003F80000
0003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F800
000003F800000003F800000003F800000003F800000003F800000003F800000003F8000003FFFF
F80003FFFFF80022227EA127>I<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F000
01F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07
E03F18167E951B>97 D<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC00
00FC0000FC0000FC0000FC00007C00007E00007E00003E00301F00600FC0E007FF8000FE001416
7E9519>99 D<0001FE000001FE0000003E0000003E0000003E0000003E0000003E0000003E0000
003E0000003E0000003E0000003E0000003E0001FC3E0007FFBE000F81FE001F007E003E003E00
7E003E007C003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E
007C003E007C003E003E007E001E00FE000F83BE0007FF3FC001FC3FC01A237EA21F>I<00FE00
07FF800F87C01E01E03E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC0000
7C00007C00007E00003E00181F00300FC07003FFC000FF0015167E951A>I<003F8000FFC001E3
E003C7E007C7E00F87E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FFFC000F80
000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80
000F80000F80000F80000F80007FF8007FF80013237FA211>I<03FC1E0FFF7F1F0F8F3E07CF3C
03C07C03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC0030000030000038
00003FFF801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E78003C7C007C3F
01F80FFFE001FF0018217E951C>I<FF000000FF0000001F0000001F0000001F0000001F000000
1F0000001F0000001F0000001F0000001F0000001F0000001F0000001F07E0001F1FF8001F307C
001F403C001F803E001F803E001F003E001F003E001F003E001F003E001F003E001F003E001F00
3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00FFE1FFC0FFE1FFC01A
237EA21F>I<1C003F007F007F007F003F001C000000000000000000000000000000FF00FF001F
001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE0
0B247EA310>I<FF000000FF0000001F0000001F0000001F0000001F0000001F0000001F000000
1F0000001F0000001F0000001F0000001F0000001F00FF801F00FF801F0038001F0060001F01C0
001F0380001F0700001F0E00001F1C00001F7E00001FFF00001FCF00001F0F80001F07C0001F03
E0001F01E0001F01F0001F00F8001F007C001F003C00FFE0FFC0FFE0FFC01A237EA21E>107
D<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B237EA210>I<
FF07F007F000FF1FFC1FFC001F303E303E001F403E403E001F801F801F001F801F801F001F001F
001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
001F00FFE0FFE0FFE0FFE0FFE0FFE02B167E9530>I<FF07E000FF1FF8001F307C001F403C001F
803E001F803E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00
1F003E001F003E001F003E001F003E001F003E001F003E00FFE1FFC0FFE1FFC01A167E951F>I<
00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007EFC007EFC007EFC007EFC007E
FC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE0017167E951C>I<00FE030007
FF87000FC1C7001F006F003F003F007E003F007E001F007C001F00FC001F00FC001F00FC001F00
FC001F00FC001F00FC001F00FC001F007E001F007E001F003E003F001F007F000FC1DF0007FF9F
0001FC1F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000000
FFE00000FFE01B207E951E>113 D<FE1F00FE3FC01E67E01EC7E01E87E01E87E01F83C01F0000
1F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0000FFF000
FFF00013167E9517>I<0FF3003FFF00781F00600700E00300E00300F00300FC00007FE0007FF8
003FFE000FFF0001FF00000F80C00780C00380E00380E00380F00700FC0E00EFFC00C7F0001116
7E9516>I<0180000180000180000180000380000380000780000780000F80003F8000FFFF00FF
FF000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F81800F
81800F81800F81800F81800F830007C30003FE0000F80011207F9F16>I<FF01FE00FF01FE001F
003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00
1F003E001F003E001F003E001F003E001F003E001F007E001F00FE000F81BE0007FF3FC001FC3F
C01A167E951F>I<FFE01FE0FFE01FE00F8006000F8006000FC00E0007C00C0007E01C0003E018
0003E0180001F0300001F0300000F8600000F86000007CC000007CC000007FC000003F8000003F
8000001F0000001F0000000E0000000E00001B167F951E>I<FFE7FF07F8FFE7FF07F81F007800
C00F807801800F807C01800F807C018007C07E030007C0DE030007E0DE070003E0DF060003E18F
060001F18F0C0001F38F8C0001FB079C0000FB07D80000FE03D800007E03F000007E03F000007C
01F000003C01E000003800E000001800C00025167F9528>I E /Fm 16 117
df<78FCFCFCFC7806067D850C>46 D<00C003C0FFC0FFC003C003C003C003C003C003C003C003
C003C003C003C003C003C003C003C003C003C003C07FFE7FFE0F187D9716>49
D<0FF0003FFC00787E00FC1F00FC1F80FC0F80FC0F80780F80001F80001F00001E00003C000078
0000700000E0000180000301800601800C01801003803FFF007FFF00FFFF00FFFF0011187E9716
>I<00030000000780000007800000078000000FC000000FC000001BE000001BE000001BE00000
31F0000031F0000060F8000060F80000E0FC0000C07C0000C07C0001803E0001FFFE0003FFFF00
03001F0003001F0006000F8006000F800E000FC0FFC07FFCFFC07FFC1E1A7F9921>65
D<FFFFFCFFFFFC0F803C0F801C0F800C0F800E0F80060F80060F83060F83000F83000F87000FFF
000FFF000F87000F83000F83000F83000F80000F80000F80000F80000F80000F8000FFFC00FFFC
00171A7E991C>70 D<7FFFFF807FFFFF80781F0780701F0380601F0180E01F01C0C01F00C0C01F
00C0C01F00C0001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000000
1F0000001F0000001F0000001F0000001F0000001F0000001F000007FFFC0007FFFC001A1A7E99
1F>84 D<0FF0001C3C003E1E003E0E003E0F001C0F00000F0000FF000FCF003E0F007C0F00F80F
00F80F00F80F00F817007C27E01FC3E013117F9015>97 D<FE0000FE00001E00001E00001E0000
1E00001E00001E00001E00001E7F001FC3C01F00E01E00F01E00781E00781E007C1E007C1E007C
1E007C1E007C1E00781E00781E00F01F00E01D83C0187F00161A7F9919>I<03FC000F0E001C1F
003C1F00781F00780E00F80000F80000F80000F80000F800007800007800003C01801C03000F06
0003FC0011117F9014>I<03F0000E1C001C0E003C0700780700780780F80780F80780FFFF80F8
0000F800007800007800003C01801C03000E060003FC0011117F9014>101
D<07E3C01C3CE0381CE0781EC0781E00781E00781E00781E00381C001C380027E0002000002000
003000003FFE001FFF801FFFC07003C0E000E0E000E0E000E0E000E07001C03C078007FC001319
7F9016>103 D<1C003E003E003E003E001C0000000000000000007E007E001E001E001E001E00
1E001E001E001E001E001E001E001E001E00FF80FF80091B7F9A0D>105
D<FE00FE001E001E001E001E001E001E001E001E001E001E001E001E001E001E001E001E001E00
1E001E001E001E001E00FFC0FFC00A1A7F990D>108 D<FC78FC9C1D3E1D3E1E3E1E1C1E001E00
1E001E001E001E001E001E001E00FFC0FFC00F117F9012>114 D<1FB020704030C030C030F000
FF807FE03FF807F8003CC00CC00CE00CE008F830CFE00E117F9011>I<06000600060006000E00
0E001E003FF0FFF01E001E001E001E001E001E001E001E001E181E181E181E181E180F3003E00D
187F9711>I E /Fn 70 124 df<00FC7C0183C607078E0607040E07000E07000E07000E07000E
07000E0700FFFFF00E07000E07000E07000E07000E07000E07000E07000E07000E07000E07000E
07000E07000E07000E07007F0FF0171A809916>11 D<00FC000182000703000607000E02000E00
000E00000E00000E00000E0000FFFF000E07000E07000E07000E07000E07000E07000E07000E07
000E07000E07000E07000E07000E07000E07007F0FE0131A809915>I<007E1F8001C170400703
C060060380E00E0380400E0380000E0380000E0380000E0380000E038000FFFFFFE00E0380E00E
0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E0
0E0380E00E0380E00E0380E07F8FE3FC1E1A809920>14 D<60F0F868080808101020C0050B7D99
0B>39 D<00800100020004000C00080018003000300030006000600060006000E000E000E000E0
00E000E000E000E000E000E0006000600060006000300030003000180008000C00040002000100
008009267D9B0F>I<8000400020001000180008000C0006000600060003000300030003000380
03800380038003800380038003800380038003000300030003000600060006000C000800180010
0020004000800009267E9B0F>I<60F0F07010101020204080040B7D830B>44
D<FFC0FFC00A0280880D>I<60F0F06004047D830B>I<0004000C00180018001800300030003000
600060006000C000C000C00180018001800300030003000600060006000C000C000C0018001800
1800300030003000600060006000C000C0000E257E9B13>I<03000700FF000700070007000700
0700070007000700070007000700070007000700070007000700070007000700FFF00C187D9713
>49 D<0F80106020304038803CC01CE01C401C003C003800380070006000C00180010002000404
0804100430083FF87FF8FFF80E187E9713>I<0F8010E020706078703820380078007000700060
00C00F8000E000700038003C003CE03CE03CC03C4038407030E00F800E187E9713>I<00300030
007000F000F001700370027004700C7008701070307020704070C070FFFF007000700070007000
70007007FF10187F9713>I<30183FF03FE03FC02000200020002000200027C038602030003800
18001C001C401CE01CE01C80184038403030E00F800E187E9713>I<01E006100C181838303830
0070006000E000E7C0E860F030F018E018E01CE01CE01C601C601C701830183030186007C00E18
7E9713>I<40007FFE7FFC7FFC4008801080108020004000400080018001800100030003000300
030007000700070007000700070002000F197E9813>I<07801860303020186018601860187010
3C303E600F8007C019F030F86038401CC00CC00CC00CC00C6008201018600FC00E187E9713>I<
07801860303070306018E018E018E01CE01CE01C601C603C303C185C0F9C001C00180018003870
307060604021801F000E187E9713>I<60F0F060000000000000000060F0F06004107D8F0B>I<00
0C0000000C0000000C0000001E0000001E0000003F000000270000002700000043800000438000
004380000081C0000081C0000081C0000100E0000100E00001FFE0000200700002007000060078
00040038000400380008001C0008001C001C001E00FF00FFC01A1A7F991D>65
D<FFFF000E01C00E00E00E00700E00780E00780E00780E00780E00780E00F00E00E00E03C00FFF
800E01E00E00700E00780E003C0E003C0E003C0E003C0E003C0E00380E00780E00F00E01E0FFFF
80161A7E991B>I<003F0201C0C603002E0E001E1C000E1C0006380006780002700002700002F0
0000F00000F00000F00000F00000F000007000027000027800023800041C00041C00080E000803
003001C0C0003F00171A7E991C>I<FFFF000E01C00E00E00E00300E00380E001C0E001C0E000E
0E000E0E000F0E000F0E000F0E000F0E000F0E000F0E000F0E000F0E000E0E000E0E001E0E001C
0E00380E00380E00700E01C0FFFF00181A7E991D>I<FFFFF00E00700E00300E00100E00180E00
080E00080E00080E04000E04000E04000E0C000FFC000E0C000E04000E04000E04000E00040E00
040E00080E00080E00080E00180E00380E0070FFFFF0161A7E991A>I<FFFFE00E00E00E00600E
00200E00300E00100E00100E00100E04000E04000E04000E0C000FFC000E0C000E04000E04000E
04000E00000E00000E00000E00000E00000E00000E00000E0000FFF000141A7E9919>I<003F02
0001C0C60003002E000E001E001C000E001C00060038000600780002007000020070000200F000
0000F0000000F0000000F0000000F0000000F001FFC070000E0070000E0078000E0038000E001C
000E001C000E000E000E000300160001C06600003F82001A1A7E991E>I<FFE7FF0E00700E0070
0E00700E00700E00700E00700E00700E00700E00700E00700E00700FFFF00E00700E00700E0070
0E00700E00700E00700E00700E00700E00700E00700E00700E0070FFE7FF181A7E991D>I<FFE0
0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E
000E000E000E000E00FFE00B1A7F990E>I<1FFC00E000E000E000E000E000E000E000E000E000
E000E000E000E000E000E000E000E000E000E040E0E0E0E0E041C061801E000E1A7D9914>I<FF
F0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
00000E00000E00000E00000E00200E00200E00200E00600E00400E00400E00C00E03C0FFFFC013
1A7E9918>76 D<FF0003FC0F0003C00F0003C00B8005C00B8005C00B8005C009C009C009C009C0
09C009C008E011C008E011C008E011C0087021C0087021C0083841C0083841C0083841C0081C81
C0081C81C0081C81C0080F01C0080F01C0080F01C0080601C01C0601C0FF861FFC1E1A7E9923>
I<FE01FF0F00380F00100B80100B801009C01008E01008E010087010087010083810081C10081C
10080E10080E100807100803900803900801D00801D00800F00800700800700800301C0030FF80
10181A7E991D>I<007F000001C1C000070070000E0038001C001C003C001E0038000E0078000F
0070000700F0000780F0000780F0000780F0000780F0000780F0000780F0000780F00007807800
0F0078000F0038000E003C001E001C001C000E0038000700700001C1C000007F0000191A7E991E
>I<FFFF000E03C00E00E00E00700E00700E00780E00780E00780E00780E00700E00700E00E00E
03C00FFF000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000FF
E000151A7E991A>I<FFFC00000E0780000E01C0000E00E0000E00F0000E00F0000E00F0000E00
F0000E00F0000E00E0000E01C0000E0780000FFC00000E0600000E0300000E0180000E01C0000E
01C0000E01C0000E01E0000E01E0000E01E0000E01E0800E00F0800E007100FFE03E00191A7E99
1C>82 D<0FC21836200E6006C006C002C002C002E00070007E003FE01FF807FC003E000E000700
03800380038003C002C006E004D81887E0101A7E9915>I<7FFFFF00701C0700401C0100401C01
00C01C0180801C0080801C0080801C0080001C0000001C0000001C0000001C0000001C0000001C
0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C000000
1C0000001C000003FFE000191A7F991C>I<FFE1FF0E00380E00100E00100E00100E00100E0010
0E00100E00100E00100E00100E00100E00100E00100E00100E00100E00100E00100E00100E0010
06002007002003004001804000C180003E00181A7E991D>I<FF801FC01E000F001C0006000E00
04000E000400070008000700080007000800038010000380100003C0300001C0200001C0200000
E0400000E0400000E040000070800000708000003900000039000000390000001E0000001E0000
001E0000000C0000000C00001A1A7F991D>I<FF83FF0FF03C007801C01C007800801C00780080
0E007801000E007801000E009C010007009C020007009C020007010E020007010E020003810E04
000382070400038207040001C207080001C403880001C403880000E403900000E403900000E801
D000007801E000007801E000007000E000007000E000003000C0000020004000241A7F9927>I<
7FC0FF000F003C0007003000078020000380600001C0400001E0800000E1800000710000007A00
00003C0000001C0000001E0000001E00000017000000278000004380000041C0000081E0000100
E0000100700002007800040038000C001C001E003E00FF80FFC01A1A7F991D>I<FF801FE01E00
07000E0006000F000400070008000780080003C0100001C0300001E0200000F040000070400000
78800000388000001D0000001F0000000E0000000E0000000E0000000E0000000E0000000E0000
000E0000000E0000000E0000000E000000FFE0001B1A7F991D>I<FEFEC0C0C0C0C0C0C0C0C0C0
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE07257D9B0B>91
D<FEFE060606060606060606060606060606060606060606060606060606060606060606FEFE07
25809B0B>93 D<3F8070C070E020700070007007F01C7030707070E070E071E071E0F171FB1E3C
10107E8F13>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C
F8001F0E001E07001C03801C01801C01C01C01C01C01C01C01C01C01C01C01C01C03801C03001E
07001B0C0010F000121A7F9915>I<07F80C1C381C30087000E000E000E000E000E000E0007000
300438080C1807E00E107F8F11>I<007E00000E00000E00000E00000E00000E00000E00000E00
000E00000E0003CE000C3E00380E00300E00700E00E00E00E00E00E00E00E00E00E00E00E00E00
600E00700E00381E001C2E0007CFC0121A7F9915>I<07C01C3030187018600CE00CFFFCE000E0
00E000E0006000300438080C1807E00E107F8F11>I<01F0031807380E100E000E000E000E000E
000E00FFC00E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00D1A8099
0C>I<0FCE187330307038703870387038303018602FC02000600070003FF03FFC1FFE600FC003
C003C003C0036006381C07E010187F8F13>I<FC00001C00001C00001C00001C00001C00001C00
001C00001C00001C00001CF8001D0C001E0E001E0E001C0E001C0E001C0E001C0E001C0E001C0E
001C0E001C0E001C0E001C0E001C0E00FF9FC0121A7F9915>I<18003C003C0018000000000000
00000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80
091A80990A>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C3F
801C1E001C18001C10001C20001C40001DC0001FE0001CE0001C70001C78001C38001C1C001C1E
001C1F00FF3FC0121A7F9914>107 D<FC001C001C001C001C001C001C001C001C001C001C001C
001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091A80990A>I<FC7C1F
001D8E63801E0781C01E0781C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C07
01C01C0701C01C0701C01C0701C01C0701C0FF9FE7F81D107F8F20>I<FCF8001D0C001E0E001E
0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E001C0E00FF9FC012
107F8F15>I<07E01C38300C700E6006E007E007E007E007E007E0076006700E381C1C3807E010
107F8F13>I<FCF8001F0E001E07001C03801C03801C01C01C01C01C01C01C01C01C01C01C01C0
1C03801C03001E07001F0C001CF0001C00001C00001C00001C00001C00001C0000FF800012177F
8F15>I<03C2000C2600381E00300E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E
00700E00381E001C2E0007CE00000E00000E00000E00000E00000E00000E00007FC012177F8F14
>I<FCE01D701E701E201C001C001C001C001C001C001C001C001C001C001C00FFC00C107F8F0F>
I<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020F0408F800C107F8F0F>
I<0400040004000C000C001C003C00FFC01C001C001C001C001C001C001C001C001C201C201C20
1C201C200E4003800B177F960F>I<FC7E001C0E001C0E001C0E001C0E001C0E001C0E001C0E00
1C0E001C0E001C0E001C0E001C0E001C1E000C2E0007CFC012107F8F15>I<FF1F803C06001C04
001C04001E0C000E08000E080007100007100007900003A00003A00001C00001C00001C0000080
0011107F8F14>I<FF3F9F803C0E0700380E06001C1604001C1704001E170C000E2308000E2388
000F239800074190000741D00003C1E0000380E0000380E0000180C0000100400019107F8F1C>
I<FF1F803C06001C04001C04001E0C000E08000E080007100007100007900003A00003A00001C0
0001C00001C000008000008000010000010000E10000E20000E4000078000011177F8F14>121
D<7FF86070407040E041C041C00380070007000E081C081C08381070107030FFF00D107F8F11>
I<FFFFC01201808913>I E /Fo 3 62 df<0C003C00CC000C000C000C000C000C000C000C000C
000C000C000C000C00FF8009107E8F0F>49 D<1F00618040C08060C0600060006000C001800300
06000C00102020207FC0FFC00B107F8F0F>I<FFFF80FFFF80000000000000000000000000FFFF
80FFFF8011087E8917>61 D E /Fp 8 117 df<01020408103020606040C0C0C0C0C0C0C0C0C0
C040606020301008040201081E7E950D>40 D<80402010080C0406060203030303030303030303
020606040C0810204080081E7E950D>I<00600000600000600000600000600000600000600000
6000006000006000FFFFF0FFFFF000600000600000600000600000600000600000600000600000
600000600014167E9119>43 D<0F0030C0606060604020C030C030C030C030C030C030C030C030
C03040206060606030C00F000C137E9211>48 D<0C001C00EC000C000C000C000C000C000C000C
000C000C000C000C000C000C000C000C00FFC00A137D9211>I<1F0060C06060F070F030603000
700070006000C001C00180020004000810101020207FE0FFE00C137E9211>I<F0003000300030
0030003000300033E034303818301830183018301830183018301830183018FC7E0F147F9312>
104 D<10001000100030007000FF80300030003000300030003000300030803080308011000E00
09127F910D>116 D E /Fq 81 124 df<007E1F0001C1B1800303E3C00703C3C00E03C1800E01
C0000E01C0000E01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E
01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
0E01C0000E01C0000E01C0007F87FC001A1D809C18>11 D<007E0001C1800301800703C00E03C0
0E01800E00000E00000E00000E00000E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C0
0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F87F8151D809C17>
I<007FC001C1C00303C00703C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01
C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
C00E01C00E01C07FCFF8151D809C17>I<003F07E00001C09C18000380F018000701F03C000E01
E03C000E00E018000E00E000000E00E000000E00E000000E00E000000E00E00000FFFFFFFC000E
00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C00
0E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C
007FC7FCFF80211D809C23>I<6060F0F0F8F86868080808080808101010102020404080800D0C
7F9C15>34 D<0080008007E01898308460824081C087C08FC08FC086E080F0807E803FC01FF00F
F803FC00BE008E00876087F083F083E0838082408240842088189007E00080008010217E9E15>
36 D<00E000000190000003080000030800000708000007080000070800000708000007100000
07100000072000000740000003C03FE003800F00038006000380040005C0040009C0080010E010
0030E010006070200060702000E0384000E03C4000E01C8000E00F0020E0070020700780403009
C0401830E18007C03E001B1F7E9D20>38 D<60F0F8680808081010204080050C7C9C0C>I<0040
00800100020006000C000C0018001800300030007000600060006000E000E000E000E000E000E0
00E000E000E000E000E000E000600060006000700030003000180018000C000C00060002000100
008000400A2A7D9E10>I<800040002000100018000C000C000600060003000300038001800180
018001C001C001C001C001C001C001C001C001C001C001C001C001800180018003800300030006
0006000C000C00180010002000400080000A2A7E9E10>I<000600000006000000060000000600
00000600000006000000060000000600000006000000060000000600000006000000060000FFFF
FFE0FFFFFFE0000600000006000000060000000600000006000000060000000600000006000000
060000000600000006000000060000000600001B1C7E9720>43 D<60F0F0701010101020204080
040C7C830C>I<FFE0FFE00B0280890E>I<60F0F06004047C830C>I<0001000300060006000600
0C000C000C0018001800180030003000300060006000C000C000C0018001800180030003000300
060006000C000C000C00180018001800300030003000600060006000C000C00010297E9E15>I<
03C00C301818300C300C700E60066006E007E007E007E007E007E007E007E007E007E007E007E0
07E00760066006700E300C300C18180C3007E0101D7E9B15>I<030007003F00C7000700070007
000700070007000700070007000700070007000700070007000700070007000700070007000700
0F80FFF80D1C7C9B15>I<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C
001C00380070006000C00180030006010C01180110023FFE7FFEFFFE101C7E9B15>I<07E01830
201C201C781E780E781E381E001C001C00180030006007E00030001C001C000E000F000F700FF8
0FF80FF80FF00E401C201C183007E0101D7E9B15>I<000C00000C00001C00003C00003C00005C
0000DC00009C00011C00031C00021C00041C000C1C00081C00101C00301C00201C00401C00C01C
00FFFFC0001C00001C00001C00001C00001C00001C00001C0001FFC0121C7F9B15>I<300C3FF8
3FF03FC020002000200020002000200023E024302818301C200E000E000F000F000F600FF00FF0
0FF00F800E401E401C2038187007C0101D7E9B15>I<00F0030C06040C0E181E301E300C700070
006000E3E0E430E818F00CF00EE006E007E007E007E007E007600760077006300E300C18180C30
03E0101D7E9B15>I<4000007FFF807FFF007FFF00400200800400800400800800001000001000
00200000600000400000C00000C00001C000018000018000038000038000038000038000078000
078000078000078000078000078000030000111D7E9B15>I<03E00C301008200C200660066006
60067006780C3E083FB01FE007F007F818FC307E601E600FC007C003C003C003C0036002600430
0C1C1007E0101D7E9B15>I<03C00C301818300C700C600EE006E006E007E007E007E007E00760
07700F300F18170C2707C700060006000E300C780C78187010203030C00F80101D7E9B15>I<60
F0F0600000000000000000000060F0F06004127C910C>I<60F0F0600000000000000000000060
F0F0701010101020204080041A7C910C>I<7FFFFFC0FFFFFFE000000000000000000000000000
00000000000000000000000000000000000000FFFFFFE07FFFFFC01B0C7E8F20>61
D<000600000006000000060000000F0000000F0000000F00000017800000178000001780000023
C0000023C0000023C0000041E0000041E0000041E0000080F0000080F0000180F8000100780001
FFF80003007C0002003C0002003C0006003E0004001E0004001E000C001F001E001F00FF80FFF0
1C1D7F9C1F>65 D<FFFFC00F00F00F00380F003C0F001C0F001E0F001E0F001E0F001E0F001C0F
003C0F00780F01F00FFFE00F00780F003C0F001E0F000E0F000F0F000F0F000F0F000F0F000F0F
001E0F001E0F003C0F0078FFFFE0181C7E9B1D>I<001F808000E0618001801980070007800E00
03801C0003801C00018038000180780000807800008070000080F0000000F0000000F0000000F0
000000F0000000F0000000F0000000F0000000700000807800008078000080380000801C000100
1C0001000E000200070004000180080000E03000001FC000191E7E9C1E>I<FFFFC0000F00F000
0F003C000F000E000F0007000F0007000F0003800F0003C00F0001C00F0001C00F0001E00F0001
E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001C00F0001C00F0003C00F00
03800F0007800F0007000F000E000F001C000F007000FFFFC0001B1C7E9B20>I<FFFFFC0F003C
0F000C0F00040F00040F00060F00020F00020F02020F02000F02000F02000F06000FFE000F0600
0F02000F02000F02000F02010F00010F00020F00020F00020F00060F00060F000C0F003CFFFFFC
181C7E9B1C>I<FFFFF80F00780F00180F00080F00080F000C0F00040F00040F02040F02000F02
000F02000F06000FFE000F06000F02000F02000F02000F02000F00000F00000F00000F00000F00
000F00000F00000F8000FFF800161C7E9B1B>I<001F808000E0618001801980070007800E0003
801C0003801C00018038000180780000807800008070000080F0000000F0000000F0000000F000
0000F0000000F0000000F000FFF0F0000F80700007807800078078000780380007801C0007801C
0007800E00078007000B800180118000E06080001F80001C1E7E9C21>I<FFF3FFC00F003C000F
003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C00
0F003C000FFFFC000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C
000F003C000F003C000F003C000F003C000F003C00FFF3FFC01A1C7E9B1F>I<FFF00F000F000F
000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
0F000F000F000F00FFF00C1C7F9B0F>I<1FFF00F8007800780078007800780078007800780078
00780078007800780078007800780078007800787078F878F878F878F0F040E021C01F00101D7F
9B15>I<FFF8000F80000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00
000F00000F00000F00000F00000F00000F00000F00080F00080F00080F00180F00180F00100F00
300F00700F01F0FFFFF0151C7E9B1A>76 D<FF8000FF800F8000F8000F8000F8000BC00178000B
C00178000BC001780009E002780009E002780008F004780008F004780008F00478000878087800
08780878000878087800083C107800083C107800083C107800081E207800081E207800081E2078
00080F407800080F40780008078078000807807800080780780008030078001C03007800FF8307
FF80211C7E9B26>I<FF007FC00F800E000F8004000BC0040009E0040009E0040008F0040008F8
040008780400083C0400083C0400081E0400080F0400080F0400080784000807C4000803C40008
01E4000801E4000800F40008007C0008007C0008003C0008003C0008001C0008000C001C000C00
FF8004001A1C7E9B1F>I<003F800000E0E0000380380007001C000E000E001C0007003C000780
38000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001
E0F00001E0F00001E0700001C0780003C0780003C0380003803C0007801C0007000E000E000700
1C000380380000E0E000003F80001B1E7E9C20>I<FFFF800F00E00F00780F003C0F001C0F001E
0F001E0F001E0F001E0F001E0F001C0F003C0F00780F00E00FFF800F00000F00000F00000F0000
0F00000F00000F00000F00000F00000F00000F00000F0000FFF000171C7E9B1C>I<FFFF00000F
01E0000F0078000F003C000F001C000F001E000F001E000F001E000F001E000F001C000F003C00
0F0078000F01E0000FFF00000F03C0000F00E0000F00F0000F0078000F0078000F0078000F0078
000F0078000F0078000F0078100F0078100F0038100F003C20FFF01C20000007C01C1D7E9B1F>
82 D<07E0801C1980300580700380600180E00180E00080E00080E00080F00000F800007C0000
7FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C08001C0C00180
C00180E00300D00200CC0C0083F800121E7E9C17>I<7FFFFFC0700F01C0600F00C0400F004040
0F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F0000000F0000000F0000
000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00
00000F0000000F0000001F800003FFFC001B1C7F9B1E>I<FFF07FC00F000E000F0004000F0004
000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F00
04000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000700080007
800800038010000180100000C020000070C000001F00001A1D7E9B1F>I<FFE00FF01F0003C00F
0001800F0001000F800300078002000780020003C0040003C0040003C0040001E0080001E00800
01F0080000F0100000F0100000F830000078200000782000003C4000003C4000003C4000001E80
00001E8000001F8000000F0000000F00000006000000060000000600001C1D7F9B1F>I<FFE0FF
E0FF1F001F003C1E001E00180F001F00100F001F00100F001F001007801F002007802780200780
27802003C027804003C043C04003C043C04003E043C04001E081E08001E081E08001E081E08000
F100F10000F100F10000F100F100007900FA00007A007A00007A007A00003E007C00003C003C00
003C003C00003C003C00001800180000180018000018001800281D7F9B2B>I<FFF007FC0F8001
E00780008007C0018003C0010003E0020001F0020000F0040000F8040000780800007C1800003C
1000001E2000001F2000000F4000000FC000000780000007800000078000000780000007800000
0780000007800000078000000780000007800000078000007FF8001E1C809B1F>89
D<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
C0FEFE07297C9E0C>91 D<08081010202040404040808080808080B0B0F8F8787830300D0C7A9C
15>I<FEFE06060606060606060606060606060606060606060606060606060606060606060606
060606FEFE0729809E0C>I<0C0012002100408080400A057B9B15>I<1FC000307000783800781C
00301C00001C00001C0001FC000F1C00381C00701C00601C00E01C40E01C40E01C40603C40304E
801F870012127E9115>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C0000
1C00001C00001C7C001D86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E0
1C00E01C00C01C01C01C01801E030019060010F800131D7F9C17>I<07E00C3018783078703060
00E000E000E000E000E000E00060007004300418080C3007C00E127E9112>I<003F0000070000
070000070000070000070000070000070000070000070000070003E7000C1700180F0030070070
0700600700E00700E00700E00700E00700E00700E00700600700700700300700180F000C370007
C7E0131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E000E000E000600070023002
18040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E00
0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00F1D809C0D>I<
00038003C4C00C38C01C3880181800381C00381C00381C00381C001818001C38000C300013C000
1000003000001800001FF8001FFF001FFF803003806001C0C000C0C000C0C000C0600180300300
1C0E0007F800121C7F9215>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00
001C00001C00001C7C001C87001D03001E03801C03801C03801C03801C03801C03801C03801C03
801C03801C03801C03801C03801C03801C0380FF9FF0141D7F9C17>I<18003C003C0018000000
000000000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C
001C001C001C00FF80091D7F9C0C>I<00C001E001E000C000000000000000000000000000000F
E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E060E0F0C0F1C061803E000B25839C0D>I<FC00001C00001C00001C00001C00001C00001C00
001C00001C00001C00001C00001C3FC01C0F001C0C001C08001C10001C20001C40001CE0001DE0
001E70001C78001C38001C3C001C1C001C0E001C0F001C0F80FF9FE0131D7F9C16>I<FC001C00
1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C
001C001C001C001C001C001C00FF80091D7F9C0C>I<FC7E07E0001C838838001D019018001E01
E01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C
01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00FF8FF8FF8021127F9124
>I<FC7C001C87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C
03801C03801C03801C03801C0380FF9FF014127F9117>I<03F0000E1C00180600300300700380
600180E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F000
12127F9115>I<FC7C001D86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00
E01C00E01C01C01C01C01C01801E03001D06001CF8001C00001C00001C00001C00001C00001C00
001C0000FF8000131A7F9117>I<03C1000C3300180B00300F00700700700700E00700E00700E0
0700E00700E00700E00700600700700700300F00180F000C370007C70000070000070000070000
0700000700000700000700003FE0131A7E9116>I<FCE01D301E781E781C301C001C001C001C00
1C001C001C001C001C001C001C001C00FFC00D127F9110>I<1F9030704030C010C010E010F800
7F803FE00FF000F880388018C018C018E010D0608FC00D127F9110>I<04000400040004000C00
0C001C003C00FFE01C001C001C001C001C001C001C001C001C001C101C101C101C101C100C100E
2003C00C1A7F9910>I<FC1F801C03801C03801C03801C03801C03801C03801C03801C03801C03
801C03801C03801C03801C03801C07800C07800E1B8003E3F014127F9117>I<FF07E03C03801C
01001C01000E02000E020007040007040007040003880003880003D80001D00001D00000E00000
E00000E00000400013127F9116>I<FF3FCFE03C0F03801C0701801C0701001C0B01000E0B8200
0E0B82000E1182000711C4000711C4000720C40003A0E80003A0E80003C0680001C0700001C070
0001803000008020001B127F911E>I<7F8FF00F03800F030007020003840001C80001D80000F0
0000700000780000F800009C00010E00020E000607000403801E07C0FF0FF81512809116>I<FF
07E03C03801C01001C01000E02000E020007040007040007040003880003880003D80001D00001
D00000E00000E00000E000004000004000008000008000F08000F10000F300006600003C000013
1A7F9116>I<7FFC70386038407040F040E041C003C0038007000F040E041C043C0C3808700870
38FFF80E127F9112>I<FFFFF01401808B15>I E /Fr 30 123 df<FFFF80FFFF80FFFF80FFFF80
FFFF80FFFF8011067F9017>45 D<1C003E007F00FF80FF80FF807F003E001C0000000000000000
00000000000000000000001C003E007F00FF80FF80FF807F003E001C00091B7B9A13>58
D<000003800000000007C00000000007C0000000000FE0000000000FE0000000000FE000000000
1FF0000000001FF0000000003FF8000000003FF8000000003FF80000000073FC0000000073FC00
000000F3FE00000000E1FE00000000E1FE00000001C0FF00000001C0FF00000003C0FF80000003
807F80000007807FC0000007003FC0000007003FC000000E003FE000000E001FE000001E001FF0
00001C000FF000001FFFFFF000003FFFFFF800003FFFFFF80000780007FC0000700003FC000070
0003FC0000E00001FE0000E00001FE0001E00001FF0001C00000FF0001C00000FF00FFFE001FFF
FEFFFE001FFFFEFFFE001FFFFE2F297EA834>65 D<00003FF001800003FFFE0380000FFFFF8780
003FF007DF8000FF8001FF8001FE00007F8003FC00003F8007F000001F800FF000000F801FE000
0007801FE0000007803FC0000007803FC0000003807FC0000003807F80000003807F8000000000
FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000
000000FF8000000000FF80000000007F80000000007F80000000007FC0000003803FC000000380
3FC0000003801FE0000003801FE0000007000FF00000070007F000000E0003FC00001E0001FE00
003C0000FF8000F800003FF007E000000FFFFFC0000003FFFF000000003FF8000029297CA832>
67 D<FFFFFFF80000FFFFFFFF8000FFFFFFFFE00003FC001FF80003FC0007FC0003FC0001FE00
03FC0000FF0003FC00007F8003FC00003FC003FC00001FC003FC00001FE003FC00001FE003FC00
000FF003FC00000FF003FC00000FF003FC00000FF003FC00000FF803FC00000FF803FC00000FF8
03FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00
000FF803FC00000FF003FC00000FF003FC00000FF003FC00001FE003FC00001FE003FC00001FC0
03FC00003FC003FC00007F8003FC00007F0003FC0001FE0003FC0003FC0003FC001FF800FFFFFF
FFE000FFFFFFFF8000FFFFFFFC00002D297DA835>I<FFFFFCFFFFFCFFFFFC01FE0001FE0001FE
0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE
0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE
0001FE0001FE0001FE0001FE0001FE0001FE00FFFFFCFFFFFCFFFFFC16297EA81A>73
D<FFFC0000FFFEFFFE0000FFFEFFFF0000FFFE03FF8000038003FF8000038003BFC0000380039F
E0000380039FF0000380038FF80003800387F80003800383FC0003800381FE0003800381FF0003
800380FF80038003807FC0038003803FC0038003801FE0038003800FF0038003800FF803800380
07FC0380038003FC0380038001FE0380038000FF0380038000FF83800380007FC3800380003FE3
800380001FE3800380000FF38003800007FB8003800007FF8003800003FF8003800001FF800380
0000FF80038000007F80038000007F80038000003F80038000001F80038000000F80FFFE000007
80FFFE00000380FFFE000003802F297DA836>78 D<0000FFE000000007FFFC0000003FC07F8000
007F001FC00001FC0007F00003F80003F80007F00001FC000FF00001FE001FE00000FF001FE000
00FF003FC000007F803FC000007F807FC000007FC07F8000003FC07F8000003FC07F8000003FC0
FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000
003FE0FF8000003FE0FF8000003FE0FF8000003FE07F8000003FC07FC000007FC07FC000007FC0
3FC000007F803FC000007F801FE00000FF001FE00000FF000FF00001FE0007F00001FC0003F800
03F80001FC0007F00000FF001FE000003FC07F8000000FFFFE00000000FFE000002B297CA834>
I<FFFFFFF800FFFFFFFF00FFFFFFFFC003FC003FE003FC000FF003FC0007F803FC0007FC03FC00
03FC03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC
0003FC03FC0007FC03FC0007F803FC000FF003FC003FE003FFFFFF8003FFFFFE0003FC00000003
FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000
03FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000FFFFF000
00FFFFF00000FFFFF0000027297DA82F>I<FFFFFFE00000FFFFFFFE0000FFFFFFFF800003FC00
7FE00003FC000FF00003FC0007F80003FC0007FC0003FC0003FC0003FC0003FE0003FC0003FE00
03FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FC0003FC0007F80003FC00
07F80003FC001FE00003FC007FC00003FFFFFE000003FFFFF0000003FC00FC000003FC007F0000
03FC003F800003FC003F800003FC001FC00003FC001FE00003FC001FE00003FC001FE00003FC00
1FE00003FC001FE00003FC001FF00003FC001FF00003FC001FF00003FC001FF00703FC001FF807
03FC000FF80703FC0007F80EFFFFF003FE1CFFFFF001FFF8FFFFF0003FF030297DA834>82
D<007F806003FFF0E007FFF9E00F807FE01F001FE03E0007E07C0003E07C0001E0FC0001E0FC00
01E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0003FFFFC001FFFFE000F
FFFF8007FFFFC003FFFFE000FFFFE00007FFF000007FF000000FF8000007F8000003F8600001F8
E00001F8E00001F8E00001F8F00001F0F00001F0F80003F0FC0003E0FF0007C0FFE01F80F3FFFF
00E0FFFE00C01FF0001D297CA826>I<01FF800007FFF0000F81F8001FC07E001FC07E001FC03F
000F803F8007003F8000003F8000003F8000003F80000FFF8000FFFF8007FC3F800FE03F803F80
3F803F003F807F003F80FE003F80FE003F80FE003F80FE003F807E007F807F00DF803F839FFC0F
FF0FFC01FC03FC1E1B7E9A21>97 D<FFE0000000FFE0000000FFE00000000FE00000000FE00000
000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000
00000FE00000000FE00000000FE1FE00000FE7FF80000FFE07E0000FF801F0000FF000F8000FE0
00FC000FE000FE000FE0007F000FE0007F000FE0007F000FE0007F800FE0007F800FE0007F800F
E0007F800FE0007F800FE0007F800FE0007F800FE0007F000FE0007F000FE0007F000FE000FE00
0FE000FC000FF001F8000FF803F0000F9E07E0000F07FF80000E01FC0000212A7EA926>I<001F
F80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E007F0000007F000000FF
000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F0000007F800000
3F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE0001A1B7E9A1F>I<00003FF8
0000003FF80000003FF800000003F800000003F800000003F800000003F800000003F800000003
F800000003F800000003F800000003F800000003F800000003F800000003F800001FE3F80000FF
FBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003F8007F0003F8007F0003F8007F
0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800
7F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F8007F80007C00FF80003F03BFF
8000FFF3FF80003FC3FF80212A7EA926>I<003FE00001FFF80003F07E0007C01F000F801F801F
800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF000000
FF000000FF0000007F0000007F0000007F0000003F8000E01F8000E00FC001C007E0038003F81F
0000FFFE00001FF0001B1B7E9A20>I<00FF81F003FFE7F80FC1FE7C1F80FC7C1F007C383F007E
107F007F007F007F007F007F007F007F007F007F007F007F003F007E001F007C001F80FC000FC1
F8001FFFE00018FF800038000000380000003C0000003E0000003FFFF8001FFFFF001FFFFF800F
FFFFC007FFFFE01FFFFFF03E0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C0001F0
3C0001E01F0007C00FC01F8003FFFE00007FF0001E287E9A22>103 D<07000FC01FE03FE03FE0
3FE01FE00FC007000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00F
E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B
7DAA14>105 D<FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
E00FE00FE00FE0FFFEFFFEFFFE0F2A7DA914>108 D<FFC07F800FF000FFC1FFE03FFC00FFC383
F0707E000FC603F8C07F000FCC01F9803F000FD801FF003F800FF001FE003F800FF001FE003F80
0FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC
003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800F
E001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F80FFFE1FFFC3
FFF8FFFE1FFFC3FFF8FFFE1FFFC3FFF8351B7D9A3A>I<FFC07F0000FFC1FFC000FFC787E0000F
CE03F0000FD803F0000FD803F8000FF003F8000FF003F8000FE003F8000FE003F8000FE003F800
0FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800FFFE3FFF80FFFE3FFF80FFFE3F
FF80211B7D9A26>I<003FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E07F00
07F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF
0007F87F0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003FE000
1D1B7E9A22>I<FFE1FE0000FFE7FF8000FFFE07E0000FF803F0000FF001F8000FE000FC000FE0
00FE000FE000FF000FE0007F000FE0007F000FE0007F800FE0007F800FE0007F800FE0007F800F
E0007F800FE0007F800FE0007F800FE0007F000FE000FF000FE000FF000FE000FE000FE001FC00
0FF001F8000FF803F0000FFE0FE0000FE7FF80000FE1FC00000FE00000000FE00000000FE00000
000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000000FFFE000000FFFE00
0000FFFE00000021277E9A26>I<001FC0380000FFF0780003F838F80007E00DF8000FC007F800
1FC007F8003F8003F8007F8003F8007F8003F8007F0003F800FF0003F800FF0003F800FF0003F8
00FF0003F800FF0003F800FF0003F800FF0003F8007F0003F8007F0003F8007F8003F8003F8003
F8001F8007F8000FC007F80007E01FF80003F07BF80000FFF3F800003FC3F800000003F8000000
03F800000003F800000003F800000003F800000003F800000003F800000003F800000003F80000
003FFF8000003FFF8000003FFF8021277E9A24>I<FFC1F0FFC7FCFFCE3E0FD87F0FD87F0FF07F
0FF03E0FF01C0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000
0FE0000FE0000FE0000FE0000FE000FFFF00FFFF00FFFF00181B7E9A1C>I<03FE300FFFF01E03
F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF803FFFE01FFFF007FFF800FF
F80003FC0000FC60007CE0003CF0003CF00038F80038FC0070FF01E0F7FFC0C1FF00161B7E9A1B
>I<00700000700000700000700000F00000F00000F00001F00003F00003F00007F0001FFFF0FF
FFF0FFFFF007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007
F00007F00007F03807F03807F03807F03807F03807F03803F03803F87001F86000FFC0001F8015
267FA51B>I<FFE03FF800FFE03FF800FFE03FF8000FE003F8000FE003F8000FE003F8000FE003
F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0
03F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE007F80007
E007F80007E00FF80003F03BFF8001FFF3FF80003FC3FF80211B7D9A26>I<FFFE03FF80FFFE03
FF80FFFE03FF8007F000700007F000700007F800F00003F800E00003FC01E00001FC01C00001FC
01C00000FE03800000FE038000007F070000007F070000007F8F0000003F8E0000003FDE000000
1FDC0000001FDC0000000FF80000000FF80000000FF800000007F000000007F000000003E00000
0003E000000001C000000001C000000003800000000380000038078000007C07000000FE0F0000
00FE0E000000FE1E000000FE3C0000007C780000003FE00000000FC000000021277F9A24>121
D<3FFFFF803FFFFF803F007F003C00FE003801FE007803FC007803F8007007F800700FF000700F
E000001FC000003FC000007F8000007F000000FF000001FE038001FC038003F8038007F803800F
F007800FE007801FE007003FC00F003F801F007F007F00FFFFFF00FFFFFF00191B7E9A1F>I
E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 300
TeXDict begin
%%EndSetup
%%Page: 1 1
bop 354 194 a Fr(Non-Restoring)23 b(In)n(teger)f(Square)i(Ro)r(ot:)328
263 y(A)f(Case)f(Study)i(in)e(Design)g(b)n(y)h(Principled)706
333 y(Optimizati)o(on)322 477 y Fq(John)14 b(O'Leary)571 462
y Fp(1)590 477 y Fq(,)f(Miriam)f(Leeser)874 462 y Fp(1)895
477 y Fq(,)h(Jason)h(Hic)o(k)o(ey)1157 462 y Fp(2)1176 477
y Fq(,)f(Mark)h(Aagaard)1466 462 y Fp(1)612 549 y Fo(1)648
564 y Fn(Sc)o(ho)q(ol)h(Of)d(Electrical)j(Engineering)750 610
y(Cornell)f(Univ)o(ersit)o(y)755 656 y(Ithaca,)f(NY)g(14853)605
686 y Fo(2)641 701 y Fn(Departmen)o(t)h(of)f(Computer)g(Science)750
747 y(Cornell)h(Univ)o(ersit)o(y)755 793 y(Ithaca,)f(NY)g(14853)301
919 y Fm(Abstract.)22 b Fn(Theorem)14 b(pro)o(ving)h(tec)o(hniques)h(are)d
(particularly)k(w)o(ell)e(suited)g(for)301 965 y(reasoning)g(ab)q(out)f
(arithmetic)h(ab)q(o)o(v)o(e)f(the)g(bit)g(lev)o(el)h(and)e(for)h(relating)h
(di\013eren)o(t)301 1010 y(lev)o(els)g(of)e(abstraction.)h(In)g(this)g(pap)q
(er)g(w)o(e)f(sho)o(w)g(ho)o(w)h(a)f(non-restoring)i(in)o(teger)301
1056 y(square)i(ro)q(ot)f(algorithm)i(can)e(b)q(e)g(transformed)h(to)f(a)g(v)
o(ery)g(e\016cien)o(t)h(hardw)o(are)301 1102 y(implemen)o(tation.)f(The)d
(top)h(lev)o(el)g(is)g(a)f(Standard)i(ML)e(function)i(that)e(op)q(erates)301
1147 y(on)i(un)o(b)q(ounded)j(in)o(tegers.)e(The)f(b)q(ottom)h(lev)o(el)h(is)
f(a)f(structural)i(description)h(of)301 1193 y(the)g(hardw)o(are)g
(consisting)i(of)e(an)g(adder/subtracter,)h(simple)h(com)o(binational)301
1239 y(logic)12 b(and)g(some)e(registers.)i(Lo)q(oking)g(at)f(the)g(hardw)o
(are,)g(it)g(is)h(not)f(at)f(all)i(ob)o(vious)301 1284 y(what)f(function)h
(the)f(circuit)h(implemen)o(ts.)g(A)o(t)f(the)g(top)g(lev)o(el,)g(w)o(e)g
(pro)o(v)o(e)g(that)g(the)301 1330 y(algorithm)k(correctly)f(implemen)o(ts)h
(the)e(square)h(ro)q(ot)f(function.)h(W)m(e)g(then)f(sho)o(w)301
1376 y(a)e(series)i(of)f(optimizing)i(transformations)g(that)e(re\014ne)g
(the)g(top)g(lev)o(el)h(algorithm)301 1421 y(in)o(to)g(the)g(hardw)o(are)g
(implemen)o(tation.)i(Eac)o(h)e(transformation)h(can)f(b)q(e)g(v)o
(eri\014ed,)301 1467 y(and)f(in)g(places)g(the)g(transformations)h(are)e
(motiv)n(ated)i(b)o(y)e(kno)o(wledge)i(ab)q(out)f(the)301 1513
y(op)q(erands)17 b(that)g(w)o(e)f(can)g(guaran)o(tee)i(through)f(v)o
(eri\014cation.)h(By)f(decomp)q(osing)301 1558 y(the)e(v)o(eri\014cation)i
(e\013ort)e(in)o(to)g(these)g(transformations,)h(w)o(e)f(can)g(sho)o(w)f
(that)h(the)301 1604 y(hardw)o(are)i(design)i(implemen)o(ts)f(a)f(square)h
(ro)q(ot.)f(W)m(e)g(ha)o(v)o(e)g(implemen)o(ted)i(the)301 1650
y(algorithm)f(in)f(hardw)o(are)f(b)q(oth)h(as)f(an)h(Altera)f(programmable)i
(device)g(and)e(in)301 1695 y(full-custom)e(CMOS.)183 1836
y Fl(1)56 b(In)n(tro)r(duction)183 1934 y Fq(In)14 b(this)h(pap)q(er)h(w)o(e)
e(describ)q(e)j(the)e(design,)g(implem)o(en)o(tation)d(and)i(v)o
(eri\014cation)h(of)f(a)g(sub-)183 1983 y(tractiv)o(e,)d(non-restoring)g(in)o
(teger)g(square)h(ro)q(ot)f(algorithm.)d(The)j(top)g(lev)o(el)g(description)h
(is)183 2033 y(a)g(Standard)g(ML)h(function)f(that)g(implemen)o(ts)e(the)j
(algorithm)d(for)i(un)o(b)q(ounded)h(in)o(tegers.)183 2083
y(The)k(b)q(ottom)e(lev)o(el)h(is)h(a)f(highly)g(optimized)f(structural)j
(description)f(of)f(the)h(hardw)o(are)183 2133 y(implem)o(en)o(tation.)10
b(Due)j(to)g(the)g(optimizations)e(that)i(ha)o(v)o(e)g(b)q(een)h(applied,)e
(it)g(is)h(v)o(ery)g(dif-)183 2183 y(\014cult)k(to)f(directly)h(relate)g(the)
g(circuit)g(to)g(the)g(algorithmic)d(description)j(and)g(to)f(pro)o(v)o(e)183
2232 y(that)h(the)h(hardw)o(are)f(implemen)o(ts)e(the)j(function)f(correctly)
m(.)g(W)m(e)g(sho)o(w)g(ho)o(w)g(the)h(pro)q(of)183 2282 y(can)13
b(b)q(e)h(done)g(b)o(y)f(a)g(series)i(of)e(transformations)f(from)f(the)j
(SML)g(co)q(de)g(to)f(the)h(optimized)183 2332 y(structural)h(description.)
245 2382 y(A)o(t)g(the)h(top)e(lev)o(el,)h(w)o(e)g(ha)o(v)o(e)g(used)h(the)f
(Nuprl)g(pro)q(of)g(dev)o(elopmen)o(t)f(system)e([Lee92])183
2432 y(to)g(v)o(erify)h(that)f(the)i(SML)e(function)h(correctly)h(pro)q
(duces)g(the)f(square)h(ro)q(ot)f(of)f(the)h(input.)p eop
%%Page: 2 2
bop 340 194 a Fq(W)m(e)10 b(then)i(use)f(Nuprl)f(to)h(v)o(erify)f(that)g
(transformations)f(to)h(the)h(implemen)o(tation)c(preserv)o(e)340
244 y(the)15 b(correctness)i(of)c(the)i(initial)c(algorithm.)403
301 y(In)o(termediate)g(lev)o(els)h(use)g(Hardw)o(are)h(ML)f([OLLA93)o(],)f
(a)h(hardw)o(are)g(description)g(lan-)340 351 y(guage)19 b(based)h(on)e
(Standard)h(ML.)g(Starting)f(from)g(a)g(straigh)o(tforw)o(ard)h(translation)f
(of)340 401 y(the)f(SML)f(function)g(in)o(to)g(HML,)g(a)g(series)h(of)f
(transformations)f(are)h(applied)g(to)g(obtain)340 450 y(the)e(hardw)o(are)g
(implem)o(en)o(tation.)c(Some)i(of)g(these)j(transformations)c(are)j
(expressly)g(con-)340 500 y(cerned)k(with)d(optimization)e(and)i(rely)h(on)g
(kno)o(wledge)f(of)g(the)h(algorithm;)d(these)k(trans-)340
550 y(formations)12 b(can)i(b)q(e)h(justi\014ed)f(b)o(y)g(pro)o(ving)f(prop)q
(erties)i(of)e(the)i(top-lev)o(el)e(description.)403 608 y(The)f(hardw)o(are)
h(implem)o(en)o(tation)c(is)j(highly)f(optimized:)f(the)j(core)f(of)g(the)g
(design)h(is)f(a)340 657 y(single)h(adder/subtracter.)h(The)f(rest)h(of)f
(the)g(datapath)f(is)h(registers,)h(shift)e(registers)i(and)340
707 y(com)o(binational)d(logic.)i(The)i(square)g(ro)q(ot)f(of)g(a)g(2)p
Fk(n)g Fq(bit)g(wide)g(n)o(um)o(b)q(er)g(requires)h Fk(n)f
Fq(cycles)340 757 y(through)g(the)f(datapath.)g(W)m(e)f(ha)o(v)o(e)h(t)o(w)o
(o)g(implemen)o(tatio)o(ns)e(of)h(square)i(ro)q(ot)f(c)o(hips)h(based)340
807 y(on)f(this)g(algorithm.)c(The)k(\014rst)h(is)e(done)h(as)g(a)f
(full-custom)f(CMOS)i(implemen)o(tatio)o(n;)d(the)340 857 y(second)20
b(uses)g(Altera)g(EPLD)f(tec)o(hnology)m(.)e(Both)i(are)h(based)f(on)g(a)f
(design)h(previously)340 906 y(published)13 b(b)o(y)f(Bann)o(ur)g(and)g(V)m
(arma)f([BV85].)g(Implemen)o(ting)e(and)j(v)o(erifying)f(the)i(design)340
956 y(from)8 b(the)i(pap)q(er)h(required)f(clearing)g(up)f(a)h(n)o(um)o(b)q
(er)f(of)g(errors)i(in)e(the)h(pap)q(er)g(and)g(clarifying)340
1006 y(man)o(y)i(details.)403 1064 y(This)j(is)g(a)g(go)q(o)q(d)f(case)i
(study)g(for)f(theorem)g(pro)o(ving)f(tec)o(hniques.)i(A)o(t)f(the)h(top)f
(lev)o(el,)340 1113 y(w)o(e)i(reason)f(ab)q(out)g(arithmetic)f(op)q(erations)
h(on)f(un)o(b)q(ounded)i(in)o(tegers,)f(a)g(task)g(theorem)340
1163 y(pro)o(v)o(ers)k(are)g(esp)q(ecially)g(w)o(ell)e(suited)i(for.)f
(Relating)f(this)h(to)g(lo)o(w)o(er)g(lev)o(els)h(is)f(easy)g(to)340
1213 y(do)13 b(using)g(theorem)f(pro)o(ving)g(based)i(tec)o(hniques.)f(Man)o
(y)g(of)f(the)i(optimizations)c(used)k(are)340 1263 y(applicable)d(only)f(if)
h(v)o(ery)g(sp)q(eci\014c)i(conditions)e(are)h(satis\014ed)g(b)o(y)f(the)h
(op)q(erands.)f(V)m(erifying)340 1313 y(that)j(the)h(conditions)e(hold)h
(allo)o(ws)e(us)j(to)e(safely)h(apply)f(optimizations.)403
1370 y(Automated)e(tec)o(hniques)i(suc)o(h)g(as)g(those)g(based)f(on)g(BDDs)h
(and)f(mo)q(del)e(c)o(hec)o(king)j(are)340 1420 y(not)18 b(w)o(ell-suited)g
(for)g(v)o(erifying)f(this)h(and)f(similar)f(arithmetic)h(circuits.)h(It)g
(is)g(di\016cult)340 1470 y(to)g(come)f(up)g(with)g(a)h(Bo)q(olean)f
(statemen)o(t)h(for)f(the)h(correctness)j(of)c(the)h(outputs)g(as)g(a)340
1520 y(function)g(of)f(the)i(inputs)f(and)g(to)g(argue)g(that)g(this)g(sp)q
(eci\014cation)h(correctly)g(describ)q(es)340 1569 y(the)c(in)o(tended)f(b)q
(eha)o(vior)g(of)f(the)i(design.)e(Similarly)l(,)e(sp)q(eci\014cations)k
(required)f(for)g(mo)q(del)340 1619 y(c)o(hec)o(k)o(ers)i(are)e(di\016cult)g
(to)f(de\014ne)i(for)f(arithmetic)f(circuits.)403 1677 y(There)i(ha)o(v)o(e)e
(b)q(een)i(sev)o(eral)g(v)o(eri\014cations)f(of)f(hardw)o(are)i(designs)f
(whic)o(h)g(lift)f(the)h(rea-)340 1727 y(soning)i(ab)q(out)f(hardw)o(are)h
(to)g(the)g(lev)o(el)f(of)h(in)o(tegers,)g(including)e(the)j(Sob)q(el)e
(Image)f(pro-)340 1776 y(cessing)i(c)o(hip)e([NS88)o(],)g(and)g(the)h
(factorial)e(function)i([CGM86)n(].)f(Our)h(w)o(ork)f(di\013ers)h(from)340
1826 y(these)k(and)e(similar)d(e\013orts)k(in)f(that)g(w)o(e)g(justify)g(the)
g(optimizations)e(done)i(in)g(order)g(to)340 1876 y(realize)d(the)f(square)h
(ro)q(ot)f(design.)f(The)h(DDD)f(system)h([BJP93])f(is)h(based)g(on)g(the)g
(idea)g(of)340 1926 y(design)i(b)o(y)e(v)o(eri\014ed)i(transformation,)c(and)
j(w)o(as)g(used)h(to)e(deriv)o(e)i(an)f(implem)o(en)o(tation)d(of)340
1976 y(the)j(FM9001)d(micropro)q(cessor.)i(High)f(lev)o(el)g(transformations)
f(in)h(DDD)f(are)i(not)g(v)o(eri\014ed)340 2025 y(b)o(y)h(explicit)f(use)i
(of)e(theorem)h(pro)o(ving)f(tec)o(hniques.)403 2083 y(The)g(most)f(similar)f
(researc)o(h)k(is)e(V)m(erk)o(est's)h(pro)q(of)e(of)h(a)g(non-restoring)g
(division)f(algo-)340 2133 y(rithm)i([V)o(CH94)o(].)h(This)g(pro)q(of)g(w)o
(as)g(also)f(done)i(b)o(y)f(transforming)e(a)i(design)h(description)340
2183 y(to)e(an)f(implem)o(en)o(tation.)d(The)k(top)f(lev)o(el)g(of)g(the)h
(division)e(pro)q(of)h(in)o(v)o(olv)o(es)f(consideration)340
2232 y(of)k(sev)o(eral)h(cases,)g(while)f(our)g(top)g(lev)o(el)g(pro)q(of)g
(is)g(done)h(with)f(a)g(single)g(lo)q(op)f(in)o(v)n(arian)o(t.)340
2282 y(The)g(t)o(w)o(o)e(implemen)o(tatio)o(ns)f(v)n(ary)h(as)h(w)o(ell:)f
(the)h(division)f(algorithm)e(w)o(as)j(implem)o(en)o(ted)340
2332 y(on)h(an)g(ALU,)g(and)g(the)g(square)h(ro)q(ot)f(on)g(custom)f(hardw)o
(are.)h(The)h(algorithms)d(and)h(im-)340 2382 y(plemen)o(tations)h(are)i
(su\016cien)o(tly)f(similar)e(that)i(it)g(w)o(ould)g(b)q(e)g(in)o(teresting)h
(to)f(dev)o(elop)h(a)340 2432 y(single)d(v)o(eri\014ed)g(implem)o(en)o
(tation)d(that)i(p)q(erforms)h(b)q(oth)f(divide)g(and)h(square)g(ro)q(ot)g
(based)p eop
%%Page: 3 3
bop 183 194 a Fq(on)13 b(the)i(researc)o(h)h(in)d(these)i(t)o(w)o(o)f(pap)q
(ers.)245 245 y(The)g(remainder)e(of)h(this)g(pap)q(er)h(is)f(organized)h(as)
f(follo)o(ws.)e(In)i(section)h(2)f(w)o(e)h(describ)q(e)183
295 y(the)d(top-lev)o(el)e(non-restoring)i(square)g(ro)q(ot)f(algorithm)e
(and)i(its)g(v)o(eri\014cation)g(in)g(the)h(Nuprl)183 344 y(pro)q(of)17
b(dev)o(elopmen)o(t)f(system.)h(W)m(e)g(then)h(transform)f(this)g(algorithm)e
(do)o(wn)i(to)h(a)f(lev)o(el)183 394 y(suitable)c(for)h(mo)q(delling)d(with)i
(a)g(hardw)o(are)h(description)h(language.)d(Section)i(3)g(presen)o(ts)183
444 y(a)g(series)i(of)f(\014v)o(e)g(optimizing)d(transformations)h(that)i
(re\014ne)h(the)f(register)h(transfer)g(lev)o(el)183 494 y(description)f(of)e
(the)i(algorithm)d(to)i(the)h(\014nal)f(hardw)o(are)h(implemen)o(tatio)o(n.)c
(In)k(section)g(4)183 544 y(w)o(e)f(summarize)e(the)i(lessons)h(learned)f
(and)g(our)g(plans)g(for)f(future)i(researc)o(h.)183 684 y
Fl(2)56 b(The)18 b(Non-Restoring)f(Square)i(Ro)r(ot)e(Algorithm)183
790 y Fq(An)c(in)o(teger)g(square)h(ro)q(ot)f(calculates)h
Fk(y)f Fq(=)870 760 y Fj(p)p 905 760 24 2 v 30 x Fk(x)f Fq(where)j
Fk(x)d Fq(is)h(the)h(radicand,)f Fk(y)h Fq(is)f(the)h(ro)q(ot,)183
840 y(and)h(b)q(oth)g Fk(x)g Fq(and)h Fk(y)h Fq(are)f(in)o(tegers.)f(W)m(e)g
(de\014ne)i(the)f Fi(pr)n(e)n(cise)f Fq(square)h(ro)q(ot)f(\()p
Fk(p)p Fq(\))h(to)f(b)q(e)h(the)183 890 y(real)d(v)n(alued)f(square)i(ro)q
(ot)f(and)g(the)g Fi(c)n(orr)n(e)n(ct)f Fq(in)o(teger)i(square)f(ro)q(ot)g
(to)g(b)q(e)h(the)g(\015o)q(or)f(of)f(the)183 939 y(precise)i(ro)q(ot.)f(W)m
(e)f(can)h(write)g(the)h(sp)q(eci\014cation)g(for)e(the)i(in)o(teger)f
(square)h(ro)q(ot)f(as)g(sho)o(wn)183 989 y(in)g(De\014nition)f(1.)183
1087 y Fh(De\014niti)o(on)h(1)20 b Fi(Corr)n(e)n(ct)14 b(inte)n(ger)g(squar)n
(e)h(r)n(o)n(ot)245 1138 y Fk(y)i Fq(is)c(the)i Fi(c)n(orr)n(e)n(ct)e
Fq(in)o(teger)h(square)h(ro)q(ot)e(of)i Fk(x)20 b Fq(^)-27
b(=)15 b Fk(y)1041 1123 y Fp(2)1072 1138 y Fj(\024)d Fk(x)g(<)f
Fq(\()p Fk(y)h Fq(+)d(1\))1321 1123 y Fp(2)245 1234 y Fq(W)m(e)14
b(ha)o(v)o(e)h(implem)o(en)o(ted)e(a)h(subtractiv)o(e,)h(non-restoring)g(in)o
(teger)g(square)g(ro)q(ot)g(algo-)183 1284 y(rithm)c([BV85)o(].)i(F)m(or)f
(radicands)i(in)f(the)g(range)h Fk(x)d Fq(=)h Fj(f)p Fq(0)p
Fk(::)p Fq(2)1104 1269 y Fp(2)p Fg(n)1149 1284 y Fj(\000)d
Fq(1)p Fj(g)p Fq(,)j(subtractiv)o(e)i(metho)q(ds)183 1333 y(b)q(egin)g(with)f
(an)h(initial)e(guess)j(of)e Fk(y)g Fq(=)f(2)821 1318 y Fp(\()p
Fg(n)p Ff(\000)p Fp(1\))926 1333 y Fq(and)h(then)i(iterate)g(from)d
Fk(i)g Fq(=)f(\()p Fk(n)f Fj(\000)f Fq(1\))e Fk(:)g(:)g(:)e
Fq(0.)183 1383 y(In)11 b(eac)o(h)g(iteration)g(w)o(e)g(square)h(the)g
(partial)e(ro)q(ot)h(\()p Fk(y)q Fq(\),)h(subtract)g(the)g(squared)f(partial)
g(ro)q(ot)183 1433 y(from)k(the)j(radicand)f(and)g(revise)h(the)g(partial)e
(ro)q(ot)h(based)h(on)f(the)h(sign)f(of)f(the)i(result.)183
1483 y(There)e(are)g(t)o(w)o(o)f(ma)r(jor)e(classes)k(of)e(algorithms:)d
(restoring)k(and)f(non-restoring)e([Flo63)o(].)183 1533 y(In)f(restoring)i
(algorithms,)c(w)o(e)j(b)q(egin)g(with)f(a)h(partial)e(ro)q(ot)i(for)g
Fk(y)g Fq(=)f(0)g(and)h(at)f(the)i(end)f(of)183 1582 y(eac)o(h)f(iteration,)f
Fk(y)j Fq(is)e(nev)o(er)h(greater)g(than)f(the)h(precise)h(ro)q(ot)e(\()p
Fk(p)p Fq(\).)f(Within)g(eac)o(h)i(iteration)183 1632 y(\()p
Fk(i)p Fq(\),)g(w)o(e)g(set)h(the)g Fk(i)463 1617 y Fg(th)511
1632 y Fq(bit)e(of)h Fk(y)q Fq(,)h(and)f(test)h(if)e Fk(x)c
Fj(\000)g Fk(y)958 1617 y Fp(2)990 1632 y Fq(is)13 b(negativ)o(e;)g(if)f(it)h
(is,)g(then)g(setting)h(the)183 1682 y Fk(i)197 1667 y Fg(th)244
1682 y Fq(bit)f(made)f Fk(y)j Fq(to)q(o)e(big,)f(so)h(w)o(e)h(reset)h(the)f
Fk(i)900 1667 y Fg(th)947 1682 y Fq(bit)f(and)g(pro)q(ceed)i(to)e(the)h(next)
f(iteration.)245 1733 y(Non-restoring)18 b(algorithms)d(mo)q(dify)h(eac)o(h)i
(bit)f(p)q(osition)g(once)h(rather)h(than)f(t)o(wice.)183 1783
y(Instead)10 b(of)f(setting)h(the)h(the)f Fk(i)649 1768 y Fp(th)692
1783 y Fq(bit)g(of)f Fk(y)q Fq(,)h(testing)g(if)f Fk(x)q Fj(\000)q
Fk(y)1084 1768 y Fp(2)1112 1783 y Fq(is)h(p)q(ositiv)o(e,)f(and)g(then)i(p)q
(ossibly)183 1833 y(resetting)j(the)g(bit;)f(the)h(non-restoring)g
(algorithms)d(add)i(or)g(subtract)i(a)e(1)g(in)g(the)h Fk(i)1525
1818 y Fg(th)1573 1833 y Fq(bit)183 1883 y(of)e Fk(y)j Fq(based)e(on)g(the)h
(sign)e(of)h Fk(x)7 b Fj(\000)g Fk(y)728 1867 y Fp(2)761 1883
y Fq(in)12 b(the)i(previous)f(iteration.)f(F)m(or)h(binary)f(arithmetic,)183
1932 y(the)20 b(restoring)g(algorithm)e(is)h(e\016cien)o(t)h(to)g(implemen)o
(t.)d(Ho)o(w)o(ev)o(er,)i(most)g(square)i(ro)q(ot)183 1982
y(hardw)o(are)10 b(implemen)o(tations)e(use)j(a)f(higher)g(radix,)g
(non-restoring)h(implem)o(en)o(tation.)c(F)m(or)183 2032 y(higher)15
b(radix)h(implemen)o(tati)o(ons,)d(non-restoring)j(algorithms)d(result)k(in)e
(more)g(e\016cien)o(t)183 2082 y(hardw)o(are)f(implemen)o(tatio)o(ns.)245
2133 y(The)j(results)h(of)e(the)h(non-restoring)g(algorithms)d(do)i(not)h
(satisfy)f(our)h(de\014nition)f(of)183 2183 y Fi(c)n(orr)n(e)n(ct)p
Fq(,)c(while)h(restoring)i(algorithms)c(do)j(satisfy)g(our)g(de\014nition.)f
(The)h(resulting)g(v)n(alue)183 2232 y(of)g Fk(y)j Fq(in)d(the)i
(non-restoring)f(algorithms)d(ma)o(y)h(ha)o(v)o(e)i(an)g(error)h(in)e(the)h
(last)g(bit)g(p)q(osition.)183 2282 y(F)m(or)c(the)i(algorithm)d(used)j
(here,)f(w)o(e)h(can)f(sho)o(w)g(that)g(the)h(\014nal)e(v)n(alue)h(of)f
Fk(y)j Fq(will)d(alw)o(a)o(ys)g(b)q(e)183 2332 y(either)16
b(the)f(precise)i(ro)q(ot)e(\(for)g(radicands)g(whic)o(h)g(are)h(p)q(erfect)h
(squares\))f(or)f(will)f(b)q(e)i(o)q(dd)183 2382 y(and)f(b)q(e)h(within)e
(one)h(of)g(the)h(correct)h(ro)q(ot.)e(The)g(error)h(in)f(non-restoring)h
(algorithms)d(is)183 2432 y(easily)g(b)q(e)i(corrected)h(in)d(a)h(clean)o(up)
g(phase)g(follo)o(wing)e(the)i(algorithm.)p eop
%%Page: 4 4
bop 403 194 a Fq(Belo)o(w)16 b(w)o(e)g(sho)o(w)g(ho)o(w)g(a)g(binary)m(,)f
(non-restoring)h(algorithm)d(runs)k(on)f(some)g(v)n(alues)340
244 y(for)e Fe(n)g Fq(=3.)f(Note)h(that)g(the)h(result)f(is)g(either)h(exact)
f(or)g(o)q(dd.)340 329 y Fk(x)e Fq(=)f(18)461 335 y Fp(10)508
329 y Fq(=)g(10100)656 335 y Fp(2)764 329 y Fq(iterate)j(1)90
b Fe(y)22 b(=)f(100)90 b Fk(x)9 b Fj(\000)g Fk(y)1344 314 y
Fp(2)1375 329 y Fq(=)j(+)764 379 y(iterate)i(2)90 b Fe(y)22
b(=)f(110)90 b Fk(x)9 b Fj(\000)g Fk(y)1344 364 y Fp(2)1375
379 y Fq(=)j Fj(\000)764 429 y Fq(iterate)i(3)90 b Fe(y)22
b(=)f(101)340 529 y Fk(x)12 b Fq(=)f(15)461 535 y Fp(10)508
529 y Fq(=)g(01111)656 535 y Fp(2)764 529 y Fq(iterate)j(1)90
b Fe(y)22 b(=)f(100)90 b Fk(x)9 b Fj(\000)g Fk(y)1344 514 y
Fp(2)1375 529 y Fq(=)j Fj(\000)764 578 y Fq(iterate)i(2)90
b Fe(y)22 b(=)f(010)90 b Fk(x)9 b Fj(\000)g Fk(y)1344 563 y
Fp(2)1375 578 y Fq(=)j(+)764 628 y(iterate)i(3)90 b Fe(y)22
b(=)f(011)340 728 y Fk(x)12 b Fq(=)f(16)461 734 y Fp(10)508
728 y Fq(=)g(10000)656 734 y Fp(2)764 728 y Fq(iterate)j(1)90
b Fe(y)22 b(=)f(100)90 b Fk(x)9 b Fj(\000)g Fk(y)1344 713 y
Fp(2)1375 728 y Fq(=)j(0)403 814 y(In)18 b(our)g(description)g(of)g(the)g
(non-restoring)h(square)f(ro)q(ot)g(algorithm,)d(w)o(e)k(de\014ne)g(a)340
864 y(datat)o(yp)q(e)e Fe(state)e Fq(that)h(con)o(tains)g(the)h(state)f(v)n
(ariables.)f(The)i(algorithm)c(w)o(orks)k(b)o(y)e(ini-)340
913 y(tializing)k(the)h(state)h(using)e(the)i(function)e Fe(init)p
Fq(,)g(then)i(up)q(dating)e(the)h(state)h(on)f(eac)o(h)340
963 y(iteration)g(of)f(the)i(lo)q(op)e(b)o(y)h(calling)e(the)j(function)e
Fe(update)p Fq(.)f(W)m(e)i(re\014ne)h(our)f(program)340 1013
y(through)e(sev)o(eral)f(sets)i(of)d(transformations.)g(A)o(t)h(eac)o(h)h
(lev)o(el)f(the)g(de\014nition)g(of)g Fe(state)p Fq(,)340 1063
y Fe(init)c Fq(and)g Fe(update)f Fq(ma)o(y)f(c)o(hange.)i(The)h(SML)f(co)q
(de)h(that)f(calls)g(the)h(square)g(ro)q(ot)f(at)g(eac)o(h)340
1113 y(lev)o(el)h(is:)380 1195 y Fd(fun)k(sqrt)g(n)h(radicand)e(=)39
b(iterate)17 b(update)g(\(n-1\))h(\(init)f(n)j(radicand)o(\))403
1280 y Fq(The)13 b Fe(iterate)e Fq(function)h(p)q(erforms)h(iteration)f(b)o
(y)g(applying)g(the)h(function)f(argumen)o(t)340 1330 y(to)h(the)h(state)g
(argumen)o(t,)e(decremen)o(ting)h(the)h(coun)o(t,)f(and)g(rep)q(eating)h(un)o
(til)e(the)i(coun)o(t)f(is)340 1380 y(zero.)380 1462 y Fd(fun)18
b(iterate)f(f)i(n)g(state)f(=)458 1508 y(if)h(n)g(=)g(0)h(then)e(state)f
(else)h(iterate)f(f)j(\(n)e(-)i(1\))e(\(f)h(state\))403 1593
y Fq(The)c(top)f(lev)o(el)h(\()p Fj(L)704 1599 y Fp(0)722 1593
y Fq(\))g(is)f(a)h(straigh)o(tforw)o(ard)f(implem)o(en)o(tation)e(of)i(the)h
(non-restoring)340 1643 y(square)23 b(ro)q(ot)f(algorithm.)d(W)m(e)j
(represen)o(t)i(the)e(state)h(of)f(an)f(iteration)h(b)o(y)g(the)g(triple)340
1693 y Fe(State)p Fj(f)p Fe(x,y,i)p Fj(g)16 b Fq(where)j Fe(x)f
Fq(is)g(the)g(radicand,)g Fe(y)g Fq(is)f(the)i(partial)e(ro)q(ot,)h(and)g
Fe(i)f Fq(is)h(the)h(it-)340 1748 y(eration)13 b(n)o(um)o(b)q(er.)f(Our)h
(initial)d(guess)k(is)f Fe(y)e Fq(=)h(2)1091 1733 y Fp(\()p
Fe(n)p Ff(\000)p Fe(1)p Fp(\))1188 1748 y Fq(.)g(In)h Fe(update)p
Fq(,)e Fe(x)h Fq(nev)o(er)i(c)o(hanges)f(and)340 1798 y Fe(i)e
Fq(is)h(decremen)o(ted)g(from)e Fe(n-2)g Fq(to)i Fe(1)p Fq(,)e(since)i(the)g
(initial)e(v)n(alues)h(tak)o(e)g(care)h(of)f(the)h(\()p Fe(n)d
Fj(\000)h Fe(1)p Fq(\))1736 1783 y Fe(st)340 1848 y Fq(iteration.)j(A)o(t)h
Fj(L)609 1854 y Fp(0)628 1848 y Fq(,)f Fe(init)g Fq(and)h Fe(update)e
Fq(are:)380 1929 y Fd(fun)18 b(init)g(\(n,radican)o(d\))e(=)419
1975 y(State{x)h(=)i(radicand,)36 b(y)19 b(=)g(2)g(**)g(\(n-1\),)37
b(i)19 b(=)h(n-2)e(})380 2066 y(fun)g(update)f(\(State{x,)g(y,)h(i}\))h(=)478
2112 y(let)517 2158 y(val)f(diffx)38 b(=)19 b(x)g(-)g(\(y**2\))517
2203 y(val)f(y')98 b(=)19 b(if)117 b(diffx)17 b(=)j(0)58 b(then)18
b(y)772 2249 y(else)g(if)h(diffx)e(>)j(0)58 b(then)18 b(\(y)h(+)g(\(2**i\)\))
772 2295 y(else)f(\(*)h(diffx)e(<)j(0)f(*\))97 b(\(y)19 b(-)g(\(2**i\)\))478
2340 y(in)497 2386 y(State{x)e(=)i(x,)39 b(y)19 b(=)g(y',)38
b(i)20 b(=)f(i-1)f(})478 2432 y(end)p eop
%%Page: 5 5
bop 245 194 a Fq(In)17 b(the)g(next)h(section)f(w)o(e)g(discuss)h(the)g(pro)q
(of)e(that)h(this)g(algorithm)e(calculates)i(the)183 244 y(square)i(ro)q(ot.)
f(Then)h(w)o(e)g(sho)o(w)f(ho)o(w)g(it)g(can)h(b)q(e)g(re\014ned)h(to)e(an)h
(implem)o(en)o(tation)c(that)183 293 y(requires)h(signi\014can)o(tly)f(less)h
(hardw)o(are.)f(W)m(e)g(sho)o(w)g(ho)o(w)g(to)g(pro)o(v)o(e)h(that)f(the)h
(re\014ned)g(al-)183 343 y(gorithm)c(also)i(calculates)h(the)g(square)g(ro)q
(ot;)f(in)g(the)i(absence)g(of)e(suc)o(h)h(a)f(pro)q(of)g(it)g(is)h(not)183
393 y(at)e(all)g(ob)o(vious)g(that)h(the)h(algorithms)c(ha)o(v)o(e)j(iden)o
(tical)f(results.)183 519 y Fh(2.1)47 b(V)l(eri\014cation)13
b(of)j(Lev)o(el)e(Zero)i(Algorithm)183 603 y Fq(All)d(of)h(the)i(theorems)e
(in)g(this)h(section)h(w)o(ere)f(v)o(eri\014ed)g(using)g(the)g(Nuprl)f(pro)q
(of)h(dev)o(elop-)183 653 y(men)o(t)c(system.)g(Theorem)h(1)g(is)g(the)h(o)o
(v)o(erall)e(correctness)k(theorem)d(for)g(the)g(non-restoring)183
703 y(square)i(ro)q(ot)g(co)q(de)h(sho)o(wn)f(ab)q(o)o(v)o(e.)f(It)h(states)h
(that)f(after)g(iterating)f(through)h Fe(update)f Fq(for)183
752 y Fe(n-1)i Fq(times,)f(the)i(v)n(alue)f(of)h Fe(y)f Fq(is)h(within)f(one)
h(of)f(the)h Fi(c)n(orr)n(e)n(ct)f Fq(ro)q(ot)g(of)g(the)i(radicand.)e(W)m(e)
183 802 y(ha)o(v)o(e)f(pro)o(v)o(ed)h(this)f(theorem)h(b)o(y)f(creating)h(an)
f(in)o(v)n(arian)o(t)f(prop)q(ert)o(y)j(and)e(p)q(erforming)f(in-)183
852 y(duction)g(on)g(the)h(n)o(um)o(b)q(er)e(of)h(iterations)g(of)f
Fe(update)p Fq(.)g(Remem)o(b)q(er)f(that)j Fe(n)e Fq(is)h(the)h(n)o(um)o(b)q
(er)183 902 y(of)f(bits)h(in)f(the)i(result.)183 994 y Fh(Theorem)f(1)21
b Fi(Corr)n(e)n(ctness)14 b(the)n(or)n(em)g(for)h(non-r)n(estoring)f(squar)n
(e)h(r)n(o)n(ot)g(algorithm)183 1078 y Fj(`)d(8)p Fk(n)d(:)g
Fj(8)p Fk(r)q(adicand)19 b Fq(:)i Fj(f)p Fq(0)p Fk(::)p Fq(2)625
1063 y Fp(2)p Fg(n)671 1078 y Fj(\000)10 b Fq(1)p Fj(g)f Fk(:)260
1128 y(l)q(et)337 1178 y Fe(State)o Fj(f)p Fk(x;)e(y)q(;)g(i)p
Fj(g)j Fq(=)i Fe(iterate)21 b(update)13 b Fq(\()p Fk(n)d Fj(\000)f
Fq(1\))15 b(\()p Fe(init)f Fk(n)h(r)q(adicand)p Fq(\))260 1228
y Fk(in)337 1278 y Fq(\()p Fk(y)c Fj(\000)e Fq(1\))462 1263
y Fp(2)492 1278 y Fj(\024)27 b Fk(r)q(adicand)11 b(<)h Fq(\()p
Fk(y)f Fq(+)e(1\))896 1263 y Fp(2)260 1327 y Fk(end)245 1463
y Fq(The)j(in)o(v)n(arian)o(t)f(states)i(that)f(in)f(eac)o(h)h(iteration)g
Fe(y)g Fq(increases)h(in)f(precision)g(b)o(y)g Fe(2)1510 1448
y(i)1533 1463 y Fq(,)g(and)183 1513 y(the)i(lo)o(w)o(er)f(bits)g(in)g
Fe(y)g Fq(are)h(alw)o(a)o(ys)f(zero.)g(The)h(formal)d(statemen)o(t)j(\()p
Fj(I)s Fq(\))f(of)g(the)h(in)o(v)n(arian)o(t)e(is)183 1563
y(sho)o(wn)i(in)f(De\014nition)g(2.)183 1655 y Fh(De\014niti)o(on)g(2)20
b Fi(L)n(o)n(op)15 b(invariant)183 1739 y Fj(I)s Fq(\()p Fe(State)n
Fj(f)p Fk(x;)7 b(y)q(;)g(i)p Fj(g)p Fq(\))20 b(^)-26 b(=)260
1789 y(\(\()p Fk(y)11 b Fj(\000)f Fq(2)386 1774 y Fg(i)399
1789 y Fq(\))415 1774 y Fp(2)445 1789 y Fj(\024)27 b Fk(r)q(adicand)11
b(<)h Fq(\()p Fk(y)f Fq(+)e(2)833 1774 y Fg(i)847 1789 y Fq(\))863
1774 y Fp(2)882 1789 y Fq(\))15 b(&)g(\()p Fk(y)i Fq(rem)d(2)1118
1774 y Fg(i)1143 1789 y Fq(=)e(0\))i(&)i(\()p Fk(x)11 b Fq(=)h
Fk(r)q(adicand)p Fq(\))245 1915 y(In)e(Theorems)g(2)g(and)g(3)g(w)o(e)g(sho)o
(w)g(that)g Fe(init)f Fq(and)h Fe(update)f Fq(are)i(correct,)g(in)f(that)g
(for)g(all)183 1965 y(legal)h(v)n(alues)i(of)f Fe(n)h Fq(and)f
Fe(radicand)p Fq(,)f Fe(init)h Fq(returns)i(a)f(legal)f(state)h(and)g(for)f
(all)g(legal)g(input)183 2015 y(states,)j Fe(update)f Fq(will)f(return)j(a)e
(legal)g(state)i(and)e(mak)o(es)g(progress)i(to)o(w)o(ard)e(termination)183
2065 y(b)o(y)f(decremen)o(ting)h Fe(i)g Fq(b)o(y)g(1.)f(A)h(legal)e(state)j
(is)f(one)g(for)g(whic)o(h)f(the)i(lo)q(op)e(in)o(v)n(arian)o(t)f(holds.)183
2157 y Fh(Theorem)i(2)21 b Fi(Corr)n(e)n(ctness)14 b(of)h(initialization)183
2241 y Fj(`)d(8)p Fk(n)d(:)g Fj(8)p Fk(r)q(adicand)19 b Fq(:)i
Fj(f)p Fq(0)p Fk(::)p Fq(2)625 2226 y Fp(2)p Fg(n)671 2241
y Fj(\000)10 b Fq(1)p Fj(g)p Fk(:)p Fj(8)p Fk(x;)d(y)q(;)g(i)h(:)260
2291 y Fe(State)o Fj(f)p Fk(x;)f(y)q(;)g(i)p Fj(g)j Fq(=)i
Fe(init)i Fk(n)h(r)q(adicand)26 b Fq(=)-7 b Fj(\))337 2341
y(I)s Fq(\()p Fe(State)n Fj(f)p Fk(x;)7 b(y)q(;)g(i)p Fj(g)p
Fq(\))15 b(&)g(\()p Fk(x)c Fq(=)h Fk(r)q(adicand)p Fq(\))i(&)h(\()p
Fk(y)f Fq(=)e(2)1156 2326 y Fg(n)p Ff(\000)p Fp(1)1221 2341
y Fq(\))j(&)g(\()p Fk(i)d Fq(=)f Fk(n)f Fj(\000)f Fq(2\))p
eop
%%Page: 6 6
bop 340 194 a Fh(Theorem)15 b(3)21 b Fi(Corr)n(e)n(ctness)14
b(of)g(up)n(date)340 275 y Fj(`)e(8)p Fk(x;)7 b(y)q(;)g(i)i(:)g
Fj(I)s Fq(\(\()p Fe(State)o Fj(f)p Fk(x;)e(y)q(;)g(i)p Fj(g)p
Fq(\))o(\))27 b(=)-7 b Fj(\))417 324 y(8)p Fk(x)464 309 y Ff(0)476
324 y Fk(;)7 b(y)516 309 y Ff(0)528 324 y Fk(;)g(i)561 309
y Ff(0)581 324 y Fk(:)i Fe(State)o Fj(f)p Fk(x)756 309 y Ff(0)767
324 y Fk(;)e(y)807 309 y Ff(0)819 324 y Fk(;)g(i)852 309 y
Ff(0)864 324 y Fj(g)k Fq(=)h Fe(update)h Fq(\()p Fe(State)o
Fj(f)p Fk(x;)7 b(y)q(;)g(i)p Fj(g)p Fq(\))26 b(=)-7 b Fj(\))494
374 y(I)s Fq(\()p Fe(State)o Fj(f)p Fk(x)690 359 y Ff(0)701
374 y Fk(;)7 b(y)741 359 y Ff(0)753 374 y Fk(;)g(i)786 359
y Ff(0)798 374 y Fj(g)o Fq(\))15 b(&)h(\()p Fk(i)927 359 y
Ff(0)950 374 y Fq(=)c Fk(i)e Fj(\000)f Fq(1\))403 494 y(The)k(correctness)i
(of)d Fe(init)g Fq(is)h(straigh)o(tforw)o(ard.)e(The)i(pro)q(of)g(of)f
(Theorem)g(3)g(relies)i(on)340 544 y(Theorem)i(4,)f(whic)o(h)h(describ)q(es)i
(the)f(b)q(eha)o(vior)f(of)f(the)i(up)q(date)g(function.)e(The)i(b)q(o)q(dy)f
(of)340 593 y Fe(update)11 b Fq(has)g(three)i(branc)o(hes,)g(so)e(the)i(pro)q
(of)e(of)g(correctness)j(of)d(up)q(date)i(has)e(three)i(parts,)340
643 y(dep)q(ending)k(on)e(whether)i Fe(x)9 b Fj(\000)h Fe(y)857
628 y(2)896 643 y Fq(is)16 b(equal)f(to)h(zero,)g(p)q(ositiv)o(e,)f(or)h
(negativ)o(e.)f(Eac)o(h)h(case)340 693 y(in)e(Theorem)f(4)h(is)g(straigh)o
(tforw)o(ard)f(to)h(pro)o(v)o(e)g(using)f(ordinary)h(arithmetic.)340
782 y Fh(Theorem)h(4)21 b Fi(Up)n(date)15 b(lemmas)417 862
y Fh(Case)i Fk(x)9 b Fj(\000)g Fk(y)627 847 y Fp(2)658 862
y Fq(=)j(0)494 912 y Fj(`)g(8)p Fk(x;)7 b(y)q(;)g(i)i(:)g Fj(I)s
Fq(\(\()p Fe(State)o Fj(f)p Fk(x;)e(y)q(;)g(i)p Fj(g)p Fq(\))o(\))27
b(=)-7 b Fj(\))571 962 y Fq(\()p Fk(x)10 b Fj(\000)f Fk(y)683
947 y Fp(2)714 962 y Fq(=)j(0\))f(=)-7 b Fj(\))12 b(I)s Fq(\()p
Fe(State)n Fj(f)p Fk(x;)7 b(y)q(;)g(i)i Fj(\000)h Fq(1)p Fj(g)o
Fq(\))417 1062 y Fh(Case)17 b Fk(x)9 b Fj(\000)g Fk(y)627 1047
y Fp(2)658 1062 y Fk(>)j Fq(0)494 1111 y Fj(`)g(8)p Fk(x;)7
b(y)q(;)g(i)i(:)g Fj(I)s Fq(\(\()p Fe(State)o Fj(f)p Fk(x;)e(y)q(;)g(i)p
Fj(g)p Fq(\))o(\))27 b(=)-7 b Fj(\))571 1161 y Fq(\()p Fk(x)10
b Fj(\000)f Fk(y)683 1146 y Fp(2)714 1161 y Fk(>)j Fq(0\))f(=)-7
b Fj(\))12 b(I)s Fq(\()p Fe(State)n Fj(f)p Fk(x;)7 b(y)j Fq(+)g(2)1192
1146 y Fg(i)1206 1161 y Fk(;)d(i)i Fj(\000)g Fq(1)p Fj(g)p
Fq(\))417 1261 y Fh(Case)17 b Fk(x)9 b Fq(+)g Fk(y)627 1246
y Fp(2)658 1261 y Fk(>)j Fq(0)494 1311 y Fj(`)g(8)p Fk(x;)7
b(y)q(;)g(i)i(:)g Fj(I)s Fq(\(\()p Fe(State)o Fj(f)p Fk(x;)e(y)q(;)g(i)p
Fj(g)p Fq(\))o(\))27 b(=)-7 b Fj(\))571 1361 y Fq(\()p Fk(x)10
b Fq(+)f Fk(y)683 1345 y Fp(2)714 1361 y Fk(>)j Fq(0\))f(=)-7
b Fj(\))12 b(I)s Fq(\()p Fe(State)n Fj(f)p Fk(x;)7 b(y)j Fj(\000)g
Fq(2)1192 1345 y Fg(i)1206 1361 y Fk(;)d(i)i Fj(\000)g Fq(1)p
Fj(g)p Fq(\))403 1480 y(W)m(e)16 b(no)o(w)h(pro)o(v)o(e)g(that)g(iterating)g
Fe(update)e Fq(a)i(total)f(of)h Fe(n-1)f Fq(times)g(will)f(pro)q(duce)k(the)
340 1530 y(correct)c(\014nal)c(result.)i(The)g(pro)q(of)f(is)h(done)f(b)o(y)h
(induction)f(on)g Fk(n)g Fq(and)h(mak)o(es)e(use)i(of)f(Theo-)340
1580 y(rem)g(5)f(to)f(describ)q(e)j(one)d(call)g(to)h Fe(iterate)p
Fq(.)e(This)h(allo)o(ws)g(us)h(to)f(pro)o(v)o(e)h(that)g(after)g(iterating)
340 1630 y Fe(update)i Fq(a)h(total)f(of)h Fe(n-1)f Fq(times,)g(our)h(in)o(v)
n(arian)o(t)e(holds)i(and)g Fe(i)g Fq(is)g(zero.)g(This)g(is)g(su\016cien)o
(t)340 1679 y(to)g(pro)o(v)o(e)g(that)g(square)h(ro)q(ot)f(is)f(within)g(one)
i(of)e(the)h Fi(c)n(orr)n(e)n(ct)f Fq(ro)q(ot.)340 1768 y Fh(Theorem)i(5)21
b Fi(Iter)n(ating)14 b(a)h(function)417 1849 y Fj(`)d(8)p Fi(pr)n(op)s
Fk(;)7 b(n;)g(f)r(;)g(s:)494 1899 y Fi(pr)n(op)18 b Fk(n)d(s)d
Fq(=)-7 b Fj(\))571 1948 y Fq(\()p Fj(8)p Fk(n)635 1933 y Ff(0)647
1948 y Fk(;)7 b(s)685 1933 y Ff(0)697 1948 y Fk(:)p Fi(pr)n(op)17
b Fk(n)830 1933 y Ff(0)856 1948 y Fk(s)875 1933 y Ff(0)899
1948 y Fq(=)-7 b Fj(\))11 b Fi(pr)n(op)18 b Fq(\()p Fk(n)1115
1933 y Ff(0)1136 1948 y Fj(\000)9 b Fq(1\))15 b(\()p Fk(f)20
b(s)1304 1933 y Ff(0)1316 1948 y Fq(\)\))12 b(=)-7 b Fj(\))648
1998 y Fi(pr)n(op)18 b Fq(0)d(\()p Fe(iterate)e Fk(f)20 b(n)15
b(s)p Fq(\))340 2152 y Fh(2.2)48 b(Description)12 b(of)k(Lev)o(el)e(One)h
(Algorithm)340 2232 y Fq(The)g Fj(L)455 2238 y Fp(0)488 2232
y Fq(SML)g(co)q(de)g(w)o(ould)f(b)q(e)h(v)o(ery)g(exp)q(ensiv)o(e)h(to)f
(directly)f(implemen)o(t)e(in)i(hardw)o(are.)340 2282 y(If)j(the)g(state)h(w)
o(ere)g(stored)g(in)f(three)h(registers,)g Fe(x)e Fq(w)o(ould)h(b)q(e)g
(stored)h(but)f(w)o(ould)f(nev)o(er)340 2332 y(c)o(hange;)f(the)h(v)n
(ariable)d Fe(i)i Fq(w)o(ould)f(need)i(to)f(b)q(e)g(decremen)o(ted)h(ev)o
(ery)g(lo)q(op)e(and)h(w)o(e)g(w)o(ould)340 2382 y(need)h(to)e(calculate)g
Fe(y)684 2367 y(2)708 2382 y Fq(,)g Fe(x)9 b Fj(\000)g Fe(y)828
2367 y(2)852 2382 y Fq(,)14 b Fe(2)900 2367 y(i)924 2382 y
Fq(,)g(and)g Fe(y)9 b Fj(\006)g Fe(2)1125 2367 y(i)1163 2382
y Fq(in)14 b(ev)o(ery)h(iteration.)f(All)f(of)h(these)i(are)340
2432 y(exp)q(ensiv)o(e)f(op)q(erations)e(to)g(implemen)o(t)e(in)i(hardw)o
(are.)g(By)g(restructuring)i(the)f(algorithm)p eop
%%Page: 7 7
bop 183 194 a Fq(through)17 b(a)g(series)i(of)e(transformations,)e(w)o(e)j
(preserv)o(e)h(the)f(correctness)i(of)d(our)g(design)183 244
y(and)c(generate)j(an)d(implemen)o(tation)e(that)i(uses)j(v)o(ery)e(little)f
(hardw)o(are.)245 308 y(The)d(k)o(ey)g(op)q(erations)h(in)e(eac)o(h)i
(iteration)e(are)h(to)g(compute)g Fe(x)f Fj(\000)g Fe(y)1265
293 y(2)1299 308 y Fq(and)h(then)g(up)q(date)h Fe(y)183 358
y Fq(using)e(the)h(new)g(v)n(alue)g Fe(y)561 343 y Ff(0)583
358 y Fq(=)i Fe(y)d Fj(\006)32 b Fe(2)744 343 y(i)767 358 y
Fq(,)9 b(where)i Fj(\006)f Fq(is)g(+)g(if)e Fe(x)i Fj(\000)f
Fe(y)1154 343 y(2)1189 358 y Fj(\025)j Fe(0)d Fq(and)h Fj(\000)g
Fq(if)f Fe(x)g Fj(\000)g Fe(y)1511 343 y(2)1546 358 y Fk(<)j
Fe(0)p Fq(.)183 407 y(The)18 b(v)n(ariable)e Fe(x)i Fq(is)f(only)g(used)h(in)
g(the)g(computation)e(of)h Fe(x)9 b Fj(\000)g Fe(y)1228 392
y(2)1252 407 y Fq(.)17 b(In)h(the)g Fj(L)1441 413 y Fp(1)1477
407 y Fq(co)q(de)g(w)o(e)183 457 y(in)o(tro)q(duce)c(the)g(v)n(ariable)e
Fe(diffx)p Fq(,)g(whic)o(h)h(stores)h(the)g(result)g(of)f(computing)f
Fe(x)d Fj(\000)g Fe(y)1494 442 y(2)1518 457 y Fq(.)k(This)183
507 y(has)j(the)h(adv)n(an)o(tage)e(that)h(w)o(e)h(can)f(incremen)o(tally)f
(up)q(date)h Fe(diffx)f Fq(based)i(on)f(its)g(v)n(alue)183
557 y(in)d(the)i(previous)f(iteration:)251 703 y Fe(y')27 b
Fq(=)14 b Fe(y)9 b Fj(\006)31 b Fe(2)484 688 y(i)251 758 y(y)273
743 y Ff(0)p Fe(2)322 758 y Fq(=)14 b Fe(y)390 743 y(2)423
758 y Fj(\006)31 b Fe(2)9 b Fj(\003)g Fe(y)g Fj(\003)g Fe(2)630
743 y(i)663 758 y Fq(+)h(\()p Fe(2)743 743 y(i)766 758 y Fq(\))782
743 y Fe(2)322 814 y Fq(=)k Fe(y)390 799 y(2)423 814 y Fj(\006)31
b Fe(y)9 b Fj(\003)g Fe(2)569 799 y(i)p Fp(+)p Fe(1)649 814
y Fq(+)h Fe(2)713 799 y(2)p Ff(\003)p Fe(i)853 703 y(diffx)j
Fq(=)h Fe(x)9 b Fj(\000)g Fe(y)1116 688 y(2)853 808 y(diffx')-8
b Fq(=)13 b Fe(x)c Fj(\000)g Fe(y)1116 793 y Ff(0)p Fe(2)976
864 y Fq(=)14 b Fe(x)9 b Fj(\000)g Fq(\()p Fe(y)1132 849 y(2)1165
864 y Fj(\006)32 b Fe(y)9 b Fj(\003)g Fe(2)1312 849 y(i)p Fp(+)p
Fe(1)1392 864 y Fq(+)g Fe(2)1455 849 y(2)p Ff(\003)p Fe(i)1518
864 y Fq(\))976 919 y(=)14 b(\()p Fe(x)9 b Fj(\000)g Fe(y)1132
904 y(2)1156 919 y Fq(\))h Fj(\007)31 b Fe(y)9 b Fj(\003)g
Fe(2)1328 904 y(i)p Fp(+)p Fe(1)1408 919 y Fj(\000)h Fe(2)1472
904 y(2)p Ff(\003)p Fe(i)245 1043 y Fq(The)k(v)n(ariable)e
Fe(i)h Fq(is)g(only)g(used)h(in)f(the)h(computations)e(of)g
Fe(2)1191 1028 y(2)p Ff(\003)p Fe(i)1267 1043 y Fq(and)h Fe(y)c
Fj(\003)g Fe(2)1430 1028 y(i)p Fp(+)p Fe(1)1501 1043 y Fq(,)k(so)g(w)o(e)183
1093 y(create)i(a)e(v)n(ariable)g Fe(b)g Fq(that)h(stores)h(the)f(v)n(alue)f
Fe(2)938 1077 y(2)p Ff(\003)p Fe(i)1015 1093 y Fq(and)g(a)g(v)n(ariable)g
Fe(yshift)f Fq(that)i(stores)183 1142 y Fe(y)9 b Fj(\003)g
Fe(2)266 1127 y(i)p Fp(+)p Fe(1)337 1142 y Fq(.)h(W)m(e)h(up)q(date)h
Fe(b)f Fq(as:)g Fe(b')22 b(=)f(b)h(div)f(4)p Fq(.)10 b(This)i(results)g(in)f
(the)h(follo)o(wing)d(equations)183 1192 y(to)k(up)q(date)i
Fe(yshift)e Fq(and)g Fe(diffx)p Fq(:)251 1338 y Fe(y)273 1323
y Ff(0)293 1338 y Fj(\003)c Fe(2)345 1323 y(i)p Fp(+)p Fe(1)430
1338 y Fq(=)14 b(\()p Fe(y)9 b Fj(\006)32 b Fe(2)609 1323 y(i)632
1338 y Fq(\))10 b Fj(\003)f Fe(2)710 1323 y(i)p Fp(+)p Fe(1)251
1394 y(yshift)383 1379 y Ff(0)430 1394 y Fq(=)14 b Fe(y)9 b
Fj(\003)g Fe(2)559 1379 y(i)p Fp(+)p Fe(1)639 1394 y Fj(\006)32
b Fe(2)725 1379 y(i)758 1394 y Fj(\003)9 b Fe(2)810 1379 y(i)p
Fp(+)p Fe(1)430 1449 y Fq(=)14 b Fe(yshift)8 b Fj(\006)32 b
Fe(2)9 b Fj(\003)g Fe(2)763 1434 y(2)p Ff(\003)p Fe(i)430 1499
y Fq(=)14 b Fe(yshift)8 b Fj(\006)32 b Fe(2)9 b Fj(\003)g Fe(b)892
1333 y(diffx)1002 1318 y Ff(0)1024 1333 y Fq(=)j Fe(diffx)c
Fj(\007)32 b Fe(yshift)8 b Fj(\000)h Fe(b)245 1611 y Fq(The)14
b(transformations)f(from)f Fj(L)757 1617 y Fp(0)789 1611 y
Fq(to)i Fj(L)869 1617 y Fp(1)901 1611 y Fq(can)g(b)q(e)g(summarized:)387
1675 y Fe(diffx)c Fq(=)i Fe(x)d Fj(\000)g Fe(y)645 1660 y(2)825
1675 y(yshift)h Fq(=)i Fe(y)d Fj(\003)g Fe(2)1094 1660 y(i)p
Fp(+)p Fe(1)1320 1675 y(b)j Fq(=)f Fe(2)1419 1660 y(2)p Ff(\003)p
Fe(i)245 1740 y Fq(The)g Fj(L)356 1746 y Fp(1)385 1740 y Fq(v)o(ersions)h(of)
e Fe(init)g Fq(and)h Fe(update)f Fq(are)h(giv)o(en)g(b)q(elo)o(w.)f(Note)h
(that,)g(although)f(the)183 1789 y(optimizations)g(are)j(motiv)n(ated)e(b)o
(y)h(the)i(fact)e(that)h(w)o(e)g(are)g(doing)f(bit)h(v)o(ector)g(arithmetic,)
183 1839 y(the)e(algorithm)d(is)i(correct)i(for)e(un)o(b)q(ounded)h(in)o
(tegers.)g(Also)f(note)h(that)g(the)g(most)e(complex)183 1889
y(op)q(erations)19 b(in)g(the)h(up)q(date)f(lo)q(op)g(are)g(an)g(addition)f
(and)h(subtraction)h(and)f(only)f(one)183 1939 y(of)c(these)j(t)o(w)o(o)d(op)
q(erations)h(is)g(executed)i(eac)o(h)f(iteration.)e(W)m(e)g(ha)o(v)o(e)h
(optimized)f(a)o(w)o(a)o(y)g(all)183 1989 y(exp)q(onen)o(tiation)c(and)g(an)o
(y)g(m)o(ultiplicatio)o(n)e(that)i(cannot)h(b)q(e)g(implemen)o(ted)d(as)j(a)f
(constan)o(t)183 2038 y(shift.)323 2083 y Fd(fun)19 b(init1)f(\(n,radic)o
(and)o(\))e(=)363 2129 y(let)402 2174 y(val)i(b')h(=)g(2)h(**)e
(\(2*\(n-1\)\))363 2220 y(in)382 2266 y(State{diff)o(x)36 b(=)19
b(radicand)e(-)i(b',)500 2311 y(yshift)e(=)i(b',)500 2357 y(b)117
b(=)19 b(b')g(div)g(4)480 2403 y(})363 2448 y(end)p eop
%%Page: 8 8
bop 481 178 a Fd(fun)19 b(update1)d(\(State{diff)o(x,)g(yshift,)h(b}\))h(=)
520 224 y(let)560 269 y(val)g(\(diffx',ys)o(hi)o(ft')o(\))36
b(=)618 315 y(if)117 b(diffx)18 b(>)h(0)g(then)g(\(diffx)e(-)i(yshift)e(-)j
(b,)e(yshift)g(+)h(2*b\))618 361 y(else)f(if)h(diffx)f(=)h(0)g(then)g
(\(diffx)252 b(,)19 b(yshift)116 b(\))618 406 y(else)18 b(\(*)h(diffx)f(<)h
(0)g(*\))59 b(\(diffx)17 b(+)i(yshift)e(-)j(b,)e(yshift)g(-)h(2*b\))520
452 y(in)540 498 y(State{dif)o(fx)36 b(=)19 b(diffx',)658 543
y(yshift)e(=)i(yshift')e(div)i(2,)658 589 y(b)117 b(=)19 b(b)39
b(div)18 b(4)638 635 y(})520 680 y(end)403 717 y Fq(W)m(e)9
b(could)g(v)o(erify)g(the)h Fj(L)783 723 y Fp(1)811 717 y Fq(algorithm)d
(from)g(scratc)o(h,)k(but)e(since)i(it)e(is)g(a)g(transformation)340
767 y(of)14 b(the)h Fj(L)489 773 y Fp(0)521 767 y Fq(algorithm,)c(w)o(e)k
(use)g(the)g(results)g(from)e(the)h(earlier)h(v)o(eri\014cation.)e(W)m(e)h
(do)g(this)340 817 y(b)o(y)e(de\014ning)g(a)g(mapping)e(function)i(b)q(et)o
(w)o(een)h(the)g(state)g(v)n(ariables)e(in)h(the)h(t)o(w)o(o)e(lev)o(els)h
(and)340 867 y(then)j(pro)o(ving)e(that)h(the)h(t)o(w)o(o)e(lev)o(els)h
(return)h(equal)f(v)n(alues)f(for)h(equal)f(input)h(states.)h(The)340
917 y(transformation)d(is)i(expressed)i(as)e(follo)o(ws:)340
1028 y Fh(De\014nition)e(3)21 b Fi(State)15 b(tr)n(ansformation)340
1127 y Fj(T)c Fq(\()p Fe(State)o Fj(f)p Fk(x;)c(y)q(;)g(i)p
Fj(g)p Fk(;)g Fe(State)m Fj(f)p Fi(di\013x)f Fk(;)h Fi(yshift)s
Fk(;)g(b)p Fj(g)o Fq(\))21 b(^)-27 b(=)417 1177 y(\()p Fi(di\013x)18
b Fq(=)12 b Fk(x)d Fj(\000)g Fk(y)668 1162 y Fp(2)702 1177
y Fq(&)15 b Fi(yshift)h Fq(=)11 b Fk(y)g Fj(\003)e Fq(2)988
1162 y Fg(i)p Fp(+1)1059 1177 y Fq(&)15 b Fk(b)c Fq(=)h(2)1200
1162 y Fp(2)p Ff(\003)p Fg(i)1247 1177 y Fq(\))403 1326 y(All)f(of)h(the)h
(theorems)g(in)f(this)h(section)g(w)o(ere)g(pro)o(v)o(ed)g(with)f(Nuprl.)g
(In)h(Theorem)f(6)g(w)o(e)340 1376 y(sa)o(y)e(that)g(for)f(equal)h(inputs)g
Fe(init1)e Fq(returns)k(an)d(equiv)n(alen)o(t)g(state)i(to)e
Fe(init)p Fq(.)g(In)h(Theorem)i(7)340 1426 y(w)o(e)k(sa)o(y)f(that)g(for)g
(equiv)n(alen)o(t)g(input)g(states,)h Fe(update1)e Fq(and)h
Fe(update)f Fq(return)i(equiv)n(alen)o(t)340 1475 y(outputs.)340
1587 y Fh(Theorem)f(6)21 b Fi(Corr)n(e)n(ctness)14 b(of)g(initialization)340
1686 y Fj(`)e(8)p Fk(n)d(:)g Fj(8)p Fk(r)q(adicand)20 b Fq(:)h
Fj(f)p Fq(0)p Fk(::)p Fq(2)783 1671 y Fp(2)p Fg(n)829 1686
y Fj(\000)10 b Fq(1)p Fj(g)p Fk(:)417 1736 y Fj(8)p Fk(x;)d(y)q(;)g(i)i(:)p
Fe(State)o Fj(f)p Fk(x;)e(y)q(;)g(i)p Fj(g)k Fq(=)h Fe(init)i
Fk(n)g(r)q(adicand)26 b Fq(=)-7 b Fj(\))494 1786 y(8)p Fi(di\013x)6
b Fk(;)h Fi(yshift)s Fk(;)g(b)i(:)p Fe(State)n Fj(f)p Fi(di\013x)d
Fk(;)h Fi(yshift)s Fk(;)g(b)p Fj(g)j Fq(=)i Fe(init1)i Fk(n)g(r)q(adicand)26
b Fq(=)-7 b Fj(\))571 1836 y(T)11 b Fq(\()p Fe(State)o Fj(f)p
Fk(x;)c(y)q(;)g(i)p Fj(g)p Fk(;)g Fe(State)m Fj(f)p Fi(di\013x)f
Fk(;)h Fi(yshift)s Fk(;)g(b)p Fj(g)o Fq(\))340 1984 y Fh(Theorem)15
b(7)21 b Fi(Corr)n(e)n(ctness)14 b(of)g(up)n(date)340 2084
y Fj(`)e(8)p Fk(x;)7 b(y)q(;)g(i;)g Fi(di\013x)e Fk(;)i Fi(yshift)s
Fk(;)g(b)i(:)417 2133 y Fj(T)i Fq(\()p Fe(State)o Fj(f)p Fk(x;)c(y)q(;)g(i)p
Fj(g)p Fk(;)g Fe(State)m Fj(f)p Fi(di\013x)f Fk(;)h Fi(yshift)s
Fk(;)g(b)p Fj(g)o Fq(\))k(=)-7 b Fj(\))494 2183 y(T)11 b Fq(\()p
Fe(update)o Fq(\()p Fe(State)o Fj(f)p Fk(x;)c(y)q(;)g(i)p Fj(g)p
Fq(\))p Fk(;)g Fe(update1)m Fq(\()p Fe(State)o Fj(f)p Fi(di\013x)f
Fk(;)h Fi(yshift)s Fk(;)g(b)p Fj(g)p Fq(\))o(\))403 2332 y(Again,)i(the)i
(initialization)c(theorem)j(has)h(an)f(easy)h(pro)q(of,)f(and)g(the)h
Fe(update1)e Fq(theorem)340 2382 y(is)18 b(a)f(case)i(split)e(on)h(eac)o(h)g
(of)f(the)h(three)h(cases)g(in)e(the)i(b)q(o)q(dy)e(of)g(the)i(up)q(date)f
(function,)340 2432 y(follo)o(w)o(ed)13 b(b)o(y)g(ordinary)h(arithmetic.)p
eop
%%Page: 9 9
bop 183 194 a Fh(2.3)47 b(Description)12 b(of)k(Lev)o(el)e(Tw)o(o)j
(Algorithm)183 277 y Fq(T)m(o)12 b(go)g(from)f Fj(L)423 283
y Fp(1)454 277 y Fq(to)h Fj(L)532 283 y Fp(2)551 277 y Fq(,)g(w)o(e)h
(recognize)h(that)e(the)i(op)q(erations)f(in)f Fe(init1)g Fq(are)h(v)o(ery)g
(similar)183 326 y(to)j(those)h(in)g Fe(update1)p Fq(.)d(By)j(carefully)f(c)o
(ho)q(osing)h(our)f(initial)f(v)n(alues)h(for)g Fe(diffx)g
Fq(and)g Fe(y)p Fq(,)183 376 y(w)o(e)d(increase)i(the)f(n)o(um)o(b)q(er)f(of)
g(iterations)g(from)f Fe(n-1)h Fq(to)g Fe(n)g Fq(and)h(fold)e(the)i
(computation)e(of)183 426 y Fe(radicand)20 b(-)h(b')c Fq(in)f
Fe(init)g Fq(in)o(to)g(the)i(\014rst)f(iteration)g(of)f Fe(update)p
Fq(.)f(This)i(eliminates)e(the)183 476 y(need)g(for)e(sp)q(ecial)h
(initialization)d(hardw)o(are.)j(The)g(new)h(initialize)d(function)i(is:)261
563 y Fd(fun)19 b(init2)e(\(n,radican)o(d\))f(=)300 609 y(State{diff)o(x)36
b(=)20 b(radicand)o(,)418 654 y(yshift)d(=)j(0,)418 700 y(b)117
b(=)20 b(2)f(**)g(\(2*\(n-1\)\))o(})245 791 y Fq(The)d(up)q(date)g(function)f
(is)h(unc)o(hanged)g(from)d Fe(update1)p Fq(.)h(The)i(new)g(calling)e
(function)183 841 y(is:)222 928 y Fd(fun)k(sqrt)g(n)i(radicand)c(=)39
b(iterate)17 b(update1)g(n)i(\(init2)e(n)j(radicand)o(\))245
1019 y Fq(Sho)o(wing)11 b(the)i(equiv)n(alence)g(b)q(et)o(w)o(een)h
Fe(init2)d Fq(and)h(a)h(lo)q(op)e(that)i(iterates)g Fe(n)f
Fq(times)g(and)183 1069 y(the)i Fj(L)283 1075 y Fp(1)315 1069
y Fq(functions)g(requires)i(sho)o(wing)d(that)h(the)h(state)f(in)g
Fj(L)1150 1075 y Fp(2)1182 1069 y Fq(has)g(the)h(same)e(v)n(alue)g(after)183
1119 y(the)k(\014rst)h(iteration)f(that)g(it)f(did)h(after)g
Fe(init1)p Fq(.)f(More)h(formally)m(,)c Fe(init1)21 b(=)g(update1)g
Fj(\016)183 1168 y Fe(init2)p Fq(.)12 b(W)m(e)i(pro)o(v)o(e)h(this)f(using)g
(the)h(observ)n(ation)f(that,)g(after)g Fe(init2)p Fq(,)f Fe(diffx)g
Fq(is)h(guaran-)183 1218 y(teed)i(to)g(b)q(e)g(p)q(ositiv)o(e,)f(so)g(the)h
(\014rst)h(iteration)e(of)g Fe(update1)f Fq(in)h Fj(L)1231
1224 y Fp(2)1265 1218 y Fq(alw)o(a)o(ys)f(executes)k(the)183
1268 y Fe(diffx)i(>)i(0)15 b Fq(case.)i(Using)e(the)h(state)h(returned)g(b)o
(y)e Fe(init2)g Fq(and)g(p)q(erforming)g(some)f(sim-)183 1318
y(ple)g(algebraic)f(manipulations,)e(w)o(e)j(see)h(that)f(after)h(the)f
(\014rst)h(iteration)f(in)f Fj(L)1427 1324 y Fp(2)1446 1318
y Fq(,)g Fe(update1)183 1368 y Fq(stores)h(the)g(same)e(v)n(alues)h(in)f(the)
i(state)g(v)n(ariables)e(as)h Fe(init1)f Fq(did.)g(Because)j(b)q(oth)e
Fj(L)1525 1374 y Fp(1)1557 1368 y Fq(and)183 1418 y Fj(L)212
1424 y Fp(2)244 1418 y Fq(use)j(the)f(same)e(up)q(date)j(function,)d(all)h
(subsequen)o(t)i(iterations)e(in)g(the)h Fj(L)1415 1424 y Fp(2)1448
1418 y Fq(algorithm)183 1467 y(are)f(iden)o(tical)f(to)h(the)g
Fj(L)570 1473 y Fp(1)602 1467 y Fq(algorithm.)245 1517 y(T)m(o)19
b(b)q(egin)h(the)g(calculation)f(of)g(a)h(square)h(ro)q(ot,)e(a)h(hardw)o
(are)g(implemen)o(tatio)o(n)d(of)183 1567 y(the)g Fj(L)286
1573 y Fp(2)320 1567 y Fq(algorithm)d(clears)j(the)h Fe(yshift)d
Fq(register,)i(load)e(the)i(radicand)g(in)o(to)f(the)h Fe(diffx)183
1617 y Fq(register,)c(and)f(initializes)f(the)i Fe(b)f Fq(register)h(with)f
(a)g(1)g(in)g(the)h(correct)h(lo)q(cation.)c(The)j(trans-)183
1667 y(formation)d(from)g Fj(L)497 1673 y Fp(0)528 1667 y Fq(to)j
Fj(L)607 1673 y Fp(1)637 1667 y Fq(simpli\014ed)e(the)i(op)q(erations)g(done)
g(in)f(the)h(lo)q(op)f(to)g(shifts)h(and)183 1716 y(an)18 b
(addition/subtraction.)f(Remaining)e(transformations)i(will)f(further)j
(optimize)e(the)183 1766 y(hardw)o(are.)183 1901 y Fl(3)56
b(T)-5 b(ransforming)18 b(Beha)n(vior)f(to)i(Structure)f(with)h(HML)183
2000 y Fq(The)d(goal)f(of)h(this)g(section)h(is)f(to)h(pro)q(duce)g(an)f
(e\016cien)o(t)h(hardw)o(are)f(implemen)o(tation)d(of)183 2050
y(the)j Fj(L)285 2056 y Fp(2)320 2050 y Fq(algorithm.)d(The)j(\014rst)h
(subsection)h(in)o(tro)q(duces)f(Hardw)o(are)g(ML,)e(our)h(language)183
2100 y(for)e(sp)q(ecifying)h(the)h(b)q(eha)o(vior)f(and)f(structure)k(of)c
(hardw)o(are.)h(T)m(aking)f(an)g(HML)h(v)o(ersion)183 2150
y(of)d(the)h Fj(L)328 2156 y Fp(2)358 2150 y Fq(algorithm)d(as)j(our)f
(starting)h(p)q(oin)o(t,)e(w)o(e)i(obtain)f(a)g(hardw)o(are)h(implemen)o
(tation)183 2199 y(through)h(a)f(sequence)j(of)d(transformation)f(steps.)200
2282 y(1.)20 b(T)m(ranslate)15 b(the)h Fj(L)540 2288 y Fp(2)573
2282 y Fq(algorithm)c(in)o(to)i(Hardw)o(are)i(ML.)e(Pro)o(vision)g(m)o(ust)g
(b)q(e)i(made)e(to)253 2332 y(initialize)9 b(and)h(detect)h(termination,)d
(whic)o(h)i(is)g(not)g(required)h(at)f(the)h(algorithm)c(lev)o(el.)200
2382 y(2.)20 b(T)m(ransform)e(the)i(HML)g(v)o(ersion)g(of)f
Fj(L)881 2388 y Fp(2)919 2382 y Fq(to)g(a)h(set)g(of)f(register)i(assignmen)o
(ts)e(using)253 2432 y(syn)o(tactic)c(transformations.)p eop
%%Page: 10 10
bop 358 194 a Fq(3.)20 b(In)o(tro)q(duce)15 b(an)e(in)o(ternal)h(state)g
(register)h Fe(Exact)e Fq(to)h(simplify)d(the)j(computation,)d(and)411
244 y(\\factor)j(out")f(the)i(condition)e Fe(DiffX)21 b(>=)g(\0450)p
Fq(.)358 294 y(4.)f(P)o(artition)13 b(in)o(to)g(functional)g(blo)q(c)o(ks,)h
(again)e(using)i(syn)o(tactic)g(transformations.)358 344 y(5.)20
b(Substitute)d(lo)o(w)o(er)e(lev)o(el)g(mo)q(dules)g(for)g(register)i(and)f
(com)o(binational)c(assignmen)o(ts.)411 394 y(F)m(urther)j(optimizations)d
(in)i(the)h(implemen)o(tatio)o(n)d(of)i(the)h(lo)o(w)o(er)f(lev)o(el)g(mo)q
(dules)f(are)411 444 y(p)q(ossible.)340 529 y(Eac)o(h)d(step)h(can)f(b)q(e)h
(v)o(eri\014ed)f(formally)l(.)d(Sev)o(eral)j(of)f(these)i(m)o(ust)e(b)q(e)h
(justi\014ed)g(b)o(y)g(prop)q(erties)340 579 y(of)k(the)g(algorithm)d(that)j
(w)o(e)g(can)h(establish)f(through)g(theorem)f(pro)o(ving.)340
707 y Fh(3.1)48 b(Hardw)o(are)16 b(ML)340 793 y Fq(W)m(e)e(ha)o(v)o(e)g
(implemen)o(ted)e(extensions)k(to)e(Standard)g(ML)g(that)h(can)f(b)q(e)h
(used)g(to)g(describ)q(e)340 843 y(the)h(b)q(eha)o(vior)f(of)f(digital)f
(hardw)o(are)j(at)f(the)g(register)h(transfer)g(lev)o(el.)e(Earlier)h(w)o
(ork)g(has)340 893 y(illustrated)k(ho)o(w)f(Hardw)o(are)h(ML)f(can)h(b)q(e)g
(used)h(to)e(describ)q(e)j(the)e(structure)h(of)e(hard-)340
943 y(w)o(are)13 b([OLLA93)o(,)19 b(OLLA92].)f(HML)i(is)f(based)g(on)g(SML)h
(and)f(supp)q(orts)h(higher-order,)340 992 y(p)q(olymorphic)f(functions,)h
(allo)o(wing)f(the)i(concise)h(description)f(of)f(regular)h(structures)340
1042 y(suc)o(h)13 b(as)f(arra)o(ys)g(and)g(trees.)h(SML's)e(p)q(o)o(w)o
(erful)h(mo)q(dule)e(system)i(aids)f(in)h(creating)g(param-)340
1092 y(eterized)k(designs)e(and)g(comp)q(onen)o(t)f(libraries.)403
1143 y(Hardw)o(are)j(is)h(mo)q(delled)d(as)j(a)f(set)h(of)e(concurren)o(tly)j
(executing)f Fi(b)n(ehaviors)f Fq(comm)o(u-)340 1192 y(nicating)g(through)g
(ob)r(jects)h(called)f Fi(signals)p Fq(.)g(Signals)f(ha)o(v)o(e)h(seman)o
(tics)f(appropriate)i(for)340 1242 y(hardw)o(are)d(mo)q(delling:)d(whereas)j
(a)g(Standard)f(ML)h(reference)i(v)n(ariable)c(simply)f(con)o(tains)340
1292 y(a)16 b(v)n(alue,)g(a)g(Hardw)o(are)h(ML)f(signal)f(con)o(tains)h(a)g
(list)g(of)g(time-v)n(alue)e(pairs)j(represen)o(ting)340 1342
y(a)i(w)o(a)o(v)o(eform.)c(The)k(curren)o(t)h(v)n(alue)e(on)g(signal)g
Fe(a)p Fq(,)g(written)h Fe($a)p Fq(,)e(is)i(computed)f(from)e(its)340
1392 y(w)o(a)o(v)o(eform)c(and)i(the)g(curren)o(t)i(time.)403
1442 y(Tw)o(o)e(kinds)g(of)g(signal)f(assignmen)o(t)g(op)q(erators)j(are)f
(supp)q(orted.)g Fi(Combinational)g(as-)340 1492 y(signment)p
Fq(,)j(written)f Fk(s)h Fe(==)f Fk(v)q Fq(,)g(is)h(in)o(tended)g(to)f(mo)q
(del)f(the)i(b)q(eha)o(vior)f(of)g(com)o(binational)340 1542
y(logic)g(under)i(the)g(assumption)e(that)h(gate)g(dela)o(ys)g(are)g
(negligible.)f Fk(s)h Fe(==)g Fk(v)h Fq(causes)h(the)340 1591
y(curren)o(t)d(v)n(alue)e(of)g(the)h(target)f(signal)g Fk(s)h
Fq(to)f(b)q(ecome)g Fk(v)q Fq(.)g(F)m(or)g(example,)f(w)o(e)i(could)f(mo)q
(del)340 1641 y(an)f(exclusiv)o(e-or)h(gate)f(as)h(a)f(b)q(eha)o(vior)g(whic)
o(h)g(assigns)g Fe(true)g Fq(to)g(its)g(output)h Fe(c)f Fq(whenev)o(er)340
1691 y(the)h(curren)o(t)g(v)n(alues)f(on)g(its)f(inputs)h Fe(a)g
Fq(and)g Fe(b)f Fq(are)i(not)f(equal:)428 1777 y Fe(fun)21
b(Xor)g(\(a,b,c\))f(=)i(behavior)e(\(fn)h(\(\))h(=>)f(\(c)g(==)h(\($a)f(<>)g
($b\)\)\))340 1862 y Fq(HML's)14 b Fe(behavior)e Fq(constructor)k(creates)g
(ob)r(jects)f(of)e(t)o(yp)q(e)i Fe(behavior)p Fq(.)c(Its)k(argumen)o(t)d(is)
340 1912 y(a)i(function)g(of)f(t)o(yp)q(e)i Fe(unit)21 b(->)g(unit)13
b Fq(con)o(taining)g(HML)i(co)q(de)f({)g(in)g(this)g(case,)g(a)g(com)o(bi-)
340 1961 y(national)f(assignmen)o(t.)403 2012 y Fi(R)n(e)n(gister)j
(assignment)g Fq(is)g(in)o(tended)h(to)f(mo)q(del)f(the)h(b)q(eha)o(vior)g
(of)g(sequen)o(tial)g(circuit)340 2062 y(elemen)o(ts.)d(If)f(a)h(register)h
(assignmen)o(t)e Fk(s)h Fe(<-)f Fk(v)j Fq(is)d(executed)j(at)e(time)f
Fk(t)g Fq(the)i(w)o(a)o(v)o(eform)d(of)h Fk(s)340 2112 y Fq(is)g(augmen)o
(ted)f(with)g(the)i(pair)e(\()p Fk(v)q(;)c(t)e Fq(+)g(1\))12
b(indicating)f(that)h Fk(s)g Fq(is)g(to)f(assume)h(the)g(v)n(alue)f
Fk(v)i Fq(at)340 2161 y(the)i(next)f(time)f(step.)h(F)m(or)g(example,)e(w)o
(e)i(could)g(mo)q(del)e(a)i(dela)o(y)f(elemen)o(t)h(as)g(a)g(b)q(eha)o(vior)
340 2211 y(con)o(taining)f(a)h(register)h(assignmen)o(t:)428
2297 y Fe(fun)21 b(Reg)g(\(a,b\))g(=)g(behavior)f(\(fn)i(\(\))f(=>)g(\(b)h
(<-)f($a\)\))403 2382 y Fq(Beha)o(viors)9 b(can)h(b)q(e)g(comp)q(osed)f(to)g
(form)f(more)g(complex)g(circuits.)i(In)f(the)h(comp)q(osition)340
2432 y(of)i Fk(b)404 2438 y Fp(1)435 2432 y Fq(and)g Fk(b)532
2438 y Fp(2)550 2432 y Fq(,)g(written)h Fk(b)736 2438 y Fp(1)767
2432 y Fe(||)f Fk(b)841 2438 y Fp(2)859 2432 y Fq(,)g(b)q(oth)h(b)q(eha)o
(viors)f(execute)i(concurren)o(tly)m(.)f(W)m(e)f(comp)q(ose)p
eop
%%Page: 11 11
bop 183 194 a Fq(our)13 b(exclusiv)o(e-or)g(gate)g(and)g(register)h(to)e
(build)h(a)f(parit)o(y)h(circuit,)f(whic)o(h)h(outputs)h Fe(false)183
244 y Fq(if)f(and)g(only)h(if)f(it)g(has)h(receiv)o(ed)h(an)f(ev)o(en)h(n)o
(um)o(b)q(er)e(of)g Fe(true)g Fq(inputs:)267 331 y Fe(fun)21
b(Parity)f(\(a,b\))h(=)289 381 y(let)332 431 y(val)g(p)h(=)f(signal)g(false)
289 481 y(in)332 531 y(Xor)g(\(a,b,p\))g(||)g(Reg)g(\(p,b\))289
580 y(end)981 569 y @beginspecial 156 @llx 629 @lly 302 @urx
690 @ury 1460 @rwi @setspecial
%%BeginDocument: parity.eps

/tgifdict 132 dict def


tgifdict begin

/tgif_min_radius
{
} bind def

/tgifellipsedict 6 dict def


tgifellipsedict /mtrx matrix put

/tgifellipse
{ tgifellipsedict begin
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y translate
xrad yrad scale
0 0 1 0 360 arc
savematrix setmatrix
end
} def

/tgifarrowtipdict 8 dict def


tgifarrowtipdict /mtrx matrix put

/tgifarrowtip
{ tgifarrowtipdict begin
/dy exch def
/dx exch def
/h exch def
/w exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y translate
dy dx atan rotate
0 0 moveto
w neg h lineto
w neg h neg lineto
savematrix setmatrix
end
} def

/tgifarcdict 8 dict def


tgifarcdict /mtrx matrix put

/tgifarcn
{ tgifarcdict begin
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y translate
xrad yrad scale
0 0 1 startangle endangle arc
savematrix setmatrix
end
} def

/tgifarc
{ tgifarcdict begin
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y translate
xrad yrad scale
0 0 1 startangle endangle arcn
savematrix setmatrix
end
} def

/tgifsetuserscreendict 22 dict def


tgifsetuserscreendict begin
/tempctm matrix def
/temprot matrix def
/tempscale matrix def

/concatprocs
{ /proc2 exch cvlit def
/proc1 exch cvlit def
/newproc proc1 length proc2 length add array def
newproc 0 proc1 putinterval
newproc proc1 length proc2 putinterval
newproc cvx
} def
/resmatrix matrix def
/findresolution
{ 72 0 resmatrix defaultmatrix dtransform
/yres exch def /xres exch def
xres dup mul yres dup mul add sqrt
} def
end

/tgifsetuserscreen
{ tgifsetuserscreendict begin
/spotfunction exch def
/screenangle exch def
/cellsize exch def
/m tempctm currentmatrix def
/rm screenangle temprot rotate def
/sm cellsize dup tempscale scale def

sm rm m m concatmatrix m concatmatrix pop

1 0 m dtransform /y1 exch def /x1 exch def

/veclength x1 dup mul y1 dup mul add sqrt def


/frequency findresolution veclength div def

/newscreenangle y1 x1 atan def

m 2 get m 1 get mul m 0 get m 3 get mul sub 0 gt

{{neg} /spotfunction load concatprocs


/spotfunction exch def
} if

frequency newscreenangle /spotfunction load setscreen


end
} def

/tgifsetpatterndict 18 dict def


tgifsetpatterndict begin
/bitison
{ /ybit exch def /xbit exch def
/bytevalue bstring ybit bwidth mul xbit 8 idiv add get def

/mask 1 7 xbit 8 mod sub bitshift def


bytevalue mask and 0 ne
} def
end

/tgifbitpatternspotfunction
{ tgifsetpatterndict begin
/y exch def /x exch def

/xindex x 1 add 2 div bpside mul cvi def


/yindex y 1 add 2 div bpside mul cvi def

xindex yindex bitison


{ /onbits onbits 1 add def 1 }
{ /offbits offbits 1 add def 0 }
ifelse
end
} def

/tgifsetpattern
{ tgifsetpatterndict begin
/cellsz exch def
/angle exch def
/bwidth exch def
/bpside exch def
/bstring exch def

/onbits 0 def /offbits 0 def


cellsz angle /tgifbitpatternspotfunction load tgifsetuserscreen
{} settransfer
offbits offbits onbits add div setgray
end
} def

/tgifxpmdict 4 dict def


/tgifbwpicstr 1 string def
/tgifcolorpicstr 3 string def

/tgifsetpixels { tgifxpmdict begin /pixels exch def end } def

/tgifsetpix { tgifxpmdict begin pixels 3 1 roll putinterval end } def

/tgifbwspot
{ tgifxpmdict begin
/index exch def
tgifbwpicstr 0
pixels index 3 mul 3 getinterval aload pop
255 mul .114 mul exch 255 mul .587 mul add exch 255 mul .299 mul add
cvi put
tgifbwpicstr
end
} def

/tgifcolorspot
{ tgifxpmdict begin
/index exch def
pixels index 3 mul 3 getinterval aload pop
255 mul cvi tgifcolorpicstr 2 3 -1 roll put
255 mul cvi tgifcolorpicstr 1 3 -1 roll put
255 mul cvi tgifcolorpicstr 0 3 -1 roll put
tgifcolorpicstr
end
} def

/tgifnewcolorspot
{ tgifxpmdict begin
/index exch def
pixels index 3 mul 3 getinterval aload pop setrgbcolor
end
} def

/tgifcolordict 4 dict def

/colorimage where
{ pop }
{ /colorimage
{ tgifcolordict begin
pop pop pop pop pop
/ih exch def
/iw exch def
/x 0 def
/y 0 def
1 1 ih
{ pop 1 1 iw
{ pop currentfile
tgifbwpicstr readhexstring pop 0 get tgifnewcolorspot
x y moveto 1 0 rlineto 0 1 rlineto -1 0 rlineto
closepath fill
/x x 1 add def
} for
/y y 1 add def
/x 0 def
} for
end
} def
} ifelse

/tgifpatdict 10 dict def

/tgifpatbyte
{ currentdict /retstr get exch
pat i cellsz mod get put
} def

/tgifpatproc
{ 0 1 widthlim {tgifpatbyte} for retstr
/i i 1 add def
} def

/tgifpatfill
{ tgifpatdict begin
/h exch def
/w exch def
/lty exch def
/ltx exch def
/cellsz exch def
/pat exch def

/widthlim w cellsz div cvi 1 sub def


/retstr widthlim 1 add string def
/i 0 def

ltx lty translate


w h true [1 0 0 1 0 0] {tgifpatproc} imagemask
ltx neg lty neg translate
end
} def

/pat1 <ffffffffffffffff> def


/pat2 <0000000000000000> def
/pat3 <8000000008000000> def
/pat4 <8800000022000000> def
/pat5 <8800220088002200> def
/pat6 <8822882288228822> def
/pat7 <aa55aa55aa55aa55> def
/pat8 <77dd77dd77dd77dd> def
/pat9 <77ffddff77ffddff> def
/pat10 <77ffffff77ffffff> def
/pat11 <7fffffff7fffffff> def
/pat12 <8040200002040800> def
/pat13 <40a00000040a0000> def
/pat14 <ff888888ff888888> def
/pat15 <ff808080ff080808> def
/pat16 <f87422478f172271> def
/pat17 <038448300c020101> def
/pat18 <081c22c180010204> def
/pat19 <8080413e080814e3> def
/pat20 <8040201008040201> def
/pat21 <8844221188442211> def
/pat22 <77bbddee77bbddee> def
/pat23 <c1e070381c0e0783> def
/pat24 <7fbfdfeff7fbfdfe> def
/pat25 <3e1f8fc7e3f1f87c> def
/pat26 <0102040810204080> def
/pat27 <1122448811224488> def
/pat28 <eeddbb77eeddbb77> def
/pat29 <83070e1c3870e0c1> def
/pat30 <fefdfbf7efdfbf7f> def
/pat31 <7cf8f1e3c78f1f3e> def

/tgifcentertext { dup stringwidth pop 2 div neg 0 rmoveto } def

/tgifrighttext { dup stringwidth pop neg 0 rmoveto } def

/tgifreencsmalldict 12 dict def


/tgifReEncodeSmall
{ tgifreencsmalldict begin
/newcodesandnames exch def
/newfontname exch def
/basefontname exch def

/basefontdict basefontname findfont def


/newfont basefontdict maxlength dict def

basefontdict
{ exch dup /FID ne
{ dup /Encoding eq
{ exch dup length array copy newfont 3 1 roll put }
{ exch newfont 3 1 roll put }
ifelse
}
{ pop pop }
ifelse
}
forall

newfont /FontName newfontname put


newcodesandnames aload pop

newcodesandnames length 2 idiv


{ newfont /Encoding get 3 1 roll put}
repeat

newfontname newfont definefont pop


end
} def

/tgifgray { 8 1 0 72 300 32 div div tgifsetpattern } bind def

/tgifboxdict 6 dict def


/tgifboxstroke
{ tgifboxdict begin
/pat def /w def /y2 exch def /x2 exch def /y1 exch def /x1 exch def
1.415 setmiterlimit
w 1 eq { w setlinewidth } if
pat pat1 ne pat pat2 ne and { gsave pat tgifgray } if
newpath x1 y1 moveto x2 y1 lineto x2 y2 lineto x1 y2 lineto closepath
pat pat2 eq { 1 setgray stroke 0 setgray } { stroke } ifelse
pat pat1 ne pat pat2 ne and { grestore } if
w 1 eq { 1 setlinewidth } if
1 setmiterlimit
end
} def
/tgifboxfill
{ tgifboxdict begin
/pat def /y2 exch def /x2 exch def /y1 exch def /x1 exch def
pat pat1 ne pat pat2 ne and { gsave pat tgifgray } if
newpath x1 y1 moveto x2 y1 lineto x2 y2 lineto x1 y2 lineto closepath
pat pat2 eq { 1 setgray fill 0 setgray } { fill } ifelse
pat pat1 ne pat pat2 ne and { grestore } if
end
} def

end

tgifdict begin
/tgifsavedpage save def

1 setmiterlimit
1 setlinewidth

72 0 mul 72 11 mul translate


72 128 div 100 mul 100 div dup neg scale

gsave

gsave
1.415 setmiterlimit
newpath
428 192 moveto 492 192 lineto 492 256 lineto 428 256 lineto
closepath stroke
1 setmiterlimit
grestore

gsave
newpath
320 256 moveto
330.67 234.67 330.67 213.33
320 192 curveto
stroke
grestore

gsave
newpath
328 256 moveto
338.67 234.67 338.67 213.33
328 192 curveto
stroke
grestore

gsave
newpath
328 256 moveto
349.33 256.00 365.33 250.67 376.00 240.00 curveto
386.67 229.33 386.67 218.67 376.00 208.00 curveto
365.33 197.33 349.33 192.00
328 192 curveto
stroke
grestore

gsave
newpath
492 224 moveto
0 44 atan dup cos 8 mul 536 exch sub
exch sin 8 mul 224 exch sub lineto
stroke
grestore
gsave
newpath
536 224 8 3 44 0 tgifarrowtip
closepath fill
grestore

gsave
newpath
384 224 moveto
0 44 atan dup cos 8 mul 428 exch sub
exch sin 8 mul 224 exch sub lineto
stroke
grestore
gsave
newpath
428 224 8 3 44 0 tgifarrowtip
closepath fill
grestore

gsave
newpath
280 208 moveto
0 44 atan dup cos 8 mul 324 exch sub
exch sin 8 mul 208 exch sub lineto
stroke
grestore
gsave
newpath
324 208 8 3 44 0 tgifarrowtip
closepath fill
grestore

gsave
newpath
504 224 moveto
504 288 lineto
304 288 lineto
304 240 lineto
0 20 atan dup cos 8 mul 324 exch sub
exch sin 8 mul 240 exch sub lineto
stroke
grestore
gsave
newpath
324 240 8 3 20 0 tgifarrowtip
closepath fill
grestore
0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
460 231 moveto (Reg) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
360 231 moveto (Xor) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
288 199 moveto (a) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
524 215 moveto (b) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
404 215 moveto (p) tgifcentertext show
grestore

grestore
tgifsavedpage restore
end
%%EndDocument
@endspecial 245 637 a Fq(The)13 b Fe(val)21 b(p)h(=)13 b Fk(:)7
b(:)g(:)e Fq(declaration)13 b(in)o(tro)q(duces)h(an)e(in)o(ternal)h(signal)f
(whose)h(initial)e(v)n(alue)183 687 y(is)i Fe(false)p Fq(.)245
736 y(T)m(able)d(1)g(summarizes)f(the)i(b)q(eha)o(vioral)f(constructs)i(of)e
(HML.)g(W)m(e)g(ha)o(v)o(e)h(implemen)o(ted)183 786 y(a)18
b(simple)f(sim)o(ulator)f(whic)o(h)i(allo)o(ws)g(HML)g(b)q(eha)o(vioral)g
(descriptions)h(to)g(b)q(e)g(executed)183 836 y(in)o(teractiv)o(ely)d({)g
(indeed,)h(all)f(the)h(descriptions)h(in)e(this)h(section)g(w)o(ere)h(dev)o
(elop)q(ed)f(with)183 886 y(the)d(aid)f(of)h(the)g(sim)o(ulator.)p
386 981 1048 2 v 385 1026 2 46 v 398 1012 a Fc(\013)423 997
y Fo(=)461 1012 y Fd(signal)p 589 1026 V 15 w Fn(T)o(yp)q(e)f(of)g(signals)i
(ha)o(ving)g(v)n(alues)f(of)f(equalit)o(y)i(t)o(yp)q(e)e Fc(\013)1402
997 y Fo(=)p 1432 1026 V 385 1072 V 413 1058 a Fd(signal)d
Fc(v)p 589 1072 V 34 w Fn(A)i(signal)j(initial)q(ly)h(ha)o(ving)f(the)e(v)n
(alue)h Fc(v)p 1432 1072 V 385 1117 V 463 1104 a Fd($)e Fc(s)p
589 1117 V 83 w Fn(The)h(curren)o(t)g(v)n(alue)h(of)f(signal)i
Fc(s)p 1432 1117 V 385 1163 V 437 1149 a(s)d Fd(==)g Fc(v)p
589 1163 V 58 w Fn(Com)o(binational)k(assignmen)o(t)p 1432
1163 V 385 1209 V 437 1195 a Fc(s)c Fd(<-)g Fc(v)p 589 1209
V 58 w Fn(Register)i(assignmen)o(t)p 1432 1209 V 385 1254 V
410 1241 a Fd(behavior)p 589 1254 V 26 w Fn(T)o(yp)q(e)f(of)g(b)q(eha)o
(viors)p 1432 1254 V 385 1300 V 392 1286 a Fd(behavior)c Fc(f)p
589 1300 V 16 w Fn(Beha)o(vior)14 b(constructor)p 1432 1300
V 385 1346 V 422 1332 a Fc(b)438 1336 y Fo(1)468 1332 y Fd(||)e
Fc(b)536 1336 y Fo(2)p 589 1346 V 596 1332 a Fn(Beha)o(vioral)j(comp)q
(osition)p 1432 1346 V 386 1347 1048 2 v 605 1419 a Fm(T)l(able)f(1.)f
Fn(Hardw)o(are)h(ML)f(Constructs)183 1654 y Fh(3.2)47 b(Beha)o(vioral)14
b(Description)e(of)j(the)g(Lev)o(el)g(2)h(Algorithm)183 1734
y Fq(It)e(is)g(straigh)o(tforw)o(ard)g(to)g(translate)h(the)f
Fj(L)888 1740 y Fp(2)921 1734 y Fq(algorithm)d(from)i(Standard)h(ML)g(to)h
(Hard-)183 1784 y(w)o(are)g(ML.)g(The)h(state)h(of)e(the)h(computation)e(is)h
(main)o(tained)e(in)j(the)g(externally)f(visible)183 1834 y(signal)c
Fe(YShift)h Fq(and)g(the)h(in)o(ternal)g(signals)f Fe(DiffX)f
Fq(and)i Fe(B)p Fq(.)f(These)h(signals)f(corresp)q(ond)j(to)183
1884 y Fe(yshift)p Fq(,)9 b Fe(diffx)h Fq(and)h Fe(b)g Fq(in)g(the)g
Fj(L)710 1890 y Fp(2)740 1884 y Fq(algorithm)d(and)j(are)h(capitalized)f(to)g
(distinguish)f(them)183 1934 y(as)j(HML)g(signals.)g(F)m(or)g(concreteness,)j
(w)o(e)d(stipulate)h(that)f(w)o(e)g(are)h(computing)e(an)h(eigh)o(t-)183
1983 y(bit)i(ro)q(ot)h(\()p Fe(n)g Fq(=)f(8)h(in)f(the)i Fj(L)631
1989 y Fp(2)665 1983 y Fq(algorithm\),)c(and)j(so)g(the)h Fe(YShift)e
Fq(and)h Fe(B)f Fq(signals)h(require)183 2033 y(16)h(bits.)h
Fe(DiffX)e Fq(requires)k(17)d(bits:)h(16)f(bits)h(to)g(hold)f(the)i(initial)d
(\(p)q(ositiv)o(e\))i(radicand)183 2083 y(and)f(one)h(bit)g(to)g(hold)f(the)h
(sign,)g(whic)o(h)f(is)h(imp)q(ortan)o(t)e(in)i(the)g(in)o(termediate)f
(calcula-)183 2133 y(tions.)f(W)m(e)g(use)i(HML's)f(register)h(assignmen)o(t)
e(op)q(erator)h Fe(<-)g Fq(to)g(explicitly)e(up)q(date)j(the)183
2183 y(state)f(in)e(eac)o(h)i(computation)d(step.)j(The)f Fe(\045)g
Fq(c)o(haracters)i(preceding)f(n)o(umeric)f(constan)o(ts)183
2232 y(are)f(constructors)i(for)d(an)g(abstract)i(data)f(t)o(yp)q(e)g
Fe(num)p Fq(.)e(The)j(usual)e(arithmetic)g(op)q(erators)183
2282 y(are)h(de\014ned)h(on)f(this)g(abstract)h(t)o(yp)q(e.)f(W)m(e)g(are)g
(th)o(us)h(able)f(to)g(sim)o(ulate)e(our)i(description)183
2332 y(using)10 b(un)o(b)q(ounded)i(in)o(tegers,)f(b)q(ounded)h(in)o(tegers,)
f(and)g(bit)f(v)o(ectors)i(simply)d(b)o(y)i(pro)o(viding)183
2382 y(appropriate)k(implemen)o(tati)o(ons)e(of)h(the)i(t)o(yp)q(e)f(and)g
(op)q(erators.)h(The)f(co)q(de)h(b)q(elo)o(w)f(sho)o(ws)183
2432 y(the)h(HML)f(represen)o(tation)i(of)e(the)h Fj(L)790
2438 y Fp(2)824 2432 y Fq(algorithm.)c(Tw)o(o)j(in)o(ternal)g(signals)g(are)h
(de\014ned,)p eop
%%Page: 12 12
bop 340 194 a Fq(and)12 b(the)h(b)q(eha)o(vior)e(is)h(pac)o(k)n(aged)g
(within)f(a)h(function)f(declaration.)h(In)f(the)i(future)g(w)o(e)f(will)340
244 y(omit)h(sho)o(wing)h(the)i(function)e(declaration)g(and)h(declarations)g
(of)f(in)o(ternal)g(signals;)g(it)g(is)340 293 y(understo)q(o)q(d)i(that)d
(all)g(signals)g(except)j Fe(Init)p Fq(,)c Fe(XIn)p Fq(,)h
Fe(YShift)p Fq(,)f(and)i Fe(Done)f Fq(are)h(in)o(ternal.)419
375 y Fd(val)k(initb)g(=)h(\04516384)272 b(\(*)19 b(0x4000)f(*\))419
466 y(fun)g(sqrt)g(\(Init,)g(XIn,)g(YShift,)f(Done\))g(=)497
512 y(let)576 557 y(\(*)i(Internal)d(registers)g(*\))576 603
y(val)i(DiffX)g(=)h(signal)e(\(\0450\))576 649 y(val)h(B)h(=)h(signal)d
(\(\0450\))497 694 y(in)576 740 y(behavior)576 786 y(\(fn)h(\(\))h(=>)595
831 y(\(if)g($Init)f(then)693 877 y(\(DiffX)g(<-)h($XIn;)713
922 y(YShift)e(<-)i(\0450;)713 968 y(B)g(<-)g(initb;)713 1014
y(Done)f(<-)h(false\))615 1059 y(else)693 1105 y(\(if)g($DiffX)e(=)i(\0450)g
(then)792 1151 y(\(DiffX)e(<-)i($DiffX;)811 1196 y(YShift)e(<-)i($YShift)e
(div)i(\0452;)811 1242 y(B)g(<-)g($B)g(div)f(\0454\))713 1288
y(else)g(if)h($DiffX)e(>)i(\0450)g(then)792 1333 y(\(DiffX)e(<-)i($DiffX)e(-)
i($YShift)e(-)i($B;)811 1379 y(YShift)e(<-)i(\($YShift)e(+)i(\0452)g(*)g
($B\))g(div)f(\0452;)811 1425 y(B)h(<-)g($B)g(div)f(\0454\))713
1470 y(else)g(\(*)h($DiffX)e(<)i(\0450)g(*\))792 1516 y(\(DiffX)e(<-)i
($DiffX)e(+)i($YShift)e(-)i($B;)811 1562 y(YShift)e(<-)i(\($YShift)e(-)i
(\0452)g(*)g($B\))g(div)f(\0452;)811 1607 y(B)h(<-)g($B)g(div)f(\0454\)\);)
713 1653 y(Done)g(<-)h($B)g(sub)f(0\)\))497 1699 y(end)403
1784 y Fq(In)c(the)g(SML)h(description)f(of)g(the)g(algorithm,)d(some)j
(elemen)o(ts)f(of)h(the)h(con)o(trol)e(state)340 1834 y(are)i(implicit.)c(In)
j(particular,)g(the)h(initiation)d(of)h(the)i(algorithm)d(\(calling)h
Fe(sqrt)p Fq(\))g(and)h(its)340 1884 y(termination)e(\(it)i(returning)g(a)f
(v)n(alue\))g(are)h(handled)g(b)o(y)f(the)i(SML)e(in)o(terpreter.)i(Because)
340 1934 y(hardw)o(are)h(is)e(free)i(running)e(there)i(is)f(no)g(built-in)e
(notion)h(of)g(initiation)f(or)i(termination)340 1983 y(of)e(the)g
(algorithm.)d(It)j(is)g(therefore)h(necessary)h(to)d(mak)o(e)g(explicit)g
(pro)o(vision)g(to)h(initialize)340 2033 y(the)20 b(state)f(registers)h(at)e
(the)i(b)q(eginning)e(of)g(the)h(algorithm)d(and)i(to)g(detect)j(when)e(the)
340 2083 y(algorithm)12 b(has)i(terminated.)403 2133 y(Initialization)g(is)i
(easy:)g(the)h Fe(diffx)p Fq(,)e Fe(yshift)p Fq(,)f(and)j Fe(b)f
Fq(registers)i(are)e(assigned)h(their)340 2183 y(initial)12
b(v)n(alues)i(when)g(the)h Fe(init)e Fq(signal)g(is)g(high.)403
2232 y(In)d(computing)f(an)h(eigh)o(t-bit)g(ro)q(ot,)g(the)h
Fj(L)1065 2238 y Fp(2)1094 2232 y Fq(algorithm)d(terminates)i(after)h(sev)o
(en)g(itera-)340 2282 y(tions)f(of)g(its)g(lo)q(op.)e(An)i(e\016cien)o(t)h(w)
o(a)o(y)e(to)h(detect)h(termination)e(of)g(the)i(hardw)o(are)f(algorithm)340
2332 y(mak)o(es)k(use)i(of)e(some)g(kno)o(wledge)g(of)h(the)g(high)f(lev)o
(el)h(algorithm.)c(An)k(informal)d(analysis)340 2382 y(of)i(the)g
Fj(L)488 2388 y Fp(2)520 2382 y Fq(algorithm)d(rev)o(eals)j(that)g
Fe(b)g Fq(con)o(tains)f(a)h(single)f(bit,)g(shifted)h(righ)o(t)f(t)o(w)o(o)h
(places)340 2432 y(in)e(eac)o(h)h(cycle,)f(and)g(that)g(the)h(least)f
(signi\014can)o(t)g(bit)g(of)f Fe(b)h Fq(is)g(set)h(during)f(the)h(execution)
g(of)p eop
%%Page: 13 13
bop 183 194 a Fq(the)13 b(last)f(iteration.)g(Consequen)o(tly)m(,)g(the)h
Fe(done)e Fq(signal)h(is)g(generated)i(b)o(y)e(testing)h(whether)183
244 y(the)h(least)f(signi\014can)o(t)g(bit)h(of)e Fe(b)i Fq(is)f(set)h(\(the)
h(expression)f Fe($b)22 b(sub)f(0)13 b Fq(selects)i(the)f(lsb)g(of)f
Fe(b)p Fq(\))183 293 y(and)g(dela)o(ying)f(the)i(result)g(of)e(the)i(test)h
(b)o(y)e(one)g(cycle.)h Fe(done)e Fq(is)h(therefore)i(set)f(during)f(the)183
343 y(clo)q(c)o(k)d(cycle)i(follo)o(wing)c(the)j(\014nal)g(iteration.)e(T)m
(o)h(justify)h(this)f(analysis,)g(w)o(e)h(m)o(ust)f(formally)183
393 y(pro)o(v)o(e)k(that)g(the)g(follo)o(wing)d(is)j(an)g(in)o(v)n(arian)o(t)
e(of)h(the)i Fj(L)1053 399 y Fp(2)1085 393 y Fq(algorithm:)711
518 y(\()p Fe(i)d Fq(=)g(1\))f Fj( )-7 b(!)11 b Fq(\()p Fe(b)979
529 y(0)1014 518 y Fq(=)h(1\))183 675 y Fh(3.3)47 b(P)o(artitioni)o(n)o(g)13
b(in)o(to)h(Register)g(Assignmen)o(t)o(s)183 792 y Fq(Our)g(second)h
(transformation)d(step)i(is)g(a)f(simple)f(one:)i(w)o(e)g(transform)e(the)j
(HML)e(v)o(ersion)183 841 y(of)f(the)j Fj(L)330 847 y Fp(2)361
841 y Fq(algorithm)c(in)o(to)i(a)g(set)h(of)f(register)i(assignmen)o(ts.)d
(The)i(goal)e(of)h(this)g(transfor-)183 891 y(mation)g(is)i(to)g(ensure)j
(that)d(the)h(con)o(trol)f(state)i(of)d(the)i(algorithm)d(is)i(made)g
(completely)183 941 y(explicit)e(in)h(terms)f(of)g(HML)h(signals.)245
997 y(W)m(e)i(mak)o(e)f(use)i(of)f(theorems)h(ab)q(out)f(the)i(seman)o(tics)e
(of)g(HML)g(to)h(justify)e(transfor-)183 1047 y(mations)j(of)i(the)h
Fe(behavior)e Fq(construct.)j(First,)e Fe(if)g Fq(distributes)i(o)o(v)o(er)e
(the)h(sequen)o(tial)183 1097 y(comp)q(osition)11 b(of)h(signal)g(assignmen)o
(t)g(statemen)o(ts:)h(if)f Fk(P)18 b Fq(and)13 b Fk(Q)f Fq(are)i(sequences)h
(of)e(signal)183 1147 y(assignmen)o(ts,)f(then)p 480 1262 329
2 v 480 1466 2 205 v 494 1297 a Fd(if)19 b Fc(e)g Fd(then)554
1347 y(\()p Fc(s)g Fd(<-)g Fc(a)p Fd(;)g Fc(P)5 b Fd(\))494
1397 y(else)554 1447 y(\()p Fc(s)19 b Fd(<-)g Fc(b)p Fd(;)g
Fc(Q)p Fd(\))p 806 1466 V 480 1468 329 2 v 849 1375 a Fq(=)p
923 1237 404 2 v 923 1491 2 255 v 937 1272 a Fd(if)g Fc(e)h
Fd(then)997 1322 y Fc(s)g Fd(<-)f Fc(a)937 1372 y Fd(else)997
1422 y Fc(s)h Fd(<-)f Fc(b)p Fd(;)937 1472 y(if)g Fc(e)h Fd(then)e
Fc(P)24 b Fd(else)18 b Fc(Q)p 1325 1491 V 923 1493 404 2 v
245 1571 a Fq(W)m(e)13 b(also)g(use)i(a)e(rule)h(whic)o(h)g(allo)o(ws)e(us)i
(to)g(push)g Fe(if)f Fq(in)o(to)g(the)i(righ)o(t)e(hand)h(side)g(of)f(an)183
1620 y(assignmen)o(t:)p 487 1711 239 2 v 487 1908 2 198 v 501
1746 a Fd(if)19 b Fc(e)h Fd(then)561 1796 y Fc(s)g Fd(<-)f
Fc(a)501 1846 y Fd(else)561 1895 y Fc(s)h Fd(<-)f Fc(b)p 724
1908 V 487 1910 239 2 v 767 1820 a Fq(=)p 841 1784 479 2 v
841 1835 2 51 v 855 1823 a Fc(s)g Fd(<-)g(if)g Fc(e)h Fd(then)e
Fc(a)i Fd(else)e Fc(b)p 1317 1835 V 841 1837 479 2 v 245 1987
a Fq(Rep)q(eatedly)d(applying)e(these)j(t)o(w)o(o)e(rules)h(allo)o(ws)e(us)i
(to)f(decomp)q(ose)h(our)f(HML)h(co)q(de)183 2037 y(in)o(to)f(a)g(set)i(of)e
(assignmen)o(ts)g(to)h(individual)e(registers.)j(The)f(register)h(assignmen)o
(ts)e(after)183 2087 y(this)g(transformation)e(are)323 2123
y Fd(DiffX)38 b(<-)19 b(\(if)f($Init)g(then)618 2169 y($XIn)539
2215 y(else)g(if)h($DiffX)e(=)j(\0450)e(then)618 2260 y($DiffX)539
2306 y(else)g(if)h($DiffX)e(>)j(\0450)e(then)618 2352 y($DiffX)f(-)i($YShift)
e(-)i($B)539 2397 y(else)f(\(*)h($DiffX)e(<)j(\0450)e(*\))618
2443 y($DiffX)f(+)i($YShift)e(-)i($B\);)p eop
%%Page: 14 14
bop 481 178 a Fd(YShift)17 b(<-)i(\(if)g($Init)e(then)775 224
y(\0450)697 269 y(else)h(if)h($DiffX)e(=)i(\0450)g(then)775
315 y($YShift)e(div)i(\0452)697 361 y(else)f(if)h($DiffX)e(>)i(\0450)g(then)
775 406 y(\($YShift)e(+)i(\0452)g(*)g($B\))g(div)f(\0452)697
452 y(else)g(\(*)h($DiffX)e(<)i(\0450)g(*\))775 498 y(\($YShift)e(-)i(\0452)g
(*)g($B\))g(div)f(\0452\);)481 589 y(B)117 b(<-)19 b(\(if)g($Init)e(then)h
(initb)g(else)g($B)h(div)g(\0454\);)481 635 y(Done)57 b(<-)19
b(\(if)g($Init)e(then)h(false)g(else)g($B)h(sub)g(0\);)340
761 y Fh(3.4)48 b(Simplif)o(yin)o(g)13 b(the)i(Computation)340
857 y Fq(Our)f(third)f(transformation)f(step)i(simpli\014es)e(the)i
(computation)d(of)i Fe(DiffX)f Fq(and)h Fe(YShift)p Fq(.)340
907 y(W)m(e)g(b)q(egin)f(b)o(y)h(observing)g(t)o(w)o(o)f(facts)h(ab)q(out)g
(the)g Fj(L)1154 913 y Fp(2)1185 907 y Fq(algorithm:)d(if)i
Fe(DiffX)f Fq(ev)o(er)j(b)q(ecomes)340 957 y(zero)k(the)f(radicand)g(has)f
(an)h(exact)g(ro)q(ot,)f(and)h(once)g Fe(DiffX)f Fq(b)q(ecomes)h(zero)g(it)f
(remains)340 1007 y(zero)g(for)f(the)h(rest)g(of)e(the)i(computation.)d(T)m
(o)h(simplify)f(the)i(computation)f(of)g Fe(DiffX)g Fq(w)o(e)340
1057 y(in)o(tro)q(duce)20 b(an)e(in)o(ternal)g(signal)f Fe(Exact)h
Fq(whic)o(h)g(is)g(set)i(if)d Fe(DiffX)h Fq(b)q(ecomes)g(zero)i(in)e(the)340
1107 y(course)e(of)d(the)h(computation.)403 1155 y(If)k Fe(Exact)g
Fq(b)q(ecomes)h(set,)h(the)f(v)n(alue)f(of)h Fe(DiffX)f Fq(is)g(not)h(used)h
(in)e(the)i(computation)340 1201 y(of)f Fe(YShift)f Fq(\(subsequen)o(t)j(up)q
(dates)g(of)d Fe(YShift)g Fq(in)o(v)o(olv)o(e)g(only)h(division)f(b)o(y)h
(2\).)f Fe(DiffX)340 1246 y Fq(b)q(ecomes)h(a)f(don't)g(care,)g(and)g(w)o(e)h
(can)f(merge)g(the)h Fe($DiffX)h(=)i(\0450)c Fq(and)g Fe($DiffX)i(>)i(\0450)
340 1292 y Fq(branc)o(hes.)10 b(W)m(e)f(also)g(replace)h Fe($DiffX)21
b(=)g(\0450)9 b Fq(with)g Fe($Exact)f Fq(in)h(the)h(assignmen)o(t)e(to)h
Fe(YShift)p Fq(,)340 1338 y(and)22 b(c)o(hange)g(the)g Fe($DiffX)f(>)g(\0450)
h Fq(comparisons)e(to)i Fe($DiffX)f(>=)g(\0450)g Fq(\(note)h(that)g(this)340
1383 y(branc)o(h)e(of)f(the)g(if)g(is)g(not)g(executed)i(when)e
Fe($DiffX)i(=)h(\0450)p Fq(,)c(b)q(ecause)j Fe(Exact)d Fq(is)h(set)h(in)340
1429 y(this)14 b(case\).)419 1518 y Fd(ExactReg)i(<-)j(\(if)g($init)e(then)h
(false)g(else)g($Exact\);)419 1564 y(Exact)76 b(==)19 b(\($DiffX)e(=)i(\0450)
g(orelse)e($ExactReg\);)419 1655 y(DiffX)76 b(<-)19 b(\(if)g($Init)e(then)752
1701 y($XIn)674 1747 y(else)h(if)h($DiffX)e(>=)i(\0450)g(then)752
1792 y($DiffX)f(-)h($YShift)e(-)i($B)674 1838 y(else)f(\(*)h($DiffX)e(<)i
(\0450)g(*\))752 1884 y($DiffX)f(+)h($YShift)e(-)i($B\);)419
1975 y(YShift)56 b(<-)19 b(\(if)g($Init)e(then)752 2021 y(\0450)674
2066 y(else)h(if)h($Exact)e(then)752 2112 y($YShift)g(div)i(\0452)674
2158 y(else)f(if)h($DiffX)e(>=)i(\0450)g(then)752 2203 y(\($YShift)e(+)i
(\0452)g(*)g($B\))g(div)f(\0452)674 2249 y(else)g(\(*)h($DiffX)e(<)i(\0450)g
(*\))752 2295 y(\($YShift)e(-)i(\0452)g(*)g($B\))g(div)f(\0452\);)419
2386 y(B)156 b(<-)19 b(\(if)g($Init)e(then)h(initb)g(else)g($B)h(div)f
(\0454\);)419 2432 y(Done)96 b(<-)19 b(\(if)g($Init)e(then)h(false)g(else)g
($B)h(sub)f(0\);)p eop
%%Page: 15 15
bop 245 194 a Fq(Simplifyi)o(ng)11 b(the)k(algorithm)c(in)j(this)g(w)o(a)o(y)
f(requires)i(pro)o(ving)f(a)f(history)h(prop)q(ert)o(y)h(of)183
244 y(the)j(computation)d(of)i Fe(DiffX)p Fq(.)f(Using)h($)p
Fe(DiffX)o Fq(\()p Fk(n)p Fq(\))g(to)h(denote)g(the)g(v)n(alue)f(of)g(the)h
(signal)183 293 y Fe(DiffX)12 b Fq(in)i(the)g Fk(n)p Fq('th)g(computation)e
(cycle,)i(w)o(e)g(state)h(the)f(prop)q(ert)o(y)h(as:)449 370
y Fj(8)p Fk(t)d Fq(:)f Fk(t)h Fj(\025)f Fq(0)p Fk(:)p Fq(\($)p
Fe(DiffX)o Fq(\()p Fk(t)p Fq(\))g(=)h(0\))g(=)-7 b Fj(\))11
b Fq(\($)p Fe(DiffX)o Fq(\()p Fk(t)e Fq(+)h(1\))h(=)h(0\))245
448 y(Next,)i(w)o(e)h(note)f(that)h(the)g(condition)e Fe($DiffX)21
b(>=)g(0)14 b Fq(can)h(b)q(e)g(detected)h(b)o(y)e(negating)183
497 y Fe(DiffX)p Fq('s)h(sign)h(bit.)f(W)m(e)h(in)o(tro)q(duce)h(the)g
(negated)g(sign)f(bit)g(as)g(the)h(in)o(termediate)f(signal)183
547 y Fe(ADD)9 b Fq(\(to)h(sp)q(ecify)h(that)g(w)o(e)f(are)h(adding)e(to)h
Fe(YShift)f Fq(in)h(the)h(curren)o(t)g(iteration\))f(and)h(rewrite)183
597 y(the)j(conditions)g(in)f(the)i(assignmen)o(ts)e(to)h Fe(DiffX)e
Fq(and)i Fe(Yshift)f Fq(to)g(obtain:)261 674 y Fd(ADD)117 b(==)18
b(not)h(\($DiffX)e(sub)h(16\);)261 766 y(ExactReg)f(<-)h(\(if)h($init)f(then)
g(false)f(else)h($Exact\);)261 811 y(Exact)77 b(==)18 b(\($DiffX)f(=)j(\0450)
e(orelse)g($ExactReg)o(\);)261 903 y(DiffX)77 b(<-)18 b(\(if)h($Init)f(then)
595 948 y($XIn)516 994 y(else)g(if)h($ADD)f(then)595 1039 y($DiffX)f(-)i
($YShift)e(-)i($B)516 1085 y(else)f($DiffX)f(+)j($YShift)d(-)i($B\);)261
1176 y(YShift)57 b(<-)18 b(\(if)h($Init)f(then)595 1222 y(\0450)516
1268 y(else)g(if)h($Exact)e(then)595 1313 y($YShift)f(div)j(\0452)516
1359 y(else)f(if)h($ADD)f(then)595 1405 y(\($YShift)e(+)j(\0452)g(*)g($B\))g
(div)f(\0452)516 1450 y(else)g(\($YShift)f(-)i(\0452)g(*)g($B\))f(div)h
(\0452\);)261 1542 y(B)157 b(<-)18 b(\(if)h($Init)f(then)g(initb)f(else)h($B)
h(div)g(\0454\);)261 1633 y(Done)97 b(<-)18 b(\(if)h($Init)f(then)g(false)f
(else)h($B)h(sub)g(0\);)183 1750 y Fh(3.5)47 b(P)o(artitioni)o(n)o(g)13
b(in)o(to)h(F)l(unctional)f(Blo)q(c)o(ks)183 1825 y Fq(The)d(fourth)g
(transformation)d(separates)12 b(those)e(computations)f(whic)o(h)g(can)h(b)q
(e)h(p)q(erformed)183 1874 y(com)o(binational)o(ly)16 b(from)h(those)j(whic)o
(h)f(require)h(sequen)o(tial)f(elemen)o(ts,)g(and)g(partitions)183
1924 y(the)14 b(computations)e(in)o(to)g(simple)g(functional)h(units.)g(The)h
(transformation)d(is)j(motiv)n(ated)183 1974 y(b)o(y)i(our)h(desire)g(to)g
(implem)o(en)o(t)d(the)k(algorithm)c(b)o(y)i(an)g(in)o(terconnection)i(of)e
(lo)o(w)o(er)g(lev)o(el)183 2024 y(blo)q(c)o(ks;)9 b(the)i(transformation)e
(pro)q(cess)j(is)e(guided)g(b)o(y)g(what)g(primitiv)o(es)e(w)o(e)j(ha)o(v)o
(e)f(a)o(v)n(ailable)183 2074 y(in)18 b(our)h(library)m(.)e(F)m(or)h
(example,)f(our)i(library)f(con)o(tains)h(suc)o(h)h(primitiv)o(es)d(as)h
(registers,)183 2123 y(m)o(ultiplexers,)12 b(and)h(adders,)i(so)f(it)f(is)h
(sensible)h(to)e(transform)p 312 2229 524 2 v 312 2277 2 48
v 326 2264 a Fd(s)19 b(<-)g(if)g(x)g(then)f(a)h(else)f(b+c)p
833 2277 V 312 2279 524 2 v 877 2263 a Fj(\000)-7 b(!)p 985
2179 V 985 2326 2 148 v 999 2214 a Fd(s)19 b(<-)g(s';)999 2264
y(s')g(==)g(if)g(x)g(then)f(a)h(else)f(d;)999 2314 y(d)h(==)g(b)g(+)h(c)p
1507 2326 V 985 2328 524 2 v 245 2382 a Fq(This)15 b(particular)g(example)f
(is)i(a)f(consequence)i(of)e(some)g(more)f(general)i(rules)g(whic)o(h)183
2432 y(are)e(justi\014ed)g(as)g(b)q(efore)h(b)o(y)e(app)q(ealing)g(to)h(the)h
(seman)o(tics)e(of)g(HML.)p eop
%%Page: 16 16
bop 511 202 474 2 v 511 252 2 51 v 525 240 a Fc(s)20 b Fd(==)f(if)g
Fc(e)g Fd(then)f Fc(a)i Fd(else)e Fc(b)p 983 252 V 511 254
474 2 v 42 w Fq(=)p 1086 154 539 2 v 1086 305 2 152 v 1100
189 a Fc(s)i Fd(==)f(if)f Fc(e)i Fd(then)e Fc(s)1409 193 y
Fo(1)1446 189 y Fd(else)g Fc(s)1562 193 y Fo(2)1579 189 y Fd(;)1100
239 y Fc(s)1118 243 y Fo(1)1155 239 y Fd(==)h Fc(a)p Fd(;)1100
289 y Fc(s)1118 293 y Fo(2)1155 289 y Fd(==)g Fc(b)p 1623 305
V 1086 307 539 2 v 403 398 a Fq(The)11 b(assignmen)o(ts)g(resulting)g(from)e
(this)i(transformation)f(are)h(sho)o(wn)g(b)q(elo)o(w.)g Fe(DiffX')340
448 y Fq(can)17 b(b)q(e)h(computed)e(b)o(y)h(a)f(m)o(ultiplexer.)f
Fe(DiffXTmp)g Fq(and)h Fe(Delta)g Fq(can)h(b)q(e)g(computed)g(b)o(y)340
498 y(adder/subtracters.)24 b(The)e Fe(YShift)e Fq(register)i(can)g(b)q(e)g
(con)o(v)o(enien)o(tly)f(implemen)o(ted)e(as)340 548 y(a)g(shift)f(register)i
(whic)o(h)f(shifts)g(when)g Fe(Exact)p Fq('s)f(v)n(alue)g(is)h(true,)g(and)g
(loads)f(otherwise.)340 598 y Fe(YShift')12 b Fq(can)i(b)q(e)g(computed)f(b)o
(y)g(a)g(m)o(ultiplexer;)e Fe(YShiftTmp)h Fq(b)o(y)h(an)g(adder/subtracter)
340 647 y({)h(m)o(ultiplicatio)o(n)d(and)j(division)f(b)o(y)g(2)h(are)g
(simply)e(wired)i(shifts.)419 790 y Fd(ADD)136 b(==)19 b(not)f(\($DiffX)f
(sub)i(16\);)419 881 y(ExactReg)36 b(<-)19 b(\(if)f($init)g(then)g(false)g
(else)g($Exact\);)419 927 y(Exact)96 b(==)19 b(\($EqZero)d(orelse)i
($ExactReg)o(\);)419 973 y(EqZero)76 b(==)19 b($DiffX)e(=)i(\0450;)419
1064 y(DiffX)96 b(<-)19 b($DiffX';)419 1110 y(DiffX')76 b(==)19
b(\(if)f($Init)g(then)g($XIn)g(else)g($DiffXTmp\))o(;)419 1155
y(DiffXTmp)36 b(==)19 b(\(if)f($ADD)g(then)g($DiffX)g(-)h($Delta)e(else)h
($DiffX)g(+)h($Delta\);)419 1201 y(Delta)96 b(==)19 b(\(if)f($ADD)g(then)g
($YShift)f(+)j($B)e(else)g($YShift)f(-)j($B\);)419 1292 y(YShift)76
b(<-)19 b(\(if)f($Exact)g(then)g($YShift)f(div)h(\0452)h(else)f($YShift'\))o
(;)419 1338 y(YShift')56 b(==)19 b(\(if)f($Init)g(then)g(\0450)h(else)f
($YShiftTm)o(p\);)419 1384 y(YShiftTmp)e(==)j(\(if)f($ADD)g(then)772
1429 y(\($YShift)e(+)k(\0452)e(*)i($B\))e(div)h(\0452)693 1475
y(else)772 1521 y(\($YShift)d(-)k(\0452)e(*)i($B\))e(div)h(\0452\);)419
1612 y(B)176 b(<-)19 b(\(if)f($Init)g(then)g(initb)g(else)g($B)h(div)f
(\0454\);)419 1703 y(Done)116 b(<-)19 b(\(if)f($Init)g(then)g(false)g(else)g
($B)h(sub)f(0\);)340 1883 y Fh(3.6)48 b(Structural)13 b(Descriptio)o(n)g(of)i
(the)g(Lev)o(el)g(2)g(Algorithm)340 2022 y Fq(The)c(\014fth,)e(and)h
(\014nal,)f(transformation)f(step)j(is)e(the)i(substitution)f(of)f(lo)o(w)o
(er-lev)o(el)g(mo)q(dules)340 2072 y(for)i(the)h(register)g(and)f(com)o
(binational)d(assignmen)o(ts;)i(the)i(result)g(is)f(a)g(structural)h
(descrip-)340 2122 y(tion)k(of)f(the)h(in)o(teger)g(square)h(ro)q(ot)e
(algorithm)e(whic)o(h)j(can)g(readily)f(b)q(e)h(implemen)o(ted)e(in)340
2172 y(hardw)o(are,)g(as)g(sho)o(wn)g(in)f(Figure)g(1.)403
2232 y Fe(ShiftReg4)c Fq(is)i(a)f(shift)h(register)h(whic)o(h)f(shifts)g(its)
g(con)o(ten)o(ts)h(t)o(w)o(o)f(bits)g(p)q(er)h(clo)q(c)o(k)f(cycle;)340
2282 y(the)k Fe(Done)f Fq(signal)f(is)h(simply)e(its)i(shift)g(output.)g
Fe(ShiftReg2)p Fq(,)e Fe(Mux)p Fq(,)h Fe(AddSub)g Fq(and)h
Fe(Reg)g Fq(are)340 2332 y(a)f(shift)h(register,)g(m)o(ultiplexer,)d
(adder/subtracter)k(and)f(register,)g(resp)q(ectiv)o(ely)m(.)g
Fe(SubAdd)340 2382 y Fq(is)j(an)f(adder/subtracter,)i(but)f(the)g(sense)h(of)
e(its)h(mo)q(de)e(bit)h(mak)o(es)g(it)g(the)h(opp)q(osite)g(of)340
2432 y Fe(AddSub)p Fq(.)c(The)h Fe(Hold)f Fq(elemen)o(t)g(has)h(the)h(follo)o
(wing)c(substructure:)p eop
%%Page: 17 17
bop 261 220 a Fd(Hold)116 b({exact=Exa)o(ct,)16 b(zero=EqZe)o(ro,)g
(rst=Init})349 b(||)261 265 y(IsZero)76 b({out=EqZer)o(o,)16
b(inp=DiffX})604 b(||)261 311 y(Reg)136 b({out=DiffX)o(,)17
b(inp=DiffX)o('})604 b(||)261 357 y(Mux)136 b({out=DiffX)o(',)16
b(in0=XIn,)h(in1=DiffX)o(Tm)o(p,)f(ctl=Init})173 b(||)261 402
y(AddSub)76 b({sum=DiffX)o(Tmp)o(,)16 b(in0=DiffX,)g(in1=Delta,)g(sub=ADD})
173 b(||)261 448 y(Neg)136 b({out=ADD,)16 b(inp=$DiffX)g(sub)j(16})508
b(||)261 494 y(SubAdd)76 b({out=Delta)o(,)17 b(in0=YShif)o(t,)f(in1=B,)h
(add=ADD})291 b(||)261 539 y(ShiftReg2)16 b({out=YShif)o(t,)g(inp=YShift)o
(',)g(shift=Exac)o(t})310 b(||)261 585 y(Mux)136 b({out=YShif)o(t',)16
b(in0=signa)o(l)h(\(\0450\),)477 631 y(in1=YShif)o(tTm)o(p)f(div)j(2,)g
(ctl=Init})447 b(||)261 676 y(SubAdd)76 b({out=YShif)o(tTm)o(p,)16
b(in0=YShift)o(,)g(in1=2)i(*)h(B,)g(sub=ADD})134 b(||)261 722
y(ShiftReg4)16 b({out=B,)h(shiftout=D)o(one)o(,)f(in=signal)g(initb,)i
(shiftbar=)o(Ini)o(t})651 851 y Fm(Fig.)7 b(1.)13 b Fn(Structural)i
(Description)323 987 y Fd(fun)k(Hold)f({exact=ex)o(act)o(,)e(zero=zero,)g
(rst=rst})h(=)402 1033 y(let)480 1079 y(val)i(ExactReg)d(=)j(signal)f(false)
402 1124 y(in)480 1170 y(RegR)g({out=Exact)o(Reg)o(,)f(inp=exac)o(t,)f
(rst=rst})76 b(||)480 1216 y(Or2)38 b({out=Exact)o(,)17 b(in0=zero,)f
(in1=Exact)o(Reg)o(})402 1261 y(end)245 1345 y Fq(There)k(are)f(further)g
(opp)q(ortunities)g(for)g(p)q(erforming)e(optimization)f(in)i(the)i(imple-)
183 1394 y(men)o(tation)15 b(of)h(the)i(lo)o(w)o(er)e(lev)o(el)h(blo)q(c)o
(ks.)f(Analysis)h(of)f(the)i Fj(L)1181 1400 y Fp(2)1216 1394
y Fq(algorithm)c(rev)o(eals)j(that)183 1444 y Fe(Delta)e Fq(is)h(alw)o(a)o
(ys)f(p)q(ositiv)o(e,)h(so)g(w)o(e)g(do)g(not)g(need)i(its)e(sign)g(bit.)f
(This)h(prop)q(ert)o(y)h(can)g(b)q(e)183 1494 y(used)g(to)g(sa)o(v)o(e)g(one)
g(bit)g(in)f(the)h Fe(AddSub)f Fq(used)i(to)e(compute)h Fe(Delta)e
Fq({)i(only)f(16)g(bits)h(are)183 1544 y(no)o(w)e(required.)h(One)g(bit)g
(can)f(also)g(b)q(e)i(sa)o(v)o(ed)f(in)f(the)h(implemen)o(tatio)o(n)d(of)i
Fe(SubAdd)p Fq(;)f(the)183 1594 y(v)n(alue)f(of)h(the)h Fe(ADD)f
Fq(signal)g(can)g(b)q(e)h(sho)o(wn)g(to)f(b)q(e)h(iden)o(tical)f(to)h(a)f
(latc)o(hed)g(v)o(ersion)h(of)f(the)183 1643 y(carry)d(output)f(of)g(a)g
(16-bit)g Fe(SubAdd)p Fq(,)e(pro)o(vided)j(the)g(latc)o(h)f(initially)e
(holds)i(the)h(v)n(alue)f Fe(true)p Fq(.)183 1693 y(Figure)15
b(2)g(sho)o(ws)h(a)f(blo)q(c)o(k)g(diagram)e(of)h(the)i(hardw)o(are)g(to)f
(implemen)o(t)e(the)i(square)i(ro)q(ot)183 1743 y(algorithm,)10
b(whic)o(h)k(includes)h(this)e(optimization.)245 1797 y(A)e(n)o(um)o(b)q(er)g
(of)f(other)i(optimizations)d(are)j(not)f(visible)g(in)g(the)g(\014gure.)h
(The)f Fe(ShiftReg4)183 1847 y Fq(can)i(b)q(e)h(implemen)o(ted)d(b)o(y)i(a)g
Fe(ShiftReg2)f Fq(half)g(its)h(width)g(if)g(w)o(e)g(note)h(that)f(ev)o(ery)h
(second)183 1897 y(bit)9 b(of)h Fe(B)g Fq(is)f(alw)o(a)o(ys)g(zero.)i(The)f
(t)o(w)o(o)g Fe(SubAdd)e Fq(blo)q(c)o(ks)j(can)f(eac)o(h)g(b)q(e)h(implemen)o
(ted)d(with)h(only)183 1947 y(a)k(few)h(AND)g(and)g(OR)g(gates)g(p)q(er)h
(bit,)e(rather)i(than)f(requiring)f(subtract/add)i(mo)q(dules,)183
1997 y(if)j(w)o(e)h(mak)o(e)e(use)j(of)e(some)g(results)i(concerning)g(the)f
(con)o(ten)o(ts)h(of)e(the)i Fe(B)e Fq(and)h Fe(YShift)183
2046 y Fq(registers.)245 2101 y(T)m(o)13 b(justify)h(these)i(optimizations)11
b(w)o(e)k(are)g(obliged)e(to)h(pro)o(v)o(e)g(that)h(ev)o(ery)g(second)g(bit)
183 2151 y(of)e Fe(B)h Fq(is)f(alw)o(a)o(ys)g(zero:)704 2228
y Fj(8)p Fk(i)e Fq(:)h(0)f Fj(\024)h Fk(i)f(<)h(n)g Fq(:)f
Fj(:)p Fe(B)1031 2234 y Fp(2)p Fg(i)p Fp(+1)183 2319 y Fq(and)i(that)h(the)h
(corresp)q(onding)g(bits)f(of)f Fe(B)g Fq(and)h Fe(YShift)f
Fq(cannot)h(b)q(oth)g(b)q(e)g(set:)623 2432 y Fj(8)p Fk(i)d
Fq(:)g(0)h Fj(\024)g Fk(i)f(<)h Fq(2)p Fk(n:)p Fj(:)p Fq(\()p
Fe(B)964 2438 y Fg(i)986 2432 y Fj(^)d Fe(YShift)1154 2438
y Fg(i)1168 2432 y Fq(\))p eop
%%Page: 18 18
bop 340 1631 a @beginspecial 0 @llx 434 @lly 352 @urx 789 @ury
3520 @rwi @setspecial
%%BeginDocument: chip.eps

/tgifdict 132 dict def


tgifdict begin

/tgif_min_radius
{
} bind def

/tgifellipsedict 6 dict def


tgifellipsedict /mtrx matrix put
/tgifellipse
{ tgifellipsedict begin
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y translate
xrad yrad scale
0 0 1 0 360 arc
savematrix setmatrix
end
} def

/tgifarrowtipdict 8 dict def


tgifarrowtipdict /mtrx matrix put

/tgifarrowtip
{ tgifarrowtipdict begin
/dy exch def
/dx exch def
/h exch def
/w exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y translate
dy dx atan rotate
0 0 moveto
w neg h lineto
w neg h neg lineto
savematrix setmatrix
end
} def

/tgifarcdict 8 dict def


tgifarcdict /mtrx matrix put

/tgifarcn
{ tgifarcdict begin
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y translate
xrad yrad scale
0 0 1 startangle endangle arc
savematrix setmatrix
end
} def

/tgifarc
{ tgifarcdict begin
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y translate
xrad yrad scale
0 0 1 startangle endangle arcn
savematrix setmatrix
end
} def

/tgifsetuserscreendict 22 dict def


tgifsetuserscreendict begin
/tempctm matrix def
/temprot matrix def
/tempscale matrix def

/concatprocs
{ /proc2 exch cvlit def
/proc1 exch cvlit def
/newproc proc1 length proc2 length add array def
newproc 0 proc1 putinterval
newproc proc1 length proc2 putinterval
newproc cvx
} def
/resmatrix matrix def
/findresolution
{ 72 0 resmatrix defaultmatrix dtransform
/yres exch def /xres exch def
xres dup mul yres dup mul add sqrt
} def
end

/tgifsetuserscreen
{ tgifsetuserscreendict begin
/spotfunction exch def
/screenangle exch def
/cellsize exch def

/m tempctm currentmatrix def


/rm screenangle temprot rotate def
/sm cellsize dup tempscale scale def

sm rm m m concatmatrix m concatmatrix pop

1 0 m dtransform /y1 exch def /x1 exch def

/veclength x1 dup mul y1 dup mul add sqrt def


/frequency findresolution veclength div def

/newscreenangle y1 x1 atan def

m 2 get m 1 get mul m 0 get m 3 get mul sub 0 gt

{{neg} /spotfunction load concatprocs


/spotfunction exch def
} if
frequency newscreenangle /spotfunction load setscreen
end
} def

/tgifsetpatterndict 18 dict def


tgifsetpatterndict begin
/bitison
{ /ybit exch def /xbit exch def
/bytevalue bstring ybit bwidth mul xbit 8 idiv add get def

/mask 1 7 xbit 8 mod sub bitshift def


bytevalue mask and 0 ne
} def
end

/tgifbitpatternspotfunction
{ tgifsetpatterndict begin
/y exch def /x exch def

/xindex x 1 add 2 div bpside mul cvi def


/yindex y 1 add 2 div bpside mul cvi def

xindex yindex bitison


{ /onbits onbits 1 add def 1 }
{ /offbits offbits 1 add def 0 }
ifelse
end
} def

/tgifsetpattern
{ tgifsetpatterndict begin
/cellsz exch def
/angle exch def
/bwidth exch def
/bpside exch def
/bstring exch def

/onbits 0 def /offbits 0 def


cellsz angle /tgifbitpatternspotfunction load tgifsetuserscreen
{} settransfer
offbits offbits onbits add div setgray
end
} def

/tgifxpmdict 4 dict def


/tgifbwpicstr 1 string def
/tgifcolorpicstr 3 string def

/tgifsetpixels { tgifxpmdict begin /pixels exch def end } def

/tgifsetpix { tgifxpmdict begin pixels 3 1 roll putinterval end } def

/tgifbwspot
{ tgifxpmdict begin
/index exch def
tgifbwpicstr 0
pixels index 3 mul 3 getinterval aload pop
255 mul .114 mul exch 255 mul .587 mul add exch 255 mul .299 mul add
cvi put
tgifbwpicstr
end
} def

/tgifcolorspot
{ tgifxpmdict begin
/index exch def
pixels index 3 mul 3 getinterval aload pop
255 mul cvi tgifcolorpicstr 2 3 -1 roll put
255 mul cvi tgifcolorpicstr 1 3 -1 roll put
255 mul cvi tgifcolorpicstr 0 3 -1 roll put
tgifcolorpicstr
end
} def

/tgifnewcolorspot
{ tgifxpmdict begin
/index exch def
pixels index 3 mul 3 getinterval aload pop setrgbcolor
end
} def

/tgifcolordict 4 dict def

/colorimage where
{ pop }
{ /colorimage
{ tgifcolordict begin
pop pop pop pop pop
/ih exch def
/iw exch def
/x 0 def
/y 0 def
1 1 ih
{ pop 1 1 iw
{ pop currentfile
tgifbwpicstr readhexstring pop 0 get tgifnewcolorspot
x y moveto 1 0 rlineto 0 1 rlineto -1 0 rlineto
closepath fill
/x x 1 add def
} for
/y y 1 add def
/x 0 def
} for
end
} def
} ifelse

/tgifpatdict 10 dict def

/tgifpatbyte
{ currentdict /retstr get exch
pat i cellsz mod get put
} def

/tgifpatproc
{ 0 1 widthlim {tgifpatbyte} for retstr
/i i 1 add def
} def
/tgifpatfill
{ tgifpatdict begin
/h exch def
/w exch def
/lty exch def
/ltx exch def
/cellsz exch def
/pat exch def

/widthlim w cellsz div cvi 1 sub def


/retstr widthlim 1 add string def
/i 0 def

ltx lty translate


w h true [1 0 0 1 0 0] {tgifpatproc} imagemask
ltx neg lty neg translate
end
} def

/pat1 <ffffffffffffffff> def


/pat2 <0000000000000000> def
/pat3 <8000000008000000> def
/pat4 <8800000022000000> def
/pat5 <8800220088002200> def
/pat6 <8822882288228822> def
/pat7 <aa55aa55aa55aa55> def
/pat8 <77dd77dd77dd77dd> def
/pat9 <77ffddff77ffddff> def
/pat10 <77ffffff77ffffff> def
/pat11 <7fffffff7fffffff> def
/pat12 <8040200002040800> def
/pat13 <40a00000040a0000> def
/pat14 <ff888888ff888888> def
/pat15 <ff808080ff080808> def
/pat16 <f87422478f172271> def
/pat17 <038448300c020101> def
/pat18 <081c22c180010204> def
/pat19 <8080413e080814e3> def
/pat20 <8040201008040201> def
/pat21 <8844221188442211> def
/pat22 <77bbddee77bbddee> def
/pat23 <c1e070381c0e0783> def
/pat24 <7fbfdfeff7fbfdfe> def
/pat25 <3e1f8fc7e3f1f87c> def
/pat26 <0102040810204080> def
/pat27 <1122448811224488> def
/pat28 <eeddbb77eeddbb77> def
/pat29 <83070e1c3870e0c1> def
/pat30 <fefdfbf7efdfbf7f> def
/pat31 <7cf8f1e3c78f1f3e> def

/tgifcentertext { dup stringwidth pop 2 div neg 0 rmoveto } def

/tgifrighttext { dup stringwidth pop neg 0 rmoveto } def

/tgifreencsmalldict 12 dict def


/tgifReEncodeSmall
{ tgifreencsmalldict begin
/newcodesandnames exch def
/newfontname exch def
/basefontname exch def

/basefontdict basefontname findfont def


/newfont basefontdict maxlength dict def

basefontdict
{ exch dup /FID ne
{ dup /Encoding eq
{ exch dup length array copy newfont 3 1 roll put }
{ exch newfont 3 1 roll put }
ifelse
}
{ pop pop }
ifelse
}
forall

newfont /FontName newfontname put


newcodesandnames aload pop

newcodesandnames length 2 idiv


{ newfont /Encoding get 3 1 roll put}
repeat

newfontname newfont definefont pop


end
} def

/tgifgray { 8 1 0 72 300 32 div div tgifsetpattern } bind def

/tgifboxdict 6 dict def


/tgifboxstroke
{ tgifboxdict begin
/pat def /w def /y2 exch def /x2 exch def /y1 exch def /x1 exch def
1.415 setmiterlimit
w 1 eq { w setlinewidth } if
pat pat1 ne pat pat2 ne and { gsave pat tgifgray } if
newpath x1 y1 moveto x2 y1 lineto x2 y2 lineto x1 y2 lineto closepath
pat pat2 eq { 1 setgray stroke 0 setgray } { stroke } ifelse
pat pat1 ne pat pat2 ne and { grestore } if
w 1 eq { 1 setlinewidth } if
1 setmiterlimit
end
} def
/tgifboxfill
{ tgifboxdict begin
/pat def /y2 exch def /x2 exch def /y1 exch def /x1 exch def
pat pat1 ne pat pat2 ne and { gsave pat tgifgray } if
newpath x1 y1 moveto x2 y1 lineto x2 y2 lineto x1 y2 lineto closepath
pat pat2 eq { 1 setgray fill 0 setgray } { fill } ifelse
pat pat1 ne pat pat2 ne and { grestore } if
end
} def

end

tgifdict begin
/tgifsavedpage save def

1 setmiterlimit
1 setlinewidth

72 0 mul 72 11 mul translate


72 128 div 100 mul 100 div dup neg scale

gsave

gsave
1.415 setmiterlimit
newpath
192 160 moveto 320 160 lineto 320 192 lineto 192 192 lineto
closepath stroke
1 setmiterlimit
grestore

gsave
1.415 setmiterlimit
newpath
192 224 moveto 320 224 lineto 320 256 lineto 192 256 lineto
closepath stroke
1 setmiterlimit
grestore

gsave
1.415 setmiterlimit
newpath
192 352 moveto 320 352 lineto 320 384 lineto 192 384 lineto
closepath stroke
1 setmiterlimit
grestore

gsave
1.415 setmiterlimit
newpath
192 416 moveto 320 416 lineto 320 480 lineto 192 480 lineto
closepath stroke
1 setmiterlimit
grestore

gsave
1.415 setmiterlimit
newpath
448 352 moveto 576 352 lineto 576 384 lineto 448 384 lineto
closepath stroke
1 setmiterlimit
grestore

gsave
1.415 setmiterlimit
newpath
64 220 moveto 96 220 lineto 96 348 lineto 64 348 lineto
closepath stroke
1 setmiterlimit
grestore

gsave
1.415 setmiterlimit
newpath
448 512 moveto 576 512 lineto 576 544 lineto 448 544 lineto
closepath stroke
1 setmiterlimit
grestore

gsave
newpath
192 96 moveto
256 128 lineto
320 96 lineto
closepath stroke
grestore

gsave
newpath
448 448 moveto
512 480 lineto
576 448 lineto
closepath stroke
grestore

gsave
1.415 setmiterlimit
newpath
424 224 moveto 472 224 lineto 472 256 lineto 424 256 lineto
closepath stroke
1 setmiterlimit
grestore

gsave
1.415 setmiterlimit
newpath
264 512 moveto 312 512 lineto 312 544 lineto 264 544 lineto
closepath stroke
1 setmiterlimit
grestore

gsave
1.415 setmiterlimit
newpath
520 396 moveto 568 396 lineto 568 416 lineto 520 416 lineto
closepath stroke
1 setmiterlimit
grestore

gsave
1.415 setmiterlimit
newpath
520 320 moveto 568 320 lineto 568 340 lineto 520 340 lineto
closepath stroke
1 setmiterlimit
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
256 115 moveto (Mux) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
256 183 moveto (Reg) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
256 247 moveto (IsZero) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
448 247 moveto (Hold) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
80 247 moveto (S) tgifcentertext show
80 264 moveto (h) tgifcentertext show
80 281 moveto (i) tgifcentertext show
80 298 moveto (f) tgifcentertext show
80 315 moveto (t) tgifcentertext show
80 332 moveto (4) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
256 375 moveto (SubAdd) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
512 375 moveto (SubAdd) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
256 455 moveto (AddSub) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
288 535 moveto (Reg) tgifcentertext show
grestore

0 setgray
/Courier findfont [14 0 0 -14 0 0] makefont setfont
gsave
544 337 moveto (* 2) tgifcentertext show
grestore

0 setgray
/Courier findfont [14 0 0 -14 0 0] makefont setfont
gsave
544 413 moveto (div 2) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
512 467 moveto (Mux) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
512 535 moveto (ShiftReg2) tgifcentertext show
grestore

gsave
newpath
80 32 moveto
188 0 atan dup cos 8 mul 80 exch sub
exch sin 8 mul 220 exch sub lineto
stroke
grestore
gsave
newpath
80 220 8 3 0 188 tgifarrowtip
closepath fill
grestore

gsave
newpath
80 348 moveto
260 0 atan dup cos 8 mul 80 exch sub
exch sin 8 mul 608 exch sub lineto
stroke
grestore
gsave
newpath
80 608 8 3 0 260 tgifarrowtip
closepath fill
grestore

gsave
newpath
512 544 moveto
64 0 atan dup cos 8 mul 512 exch sub
exch sin 8 mul 608 exch sub lineto
stroke
grestore
gsave
newpath
512 608 8 3 0 64 tgifarrowtip
closepath fill
grestore
gsave
newpath
288 32 moveto
64 0 atan dup cos 8 mul 288 exch sub
exch sin 8 mul 96 exch sub lineto
stroke
grestore
gsave
newpath
288 96 8 3 0 64 tgifarrowtip
closepath fill
grestore

gsave
newpath
256 128 moveto
32 0 atan dup cos 8 mul 256 exch sub
exch sin 8 mul 160 exch sub lineto
stroke
grestore
gsave
newpath
256 160 8 3 0 32 tgifarrowtip
closepath fill
grestore

gsave
newpath
256 192 moveto
32 0 atan dup cos 8 mul 256 exch sub
exch sin 8 mul 224 exch sub lineto
stroke
grestore
gsave
newpath
256 224 8 3 0 32 tgifarrowtip
closepath fill
grestore

gsave
newpath
320 240 moveto
0 104 atan dup cos 8 mul 424 exch sub
exch sin 8 mul 240 exch sub lineto
stroke
grestore
gsave
newpath
424 240 8 3 104 0 tgifarrowtip
closepath fill
grestore

gsave
newpath
256 208 moveto
160 208 lineto
160 400 lineto
224 400 lineto
16 0 atan dup cos 8 mul 224 exch sub
exch sin 8 mul 416 exch sub lineto
stroke
grestore
gsave
newpath
224 416 8 3 0 16 tgifarrowtip
closepath fill
grestore

gsave
newpath
288 384 moveto
32 0 atan dup cos 8 mul 288 exch sub
exch sin 8 mul 416 exch sub lineto
stroke
grestore
gsave
newpath
288 416 8 3 0 32 tgifarrowtip
closepath fill
grestore

gsave
newpath
224 480 moveto
224 512 lineto
128 512 lineto
128 64 lineto
224 64 lineto
32 0 atan dup cos 8 mul 224 exch sub
exch sin 8 mul 96 exch sub lineto
stroke
grestore
gsave
newpath
224 96 8 3 0 32 tgifarrowtip
closepath fill
grestore

gsave
newpath
96 288 moveto
544 288 lineto
32 0 atan dup cos 8 mul 544 exch sub
exch sin 8 mul 320 exch sub lineto
stroke
grestore
gsave
newpath
544 320 8 3 0 32 tgifarrowtip
closepath fill
grestore

gsave
newpath
544 340 moveto
544 352 lineto
stroke
grestore
gsave
newpath
224 288 moveto
64 0 atan dup cos 8 mul 224 exch sub
exch sin 8 mul 352 exch sub lineto
stroke
grestore
gsave
newpath
224 352 8 3 0 64 tgifarrowtip
closepath fill
grestore

gsave
newpath
512 568 moveto
416 568 lineto
416 320 lineto
480 320 lineto
32 0 atan dup cos 8 mul 480 exch sub
exch sin 8 mul 352 exch sub lineto
stroke
grestore
gsave
newpath
480 352 8 3 0 32 tgifarrowtip
closepath fill
grestore

gsave
newpath
416 320 moveto
288 320 lineto
32 0 atan dup cos 8 mul 288 exch sub
exch sin 8 mul 352 exch sub lineto
stroke
grestore
gsave
newpath
288 352 8 3 0 32 tgifarrowtip
closepath fill
grestore

gsave
newpath
288 480 moveto
32 0 atan dup cos 8 mul 288 exch sub
exch sin 8 mul 512 exch sub lineto
stroke
grestore
gsave
newpath
288 512 8 3 0 32 tgifarrowtip
closepath fill
grestore

gsave
newpath
288 544 moveto
288 568 lineto
352 568 lineto
352 368 lineto
0 -32 atan dup cos 8 mul 320 exch sub
exch sin 8 mul 368 exch sub lineto
stroke
grestore
gsave
newpath
320 368 8 3 -32 0 tgifarrowtip
closepath fill
grestore

gsave
newpath
352 368 moveto
0 96 atan dup cos 8 mul 448 exch sub
exch sin 8 mul 368 exch sub lineto
stroke
grestore
gsave
newpath
448 368 8 3 96 0 tgifarrowtip
closepath fill
grestore

gsave
newpath
472 240 moveto
624 240 lineto
624 528 lineto
0 -48 atan dup cos 8 mul 576 exch sub
exch sin 8 mul 528 exch sub lineto
stroke
grestore
gsave
newpath
576 528 8 3 -48 0 tgifarrowtip
closepath fill
grestore

gsave
newpath
544 384 moveto
544 396 lineto
stroke
grestore

gsave
newpath
512 480 moveto
32 0 atan dup cos 8 mul 512 exch sub
exch sin 8 mul 512 exch sub lineto
stroke
grestore
gsave
newpath
512 512 8 3 0 32 tgifarrowtip
closepath fill
grestore

gsave
newpath
544 416 moveto
32 0 atan dup cos 8 mul 544 exch sub
exch sin 8 mul 448 exch sub lineto
stroke
grestore
gsave
newpath
544 448 8 3 0 32 tgifarrowtip
closepath fill
grestore

gsave
newpath
480 412 moveto
36 0 atan dup cos 8 mul 480 exch sub
exch sin 8 mul 448 exch sub lineto
stroke
grestore
gsave
newpath
480 448 8 3 0 36 tgifarrowtip
closepath fill
grestore

gsave
newpath
32 288 moveto
0 32 atan dup cos 8 mul 64 exch sub
exch sin 8 mul 288 exch sub lineto
stroke
grestore
gsave
newpath
64 288 8 3 32 0 tgifarrowtip
closepath fill
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
288 23 moveto (XIn) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
80 23 moveto (Init) tgifcentertext show
grestore

gsave
newpath
80 112 moveto
224 112 lineto
stroke
grestore

gsave
newpath
576 464 moveto
544 464 lineto
stroke
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
580 479 moveto (Init) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
292 151 moveto (DiffX') tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
288 215 moveto (DiffX) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
376 235 moveto (EqZero) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
544 235 moveto (Exact) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
32 307 moveto (initb) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
224 283 moveto (B) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
320 503 moveto (Carry) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
320 407 moveto (Delta) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
320 587 moveto (ADD) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
512 627 moveto (YShift) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
552 503 moveto (YShift') tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
472 431 moveto (0) tgifcentertext show
grestore

0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
80 627 moveto (Done) tgifcentertext show
grestore

0 setgray
newpath
513 418 moveto 615 418 lineto 615 440 lineto 513 440 lineto
closepath 1 setgray fill
0 setgray
/Courier findfont [18 0 0 -18 0 0] makefont setfont
gsave
564 435 moveto (YShiftTmp) tgifcentertext show
grestore

grestore
tgifsavedpage restore
end
%%EndDocument
@endspecial 804 1719 a Fm(Fig.)7 b(2.)13 b Fn(Square)h(Ro)q(ot)f(Hardw)o
(are)340 1888 y Fq(and)h(that)g(the)h(corresp)q(onding)f(bits)g(of)g
Fe($B)21 b(*)h(\0452)13 b Fq(and)h Fe(YShift)e Fq(cannot)i(b)q(oth)g(b)q(e)h
(set:)759 2054 y Fj(8)p Fk(i)d Fq(:)f(1)g Fj(\024)h Fk(i)g(<)g
Fq(2)p Fk(n:)p Fj(:)p Fq(\()p Fe(B)1101 2060 y Fg(i)p Ff(\000)p
Fp(1)1165 2054 y Fj(^)d Fe(YShift)1333 2060 y Fg(i)1347 2054
y Fq(\))403 2232 y(W)m(e)14 b(ha)o(v)o(e)g(pro)q(duced)i(t)o(w)o(o)e
(implemen)o(tations)d(of)j(the)i(square)f(ro)q(ot)g(algorithm)c(whic)o(h)340
2282 y(incorp)q(orate)18 b(all)f(these)i(optimizations.)14
b(The)k(\014rst)h(w)o(as)e(a)g(full-custom)f(CMOS)h(la)o(y)o(out)340
2332 y(fabricated)g(b)o(y)g(Mosis,)f(the)i(second)g(used)f(Altera)h
(programma)o(ble)c(logic)i(parts.)h(In)g(the)340 2382 y(latter)k(case,)g(the)
g(structural)g(description)g(w)o(as)f(\014rst)h(translated)g(to)f(Altera's)g
(AHDL)340 2432 y(language)13 b(and)h(then)h(passed)g(through)e(Altera's)h
(syn)o(thesis)h(soft)o(w)o(are.)p eop
%%Page: 19 19
bop 183 194 a Fl(4)56 b(Discussion)183 374 y Fq(W)m(e)12 b(ha)o(v)o(e)h
(describ)q(ed)i(ho)o(w)e(to)g(design)g(and)g(v)o(erify)f(a)h(subtractiv)o(e,)
h(non-restoring)f(in)o(teger)183 424 y(square)f(ro)q(ot)h(circuit)f(b)o(y)g
(re\014ning)g(an)g(abstract)h(algorithmic)c(sp)q(eci\014cation)k(through)f
(sev-)183 474 y(eral)17 b(in)o(termediate)f(lev)o(els)i(to)f(yield)f(a)h
(highly)f(optimized)g(hardw)o(are)i(implem)o(en)o(tation.)183
524 y(W)m(e)f(ha)o(v)o(e)h(pro)o(v)o(ed)g(using)g(Nuprl)g(that)g(the)g
Fj(L)931 530 y Fp(0)967 524 y Fq(algorithm)e(p)q(erforms)h(the)i(square)g(ro)
q(ot)183 574 y(function,)14 b(and)g(w)o(e)h(ha)o(v)o(e)g(also)f(used)i(Nuprl)
f(to)f(sho)o(w)h(ho)o(w)g(pro)o(ving)f(the)h(\014rst)h(few)f(lev)o(els)183
623 y(of)c(re\014nemen)o(t)i(\()p Fj(L)476 629 y Fp(0)507 623
y Fq(to)f Fj(L)585 629 y Fp(1)603 623 y Fq(,)g Fj(L)656 629
y Fp(1)686 623 y Fq(to)h Fj(L)765 629 y Fp(2)783 623 y Fq(\))f(can)h(b)q(e)g
(accomplished)e(b)o(y)h(transforming)f(the)i(top)183 673 y(lev)o(el)g(pro)q
(of)h(in)f(a)h(w)o(a)o(y)f(that)h(preserv)o(es)i(its)e(v)n(alidit)o(y)m(.)245
739 y(This)i(case)h(study)g(illustrates)f(that)g(rigorous)g(reasoning)g(ab)q
(out)g(the)h(high-lev)o(el)e(de-)183 789 y(scription)f(of)g(an)f(algorithm)f
(can)i(establish)h(prop)q(erties)g(whic)o(h)f(are)h(useful)f(ev)o(en)h(for)f
(bit-)183 839 y(lev)o(el)k(optimization.)d(Theorem)j(pro)o(v)o(ers)h(pro)o
(vide)f(a)g(means)f(of)h(formally)d(pro)o(ving)j(the)183 889
y(desired)h(prop)q(erties;)g(a)f(transformational)d(approac)o(h)j(to)g
(partitioning)f(and)h(optimiza-)183 939 y(tion)13 b(ensures)j(that)e(the)h
(prop)q(erties)g(remain)d(relev)n(an)o(t)i(at)g(the)h(structural)g(lev)o(el.)
e(Eac)o(h)h(of)183 988 y(the)i(steps)g(iden)o(ti\014ed)g(in)f(this)g(pap)q
(er)h(can)g(b)q(e)g(mec)o(hanized)f(with)g(reasonable)h(e\013ort.)f(A)o(t)183
1038 y(the)c(b)q(ottom)f(lev)o(el,)g(w)o(e)h(ha)o(v)o(e)g(a)g(library)f(of)h
(v)o(eri\014ed)g(hardw)o(are)h(mo)q(dules)e(that)h(corresp)q(ond)183
1088 y(to)i(the)i(mo)q(dules)e(in)g(the)i(HML)f(structural)g(description)h
([AL94)o(].)245 1154 y(In)g(man)o(y)e(cases)k(the)e(transformations)f(w)o(e)h
(applied)g(dep)q(end)h(for)f(their)g(justi\014cation)183 1204
y(up)q(on)d(non-trivial)g(prop)q(erties)i(of)e(the)h(square)h(ro)q(ot)f
(algorithm:)c(w)o(e)k(are)g(curren)o(tly)h(w)o(ork-)183 1254
y(ing)d(on)g(formally)e(pro)o(ving)i(these)i(obligations.)d(Some)g(of)i(our)f
(other)i(transformations)d(are)183 1303 y(purely)18 b(syn)o(tactic)h(in)e
(nature)i(and)f(rely)g(up)q(on)g(HML's)g(seman)o(tics)g(for)f(their)i
(justi\014ca-)183 1353 y(tion.)11 b(W)m(e)g(ha)o(v)o(e)h(not)g(considered)i
(seman)o(tic)d(reasoning)h(in)g(this)g(pap)q(er)g({)g(this)g(is)g(a)g(curren)
o(t)183 1403 y(researc)o(h)j(topic.)245 1469 y(The)f(algorithm)d(w)o(e)j
(describ)q(e)h(computes)e(the)i(in)o(teger)f(square)g(ro)q(ot.)f(The)h
(algorithm)183 1519 y(and)i(its)h(implemen)o(tatio)o(n)d(are)j(of)f(general)h
(in)o(terest)h(b)q(ecause)h(most)c(of)h(the)i(algorithms)183
1569 y(used)12 b(in)g(hardw)o(are)g(implemen)o(tations)d(of)i(\015oating-p)q
(oin)o(t)g(square)h(ro)q(ot)g(are)h(based)f(on)g(the)183 1618
y(algorithm)c(presen)o(ted)13 b(here.)f(One)g(di\013erence)h(is)d(that)h
(most)f(\015oating-p)q(oin)o(t)g(implem)o(en)o(ta-)183 1668
y(tions)i(use)i(a)e(higher)h(radix)f(represen)o(tation)i(of)e(op)q(erators.)h
(In)g(the)g(future,)g(w)o(e)g(will)e(in)o(v)o(es-)183 1718
y(tigate)j(incorp)q(orating)g(higher)h(radix)f(\015oating-p)q(oin)o(t)f(op)q
(erations.)h(W)m(e)h(b)q(eliev)o(e)g(m)o(uc)o(h)e(of)183 1768
y(the)h(reasoning)f(presen)o(ted)i(here)g(will)c(b)q(e)j(applicable)f(to)g
(higher)g(radix)g(implem)o(en)o(tations)183 1818 y(of)g(square)i(ro)q(ot)e
(as)h(w)o(ell.)245 1884 y(Man)o(y)k(of)f(the)i(tec)o(hniques)g(demonstrated)f
(in)f(this)i(case)g(study)f(are)h(applicable)e(to)183 1934
y(hardw)o(are)e(v)o(eri\014cation)f(in)g(general.)h(Pro)q(of)f(dev)o(elopmen)
o(t)g(systems)g(are)h(esp)q(ecially)g(w)o(ell)183 1983 y(suited)f(for)f
(reasoning)g(at)h(high)f(lev)o(els)g(of)g(abstraction)h(and)f(for)g(relating)
g(m)o(ultiple)f(lev)o(els)183 2033 y(of)18 b(abstraction.)h(Both)h(of)f
(these)h(tec)o(hniques)h(m)o(ust)d(b)q(e)i(exploited)f(in)g(order)h(to)f(mak)
o(e)183 2083 y(it)f(feasible)h(to)f(apply)g(formal)f(metho)q(ds)h(to)h(large)
f(scale)h(highly)f(optimized)f(hardw)o(are)183 2133 y(systems.)i(T)m(op)g
(lev)o(el)g(sp)q(eci\014cations)i(m)o(ust)d(b)q(e)i(concise)h(and)e(in)o
(tuitiv)o(ely)f(capture)j(the)183 2183 y(designers')14 b(natural)g(notions)f
(of)g(correctness)k(\(for)d(example,)e(arithmetic)h(op)q(erations)h(on)183
2232 y(un)o(b)q(ounded)g(in)o(tegers\),)g(while)f(the)h(lo)o(w)f(lev)o(el)g
(implemen)o(tatio)o(n)e(m)o(ust)h(b)q(e)j(easy)f(to)f(relate)183
2282 y(to)d(the)g(\014nal)g(implemen)o(tatio)o(n)d(\(for)j(example,)f(op)q
(erations)h(on)g(bit-v)o(ectors\).)h(By)f(applying)183 2332
y(a)15 b(transformational)e(st)o(yle)j(of)f(v)o(eri\014cation)g(as)h(a)f
(design)h(progresses)h(from)d(an)i(abstract)183 2382 y(algorithm)10
b(to)j(a)f(concrete)j(implemen)o(tatio)o(n,)10 b(theorem)i(pro)o(ving)g
(based)i(v)o(eri\014cation)e(can)183 2432 y(b)q(e)i(in)o(tegrated)g(in)o(to)g
(existing)f(design)h(practices.)p eop
%%Page: 20 20
bop 340 194 a Fl(Ac)n(kno)n(wledgemen)n(ts)340 293 y Fq(This)18
b(researc)o(h)i(is)d(supp)q(orted)i(in)f(part)g(b)o(y)f(the)h(National)f
(Science)i(F)m(oundation)d(under)340 343 y(con)o(tracts)i(CCR-9257280)13
b(and)j(CCR-9058180)e(and)i(b)o(y)f(donations)h(from)e(Altera)j(Cor-)340
393 y(p)q(oration.)g(John)i(O'Leary)f(is)g(supp)q(orted)i(b)o(y)d(a)h(F)m
(ello)o(wship)f(from)g(Bell-Northern)h(Re-)340 442 y(searc)o(h)f(Ltd.)e
(Miriam)f(Leeser)j(is)e(supp)q(orted)i(in)e(part)h(b)o(y)g(an)f(NSF)h(Y)m
(oung)f(In)o(v)o(estigator)340 492 y(Aw)o(ard.)e(Jason)g(Hic)o(k)o(ey)g(is)g
(an)g(emplo)o(y)o(ee)f(of)g(Bellcore.)i(Mark)f(Aagaard)f(is)h(supp)q(orted)i
(b)o(y)340 542 y(a)d(F)m(ello)o(wship)e(from)g(Digital)f(Equipmen)o(t)i(Corp)
q(oration.)f(W)m(e)h(w)o(ould)g(lik)o(e)g(to)g(thank)h(P)o(eter)340
592 y(So)q(derquist)i(for)e(his)g(help)h(in)f(understanding)h(the)g
(algorithm)d(and)i(its)h(implemen)o(tatio)o(ns,)340 642 y(Mark)i(Ha)o(yden)f
(for)g(his)h(w)o(ork)f(on)g(the)h(pro)q(of)f(of)g(the)g(algorithm,)e(Shee)j
(Huat)g(Cho)o(w)e(and)340 691 y(Ser)f(Y)m(en)f(Lee)g(for)g(implem)o(en)o
(ting)d(the)j(VLSI)g(v)o(ersion)g(of)f(this)h(c)o(hip,)f(and)g(Mic)o(hael)h
(Bertone)340 741 y(and)j(Johanna)g(deGro)q(ot)g(for)f(the)i(Altera)f
(implemen)o(tatio)o(n.)340 875 y Fl(References)340 971 y Fn([AL94])64
b(Mark)13 b(D.)f(Aagaard)h(and)g(Miriam)h(E.)e(Leeser.)17 b(A)12
b(metho)q(dology)j(for)d(reusable)i(hard-)517 1016 y(w)o(are)f(pro)q(ofs.)k
Fb(F)m(ormal)c(Metho)n(ds)f(in)h(System)g(Design)p Fn(,)d(1994.)18
b(T)m(o)12 b(app)q(ear.)340 1062 y([BJP93])44 b(Bhask)n(ar)20
b(Bose,)g(Stev)o(e)13 b(D.)19 b(Johnson,)h(and)g(Sh)o(y)o(amsundar)h
(Pullela.)39 b(In)o(tegrating)517 1108 y(Bo)q(olean)15 b(v)o(eri\014cation)h
(with)d(formal)h(deriv)n(ation.)20 b(In)13 b(Da)o(vid)i(Agnew,)e(Luc)g
(Claesen,)517 1153 y(and)i(Raul)h(Camp)q(osano,)g(editors,)f
Fb(Computer)g(Har)n(dwar)n(e)f(Description)e(L)n(anguages)517
1199 y(and)18 b(their)f(Applic)n(ations)o Fn(,)e(IFIP)k(T)m(ransactions)h
(A-32.)e(Elsevier,)i(North-Holland,)517 1244 y(1993.)340 1290
y([BV85])61 b(J.)12 b(Bann)o(ur)17 b(and)h(A.)12 b(V)m(arma.)27
b(A)16 b(VLSI)g(implemen)o(tation)k(of)c(a)h(square)g(ro)q(ot)g(algo-)517
1336 y(rithm.)k(In)14 b Fb(IEEE)g(Symp.)g(on)g(Comp.)g(A)o(rithmetic)p
Fn(,)e(pages)i(159{165.)h(IEEE)f(Comp.)517 1381 y(So)q(c.)f(Press,)g(W)m
(ashington)i(D.C.,)d(1985.)340 1427 y([CGM86])24 b(Alb)q(erto)15
b(Camilleri,)i(Mik)o(e)e(Gordon,)g(and)h(T)m(om)e(Melham.)22
b(Hardw)o(are)15 b(v)o(eri\014cation)517 1473 y(using)f(higher-order)h
(logic.)k(In)13 b(D.)f(Borrione,)i(editor,)g Fb(F)m(r)n(om)g(HDL)f
(Descriptions)e(to)517 1518 y(Guar)n(ante)n(e)n(d)g(Corr)n(e)n(ct)i(Cir)n
(cuit)g(Designs)p Fn(.)d(Elsevier,)15 b(Septem)o(b)q(er)e(1986.)340
1564 y([Flo63])63 b(Iv)n(an)14 b(Flores.)21 b Fb(The)14 b(L)n(o)n(gic)g(of)g
(Computer)g(A)o(rithmetic)p Fn(.)k(Pren)o(tice)d(Hall,)f(Englew)o(o)q(o)q(d)
517 1610 y(Cli\013s,)g(NJ,)e(1963.)340 1655 y([Lee92])59 b(Miriam)14
b(E.)i(Leeser.)25 b(Using)17 b(Nuprl)g(for)e(the)h(v)o(eri\014cation)j(and)d
(syn)o(thesis)i(of)e(hard-)517 1701 y(w)o(are.)g(In)c(C.)g(A.)g(R.)g(Hoare)h
(and)g(M.)f(J.)g(C.)f(Gordon,)i(editors,)g Fb(Me)n(chanize)n(d)d(R)n(e)n
(ason-)517 1747 y(ing)15 b(and)g(Har)n(dwar)n(e)g(Design)p
Fn(.)f(Pren)o(tice-Hall)k(In)o(ternational)g(Series)f(on)f(Computer)517
1792 y(Science,)e(1992.)340 1838 y([NS88])67 b(P)o(aliath)15
b(Narendran)f(and)g(Jonathan)h(Stillman.)20 b(F)m(ormal)14
b(v)o(eri\014cation)i(of)d(the)h(sob)q(el)517 1884 y(image)k(pro)q(cessing)g
(c)o(hip.)29 b(In)17 b Fb(D)o(A)o(C)p Fn(,)f(pages)i(211{217.)f(IEEE)g(Comp.)
f(So)q(c.)h(Press,)517 1929 y(W)m(ashington)e(D.C.,)d(1988.)340
1975 y([OLLA92])21 b(John)11 b(O'Leary)m(,)g(Mark)g(Linderman,)i(Miriam)g
(Leeser,)e(and)h(Mark)g(Aagaard.)17 b(HML:)517 2021 y(A)12
b(hardw)o(are)i(description)h(language)f(based)g(on)f(Standard)h(ML.)j(T)m
(ec)o(hnical)d(Rep)q(ort)517 2066 y(EE-CEG-92-7,)f(Cornell)h(Sc)o(ho)q(ol)h
(of)d(Electrical)k(Engineering,)f(Octob)q(er)f(1992.)340 2112
y([OLLA93])21 b(John)11 b(O'Leary)m(,)g(Mark)g(Linderman,)i(Miriam)g(Leeser,)
e(and)h(Mark)g(Aagaard.)17 b(HML:)517 2158 y(A)h(hardw)o(are)i(description)h
(language)g(based)f(on)f(SML.)34 b(In)19 b(Da)o(vid)i(Agnew,)d(Luc)517
2203 y(Claesen,)i(and)h(Raul)f(Camp)q(osano,)h(editors,)g Fb(Computer)d(Har)n
(dwar)n(e)h(Description)517 2249 y(L)n(anguages)10 b(and)i(their)g(Applic)n
(ation)o(s)p Fn(,)d(IFIP)j(T)m(ransactions)i(A-32.)d(Elsevier,)j(North-)517
2295 y(Holland,)h(1993.)340 2340 y([V)o(CH94])32 b(D.)12 b(V)m(erk)o(est,)f
(L.)h(Claesen,)g(and)g(H.)g(De)g(Man)17 b(A)11 b(pro)q(of)h(of)e(the)i
(nonrestoring)h(division)517 2386 y(algorithm)k(and)e(its)h(implemen)o
(tation)i(on)d(an)h(ALU.)22 b Fb(F)m(ormal)15 b(Metho)n(ds)f(in)h(System)517
2432 y(Design)p Fn(,)c(4\(1\):5{31,)i(Jan)o(uary)h(1994.)p
eop
%%Page: 21 21
bop 183 194 a Fn(This)13 b(article)i(w)o(as)e(pro)q(cessed)h(using)g(the)f(L)
810 189 y Fa(a)827 194 y Fn(T)849 205 y(E)870 194 y(X)g(macro)g(pac)o(k)n
(age)h(with)g(LLNCS)e(st)o(yle)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF

You might also like