From 6fc19ee63f9e247f2ee93451bdff8397d656efdb Mon Sep 17 00:00:00 2001 From: Jerry James Date: Mon, 11 Jul 2011 15:40:19 -0600 Subject: [PATCH] New upstream release (fixes FTBFS: bz 715902). Remove unnecessary spec file elements (BuildRoot, etc.). Update approach to filtering provides and requires. Add has_pvs analogously to has_coq, and simplify macro usage. Add (X)Emacs support packages. New subpackage for the jessie plugin to avoid unowned directories and permit a direct dependency on frama-c. Prepare for the eventual availability of APRON. --- .gitignore | 6 +- caduceus.ps | 5358 ------------------------------------ gwhy-2.26.patch | 4 +- sources | 5 +- why-2.28-Makefile.in.patch | 6 +- why.spec | 421 ++- 6 files changed, 279 insertions(+), 5521 deletions(-) delete mode 100644 caduceus.ps diff --git a/.gitignore b/.gitignore index 2381cf1..02ffd25 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ -krakatoa.pdf -why-2.23.tar.gz +/why-2.29.tar.gz /krakatoa.pdf -/why-2.26.tar.gz -/why-2.28.tar.gz +/caduceus.ps diff --git a/caduceus.ps b/caduceus.ps deleted file mode 100644 index 5366053..0000000 --- a/caduceus.ps +++ /dev/null @@ -1,5358 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.95a Copyright 2005 Radical Eye Software -%%Title: caduceus.dvi -%%Pages: 34 -%%PageOrder: Ascend -%%BoundingBox: 0 0 595 842 -%%DocumentFonts: CMSS17 CMR12 CMTI12 CMTT12 CMBX12 CMSS12 CMSY10 -%%+ CMSSBX10 CMTT10 CMMI12 CMITT10 CMBXTI10 CMSL12 CMMI8 CMR8 CMSY8 -%%DocumentPaperSizes: a4 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips caduceus.dvi -o caduceus.ps -%DVIPSParameters: dpi=600 -%DVIPSSource: TeX output 2009.06.23:1409 -%%BeginProcSet: tex.pro 0 0 -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S -/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy -setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask -restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -%%BeginProcSet: texps.pro 0 0 -%! -TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 -index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll -exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 -ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ -pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get -div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type -/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end -definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup -sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll -mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ -exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} -forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def -end - -%%EndProcSet -%%BeginFont: CMSY8 -%!PS-AdobeFont-1.1: CMSY8 1.0 -%%CreationDate: 1991 Aug 15 07:22:10 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMSY8) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.035 def -/isFixedPitch false def -end readonly def -/FontName /CMSY8 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 24 /similar put -readonly def -/FontBBox{-30 -955 1185 779}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 -7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 -A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 -E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A -221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBB2A7C1B5D8E7E8AA0 -5B10EA43D6A8ED61AF5B23D49920D8F79DAB6A59062134D84AC0100187A6CD1F -80F5DDD9D222ACB1C23326A7656A635C4A241CCD32CBFDF8363206B8AA36E107 -1477F5496111E055C7491002AFF272E46ECC46422F0380D093284870022523FB -DA1716CC4F2E2CCAD5F173FCBE6EDDB874AD255CD5E5C0F86214393FCB5F5C20 -9C3C2BB5886E36FC3CCC21483C3AC193485A46E9D22BD7201894E4D45ADD9BF1 -CC5CF6A5010B5654AC0BE0DA903DB563B13840BA3015F72E51E3BC80156388BA -F83C7D393392BCBC227771CDCB976E93302531886DDA73EBC9178917EFD0C20B -133F1E59B85B951BFD0F316B8388A2B2F592AA8E397A5B9CAFF5B4CCE4E1ADD2 -8F729F0630732D4847C362E272B7274624E188C85105E7C0B37C096366921267 -41C3DCD5E3194BAD5DA807DA08810290990701CAAD643AB9A793EF22CB865D45 -BADB87571029B4B85A545C09B0F3E0DD97A0D5673CC1D8AED65357D61646BA67 -9F9172720B0C2D107750D0FD31C3305C396C48712765D1980AA17A6DABD218F8 -AB60564557F8AD2B5B983053A1C10D7CA4CE0781E4BE737CA9E83857A5340C3F -996669660C962C501FD8DC9630813069A707765416E0D313DBC78B270062B7DD -D24C558E60B24E6FD88FD1845FCC19171D579F9C6AA3784BC6B82427EA25AE51 -E413B0B3B026 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMR8 -%!PS-AdobeFont-1.1: CMR8 1.0 -%%CreationDate: 1991 Aug 20 16:39:40 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMR8) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /CMR8 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 43 /plus put -dup 49 /one put -dup 50 /two put -readonly def -/FontBBox{-36 -250 1070 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C -68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361 -3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65 -48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3 -9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB -0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB -8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F -EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466 -FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3 -9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62 -D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8 -9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5 -ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6 -10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582 -83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493 -2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA901C077A059F709F30 -4384CB5FA748F2054FAD9A7A43D4EA427918BD414F766531136B60C3477C6632 -BEFE3897B58C19276A301926C2AEF2756B367319772C9B201C49B4D935A8267B -041D6F1783B6AEA4DAC4F5B3507D7032AA640AAB12E343A4E9BDCF419C04A721 -3888B25AF4E293AACED9A6BDC78E61DA1C424C6503CC1885F762BFD4563ABA4F -D926227FAD2B2D4975835541F5A97E7A70F5CB40266CB9B4E609B94B31263442 -35FBADB202B4032E1C3165F83176413544AECC056C371F4B41C04121C4D20A7A -CE519F46C3999F58F5F43BF799D624FDF62A229D8B9189CF5AFAE6141FF16B53 -BB2B3EE9FB2467181C50CD8F8F32BC6609385D9D111EE2A589687D84C6C2FB75 -A48CDD9A85F106AB9D3F906105C56CD993793C20FC7E5202428340F3DD4F10DB -561A3958B4CD377D1B833D27F6F9F233CB9D99F95309D20134DD6A47A5291D43 -E49BF013864BA87ED38FB9755A8077105EDF397023D0C1A1B21B951AB1A4FFA2 -72990283B3B455447DA9E68C7CE660F8BCC18F5FD82371D89BBB363EA0FDA552 -3059558108DEC9D2E6BED7BDD5C0243485F642DAF3B3A719E098D25B24E2D1F7 -9B9DE8CAD714415F9DC0F0A7BF618BE0FBD81618CAA161548B2038163020318F -18C088D44BEFB4397412661EA87CE38799B3AAEE28A008A3FF638C665DE01D88 -1604BA57E90D82855317F1A99B9C6FE3E6B46F5EEC32DAA013BB124E6701FDBB -821E8527C2BD04E8D9770BB5037793DC4DFE6CBFB2F0850B29BE67083451B071 -413B07804AD37CA3AAD6D799091E5ABB2F5C55FDD77C4E421D4070EAB055C3CD -4DF259F039687CD598BCCA951367BD9CACFFA93F12F96BB0211EED9DF6276E2C -E2469BDFE697A61CB583EBB9CABE24568FB504C42AF29F9F90739AEF6412A1FE -C3B3B587A034F1 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMMI8 -%!PS-AdobeFont-1.1: CMMI8 1.100 -%%CreationDate: 1996 Jul 23 07:53:54 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.100) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMMI8) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.04 def -/isFixedPitch false def -end readonly def -/FontName /CMMI8 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 63 /star put -readonly def -/FontBBox{-24 -250 1110 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE -3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B -532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 -B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B -986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE -D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5 -5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC -4391C9DF440285B8FC159D0E98D4258FC57892DDF753642CD526A96ACEDA4120 -788F22B1D09F149794E66DD1AC2C2B3BC6FEC59D626F427CD5AE9C54C7F78F62 -C36F49B3C2E5E62AFB56DCEE87445A12A942C14AE618D1FE1B11A9CF9FAA1F32 -617B598CE5058715EF3051E228F72F651040AD99A741F247C68007E68C84E9D1 -D0BF99AA5D777D88A7D3CED2EA67F4AE61E8BC0495E7DA382E82DDB2B009DD63 -532C74E3BE5EC555A014BCBB6AB31B8286D7712E0E926F8696830672B8214E9B -5D0740C16ADF0AFD47C4938F373575C6CA91E46D88DE24E682DEC44B57EA8AF8 -4E57D45646073250D82C4B50CBBB0B369932618301F3D4186277103B53B3C9E6 -DB42D6B30115F67B9D078220D5752644930643BDF9FACF684EBE13E39B65055E -B1BD054C324962025EC79E1D155936FE32D9F2224353F2A46C3558EF216F6BB2 -A304BAF752BEEC36C4440B556AEFECF454BA7CBBA7537BCB10EBC21047333A89 -8936419D857CD9F59EBA20B0A3D9BA4A0D3395336B4CDA4BA6451B6E4D1370FA -D9BDABB7F271BC1C6C48D9DF1E5A6FAE788F5609DE3C48D47A67097C547D9817 -AD3A7CCE2B771843D69F860DA4059A71494281C0AD8D4BAB3F67BB6739723C04 -AE05F9E35B2B2CB9C7874C114F57A185C8563C0DCCA93F8096384D71A2994748 -A3C7C8B8AF54961A8838AD279441D9A5EB6C1FE26C98BD025F353124DA68A827 -AE2AF8D25CA48031C242AA433EEEBB8ABA4B96821786C38BACB5F58C3D5DA011 -85B385124C2B6534F3CD1866AF92009D93B97F763AA3D2A53C83BAA23B0F1DFD -CC76E744CE7B21FCD4FD1E3F38F898E599DC430F87448ABCE9B8E485462F3DA2 -15FF7CB860E95CF2BF2A1ADA8A0F5DB95FD5CD2371EDC72881B5EED6E705D556 -6FA7D86DFF4058B0F26583326B73D189178867DFB16714A8326177A08556A8EE -3EDCD4863CF82C1362EBB7BD55601DA6A795CC2560AF68B9953EAD99864EC750 -BCB53FFB919DEC41FA8AA613700B8803CC2CE140E5AB80F93408751CCEDCD8B0 -1B9642D62B5D5B1AA36B630BBC0CAADB2FE9D655B9BAE7A5A613F73D13289DD5 -F0F982862CDE74B43331E4D3983C9FB63E089398108C4A1B3EE816D2655E671A -299BB67A59D7E63C10B417F6C7972191BB113B86048C3E3457C9AD966C8B3FBE -78A9B8986EABC2AEC7CBD588E99C4AA115950DA605A016A55474850C0B2FC223 -3A45A43F26A8F16456DE00D447A04715E9 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMSL12 -%!PS-AdobeFont-1.1: CMSL12 1.0 -%%CreationDate: 1991 Aug 20 16:40:41 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMSL12) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -9.46 def -/isFixedPitch false def -end readonly def -/FontName /CMSL12 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 12 /fi put -dup 13 /fl put -dup 45 /hyphen put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 118 /v put -dup 120 /x put -dup 121 /y put -readonly def -/FontBBox{-56 -251 1102 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE -3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B -532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 -B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B -986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE -D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5 -55FBD18DCEF738EFB8E96B4B61D9C1A24F5FE2B29EF89EA4320BCB1D16E30E22 -AB926EBADAACFDC5784740982ADC9619BFDF3586F8C12E6F6E588B44226DCB87 -DEFC33CDC78D0E39CE42F3CD39130758A1DA6723A3BFE0FC6ACE02389569609D -E0A2F8219BCA30B5669A6EF48E4FC32BBCC3CA7CC2C7615DACC771E59FDCBA30 -17F349B2BEF4EC6B45905D23BDEEC669B3BF525881857B942BF724608CBA8DA8 -37CB92A472B89421D4BA156248D4F4F7AA90DA4EEEB4B3D57A4C2F0F41B7E669 -9AA74D9F4743AC680A1EA18B567BBD8A2BCCEAC1795CCB5188C77C5B199027DF -F158135941CD020826973194789ED9B5279136A8B9D0D9979E5E80F95A223851 -BC17E0EBB94FDAE8F32FE889774D72FA17E179F5AF39385406FBA973734BCAE5 -4DD33DEA30B1BCAA9207D96BDBC6AE9519E3603AC39A09B2A52ADDF935FE10EA -A759515DF32688D0E95B1D37CE23E9F45A114572761B088BAB7464D8A1BF7BEF -EDFEC4E472006F678C5E2F6E61AF9E5A5D6DB85600E53818535889F6C31061A4 -9A6C369C2680CB769A5540D5A62429DAEE4E2AF5971BC12DAF37B3DAEB66BA94 -2998AD18DD63DF3A15EB2FC41AC343063AEAFCD5D2E1BB23C444D4671A954A93 -D554797F45A27AC629EF606552DAF0A70B539A55D6650446540E197351E18723 -1A81C4DF4BDAF4FA2F411723FC05B9C2B63676B9AE9013902CF9687200FE6F77 -30D33F2319AD36876F2F99783468B94DC015433E24640A767F249797A7B240A8 -3628220DFE56BF68BED82B9FEA11E4051191DA2A8C47F96F335DC419013B4E02 -384093D7A0F4F8A9F1501B40E40D34F7CD87205EAF74B7109817761ADF7E6022 -C9720564CEBDF68AED767B3317ADBE684A3E8B53020D2437888EDAA1009D57DB -6E114F9A5A088B7CD387F5FE373F86F8103938EF24B1B6ADA93D09357F8712A8 -D3848FC1BAF5D30095A946A57CCEFD6CDD2E31DEF6DA7A3A450B7C87F761577C -90195CAC7B59DE5C8FB158F1306C3F89F53A9F5FC11501AB2EFC8F36F6310F6D -D2EF57BB422848FDA4424FAB8108FB14F8C79A1273E787C55B3520721265333C -A933C65E7B693BEA7379312DFA4CFD25FE9A61C2D9695828C6486C1A7BC95506 -0C045CC31C5EF5AC4C249AEF60C2AA446570FF044E5632D72CAB1C4D7929A08B -E938B8BF949C8608BC47A8F0C0A2FEB02F3B292FA5DCCD12B625B4BA49F70DD5 -280BB19509B1F0868690771E2D32A4BCB8D2CC325D182DCE2B97A76BA168FCBC -125CB5A84A422DEE8DECA13E9D87046F733577D051DBCB8490C6C121A4A90F84 -1930A2EBF34EE5A4547812484C051C36A2351A6957A3637C1E4265A26862F057 -77B27B09FB0526164A42DD5B9C07AD84597A6154045250F7C687EC8972C42C4D -95CD3CA631BC68B9CD11C46567ADDB64085E1A2B3446CECD616B243BA70C703C -0AB751784B34F688B1C64BCA70963D8C891B43B707CEF6860F18504FB8E027F6 -4B238A5180EEEE72AE14CD4E97018BEDB024D617F52681AE8ED219C22750ECA3 -C7CD41AE20664B0303FAB40C5ED10C7F18A18D56B96407D585421B8E409CF14F -2C68DE1E92313C2799234B3E723A70B7AF0F911DF908D78013950437B489F7F8 -6EB50926598BB477150B2868954ECA760A063D80E499E2C634AE12C53C256748 -7692B7276186BEB0F2DDB63B280169159B009FEAE0E873E0B90C89D77B8E12BD -94025995D63B2AE71F78777F5E7A4E96F06DDCED3FF777D856586DBA92201373 -6266CFBEE44FCC892C53E2FFA103D5CE77988681F211F517634A645198A1A1D9 -D649A40CDF26EBF85854C2ACB52E58E8C5C5FD5C74D23EA71CE23E44289A7104 -A4A30C1CB81919430294C091A015260414D8E4C31B9A980A6F329C9EA944C60A -2FBD374D63EC96D2C37227632A2CCA62E0EBAF220DE1B06D2E8B6D7354F9C954 -C21AA7E37A7CD72397B3C0D24BF2A284EDFF8440BC7CD7621968F038242C6950 -C100BDB48B43257AE5642856846F0A89C875D23311BDEDA4583BBDFA60CA6811 -21A9D375526720DFFD47609EFE45B92BEFB1041931B1E8B3847F53E253B0F469 -241493A4C27A067E585E64715EEA0F4E89A96E79D014D0E3782ED152DD42EA5B -F5952436936F5F9B3142147A250FBD64EBF364DEC7169AE7C4B2F8F6736FDC43 -F98769CDF43EBB79B3898749EA76069B60952E4FE7F981355F5DD1F50314F39D -35CA845E7B80A0DB09ED5A3756EE7958BDAD87DF00AC6FE2EC4245C9682CB0FF -7A2CABCF33B5040616E00DFB1440F6C63E7B9B7AD20EF30B251C33C8C24538A7 -95D80866692595A3106FE9FECD0EF81603574853A468BA9E60409C21AA01CD5E -38715A17B37CF06DA867D772197D35AA3ACB6D91C86357DB0D4D910211CEA32E -1A0FE0FC9C17333417AA9828BD73EC4956E69D741A445A5B59012771BC46DB58 -4A38D1C96DC4BB346AB68F32520389F05EFB8695400578E907A28F57B1231BC4 -FFF24A5118D297D8A89C714A306A6D229C4D261A171076DA6DCC844164183A36 -9D5260B7B51B7E5F90A30751B7213867C98566D8992AFDFE1D1B6414DCEE325D -5AD6DE53381F92B3659AE4EF6AC3CB04B2A4A58D90EC90474938796D91D1BC0D -A4427B47DEFF388E276281E2CBD832B015CA18D305D0901EE2424F896A1BE2C8 -DF8C13ABAB590576247A6232704F20210F02316356B3F75C65011E25232A3C01 -07629DF0B39A850A7EE91718F271B4EF99E6902A49F26BFDF4D51EA7A679CDF6 -CB18AF98F657E024870ABA0ABEF773D2CF834E45DC6523BE6BC520A0758B5687 -E2596749B04E8B70D7B4F54AD1350689E11C9AB40E40A4795610D2ECA39328C6 -545991B7C5EAF1145074FDFA99BA3DF37D2054FAD40AC429E01DE43E30D292DD -5C7F049B4DA7CB38DB1E74D827AD7FC9AF800D0B72D86825520DAE9228C12272 -4BB80F7487B36B78C76CDA82EEA8E88D872A84E728B243197AE1D8781FA59DF5 -5970EE54AF179AB3A3BDE9D1F40D9500157ED654C368637B3D53ABDD503FD898 -2CC357EB8A9E20CECDB1CAD075C01A5049F85797E8B5EF33912BBF7C926631CD -BA680336C128FB479A16402EFF6E0146951A8A3D5B9A81215D34EC83BBFC64F7 -C9AC6FFA2DDFEE55FCBDB735A801F708A3059BF2730AD4FD0122C17A201E491E -BF53C8B56856F30D8FB6C0DD5CAC43F084902A9B572B5A9ACEFE3FB4F403230B -17D1B49FA39A6177BE1E34976D26B10AEBBF6CFB27FBBF4C01E5DCA82E2C2D2A -CE7D65B9DCFC731AE072906294773373D7C0A3CA9DE8E69B8099FDB59E921EB8 -4E4F3A3D86B67B92649E63430F40DF6562D38CDF481DDCD8D99CADA75BF8DDA7 -6D17252F12876B225CA666058441CC8FF1EC0C324EB4C2C53F3910E57857DF5D -FCEF97ACEFBFC6B9301F5FFE1D3D4C2C8E4E2A8D28C2272AD0C9781E34570A17 -9FE59B28F7A63BA2EC488579D7FE922E0A2A1BB0803A6BF763C0BC52F6D7F108 -7CF9BC4B57BB38C38B9DCEE52D65429C766C5AC2E911E6FF1BFE1B96C7A32747 -C8E8113FE46BA3C4BEF8CA32D2082E571C03590DBCD199DA12B05866F29C285A -7414363776B4C114998B8D44B581CACB28A55FACF497FFEF222A915C8A4844C0 -14FD99ACF8ABEF95AB24987D206774BBB03017A2D65D816BE0214998D21743AA -64F6D05C075B4B8C4C0790AD78AD44A32E64FE0C6AF4C879022782C1BC0481F2 -05F318F7127B25F1B4BDB6AD0BA3C73BBAFD1FE53605DA272278D7B80AC1D0AD -7D7128070871394DB04F2FEF26A93BFCEF2F10CD453CB2AC6C8D37B347F05957 -877BA09C30E462AD0C30A5F804CB655E1747C583F6A4C04535D19565533DAC1F -E34788E88B3E9E7FA2D23BAB7C4A880321FDDC45558FAC14E3C9AEE209622731 -DA2706264F58D9ECB586C21C77153ACA5BA8B2F6848C7DBE36D16BD6F895D08D -07A33F72266CB150DD20BC4A4C0407A71CA9B4D382CBE1D140339B25087723F1 -17B538E5E980986212DE7CE085FC7F176BF2AC26C0FA6FE24ED2347CBFD281D5 -A339E6AF22D65C4F81EBAA7989A986823D823B06151F3C154E927663198819DB -41537D1500365C02F7C75F5407F62887917B8A1946C55863B329EB1BBE82BA80 -681EA799CF4AE4B752F1CD52DEFDC42064E568DA39B604EAAB94EC83EA9ECAEF -1CFCD15926F19E4102EA8A9A579E1EF334520BE7D8BC82C9AB431213E96E5941 -8AB25BC93C658BA1E3022B072EC5BA4B6B42BC2E320B41527159D3C6F5CDE973 -F47965658A6B89C37DC05AA8F9A6D59521342D44A9900AECEEE696ACD5E7B648 -10D7B87DEB2D5907478AAA815B847D90D69FC50FA0344A8456792C24FFCEB237 -17DEFF0BEDA8C481CAA87D322222AF1259258EF83D8C3F1E785BFF4AA4F2F0B6 -12B083061F76F76BD5BCF35F61A71BEF88AC15FEB818CEBD832EFCB8319F8FC8 -FE167563BFDF01097B197DAEC305E4B1112256CC57EC1A2CAC6820772B029B57 -9642E3A9E8AB4F85CADEC0E43A55D1594BB46D0AF8CC65C519B7E062571370D9 -6A432C2521EE1FD3AA2FAC5FDBE85089BE06DA7771B394736A0AEEE527FFB275 -1D2DC8BB9703395B360F4E6819AD2BF33C439002326E0069CFF00E1A9EAFF7FF -A91962DF5505F53475412CCE71D3A891C846B32F5F48D5FFDE47A93F3027F38D -AFF34EB1F660DD181198B16947E4358FE77F27F6572337B610D7617C8EAEA65C -BD11E1A3ABECF55027856634C6C3D8D9A6E216AD7BA1715C3F21A3B75CF21926 -221FC687C2138B58A838436750BAC81BBB6CC1821931963EAEBE9D490BBE3726 -67B16242B6BED3262EA3A18A73CE3CD7E75F0F3CD81985EB762717097E0F4B36 -224F5CEECDDCB517207C58478A8365509C44282F41394746BA171DA65ACB0015 -EC36CF7A8672149F7CDD81B8C689CB1EFC770227EBE98870DADF25A3219B98B3 -D428ADEEACFE3A4E60D5059196FFA0987F276F8087D5556CAC086BA605E7EE91 -EEB3D5456A7A0C6FE56054BFCDCBD118E4537E20B58D776FF4B87736EAA5527A -1CF494784FB53AA399A9B129F78EADD338CB44BE442C9E19CE76CB7DB915589D -9088CBE3F6B36F06CA747A978CA55197E07018DB0000183A290E58793FE92FFA -ABDF958552BFFF2121240EDADDA960EDD4B77A3B0F5034C1FE041A14516B29C9 -CD3155ABF660EBCDFC855A897DDEB227C84FE239B8F51ADE60622AF7FB901489 -8B68E1A39F3484E84CAA01B2BC94DE56E89E254887EB6CE8149D907ED79EA34E -1FC1218A505C3D6B878CCA41F1D0EFD3EB381345898DCA6E244785B5D4450A70 -49F41D0F4EC6C8AE72EDD2D055FE7C7E37E1C526EC60B2121BCC72EC0D2C7E50 -8C373C49B293F86FD9FC1489852D0EDC6A4BD4CEAD809BEB69776ED8BCC1B648 -57B4BCFF8BC573208D1323061CF5E0BDA2E9F2EB2D89EFB93FAEACE5CA147401 -C410E1EF74063C9E06F389EB6B2C6ED9C05793E047376A8068A2C3873DED39FB -D2F812EAA0247AECEDA80A414F62F060114CF2682DB0CCDA8537E3888C4F3ECC -2DF354B9FA28E6D434807570F218254DA5E28127DF8886B201B30AE95AB4F88B -F1151A4D4D3C4946F0DCF84A9DCC80DE7018D0CAB98AA0EA8A8F9033AF2F9CEA -0B91EE407378B09B0B900507F84CF29038A7A026BA1282A2EEE9E0C98A930DF0 -1099BD2CA934EB8CB834D519CF3DEC76E4450064D06E68A013CF84C30AB61E96 -5809BC99302DE441352C87E2DBCE4D2F775313CE938A162BCA98262634DE3EA0 -D23BB76391346BA8DDC8B99050668184CC232E9FC7922F4BD426D14A982FD629 -0E893994F64721891933D9CA392A3D8A433817933440131BB37BF31C4D4767FE -9B8FD2F3119221DA89CCB19A87A9D8E07F40953785E752BDB92C8895A4814C11 -F1DFC1C51FC68857719AA3E910676145DAF2FFB56921A50CE684EBE61E8488EA -95149F1646F3B30168B02A9291AA6F334F48F05776B5355479D2B6FF2FA3EDDC -8ADA3A319A1572E217E6CE4D718B15A7A073EC228B7E6F59D3D8A8A56BA8FA66 -D52E6BC017D1AFCC28B4B24885BC15B8BBE8A04CB4A30DCA83D2A810C3A7BB96 -5E84FD875BF17B80FC212E225E4F7E9068CE061F0C60DF628A1EE708D6D8E943 -D07FBA9DBE98E335885F7318DA62DA2C585CACD7BE1510CB5210F18DEBDB9BC0 -DA3F0AEE16721ED3B0B768E3E36C2DACF29568313C75D879AB880FADEE28B416 -49957B1019881BA938151AF3BC99D12AE87EA35E04CD28F156AC5A906C47A76E -4055D8FA024E0A64D0EB8654D771E643D1E31FB23E5769F9630C0D89EDCC44E0 -024113E4DA466AE24A44D04D800B6798788D7EA526439F9960F97E1DB74A15B1 -3079F6DC61D52494D5D2894C42570B5FA05676C9A18A047C76685AF8D39CEC3C -43B28369C9E727EDA44B003515A0DEEB6073A6248C4C94F01C0A59D1F5DF77CB -ED51BC0ED0DC56AD717135DF2A255B92CA25D4CAB9783ADBF9B8E2FA4A524F12 -035EFD47EEABCBAAF965D3CC94B12CC3A8AE0F738906245B252CE89AA277E4FC -2AD880A9FC37F374646FF25B18C2C5CD668325351EDB02CE593542BE2DB9F804 -068A97B981DDAC4FFCFE603A16EDD4767601FA48DFAB7493F5A4C0B493120205 -D209E0A4DA64F8458C17C82ABF7448B0F76436760E5D5F78D156C9BA4B01802D -258786B9FC6E30881F49537621080EE3213B45495290E6DF79CAF36BBD6ADF78 -4A4DB9EA0692468B0165E801B4D90F499810E3D82E02633DB2FA82662649ABCB -242442DA2A27EE890F88954DE14FA3EDA4E24B597C825EFC650A1C07496EBBD1 -C544402AD3FE21B0EF55FF6BAC832F13B63C0535BE24CED792405BE24494A57B -F35B02F9E199A5B1A6E7B4D43D31BC6EB50530DDBD07811460A0810F0FB6BEE7 -1332B0E01EC702DDF7983DDA79BF5D5B825AE295973AC930D273952F90478A93 -4FAEE5D07B7A49C4342167A4BF16E8E4670FEABFA6F10704CE39B72497A4C92D -A072175080AE2A446E06D5F044C1F82168D2FD154448E6D7D3B5CE78A9E77A46 -66EF7F98EC6E9EB519FFAEFDD01DC0CAEA89BDB3FE7A655D5A8EC6145BD15F52 -C8384B87FEDBD0E77A07BC49854EE6494880E45C21CCB56F18794D93B7737B25 -9ADD7294B5DFCCD01B82EA1338C60A -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMBXTI10 -%!PS-AdobeFont-1.1: CMBXTI10 1.0 -%%CreationDate: 1991 Aug 18 17:46:30 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMBXTI10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Bold) readonly def -/ItalicAngle -14.04 def -/isFixedPitch false def -end readonly def -/FontName /CMBXTI10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 44 /comma put -dup 46 /period put -dup 97 /a put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 114 /r put -dup 115 /s put -dup 116 /t put -readonly def -/FontBBox{-29 -250 1274 754}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE -3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B -532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 -B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B -986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE -D919C2DDD26BDC0D99398B9F4D004B836D34E88C20EEB527CE1124209388A2DF -E27A8DF298A2693A9D529916AA0B2176E6ED237F69D84A8FEEB36861D1847207 -BE2BD61C6A412FFFEDFF13AFEC32AC7735BCCE5965F5966418A62ECB99112AB3 -3BC938EC590FF6922659125EB67E260BF02885E49BA6019E696D33F0B53606A2 -F515E0C45F323311613A94B838491BAB9FE230C5CC79D22925E3D882799F2707 -C32975A494F0F9513E4D8332E7E54470D9721FBD345CDBB48286F2F19CC6D66E -BB631DD6476A509167A49CA525A72CA50E82C1D08C2B372DB54C5949C753B632 -2009B761EB90492ACD3CBE6A35CE1B66F3BC4D8DC36827CE4261A703328451D1 -879438479917C1647772999171DCCF1491A1C9086E0C6393506768F8757BD81D -141C46EB9BF507EEC29962A0072B6C5D8C8588F3D68886CD2606DD3BD2FECCEF -63245494E93EEA12AAFB06110E54ADC444C7E7619627A48A464394E5DE06EB46 -4C76A2FF010318BBE48B3776C826A265C66515717F7F2E943C60EBAB23D96B5B -FD514A1C4E79BB3D3D2DEB936F90CD3FABF7B09FF7F564AB5CF4AF6A40E869FD -395885A88F4A138B3CA6943A2D430BBE43D91F7F17621CAF52FB7161DA3B2003 -82244FB6EE792DCA1722C03392C296C029A2DCC5BAAB3EA03F8DEB039DC83AE1 -763AAB84776A2CCFFAE9EAF0BFDAE417E8BE682D237FFEDAF224AC09C9665019 -165CE32F5349E857177D94AD6396570932E1657ADE4D3FF57A3419946CCD210E -57E5A1D91CF708395942527D127606350924D71BC21C6F969288B1C8CA3404ED -E6219985F7301A20621368F74747EAD38990A4C9F2B62913B8FDB93657409FF5 -178DAA7F1A8B042525A5CBDE8EF9962BCEABAD0E6E00F1CBAE5D2FFF7334E902 -1BEA1DEFEAA30E7CB88C147C8B56EB750D9341ADEB662A117C330E2EBB261C4E -2B14DD41D30280EE28326170412088EDFAEF04F0FCA84B3BC5775A7D86429755 -540F401D553D528525E26D875C86776D50E02E583B2A0918BEE6958D330A5B9F -CF5A36853A8E209FDBEBF334E3C030F138C825729069FB3F4C4531D02A793323 -E63B81554F9F8C917FC4CFAC67EC85D22DA3DDA84D98C14BC2DFB17B86EAAB62 -4BE0FF069718C6B58DE6278869D97A857D9DE275917954D61B41B64ED769E600 -BB8376B345B7DC58FB3E44AD5FD63A94355085238E70EA1D7F2D3395D40342A3 -657CD984634D72FAFA262721E59DFB5AA0A75F59C9FB12FB8D8041294486C9D7 -24A94AA3D7F520BE5BEA49F74407DC1105117283C87F68BB29AE65CACCEB41D3 -2B9E518DC77A1A80628488B4CEAF96349C9E387F795FC6A2A16699BAEE8A5B43 -BCF112E19B89AB50568F16667D288F85F0F1679F856FA5A9569C466276020379 -CBF499523C92EBF9B024AD044B9CD26F5FBA63FC4CB7E83981DD934C3F2CB708 -2B511CBDEE0131D60340CBE118DD018ACE9B01963EA469AC76F78F9815DD05F1 -0F836E0700F8A0EB52F3A3D042427BFEAEC8A9F19E1E0AB09898959D4B506C2E -06153F84B13D53B41399D3066FCC7414EF72654D4942011377DF28FCEBE6F976 -A9E233966ECCB39A5AF2A9B64B296070388110511BAAE2635969155934A6A854 -281D7AC4755DC8526F623E0689E43992F0668BD043344798EC161DD6F406FBFA -93DB2B7AEC1D43A43D4BFD21106F5D1BC4C57CCB76348966902CF9B2A16B181D -3C05A6F1EF96F6FCC1612C4F79B9289F209DEB7817E6FE4A45A7315DB456C97C -33FFD316EBB973CD115DC170C45E8073BAC84786BA699C6A8ABE92E64C8FC4C9 -69FD50C2408278F0EFEDB28AD2E1DE056F80F6E7DBEB1F2AEF2C38E491C9E05F -2422AC6C34D274CA3A18C159FC84F4A70B2C4CDC3FB39351CFD9213E8BD965D4 -6FC5094DE78DBEC90B38FBDED53D8DD0B68296321D25E0988A7D1B90CE3561D9 -09B323545286374B9407CA2435D49BCDEF5A8B7640BE1C205AA1F2F4EC0478B3 -D104F77A29F6A68F437C0F1AEA70859DED0A8BF79FA969A1048982AE10ADD76E -4724F40158CAB17A44670691BD226BE1FE580B1C325943D41CA05E7C01EE4BBA -4CD675C169D216A54AAF609C5D95CD68E94122528330957B82430C6E329BC1CB -A35F7C9D75529439F7EDCD09991D0E07ADE2AE209AAD1EDD929980C6281A271F -E590995528AB6B2743953FFFC54803622EDA8ED470E783A8166879EB021F31C8 -03784119078E382DE6F0F06EFAA38A82D11C6A6BCC3BF34AC052F76BB383917E -3A06A36A5C1715120D96951AFD43B1CDC42857CE28E5C9D493F82C107339152E -971ACD0D42AA97C9239B759AEF97EB5A52D9E062A2C30F884F7EF6709CBAFEB5 -B4CEBBB059C3FADBD1B16EBDA288834E3B02216B1B10752A183E68DEA7764CE1 -9B79EB5E3E989E13C39B429DA84D76DFF12DC71AF7A92271BC70951B4DEC702A -8D63CD6A1015C55BB0113DA1EE2DBC4F1E838D6FB23039853590E2AF1C2056A4 -FB7827DBABD9192415A7A27BE0237DD1A604C337932F0FC78D8FF044C15F0F20 -6C80F00DAD4B308FBE69E63476BCC1916B2092E2E6D8B1D025AD3FB2C1DF9DD1 -648830FD2815380AA3A88E1333A69AA02B8D892D1A785B2FB6A8481C846E9BE9 -371505124CDEB4632D5C8F64B0162F8139113CEBE7C441A92BED377F8FB3D1AD -9D25D07620782185FEB3EB67B56FDD06E52F80BD76E77BDAB419F9BCC1452CEC -27BE5FF7918BAB7ECF4FF5124BDB9AA16B17D41FC8B6539DC32FAC82416E3027 -B484F9911F5E190F9540124950C26C4E8EAD4F7475B7249B2DB24B35DBFF5F3D -402AB710D2D8CE104E19A5E4FB8645563E0C8AFB129AB793A99617BEDF39541B -925AA11DF9606D2EB004B3231A2B15E9F8B6F26732A88FED3C022167C3D6A000 -E7C0619B876A603CC0E58BE50D413C35293012F2DD2FB6CA16323DF3A3E5E807 -5432D5EE8F51FF8E7C584437387D17CD9E1099E71F3A1AF2DA3FCFF646CAEA97 -2356C0884C0E61DCE8E8A439EDED6B4772B4A7851A93B03A19AEA27DFBB6EE23 -AF24E53EF78242FCC9CAAE34C647C8546510D147C1F4439D806CE97842F02BAB -9E16280081F440FD0AA380E8650A6D13F7D71CB25EA85F58A249E59B5D5DCCB8 -A69989E5E6961AD52602A39E98CEC5ED74BC19276C718A3650939D029E545D1B -D6DF887B5A3BB05C27AFEA3ADB01F36E002B4678E5571115868AD2FC7B1E5E72 -7AD04634FE841E1CBE1F8ECBFD1C45309D9E385932E633090496D3A9B2417D22 -A24823F48822826A4B26ADF02AE5FB770EF7F3F3CC11E2FDE0F43AC54A5DC415 -21ED689D3F72B498EB4982535E3529D32887DCED0D541EDD9349FA6576B9F601 -DB961068A8C7F2D0C47EE3A1DA144BB6B3FCA580828125F94892B2BFA50357F0 -94ABE92D150926289A6F8A1FD891C23D9D323D9795E7D67FBC1E6415F31FD5AF -139D4CA8A6DA504A4A1E2D50778BEE28DDFE7F475ECF71D59BB6FABE0EE3BB8D -6DFDF80099D649271F82E746C577C803D06792542036AE9DA4C011B5537C820C -64F8420F61B77D8609E53836C0FAB6DA6351E2D345A56C523A71AA4E2C6718FF -A8B9CE6AB3CB9824989A6B800FB0BAFFAEE07BB2CC831FCDF6B5019D42059410 -AFD36425A090A15BC763041ECE1BF329E4F09B6B849E4F9316A93AA4309A7365 -4733F4BCC07642AD2213F81144AB9ACAF4990B6052D5A46BEA235A3A8CBD6FC4 -C72DDBDEFD8692BE438E3A021881CABEFB2CCFE562DCAA9DA838944AFB520AC9 -23982982329C611BF849C6160BA6C2C044E65667D2C06239B213DAAED0BA38E0 -E53C5961EB75116CA9E39347A3F1EA670FA06C156566F282411145DCF215B03B -D24124667981C017860B9C1560DE1BE7E16B006BCB8621CD45C57D4F0D8F5924 -E2FC01E067C8DAF0CC05FBE813228C40C2D9C3B045EC83C3CA2C4C84FEFB1623 -3417732BB1C342D0CF48222A82CAB1FFA476889E04FD2C1DAB7AE9883989735F -058B83A84F3F6D1416DFA29DE2293F9CFA5AB725ADDD08EDEB5CC50E6D57C859 -EF8D3C14F057A6C68034D975745E991DD147E5C590B2008CAE76116EB2D0FE8E -F46865FA6D8F79B10CD4B9D42227057581A7B72000E9ABD7C7F4130D43810F1A -188EC3B172CD512C586B3199A67EBC8112A918F3C9092BE2EDBFF3FD6F9FFC14 -2E25E9229F2CF34788E16E2A770888E96022E4CC3F957FE82581D7F912DD006E -C6B95791C6F0520736A0838BC3FCA4A494D3F24CA1491E2A439CB41C2316FBEB -0FEA63FD8C862898B316D63431C0F70C7D6D79F3D1C38C84B188D8364F6224B4 -B3000BA047E791C38EB7A678D0C991110B730B60C5348031DC36F31F9B2E95A4 -7D578AF47BBE035BD62BDD32C1C20082B18EDA42FF16B5C4FB8780D5D8C78F10 -32B85F117DFC2AA6E2089ABD08394B528A0269DE98A0747D10667A93AA76BF3A -3A76468508C066E9AB124E7B3FA15F4C1B52E89BC9D9C95D589F70FAFFF1DB18 -E698A1EBF59AF230FF82B716F3AACDE9D8988244A504DCA60542DEBFEEF165B7 -9231C25848CC08D5A200C0348A554F5C75124CDFA087334B53F7257418D9E004 -C21D22E8282FF5C2B180956254C71C9CE5EE1885A021F8EEFE678431F00844C4 -B78C40740C3223C70065D4D2D1122995FF4347FEF783482616851509A95C7022 -7DFF39FF667826BD352A62EA6DD12C270A55E940193867CBBEA23542BEF431D9 -EAC0BAB794302D74DFDD60637A1C1DC94073573AA8B204C07A1C052073786164 -F5767588AE94105CCAC029ACA2B5ABDBD0385532C16871FDA5E2CDC4A0625CF9 -A8F6309C743A4D9BABC6F4443AF764A4BE90FFCC605FE393C89AF9846B3663F5 -8C752BF260E416F3AFB58EA8D2149DB8147CDA49E28CEE65948B0F818EF08B68 -F8AD1CF74C324CBFEE3267D5F374EF7FB2E015046C6F67DBEA6EA09E7D809607 -7511DA784D282BA231822FF1C47E5C5AE95AC12F1879E6C2F02272796535FE70 -A23756441B535090862E8BE3F9F63DBCB4E808CE0843E10792E47B0F5B6BDE37 -2C82FB474B8BFAE62A66A7039853272F0A797AF230FDA29B7071FD2F6DED17C8 -3BA07BEDC6F7EEED4FBF4626DA2C3397D430256482E277EF01591077CF6A10BC -F1737A30AF83DB7373C310E4E6577E17DD1DB847764410D4C791C3104DD7767B -80B6F1715A784EE5E6086703FF9D02 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMITT10 -%!PS-AdobeFont-1.1: CMITT10 1.0 -%%CreationDate: 1991 Aug 18 17:48:50 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMITT10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.04 def -/isFixedPitch true def -end readonly def -/FontName /CMITT10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 97 /a put -dup 103 /g put -dup 105 /i put -dup 110 /n put -dup 115 /s put -readonly def -/FontBBox{11 -233 669 696}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE -3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B -532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 -B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B -986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE -D919C2DDD26BDC0D99398B9F4D004D606918A40B8D7BFA821B73E118040992A4 -E1BF99740F8FAA47E4349853C8149C0F8BE2F23C6F332BC0373C867D0715E8FA -FF163A60AFD0FED665D5829739975C5DE12EB30895604D211F645D4E13330DB7 -64B6E35463C93B752F691FDDC44595B0A0E9E57C6F649809C4DBC7DB58102A60 -46349E9A5740893A1BD4536B99ECE72B147B713619037400669C07291022F84F -4F3302F8244D2F0F1380466E81E0B5E00AF33E021A55620A7A93F3BD49C7040A -67C096167F502EF2051B526405B9391B4340A3FFEC103E317E315A88D31661E1 -7E4104A2B925D1DDA9586861904FF6FFCE6A8E808385E4C4014F5A494874E2FB -C3758D6989AB68C4CEF82F92B9439794FC404A29D086ED6B27997735BC3A24F0 -473FFD74BAECF5282E2EBFCB92D69B81C568D394055E2E30A7E3F448796E4EB8 -019AC2E075377F777183BD87FDD194E855ABFA35AFA73304DBB181C267431B16 -70456FD8470B525011891C1E140B8FF24A474B89F1CEAAB509F91FCAF512E16D -8413BAC0C664FDCD31245C5996F4883305D3EDF1C8D1E6F0B1E79A06028BBDDF -6AA5B515DF33BA8FFF2394262F3FE1DF95AD661322BFA5179E325BD1B1EECE49 -69F64789FF1BE8DE5CD7485571A07471BD6CAB4891BAB122BE4C4A1B7176F33E -A1A434F745811B71EA8AF73407F32E9F4EAAE1C1FAA979523C18A24F754C307C -CE056DCB71B20292D4FBCBF9AB9E9B81DADAB90E60BE926315049E5BF0F50315 -66D82E4963CB556F19461F43EF80302912AC1168884A1692AC59BFBC431B14AC -A5FC06C4AB595F9DF66CE5EB69568038445A9EDDE20CF92BA308A236774A2F49 -EF8963CE18EB97DE9231C4C03676C11641D13B90688BA5E540C4A280C7678617 -7293632B53DB40641C8D47EF27988EF600EFC5600804142F531E78D764144A2E -AEB4A2391AACB5F8C9FDF3D5490DBACD92B19911915F05DA842FE848780BB452 -E98350CEE5C42294927EAA97407FF9B45587DCE22D42C824B83C97B6A51E6CAD -46FFF7B4C7B3637852DC13435854DCD4E5EC10B781FAE382A39FE0DB45FBD430 -F82EB776DB4DD9FA71FD589AA4D4F76BD0D067C511791D54C33A5371D975E14A -BB39BEF265DF77A56B210D309D2761D6C73FD79873CE660DA402B2C2B735D83C -3ACFA038723C5D3E69B5E12E0A54C0645E74954B726CA5135E668E47E85BD3C1 -BA7383779F860246D4EB38F0668CB2D16E677A08D0F1284D631E51B9B4C301AD -4C85F718276B575045104612970EA9CC23663E37743D93511522D1F60CF1DD57 -C0CA18FC414409B25DD05D9C037FE7523078B3850FBA9B47CCED2005FF025702 -ABB425B7D1DDA48306ACEEB7C59A9743B6A387E36703F82DC8CD8C86F87075EF -84A67D5B78A573668A21627E7677AC45BEA2D842F8B06B71E38F0CF181B3F05D -3E0A21E1479E6ACAF47C700C25201ED53B7933B63E67E45B74FD7A6A7B02DF5D -8E31C2C98DD92F0A3E4B29DCF7D4DE9FBE89F97E8839570018BB4C3F8C1CFDD1 -828017717BDD8F92E8B2AE928AD81E5862189AD2E036084302D8B49EB06C23B0 -90AB7196C10798669D38959FC13D08DB64BA977EB5C1B93DB288C5EDA3BDA2BB -D8AE36745C7EFA305FE7F245CCCFBEFDC153AF7728717BF129C77CC26D46F8E0 -78E05F6F3102B4938564342CE52151855AD61BA6BF920F8E3F04FA6D1345898C -814BB2752AFC741209F6B696A9B378328D777392C4E1E4B3955F9772D4BACA62 -FA08DA77394C0A4D6D44847A33C7BAF39800D30F90C42AA4B17AF977E086E6A8 -0AA73FDDDD635CB7E09B819B009FF9EBC01A45AB33284258E88C42C989E37018 -86BD70668C48338A09F0A3D38ECDD7BB3C1E2AF3654B89C46325CD1198E1617F -7882F265EE0171D3E200A012641A1342233F5AFDA9C621B2C2B5C59A780AFCD3 -FCA4366C9190FF08C1D5640014BD6D0D55B67BEC2FEE8C8929A088515A54C998 -22EF00FAE4834A64C2C1EFE015762E398FCE4EE4C7D63462DC0BDF5354796C4C -C54FBCA6FB0CF89D71BDF3BBB2782FAB50DAA8FB23C12AF62116B6AA8C6CA717 -5FBA8512362446CEAFB9B5B0AA4A5843B052F7BAAEAC59268A01D7C22E20E6FF -2C8A63D974998D56841473E19EECD4D90BB9A8723F3F975B564D8EBDA2A84B51 -FC8EB64E7E51D9019C69DC7337A4DDAA8758CD0C45250B96ED3D95DBB1ECC3F4 -148B2807A89C2734B27410AE504378CB464AEA0AF527458FF43F08B1AFB39179 -615528BA34B71237BB114B3AB2EFDBC4FED6BE48A29AACA09D19BB974468F64D -2DA1F046FB77308AA2FB89CE8B857856B26410FCBE13E7 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMMI12 -%!PS-AdobeFont-1.1: CMMI12 1.100 -%%CreationDate: 1996 Jul 27 08:57:55 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.100) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMMI12) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.04 def -/isFixedPitch false def -end readonly def -/FontName /CMMI12 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 28 /tau put -dup 58 /period put -dup 59 /comma put -dup 60 /less put -dup 97 /a put -dup 101 /e put -dup 105 /i put -dup 106 /j put -dup 110 /n put -dup 112 /p put -dup 113 /q put -dup 115 /s put -dup 116 /t put -dup 118 /v put -dup 120 /x put -readonly def -/FontBBox{-30 -250 1026 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE -3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B -532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 -B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B -986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE -D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5 -5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC -4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67 -3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993 -EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F -4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59 -2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A -323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C -2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1 -D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA -5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F -0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D -A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77 -2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60 -00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8 -CA0BD2E774E4D04F1F0CB9AD88152DF9799FB90EC43955871EB7F0338141CF69 -3A94F81431168EFFF7462ABF70F1AAD9909E0183601E417073F4EC7DF0180A48 -73C309956ED2BC852965D7D4EF3F2A3F2A798CD61AE418D9573497D3911F5323 -ED3496F6AEBE685EE322F58EA7402EF6A7B6EB9E433EB7D0F6E3C3BDAD24F983 -AC4415A43C9687642E3BF1E4F4A99F03FA39177E5FFF4A9205E20954906ACE66 -1BF1C9E2E43707530FF446F58B37C73CF2857A7ABB3355DC42F2E66AAA8E40FB -4F9A575B9C83CF9529A2AF30DA023468630AF059A7DC07EFF8041298B7AAEE9F -010E4C93C08FCDA085657E92D98E9B33E1A28D3DA18FCBCBC7839C0744DD5CE0 -17FCC070EFE545CB2387F92A4B74262D7729B2DD458248397176142195B59718 -AA5429ED39CDE4F9CD1F92837B1EDAC168765EDD6395239B7C1CC552A6EC2A8A -76E87AE3D015F874FECEF9406C030BE3732916C975F583FC660BE945F1A3EEFA -A3B4E315BC32CF5EC239A9CC1B8ACB2C09540B1A42B6D057F6EC11DC7BD2F474 -72592808C08B7725B4F629671C96961BEA8F3C44C56A09C74FEE732584F36B00 -27977D6B37B2827E64FF0CA96215E62E3A5C325700D9B26E3550CFE92EB1ADB8 -E291B92E4BDEB32E539CD690B41B639E21B547FCF698B77B18417E645C6DCD63 -3FD68D26835FB59036B3EC45D58EB879F03FD8DF16CB785948643D059790CE7D -1CA1F45B06D9C952F6E026953949028A6B799953C166A2C81AE7FC6014F93DAC -887BC8017967C35B4A1B7CA05420725979DA861E81425432F474F38CE4E49D44 -6EA4E6C0E6CCB35952361F4C7DEF139E61B51BC71CB8055A5C9330E2CCA97B4B -5ADA587E0BC2F645A96A4E90EA5104B57A6D1414E9E9971602860EA30C6F24A9 -B9B1E56085AA89815310ED7817594E3894EAE9FDB82D188B1EE1D40AD932D523 -A34E01ECCEF6EB38CBA833584C69B3C1052493F491B65AC17B81A6DE8691561B -385CA36E724463959D431194B5E34CADA860F347C8CEFE7DB3340754CAF5F781 -ECC0CF5C193CB0271EC9A32C473FC58215C2C81C13CE442877FC533CD2EE3444 -75B1F267E7EC96E34053BED292EA15A79984C55406EF51A0777411B52F648F37 -80120725C03B318237F9F095D2987E6FC7EB78E07FE8B3855A7D97207F8727BF -42F6CF771E36187FB9AF9CA8129794A5ABAAF107B970EE7164D057757735E70B -EFF1919EBB0D81D085723D010F5F97B81E5FFD4B81B36D9C863E99B8E5B57F76 -760D19F1BB62E78D11F06F5C75683E7BA025E9196BF250CD4ABC228F9C8CCA9B -EECA997BA572CC23BD48AC7A3F51D98665210F37989AC1CF8391BF09532DAE98 -83F6C65A3BB83F4C586898F320D864B47FF20DAAE3B62FCEF46B01458A88D02B -6251684507C23435D1B0733D058CFC5C32AB2C066889B6FBEC3E4AB430DBD84B -D5A9D2028D7F504A4510F45198D9BAE8AD0DAB17660B7AC42879B5192E052C6B -09FB5F519B63B860E5FF055279CA8E6F5F138A4DAB7BBF2A9A407AAA81B46DE9 -8AD24F497CC20D123C16496FF0419722CF37C39314AA23EDA194A2A3E98A1C77 -36CC6F6E12D272ACBD8F9C4133265988AFE1A8049BE347803F4AB77D3E55CEC9 -2EDD1C5912B7514C22ACE97344E5C5E8800A3877286AFEF66F0E58D5747544C5 -EDEE0BA59D8C5E7CC8D7C7DA9365AAAFDF6F1C9FCEFCE6C43397D007C094E9C9 -E65E96D6C616DCE7D9C10075D3139E1CC28346894EA98213080BC5E4BD65C81F -2679CAF7B3BC63DC8FDD9348FAA99CEFB7EB2A3D41C6161065910F27040A1B0A -5BD3CE5682D3297452DCBABD8166F79A6FFDBA071690AF83A6002E389A09D6DB -56905006CCFF447067AA7037BD8712D7BFA24DC2A983DA1B7E6B2AA279A04A17 -ACB078B20F9E5B709E9301FFC47A4D622EF19B69A198D0DD150998EBEDDBCDB2 -09ADC202624A54DAC8C68E9FC6F7527A5649A21E31FC25A306EC875CF7998520 -3082BF3C887D71B9A60C5571C5304779FDBDF196087B15A4A9054E47F7B71360 -862992AFB63BA8861ECB62418C8A357727950A076F02C192BE377AD37224B93B -0856B68ECE09FF9BD120C419D88DC3ABBCA69A4A4848237EE9B24FEA64A2569B -A27A517CE3022DCEE263C9C0F1D6E791C78461FEA9465F536B94752EFBD99F4E -D7E43C93E4F6201AFB99BB67203223E467867973A3B3883DD95588A5B8BC14E9 -E609561473F88AD4E47621A97089046A88034C3EAD951B14A27406B9AA93BA79 -F22E611AB272C08371C923A88A0EDEBA6E95182FF4B5F25E776641C46E21069C -55586511100E8FAB98EB8D70627E75838569E82F6DF6B6CFAA5EE161103832FE -DA4DB92D2437B7A47247BC4AC9E84DAA56414E28828891DB79EDBC955B2A0CF8 -65D0D9E085D749715903FEEBE48DEDA8C9D93A2E715EC84B20512625DCC64E93 -FE68714677F211C4D08DA982D955E49871A397EA8B5BBFE601B43B891360BB82 -3B1BD4643FB82863EC4A67F9609945BB4E5276FD3AF8D3C2205ECB2DD5FA17EA -FBCFAFE267B0DF3ACC184C35803A83C9D4D3E57252D305DD75A8E6787AE4BFBC -AE143B2DC3DC93418329CC1F83EC67D9B56702B3A6EB051B59016ADDE4F29936 -08B7E4719ADA9EEDD438E7B68200ABD898A8182783E1FFAAB5771247A0021AE0 -2D6A2C91184C3E146E8F6B01AAF73AEE47CD3BA4FA0E85FCF2CB7102D1817A71 -728EAA827D1503933A6E09AE0DB7A2207C7AB8367AA237AE3352D00ECD87175E -CB21FEAB9BD4240CEB1949507B1DF4244E7A995E0A2DF568A6C91FA71C59F772 -170FA78EFBE6BA7B901D32F9F461F0165EBEAEC82FB851DB11D8ECA5C1E75EAF -B60FF813DA571D1E292F6F795E7EB9EFDE3EE51B78E7F1180BCE75B8690D922B -8384E08402C3860E62B5626FB4158539E4BC1AF8DBCD621D7EEAFA914E75C527 -82E7DCC0EE9978A488EB8D6B9D0A2F94C91E68F209EB257054445CCA8E8315C1 -7344F218F8F6C516EC5F6E16A1E36950A55F90AA704514E1EFE31F405FDB9E8F -3E7B70F4266D4C393F79A4A557D4900D495061A5F05556254381B85FA3F05311 -42D317B8D93DB90AFF71AE60905F3822423D4019036226A241130B5A081511F5 -A5A73CC3B038618058D3C10425437E21F0E15294F53D1E7C8323455CADE2B414 -5395AD43B238FD28C5997C580C6F5360FB1EF7DC9BD45A8706DFBF60F6CFBF60 -9A589BE369ED710A7C57FC98133E2F47B217D4ABD99D8927A23293D7DCB129AF -39EC927BCFF60C13A1452211575AEDDE793D8A6D2D2E4CD928095B6B027BE147 -1510B0DD3CCC78F8B959E047675F4040FE6BC65CF5ACEE68F722670DFEDF51A3 -C3EABFE27A5A130B8AE85691D4D4AFACC139386328EE3EC68D84F0467BF16106 -2CD11F0006EA60D8E182A08695B2C22C3C166175989F7F0B30B4379B6F2C83D8 -1CB8C063AAA177169942FFB4C8AADD32B351EEB9581C6EC13CF4144186ED63C9 -D9A1BBB199A6AECABFC5EBC410630224EDA8AE8ECD77AA4748792A7F9D925127 -1B7DD01B07F71EC47321BD299535DB297C7C71EE52616F43B54F1F87D1D8C244 -978F7D2B9C6E5B3A609DF560FBD474E34C943DAE80F36DFDB568CCC270187392 -A17EC8047459222ECE743151B8669D646268257E0A760DEBAC3467286532DA65 -5C803CECD30939E6CD4BC03FD3716A5EAF29F83ACD6D45AD90AECBB705B230C0 -B0A9E703D72815A3EAB4FF291297D39B8B4DB58079966C27CC31C002CFDBA99D -A3B306FAAA0085F508D68B5C286112C503E3588A24D7733BC68D8B5CBEBC5DE0 -4587360AA1E929B476FA5C8C671113438B0D394D19FFC435FFDD53E35CC94333 -F5941C8FFB980D9E200A8EBB79771325303C6835F1A59092A12A141A03A12926 -072C464FEDFB121BB42EF706E918B5CB8726A457E9ED036BC6656824AFA7A7B0 -7654CD89B549F5A46AFA971BB4692BBDD733D39F04C90E5F1B978450A613BBDE -F1EC8B53092FE830A3DEE64C356A734CB6EB9F29BAA25D305DF0552D802062CB -446600547939321FC0DA1B1F99D634B3C9A6EBB00D90E7547512ED7BF450933D -0B3A078D7180976AC5811EE5BA5097F74AB1891F36661AA143A18F986A2C6A68 -289B29D29F2B33A7616F90BE038E6EB0ABE4966C17CAE6262315030B1D5F4A6D -529A639825C9F957ECB463D06C454AF090F73AEB3330CDD7E71C44BED0E73368 -C1864A79B22A3C22DFFA36DFB3E17C64B41EC4CFE3FD289CCD2DB1B5C90523FC -759040B946CAC3F9B1CE3CF7479D01C2F91416837CB09CF8E64CC94F919EA7C5 -E47FC5D5D27FBE2681DDA06EEA455FF5AEF0C67D23AB20039E6BD9092FFF5CBA -78BBC0516DB3D68259D337EEB61C00733EAE37B59ED0E73F236030299D731BCF -4DBF8389DAF3121789530A048E49AFE844279D075029B6EF9FC6BA8E019369B8 -E3A094C3646B9AAC7232AE1ACD5F7E0D2D914E9FB17DEE445200BC069CB8E169 -B396151D35E153AA0222E02B5756D5E867B8637C7A5B4320D71681CACBA2D242 -104CF87143D25221F29290127DD399765A07EB2FF28C5EFFF322D2E670642F08 -1B9ECAE77673EA00E25A868AAD699895353CC5FF90B989660134014F4F0415F9 -8F427E07231F1CEB11C950E0EE7B6CC5BE5817A7AF25590645CFB8F2F3D61F90 -924A1C03FEA396603E2D883D637550AD78F26388164E88D2B6555E8897AC9A58 -9A589C6A5E4FF3603772D15C8D4CFA42E5B2AE6D095B00CDF1DFE6EA7CB4795E -352DE2BB4294660EA668B4A657E0B37E71E745BF5A4D1288 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMBX12 -%!PS-AdobeFont-1.1: CMBX12 1.0 -%%CreationDate: 1991 Aug 20 16:34:54 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMBX12) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Bold) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /CMBX12 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 12 /fi put -dup 45 /hyphen put -dup 46 /period put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 58 /colon put -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 73 /I put -dup 76 /L put -dup 77 /M put -dup 79 /O put -dup 80 /P put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -readonly def -/FontBBox{-53 -251 1139 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712 -B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99 -AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26 -7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF -20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390 -B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D -68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809 -D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E -26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D -F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26 -77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299 -BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E -C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8 -30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5 -148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C -E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D -E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23 -337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598 -0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6 -472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E -A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26 -331CED14CA90BFDFD2A21749B5C73F47B44623AC01BB4455F572CB2FAA2C6C4D -5A7F265FF9054A46B2C31D82912B0593D6598A1B4BE5FCF13F8C72A8EA62E66E -1A810C9ADA940D6D6E22317490E701C25AB9C78F3DFEBAA96D78730C0CFCC763 -62233D165D70150BB3913D21A764C0B9B7B3B08DEBE45ACEA014FFB9AE208A14 -E2757E90FF1E8998255113E3A9019C6C623ECE3F4715034D6498A9F9D511979E -03D66EA9E80BE13AC8903F8D0A4DC51DF9285938674ADCDDAAA0D3068C1047D2 -0B4A14ED3BBA1B1B2C24DACBEB75405596DF1952833E2B2A0630DCD8A2EC0743 -5606A3BA31A38ACCD479F2F95C5A0B5BCAAD386883854ECAA417A0DDBA614FD0 -2B89B762C374FC2EF98AEEDCDC9A4792C8EC8CE399F665B503EA0DFA7090F304 -6584BF4ED27FAA9AB4C896DB7E8F7860A5A493A2F200DE64BEEF8A49804D8910 -3168661A31C0261F3CDD7E5747AF3A18921DC68AC2DCF486A3AABF35DAB298A9 -0A9535BA8D8A8C880B94693582CDC0462F9065776FD6B5F49DB7198AF977C228 -9036FF4F355103AB44D2E1CEDB352A917C5B510101FD8BCECBBB6B8ECDCC8E78 -79B21FAE12EE5EC2D3DBC4B6C32D2871206FC19FE57BF8B6C3CF619D4575C1AB -4E7B73D5D379DCEADBD7733A502D2B1A10CB8B656DA626963C590761D196888A -6C24A5F55469A75BD95A00342A35908970B207D2F1E951A2F389B0C6AF3CD110 -A81395E7195062CAF4276791754E4A204F9375684D6EF9178D09ED0873AB2321 -5250D0181B6756021E804027EBC00FB8480AAD726ED74A67CD8D5CFE1CB0A04F -A4A25B861103E73A0313A5501252575D0DCA628614D0C73AE33AA4E4329C768D -BB3B21CD00002B56435E2F1EE0D7A0EDFA4F0E25930848BCA1DADBDA6056AF55 -2FE29C5664FDEFDBAE57F0CE6EF0FD02A745A1C5003018F07ECCF65E8595221F -568387B51310FB5C4EB6EC3EE7503E0145257B4DE729406AD9C1B9BB4C663FE8 -B5F2A73B02FBCE9060C51C48E4C28D9C502C4D8BE1DD12D6CBCBB789DAB0DA41 -5DB39CBA83865C1287614180A459A86410F6F0D6CC0E2078A0A020DA53B19749 -D43D6074E9F7487F54EB4DE935D8B27E25B00970DB2D2DC2A193AC1413222B54 -7432633FC2AD22DB6AC6878E998EDB8124D15A4431EEFDAB66EBB9311FD4682C -F4A0C53D509DA5A3B898BA6F108ECB38EEA7C267683B8FD2F66A1C1FC17A77FB -543C0522ECBCA028EEE64C4FACAE5492946C303BB11DF98161F61D428359BFB2 -0CE226DB4512D674CFC4DFA5F4F0775E824908ED6ACD83181625F0D60C6394B5 -8EFBC4CC7C013B1F3422450B0561EF6598B2B9E1574A9B218801A2AF6A2B3505 -2C55B3FA711B79E032BBAAB50316BB025D1F6A9A4C838F21AA1D23F3D58A7826 -04A52E050CA2CCEC4506D1C44545E5E15A7FF7CEFA6AD112F5A5F2478185B7DE -5B9CCA61ECD4D9DEEDACF1F6C1900DC63BE2F2EB4FE8C6D6C8F3545BE9DE1253 -531E628C47DD4C9B9ACF7B86F74CA54C9D4356110D499AAE92AF03FCC6F561AA -0A0044519948E27F15B7DAA44BE1380622EBC1348835AA214FCB77EF1F0C95F0 -4854A167744FBFFF17C8B4F91D904820C18C1329F5BDF627338EA0E813DE3D46 -34488D085C8CEC6E3F76FE9B51B05A79E1DD8AD5C0F13CDDDE89DB3AFE24CF18 -4610C105EBC63A17AB490D55F0E29DEEBE80457C211D34357A101BC3A7EBAE44 -84498A9589965B6AC174EC0779E87C441D4E274756EA418624CB00ADE62298BA -6F0861355A37B33523AB0838CC40FAD4C17C0C5AD1FFE291A4BB66F46E9C5E58 -9CBF241BA1E7ED6CEB421C7842D58F4F9B4FB99B76CB4B809A0757A9DC3C08F9 -CD900279F934E28F68906B78058F292103E4F11AFCC91031333C3307CC02762C -BDAAFC10FD11E987A21C709ABD9EDC422D1F7087EE9F48D2FB17401B3F3FDA83 -60240AD5A4EC3737150E48F8224F0ABCA7A04C00B738B848408E8693454ECE3B -DEB589B0BB7F58AAE3C7C64D459276CB203CA62619B1FF84EEEDF06F7C0D4FF3 -B07CBDB9D7861C755864229A567C87178B4F065BAE760041A8D3B9A282CCFD88 -3302C33007B0F14E65F9AFCD13C128261E2D3AC50FC44D2994A25E814C25DAA2 -7A24721E746C4C8EDF098DCC089A422F15DA146E4C3071CF2778BD610F1714CA -1DD31E2362BB3F37FC0DA8A17B308335832BE7BBCB9A43908474CB33BAC34A04 -34F7748ACAC20F2C069014A9C5AE4B7E3ABB745832987C85467508FD3E0BA702 -9A78392F9984899083B9ACBB04BA0F182EAB6D0AD378C0435BF584B5C56467AC -61FA3224FDADF7383543C4B7DC42C7237111160F6663D937F90DB90BE74A2F04 -4B697F4E65D21D7BDE1C1B13AEDE451C1E09467E4F6D9A58517EA301AEBA875E -DB9537385DB0C0BB22047E9EBC760B2ED2B1839E6EC76574CB556F2464CF29C2 -08E4196507DA16EB8C983BD9F41DD42300B414CBE7E0835D2C7B4FDB7551BE02 -F65735C53537AC90EBC732BA66C9DF5F34C242150843A2F248B56A8AAAD8D393 -CE88EFA5E7F53015EF396964019E859329CDA43AC37031A6E9B7F959203D22CC -7BBBC413DE6C4EA947AA598F7F20AB9E3539F6D83FB51262A3376704407FD3A7 -DA2EB4C3BF4C53D1FABAAEF145E263CC3237C5B3A65911754A199A2BFD286D44 -91B7360FE3BB2B22809E545719B847816B6144A109701C6BD60B044BC7C5429D -EA4BFBDCEF9386959657507A806B4B5C2DF347022CDB8E2E5FA767BE72616234 -AA222CBA32128754D439FD24B3294DEC507986E4D54B9A798CB7D152B39AC982 -B6A38EF0A2E59A9EE799A9CB167A1E80AFB9B39A25D59C5CEA997DB84348C943 -2921ACE50F17FCEBC69ACBE3323A6E5AF7A4B3E16197CF68C7EB716F279FA4EC -6BB7FD89077B16FECDC07CC06CE79314452DE642E198E22F8719533631FB464B -8AC830606D607C0C7888395A7AEB17631B4D5FF94DE0B9BF2E3B9440AFE22D5F -E93DF1284255CB4BF3DD441510A0A18BE28CD7E5AFF19AF1B7C8F4B1F834D8B7 -89AD9F3BCBE5211787AA0D8EF8600FCD6AECEE603A38956468ED73965A581F2C -336030833970FFD6E9E99045BA54D85CDF768D068E7946BFDDF6E38FE6A8ECD2 -FDC7C3A9CC4BC6C76894515A278869981D30BEB83819B7BFE55F00B653BA76BD -DED522DA2A3B65874C2F68F3F491ED5E112458908535E255570F3ECA30DFCE91 -DCFA0058907657E4BC1CD8159295BAA7102C119DF67372983D661066F825B5CE -96AC15482D2F662BD583206431235814C58344D8675D1932F57C4531AC4AA60B -E3BFE519CA80B98CAA127D1039B0B8F1C1BDCA0B82441B27A9D2369DBE433F84 -A473F1C1C67347D325CBB3B02C70DA772581F2EFA0B73330F1E222FD7100DF9D -DE3B38023B196A11E00194990556FE4852AB06FFDC7848228B7ECE2ECB889FD7 -D354F40CFD5F12E2A460622B1B4EC6303BB0D576CB25BDBD17B2664A2061D97B -F45F9BB4249C4517DAECC49260D861913CCAFF07A1F02316441DE7AE6DE6B7C9 -8522F905ADE911356566CEE1A8178FF382DDEFA780476B0434CFF669CE73C7E6 -A52F5B63A4AA7CF9ABF563ECF7D3E7E0D6425CD0A528AF15958E4D72C7CF17B4 -B9D23AF0BAB6DED3796B68897FB5D8479DD00B150CB4924CDC732758D8411717 -74F70669F9A55E79554A0577521C226D42F28A90FE172D1FED132B2BA1851E43 -CD9C20E00C15B168A2CA571ADA055B9103126F9E574594ACDDEDD1577EFC5F2F -7C9A187C806AB1B42A82A0C81591F80BCFA30C34DFEEDDC6CD5C4EB4C7009BD2 -55FCFCD02620F1EE304A69A7BF10F2AD48C1AEE61EB44E9AC30EDF9A1A1D62F7 -C7A90504727D38AFA2B320B5965A1F1A52F5354DFC8A08637DB33714F7939361 -BE6F93E687C466ABD555C35EE1FC2EB469E3DD8B18C0C51A4FEBCD2F1A922FAF -1853A79055CCE3111537D2FC60F7D5D6D716ECA21ABF43025CED29ADEE4EDE12 -C53B950491C9C173C5698FE6B6F2BEA05E4A3CD0D2501BF5A5A34B26DB0C23E3 -219AFFAB6FC049429BF36B8B5960E2829969A0622B33492C3E4D6D1C57FC383E -FFC2771FF952D9D5D735A5B84B23E529538995FD509CEA4DBD3171B820D1DAAE -76CD0D016E2995DB19FCC4E0FA19C46E00FC37CC819CA2FBFA504622ADF1E27A -7A9AF591F25747A2E8A27C14A3C48C9D4CD01FEA943B5D44990D5EF79D3E73F6 -2589CE81B40F3BCFA9C1B382EC75C21C1C5962FD10DD324B2C5D48AE00BD3D7E -F1E4770D7DA4645325A38DE6BF186581B87FCF213376BED0931180C9D83D8ABD -69003481048DEF20DAD02CAF72DB699830C983D4EA53D90E163AE6A142A22221 -740BF59ACB3865DB74E9102AEE43713EF2D96E6B270CCC51F96FB8C7379708D1 -98B7D032364009AAA4B52755A328C9DC34B4E33A7452C8D2BEEBFCD3220B9B7C -A4E1A946396C2585D7131DEA7968FFC91149AD9E46279D38267D40074588E5C2 -5D0E0294D5BD139287A844889EA4D20B2BDF0D178413F2555EB5BF48673E1246 -E592EABF3CBAE4F683E6DEEF03573424DCD6E955DBB0C053ACFAE8E63AD75787 -5AE7F635E39FA2EF0DE7B3C710B07140A4EB72BA631298053FBC175490F0AE58 -B50BD3F13BB742B0A58C8A7AB4A8C0DB15F51E23ACE196682619A62CC049DE41 -ACDA83122A37943069CA508303A6CAC493799651B48E11681E7C036ADA112B97 -EC9D50C5B1172A6EFE6EBBBCA1F839395D6C4BD05DA7B42E89DC19AF42B572E9 -077C918456E46FD42ABEAA3B59BF42E8F6A4DEB4FE4A90F64356BAA730C8A742 -B90FCF37FB932EF5977FA8032DF832F3AF7CE9E5A43F2B1A816AE5592A9305F5 -965736CE36511AFD43805ADAA4CB3309654FDF811F4A5E7F02020E124C62060F -5DE662B053E84D1DDF2E3E2A51E63A92ACBB1484F68F70D236FE2F281A00DA68 -327EBA95940229DB85852D802D6D83D9C0AC7AF91D1170C75196BF07B4926594 -49F50A4689437E17094F6E55AB8865C84F98E651E79EB911DFEB59105B0ADE30 -0D135001EAA3F6AAC1ADA319807EAD382E0223089666030001090DE2F88BD1C1 -FE7F7B6D0CD3DDC2C556F1EDC06522F96024F61E04BB68164FACE61A4BCF7CAA -E0B443EC5DA60E7849874AAD2BFDC6D8FE677DE80750A28E8BFF67C80993FEA7 -08AE2046BBC72092B5446E844377AA94E8B1F537E9459CB5AD9D5A02A5D70380 -69BBC2BE2AFC56BD1292F4FD57C77FF391BFE6425ACA17DD0A20743C2EC18748 -8684AAA4A5599F8D7FB7DD0B05B65CC7008C8E0A8683C4C473449093ABE15C7E -82E618E3414FC69218E7DBD9EAD38417572EA441701E1738C7C9EB69DDBBA1C7 -DFEDEAB16B71D6781E8A65CF383F286F2AD219FBBDDDCCBCB2138B0BED650927 -E7FF7D83E61F630C4743AF7F109E01B2575BFCC7B54EBF31343AE17DC950F691 -F48087C54CC0D42E76A74B337F83FD07D04E3FA2B5DE0823A44E2DEF8CAB55F5 -19E9178DC2E8319BC909A7DE8C7D8B37AF639C02C506B663914C211B0F05C8EF -2034BAAB55C6869B2FD73347BE77E249261AF7986712CE3C777A791AC024772C -9D89C006DCF77AF410B99F8A0349970870D17E80A3BFE7561D513C69DAE9795D -5548EDB446489224B016D3A228B8B0D95504C983CF173C72870EA06CF210AA04 -0E6F52212361AFE70A5733CA0364D0BE6277F272FD4FAFBF74460C1C5A790FA0 -86C90950AAA03E645429A719073BE2DA2BD4CD3173B4202CB7114470D00EF26A -9361C8D8FEB9C1D7970D193C806DEC7FBC28D96C0377EB79B4E63B407DE69077 -D66764FE7C1E56649284BDBD1AB5CC87F35427BCD372CA230D00D4CE02B09C83 -7AEADC0E65CA883C209059FA71E1DB4F2A696616A6C3CE36E3359D02D9AA5546 -D7A2C31D5239608060175FBDB7907C3B1C9A7D8FA910748E3B4EDA4FA2608EAF -7BE6C9900F8EF6F1CC802289E42D2C7148F2147AF4EDC2097E681329E5BF0DA7 -24EF6AA63629F8CF5A7EE694D594647F41341B40058491909C6CEAB3892249C9 -B64BEE25206170899FA4D105FEF4438268D8F62A31AF9D60E85C9C94BA713FC4 -B71095DEF6107715542A99E0EE147C983F9693C7A4B7FDBFDD5EC1C1F35CB348 -928F6EEB2FCC430C1924025C465D7C475A987FBF357945632329497086C0905D -34EA16595EFAE7FDC048D57CE57DFF5C1E8B88509B14280838E8CEF893E73870 -1E58B723EE1D9A5DD8E7F24D394DB4E187ED02499F24DB19A6990518E5B7F821 -01804CC9FF4688B408716C6AD454A9C04B6F652D6B0B6F0FE5D70AEC7B16A9CE -B3648FF685BF41617D789781A6A230042CE50BC1248FBCAC9D9EF8EF0A1BA797 -944ABF4E2A79595169A81EC2312D878582C9E399E6064DEFB6C130FE346D4D81 -0A47F949269650294F6FC0455E9903B0E7C15B64C5CBE15879CF57799686F90C -80A73C671F58B8C970F3F7DC66B7E763B000C34F8CF7F36495AD6B384108264F -CA561C86787B3ADB1BD44EE36843FFA423A859B7A8FCE8CD89190EF8D2E21819 -8C6FBC40DF241F4925F0CA5102C8780901DD545603694BF9DFB3F953324431AA -20AEB0C7B596DB989CADE2DBE5C9B68B4836FC27673F11DF780631E8DF70A4F0 -E4F90C77E9A6E680F471F4B4919BC187D4B64B3570DD38B4E882B981EAFF7B05 -72D69B51BC4690FE38CF29F39E41C6147A99C2E594BE46EE71FE6B594052A806 -3D143EE123DAE962D8A56AF577325ADABFA3DD4A486BC01499B580DD77868F85 -21BD1C7EDFA10C2BB615597BF1C011E95DE835BFB94F1FFBB62675E7B6515ADE -AB58C582EB4832BAC18511D9A6B5462CD697444A19433E26CC9B96257CDEA67C -F66F10B44DEBAE51666C9B24A2236B7A72F63A23164F3DEFEB60E5F551ADC874 -387492D12F5E2C3F409C121F873F11C8567B97CAA5B1BE13EF0FAA6E09E49149 -9A78C261F1FFD10A7DC71892EAEC872F09DEB950113BF222F426522D4378FBA3 -7BDC49175BE0B33319C99353B3A1C71A18E583ADA4394AE829FAC86422234EF4 -ED3CDF3C4AE777289EFFB8985BFA78443C6F0EAA1D68A5E116AB36027FE63ABF -1F3AD2DFEB3E87BD1C2097A5185D3DA7E4D14F90B634BB73716AC1AE6DC6E089 -B4E84F6189A851F2C49D398240DF0D6667F33D97AC4E4B04CDF279C610DC8940 -0CEC018B260E603C0444027E8332CA2FB9CDC2CB788B2C80423B215786E17B63 -7DFC3C7D5EF4B5FC31688CBA538E5F9F098A31B344792C7B221F409BC7239E89 -C750448387DC19CBB20C17BAE46808FB7E98BF52BE72E857B9C2BF506308D889 -5359D20823AD867F13A6FAD7C0932FF46437C045A5EEAA53C0CEF57466F88BC6 -5A888273A68955CB8F692D08DE72E9BC10636E5C79D60753B42D1FFFA533C2A4 -7ABF6A30612A157B4B44879D7767F0C6FFF7C06C52B1F221D7577B1A084146EA -15C978E87160BAB0EE2356347E28CEF124B36724B617F3CCBDEB560EB224A076 -66B1CBF1CB66D05E5A807BED5BA5A4A0FB8FB9145795BC47E5C3AC6517ED73FA -20493B51E8698B613D03FE8BB9F6E78BE6DF7B0EFE8C1D3BCE33437CF249A898 -BACC4D620BCF22A880DBB1715EB50F532670D9F8738826D9165F63595321FA13 -74063DEB847B2AEFA21EBBC41AD0D437E689956F1973D16C10C59F17489D5E4B -C3D92BB5019309A28F26603DB8F94672D113B07AAFF888F56482AFD697046588 -2B9D776E668797E4B2B8E014E71F8F6455CF000AD57F6175636AC3B7829E8EC2 -FB41B5035B3E1A324AFC14C97049F59AB30FFC2F1E4E6FB11EA8159663130F51 -24A86A8EB0409B2A453AB584C2D6FA79FCBD37431F2EB99B8FC1F1869760ABC0 -BD26F554DE58028DA11A8052911808584BF18CAE655682A989B16C329BF95F42 -8E99344EAC5C5004D19B72C5973150EED43EDA05562266CE089A66324C8D1AC3 -1B1741A6ED9BF8A0C6BBE595AF5D9891744291CFF80DBC40B6330480E37C7831 -0FD731B5DC03DF70465DBE89CA94E821D2972E6B0655796D454E46D9B58BC572 -B111F78122BA983E580FA2C4B472F3516AE78FA6AD9FFD49B653D4EB7DD0B61B -690A4D1A2F4E803EB717C5C93AD7D251E3BEB3DC59B2B8EE0B2048C37BF9BC39 -C36CB7952D387D07999A1E5D2C0139783A3820E897DFE669B38123EAD2B75D2F -B3A4D82C4BEC57F8BB9CD6FFD70F6A26F0FC028C9D863B70ED3E92CD7C75BBCA -13D2BD003C30E5FFC8431DD0681509E877C7E87961DFB4B82B2FE0D5CCEC0260 -1397AC08C84533E11D5D117246096CA8DAF16B6B0FEB746F7AAFF006D1061FA9 -F108A1E819FED59CA014F88E78B51367562DC4588BC11157B6A9EE83489C99D0 -D22D6BF4137ADA5174B4C395FEDBDAC1D291CFF68F0609071DDEC0EE9090A0F2 -DFD13DBD8F216A4E64609B43A53BEB4C79B6056BD7966B693C760194384C9EC0 -8E122071E765EF0AD4D91FE0CD7C793F929A4A0C28E334938639EB58EF19E4E4 -84C9A9F62AEFB30AF376F92C061B75A79E925CA9AFFCFB17A42B8154AF926893 -52C10D23CE66DE2F33AAD8A4270B8B83E875E6C1F79DE33E1FC890DD7F2B5552 -2BC0C9EFF3A3BB24045B43BAF8E2C50EF8CAD32544411C6127835B3AC5D2DFF8 -0EE7716910B1FEF13C3F1FDB2E2F8B4CBCEEFFFB529FAD1DB3CA8FA039F832EB -C714393A982D321EDDC9619F47E5E5C27352CBC5BE510F9A4189116A557F9FB2 -9880CAA23D228EA11426DED9F60972CDD3CD4C131D3B5E2B2A2F73B8CF4EC103 -2521796FBAD4114FB3F5EC41F6410F8D6BD1C66DEBC6277453A2C5179F840CB4 -A94F2C70EC0AB9981D5C0FF07B6DA2EAD75CDD4EF9C5B7D1E9342C92163DA4E9 -9872226545C8C00EEAAFD27C7BAA7BC99975CDA50A146C972E94093F825FF5C6 -7B641DD34985781B89E773632CCCCEF0B9628BC976824725503DFCFED471F9FC -08D9E966E54D2A202251A6706EE77956A5A1F2A1C81E904269E4F101F76BDAB0 -ABF224C60B062ECBDFD6D7FD7CB8E458B3EF8C791A0C07A2809A583F6F2A3405 -835EDDA6D1EA8B33661DE7F053D5E80C04A9A0CA5354918744029D2935C3F107 -7C2B42F7E37BD13837681EECE264B4989B944CB91E2426E0A39B8919F45CC30A -AEC4031C8A727B633D5C94901D6AC4D407885EF36019B0C3C8C4CCA73251D723 -14DC14377A4657BEFEA8740A0F89FEE4254F01C3870706D205A6D48515F06529 -C3B4242B1463085889BEC80BAD03E94DF4448933D69E641B30FDDE687E10E99E -7BF79F91D4320DDCCEE7DB71D2CE755CFBF697C1094E9F03F7869C4C48A4B879 -C231188010FAF0793665BB71DA8FAD9078EE95FF01AF8D32D4A5E92F696668C6 -9A5B28BF33385B6C50D6002F687972EB6972579A5D9CE38D9D2B68729D034642 -775E65E7515545C93B93B1D1C5287B2E44F69A5FBFDD8F37F7EBF5DA14B93194 -CDC4C48F0E93423E10D20B192AC41EAE29306042CABB5D191E37BD543CF6D575 -934264C2642801E302311B77E2C27C1988B77FAF5D8D5C15047CFC60762429B1 -3B9153BBB0FF65635B330D3743530739381FF28E459730E6848132F179AB62BD -9A8046ADEE762212A6635EE416518A22ECE2909234F032C31E05E5CBB4901973 -749710E3213EF6EE87994F1C4727E0D9B6C23CCCF739293C85AB35E49F5CC5C3 -B56162AD1D977E4264D7A8396C087E8E30D462F34E8A729BCAEC7ED8D54F5AE1 -F68E5C7E080117318C4A39EBEB33415EA7D53730121B65757E7A9658F9E62162 -6FD4CC13C99110177C0FDA51D17B3D92D4E9D8A8BCFF92F6B08FBEB6350062C9 -79C747AC6BFCC8CFA2521D1DBF0C3BB378E1523C6C49BC933A5FDF18B2F1C11F -4C3F7A5B5D26149D430F4B5328EBBB19642F14D339F75AB8E4688CBE3034B64B -A648389BD47581D7840121191C54A47F82DEC83DB1E96B608230C5A06AF24314 -62DA0A2B29F03CDFFB35E919A58D81D59CA64C0D2E99E79FEC6192E9E3ADFCCD -1B827EF69EFCDFF4AD23FB81BF2EB053769C01C8B2E83B1245D459835998CD18 -BE94741330336136ADD10F6BC25566DCCA993C20660FE39FD064C3BC7A21380B -BA410001B7E32E3ACE2D0D35C2B6A673C65275384CB550B915678E0AF800C305 -BB56D0D1DD0AA52DB129BA66D6FF72D2A55712D832C3E793B1ED7A6563ECE43D -6E83F4D9741D0FEE37EE4BDC65199711E6A647B7E717C54624BA73FAB1261E5A -6AD7A90DB9AE00D12EB04F91D49F8AADC0668E6EA5C7DE10E64DC6519EFE4BC3 -34C74461A099343A23C0E7CE6F891FBB5EF623AFDD778D2FC64AEF8B9952458F -60403E2AA1E3AFAF18F459321C4E9C29C1A27027A81F53A3FAF80A52458160B7 -6DC318846E335DF0D39B15EA48A18D41DD3958E53155FEAC8344BC1C8F58B13D -71D769 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMSSBX10 -%!PS-AdobeFont-1.1: CMSSBX10 1.0 -%%CreationDate: 1991 Aug 20 16:43:06 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMSSBX10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Bold) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /CMSSBX10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 67 /C put -dup 76 /L put -dup 80 /P put -dup 83 /S put -dup 86 /V put -dup 87 /W put -dup 97 /a put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 104 /h put -dup 105 /i put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 121 /y put -readonly def -/FontBBox{-71 -250 1099 780}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE -3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B -532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 -B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B -986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE -D919C2DDD26BDC0D99398B9F4D03D5993DFC0931DC68A9127B5D4E0B0EC0247B -E3E94556B49E4EAF6EA99F1420405194F4D8D644F28FE1F090E80BF5C7D59585 -C1AE46D025A67CD5A59ECBDE2AAF87F725A9843589338F85C6176E7F6DAB2032 -74BA5CDC992D97660FDB3962D486E2682550AF11DECBCB7F76A28A4177905B2E -F4767CA41528636EA69E80B3A1D33060B9F0250896EF2431F4530727CBBBCB63 -5D0CC646976759E52EB09E65B7110CA7A16EB65E0F9DBD26032DBD90A6964D18 -6B8BC2030609B972DA155820C9FA67A1A26B9BC9712A9A5AF82343D16BCC542F -890ED28C0BA88F875CE90B1910D1A8FAFA6506F893CA462FDAA96E2A71ABC8A9 -A209E7AEB0E41C5A3ADE180857031416EA0123B75292427B282D9C21D765A8C6 -82107AF774BAEFA24DCB2DB22410CA3C540C0F9D108362C9C9C81FD259BFA359 -D7289FC6963978B46CCE8744FC96D5F106A59311646E6C4C6E520AAAA9719D68 -9032C53E3C38EE31A3E9995FB08207BAF83F0FCEF63A536528839428AD1E8A68 -F254B65CEC6ADBDBB524D4639388374A5C74C46DF2FD1A30C7B61995ED32BFFB -7F06514E444BB108F3BE17F643D2BBFCB2947FA98789142D00B63105B09B9F24 -86E3FAF44F38E9F91A405408481FAD3B8B60381AC52FE674CE23C2E2F688C244 -EB64A97378970E7DEAB6FD875ABAA19DFA10D3FFB5D2AEE741A277B5147C8103 -1BB179D97426EFA47587DC7D60856B369CC280AFF938EFE801F7140730187895 -5E5405EB740BC38B48A7A84437916B550A65C7069CD0940D54DDFCF2EABBAF6B -ED1681F1E44855C53DEDDE611A36118430BBD52A00C12ECAA9229A2127D515A7 -0674192B34F41B81788FADFF512CE2F3D46A3F73AC1E13666AE14E54A4177A93 -D67CC01944CC0412415C369A04B428504D3271DDEA7EF65806F3EFB5C48A0531 -85C46A5B82B672A332821977DF46CE7A4447A3C3FA19FE294A2DBFAA7E17E7DC -673B4FC7B08FD9E360E60F9032EE2FC00ADDD133FED148E91B6FDB7301BDEE16 -968AB270CEC4FF32061C936CB30EA14873F2F3510275E1EEF7DA095F3BE851B0 -DA5F73A7BC6AFE859DBB51B75D23D1F7C1E42F334DADE25DAF403331F3DCDA54 -FA75874A811027A7191AE51E440E7147DAE52A83FA48CA697ECDFD18F0ED2149 -32522E7EA20FDDF0EC8842817FBF69E5E3E492F8D8EC97DE4BD1BB8151CCA1C6 -B158CBC8E05CB776B6D5E61B5B11BA6F3AB98C7D53595A1C50F7E7218B13A4C9 -F7D45C6EB6DE304FAEF3540BBDE9FBD948069212FBB7EFB5AF473BDC2105AE3A -93A300B9712FDC7DE017C60E11668075772C4F51EB2615CB1B4D6E69688A7E90 -5050C86FAE205A30AE06ED94D247C86768593B504D9AC4B81C682771728F2D3A -C6E6F04912F29542512249EB85DD71DD8436EE9C1A380A017AD25A6739D9077C -C38AA216675DBC6921B3AD140F561F7D27547938ADA65B34D2A26995F06BA369 -25C04C992709B559F0904FD3A02A825E5FA576E2B37BD8ADE35366D156EBABB7 -42975FFDB2C03711312D3E5151279370CAE8CE16681E90FAEA7764A08BE91B4B -D5FE433C85A01A633C118E6AA27F767374F7892094D9CDED5623ADAFE5DA4703 -4372E1B5BB05F8BDC2CE753D4F5AAAB46A8D321D04732AD1FA196C1F15432A0A -D2AAB458712D54BACDE8C43BEAAB112198A931FE4A679736587C044BA2C2DCB5 -2EBAB507B00115B3D606A17975D5896693BFEA45118AB1A91177A1F838CCD511 -9831150C332D1F5F9177A8753F58913A173A3C0F927804ECB35058FADECB166B -D849D1C8FFE2A99CB6B5B6ED83A63D66DAC545C266F401109D67387DDAF3A30F -2C2CBE24BCB37726B2A75424D8D47D343FB3CF99EC9F8254803FD6D231CAB037 -0CAB03B03ED9045A83677D21786FA48084C5C6A992D7485A55A95F6476901939 -6F2F8BCC3952790CDDD27988994778F5E008C41600CB1BD7281F44A43AFD32C0 -92FEBF56863270C0AEB101F571F6A2779F68933E9F6EF1D3E42E4F49A34A3DE4 -3E29660E184E5CFEF64E45CB51DF753314A343434D10D44C316FEF37A9EF8018 -3755D7A2CC84F172105244D714D4023CDB08F99C6CA2D2EF36279331D21515BA -842227327738E9C6809C76A493DFDEEE5805BC382EE74341A15BD458F478E6B4 -C6BCCF174BE54232889FA4E03329A01D53230E36D6AE6527215A88A560632B80 -0F45D3142EE0E2668AFB3C1144FE85E9C720BA842CBBD22B1AD417AD57185A27 -615CD77F02D750DF9848A7BC55CE7813AA87DF55F054FCD1E09C061DA0D15B02 -2A8645C70EBEB8D1C5F069F484D086624CE542CF58024DB684A460899A387CF5 -7D8BC51D22A0CBB88EBEE1AD0F33D2C745BE5605FE863F4174EB3406339C5741 -46A9A4B9646EE35C77911B2253835BD8CF3CCCDDA1A2C42FDEE60F6BF4A8A528 -F2AC4CB21E846A408E4DC189C700F6972F69C343BF899429ECAF3F407BEECA16 -B19B617150D31996A55C6A761C55900721A671116E412C7A3C82F774E762AD0C -5123D9C790E8BF4BE8702D40DA17E9C025227D62911A3B8139789F7B903F0085 -8DAD00A3F897E448426AAF81065B1D8D05065AE22102940A9E773585EA7E238F -DDEF2DAC63C51979AB1C1E956E517B38356B891F77B3C90E6D984BB083EBBA1A -6F92ED7F010DFAD4EC2841F6946FC8B4154047555A813B8D3152F62807E79FA9 -8510A18B78600676F2B1E53D28019749706180D5720A80B48F7C02AC94C24F52 -E6932D2C3C0C992399174AADC491D928E57D153284624C64B7C6E81FD7F3218B -1574C1455CD0FA4D9C2BEF5B844EB07E79696C393E3FA6AB47B2D22E60BE55E5 -6DF2BC4B4AA182EB8905CBF473510761218360887197D391B07D88D272EFA127 -320C0F444E4DF85273508FEC1A9C90AF8A78EFDACB855F82BCE8F8BDD99D0146 -172E76B36B8673DCBF8909FEEF7376A7AE6DED5794E914CBAD8C5588FDE0657B -E8CB0205F871F3636CF4E7FDCB0347E1D1613C8D26C48525850C60D6809C9CA1 -9C37A541EC9A5B80BD83C37A3097129230DACAE869282BC6F9DEC977866EDF0D -E946756498C7D81835290C8693479A0DACD9D93406FB134D93E808B502B24F72 -6A66F11C01D3C3BFDA5C49BDF851571C174C9E66A36196177B5595366446EBF7 -068D442DC29BEE29FCC05ACC5CC6A66A87D83B6F220D8E2C6242475FB3D7D367 -865B9654960E9A25215187A2AB9D0BAE3D21379E7AFBBA9C40F9623CA1739888 -B2F9CDC2CF09B378E65CA16FA50F5476F32E3B2732C446AA4A13358C9007A428 -421B5F6FEBEF82644970CBE341D2E3AD26802D2C22495B82E52EF749B0AEDAA4 -9757ACABF876A714B80D8452F4D817B2E41389FA5BABB3D1F8FCDCA905829445 -8D19085F196A1CBC520D8A354268AA21AEBB3CEE54123222A540ED091A7F107F -9602010CFF8E69E33EA86C93F23B826AA2BB794226942AF26016E425F404BA41 -FE9056251AA02C4C86FA1D36BA800C4862C6D21745EDC284F132511CC1FF0C69 -6283B90A2DDA64F290F6396A53CF886A22B0CFC0A8E56DF77A0ABB0870C2A403 -2D6288C17014838D70A4771A6ECABB8FCD3112995DDCE0F8678623F02F11625E -C1EBA42B2F7A615DDE96D3B6EB583CD56D9A2D455A77DC17C50370DBAD45DD4B -2F84FC0C377F4D60ACF563A53FACB50631A3809E38FF012CA203FDD9425C034F -1ADFDC4C72A35E4A4225CA7E26F2C10411FF4204214205B1E2DF33854C836A96 -550C42BBE52DB9A4DE4BFB4BC22471EE74F828E56FAB65AB89CC12FE21027602 -633A38D9B2B243D771B0CAB29C1615B4D246F7CF24B28B39144DBD0A634A2A11 -ED0F884353308213591E77FB46A9CC457AAF81BAA926A11D696A5A71B2F2CF21 -C40509C8BFB5D2E95C7B230E194C8F590AFC7514B46995A13D2782F2BD741D69 -92ADC7A1AC4C34FF8718ACC9A1DBCBC8E2A23090A3765667D000B3202C774457 -C7632809324692AF908F50584829F745B0DFCBCCCD80BA8B558121403DAB47D4 -BFB5720BE019F48B721897B335FA43672F7668C5A8E1685C530CF505D694F27A -E8D3F31836B421414FB3965D20C2DEB873A15EF0392C6851F4C8DFA93CA60041 -F371B520C9E34228977C536B1DB164913CCEF48C73D57486130C47B5590F7835 -DE6355C01B351A07536862DC57473E200D0D8ADF7CE353C1E946FACAA29F9DE9 -241749F3A460CADFF417A0E2776E1253031BCBDE2A7098A75C1E02D02E7DE96C -0CA7FB749FAB5140B4E0D83567A8AD0A825DB5205B687B0ABD2704DC17303B16 -4D93A46D68878D35ACCD76EDDDA9D9C55A4B2EBEBB38A626F04050CCFFEC5946 -4EBA476E25BBA35A3BA28EBAC8486E35C7E56CDE7DD02C3359E05076592B0D69 -6092BE9FF04D14E48EFD51258F1A1F304AFDD71568D5652ECF -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMSY10 -%!PS-AdobeFont-1.1: CMSY10 1.0 -%%CreationDate: 1991 Aug 15 07:20:57 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMSY10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.035 def -/isFixedPitch false def -end readonly def -/FontName /CMSY10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 0 /minus put -dup 13 /circlecopyrt put -dup 15 /bullet put -dup 17 /equivalence put -dup 20 /lessequal put -dup 32 /arrowleft put -dup 33 /arrowright put -dup 35 /arrowdown put -dup 54 /negationslash put -dup 94 /logicaland put -dup 102 /braceleft put -dup 103 /braceright put -dup 104 /angbracketleft put -dup 105 /angbracketright put -dup 106 /bar put -readonly def -/FontBBox{-29 -960 1116 775}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 -7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 -A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 -E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A -221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A -27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF -5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 -0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 -DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A -71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 -4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C -515DB70A8D4F6146FE068DC1E5DE8BC57034F0E066082A12B11F8BE89A026E65 -91B43447E7278E0E62E66F023D427DA3AE586F12F2DD773341A7A3E5A75A7328 -B26354FAC930A6E934A7D7CF5730D631D60D98DF787B34144305DC0D364F262F -BD6D1EA0FAE2FE041D06E414F48742F88348BF3EF96D33F5456B2251BA77B90F -F84979A0529B08D7D582079F47199887DEC3942B47BBEE3D73871F067CFC0CF5 -6F81A6549A4CFEDC8B4001D832D5E9BFC6B6D6040F8682BC220C39F715487EF2 -7D18E66842ECC12D69BD10DE29BA877E1618FD576D2BC6EC5693CD7C4EA5481C -43E7C7A2F051F28279F7B4DC1AFA88620DC59D6608BCA3A46819A8FD64A08046 -514E28FEEBF6F09480AD6360900FBD0AA962979268AC65423B5B16BD5D882FE8 -8E9E3A29D54E80E507370415E9F34160664152F7250B76B80FEB5AB37FB397B2 -014160A86B6DCDA90A81A9BD57962A27B8BD434734964F24B2D990A25C113B2B -1A73C133B6E41D2F59BF503EC514C0E95CD1B07A595355539611430E0EF9469F -68423868725F40F5D7B1D6199379F229E031040EFDBD7A7188565D9AC2ED277F -691BB4506093A6EFB95BCFA81F996743CB81D8C48032216082A22609AF414030 -1700298232A967B355D2AB5429D358836737CAC214DAC9D5B3DA973FA6D8CA95 -763907483A5551FD0171147F99D067EE98F1FA6B422D44B595FF862E7366D1A0 -3E46C3B1C8F15F580FE0DF24BC15FF13F597C0CA8E4EF322D354ED09DE17484D -116921741E70B61ABFFA7B5B909EEC1FE79A5C76C62AA3EAB67E21F5881E8C6C -14A7C0F731C9D36C7938EEE5E99C07959B8BA809DEEB6DD30BF13416C348CAE8 -FA00C843955AD0DAEECE7639C2F9A1634B311CF84B90E72797D073781E0A9310 -D442588253F798313360698654FD294265AEA186300287010144F3B5253851BD -A9C4D8186D93F3F4D48DE5F59D9120707F0EF1BC5DE587BDCB9996714BE4B73C -74B7D76561D3FAFFB946FE07E607F94FB6DC97586408157290B38B8AD7639FDE -35036E372CC0E86B83B0D45363B314C2E6855333A5A72F5791169A6A6D5A74EE -BEB0A8D8E1DC5350EF9BF2ADD750213643E21ADBB3BF7B0DD1E5E7B6CDC8D7E5 -ED763C9BF9A199D1CED971B684077C332226C6B376B607A45B9931E2661648D4 -10B154F9E5B1A2D3E8EAE93554A780F3FE63BC5E0A66869F7773E18B657C3089 -6B89B6C1B4383666F21571A9F34D59095777521CC0C61DE912977AFB77BDD7DE -55659694107782404B5EF09ED1AB5B7DFE8FC15E8C936ECB18A4A6348AF54628 -23A5FEFAF367C15902028CB29F7EBD30B4523440984865E6BB308A951F28E20F -530B594D0C3B2E847BEA7A24E7C6481D73FD4BB74F96BDCD3932D21514B73DDC -44FE52F1BEC82DEF46012DDE03E33BEA0AA057A8B26E09573341FBC9175F40FF -04D82BE3E377E7E427E6AB1EDEFFA3E9C0147E94A6BD2D78529985E382C39662 -8EA3DBEED5C5083560910C90498DBF87DE11EC3A5B03FE745FF8DE2DB903CE5C -C8EB572E18EE6F069E7E930603A673DBD79FC951F2553FFE3B669D3B7E8D4169 -BC3C963CBDBB2F222916FAD6E1E675521B0E60F95622D690EA924575CEAFA143 -C196C232DCC666A440D7827F3702B59B302756F6D0299178B689AB6283B17869 -E6FCF16346EFCA627C2B934835310ED9DF65FC00D41832120487C30CA4A8564F -9EE918E71CFE471C62F426E3BB9FDB7D122986392B293692743424EC92AAC5E4 -BA2066B36540CCB171AC076E68DE4082460D6E6AB667D5FC61C1EDC798A042FC -483057354ECD0DFF5D8A253C8AF60CB7C0FEAAD4F1541DDCF236B3DCFBED30E9 -A4942B500A353CEDDC94D322E8547AE6CAF7EDD8DB02586F263F12986595BDDD -FFF4A0B6DE4CCE8A8EBA5F2615CF7B4BF8F3CBA10AF5E0F02E0262B76894708A -6291CE52F4C4A672E43C31C20FD306B8FAC4B988CAA7A35EF9C24099007A0797 -3C53BA8172A2BC583C9ED0DB188778ABC20E557FC2E215D9E5042A98DEAD664A -789E1CA79118FCBF6B2DE6CC6B56754E48B6837E575FED7335445F3241FD6C2B -CF1F9EAA90A3068AA69E719B3E261A859B7C0B8551867A3159C3BAB9D543C9D6 -93A3ACA743C3D1A7BDD698B51AFEA69339B9FA5282953896AF1FA81A6C899DD0 -AC6D18E9BFCE954A8B572F2A67B4FF997500EE5902EBD76F6DF2B29A1FAC8925 -2FCB5B7288BE44222956515A1152571C892FF9C8C0A656C5F2B1B88C188D2B18 -5AA44C4AD029EB788333F80B940326888D6180C676322BB9AF31D97760D8C84D -81B6F84017D954350E8788B989E3B6BCA01D9616F09A4544878FB3EF257617BD -D40E7ADC770B2BCECAD3785B7DA53A2C790AA1BC4FFEB1BAA106A5E533A8B430 -188ECF9EF2120FB09942A05F1C9BC3804A664741547B1B36413657378FE5CABD -9F3195FA28B4E7E0CD363BB4C5276B810E950C83DA6849F6D3B65F49D57802A0 -BF2E921102630A61F93928315E1D24FEB04BB62E168F3AB41111AE30949DD08D -61F3EEF5A6A65DC358EB190D7802319C72353C81C91D421D268A3DC876D32114 -1285D6E7BD8CA17329E325133C83F1E3EF180A38A3185D7080E3CCC0726DB6D1 -2F0CE8C7FE42254E9879FDA5C438C67D57F86017F1EBAA1885C19710A283DF58 -C652FBAD644B2ED5E01FAA70DD0D98A689722664FA5137A6BF99215302977228 -19A2C9D7479CAEAC93E3545751BEBCC6135718EF15FF2AE792B35C736C735AF3 -607674FECC1B08D36BCD1E0D80316B599D6691E58FD165957BA25495597D7481 -AF47B8E77BB680AD0E2C6FF94EFF7883B7A3F6533CF9C7555E9E2EE246FC1C64 -65DE117492A6340601 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMTT10 -%!PS-AdobeFont-1.1: CMTT10 1.00B -%%CreationDate: 1992 Apr 26 10:42:42 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.00B) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMTT10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch true def -end readonly def -/FontName /CMTT10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 33 /exclam put -dup 38 /ampersand put -dup 40 /parenleft put -dup 41 /parenright put -dup 42 /asterisk put -dup 43 /plus put -dup 44 /comma put -dup 45 /hyphen put -dup 46 /period put -dup 47 /slash put -dup 48 /zero put -dup 49 /one put -dup 50 /two put -dup 58 /colon put -dup 59 /semicolon put -dup 60 /less put -dup 61 /equal put -dup 62 /greater put -dup 64 /at put -dup 76 /L put -dup 78 /N put -dup 91 /bracketleft put -dup 92 /backslash put -dup 93 /bracketright put -dup 95 /underscore put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -readonly def -/FontBBox{-4 -235 731 800}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19 -38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF -D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204 -EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727 -A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593 -F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714 -4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA -6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E -A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B -E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F -1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438 -452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF -8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369 -5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA -DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9 -BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19 -741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79 -E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712 -E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7 -D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE -C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DC -FF798F2ABFC4F3539392985C4CB324B0007229586D1E0321559F67C057FD7902 -194490A4C133DA790FF3BF23A13C2B1B69EEB75950F9106F2BA1E3CA65C90FF5 -931DADF03DA48AFB8561FC2E710087251BFC42B80B297A3DB0DA138A7622A931 -DA293B0C740987ACE9F2A8EC2DB98F85783C01623FD3612C7E4A84FD93446770 -C3DD7431F955A5F3734F6931BD790F0A45B8D17CB74BDAA4BFF6DAB5380CBF61 -72F37CB67A909E2842E0AC5D9D07D01A4BABBDE2AC70FE5753460D7E1A708B7D -0EFB2B5FF55F9E4571C466AF1F91E545585845B09D855C3A01F713C1BF081EB2 -7E2A0E598708737D475BEDAF60BC100FD0A0628C6001A203348CF6A3AFEE6DEA -A2EB57E35599FAD0B8A52BE1B081FC4B5664114E7A71906DB43D150337D2F47A -6AE31CB21F0A689336D70C3119180B78C2066FED4D6719AC8D52F7CA1D32A22C -09EE6ED97334091442AE7417DF9AA9D14397AC32017884DF605AEB42776E7AA3 -2EC4B0693F365B21F40371DDB117557E66E189B0113E86A8AEAAF65332E8B2F1 -A02C0AE774464DFF46A8EA9C60586AAE6208846FFFDA056A0E84F2307B06AD9D -A19E3FA3B696905D49892B70588D74C76DE1D666399192D4D72B03B5EBD4A427 -C68C0DA60C3844048EC49A35A9B4F82399A086B6202987573F39DDE8ECDF6B1C -5CB58D45845D8CD3C7CD8C37135A3DFB4CFB32D706978F883DC5E7C0AE5E2556 -0170231FD33DCC1ECEEA2D7F0ED6C50EE5DAB081757A427576F54257C6658299 -7E824657E70CFDDE196D72A340E00159E623CFC303DA558135EFB718ECAB4679 -112996B9E641673A87B47D0557B0C9B3B342FE602A1D33E03B30B9D2FA95ABFA -DBABFE518533DA77B3495C37AB3C27A851E37F6AE26227B860FDC185D0970FDD -974D8A71D31102488B73E32595B2F9E15F0D143E7C52C12A243D3DA65B11B608 -9F5F133B51905CC36B44E32CDD395B0389890A8A260C83CED19E06831BB391A2 -550D170825248C08BF0DED734ACFBFCE800AC2D37BE5FA285CAB13AF15EB9DB2 -4D3A8E8424E649F99FDBDF05C46FE80D0A09EFBB7BEFE3F98308B655F33977AE -3C7671D6C020F7D49D0D9AE86898DFD925D87AA0046C7508902B0DBB9F75006B -E0F4A9DF59961B2BA239B944ADE13BF0FFCC7C34A2364C04A5B09BF1FBBE0B81 -29A9E226741841E78786EBEA209DF8B1F1A3D0C108498C802FE0C8856984190F -283A59DE995F020A7899C6AD3F02ADCC0A3EFA9E2F2DDCF3F7A1CCFCF4E79036 -B94269215A16FCD2DB4C607C8F3B1B7545A3EBFC3E0374DC9BC1BF074B5C428B -C0E2C751C5C4638C9133304642526E2F15595EF2E10976B82265658BFE3CB64C -6894D64E61B95EEB1158CFDA4F660490859AB18A88E46086A95A258D9EEF7D5E -CD8AC3D8C89484181151FCB7C522C5689F3AD3E4D694A97470C86099B9958FC4 -584E552E6DB386C8E88AC2019D1FDC4F26C22712F9ADD85C355A376FAF9BB3D7 -96D14285035D4B78706E68E702B439E77BE491884994BE2AC5D3CB52CC32FFE1 -BE28529CBD64C752DBB71B2AB799924C07C2B89E18BDE089DEA5016CCD91CB69 -D2F3F26A5682B967F394C4C831803E76DECA15D9197CF55B7E4F4B530057BEC1 -EE6D9A9959B705AA3D8600814ABCF4F6DFD3B1FB2B8F829CF2007BCEFEF31D4E -485D5ACBD2057BF14DBD2FB061BC0366221BB051AFCFC6888C391192004CFB9B -68E33620B451E7DA007CDC988D3661BB028A6C4C5D99511A9F3BE6202EEA186F -A660727FA64330AD5760E05EDD9B365E3963959E87C633821C492D985EA89A21 -59EBC604D0B6C0A59CAC5C504BF494D6FFDBE8480E118545C01C3B72EB75D9F4 -A9D757FB043039C375EC8AB9918CDC207B49531FB723400FBD6C696B6123E041 -9C6A6DC0F6697C32DA4D506E87CDE0A896E61ADBD25BC412476B89FE90CBFA41 -7612549277DA0C8F32E2466ECC63C65C38369E45A192B93EE1AB51D1FE519F85 -63056C5D028677209D70E08156433B9E540905BAC2DA50606948D27F9BE3E659 -4AB3ACBE02A285AF928E4545A4033E20D5FD504299968DED9BBB5C3625E26ABA -1D9884178613476371EFF28B55AE509A98BDFC44D76158580CB1A58C3D4A8236 -F47DBFA8FF80E2BA7F31C4F2C66346C76B320D6B5FDFBE5CED9BA05F1DBDDBD6 -74E1EE3F5D5FCE910D322FEA50882BC10ADADBB5801A8F61CD50B8E2FA965695 -812E9D5CEC3582D1BDD603988812E481B98C9B2A1AFC3F264476DED42E18ABD7 -3920FF124B5272483E72C95771F38A8FD06A3C7245DD45516903B30D38CF9E5F -5F58787CD733405542DCDB6CEA14040EBEE67F673690F7A043C738D9FAC13A4E -F2B951E8FA580CCCCA9771799980848CCB49995487504881C1FE4D68E0B23E57 -DB4BDBCC8DA1A7029E7C8DCA172F81CB5F16AFB99D1E5E4D3EC164AAC8886FB9 -F3E1DC15492B27812269D12C95E3546B8A6CB2BC677EF110E40083FB22FCB720 -15B4B5DCBE6292C8D919BC97A71C817EB828676A954F35AEEBDB74C13E47CE0B -DD7790A6B03F530BBA2B0FC17976AC097768070073FA32D6B485C970C98E466B -8EC2F52F6636160BB44C6AED25DFDD86C5D484A8E376EC04290F21B776CEB166 -027B2F31020180F2197A35B53D00C0FE4E69C79ADFC4EFF324AF272ACA5FCB07 -700D22011AC554121D14FE399FAA674AF825FD1A8FC72D463BFCB5CB586BBE11 -BB2D959BF3DCAF6A75250815853694D07BEA319C5819848008183CE60ED023E6 -B804A80EC6D78CAA28621723A22BF8255EFF3DC538751F8863F53344C08003FA -640137223553FBFBEF5BB8B59313C1977C7C0692AD2D48B885B8A1A8232A14C1 -5B52F86542FCC0AE81992F6B66A76D1CC7ECF58AD5776B86D3567BC10A3CB5FC -0327F11AF4AB86E6C799AC2D7899753A99A5EF16D4A61BEB61D01CD49DB703B0 -F5CEFFCB3CCC54FE58E1488523A368CA5E353F55F4F9BD36CDAA4A33C44484A2 -C82A6021265ABAC5E171404B9CF035F5CE996CDCC1DB481FE703BC7375734735 -09C63B5E423BEBCF56A32E644E6066F0DB6D47E85DA1FB7BB3069E84EE6E9208 -E937122FD26978DE8384E413C04999BC5D04AE8EC9477664E6C34B7DC6EE066B -70386DAA51A010402FD5C3BE9D23B37280F63A34FE1F2BE258523B85BDBFC521 -BF015F772BF83AE4758E3B27F89EC31EBDFF6910BFCB279B2AF7ABB44260958E -C11B1994DD882D2E01AF351F6FAF3C643DD6A5A85D221F7FB1CAA3FC13CBCE4F -56A6CA2061555B309CF79537E0A2EC8F152DCFDB0097C2EA530E9EECD614717D -5053B7072A762A1301A7C15CEED09D3FB51AE39BBD8BE090508E7FA99F329C47 -A3AF8D109702D9E567225BF4F9B7A38DF4B5EA4D1036771E91B9A8C7D9F8D0D4 -80D4BB051516A84B5A7E0ABA3538C12A34727B87AAA7711125B09FF8952B6B5B -755D6832FB43F295D7B27B0D735748703DBA1514096458054ED08EB668CF961A -B83849B6E6A0985000A09C589C5E50DD229BA698C3B935DB862BA7ACE910E3B4 -C274E5B344AB5052B2D5626361501866DE798E36504435D52A8CA1CB446481DC -EA96BB7B405358CB4469504BDCCC66F9B005A7E5074532ACC3BBA8DE71EFF2AF -E4FA277029DABE9C59B60A9FDAA362EC4340BD39A8D8AF3CB3BE4D13B0A7B9E0 -9E0592C855A7E813732AC41415387B612D5741DB03AC94F39C5F82BDEAE03AEF -70150D49C886794926209D8164FA603AD1A1731AC79CEA49D2A44C5C5AA31DDB -EC661DFBB6BF23DA77FB72DD9B22E217C07C53AF6CA14DE87CCCB94C71ED03E3 -63666A4DCD237E40600D07885DBAEC5722F374C21271E4D0CB222BB5BD505916 -8786BD44B9D8B80D853B0FC6576F7B03B49E1BE02E9FE8AFE6E7FFEB6D8F0B9C -9D385DE586B007EE5D61B0D17F0B3106EF2BD02CD2EF6EC46A00656839A29C15 -1121439F9070B6BE1BD9F586E69D58E0BFD70E9B31803737AA0F7603703FC4FF -0D49EFDB0A65CE77E95A46AC06D67B55A4EB9BFDD4B00EB6233351EBEE2448BE -D4758BFFE0C25186A05AAB1E370E6002F2A7430B2556816A39FDC0D320F66686 -E882AF4F39004F7AB2EAEEA8ECCF700E743E8517243CF8AF8887DF39BE3B6FA9 -89133E5AE29F9C264BC0206A168C5D46ACE2CFB54E53709A87CDF3F47BE73652 -0BD54B7C0B017B078DC354A01BBBA3E7A2F6A86ED900ED1C538688D2FAFE979E -4D6C1F7590BBE026C34452BB45B03EF645F7B71D6935FE91B8AF86FA2C8205ED -1980413912C9BBA1F4E62070E709DD60C5F85C01D90687E3D05A26F5C732284F -CCB14D8A015753BE630AF5BCD9139C6873A0BEC9E309EB867B3F336AF7ECAEC9 -4966D87FF0EBD0F0A26D06BF111C5D8B849F5790697CBA6A1C79136D34605D1F -6B4173AF0FB013868B37EAD65A50D905D6AF94662D8591BC7F7163AE9EB9A6C8 -CCB65C8BBCA1B9804C25C4DF1F74FA5A5262FD074CFDE3FD78ABABBF2AEB1460 -0236B541B2A0D1C8A3150A193E5583AE3ED2DBECFCB0A3AD6A2B80AA22D96414 -722F861D332980B1E066519273DE792C33CF2AD5D16A9324AC3F555C90AF8CE4 -D65373613D8EEB907AEF5CE2A71A8AB67BBCBE6E37916AAA001AE06D2F32E4E4 -41324F64E37ACDDFB1AE7B802146ABFA5B3AB651758847DEFD8C0AB259911998 -1ACE447051EFBBB66D272D86A84629C56F094CDF018F32ED9FDFED6A1B9A0DD5 -8E4408A2983FA75E1FF5190FAEAB8290F645FF54097DA9C93224B07012E7A500 -76D46AF8435B770B1E3FA180C51065D0D3E7823F593388D7C75F0AFFC20D2373 -84F7B4C9FB6921797343554ACC3716E6FD5239EFA84F062FC1919C29DD0B7391 -7B1F0F202788B438C3FBEA763E5DA5AC8EB30A4D714B81B7146C88284FD0B933 -51B7781661E24AD7B0C72F80925F4C9C84E552B488EFBE38EDD7F7B568D4EB28 -3E0685878948346DE87F531B72227385204466EE964383A7864C49F7ACE9788D -A9650E2757B5DE112647A6439773A5293DE0F129052733170EACDD6B2336292F -4F1931452599AE9C7CF09B534B5A2F139C4D6712C410843CB5FBABDA1194C7E1 -24D5E0BC38199D07C14730BF77C68A7A53F722532B28C0582BF58F449A3734C8 -92F1955E396F17350183EC737921FB7FBC56AAE16B8F74780EC39C7BE7E403DE -5B6C0C532693CC9D304A2EA225691629A0DF36EB2B3315ABC652D366682F5DCC -B1A5421DECCC068676B77B1A44F0F12FE239F9DCF6EFAC2F4D5BBBC707F726FD -D69E451EB496E10BE94D77FB7FAB79A6307C864221E7DFBB0F7945F3F8A09D10 -76AE29869C40CB9FD1BCC1B1391EEB4C15FE13E0584EC3D052E22B82D3035002 -2C2BE1D088C463715C3684DECB9A8A4C838CC9D1627956BEA4D09F06F3F26F20 -D72486F41A253483B9EF3121B9F9E0EB7F7704BCC996514A609D46A1438E9942 -242402814C1E754FD1BF0966DEDED26CBB735D7D823C0BA3C3B02D44CA2C18DB -5E5A2250D01F2C86269C788B22AC49D339633AF66311FCDFA0EB1539044C29DE -1E33A78D96C30580526248E318A57665092567C747BADD9FE225840C29F1C169 -444B0FD253FB6F9F3C6134DF503465719F4619BCF2D9B357E803315276921782 -29EE0F88EC244E86249C0B289A20390FC4CD4E936BF403E380830DCBAD6F51B2 -6E11F5B796E48EB33D241C12830DA29D7ED0BF147250BBDA823055D799320B36 -C979795B78A079B74077575F79E8DEB33044895E6D1F5CF77B2BB89CC2C005C2 -115C52CB47D126955FEFF7F86CF3058257E66DA0C5406FF5BD5156E6D67BCC51 -02119C611AF395013B77671C7FAB68DD2C8CC103DE70FC83A1665D6EAEECAC6F -B1053FFF092A6018F055791870E3C3CB955AB296801BB72697A052F1A5949237 -B631D8D647F177CC41F7469AC44572A173DC982F1119C412E8C83D61B185D4DF -DBF03D829D77E56C32C412638ED67DFFE13306189E2C4855F85107480F56CEEB -C30301DFE8B5910BABE3D4A27D9789EB88FBD4BA9FA0AB3319977C24D03FD43C -600C6BA9D192111840BE9BA3A6F9B3B0EB56B4025D70847943D78CB4AD767555 -48A9AD3D14EFBDC879859BC44E28306E6FB55BE32F98489663B765F0D02EDE6D -555F34ABC34DEAFADBFFCF6C8E48AAB3484E02285B9B3CAC9E6E97DC0A615EF4 -C6847616DED0B73874915701ABF9A0238A03618ECB19505B0FE2A92D03185337 -DDAF7F3ED64658166A2405C05C2B08DF455523DED17D9CAD2470D11F3E9A2323 -1A83305DC99C60016768DA65CBC3AC65A1A060227170A051DBFB1382A629277C -58DB288535A60652DBD9EA1E1495389A94515E51ACC87950DF09DD5E868DB485 -013BF74F4BDD340BDC2F28B5256D2894C3AFED6A6CDD2E02CDF962FF3237B335 -EA3845FAE3D7610A60285C4A38D69783DD1ABAF4C67FB182A2D789B8DD8C7997 -A50C221A91BCB30DC5CD8D7A129ABD543D8E1EA687277C2634979B35CA6CF5B2 -D3C9E839ABCB87620B2A695179ED56750B4D515616619F66BC2862C0E2F50FD1 -D8DAA8C9B7AC3D9FACB3B8E4C225C71616E68BC29D45FF17615165095400B6D4 -87924B364469CD537D5A2FC50C349CE1170A5E9326A3C5E3E75F21E76110E49E -9D038C50FCC219DA5BFC3AC05A86F8B87A017BA85DE39531E69204C6E9ECFCE1 -D8DEC70CB586AD80F4D3C3BAAE1E93D5FEC522D1358A4D14AC4F8974AE134162 -9BCAABF3A726AED112A7DF63C9253D6423AC278ED25CF638C5DC0E350B20651C -DE7EE77FE568D5C6B4155A9AD11D49604E5C2CDAA599C33DD27DB9DCCEB455C5 -023188F861F2EC9CBC3F58A357E38BE6D443EE122F049714930B5C16C05923DC -9BED5AD862443D0FA859477E033EA6FD13FF1126607E56471B7447B75581AEBC -28D7A9A4A381559B380B5A4B6989A23C0BDAD92FDD178B67B6211060A3957E3E -7DEC474D2A06FF82494B34EDF1BEF2DA5CFF27605CC79C5B1561563A9C44F664 -E040B9B737906F3C19EA5D2ECBE48A40334553B2DA3F713E4AE6A37EEFAD6421 -CC36FB069F2F36F5ADAE8B04106A8F04B7C4FDE56C45C891004AB0973A7BDE1D -B69D0123EDDF9E47CB92A4336DABAFC9F20CEACF1C0069B1BD9B86B16B08EB03 -FB2063B818B85AC02C3EC5C10A783BB7D39741E63A9E672E2FC5DDEDE2E385EC -D71B93C334BDF303343C1A482A53D161C166686D1D49697CF61F7EF241B1BE23 -B56C031E88494676EC28CCC281F4B656E1F3244E12396BDEE0B3ACDBBC1AB3FD -A19898D700D6A81AB5E42FF82169034A24BA260103975E2E5B22F47D6D34C0FD -699776E81FD3C0710AB51350B6D31A26AFC3478C6EB8838943D93140C770FBA0 -5E8C8E0469737A564234844E6F4DCB4234562918198F2D1E806B74C802071CC0 -6AB4FA01FEFEBD5A19FD711441FC34834F9548B609022F409A680B09131B3D3E -E4C8803BFB1A609070F0D13CCBF5C2C10844248FE2918DA1D148F60CE5B972FA -1D21CB623BE6D7692EFF89B98C89F4265BA3C97D35A0A6697FEF6AF034A2EC49 -AD09955023D29C505846F4741E74A7B8C8A408F9284353189341CDC20C4C11CA -B01BEAFB74D62C2964DF06A15900ED43430F1084BD9DB9EA53A1E7783A15BB47 -975AF330CCDA394D41A240D65FB2E5EA6BF77D9D52D66EDD8C80738B6AE18CBA -00AAF4EEE578FC1A2358FDC6C8366F079966A7181F2A60766FD12A2E05217F8D -A5F098AED780761CFBEC87728F6502687E639D0249F3139FB8569366CCA9CE9E -0F6D85D587F02DBAA9699EDB89D4F0E85FE701C769E9E6B0648FAD48C006CC8F -88973F69008C46E46023E19FE2273E19FA06072C63926236A43157BD6B58FB00 -C27EC0A6AB4F6AB13CD4F7AD68D22B8865B36E148E030DA9C51195D369309AF3 -C717DBAC37C7687B745A666AFDF90F5BCFC23875B60B5EDE9784DFDC7587E397 -94122F50A2298EE8DB703DF0C3E1811446D446973CF08CD52D44F0918A30DB45 -B992E9D07DC593E6A33A09EA05B029EA88F2130F798E913D2DCC2A636DFBA828 -F48DA6CE50E50DDD411F3FE410725B337F297D71A22A41EF06B7706DBB3EB728 -6CF1687DF768D4953B95ECA757BCCD41E51809EE8B043322C4E6B7BEB8CBCFBF -6E54135A94C98799213CCE187CCD929A45D48DD922492C261B0F13EBE84055C6 -02799C6322266F5A3B12A5F662F8918BED5CEEF4B8F924949C15D14E96416963 -515FB00D2618D811A0AF7742D112631F2D41C622851ABF3D44DBCA2FA195DDC4 -FC06036CCCC4D06D84D72DC6FFBD20C63D907C1DB5A431A18819F99482F4C1E1 -AAF119288E210D4AEACCF698360AEBCAEB99E84C5CC575D829DFC8C5CB0B6AA0 -AC71059D3621CE8A5AB1A3182A2CECCEBC8926342B751D99FDE0D5C70B6EC932 -79F9A96240BF6E3254E10A91C8C2CA1E6D87E2A271941229454D1498E2F3F894 -1C74AEC194492A6811BEF1A11C399428E2ABC8C385CDCAF65C13F7109A88DB02 -BBCA680272ACA757F1244C4BFEC81F51F8647B24869C26BF92EDF4079D750E13 -5883DA93AF64265AC3D447749522F1F9EBAAA6A563EE7D061CAA10140752A89E -364DBBBCAD5E41E315C34EE72B5EA89B568712C1F2E5492873A1AE13445F602C -D638E17745FD28241FF65B6DD763DD15BA23E779FF2EFB8B45F5259DD43CFE3E -82BBF589074304961EAD275AC1D1A31302916F11D123714F5F64AB4A1E0A2EC1 -7353B25559994C4714ABBCD5309F52BE3199BBAD81D5589D1AF7C16689368D91 -14F2D222E662C7C945A38C5AE7AC9D6DEBEEFC225823EF97A214BB01E9EEB9EA -8AA139BEA68E69D57EDFB745B86615A2B3ABBCDC52CA87DD65D0708F37EFA8F4 -BFB9EABEF641B6CAAA6C6C64638C63DFA991088CC361BC11D93FA739F0D1A9A7 -FA25DAB700A2E3C380F01E3F7B0C217BE818B943006DF25DC573B36EB7868452 -29FCE81C61139B08D155429A12805F160E75A5F0C2F46A3ED5E1917F62BB3A8E -35DFCFA7B274ABBBD3F84C9F601B7F9BA414516CD6E75B13CFCEDC77BEADF9F6 -0AEA5FDFE376DA5A8F530F8AA600F8414AD6E2508213AA412FDA792DD6426450 -EA2D456950EB27E69677B92B550B9A91D4B79958A1CC044ECFBE8A1A5E4E98B0 -A80FD8FF35C01275BADD1EC059B00FABD439682EE52B64F82CFF8345900B355C -E748B879B92023E85FE6E92C4CE857CC2B80730277E75DC051044478FB84FC1A -78F22BCFEF8269A29BD0828C8458357F35B8B12AAE899BA7B90359EB9114993B -0A96921B23D8426B8EE380679547828D06AA5A197D431A3BAD1FA94F47A51342 -8FB4929FA6991EC93077011FDEEC9794BEAF6DB17516294FE64F2926C1EA955D -A243F4B8A751639C8C6D60B08EE07ED8B11BA2C704BCB5672CF8060DA52029AA -8B3ED19BE57613A6FDA301CE04FA798351B55CDC308F0167480C7B50769A7ADB -FC62C2BC70D91FE78D4F5EA5EEFDA39A290090B2F5AB57FAC741A211FE1FEA1D -3321F99AD74E251E002D0BD889DC6893BFF1FA036FF67CA6FFB2225FE91AC4ED -359D0EB717DA8DD5FF3455F07D33427114BD790D6B28EDCAAD10BA6DBD5960B6 -0BAE1EDC87F471D0DBE6CA06EAAF0A661448633A3D5BEF7E801C569424289634 -066672BFC80EFCFF3751AFA59EA649AB660C9DD07A92580CD730E42525162E08 -36C08E6B6BBCBEAB3C2451548D9317D50E51B9508739C8F8C7F10EAFF014FEA3 -CFE5F8A97402E0037B0FA443DB717B5CEAB414349D8E5C3075C7DCF7165AD180 -184B2F8B886AB3CA4E0CB695D7ABC26BB18261CA3106E38B98039AF49C4E019C -1E1D4F0A53B60360174DC93C8F35250BA4CEDAB19754D53C898177CA90E3355F -C52A0621B38466EE8B5E739EB0756A9A1D43B19034D0AC07ED74A9555001CDF4 -DACE88B7AD88588771B407B79A8BD5D5DC448EA9DCB66A95556AB5554463BB4A -3E2457C31EEBC609EF1B0A1725D3988312F3EFB5315322D7C828FC75B7C0C15E -7BFCEBF5696E618C51455E9A4103F4DD2D9E609BCA1A11E501A2B05F780C6433 -4669304E5CA611686F91B852B93C3396AF87C6438CA93365616E49A33B7C9DFE -F7DC1608801DB031952F8720F256194BBAEA524252CBC955CCFCB33B1D2EB3CD -D0628BC4F5BBA6DD21B92D9761008E526C3C66BADE3909872D0C7D47BCD281D9 -275802276887FF6DAECA706D1B5CE41ED3B33EA0CB7CD64388251350188399AC -E2203483600AF9DD581F5B30D19CDB93F60845B826E762075F47AF5A7B6DFAAA -1B7BF1A328E9007EACFC31E9F5CB553C5C2817ED8A4D31482A71CCE1513997DC -BB52C385D55BDC5925AA3202F77640822538E4DD04377232D4A03408E20F60C5 -E6E16CB23F9C2CCAAF8314E946FFAF9DAB43031EDCC5ADB868E84D782980FC69 -573B8CA480C88B291BF8C4E37F4FBEA28A5675AD245D6CBBAD5F004CA3CEA85C -0080B9F80CA089DBDE06A23B5A2C936A7189496B9434BFCCE9EA55007D690926 -7A16C73F8693C35888E6503F8252EA82FE457AFF1C66539DD0908D47E1FCB383 -19C47548FEDA9BDDC6C2834DB5C834A687BDD7FEEE64E99B211BC9EE5616E9D8 -5FA22EC5C3693CF76ED34E4D4CA7B20A2B8E2BFFB9280186EF456A9CDA88AFF3 -A0C2AEBFC39716BA52E1096AA9C6A8F9F375CB5C742D521A6C40760614BE189A -84F0C050F991931A3B1FEFD1804C38E55782D79EFC00379EF2894A81FA7ECF1F -D29D043E838B18120B22D524C83536642C1BE532182DB831D6FC4D04CCD61EA9 -04E79DAA66175211171ECFCAEF7A9040288812 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMSS12 -%!PS-AdobeFont-1.1: CMSS12 1.0 -%%CreationDate: 1991 Aug 20 17:33:47 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMSS12) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /CMSS12 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 67 /C put -dup 76 /L put -dup 80 /P put -dup 83 /S put -dup 86 /V put -dup 87 /W put -dup 97 /a put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 104 /h put -dup 105 /i put -dup 108 /l put -dup 109 /m put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 121 /y put -readonly def -/FontBBox{-62 -251 978 758}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5CF4E9D2405B17498276F99362748F6E97327D -7CDA3F5773E01FAD12B7339D4A0993D40A82FA42AAB119589F1D7D60A8AC7A96 -BF8C5A08AFE6D427A6FDDEA2FEF0B8ABC37C6DB62C8B4074CD6C385419CC66E5 -A4B4C5F902900090EBBDF7AB524205CD9DD9D8B9CB522B8EA97203F0E8FAF683 -09750B6C8286AB341F9C240CC02CF7F3E153C3498F16159862CD74C0B6341D3D -57184AB9036EBA94B432D0CAC32240DD569E639B4ACF0BEF07EA19DDF0606551 -C8EC84A7A67F3C3F58D3335D7273B51CC2602B63B900D24A6D5A8E766D49EEB0 -693796781F0781FF13C5592AA9E071E39034E0742E804ADF14422A734917F0FA -8973A1B9269EA354F8AC75B7284AF48B69529167E55922A20C3106EB6C559E97 -7CC1A491C3B41AF834804590554742E742A09A5228F71DAAB9BA2BC3F00FD5C3 -B4821FEEDC8B65732409A9C4663FD4C4BC7C864D71F6A6D354ADF71675042DA1 -31DC2859AE00363B3EF589B4DAB98D3515FE8176041A332A5647DA8FB9718975 -9D0103074531756594D5DD1AF3A9A20F1BE203E28D24DEDA7801AD1CDF96906E -E7049115872C82DD177C3BD765F72E7C15A90CAC968198A38EBA25054D99E7DC -A349E6502C98F894994EF7A0AEED79D1F12EA1B18BF8BC3B5806141C82B201EA -0275585110EA202D7A253F1D6DB449FF2B25F7B8385B1427453717DB07ACC21A -9F5D5DF4AB9D3497C382B1B9761FD0693533650CF014F5D56201767E4CD18A44 -A4D912E1A90EF1BEBA702F806652672ACE37D40B4705A4725AC38A8B7D706E84 -6D22D811AFF8C8F465D585778EDF77B600F65E332849ECE66FB0EE108B30103C -BDEDE7AEAD0E3A72472B218310D9228AE0BD49120DF3345B692103F7FECE0BEF -8EFB73CF87429E2D71F796CB92C6869326FC6FE89281B92E29F55634D9AA2334 -E08499F3581883274BA9660532A345DD21D8B330CE5ECF714D3BE2E447EA0735 -27F97415DFF52BBD0D0DC7A0C72FA4F2B06D9457DCABF87A9C5E06CD8BF07BB4 -BE4CE163DA8B88DD3F97AA27441FC0FB91AC532F3E6BD3F6314B0F15DC6550D5 -D43C28141DA572A779D51CADF2D0AB22D4A883916209AC24B99A8DC8EE1533CF -4DB0C7AD486E608B4513B962C7A40F963CFD2CB35C01B43BF533E4D70709EACE -DACE3A5EE54EC358D00C3B04ADBA9A7EC731311D59912E306259C7D6B317571E -2889FC46B5274AA2F1586A77A9B7D0ED346F368FF93EECBC1ED3DB10AA06337A -19EF914C05C26794A15F7301BF8A8044660E5A324C7FF251E3DC1A3C95E8407E -E8021B383E171AADBCC29624923D08E04F02C1C64A7DFA101120CA739F4F29A9 -F622A57FB3E1A669122B7C1D61BCAA5CFB634E4EA6AFFFB7401BB22250A3C154 -52C9DD5C9C8AC7E4F9F9E0522B869406B417D5F1741E6C90412DABF292D768B4 -8ED875F79A601FA17C55CAB7D6115ECC5DD60C3CF775B26476385049E2D4B8C6 -39795E9857C1A4D3E6E61773B875014671AEF784F147429420712688BE9B3831 -0E3E4C65D4B022270D692E7D2677D4D3A7B614B0C9CD21EAF7FCCC9C1AF06B7B -9AD267F2882E03D729A949B99A031116880C6EA3DE4C3FDADF0C0BD40324A374 -D3739866B460CAED933014C1ED4336CA6DE2609E8397A5EEBCB9FFD7E463DFBF -024E9412307EC69DF6ABEDCD1C29A2D3036CAEF289EE327BCE6C2EA45AEBBE35 -7950AC1C7A1AC8C557FD2BF29A8AD8D12BF2095009A03B8D01B77BDEC4A1523E -C6E032E0B2E0AD7FBE42E073299A63324CE45560D7C19E35FE92218F3DA56C0A -F7AA07C8BC7D8DCC1DDDC8908F2A3F4C02BF947587CE6B3886666B0566C58D0A -31BE8015F7442B2A9B23992EB005792E322B126C07277364042CD32F17B384F3 -C585E719F127F9F7BEA153FDDDBB9AB3B9EBE571A26B200C82EFEDAB48835D3E -E7B1230BF33054B935154E01D1913F88F92117B5B4CBC063C427AF5DCDE8F49A -D9DA6403DDE03DC57DE58E4B3E947BB8D456BE677573BC80AEEB0B39D76726A2 -1BFBC7519F043B44B57E7DFC0510091FDFEE3490872EFF39A7B202253D8F9713 -6D0D5FDD97153AFF75210493C3011DE867781B9CBD5FD12233E3BDD23559ED13 -2701517738965FCF6D793177E3ECB946D8F5127DD5C01E57D6764509344FE2BB -ADE7408B2ABBB4680772D1870BCF72C135E2183BC6FBE7BAEE8D108CA6B9907B -D26DF0FB9E9CE3A0F35E6FC4F712721C1790A04B12CA210C28D8BA3DFC946BF9 -CDA63863335104938257CDCA0E9568DE1E07827DEE1F931D9FB04FEEC405A134 -607C868A9802EB6B3378D1D84E29765D4F755E059AEB5EC295EC5AF195DCFFB6 -1ADDC4087FEBD2BAF78BEE15001A6209372D854EE86B339DD094774E46F8FDCC -34ED8435A65014AC61B1029336C95E3E9A4CB81863176B6B8A1BADAFFD02F522 -4F68B255C55130F777BD4739E2EDE539A5CC316025B464D9DB7CD8F666153E9D -8C430C8B3609BF0E60B020B96F80B43E494FF94BD6D49C80C27E00B4D5CCDBF5 -C1299491D1E8CDA41B387D6C6FA25D3639D4FB3D30299F07F75F237360183E68 -E2B8189F6059CAF6076250C9A6890D707FADEA50D9D2E65263A2624428B71904 -EA0AB10549205A280769B6DDF3889499998DA4843E8271D37E26726D6E38658D -B62F7725C0995699E00731425CC45C563B6EBF1C814B5DF049BC42700C793C8A -74BF8530DAA039E934529489E55772C00410610EBD4C2A7505EB6F818DBD3E2E -BAA5870793EC63A155BF71EB71C1D208FA81607EE8F344064618ECA8022A6384 -688E91E23BCD5ABCBAD24C79D82DD85744619E0D88D71BB11394A4CB6A5F8269 -6F2F8E0F17607D8D16A9B5AEEE68ED48820EAC12CEA3494506E8C8A11214C94B -24C292921C453335AA3D9887BF91DC22EF3B0C25BED1C32C166199D0784EFA7E -878F727E981CA3FF108AC8340E6BDB4AD3ECF588197733E9340A4AC4E7ED6395 -688645347C854FD8B43F449618DDBC48CC051774D2304C9FE3F6AFC45B136CAD -C8D88921068633CDEFF0DBEE25C02473A8B17D621FB4A31DF87D5ABDFE721C83 -653909271C2E81C47FE692E1C8067A46DEA3FE10C988A79C95EAB14BFE5BAAA2 -6741E5DD61CE9246C3E88085ECB666FED1BBF84A6F68B3929EC9C9FE09FCB8DE -5AC0F34990341D51A8F69D55E2A1FBAFDA3978AAF43E55B02EDB42AF135FF537 -84A56916185CB6C938BC0649AD5AD628F33ACC203AEAA69A317B08E2E8ECDC96 -2EC3C2FC6C2D592B864DCEA82B354E86681E993ADCF01DCA7927A9F48E16613A -95A56831947BE89B73063637D002E96919BF4CDB06A31F7E83C7DFE2BCBED1D8 -E309492DCEB5C3C152769C8EC9B29AC8889EC97F66A34A6B9C4671638CBE8103 -FE3A111908EE4E58656D0E4BC723E1B1253806B78DD25487D4CE86BB522145CB -020C4F6C8F206A94B78D46D2BAC08ADF91A297BE1EC60FC58D3C5201793BEF8B -1CA7EC1EC94851C12B109B8C828D3DB43341C3AE702579F5AF8939D31438306F -6BBD0E74D928CDDCFAC4850EFEB465CAC5F4B4A0BF5DCFF018C19936B6D0F12D -AA164F7EAB45FB10B73A246A5F245CF4A990C5F8C72BE03DBB21203AB613BAE6 -8C998FE00E59DE3CD982942AD0FBB9D3FE9AB16F19B25BFDA25C1742DC604136 -007F1BF23A06672E66756A2242CF6DFFC60D44CA6B24B9FFF1EC445DC524847C -18AE34B3880DFCD1667C15A5599A625D2E554826BA2B9F6FA78EDCB1FBABFBF5 -D6327CE42AB54F87118017CBD09A9C2E1237D8DE26BFDEF10CEA9AC1A959FC4C -FC7B0364AA4689FBB5A3A43B1A12ABE18E352F1748D6CEFC96FC683604245FAA -639782EB3ECDE2B453E65B4C1EEA3F8D9E8D55287BAB2ACE9375BFF9D2DB6EA3 -1476563950B82BB0C1AA98E56EDB786DC80F476C62D928F3385BCACA993FA68A -F60A8CDDC5EA7A78397E84CFEA934EAA1EFD756CDB89017F4CD3FFCCC77E2E88 -DB7399A76715050480C24417D82934C06420373F8D48C6D5FC02393939BCB53F -AF806EA1ADF6A0B4B896BC743129CC2A42A1A8135290DCD1977AB171D1B9019B -29935FB15F6C66E2022F3F0BA543775F5DCE34C19FDFA7493A7610F6613D2F0E -DBC3CB24EF8CFE14689B638D3643B33211E04EE99E0AC8B1D40E40F66E458078 -FA36952BAAC78C140DB9F2431AD3ECD9B6624516820BE13B0B321C6AA5AC653C -23994F2F20373C485E26C87B33C50EAE5BE637FCF99386E1D560CF4027AB4259 -E89F1D84B18A8A87852CC549782746EA43124CF2DE989E05107870126E58E59A -60E0DF7E106996BA536978C7D562711602162F4BFF7B965E53CEB613D778B333 -FB04DB8B916D1ED3FF79E4702E76A5BD5D4CB2F08329DE311AE423336FF2EBB5 -C4DC1C84E7496A09164C762C2A4600E9ABC9D693B428A5222EDCAB3CD06E4EB0 -8E61EA47D696089CB8689E5D164D515A42B8E47D723C09631DDD7B8A08A293 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMTT12 -%!PS-AdobeFont-1.1: CMTT12 1.0 -%%CreationDate: 1991 Aug 20 16:45:46 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMTT12) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch true def -end readonly def -/FontName /CMTT12 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 33 /exclam put -dup 35 /numbersign put -dup 37 /percent put -dup 38 /ampersand put -dup 40 /parenleft put -dup 41 /parenright put -dup 42 /asterisk put -dup 43 /plus put -dup 44 /comma put -dup 45 /hyphen put -dup 46 /period put -dup 47 /slash put -dup 48 /zero put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 58 /colon put -dup 59 /semicolon put -dup 60 /less put -dup 61 /equal put -dup 62 /greater put -dup 63 /question put -dup 64 /at put -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 82 /R put -dup 83 /S put -dup 86 /V put -dup 87 /W put -dup 89 /Y put -dup 90 /Z put -dup 91 /bracketleft put -dup 92 /backslash put -dup 93 /bracketright put -dup 94 /asciicircum put -dup 95 /underscore put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 123 /braceleft put -dup 124 /bar put -dup 125 /braceright put -readonly def -/FontBBox{-1 -234 524 695}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5F0364CD5660FE13FF01BC20148F9C480BCD0E -C81D5BFC66F04993DD73F0BE0AB13F53B1BA79FE5F618A4F672B16C06BE3251E -3BCB599BFA0E6041FBD558475370D693A959259A2699BA6E97CF40435B8E8A4B -426343E145DF14E59028D4E0941AB537E34024E6CDE0EA9AF8038A3260A0358D -D5B1DB53582F0DAB7ADE29CF8DBA0992D5A94672DFF91573F38D9BFD1A57E161 -E52DA1B41433C82261E47F79997DF603935D2A187A95F7A25D148FB3C2B6AA32 -6B982C32C6B25867871ED7B38E150031A3DE568C8D3731A779EAAF09AC5CE6C5 -A129C4147E56882B8068DF37C97C761694F1316AF93E33FF7E0B2F1F252735CE -0D9F7BCE136B06EE967ABE0C8DF24DCBBF99874702ED252B677F407CB39678CC -85DDFC2F45C552BA967E4158165ED16FECC4E32AC4D3B3EB8046DCDD37C92FDF -F1F3710BB8EF5CA358ABACA33C7E5ACAD6BF5DC58BDFC3CF09BA2A38291D45A4 -C15FF1916FE2EC47FDC80911EB9C61F5D355BEDFC9DB17588547763AC5F0B1CC -12D2FFB32E0803D37E3281DA9CE36C5433655526ACFB3A301C56FAB09DF07B5D -048B47687348DEB96F3F9C53CE56DDD312B93D3918CD92AF53FB9461864D11B8 -0138918D0B1270C54873C4012CDE6F886DB11BCEA04B023EBB43E0D0A06BE725 -741D08B9DB688731A6C8F9F0B1FDFA20C46ABF1BE836FCA0757242BE4780A41B -C19304DEC802CBAFBD0D116B1F98C01BF41ACD72DA8C56F8A03756E1850CF32D -F657FFF4377B43F208A3F33191F9F6F36FBB0CDA3514D68ACD8DCB2FE67AB377 -C6BD16D11FFFD61E05B8B311EBE8D05013ECF1D03F574982E3581A188E337498 -3B68080D69F7D88F2863362577B6566B9526D1E05DCAEE47F7E336489F4CF445 -E5F4E1DD5EF2B795F184EC5B427C77D49CF637ACEBB34ED3E98A05B8B5DCFC7E -02834FA0F22D120660D5140B6DAF99D9CE46D200932355558AE9F451DEAC662F -7C7C0CAB80D3DC5A1DC50E275CCAA83527CFB2A2CAFECCE161B40F1E92C95E42 -127A71AC760936D82D564C3369C0D483963C22846D4B350A12B1DBF9ACDD8BF5 -1810503F2B19AB09930DDB111CCC404C5B0C39BFB14A248CE7AF7AF30B939C87 -14AE8015012D295761E9B2CBE8F1DA1FDCDA2DD8231210DFB4F475FA74D8F2D9 -1B891AA509FF26A49A72DA0FA12032744E068E884D1C8B35BC076AF6D4A7D18F -3CC3198080CFC8A141B0B90F6069D715775CC02C95F78E595F08CCF4929388F7 -E75E88F07BF32C8ADBCC2018DD966559C40FF8B6A7626C2E6242EBB03AFADD4D -4CDAFC460427ED431B5AC79E40EA547030E65B17667147EBE62CD924164C142D -74D56509F06CE078DDD196129268304FB3C9632AC00B1C2D9108ABD4BEC33B80 -AFF9B8619C8EC99DBD9E945A83111E81EE4EB9AF4547941BE719C80401B33EB1 -D3E5A540C2889BCB52591075BECCF79353C2E44D55AACC707FC4D9C75335DA12 -DFAF9576FA8D7FB33C4F9E1E1E2AA130F0790F3E03255DAD89CA6188B06B8DB1 -5AFF710A232136339337E2198BC2BDD870D2E03FF0E2FA0A8D588F1AFB25480E -6E0CF563BD097FF2339ACD2D9B249B15D7EF4F713F60B32042DACA32E00FB573 -B5A04D92EAFB9F8C677C864040408EDAFEAF6C64C84D5AABC81843C7BD7E2FE6 -A6A1942EEE977589D46A6BDB7E043CDF96B975A0E4BEC0DE76FBA92E6D73C4A3 -997BE314FCC9DE82EFB8120245DB019122F2559481D2D9A5D998652DC26D15F0 -6527AC04C418C8EF5F7C733B68BAB37E80DDA1FB22D80563A8E14822C2BF18F3 -1DC8E43EBE0A68CBD20B42AF96B67896D0A2187A207ACA6C6007F8BD24D134DA -DC2906FE3FC579FA7CBDF8749D184D6DDF3A99E0A2D397C20D812D90F80FAED3 -F80EE73D6CE7A07E14C75C7103DEF5321CA982CED99FC98F25BF14AA8816A881 -B5EF2DF6ED390DF3681BC1E8445CD0C43ECA605E79787A46F531CCDBD619722D -FFE1D532E7707608471B2E1153579960C6DE3BC87A99EE363D12CD39DC752719 -EC4C84094A887B4270A7458B7A00824E303F7277C78AF7EA7FEEDB856A879EC8 -B780691F93A3D21C30C9A44423D043582FAD74A2DF733CE28D0AA194280961D2 -FED2C2397E7BE48DCE448C484A541C571D98CB6C753586C6F624B37DA2FA4E7F -5CCAC1F57A3F06B53533B6EEA71CDE6CD2A8B51587175D689B4B8A64CF2E5903 -D07DAA91A6377E59F26555A34ABF7D9E6D597B7BE8B43D77CF47391379AD06FE -113E75A3BE40B67293CAF23F1F9433825986C5B00F5515DF32584A0563885C51 -7446FFAFC0B4EEDF7AE64CD2CF3F2BCD52657BA98DB9BCC98026675E889BC679 -CBDD0EDEA42470D2C7A58919C5ED117E056C51CD3A07212FCCB510B434BF7B25 -496CCC299DB88E65C607D40CB8F64C400F5DF6D66663F34909351DAA51E8A606 -6C0566AC536B625162875E733C8F37715D5F55B05493C3DD751D1C463FB35D93 -AB817F5F500052E7B213D38130FFD0732812EF7DFB9DE2FB4B8C0C3B7D3E0079 -0E5B857D0369D95941583FCDE6B7F474513979AF51B57DE174DD248FFE06C0BA -7E2A1A36F71BB25A63C32336CBE22DC15204380D79615D44F0EF9ACE94C21024 -126F484AA90D4769DE9CF0BBAF66F9F0D8BF507BDE27923DABA5B8A0DCC14A80 -EC953E99A96A9D4509492567348C599E04BCB39194B623489B07C6EF53FA10D9 -162EC961D12D937AD9AA840F644576C2A2024836EB1E54E7A31A8D91029B311A -D28A0496D2667478948B2800349B80521DE81AD6DF61507FC0D352B2E9B55EBD -497C48C1990F91E4E7C8B26BCA7B4E8B79584A8822C1A396EDE6118104AC5DBF -5B4A06EDAB0A7761B20BB240C6AC4429FA93E90D3E4696B0CB4A39875283819F -4BBBEE08AE5A8EB833D5FF570DC46A5909D7CEF02DDEBAFA457138A880CAB04C -6B7032F69B6DAA24742E6666279FE67B01A3A7C5D8C2F06C0479C89CF2A42C1B -94DE1055F7BE12058FD2B1D8F832389FD7D907C0E8A83445073139A01ED24322 -457D30468E3810913B1951CE728A78E1F80609F4DB6B43C82D0D33456119C62E -A80B96BFBE41BD621FB146D91434B3089D721ED8F838B8614C94A437D5E6FFA7 -BD2B7DE784ADDAAB21D7B4A036BD4DECC5DA3B3B1419672B6787C4F611917C05 -79891EC4C3473E013BA030398A50CE204C60AA0AB0DBC201FB3EBD64696132D0 -2097B9C15F315541D7B75DCAFAE01FF960EEF44555ACFD1C74DBBC172601C36B -026C78C8A085BD4084B1E15C9EB5DEF998DC5C9F65A5F5FD6635C9B4971DDEA1 -FDB6EDD761C663087333DB8F6599A5432ABF17D7C1BFB6D92A7B291FF2AEF027 -7E02220A4C062D5838D486FBF27EB8C3FD450DF9996094173807231EC1FDAC50 -4AAA398E887EEEEE57B9F8E6571625576745A322A754010BA2A867ED1223A3E5 -848DF847E9AEDE00D082F2F2B7961A64C7DE3472459AED0BD3A09E1B50B3B1E5 -74A599F16182C058B74880A268EEF986BC46FC8B96E8EB8CEB3871433038ABA1 -53CB75BA7496142B279E9CC61AA04BAFEAB77EBC45EF2FF39B5FDBB671434C2A -B40F3AAF08D9214A9FE11D02634BE0FF06F88EB2B0A6DD4DA786359F0C5A262D -BA5402FCD83312D78AA0670DE528124720046A22B5973B7DC833DBE145338D85 -48309E487B600601A1574343BEBB43E1AD4D3DFD4ECA89BC4365F5A406367554 -A2ACAC1D765BE4A5A62330ACE326E3431584B6D6250CF9C3C47E7E8E9423E582 -604C85C72D1877C3D45686711750ABEA0FE05A50F566CE850B6878800C47A660 -A010534ACFB0A086B08034525BBEC524B44897C13D47EA6A75979B6B7FD5900B -9875652BA4D86BB0BA5CD2EED2324B6BF8F6FFB8A4D3B2FB7F9F5F5B3F3CEC74 -5C704EAE5CA551612B2AB7E5EECB328DCC8F35922CC0F8568020BEB25F029C4A -2E319CA3C62EA7667FB8C6841C6C87CBD49F72E080FA07E359FEE45E74D05CAC -62B100CE3A9C7093B3C04D27A951AA871FD8DC89571F62BBAA23A9CA965AEEAB -F8407DBADAEC5B4F0D0ACF37153BD6FEFBA69510D9E04EA63FA48D768AB93213 -FB3288B6480E0712F7AFD781B41AD989FBEF09829104F5774529C484D33FE3BB -B96BD3989684E8BF8EB80C42F022459534FD7F9BE849EA7D518F4A01D443572E -1404C6EB3FD755EE8FA3CAEE39BCCD8F4C03950D97A35B4F90AB5B55687602CC -6406C32F4F8F62223F66B457EB1873FF4943C3F210C0158C25196C45BF6DB027 -78674CB0D492AF6E116E4670335F4D59E74406525D938988D8085A29738DED7C -94F0D0629BF1C10A15727211603723FD9DD0155139224996D0ECB2DEF2162840 -451065727F571D03639386385B8C555B6CC190471BD807D6F3CCFF7D3EDCAA2B -888D0FFAEF66655008C8D3EE6B70339890BAE15AAFE7C753208BFB2FD2FDFC8F -D4556366EB2A1E172E57A8BB96DAF50161D02BD60FFE6E871BEE5DAFA0941B37 -0B234A262C58A12DB2968A5FDB7B362FFA67BFA2D7D07BE47CAB72AE3FF1D76E -BEAF38AEC1714346AB2D1FFA9EB3FE227958E65B56794C31FECAB21B13BD74F9 -7039790E08A769F35430096B12DACE797A881D7C6097E3075D182DF78239A96F -D8F411D109E48317242A3DDD15C3FE6AB7FFF52A69F52A1327DFFA83C42F4039 -C71D6D5F257BA5F695C9CD39BA309A1410264DFCEE657D15EDAC44B2A7733E9D -F6268CC88B59B0BFC4BFD2526F0F60B1154DF698E846CD84765C6CE6BFCEB47E -436FF26BC6674B5E01AFDD6166F1B8917BB573D8F02BF83E8FE52B860C530351 -BE4204BA1A695636F4279BD46C97B73A5507D67AF767DA74541EBD75F7979189 -D213D1E8FD27DB12A7372347CD949AA404FC8BF1C5C628856E224AF53D0B34FB -209D48B1BD4359594BD24757B0B1C2202C60B503C148FCA7112CB83D0F1455A7 -D7581C4987EC791DEACC9FB9998AAD67F96866823557F741C083CD5DC0BA1F94 -7DE2A84E29CC43A3572E1C25D9A6EFE95273B22EDB1970DB39A77EDFC10EA494 -1CA3F401DE36D4B6599C4C32E82147E93F023C2320473A53C9B128053356F66F -3E02515598F89FBD289530B9E0542325BED1544801C6CE4CC8965C0139AA8942 -145591FF3CE627B51CADF9EBC3C9FBD21C9658125A3884F16F5895BCE127134A -4F5A16046AA3D95F3CFF520830057352C276638C275B8B2228265FE56B62CB71 -7C63AC74A9ED98A3695642DDE4839CB3C2412396B7DF01F9AA898C01B1C6B4FF -69318B4815E51E18522F50DB6A17628CC2299EFB531CAF4298E9B513D171C647 -CCB2D554837012C7EF5F51F7CE77B1C75FA6F60F22A585A4BD28D239BBF3F0A2 -8C7482D2EA6E45C64F3FDD4CD368D0F92F93260470B42E670F9F26BE60B102AA -AF063D652ABC3E139963A6A1598E01BC88A92429951D23E21160F69556FFB9F9 -685973A07595A91873F47BA738FDD3F56D67755AF899D3BEE0D63997A84E8251 -CEE45C709A412D72E7FB46ECF42EC12DA4DFFFA1D6827C0CDA82D7C7DC932379 -E6645BDAF68E2F83882114A263F8E7314934F65C55A08A7A7158A2D26FFB475B -6F1DC4F40CB4A8B0E8F55784475D0C45477B397C0F4FED43BBD8A52211176386 -8D65717FAF41EEB78F20AD2C9DC8E5C54446F4916EA77A410FE5E983E51C5D4C -E00035610530EB58F458312ED8893735F3FB95AEAB1696E0E2A3CA5ACD3F31EF -628F2ECB49EA9E2765D4E5BC87EC4602C10082CC32DEE6D6A085D3F8F6EB887C -7FA93488FC78BD465C9615929BEE954E79617A2779272BD5E9B8E82F50034710 -172656F4863B9F271BE943390C127264587F1339F81B022C75C604CFC09BB034 -C4F34FD6F161CD8B9DF3ADCFE20F031269F715C252751A648015D84D4885264B -157F5A1FCE7F7C24017AF75F151C1F24A70BC0A15DB2F766DA6A9E753707EC8B -540D424FB55ABC592D399C625E563FCBB48E5B439099D0DC69460F1734502B31 -961949E1F35BD0AD975C3B4C8662957FA9C03B2F36D4FAD16D6B4B11090015E2 -E7D24E99F2212B6029EAF608A5C106625F206B8DBDC3EBB0139D7CF240EF5AD4 -421E82C4514EBAF54C7C28851524F16270B52DBB7AC6D32DDCB8063BB69D0B71 -C47BB1F0012AA57EDC144AD2789A37A60BADFD5E456836C34E4968B3E2DC7A05 -CC235BB39F20EC9EE0128C96F5275A571280B340C5FE3C2B5F366077E4B9959C -17651C8F7425DF934C2876B7DB0620BE40FEBEE802331D13699BB03B72BD3E72 -CD15C0A587D05D442D1FDD09399D4ED5E6AB013BEDFD6F3C22F1977B07A7EEF1 -1361FB88CA1388152E65DF29E2F390411FC651EC4E22D502B1515058256140CB -220EBE03BCAB9F7AC06F7C9A811572E4D8A0E0D400FD86123CF97CC32B898CA9 -EEDD127777F7D5858A96E247890C87DBE9ED32E30A9997296CEDA301CD060006 -F024CD6CEEDFEF94D89F0A9EB3E5291632E01836C6771C7F5B50B7C758E94CAF -B7BBBE58092C787C04EFE0689887E144D17F2E848466965DD2FB41AC6A387DA5 -4435983F7E25099EAF616ABD593879A2631A3E04D9E2C8C27CED9184E19E93D5 -759940563FAB985D5DE299335870CD61C8BDF0D360AACF0B50FD68C011277362 -ABD71C351DA477A6A268D15B651F342AB34255F6A9037382EA0CFAC3478F833F -5005A74BB0F558618250DF4DAEA663411B525212F6DDF1A0430422EFB19EC810 -715BC55A717DB1C1827BE49EEB4B43A2BDFE222A00030AE2D23260FAC4D1922B -A2F9CC0AFC9BC163B2D3A5CF02C2B569681AA5A92B8549D303CDB6B9C0768137 -541D8D7D07DFCFC676F74E7F6A4ADBCE26C559FFD57F6BC387BE4F321B0BCA1D -7626389BB0C4C81F46F275310D2936FF24CCA4A1E2745CB675315010335731FA -CC1907718129DCC106709EE0067B115BC65335D582532EB7B6C495C8A9E45509 -D1DF256AE2EF76D217D95C93B4D7CBF69C51C9B0F46536E9BA8E51F61F9C6159 -4A54D0183E7CDFF8ADAE2CA34C03DDD0B29B0B2E47415759D124B7F903B86F52 -9A7D7526D4590FB331C1EA39619151B53A0802E8C0ABD81EF554627A6A56BC17 -C9EB0571849D17764A5931397A9C6268E173F4CFAE780E530252960DD437AEE7 -F6A2B243779AF5FB0E4193519ACF8F50D13DCE15F227C1CE270E7BB2022025D9 -C8F279FD7B208F500AECA05D4E78C12FFC9B8106B9FCD0896B07D3CFE10471F8 -358B2C4B8F2DF280BE594263BF5551D702ECFFE2848C53ED1E0748CE4654D16C -E79FEB29935FB265CEEEA44A286E6AAD0D7FF1FBF63E3D864F06EB1EFAE9BBB5 -9FEC61254C73060979FE7332C51DCE33A6FB3AAA312746907FEBB3C7DBD6CCB7 -17054646B3218D2B43A39070B2F6FC1B7D0458B44C0EB26518800381A3BFD5FD -4A04387EE5CE1A75FDA114EAA775FE8AE586247F96ACB0168E3C7FE1F43A9C9C -07DF5FA43B15472D48F54221B1DAE2422C9D77B481395324CD8A5E18498929A4 -A6BB63E131851E159F922BC939ED0F700D84EB7DAA4AEB31F1AD704A56724C62 -73FBE5908CD7B153F53146FB6BA46831726673BB343405F40FF0603F224CC2B6 -2B9E7F234A060C74A2CCE41A850E6992A82A79CC519AC8DF90AAC17CF6B60B62 -5347386C4A43100369DE1F77A8A53F695D85FE5AC8BEC3CCAA6AA939DAD814BA -F0E8A48EF75A61720FF5B58F6F14E1C841D39E2D670D6A5918BBB6797EE560A6 -5339BF2B33BFDFEE95DBB005899CDECB83A0AC41CBB832A43A990A239951BA55 -CC2DBED70079B8F608BD065974D03436E1EC539E696C1613839F542AEB2D19B6 -61378A1F4C30F4129F6986BBDA768890B80FE6D3B9333C4DE7052CD48EBA3B56 -8401FEDBD6CD5E1A2442CDF17F19872DD0BD573C29174BF3BC4B911287AE5EC0 -26BB85F548B2CDA2CB8898B8D02C1B56AB0201ADAB1E12A50196C1FBD441A4EA -76BD5185CE46CEFF37BE18D1446D45BAAFA2C72F76DDE6166DD3EE0D82D674E4 -0C7E4AA2560705A6A2708ACE38325069E7DB52819552C842E68E14E895A45134 -8CC6C98B324A24F153515E7E6C5B3FDFECFAC7B9C58640662A77F960BA74D4E5 -C1C582D031EA5865CCC9E44DDF7816527E36E421FD6BDB90F335EF016DC6377B -B747422EB68265D362FC17A57598A33C868DBBAFE3B83218993704002B2731B4 -054EA4794D00CA22BE8A6D0522B2D9AA58580E6E5D37C77C4BDA2473021F13B7 -197A4AC3ACBA6A05E9223DD1A9E3E82F1D4A28A0FD3958C25118A1E37B728DF7 -9C4CE7CA1C5DA233210F535F76C34F54CA474FA90425021968A6C01C970B2401 -DFDCA83C259D2941AF1E23872F9E919E30A4DC8B13DA768562DCE8843EEBE57B -DDD5DA50028714E8DC86D0D0ED405EAA684BEB4987FD4B2A69565B97C8F9E26D -59BE5AF8ECAF5A061ED653AF81605312C29EFF8B5C56CD5C08C071ED89C3B97E -9FC3AEDB45909AA75679E1B0838B7FC0D69F48CDD1EF740695AF63FA1F6D6D4F -7EA8DBC9D326A245193C32E163B434A635970AB7EF0FEA7806D9E9A169E85417 -F1AD926C7B52B919D401CC13510B46F1A90080115CCE69FBE13643D74210D8FB -B4FC2CA2E41034D8FF576766B54DE925955B64D19074707C0BB8A32736DF6AB3 -B6E9BE06992FBA3B44E35BA67A77F8945DF73C7201ED4C0505209A23E0C7987E -D5536E8EE3AB975E1EAF96CC4752F9FBCADDD274890F6A700F623BE0B967D7AB -D283DDF0CBBE7DD88B5F85435E8369901FC68C72F5140D8461578E6E2514DDC0 -2D77EB5F0B90A0DBBD4EA1B1B360D03CD165BF9E4EED0C6C011B105708261FCF -E9BD57710CD2545203C40C220059063ABDD755E0131FE538F085D0AF930B8506 -03AF0D3526DCA7CB2FCD85102002C6ACB993B3E94C9CC4D05EB1154BAFA27CA3 -F5ACC6E5385630E361736386E22650859C37F25273DC2C8371D9633095645BF1 -5540B990EF13CBD65B53BC3E73397936057F83E3714CF32E2AFAB9106D48B0B0 -824EC6E66921832864935211FEDC217DCA43D5730047E6493C2C2DF0AB120838 -DC8CB8C69CCDCE09E45EE41CCD4024A9AA6938E1BD5CA98610B8F72E4770993E -BD948767B352F7B59C39A77630968FB706B9FE1447F56C7F2CE1CAED1F3B3FE1 -E4950DFCBB6AAF550219F96179B2436266A142F7ED30528D0171D15FDE670ECC -E4F4F1B3ED090CF251A1C9C69A3E48FE9724C43334EEC017894B6015272CF46E -853840CC0A4600789BF34A9D5E7E830499A5E892CA65065C73203CB7D994BFED -281440BB11D611CFB9AF466132C2EF9A3F1FCAF4DD01AB4673ABF4E5D12A20E2 -63741A521760886BBC010C688480DD492E63B9B3454645200C3EA9166DBA10DB -973554708B231E8A37D49C46530F9DF6E925CDDAA843909CA4F9FCB3E372DDEC -593BEFBD9C415B8BB07803EDF355B3B476CCD35F274A5DFC7B1111331A76F336 -9263D106AEAE84A94BB9584224CD0A3E9C301A560831657109DC32203DCB297B -6533D17B6E779420644DB9D58A3AED5FF0EE8751EF20663E8834512698B263CF -28F3A647B4B660A8FF016F0381A5EA81A21DF5C77452DB9D3015DED624420707 -01150759B60E8727AC9296FE86440ABB9F129FFA7C005C328EA54B5F0481BF63 -B17F3D2187BDA38C8A31885C1DD407C11E2C8CF9B6CADB3DB97AB407FE90408D -59D42F59432E135FF4177372F508C06DBD86D425631B282140B504064C3CE30C -E05E65C4DA98BEB01D24574AE9880CBE9170066ECB381FCB25E9F4B733B9F5D9 -D32B0EF147D37F16719F838ECBCE306213B2244F27CFBCD384178F880F8CC131 -D91F00233E2B0CCC1558F5EDEF772EBC8CA1861663DF708E06DECC81F6AB5F2A -D9805EC16DF2D26CE053C32999701B80FB78A2CE18AFAAAED28669F44A14E757 -44F952947449395837A2486BD120C5866560EC2A10C3B2F373E7019063F69CB9 -4EFA0EF04A172A5A8BE14017F312F2FF43FF1A51BA5D13FD7DA15DD2514948BF -CC06C2E2CABC5E7350E5194365A28A5018CF2A47FDC3491879617D507A6B86C0 -07E18BA33FA7D33C7056A068659F9D92F4C997CD775ACF97E8877E866DB6EE69 -55ECC3D444B547F738407E4D9822D500E532540D34161B4FBEFACF4B2E9143FC -B4BFE047DFFAE83832362487CEEE67D080C0BE7180C267CE1029E97D90464A98 -42F7A1A675DA418527185FCE5A337737E38780EE186108A9793EC8E87D01406E -5B8D777D371AA695253618D163B6E90DAEBC2017F88BB4695AD6640A08D9D98A -6D066867FB1A2D2B312A7C045EA0987924DC3C65117DDFE9C656910F2B3F57B5 -32DE4BC42402ECE914779717886A0B07625A7124C5DD919F509BD5DFAB709930 -1D93EB76E09FB4BEE47889374D018AC4A9DFACD62CFECC7B3344A463DFE793E3 -8146EA82E83575E94B60141C9B43DC9DAB8A6D99D1B8132160A92277E5934AFD -AD1A3D4C0611907311600B892C9EDADB98741CC8A5BFC7D306DA0D0FE37F1FCD -52963979D20908C365FFD2378E3529463D7BAD03A12E3212B162CC75488AA726 -FF1059E3F05BA870AFEBF933BE69B4F001BF3C8DE3719699D658875FD5E8F18C -A6F3BE4DEB1FC96ED84DDDB94F48BD6E328DCA364C8925DE6C5A5EB98C5EF235 -FEA62AA2D1C9DE88F4CAEB5345AA38C79227018A4ED7BE6A9FEBC8AD347E0E5D -4E62C391ED12447680516A054489E7A39484D9AAD9A62B911A494961B30D538B -49249980A36E1765EA92A40F6317E02B0D59164AE5E8A7C6003164E62E2577E5 -E151B71B10CD4F8B3B83BE3D892EE78C789C077728D2ABCA10FEDD623E518E22 -25161B379E894141ECE742BB90D3E2658F258910DA5E4734D422A69E409E5ED9 -A91D042FDCD34825456404A2EC443635945C7F4D9A12745CF5F702AC13318B72 -D7A65FDF0AC0169EFB17AAD432FA130DE83CAEEB96A9102A237ADF0575F34E25 -F2A196931D29F222C95584037343747CA598BDCF11A99B27D5042A7623F2EBB4 -EC87E938813A9FD0F8D3BCD9F4F7773F11699FDF2D73A4F6128FA8A893385A24 -22D65BC7323E27B2557744C5CA49ACBC8412A7CF95DC010B5EF1E5603BC5AC96 -4ED335FB6B72ACABCCA4C48C1D5052D6402D3D117BE379CDF6A94909CE580098 -EDD77FD34AD76AB60D40631420B41D1EA77648C66A031373B6040A6B2DDD3F79 -47FF9512F95179DDC08ED031399B5BD536D0B51D12926BFDED323E113EFB0089 -EE10E62B799E5B5A040D938BEB9DA78711FB4AD616C86D348DB8A591E66B60A6 -9B4ED3BC37E46A6797B3BC80CE2126008930204C8BBF0A11CC18416A2C81D189 -19AFF6EC9320BA404B57F76690B7D3F8866C28FE2514ADB57A916F53CB3A6BDF -41124974E4937BC5DF99B5A91B2DA88CC6CDF702FF76E46D3075BA530322D905 -68AF4CB5EEE9D6517499D6218CDEC19BE22719B5BD36464EC5BF07451C926D6D -64CE11A9DA3758F48AA90269DB9B494BC88FC11A4F59F97F048EE2542D924F5E -2A20F16262B36701F78EAE174E31780B1269BDB143B2C805210F35B82E9B024B -9F51D879A0F14607BA2A065C64E065CA17A31009BB7F5826054B545929850E83 -89FDA8142680BEC8B04F09A1CB1AA94E8AC7426C139470FFD34A5CD6EE575A94 -C79298EEC6955C6AF4476BA6DCAEDE2A76AFF57ED56CB988E95CD78E2FE9E36B -3EB8BED9A5F8194CED1BB208DC9760958C0250F97BB31521C2F3262D3F1B502D -255748F7611A029C087E6AEEA637806FB0707597AB386F538BE7E494601145F5 -C2EDE99F1A295B074D701213A3D6D452D9569BAAB5E6EEF62FD6CA459A72BCF8 -E5B164AFEE0CC1EF726F9640F7253E048C5E80FA9AA0E4A485E97460C26F387C -2FB19806981167E50F06873F4521DB098874EC998B3AB5F62BB43A07CA77B2B0 -F2284114D39D457A851C93F72B888371475A0AAE36CE7FEA432E6ADBC241079A -71A939C56932306B69D6102DEA221595DA15FF6FEE1DB5172A3AC765407E4B22 -B007A8F55008BDDDED9A4F5D70457F2A337290FB58018D7CB8D0B794C001038F -7F3DDC997D2A1C7C7953A655019185525B4A5EBFE4764EC91501BE399776FAB2 -7A8F6DB63E45C35FEAF5C76B4FB2036B56D5D6B86B6E60E34F74C49D3537E4C3 -9EC7F6E87B37095348AF878AD67432FC89CF3046E3F077884FF80E0F8CCE7AAB -9C73E6273ACAA903577CD8D10379F03166854BDBE7B945BC661F986944675A3A -006C161E091BF2DC37615727495BEB86182A080643DDE6E01B31C301A2C611C5 -DC2B9B2A7A7DF3F9C6E69BA666592527503802CBA246334F47D903CCA2EAAF03 -B52B9B22E0D2B44410560BE37A447D4BB2FE7B9B3C1E6F1DEAE63958C817D1C2 -4988BD84783C3C5A15682C0101B5494B4E81F03D505166FF00F18415D7D36AE6 -B5F35CB8F11408FF73AF99E41F2DED4B26EA8F6CEC948829D75D6E27B2C50F36 -7BA5731C05374E58E5B4D6B98F052CE112D49DFF44EC8144A7D41ABF222221D1 -F89139BCF865FBDDBAFE3D0933BCD2284DA561FBAB2E96BFC5C7827F8EF8F2BD -9F4C31FC813549053395C09CA3C81C1C74383A9F6EE0D3A340D2B33BA73D390F -F3B183AB8183533ADBFEC0A56A9ABB12B243ECA2637D6BB64ABFE7BCBE74E8C6 -61E802014B5524BF5D496009F31415E7FB738BABCAF53420F750BBC670384858 -28E4E6F7C93526101B294E2E95BB5DD6D2A4B49E7F8C07CBB3F0C7FF4AD57EA4 -C64A84D9F8EE4A64F302E80EAFD15F8A4BDD6A322F2E2EC134E2A8F48B602DDC -878144F4FF621AEC3779E6D0FB8E7F588B0CE3AF3262959DB7386B92ABE15A0C -82EC21C0C1ADDA68D0D8378A97A00EA00C0B09903A409489FA1DEB089401873C -B8DA9C881D27527E79F88315F5C3D467714FDE5A10FBAEE9C69CC5CBC0E5B048 -FB7C7DDC5EF7F5F5A2D0D1E0D7787ADAE2EBA08B7E5F46C481824CCFF7950701 -D74401518360B23EF76B1E411EDF3988CD6DE8DC9C712D7933EEE1A7FF37DFC2 -CAA02FABFD9B81F9ED63581CE5B005D4270A7331D2E4748C06DCFDBA99BFDB6E -48B014C16D4AC32C14B0FB210CA66F26F3135647C46FA5F066730BEE0D2B5EE2 -764DB0E518D248AE383100F214DA3640033D415041CACC0364FC3C093629D9F2 -FF7BF9F2C4454014C96DB9377785A197DD9420B890C16274AF11E1ED252D3775 -95BA082F8FDF6A6C331D38844775ECC5D576740D4F8172E0E29767E18096EB72 -322CA5971F46C298B4F3031F69545532ACC0CC83ED94DAA42CBB98E13C3B68B2 -BB85F1478A55FCB7F41107A6C5B249DC79C3062F2E6B09E6AB6B1EB513A9A1BF -7DE75320B840BD2611042C1678D1B41AFBD1DC143008E76A5C2A4AADAF819268 -5A877DFCCF1A218105D4C8FD0C1E600F79BE3CC4A0C2DA57C563635649CC93B6 -17B1153867A67337E57C637DF08DFFB26F5CA959E55703F9CFF201D1CF0CC29A -957BCC39268537BBD5E7523BC8C625902EBA63EB8800C4212C1DD357CFCBF584 -2FE98D7019CD2F0D6BB8CB120FCF79593BD4FA6C2AF12D512A4BCF21708CC5D9 -0B9ED2C43AC88AFCAAF53994F9A8796B984A0D73EAE3EA8A81C613247079D256 -4F1F4FDFD786F3B1D6F5A54CD9CDA6B7BBFB24B39598A3FACE45AEB8AD107BC7 -75ADF4C6F893929D9DEE9D4AE68F7712823782A79B2FFF1EB3D011A44136DF33 -AE929EEA48EB725B27BEE4E9C1D46F2F8557C430AE5E13C768637800B2772A24 -6D49DDC1D302F60CA6328C075353046C3257B1807457876DFAED4B7CC1C85E35 -4D5B793B93A4E53E2E66C594CE27F4982DF0B43C492B7493F391D98C8EC00C8B -B9C0F012EFC296ABEA0410F41A9A1D0407B03F6AA06BC4EA2EDDDBDD3BFB4454 -BC02B601020FDD819CF748D0711B6A61CC4C93CDB5F029D96D1493A2F53CDA81 -801801ECBE2A6E6D7BA3462C759218C7B832590377EBDD08247F7CA333F5DE6C -5EC2A183B0E7A44B4431BF8355CD5C33284404FB9482888F53AC1C20714E0CE8 -205C649C9A0654373BFD9F006A841D3FA53132F95D89C28B00A1D8496D78083B -F37B891747CCAB06665454865ECD7991D889646397BBEC7D062B1A8B712D8533 -EBA50F4A658FB0B7E37763CF5B8BDB8337E8F2A2077EB7679D54B3AC429408B1 -B9A572C4570801E583ABB0020DBB01FA6C4239109ABD9A2C6B3CD62AFFD09D46 -9BE356E3009AFCABFC689A44A67435672DB4552080D853C485E562EFCDC3F4E6 -1C00C047EB25EAD71B3F3CBCF02A284C7AA773217AB769E77C9ACDF4CAE21F96 -4D9A9C7977BFF7669D88B80A8FC6E9609D8216A8DA72EB86227F8CAD1E644402 -D38C835E3256F1946C4E9C013B4718EB66A39B94F00B9BDBBC64A77EF2649B7A -E4F41EE08C8F96C6F201482EDFE2D372F6B8F48651CF7A036AB479A825A363AF -381AD5FEE6EB32CFBD201666BAF4E02345735F515C5C06C6C616CDA4A02908A0 -F48A86059A9E774FD68F9D9BAABC882EE786D4F828C446113155ACB197F9CAFF -BDCA9B02BC15AB1897EAB101C2ADBBE9BFFBE710604B6C1C08698D3787812B85 -05385CA9863F90750691CC159A7D1C3EA81E3D9E3D02A9BA12720F85EE2EF6E7 -389C3C246EA73EF0500104C073E24CE4CA8992344E612920C2493FBC23AB9902 -8AA5DA082ED9A041F4BA9BFE97851A40B5FB064E032757D851E36BC0403397DE -CD4B73702E9A1E124DD18EDD732DF0C19FB1F3510FCC0447D348822261B4AFFD -1AACFCA8E07B0864F028FDA2E5C52411AC27B2D6A92A8A0E373C1F3B036B1A3D -941261E5A41090717CC2FCBDDC6B5695EAC7D35012474D769F190AF4B12ED23D -B6D3229A0BA360FDAF38B3705D07DAF83EDDE58FD1C9773DA7E03F4DC4944C01 -6E4CA262C7327EBB83FCC15FBFA55EF91BC117820E6C8F7AF65F8BE68F4109A3 -022ACE76DAF7DAE0792315B6879127A3C4BE7A66D044133C1B2905AAE48C5D3F -70311DAC2CE8A8B47885B4CFEDFD85183A9B67FFBCBBFC5579628442DF933CE2 -84094941400AE443AD95F9A9E6C1111C8D28C56919C09FE3841B32154475A5B0 -EB0AE1D8D718F80DCF85E02684C683A016E09C047F47FE58FBA88D5E45860316 -22498CDF09B8B1D59E7E99871A84A0DEA5B4320D19EE5D8CC2C6E8520E8B010F -FEB9F4127DF254F57E514EAD257556F2ED7106DA3CC3E5161DAE64897B8D7D99 -BD2A85FBF4F9D4752C0F0A0174D97D9B6C5507052A402B67C764801B2278E3A3 -F3BE2D7C55A7D03890D061C294498805E39F90DFE1148D8ED3804C1E8DF701FB -206FF316C8A74F2DD8FE1195557FE31809B1B91D20448D142D24E481F8CFFB29 -26AB3C2209E5895CE70A43ED9E9502D13B8BE2EBE990B094B88B3C85324B74A3 -C606C3E948BBF5B6E59F61EC9CDEDCC9BA71BB4000FB452B40A054693447A0C1 -6FA9F8CB42A539827AE5FFF820724FCC464C515EDDDE15739ADA2061F0A403DB -E89814AD4A53A77E01478833C5055BB57928A289227BB69BFCF29E76BC523172 -BD0F57537D6E6E2275B880DEB01DAD1382413A055E8CAB30B2298C5497A68168 -EF159D3ED91A0E24A0884CB2660C2F39E3622501DA1323E28A6D0BFE6846EB4B -C1924445E66399A0AFC5D3E1DDA602C6B037FA48CCBF879D977EC14D6779A1F6 -438291BB2BD24BBF9EF9494B121E184A2D86C9BDF55E4333E3C38D9991B0E854 -D4407D85D7C34192A4055F5F61467BD3BFB6DBC81EB363CE460FBA71FC3E7935 -BAD2267A38A3538367FB417B35A2E3BF4D825F94E8BFABF5C5B55E00C5B3974C -F98F5DE1CEFF2688A3D3DF1FFC0178C49E2509CA1C3B4CCD2AF2B883490C3863 -44A6ADFDC1CDC71403D0C6562DA93316B9B589202D0A36C01077F16C0B966CDA -41DAB8D60B5B834DB41C967560DC0D2E1C367EAB233954F4D0BBA992587B689B -4C099C0FDE750CA0B21775B38E19E45B1F4F9561EDD3766285FB098AD2995CC7 -3F2E770847EA3596181A5A92D0BAC60E7136CBE1596ECBF4D91B7ABFEB860A0F -D4CA55989DA458A2B898E28DE17D37360288D755870038F0CA77CE295CE988AC -4426FCAFBB72B3F6A5A6FF1F01A4B0A336948C5F1A4DB5AC9717D74E74A39EE1 -7C04B503305587B31D90BF6E902380872A096DB795051AD193A3BC1EBB207769 -A4EF543A32236B1AB51269D7F4E47CCCFA5B1CB63850611E91FE1C9C275DBC80 -667A9608B695CA30E7BA4065F82558A7A2F5C2B323190976444D9881D18AAA5B -47AA3EEEE6E7A1528208A17DAC5014FE238BFCA9805F9A87691BD437D0B2B3EC -98392771DFB44475DF0E342CD19FAA18E134625680EBA27F5E1A3DC0BBA86ACE -915AAC1F539C85905DEB10FCE0CD09A8DA493E1D3FA18D9D1CC08481D2BFF5EE -00978B4DCAD1929D1E55A86C295324F18B813FC46CFA9E4C5CA43118C0712B95 -CAA0A8A6A691F86B6E6F615A0F46ACF1963B83B3697CE039301F75609257151E -FD542002BB6273ADCBD0609195D2F8B94AEFC8AD18362F2FF211F8F88BAAA287 -B13B8D666E11669B81D35C4805366FFB44D35CBF01BFFBD5CAABAD087F05DBCC -F026D21F2940E0C6FF86D7556B1296D4B2CCB029CA2E700EEEE29C2DEC0C0B21 -2F24E37E8E196CBDC98BFF6B712D0D7C8837730164FB14A43A0E7EAEB85166A4 -F011F4584C716D2A910D9E90AC08BBDFAC3CCFE90DEB11FE95D6C45DE09D78AD -7FB5E2E72CCFB8EABF2D0512923774EB64F253ACFF399068F11F40F1E4A71F5A -BE214825B574E2478EA26DDE2F25F6BD3F8E4C3628256EAE0436883C69FAD03A -83B0ECC8C8D4376B9F6B2D6046D31010C24EF885DC6C8FE46605E9F99ED42E75 -CEBE2000A916CB10416FE79BC4561AFA16E57D50CE871F31446CE7E5B8031741 -1626865378B36245891286E440C370CA3F13008CEA708A0A85396337AA6D050B -7CCE3134A5BB07013AC7C33C9D3B5DBC6F8093D7C418C9F2B946A144691A61FE -5B722D515E9B69757BD6D3653B05154B9BFCF5CE50A54CB8EA89BFCCCF02B3C8 -DE02613ADE700B18A4E300E6000B7175E2C4CF7D81808205774CAAEFD32A6579 -5787E5371622FAF815E54B2D3B187E152E68B66D6D9356AE020E3B09D41A906F -AAC562A826AD0AE85CB1BCD6A76F4DE8B9ADDC0A4CF0D2A951EE1AEC9232EC9C -6DB3E98DB92B73973592C13506539A7893879A95F36ED3117C3B418E2FDBAF8B -D8625CE28A84C3AB9B869222D106356876771B10E47213A3E5BB3FA42A2C4700 -C00BBE7360D5640F3812BA08D0AB62647E71237983BC91719F403EBFE45BB39E -1AAFC338B8275261F82079CC1226016CE6BB73A5B87A46273FFDF39F1C4BE2F3 -EFCC754698ED46ECC6F08A842EF98B2BC859ADEF0E7CBE95509A0F432EBF0028 -6D3484714E503176CDD759819FFD778A33FF34453D8EA04C94513C59368E42EE -22383D21098E47FC95513BABFDC4BBA480EDD89F7035B49A10FE55BDACAD2218 -770D39C9860AE192CD0067A215ED724193B47FC11041DE86839701813DB7B83C -E5EA145212FF8DDC4CC4D56284E74850B8A3D4F9C3AF51C982DECD11CB14D730 -5235BB71FCB125CA92099809C7E0C4324A4F8EE9AF1F328EDD4CD3245AE03BA7 -05054ADF76CB919C5EC42A8DDE1621783849D20ADDF2D9965DEA3231FEB791F9 -B92D2BA440118D97BC394BF37C4D85E6188C2A69784F78C74DB41F47690082A1 -B704652BE413AEE8447EBCC5E6B388C86818C7E4DDF0BA797F32220B8C887657 -C8A42FA22D70FDC798DBFB0B7F07589053B531F0D98ADCF4ECA1C8103CE53A38 -EF0077753BF5B1FF66897F853A649C5A093EFEC9712550047B9EE836C5DB1FCA -BC4BF3DAA0EF8B46B3D93C8B2C417E032C53E3173BD59063F5F9507DEAB1A7A5 -834BD40B741AC3889F8E47A33469B577E43D5846AEF1BDA7D043C0B0FF94F30F -C6691EFC50A108ABF8B33765B0F39C8E9E434C9BEA254E63C9F0214AB37446FA -14D265100BED05E566FFD151337C5CCB122A764FB4C39C7DC9F8855ABD2DB183 -BF607A5E8F3E2639DAE94E0380B38C5E3174AA4683506F77DD0FDAC092F2F4A1 -4F68BB350E7E008637DB13163BDAD0F672C4E699819EFCDD3CF01331B3EC65AF -0BE8DFF628140081AFB204F2B758B16825D46F7B3048D6D89358B682D64B0F61 -4F6047611107875528449B9A59F373A14E076D524A3E962878A25D5794E8606D -BFE6ACA8C97DE26CB88FF1970064FA13A0A0E2BB1F36344E84B66C5955960FD4 -6E8BC6644A2FC1BEAAC00D3781313647E4BB6BC696D8316E43BFFF4380F2F5E2 -6ACFB0ABB146504C13332A5A9443CF82C547C1F7EBEAD6E4D145F334FBFCCDC5 -DAEDB011A5C53F704094F466DC6EFB4D865FDD7C5FDA58450A70E01872982154 -EE57B62112F6FD4D45563CB7F68DCD -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMTI12 -%!PS-AdobeFont-1.1: CMTI12 1.0 -%%CreationDate: 1991 Aug 18 21:06:53 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMTI12) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.04 def -/isFixedPitch false def -end readonly def -/FontName /CMTI12 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 12 /fi put -dup 13 /fl put -dup 39 /quoteright put -dup 40 /parenleft put -dup 41 /parenright put -dup 45 /hyphen put -dup 46 /period put -dup 48 /zero put -dup 50 /two put -dup 53 /five put -dup 55 /seven put -dup 67 /C put -dup 69 /E put -dup 70 /F put -dup 73 /I put -dup 74 /J put -dup 76 /L put -dup 77 /M put -dup 80 /P put -dup 83 /S put -dup 84 /T put -dup 87 /W put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -readonly def -/FontBBox{-36 -251 1103 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE -3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B -532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 -B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B -986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE -D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5 -525003F3DBE5BF07B2E83E66B7F97DDD7CE0EEB75A78BD9227BF359D002B6ADB -8AC57A33FED4EF021A7085B1E2B933DE602F0FF71467ECD501744AE338AF29A0 -26F7D368AC6F25CCB882DB7B7343566192BD687E1349225982823027D3B66703 -3B0DB7A7E680A682B98023D39C7FAE81A5D5B867A0A66C8AA0DBC83B1596A84F -0436AC6A7900B767BDCCE0060A4811003C79FDCC71D73F7F2D0A6675E93AD21A -56B4CD8EF75EED3DE8C0A18BEBF7B9D1BE72504872D56EDB272F1E97FC726CB6 -68C85C713059DA19F6C2E0F3E12710A59B6FC4699AE883DE8C8615B7292AC25C -D5714B6CFB14EF0EF11EB13009BEBA4F345A5D3D6D9926ABC2BAD7DB1328651E -437BFB3C46DA7B62219660FC368CF3D3704DAD3AB461C28F711665BF484BF61C -052093D231CA65618EA463D63E406ECE858D180A6C0589B2FEDC321371C28E77 -DE974D655DF5FF7D41ED01FE717D928A885F6FA6CFE4D2C0807F8E7F937916E0 -96EDD1A3BA67802B1F4A49100E75613BA0356D9DCBBAD4DAB3C59E70A47058F5 -2163D1730F0EE4D1F87C3A4AE723A23CFD7986FC4FBD399347E9F5946354E013 -D860FC446AFF0B0744F5DA27CC777C96ADB388D1E835DDCBE123FB517679B9B7 -EF696E091A9D51510BE264701A41C04FA8125A48F306ACA7A83E35D5BA0C296A -BC594ECA2CB27E92FED95B595C21E5BF0DA724D40761CB377BDE5FB98C9D152D -6C0DC98C4083E9656321BFC445CD6FCC142DEF16E27DD6FAD0B3185223B1A7D6 -779F39C70793184F2C3B721FD0AE6D8E063BD47804785DAEA74AF8C75483B713 -65061655587D88BA9C299248F7B16CCA3E241F089E7159C60DB9266BE1CFE159 -44E2BBD556806EC0543AAE9CAF864F43906B9C826EEC593E28796C66038062F8 -D7DF65BFA3BAF62BDE692FA5D2156F3CA72E4E54D6EDB3C81A994B124C8856A8 -C908C671D1EC87C8E6D8B623488B12C63B716C77CFC19AA9A8BBAB2DF45054BA -70CCD5E54C0E355F9FC7474BEC117E9251F910730A89EDBC073DD17300852885 -E53505761FF27118BDFBAA393F36DA403CF483D1449526041013AB743B39F684 -0F2EFC47C80F00AB0358E66E14ECD2CD6F9F8EA9A30F5DD55C6BCBB6B5CB4BD9 -B762B8795E264DAC993EB2DEF8ABABF499ED43748813408829BBC01ED6D5FC45 -29042CD1D50EC1A7CF75372C5C0A42ABE71F60D16ACC70DD2431A9B1DE1D234A -6B9B1E8C769DC9D6B7A727542DA2E9FFF8E18E9179D019C515D7E71B52DB4339 -A1E9EE5235C42C441C7A20CE920A76D138F30D42A0495997FC76DEAAF414FB42 -BE052157D3EB63A94E967ABEF62A6F36F97269E686DAC676BD067A51AF845D45 -B4104934DD51D6C5A170C903941A62166819559B74AFEB55AFD33B0EEF651018 -8E2ADBEAC4A16406D9A14C44887D3C5CCBC17AA87C7237606FB81AFCD5C7EF04 -5A3EB3ECC6F18524017B822627A57B6061B6EC3DB9D28D300D0E431241F76321 -74FAEC1597873D6110E84A3EF4DCFD71C005446EEC6D47836C77D8F700946716 -0785B92A5DAA11201F9BE882F5A1D07C07EAEBCC465FE86E14B63D23D88250EF -29CBF2FEA34540F9A8D9964D52E2FCDAE2EAB2601EE31A3F4A31CFDA099174E4 -431A4964B1872D3A7DE6CAC21E1F1DF4E76BB5B78814C145600137C5D5FB2ACE -D6255221AEF70B4A64998E0674CB292ECF02322ACCCFDBAA7FAF94EFB7807C8D -CB4F2DCC1F4EC424605776511ACD2CACE7CED5C23A36A00FA4F666CFFAB4CDC2 -69134C77EDEB15B90B3BC0AD1168CE5CEF47E233BD1AAC832577AB2F55AF8775 -E8E5B408AE8EA717A1D521C04577D096C74A1E9DA8A62456CA0AB34816DD0ABA -FE66415A1FA72316A690F18585616DB6E8ADD53CD7F48D6E6D33E28ECE55730E -D9B1CC08E3B37CDA30061C470F3CB52A77412551249154C755A7C4319C3BCEDA -58901ACD2E30CF2E4D49E4117BDAA549ACBF7A9E73186E51851F645EC6A4BB17 -6157584E6C4E71C80BBE033C635EC1EA55406293C09170C269C3B57DB36B5444 -54677F016FBDDE471C3EF1533F6689C7B0219540EE1C93D2187BF3659F0ED23D -AA5FA5EA6E92AB95E7A0A01CC89216E16ABDDB40F1DF92CD464E5B71CDB2AE8C -EBC1229B4894A1EA677AFAFB667D13575A63B4FAE9E72A411C30F8044B4713EA -E7AAC8FB09ACA8CCBB940210677D8E4914EF003D5419B6B77EFDA270078C8FAE -E39EFA1306A09696436D69CDF607A7A823C399FC526CC1AA1D10F538006AD073 -C9657373570C8F581636B61040B3BD197229E1CE44E5C98064526B297384067D -AF99FB5091DA90282ECFDC81E46E0E5ACB278742A8B104E72C50318E4357F9BA -7EEC1CCC2957FAF2B2DDF6A2AC74E52059D0BE6270FD2E085AD6E28BB88A0123 -3774A33EC6D267302476A925817D6A4050DF31BA0E007E9EBDD726E8AF850843 -CEC13688A556EE8D512C2AB509CA8F39F15FEF3BED4811DC8A522C1BCCBB634E -07ABD75DD28AF37AF9DA790547FF46EC3117A47624CB555D2AFF5633FA739B95 -459A4E24B90AF3BA01A361B03C0309D266106BF4B983F62BF3C0070EB1FE4743 -E63EE5E18AEDE1C239EF550EF13F1C5D50544D0A75425DF9B98D56963A77B660 -E528F395E5291039B2049454A5E2403F33303924948C6AA18390C849FD8D477B -EB5ACDA1E736625864AFEA604E5652812A2C24BEE4FB9E4A690107567B3175FE -5E834C08C3D3A93D95AAC211FDD7138D8C92C64786936A1D3060FC85EC5E3455 -2484219FBAEBD85B468E73A229261A31E4727C0D19CD6B8A7E5F01533E3D7552 -AB3841CC58210547E06FF04EC5777102BE75AFB053D8C8E4DBD1A3ED829AB0C2 -94E50A72686A03E46BA837C3B1BC6421C6274583A482B5B043E6A0E7E7929E03 -A13A36D128263A159B201AFEB945CFF95A7616C8E41D8E7EEF08314D9D1851E3 -CD1DA91B682B2E9C56189C95C50B885F4401CA041CB8F1C906EECD0B3BE6D790 -68D02EDFB9CD6C6BAB4FD5E6A3535EA9D5CF502BFDD8F3D697D6F17D7D1BD0CE -5DF117EE295EE37F20D0B4B0076D314C815DF20E5402706D38482FA1C7AA265A -9C9CF6BEDC5770BC134EEA23636542D45574E838945D915F32E84EC3C0EC9D9F -DD9A4C493F4D85DF2EF24B96E8853D17286D394381768698E6DD8C3FC2C31807 -5798816D9F8F146AEA8DADFC984E06C4CAA7EDED0837F8E79A21BF3BF067D6F8 -D2646D439465AEAB59B165256C8A76D2E8447A8AD4A774506BE97A9D4355517D -9B1D2F43B8B5360FFC726BF6B94374CEA963AA922111EEA9A7DFEC4C13E52905 -22EB22956182806D58D2B958AF99396DF5DB9BA7BD3146D356945D34E0F756CD -43BB282F28EC9FB2642858044D2F519B8D93A3D9F3EBB6DFDCE84292C071F340 -F34F83763D460719AC92A4748930AD09D121F6624E0043A6A30671AD7DB19777 -0BAB9E3EF0B01C5554248FFD19967E4C277A5EB4451E2FA9C2265D27D3866AD8 -EB90C51E0B132CF3D1035DDE1A53F150EC3B3852651AAE842123CCAD57224737 -393C87E82F4C566140BB857568F847A61BA485CDB83FCF217A6F355A26BD8315 -6768DE5B707E854D7841FE3205D5CB0A04642EED5E0300290DCD5C84E52CF014 -30AEA465232F62FA741F5A522D1F90EF791ADC807B7AA560A52A32036921E0F6 -8E7AD9E94FF5007324CFB33D7C025BA132C010C3175ED6FF0D8B256A31274FCE -6DB78C90CEA282CA40DAA0625128A7C73D7660DE09119564720E2973B5CC39B0 -C852C7AD9388DB7C921249C923C381FD584B0697F5790917134C4822AB5F51E9 -1F5506C27AC4A2999745F575177E5BE1AC6286A14A30AEFDE1FBCA3C3E05D1EE -1EE7036B799A8FCF3D21654A678BA418421B196648714EFDFFCE3F112E09EF78 -28748F356E93E6C6A57E6AAE1E63D4A1C0DDB942C72430BEA8AADEB066B03E77 -9B1BD2712BDD25D282E8AF99AF91595AD5A024E96FDE11112022F46515598A71 -02DA53F28512CC210B6E73EFA680E451A8152CDE1520695878988F48B273AA08 -ABA413D7EECB321CB8513DB55CF42DB5C8BC7FADF5DDA7C82DCEF3DE02AF5B0A -ED3775EC7DE8021B3851D58B0433C3CB63E0CBCCFA8C85E759E73802EFBAAE33 -6F7BA59C0C41591BA9BA2C0F987AF383B244EFC2B49CC3F5605582BCF021C2CE -B53132411B4B9CA1C38DEA03FC46E33BF60859FAC7F9F9B2F631A1B451689C84 -00B45252D145693B3E86C129E970DD08FBE7964D3C621AB234D9BAC5486F5391 -6625DAA690435C40482A71B3FA8B30CDA661BAA7AD5F3E50C10485A81899619A -26056E00DE3E0342AB0F27FE25FB8BAAB1A36E9613C957CE110E1F17F5DED055 -E8FEB50AA2FD071F329F374AB3037BEB468FAB916CFED6B2E2665AC6D8C61F7F -4503556BF93F36B125CBBB63D6FD7E14DF073C443000A88C4734A5EA53AACADD -17602BF8838C3A45585A0EFC103BD2D37F0DC9D0CF3E5327BF12DBE464B32FED -D4F5D9C764A0A176B64F39C16518FAEBB5CA6D95E868B2A43E403D200718B24C -87577D35A3A6FE6CD1C6EB66165F5DDF73A71F1F182B62D646A789053555B558 -1F0A4678B885FA1A6ED75569F2B7B66D6D797AA37FDD0F3C0666ABF2C7EF6739 -A747F0FFDA964E01B330C2E0C6A30A718F856691AF89C0DFBA5C8E63F51F7368 -5766AEDB0F9B3AFE38405F156C94E797FB8ACA5BD23D9752650722BB631A79DF -C466BC21379CB890037E18DAB98C39122C99B1A3A53FAD3AB8CFBF2BF6ECA1D9 -D9602CD7453BAA6E945F37779CB5062A5349A524250B520256EAC735C4BEB931 -51BD16BD71ACD5C42429FFC533959C34FBE491A81FBC7248879363DF644ADB2D -F54BE0B62AA2348956741D470D26A0039BA0652C3D4182089986D8D3130E338A -27091FF0D5C881BB4A5E841251DBEBC58298E080C9135F04752B6EB4A06E0390 -42372E5F85F78D38E2D5313EDC169B485A483603CA85D66052FA879BB87CB53F -82CF4B18694CDD19B304EF588A97F56D50868869DE5440BB5C65A527802D1083 -61FB7C01A351F4F78148D18B156BFF817114762130A4888D9AFF5D0655577551 -3DBD6A295E95F5A7EC44FE623670E091DA8149EBF85698E017B27A214D08FEDE -24235E7A15E4827B4DB795FD99B9363FC0A658D94289DFC443A2014EABF52F46 -A88BA7A5136FE9F0E064493EAD71306BD1E78DA542188EDB1DBB3DEE9A243FFB -D88F36B6D3E896065E0663BB9CCBD47E2A9FA0EC33C6313F29049B2BEB1833E4 -9E4573CA133550A1F8B9768B8E5E12AB3D707C8DBC23CEEA633823D9BA5BAD39 -710ED01CA87DA520F263946DCC0561CC00EF6CB8B63EAE4CA56830AC6C15F9A4 -C6AEF94FAF87B157E28DB90C1F7E39425A186C0C6EEEC01851395DB9DF9E0621 -62E14FB5147D32F7FA0594B0258A299979CFC1CC2EDAF8A3A5DA500AFB2F3D8D -4D408DFDA7C420B8DFCF3EE52308228DFF52F3F27F026BEE25A31AF616E408EB -A67A4AD1A3607758C133BF2403C1F1DF3A30343C123DFC921F56AB8869717142 -89C1C69492A4FBD5A7D55421E558A276A1984FEDFD75C50103D3949FBD8F7EED -3A6C8BCE2C96BB07F74AFFCD30FFDA076CF990C41A6610E3569144C0FEF9C3C0 -B9BB5C7FF9EB7A042088996548C35A6E5E8A2DBFFDDC9693289246B9C324D137 -70DE844C970A2E7B9FBCF0439D65A09D615BB69381C59FD19EDC642CC6498A7A -2FDCA63EB3E91B7153D760BD96E5739C53D4E0DA28EF499D59489804F906011A -FBF10E7B3B4020CFFD9FDC1C8DF8140047E20E380E4091DDFB5346A4D3BC9326 -C1C1ECBC9FBB68F28ACBB91860CD28153DFFB23A8CCEDDE0CB5DC16ED9A120D4 -98EE7EB7101A994B9B9D15E55336BFC14A518F9B62FBF625A0CE4A1863F9239A -A417060286BC9DB81566D1A95918F3D3BA4B8915CCA1FAC5770F71EA812F5781 -5BF412B6F5BB91FF9EFEEE92CE129AD3D607C4AFA0D0FC4763542CD7CAEC28FE -672E51391180F4B02C5EC07D18F636CE0A8914331E6454CCEB4380F1195EA749 -B2FB53E128E925F3BF13AE3950BBC544066A03FCC3722AD0868107D63F70751C -114AD0AC03258AEAA12517A026B1564B7BDF7932B4A8C4D66A8FC751E5911A60 -AF75D441A700A18036FC4A6A6C5C32DF429348774A32FF2C4499275AB54E3110 -5DA3B7DC2F14275871958DAC2F56CF94B1D52402CDAAE175E952A0764F131178 -703C43A2489E8147A4EFDDBDFC0AB8F8120BB78ADBDBF1D04B1C9A25F0815D12 -5F9ED386FB062FA43C3CBA991E24E35819C1A3A51EA4EA26AB3609740CFFD756 -065F41A9D83AAAADA6B8C6D7CE002F5D4EECE87980E990B855EE9684D068DCEC -886FCB1D00FE4D0C93A5F6A69942552DCF73586F92FEBB4AE8D657D1A76500C5 -F0B51A8B0DC3AF3B08F8018389999647FAC521F029F307A64B4FA8177E17A0F9 -1A7920EE03CBBE3F20B8B24FED375AC4BE52E5B89D8712DB8C92BCBDFB439DCE -174B12E9C045493C998EB7AB6634D0318ED7589645124F655D8C65F2F1050852 -25F71CD02A98E120BE80ED5C903FD097F4A9CF971FE51DD32D8B1BA5741D6B36 -4E49E61BB64B05F5A985D33E497792286BD1AF14E636814EDBF7A99F6DD5F5A3 -0E7E3530E7DE65AD736716C89AB531CF3B703DFF8954EFB50824B1AF9A2726C6 -F09FEDCEA8E07D16768E284C01AEF64AF2DBDEF69CD5DB8B5143F544B37C5FDB -865DBBFACD849E691136122B38FCAF926E5CE09A76D75B4339CE61402427267F -5C9BC36CE11D3C89BFE43F01152FCA689F84935661FB08D9A1724E3EC3D43B9E -0F58F93676CD7B74BFDE83488876A99F3CD02E508AB7C41B77EFB24A35C860B8 -990F3C110F36B1350EA98E0D0AA9A07ED4FCF0EA9500075EBC6AD2756FBEEEDD -FA49889E8D47A7A47236FF01E7C41595C16131A7BF76F30D68690CA2B56862D5 -25A92C9AE6C9174F265E3770A70B29DDEAE6C2F73D1DD76150346E184111A052 -7ACE0C62DCCD161DDF89CD938395E0E4CFC29CD95141D637606467EC14A9BBE5 -9CF134323CA62EC69F7261376E25098C27910AC0129B281221C61D98752053AB -962688117C75FD725ED6F44A31C369AE2837C297737C00ED39477388DB3CCFC5 -E487EBAB37B0E61544CD1F35E33B832075835D938C0C1192835E9BAD8038A33A -30D1C81279E1B8EE5E537F2762EF81749F2B1E157DC37DF210DA10CAC4E442C2 -806A904F155F7BEE4E587D3516FBD7AA9AB2DFF0469FF06E0E02C6CCA1F4BD79 -E10284FCDEE6BCD2E67933A2BAB4C45E98C2F3D76A01751AF264ECAAB3BD5766 -3C8CB6D36E018CD8DAC62CC431349AEA10690541C5962113851FB467A1729002 -4F05F618C163F04FA399B65604DADC58E329E6D483917D11FD80A6864A3B028B -E1F55EA27B2CF1E52165E40E17CA7ECE958C17DCC7ED9AFAA5204627F423D4D3 -C4FB5B40683C5269127BB3FEEAE5B0B74BAB0CBC98AB30B2CA929EEE3052D86E -9547B1F178502F684269C3F88EAA11CF6D02AA09C67122F6618C7D7A2EEFC7EB -C9B219DC30D26A267447BEE62F4C9781A8EEA069B56A4600A2797E4B5085EFFE -09C1CDBAC2823C90CDF9DBFB400BCCA687723B0F7CAB078A22591E1CD59630A3 -0FB6AA788A6D765402730CF63589FD01642A3017DC0143672FB6E70F5F17CB8F -7CB56FF4FA56ED55FC2E7A7A66DB856433F1B608DA2AA8D5FC64B354B102A489 -1530D1128E4FE050EAC12A5E9BD3EEA3FCF2A388547FDDB4D8FB67FFD065F875 -14753E470985F6CEDE2386F69B9E8A12D89A07F835F3A3674378489CC8756B93 -D4F5E87542DA1D7334EB924DA06871FE171832DAA674AD81FDC70B71E0ECF738 -504398060CA2F8077ADA7E38AAB5A0DC01AA036DF525484FC0D59811A43B0680 -602B727C26832549A2C06BF83768F79FCEA4F74AF7D0CCD132EE96DE7095015A -3D030B2FC7120E6F54DB91CD9DE22F13E0BE32EE06E1CD055BD090D3E20FFA82 -299562381DD382416D66B63E76B1FB158F05BACC40077E9BA84373FE1530E3F0 -9E1DE3E2A80B1087C60B332D27F7E4A0925E73CC10B9B65CD21E4A9CA366274F -10348E30B10F19E0CA874877D16B0CC6A5CB6B35067F5D84322E5583E898FB38 -E48F6005F8F800A6AC66635B594E9140B4E8002040501A091B3C04777C188FE4 -B6A0EFBFB59952E4C18383862477C93EB57098B7C7395CEED8BBC2D3B4D8A246 -3D491903CCE45168B565575542CA3E4E75CFAABDFBC90B22F640F5CAB1BD6D23 -3459B44CFB415CCBDD02B22AF283022F4E34804CCCE26E17702FB5C596DFC4A5 -7D16611CC7EC60BB97AE6C0B6A8E6DD3268AF1E75C9348D58BECBD361E813AB0 -AEFB9443C75AB1548819524606A9A6F4033F69A6B128DBC00A7D9C7216CA9A75 -2CFBF94E703949501C30AF024D1706B9DD384E2309FB12DE13583C90F9D482A5 -E76E230BAE5ADF35C70AB3664B2184F773DB615B4C410BC6E7922EF429D66015 -DE7DDCF44140529CFB195C4E658B89136E0FCD449EB3B1528A1AF7DB86921FFD -463F64AA43911E8E3145E82A791029678BCD032E1BF7AACE5A706437E27A0D4C -DA07F6598EA206A543706B8E60CF1CEE586807081AB387C909A38BD89718DECA -1ACFD8B982BD0D36BA98C1A9E68A5A2DFD01AB090CD4956FA960F33343B4108D -87F8D2924E77D45EE45B734005018C0D0DAB2381EEA4E4D7C57D8DE4D5BAA119 -C521212159746D46EAA7BCCC536118F2DD59EFC3CA2DC5A47C84E7181B61F2CD -07BBE99D7F8B139F731F99A36CB0A44F8BABACCDFDEF5397DEA4C0C4BF56D03A -61DFC0F73B33C1C8C27D6AED2F7B638761E0D67A434B34D72B2226D4B5498BA3 -F223A6FFE330D5B0AFD76FC324D7AA668B2F9906CD66DEB8F5AD8F6D09A21DE8 -9486306621D8F79E4EE3BDE18C9C6D414B1F4392ED8A871B1150BACAD35380B1 -F11961240FCECBD76630A5012E01B276920CAB568A5DC63A2E0EE66820EE0E46 -7A9512C705B136D84FA39F845358CA1CE474B8CB8A0B29786EF580A82A6B0E6C -2FAE52A14234DB3D8D1E1DA6D003401A729FB02B7DC1BF656D3F87F125D3CC29 -DFCD9085122BE3CD6F7219974B65911CF5168CF0A7647B9EA84068E0B7584B1D -6D7C3C89E7363DA68CDFB0302508FCC309964D19ECAC36BCCCB72C415603FFDF -8A2BAB6A08548F1AF0C5CC413EF6899FE0436FE434E8337EA82B3C4B07387FFF -39048609AF7DB203FB2C2B7B0AC8575E799AF0E3C8E60F6EF40B6D8E2A181148 -38D8994B44482D37756C45290DC2C091C025E6CEE5A32330AE285FF95705F34D -27A8A864195887DD5CA0D4B35EBDFC544E1EE3B87225DE9B4912CDCFE2ACFA73 -FEB0908FFDDBB109EB577795BC1436D8348492E65EEF03569976BB8DC0BDDA43 -F3695DF26817C0D66CE30FA4A01AD687CBAA887B7B55D31E1CE55970ED7CE117 -6FD6883E01A66EF6880522F48318B976C01072877CB1437047E1FBB7DD1A1E18 -0747791B5F8E95233E9276A579BFEDCF606193A6862C89324D01AAF0B295A550 -F4B1CA6B7E4DCB8E345609EEAAE4C6E75610062F7D9567EDCD47E9DDA19DFE6F -BE2A16B7CA6BD74AEDDED04CC6B8738EFCBAFA93C299A8A490D2128651C79488 -C6228710193DAF9B414F00706368ACDA01CB761767D965F8AD3A02CCBB0EB01F -8ABF763CF9A7D61FC3920112C52E460B9CC4382237D2D51663B6EA1F678083B4 -43C2E8F3FE0B1A59E2A2452115B8B5C1B0F669FA936E4A2A0488EC215BD16912 -0BA97A75FB87EDA036CA7B0B3CCF7387F5ED8A20C51C3078451CD44750D595F1 -12D01D0F571B562CB6B49124DE3B3D8FCD53185994AB538C2D712C9700AFAB00 -2FEE87047134B59552424FE8AC8B82FBE6706A00BE48D9C2ECAE3A7232A49B3F -766493274A3A6AAA83D94B9F817B88BF18B15655F904380C3185D638064A7DF7 -8CF5A09C00F7CB4B7CAED19283623B65CA071BD1458DC0546882E6FFABD0321E -8AC90F25FD0920646BAF2AF639683D3D1BE82A743654955902C3124CE8B77BD6 -367D0F206A3B60628F546B4809E5E5D074B0D4C6D5FEA362AD338FA3B5841D3E -2C3C25DCA0D7CD799B72EA9D3E2FE8A3A0FA0D6D55AF01B85D5E0CEC99A0704D -2F0F4E990207A96811F526CBFDDABA2D4A9B8FE18689C4D4E404EB3DC9D69DC9 -B669A791B09C7AD066C954AD2B3A324A6AAE72E658FB0AD06476A1FE5C84DF34 -9201E81DB97635FC39BBAE46306D4A58B097D86B1BDC9B4AE3E659B606C6282F -06E28C30F9F480DA13F8D1923EF713A7F7171A56FD3D477FE3BD22011D7234A2 -603FE3E4455C2631A6E25411010C46014AE7DF9B4327F7A77ED487FF32DB5262 -C42A4913F09C2C63CFEEC2136266FC82D15ED9D89470D99227C45C928D4DBB0F -070EF7585B868977E1126F1569986728FDB407666A6FDC8F28EA7109C18D6127 -DEF6B6F95C28EA86DEFEF5069E942A1D219340A509CCBE745CD43E24AB971EDF -C066B8F3678EBF07337367FB529B69022D6D9F3F37B0DB809F2D878B7B8C8C23 -E5C81F2EE42B209F4B4F84E958C21D4088AB716CF00A57B0456773330EAC859C -EAA6D9D04A674F67A91237AD0C00C8ECE0BBDEE4AF5D506E76BE1FFA6C93B39A -5B19478732943BBF3A32498C097BCFF0270A36F216EDA0BBC581F233F85264AA -A36AA07521651849775D40F536C561D7A172782F12BD620212707ABAF9F32940 -C1533C25CE00B6E34858BE79E70DC13BA6F7AAECD8053A66C65476CBB99FF6D7 -4417C27E2FB52F65FB7581BAC7B0248D57289C4600F9F333AF22EB5A278274A7 -F1048F7E53543AF1DF2F691A476CE7FD90BBB124BBA1C89FABDCE582636B57AB -FC1FAEE213D1AB2CB018246694D43B86D7C147BB14201FC5FB7CA47D2E901BA0 -8D38D37550263E05C9BA5775455777B4DB5BE2FE2C36E441C0EDA3AD242298B9 -8A5E27B046F7E27E67F4E0096A846C9BF154A75563572B7E43542B276469CB47 -61EE6CF2E74B93A8A8AAAB530AB63AE44FC276C6CD81B3207DC66BCDB5D3AA68 -D53DA691CF836034B5D13D8A5647AA31306127E7E713813380EE4942E6C43E70 -95725F746F9E8C13E8D63245604C2BAAC128084070515FBA7EC9A9F69D55E2DB -24C75A6BDC100CF886C9280F0F295C9FF4D45BDE7CE822E8431EFEE642B21384 -DFFCA885EA90CE4319E503425A8588CB604E24639A110ED0B7C8BCEB87548C24 -0AA3F2B5BF6B377B8C23A35CA0F5891C6CD5BBD33C645AE4054F5EB12418C27F -0A64A03AAB2BCAA4553BEF9FC18EA656C6BB767E8295D3FA3A801330643181B6 -93DD26A3CE6D86B6809276A9271C141A317C896B4ABA9AFDE860701B4273E169 -92F8E7512376F0B086072693981868A8A8F380478E6755B9A3F63052888D0180 -46B5538BECBBBD9495BC1A1E0A03588615496FAD0112C52D57AA342E930A496F -DA7D63E647DF81B363AFA4970B90F6C95286EE9E65C703F342D2141C4EFF397B -F423EA2229B2E9F849DD191F96CDCD46D2A3C12B0D885F028B541FF9CA4DE04B -6E3A550982014660782BA5631B110271D97649E105E9828C65393C66B58965DB -6131024530F0AFBD5E03EB7DE65AD7ACE8610F7864E9DDD2371B671B72502620 -4B3399DF6183C631D8EA5B9A77B0B28FAEA9FF94F8672311B3F250349F37BC5E -A65A478F5C729CE2897829C6337B39CEBDF5F776020B81FE695B5B25C00BC9D8 -EC70E030D4FA9C2D715FBE36885FC21C60125FD46A75B04ABEC1EF7D9F599829 -D7CF3D43826D5B72A16F257E70B408A50B6662006A6229F8BCD28E87C2234EBB -806233C00833F61024E8587B548B77B289CF51B9CB39235EE0E2075F9F20B4D0 -0BD9C147F11D7BBDC819A608AA9871C51CFDDDB40615258517B91DA369E538BB -AFC2BAE616C921E5360CB7C45B045A6962D901B0450431D4CA6DC76E22731B7C -45C63D2E75980E476A16C534049B0C3A79F4F99E7531F3D928E098F2F77A4ACC -C50D82ECE34947C2AE996FF11DD40640BFF528B136C24A7E26F66128CDCD90CD -5F2013440A31EF9E3AE0D47F4D2CB0C78C7962E762EB841B01F6CE9D36D996D8 -60DBE3BF098DC6571367D52D58004E28C9857171F75B764B892EA7E9171C495F -32C6E4040D419A2A382DD8D887A6D6ED00E1820CC4515349845C95672070ABFB -D999DD5841009F66AC7DEEAD9CC17FC73AABD57F72F1F3B103839BEAF68DE795 -2643AD69B826E922F3D5DD4EFEF7CF6C7B5B5B7D7019C0703768BFC706C6D331 -8917C49FD49DC654B5E60D690D3336D217D326BB2467084818826046B38BD05A -16C35DB6DA2EB260B229C71DC38ADA90540960B9473087D7D4394FEFE3EFFD41 -F260228ADC8ED7B722F48D819F8B0FD3F53F00BDF0DDBA4E5BC1B65B569B34F0 -25C83FAD17FD91137E1B4B1A0988B5EBBB9F37266BB495721A166CAE0D44B0EA -515631E1F461D0E4BE8763B0BEF5546AC2395359AC628D5972170B82FAD7100D -C3A0322CBED3C62C129532432576998645D871A13D7C30C53F9A0843E232EEB6 -978222B357279C55D3EDF822DAC83493E4C5A6397260C8C60161D346E4BD1CE3 -5EF7B6B006D1CA60BB67FC7E89EFE5B2E24087DC85943A6D2D1FE51006CD0935 -90D139CB087C27F2304E12711A2C0B7681B438C46D1018AD78CC14C7676CEA77 -9F1B61CCFF80321D7C7480979A2B6778B03971A7AF3F5B8205483C0FBF693D67 -43EB52A2EE633CB52A32D5E872E2B6DE1C36BF19192C1261E0D988A490183566 -EAAECEA8748111E2B4B18EC80E71E43E7DF889BC1F12A3EEAEC6DC7241382A11 -69EAECCAD2DF0AB50E34E664BE5AEBED4062C04F9A1E94CD13EEB66D09B31AF0 -6C3E112C37EB10C7F556145D013FF2A000D1907E67DE2C049D6478383549D13F -0B6F2DFC903389CF6DC8344328C5E7A053056C10AAE8945F4811468722D16426 -87E8DD75A3E1CDDB1478B159744D79DD0EC29FBD99DAC44F026B12AE6699B347 -025B25409F9778329FCD2703FE398ACD71DCC9D81F1FC5723F2231F677AC614D -39CB90BFD2CCEF71A1C4021C8EE3C3D8624E130C6D63983984C66608EE551D4F -B2C79F42E317BFF61329342381096A46D8F3A7F03E05A0C47746DEEEBAE2936A -C44638F4E2C7F998C88FE733D48281C88889071C13C3DEA2982D545D065F85AF -3C1B81FEDDE79D295967605875A36D93B2E2925DA7BAD27591063D4900D5F6D6 -C0C526E22FB085C5DA664359E9957A5CF40434920555180B294D3FECC4DD1451 -F493492FD37189F065E78ABD5601694E2F379560362FB92B71BC6B587DAF42D7 -9A0904BA3C4103589514BB1EB4DF8B0D391340904D625EF0702F1E0C2D89045B -3AC8CCF3252B24BE1AED4DD6A3F9D8D12864ADDE4E19C01CB1440777B237D577 -12256E79168F7B8898C65DE8DA1A30391612616EE9FCB478869990BE62D6AEE4 -4882BC4B4898CC5A4EFB68478739BFD571A1A69C29E42BA511E3E93C -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMR12 -%!PS-AdobeFont-1.1: CMR12 1.0 -%%CreationDate: 1991 Aug 20 16:38:05 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMR12) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /CMR12 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 11 /ff put -dup 12 /fi put -dup 13 /fl put -dup 19 /acute put -dup 34 /quotedblright put -dup 35 /numbersign put -dup 38 /ampersand put -dup 39 /quoteright put -dup 40 /parenleft put -dup 41 /parenright put -dup 43 /plus put -dup 44 /comma put -dup 45 /hyphen put -dup 46 /period put -dup 47 /slash put -dup 48 /zero put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 58 /colon put -dup 59 /semicolon put -dup 61 /equal put -dup 63 /question put -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 91 /bracketleft put -dup 92 /quotedblleft put -dup 93 /bracketright put -dup 94 /circumflex put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 123 /endash put -readonly def -/FontBBox{-34 -251 988 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C -68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361 -3645B82392D5CAE11A7CB49D7E2E82DCD485CBA04C77322EB2E6A79D73DC194E -59C120A2DABB9BF72E2CF256DD6EB54EECBA588101ABD933B57CE8A3A0D16B28 -51D7494F73096DF53BDC66BBF896B587DF9643317D5F610CD9088F9849126F23 -DDE030F7B277DD99055C8B119CAE9C99158AC4E150CDFC2C66ED92EBB4CC092A -AA078CE16247A1335AD332DAA950D20395A7384C33FF72EAA31A5B89766E635F -45C4C068AD7EE867398F0381B07CB94D29FF097D59FF9961D195A948E3D87C31 -821E9295A56D21875B41988F7A16A1587050C3C71B4E4355BB37F255D6B237CE -96F25467F70FA19E0F85785FF49068949CCC79F2F8AE57D5F79BB9C5CF5EED5D -9857B9967D9B96CDCF73D5D65FF75AFABB66734018BAE264597220C89FD17379 -26764A9302D078B4EB0E29178C878FD61007EEA2DDB119AE88C57ECFEF4B71E4 -140A34951DDC3568A84CC92371A789021A103A1A347050FDA6ECF7903F67D213 -1D0C7C474A9053866E9C88E65E6932BA87A73686EAB0019389F84D159809C498 -1E7A30ED942EB211B00DBFF5BCC720F4E276C3339B31B6EABBB078430E6A09BB -377D3061A20B1EB98796B8607EECBC699445EAA866C38E03ED7D4F3EDBCA1926 -2AF6A41F67AFCFBF3630C943FA111E4CCD988A7363F7C2B75EAF5830B049460E -0D2B337988F150B9182E989E7750C51BA83DF37685483F86D1F47478883F3F6A -4B7F768DA5AA89E8F163029ADD4A9209DE8A4F285766C06EA859639B92CCCDCA -F59B1C2BB8D588CA754D1257BFF76B53984DF4937093AAEF79009D32A29A4C16 -FB610C7D6713482C48D7F9E8410C0F00AD6E67021056B6035534E79F05D14EF2 -4E8D86AF699DD229BC827534170E7FB6561D9D0EADE82C457943DFA7F5C207DC -EA88543D1A178257CE704E09ED64E2FBD56993A1E75A2F734FE5E83DA5029A57 -24BC0F2D99326F4370366FC3DECDC54DBBDF0CE34BF357F6AF0D843502E23F99 -5EB27620C558DFF50293EDD8E9AE3B00DF0A9060BDC33F9F7EFDEA0EFAAEA953 -6C1A142F9E9D3F9211E5BC610AD2E4F2EFEB108188D26F5CFF0AF9BD02DDF197 -336C3C6024F07DD075542982620B3CD81196564D29D2B1865851A6C1AD5A9740 -AC778A7F7D830F1163E67656818AD1FFC087858E39C4D34D625793EB241EA377 -A3AA6AFA6CE639FA01FE6C18A94A79EBC467EAC8CC6A6F39A1F0686E721C6D34 -B9C49A29747DC489D25F46773246E894BFFCE4E2CA0C0666E4CDD3E292688EC8 -29B145367B6E2B8844811F1BCB30700D5622E7909A7D0237A13879AA4CE5090F -39B53FAC4AE619B0071D834D980A08DD1948797BC068FC2C0D5073186A68AFE0 -35F1153B3F02B1D28CB69DBB6C97DA6766EBC874474681FD7658635ACEA2F0FE -E56576B201F6F5AF8683B82EE3E36BB3285CA54FADCB59CEEDE36B31AE519B03 -FB4D37D37AF6D5DE743280136B931E88AFDAC327E8B629D280D5B2DB2549CFAB -A688EF8CDBE948329DECD6C8849A8E46CE7F2380A175D215201DA791729E1223 -69988F4D63A3842CEFB082E348E47D839D651560F2ADF563506FA46320AAC987 -2096794C05D1AF6FE19D73F297DCB1C59843FD930077BEC9DC76512C083DE517 -56DACD39DF50F25AC04AE573FE14A9407F79F3B483701E2918E2A04DB96FB432 -BE467E734BBFEC185EA6598BABB4D2776472C5AD0B963318666F3C86AFADE0E1 -4AFEC9656BED9319CE832ADE6EA2266DF576DA5DCD94975099625BD38BBCDE16 -28C084C71B7E961D6D07C8ABDCF8276796BC8D22969439851BC9367AEF1A012F -4D7180C47813AE62C67CD1B39242200DAA58426EBF80FE25023EE303644EA105 -880C745BCCA76F552FD2411B5A1F5E8C3FC13C9F12C84D09388ED1001EBE07E6 -E52BF612CE48EA9598A4AEE8C4F0410465F17DF30EC2C9ADF9A9B1E7452012C1 -A8CB5F6824BCD3DCDAF000F691CA5FA88FC993EB1EBCD65D45F784580B47BA35 -253C9A109C49DCF03C5A2A984129431767385FB66A45684D0671275F429CDB5D -0FBD71CAF85C4416FF3A1B20CB18E2C0AB5A3480E0E598468CE3200002C88E49 -CD411244BC6A3948CECD12AA4E9FF98AB74DBD644738178094422453A1E31C07 -3B8C10BFE7018C0807FCFE3D429891ADAAF9BAF673A18D69CC338AC7D3F116C5 -567B10E789C86D38C2B591080395708C4F32156138EADDA04DFBB9E2294746C2 -066E019C6A599ED43070C707F35B832B3BB7A0934C79396477C4BD7C45131593 -1D74E3833997EA1D3A4667B2CE5BC57565A57A925B3D386C423C4C932CC7A8E6 -98C120793D695FC3F5C85F4B4DA530A2B82804CBF65002D0F43D023B80A815A3 -9D3C948FC147E7BE9C8B7AD527E3CF56CC26DB24D1E2967A1FEE31E859268853 -1C652FDF937043441E3920C142238C91DFB8CF2EAEA157342F28E7EFE6902802 -89D207604E3D0C38DBADB111967D2F1BE1FDBCD3DD6144F1A713C57A8021B0DD -28BFD50162CA29B2FBDA9EBE401B97F69BC1F20B9DA9D62BDB082B535C2C5253 -37AFDEFC59FF08A3CF421421EDE3BC436B340BA93DC9B56FD74943E376A63735 -3421414D52E7DAB1E0AE183DD4852D0F48C95C1B85D45D931466B595558D8D82 -3AB2EEFC2177E12A66535E11FB84C6C13B9FA1B4220459447F6A3191CA7E30B0 -F82387E53177B86FAE87107AB7B89BF35E9757E5BFCC17DE293CBE17F99F5098 -B693107C74D5AFEFA601284C7DDCE2B9639A482A937D9F32D74E10979C6F93FE -DA27985FC100A7E015149919F12084187AC3E2F9F8778CFABFFB41CDF4D1BC82 -949C070B83436C80E8086EDCCB6D278F0D6A7F1EC69108F65968DC9B057E672C -C75930FC7C61C2A0CF70A4F350362CE4CC6150AA91738D219A5A9E8926EC2251 -6E050D8B2BC702E0C7FEDA2110D734C4371B9533353D6FD906F057269C626161 -82A3CC4DEDA62CC70193B875DF03021F0B0ABC32211023960E669A4679642DED -73A8CE9566CC655F23F22D8F38C247B0895FB1825E2ED70FB7509C1B246C7148 -F6359CE17034ECC273562ECA8F4B01A4E21790389553DFFF7A38A7D6C2B00122 -76C69ECF92D087B5B39FF06A0D42A3792880EF1E0CCA42CA7E8892DACBE23673 -61D0CE38EA2A64187F00CD05104CA513832AAAD1A34EB37796D1EAA0F0564F21 -0438D143A2B7C8199ACD0E41BA68215437A028CA3DF43CBD43462EB64742533A -06B47496955C8FA0F1F252C56AC356C02E511A3EEE08F452980641177A58D963 -197AFDD2A3281B69919F6A3084AF740557A04E45AA9E09A81AE8C83D61F42083 -F35508CD49153BE6A9759642502A61CF554458C2A8A57E4868A728CF8EAD5EDA -3F701A8EF892D17C2782C91CB11CD41812DD478BC74D0B36FCDF020E119B1933 -221DF312F108E3DA2EA6ADA60697DB7DF1BB26637953DB45973DC1092328B4E2 -49953291635AE3DFBACAA97F92C8B8CD3F2571DE11C29398D5EE9A5DFB4E9F06 -D9781D7AF3E8831E9FC2074144AB3044835C5803EAB46BA2A421208E7B214FDF -2748D32765CBB5DD253425A8A7C3A63C219E61C608B09FA1E59E64EDCEA51B7E -001AE1FF13140F65089319393748E2EE08A378C1EF068FBDDAAD865D21819BC4 -CCB75BE071B7FB5B802E43E87101F3C4F7C873C590F64DF99534390039670B90 -3382491EA334147D92930112FF0D3A3F42C5F9CCB0E7D724DB54046F3B42E25D -15AEF848A9BA305E03DE5C4FE982CF9D53B6F82F5ED72DAE5A8079EF657EB1FD -1231A23D6938B1718F69740DECAEA016ABBC859618A84A3157A4C345DF0B6048 -B0B26EC7EB9B70133467C877A79F2C2BF672E39CDCEB83292B91A2490825B8E6 -00696F1B241DC29355ADDBB9DDEFA5EF56AFF79439AC776E83F5676E788E6527 -05C475851496C2A93C99B57733B4902BA6BE42CB74270F23087CBFC6C71E7BE0 -8B9830551AF65B382A48117BCB8E7F22AA5B3D630771478438FDA533663E9D0F -682238A24DDF959F1540DB8297F6AA6B6BE4E73BE542455A35CDE045D90641DC -5DFECBDC1FF63519B4191159FD233A3035E9D06DDA1E0234215D6AA351F7167A -BB02EBCF6AF20BDB3CBA10712A7028BA9DDD92C7A275CAD2C6B77B3FBC7A5616 -4995D125063709E3DFA80AA12D95F81663A818A47A4A7E576889DDCD7B026178 -D37F57E886BA3165725912A277B68F7C790DD2BBB0DEFD353785DC619FD45CE1 -CC0738ED5B42A7F2F5417CF99F7DAD3F5BF3D4EE37814172985A647FF369BDBA -8973704DEAC2F3B4B091848F607675742D94BD64519B1855E1EB0A72F1C1E770 -9D34949A75C9B4B6EF74524BD96CC014B317E6F7ECCCF0E55E879826CF202592 -E170F01F3D56A9118CA4CC31D7B786EFB90D657C6489A9DDC700AD04FC64AA9F -A3A1ECD111E16CCF8544DEDAA142B3ACCC395AFC906A2304D0B8A56D0545B776 -A6F425709178202A28A3470177BAA9F19D935EB849CE487054B672EDECC246A1 -DB9B63DB2D75DC9BFCC95DF0870B00400DFF7C12DAF167D966026A780B48128D -B7EF79349E58C577962A7033CAFE3C45C778D971584F9ADD0B264B0CE77AEA57 -C54717E8CC00EE7DC7CCCFB12A633E7938E99AF6266C504003DD8DBA9E46A7D5 -43166B3C6B61F53E6C6FD2EA00DEA7295BB608BD86398CC0D3E53BF796F51672 -93F952A2BDC129F6DB9DD816A662F3040DD2B6CB3B85D74E0A7F11475C8BC866 -F5DB92124BD3680D7A0706D210D336CE5E19A2C68CCDFCD8EB5413DEE39D976B -73E287E6C85403B6F5AE50B6FDCA6793C4BBA966EF1E6DB1581BF9CAA640BE65 -8F289153A3412D1930020E3990FDBCC7607EF974C0728DBAA66BD27E4EF630C9 -A9AEC86B09E0C109B84A7E76CF1E68C39C8646184CDE3C90B4106768356AC516 -8BECD7FE95AB59C098A3F6ED2C3405DBAF15D00E7A850E5BDB03F2D525CFDBF4 -5E75F5B7381AC0A188DCDBDBE191DEA8BEB0408D76DFE71E54AF6A23625CBFF1 -643F208A40226FD6F25E1636BDED36DE95D029C466CE8C38CB80BEC79E42E75F -D85E94ABEBBCDC47A9B18D68DAE50A8250A5ADE5CACF942E8D99B9894108D631 -0501D5102D40DA497F38BC24C455F4FBC17331A5EE507E1383A8FA43D4BE1B81 -CE7D826189C623AA90C79C756F012F4A860A32048E7E35A4436A10528D5735B8 -FA047101E027CCF0B67CB80C3058200114AFF0C306ED8332433EF110F881A079 -DE164A075D9751C6D7D1D6BD3B5E99380A4DD86E47CBF7D90358E20C1CE25C3B -AE34C3F7FBAE5ADFB8321CD7441E224B2C8EAD517DCB66BFB75A4D8300FEA8AC -94252C458A1F9FDB712ED05447A1533061356C638BE750F1861E0A489BCCD681 -8CEAD40C8A237BA1DBD479F468FCF1603077BB2CDB2F7C953F069A323AA80DB8 -F0070893F3AAD67092097E7F1E03AE56082CF1C3DA9A10C733BE843840413C69 -B0CCC9AC9E9A60957F6EE8BB569AF351533534B25430B9826E63418960D5B003 -5C3B43772E87AF0D6F8FF4F96F83C4EAAD444017C8BE97E8554A9537D1F6A968 -0EC10E55F4D171E89785D92D63755617F749F5AC2F80D667150B9D5C1A3FBE9C -4F706062FFF9393FDD87B84CA4694D0ED8154C5A8F1586E200BF2688BF55739A -14E14CBAD11FD093B65B893E2C664E2088781E22A9E04B79DDE19F654FA8DA2E -494423131A28D45D563B47B499695CCB2307C2301FB6A4FBC3F462585DDF424E -121CD06D93414F12E58745722F969F5488179E3F7CBE796A5FC6AE258A10FC7D -2853D0FD62E50BBC4EDFA0BDFC6B9ABF229C6B341CE3C943F1EB8B39102F6B39 -A4783F400627EA4FD71739154D682735D76B04F97FD4331BCDCDBED96EE9E518 -454A585C30B63ABF1146D502BE14E98455737138555AE87BFB18EF37E61313F3 -39FFB261AB5F7586B7E71F61FC2EE6B0273DD9B78D1D5E2A654D6339BBF88CDA -9603A91A354FA7F1410D4338CB6E2316A866C2C6DF791E1BC558425AE896515C -0BFB941866E73F9FED5E3C6BAD4706E88817F84D72A21B0D81CBAF9AB0A5738E -6AA72267D78D0FABE7DE9FAD06474AABC8D5C013A18B30E46C492EFD80F473EC -C1D8C20AF264F0C0506333629A726CF157E44180BDB5E829F4A466DD2465A060 -9AA9814CC660EEB9CE336296C8BE8E7DE27574F9ADC031144207DC31D55BD890 -E848E3D072649CB7BAE5CE9C71EB3D034840B4C89852FC9AF644F16E0E508A7A -77504C1366E02AD51C7686E1AD2DD86280F259E385DCB3A3BB9D07FA95D8FAF3 -A8AC7E6528EBB82E2B76E141BD2810673AAE7EBEAF4545720B9A1FE75B3D177F -3AE75B0D52162B2C1243B8F7929E7B6A4731459562C50C7AFE5B85E9EF7D68D9 -52A0CF9F82A10253FFC97978154301E7DD57866A02853DA51C1B8EB67731DB9B -CB3BBD96BB067E77552C6F8C8F550090167BE53628C1DCB7E443ECAAC0B9A0F8 -8DDBCAB96507A25190037508604EFB8148E6FDE3F969D9EE73D88295CBE4CE94 -A97E3BE2AA70A7697C7BFB79AC641FBD997FFDB19A4B2847710118090A91F11B -9C82465F6B0A1D597972A8276EAE03F74B2719D52EBD8BAE65843492BD0AC766 -70F5CBC9F3F450863D828C12B2A9710AD0E1B9C3BA82C1F8414AB338248011C5 -52956C36BC86EB19BCD97DD4A75F7E5A6E5DA1F6A411CCA804E63232A9F24FEE -45C9F58AA3848D8D277DC2EC9C6C5C354165900EB517CF07ACD7A763B41A533E -3E980BCC42224A175FAEDBC9B6540CDD9D7247B1CA992FCA8BE4E873118FE058 -DEE63BF9507F8BF92DBF5A1BB05FE7398A72EAECABC0C6EB763FDAEE8CA08694 -766F4986FFF94AE563D867EF3441480F33984B730847DDD75D0853BB33605D34 -83A35897BE4230211F2108E5406595348D6687A6F41A24D9D8B7EC62E06D13CA -D08EBE456AC754F63BF36E6B74794E84244890F107E9812B520D46D655CF4A85 -45554E3B506CFA9378FD1320C8323A088E3BAD794C66576FF598A8D18A0CB246 -87093B0933B03DABDD965BAA851CC646A4B7DAC7C8AED985C5BA7FD1BDF37DCC -3B8B79538E811077A26CE522F23ADF708430BBB1DFF5A7E62910A76E3D107A1F -79E9D94BC6BCCBAC3985BE049FA99B2FACA42A95CCC46FF579E086425BE96BC0 -7C18667B9738E94DD2705A0649D45F0AE91E863EFD843DEDDE9C3FEE53AD5582 -061D41B44899087328B15895AA5C70836C558F2BC5C90663A85EF4E969BF9320 -295A1A4C1DD7DD8BB06C3C8DCC8FABFFBCB1CAE04A0D9818DC4B090A139B2DC7 -180437C5EF36D6719A96FF253617EA8F51D374B107047E15DBE3D52F0F630452 -33E13E04416CAABC53558488EF4DF5A6135EC23D6D0B347CCB2C253C676EBC70 -3E616C23F00BAF20F2C4A289D23313A10F42A14D1FC41D620BD7C5268F487EC0 -3053BC5DE8D1CF3DEA7BBA5E77EC183162FEBD8C43BB0B81BC4A14F096E41878 -4972FD3C3BE51C5220E8800E10BD0F72B6E598EDA478BE38EED4E9C7F7706340 -082542A4F3FFD15751B201F871757FFB5081101ABEF2B9E03B3E031CEDD55EAF -74FB1A87135BDCA7F97EFBF17A823FD343695B1FC9C4B7973E83CC054B6885C3 -D4DFB73E120BED58CB040C05A5DA2E0918ACC0171A25E8D9DDF1C3BB4387F3AD -56E2B1442A471A8109CA8FF408AA70C58CAF3D1E955088F1A9DCFA08154B4804 -3CD3F9522F77E708F4A9573B495DA131B58159E56C67AD17C65407633B3085FE -070003B27692730CF3B34440C84E10F89BFA088000FACD9EDF37CC3A31EAC76D -3BB4386906963EF265BF51117114CD437FA6099DD3394235D75125D8A1E66CEC -69471334CAA4045444E0F1CB120D64D9F991F590C31218F01D865A96E12E4402 -E1E6F136E6E3626FC6C234DEB2FF92F4E339DFC63661B8C2CB2F122FAC7DE4B9 -255A7585DC7F72E6844DF31FEA8B0575E77F50ECBD6A8333C0F2CD838BD43FC1 -06E656F7851A3E6E45A885F72AFBE92309A8B84CDA196EEAB16E2F90E075FEB5 -CA04CAB537A70F9E1AFE3696F5D159E168597B4B01716D5F7D22281B3B0A2BA6 -7C23DF1FB4CCD8AE72A8589E920BE81B4652BD8E7CB918B0D36874539E678DC9 -E4C8A518220CA11FF68F6AC033FC1E2CBD72B1B6F3905FFF9E040FB97F2303B4 -BFED51106183D8B3217801B06A41F0CF4EBD1632094E0F59103416D10540C5B4 -22BF6359474D332BD2E122291642F45F8B41240A295D89A1E226B8B940D76403 -92BB0C4BEAA322288741CF3FA5CD6D9820255434FB9E0408B38D39CD59F995B5 -7C8404AAFCEC397220B497E75726F02F8B49E159D03017872D0AFEAE4F4F7ADA -B02845F3723DFC713D7EAD66FE410A26ADBC76F4D231BCEBCC55D03D15047EA3 -8582C9BA5CAB73A39832C7A268E24786E4AB788C22C3D397A75A862C3C133726 -F10B1E70DC13F231C6124EF6A289D4C9A81AC320391ABE1AE58956B0C65A953F -7977BEED51D1D1F8F14819F9E9763E510C9D36DC4C1569117125581925E7E578 -3D5FCE4ECB43A1CF2888FD1B9C3BBE2128707ABAADA2FABB234D9D54BC315632 -8ADD5B5B0CDE69A44B1D869C873E4412201A5420657630F1CDF7B3F523776358 -72A01BFF55035A4D5F3B38292B5C93E6F0D3D5C404E2E3134C9D83E3BE38C192 -CDB084FB7C47206B36F6FC85BF1EC161E8782C6F6C25AA3E52095B3BF57E81BC -6C6815E9124222AC03EDB8F7DD1B6E67B4616E044D956701F400672D25696AD1 -0792806B54309C395D62EF6F253889EB595A80EF1EF9DD669C8D0BDD844AC0E3 -86D4F99611753A7F5CEF4C783AE6300AC389763148F2DF66F47708C085560B80 -E9C5197DE1A12DDFCC5D6E9BCFD07E577E3D93A423764B95E4A4D3C69BE20093 -77C19F0E29C1270BE98CCB7EF3A51E9F2A13B2F6AD215C4957F525253CFFA2E4 -CD0241055FC39A803F968E04C986DB6AF46FA87E9B347B64BBFD7D3266C1EBB1 -13FD1BE1D445005BB1E7F0FB33D4550A1B05930A4107C94A39D0144065EC88B7 -F0582EF13013B266E1F94035A6D68BC3B1206F717380449CAC2FB9E02D7C47FF -00D184D22FE6B5109D0BED53309D1394D1BE612E1341606449621C151490B4AF -2B6325329F8402E1A5E2BADD008BEE4FA37B44584D1B5A2229CB814E44E97C80 -288D1C9AE8F9D3392CF514CD6CD140E6E50C0A15F7E163F3855AFC6F26BDE38E -4B57B9D6AF76CEA0232F9122EC4DEF2C35D9D6E7BCB32DC3000897CEECCE7A2A -D0D58432F90B84281EEF29FD30386D9298FA557F74FAD17BF38BB6C43B2B25AE -7B0429D22B2DCB3776F20CA0F54976007D62736244BAD48A0D930707E8922D28 -34652B9F6A57B38D560CAEB9EC893A51E371AC4A9CDBC34E1F04BA921AE7DA80 -F0A9F60FD05431A1F51C5439E6B0BE670FA098CF594238786E039CAEAEB0A15C -7E553FBDD1A737CD45A882E75848FE38CF8896881E21E10E7751080CB48481A2 -2F9E897535BD1A43893BA63189FDF0765DD667CF2DDAE2044EE5705B04E0092A -F88194778E90C8605FE99E0937F2FB059389191B7F1EB87AAED0BC18594B13A0 -B9F3891EAF5F7757C52CF1081885F5CF425A8F3FBA3BE8D50748F57F2A496942 -59DC1FD668462000455AEEB34E0154C687AEA889A014E2C2EDBDCC3310282508 -A9B54F3B7D4AFFE5C7EDFE846926FCB7DE74A92F1886C3A382BFFCAC20C46A6C -FEAFD35EF0ECD139C00B9F4305F43941E7D237D2E7633AFBD945DFC3B7DEE4D5 -EC76F3C0B9F274C7C77BF3E610093FB95B1EFCD37B7943C2CB52BC2224E8EB98 -4D412B09DDD7B394D10575C4260A68D9AA7AF86C8B41B8A32713B7DE50A955D0 -0C6D41770F6B54E2AF930C2DD932E74E68D1406195A5AE6435091B4FB019AD83 -352E8E88BFA10FF1EAC08C416A0E3D3E676AF50A04C98FBFD1A36F1B1E280C26 -027B316F57462D2EE73DBBE8FD6CE3962F0C6ADBD4B26799CD87DFFB2DA63DC6 -B421DCDF29291A9D7396A79694475F72C0240D7EB89BAF7869FA4C408359F601 -BAA63991989E23018D24D17A73D687E0E97FE1684C1F1B163D31253DAD67A37A -948FBD7691B9F080822B075AF9197F62EAB992B24CC83F8DF48DE03B2044EAA1 -1900F3293819E9E3F1182B9C9BB7B1AF0EE542B0A0C4DB6A6E593ED76A043B27 -D196327584A34AB2EE9A7E37C032B19756E681A0B0742CE753AC86DE6C551D23 -C576BC587182B54DC4E404FB67EE3EFFA6E05FD054D22C80EC1A447404034BF0 -3BEC00158C521858C327715850C0ED166DF9F944DC398E1AFB00C98A56B1EDD1 -AA76020E7CC50187A7057254AB846A1637B9821E4365F2BDB31E85DAEF3EB823 -3183D7680FB736EE024AA81CC70D09401DBDD455AA7F65A263A1FAF6A8CB69F7 -B236CF8940DC08B00521F1B6925E7A0FE6D651532CB6350EA198E66E2B443C37 -A866ED24171F43F7A42BE6DC47D273242AB14883C4ABDC16498FBAD05F879F55 -A9D156D2F445C11C99E56B0062F5FE83D7D3DA3D50B8CF30E8B9E4FEBC55E460 -78E3CCE5ABD18FB50E7CC747780CAB66B05CC3E5286FDD6DA309312F44B7A7CE -F116754AEA9CC05ED2CF0824B7D3D5397F8EA9511C4B98CAEF87238D467CB0DD -D72EC5A3C23571DD1CAAA56F4DCBB5C9D62C6D5304121A193910AD88AAA46B29 -0040F728E74F31B1D2A12987C46494FD339EDC9F1114CD8F31636A608517EBC2 -A4302989F8B39776053889EAA6F98F8F67E8882B0EB43667E77076AD125DA5D2 -DC4816FDDA2EE7CFB0876AEC740664AE7FCA1BBF2E1C4EC1A696DF63B2185D14 -28366090FDA030B1D83EF4520D601CFA869DE7A625AE25C693CCD77346021268 -8DE904D8AD9691AECF1A4B0B7F9C84DE56EDAFB8B06D118B712EDE88AF244206 -EEC78FEBF66FC3813ACC6662CC083A701918D49E45A52550A3717FF25C69140A -B472D780DD043078D09BC101719F337253703A0A01C074E9257EF5C0575FAF52 -1940E36C84D0C5C89C703CB93AD8974074FE0BCCA8DE7293897493CAD7F48DB2 -A0A1764505C521B8C877002E4052A405A3F40BA86203F189BABBC66A73CDE724 -D8EA8849FF91CBE956820C9D242B3EC8CB6361CBC8F965ACB779770844DC947B -2C4DD3A18CEEE4763CF5E555CE00B4D26AF17DD326F5643102040DBDB81C1D8F -630BFC45FDA667A5AD87626A579E749E547C0F14BC31DF575C55F760059D2B3E -97B3764FDF50A6C8A1E5B6C4E04E6754BB44A3697D35618EF99F7A7C7732F782 -B6A4A5F185DCEC892E9313E87E7D96CAE70982E2E8475DBCC31F2D580F033265 -A4DE743506B1ADEF53CA1DCA89650ED95B45EF084EC3D2F59AECACC5CB9FE42E -02883FE259B5111777720551845E98E634C73C558407F95366590AE9CDABB69E -32680E5E9C5283DDA7A88FE32A818CABF91E2C8C33BD37AF55F07905089F643C -5537EDECC3BDFEA0C155E8660B6EE9E20A2726DBC526BA48E6AEC031ECAF54E9 -B7677DEFAE1CA78FE688BE52512542D409C2F18FDCB03E09A9368DADA0AAE1E5 -364FC490108383BCCC78D2CE042B0D7AAE3E55813CC1DCBBE29006B54D35986E -AFAD622403BF51EB117DCA0D0BE0CB83BCB9B5C91D211A2B26E02F0BC05B2ECF -41D67DB4E36E3C4AF8C0107E43AD65281AD37BFAD7C48401F3E5F6A78CF47592 -980D94BAD462224F2856B0FA552D396037E772814D406692803720ACD3FF097D -4C943F1E101DF6A6C8645B087D4EAC0A201AE80AF9001E46AD14C6E4E5852AF7 -05A82896F84B7C4F42955BCE4AF4C2DFB3F36414CA9DFCC90660182481B8E6D6 -727C781E8951832C5B17ADD741FD9D148ACA22814D1344B66DE5CE1B9B5A8C8D -4C44307CB4A1C6E7E77010BF35E8967BB5093F9F3726EAF31DE1DD398B597163 -378B4219315BAE4CB3F22DD6C08A38D28D56F76B6333579B3A5D530006B74A27 -77D43A0505A12A53D6DB07C690D2E68BE8B477BFBFEC1D6A83ABCAD2252BFF01 -161A0F55201F2FA171805A24D6D8099C9CBC9853A1128CCE85F8D3D8716991CD -88D85E53D6763E480D9CBF5155FC1DD05648DF3ED09C0A88626588B8B33E4B6A -31E549F73150F8204E23B2AA95113690B732681F89640914B413CBA902633F63 -4C5079A2437981977475A148579990E67BA6C4E170BC97DBC2A71D74F1DFF935 -7FEC6351D4FC4B11605F3CB7FF7538632DD5BD389DCFBD356850B744352AA105 -89D7180B3DC7B5C2530773D517A6540E97F6C99FA4B783F765309959225B9B3B -2E6032BBD6A0ACA9C9C3B9FCD5E3B7F039A4E29577AF1A0598F156F8B599A24C -C127E34FDEFC99DFCB0C58B32A7A5658FBBE5B4C4223863CC99AB14D51D9FE60 -BDCB10CFDD741048A9E610DC5B54D8DD90662E6487DFF4C00435D8C7B8396B84 -6508654FE8D6D3D786F3529349478D1AB55FC7AB6018F2CE2F7670E9EA8ADE91 -1C26BBF4DA93ED4BE54F2E091825D4DEA16FD99AEFF332AFFB4F83DF32A192C0 -4CC0C911E4FB0508D8603E15378E291FD57A76C3B0ABE3E4ED5C4659B569639F -50E2E4BDD413B928CCAD5255C4304064A0F8B5CD220D04134AC3DA413888411A -763E5717900F1E240BD67CC2A165A22386A13CD18A46B7542E92E6C0D5CF1BEC -D4FC63D2E37F77E5EC940496805B87C2588862DE7ACF2BBEFA9E7AED6F8251C1 -47E4ECF8DFD403B7ABAAD01610CB8C1FCEC582B181CA1C7B3CD4D7FC8BB83AAA -7C552A1184C927CA53609C1C1BBE466F342083142FF485A7B6CB831B10D8D595 -C5EE8B4868B303F9D83D7058CAACA58B002DD7B785C9791D35A83D774BA52EE9 -668FD67D3251490429E736408B39EA9CC030DE4E1075FD48DCC7841B53EA5B58 -5D2312BF5B88318677681C64EEBB0E07EF24964AAA09DF3947E7F756ADCC8273 -1BF27691B0EECFBA51C980BA38D9C39E6C03695E167425FB7E06F3010376CE2E -2E0F31BCBD0ECD39F5A06B9F3FBB4D9F219D0227CD94B8876B5F7945B2D1DEC0 -1D0608952D93443847B0C06BA30A68D9E914A5B8F7170D31BD03EDCF50C89524 -87F551AC16C4BA58B620EC7109FDF297F2498B77099F13C592C20339FAA29793 -8A12CFB056348E262D294C357987DD3FF0D5E270241285F8B95ED7EB112953D0 -3D891BF3FFE6DCAA3AE6DFB46DDE27CB97C33E040F72863042ECB862F2CA66F9 -8FC1A10CAFD9AD114A9B9FDFFF69066903484BD0EA96C709EEA593073E3B5A0C -5C39B20CD2FB89AC7D5A963F4E38B457AB081A020AFEC4274598FB7C82C7E8F1 -BB43155E12114A8CFB36ABE294B2E7B0578B8D06C348ED33D72843BCB7F26824 -6ACBA25DC780C73C099B174B7D63E725617A476CBFEA88400E6DCF0A15ADD746 -88C863B0D697A5B23B9C5DA872500F1CD536C6592AB8D6098BF3899D77821BB8 -E8E611152E50790FE0358348E0641A8724F3A6E3B68D76D280981E6F62B77E27 -5D366E4976602966963A8C8F80087D3A021BF53441DA104781F665AA0D808E7B -576FF4A65752A096A0C2CF7C0F5D19494A3F81BB8740B0D1B084936D093CC8B8 -6F43B16337E1E8F18DA8B14AE154A804A43D26FE259177A6ACC53EC5570D9847 -4C0CD1812B987AA91EDB57F5E195FC5E00286FFFEBE08B96A9EB7CA2014874E0 -731949D9A21F2059B0A1D95CEAA38992081C247DD75553DB3B5D59BC2A701975 -7A50C04C7B5CC1F3954F27685A2AA3FE8C761344E249DD960993C0BAE888A20A -57492144005C78BFEE2605A6F8B9CE597412A58C141BF6C382515BB23ECFBE0D -AE464E5A6B8B8F74CD1E51859982698DD87E5E605E61DAFB10E7E66FAD334778 -3718568C68C7AC3296670780AD7A8A2FDE08F6F490014B97A02882E2B75DF642 -8355A0E63CE8BC7639B6BC6A5A435E588C004EEC93382DA407482DB123706E9F -460B5F7778B5EC8985A61FAF5F80DB8152631333AB3930CE72C6E0227A5478F4 -3FEDC74EA0E1F34BBC160C58555392CE5F3E5D7D5EC53ECED9F268740878A2DB -BBDF75E69C5562088E1FDFD33BE17F425B9057F6AA0F439B3D159CD80359BC66 -97453D1B5B253C78E2C489A6BEE99CAB0AAF1376F8D3D2BD0EAA14B74951DD85 -9BFFA6D1CBFDF116FF11277D49F1B19665DF7187E21B8B65D1DC5DEDCF8B4EAA -26DC3EE9A2042E62B879F1489E8C699A90C616CB56E1D09AC4DBEED2FBE13720 -B6271D7EBE547F5218A59D5F1340246468872A9D7EB9200438CF6EF3DD33AE4F -392E440E624D3AF2CB0E45D36CB8B9A13B27DD77F4A5DE5BFEDB47270D44799A -35CD196BAE93364C17A9FCE9B11D2AB209CCB9A8C17738ECF1ECF3D386DEF6A0 -35EC9C8789CA120473FF43D0AA543B30954F530410CAEF44822EBF268E1C3006 -2077F528A3A1C7A3BD33EBBBCFF9655A29AC3D9786F0769A90810E89EBDD645B -8517098F0ACBFDC7C506D68A211C34CD3FC749BFA203829B47C52309A91C6832 -B19AED6794FEC16B62E8FA39F5E25484D8D2674BD20C83AA9E37995FFA9F17B0 -79060FCDDC115C10AB448236B3FFF7CDB751980195FE64B34A305B17E59A6A1B -C29BCCE3D30EC171EC3FFCD6F142B07AE27F989B5E8997603E2FA1894157C969 -4A7B984CF11C38847054A519B2A5B4E94EBFBC3726E44CD23419F2CC2181D3CE -F28594A40E3F8B2E7432DA4A2EDE449E5AEA724A163B59C5A8FD692EAB8BF812 -E1621FAE977F28AB0BDCD739ACCBFA1D60CFE2CBE7EBE6866B16BFE930EC2372 -FABEB5E8FCCEF6325C5AB638FD0B8D906400E6969CDFECE6F27830D8BD0E2D25 -F554EB8FCE8DF876AA5F21A257B9EE0E2D2C206E4D050C7718493A3471CCAC4D -362644BA188FFA6FF07EE751EEE64588A9A4A4355D986AC84130EF28F78C49A7 -E612A5D1BC7164D0E9E43C8D50D4B474CC06DE4B91AA8A06FCA8FF50D2132DB7 -EB3757627B81A75DEFF5C3A86C4218800423E396F0B0D03F1C5F7E80EB315600 -618553FCB079FB1E85D97B23A5680A12E33860732EF1F0553C3968502A00F0CD -8FF7A012AB882AF51729A44C0C7B626677824BB3C3147C7DC54721B8C84C881D -294CC488FBD29F85064844A927E75255BF2225DF316E5E99E02D9CF1BA581DAC -BF6B53EA451CD076EFA3977EDBE6696E5ED511E153E5B5A052D6C7844E42BD19 -468BDDC8525B191E41FD3313528D42E34ED31E27274DE69CD44C35E8A7F07BD3 -328F8140F05ACE81B39DF20E943AC2D2926B1AFB7200CA0DF6D98F3EA1072AC1 -9EC5AC844D370D86F13A1A156A5655AEBC82561D0723BDF10BCC60B03FB015F1 -87307A7C6986E7156DC3CAF18C55392373E186FE99D11116D44F6446A47C5F82 -741F42F44CE72E37C9C3191E19F4E10999D399CDC20D214609E5B712F0951217 -98F8001F4F397D228B3664F5E3F19FFC0F099C5E23452074969E799CE353AC18 -8B10C5AF4B669F941DEB99557D06BAC12908D9E760D6E696850EE62EF3CC3CB6 -3E551CFF1638F9AA115CAD56C4C556D7013DB63306F05CE69BF7FD5BE857C2BC -F1E3F83621FC8C78CD7ADC086371FA5DF5FA5F8D0FB6062DC469BFE4AB9D49B3 -8498CF26DA9F8D4C5422D70D088A719906B691AEA2ED9ABF79C9E19237BB32A7 -F31575C08D32D388DF61ED23E57D502C277104785D8D956FEFE35DC03E0084AE -A87CD3B500D66E9869949FB942214D94A21641058C03337FFA6786B40DBFB3A7 -D1C42D5569000D28BE7AC9BEE00B71D29E4697B5FC2989C610BF18FAB517F605 -9753319745C07B1734876BC5FD8DFE48320D3C15A6A56DBAD4478BA789C35C08 -7C159F1A558E9B5429D8ED7DDF42BD8E3A21AD8AF75A1A82E6C0044612E88FF5 -E4F118F114741A6860CFCF0FF4B28EE95218A4183E1D507B862BEE7F59198342 -6CA255B6143DA0A769B97B7B260D057ADB8C8D86C7E5440FCDB1C8AF4015B4DD -9E9E1D548CB22EC42ECACFB9CFD7A2807B13E3222016C5C3ABA7BB8B7DBBEF82 -8739BA81EC6B10A6EC5B84242B725334D160091A6B6E4D28C3379369DC0660FB -3DC1113A8A212AB1F4458FC7225577F1328E1744E0F1937792E527866159CC74 -88C36D758A859C345FAFBB32FCC52168CF1F1216E4AC26F754B6965D3B685C3F -3561712917BA03386785B3EA2DB27F0FBDBC8748BF5CC6D5D8D138127095D1E3 -39454DCB5D4D2361AD56BBF7BCD7F0BAF7E39DD90FEAB536EEF8C39ABDE08B75 -2807E7F2956347501853CD2A78E9F245CD0B34559CF3B92BE00F2135FB94C923 -62EC7CE9A484D1324FB1CEF4AF50AB67F81E52888F32CA0883B054B6137D8B10 -C60B29B64BCB976AAC3101D778F50308942AB6B89BF25F965D58289B2CD94FBF -7414912566B92EDCF1805F3CAEB3C548D6598B63C108302AD47754E23491CE8C -95EFD757479CC917BA6FE726780CBA50D3050A22B565457B128FC7FD0702ED97 -52B31C1FA6185E1962A95A489D926F2D49E18DE7454DB9EE6B664E2F59B49F88 -2EFE25E8EE9D6027D5EBE4312CA251C4A5F24FF865EA852A38D32B780F7D155A -04ACDF2A4CD85817C05D66D11252F54D5105D322C55450B0C529446E35A96F07 -5551172CBB50903316612C5DCDD8166A88A4EDC12DCFC476A9178511BBCAD566 -81988536432D5D5C93E2E52CDFB413592F84E77EFBE3FF6E2D6D2DA70C7E1D60 -10362CFAC96B140168E01D9B95C1C8D7C0D58EFAEB3967BC24E79BF78F8BF15D -08F4EFBAA4A77B7D74EEA436AD3DEF0BD6771DD71B5A84BA4FCBC5857C92EB97 -E71895552B2265B33B3522768BF67A1C35BAF1BAAB370E0B5BC8F42692353EFD -15A909DE837A136806144D15D0357D45F0ADFB8818D22E467475320EF0531547 -C9B1F4991B2EF83767A834A33F9DB11A06A3211AC2CD54B6AC11FC74A9C8C5A4 -39811AF07148F73475E43E31689D51A6F65BC90582091CC02E8940C1FA636343 -3211D4CCBDA473B471A5FEC94BFBE089EA1D85DE8E6D877B0563F6A0453044ED -2FC778BB7295715100FD16DE9B95AFF6C52D20E46600E27AA78C5129885090E3 -B2B7884B1F00EBCA1D28D9301B818D32B6182E51825ABF2EB1D42DC5B7D803CF -75A61F7D77ECCF34F8CCDA913A4A3B970669A28C07199628BAA0939EE12FF547 -8801F9C2EBEEFF68E68ADF8835B6D7C612B2E68B4B31210B68C167FCA663190C -193CC034F631C2CCBC93A2F0D7D7DF6B82B5252D9351AAC9FE68EB5C2CBE523F -25B858A3DA959C495A2F716E8489E4E10F21B109D955E2DC3779CFC7CD207F23 -B19FA054A1F40399D31378E4062F55F3D353B730706B64A4F79C1A37E8AAA7E3 -AB7E33CC395F7F3ED29BBBB9944CF17347B96AC80C3F23013870E41724C76E90 -35315509797A1AE422C64176D5FCA413F277274ECF2C1F685325DAA31A0447A2 -55E2B88F64855FBF572990AAD35DC42B5B16C2C7C877F03526C8F5B33629C111 -DC400F6A367CD59A293533D449BFC90FA625131411E9669EAFB31C506D7DC59E -7FCD6EA3E510573811C6BB6B6FBFD856506FE9C751125122D5C08664C664A27D -957A0069FBBCEFD48DF15ECF4626A78535FDD8A54052865DE252B1353103CF6B -B7236AB0AB9448789888EE57CCBFC81E742186CB19C4DD173BA84BC6E454028B -B80969198F5004EBCC83CE4FE097433DF391AC5C5158D6FCAF8A1DDB1A387B0F -90BE8178315437A237B74916ABA4C448458AA2562C30F54749359C5BB9869EE5 -619533C18952E0464DA655F2ADFE8C22B4E6D9C1F17B04FB123597A1F475CE8B -4591E8B1E74BA258EA5EB2113ABF335E5537A709A12697B1598C10F62C378222 -9C0EED35AB768F20606771DA61D8BA637735237C7AAFEF810FB950FC07D4F3D6 -CBE4BE41CFBAC8031A75AF9E3F74F5A4888DA4381B24727D8648B206E79C2BF4 -25B0D9D019289879E225F0DA8871200EA0AD572BB81A8F5FF104CA5BEA07107F -D883517E058DD4134C8C00F4C0A3DF736CF57A4DACDE5676C8038BFE2030A167 -F81F3A8E38A3E58EB8C3D222AB0D841251D8C53A12921C1DA8150CEA47C0B5FA -90508CF6B50A731445268E06E569FA0DFBB89C2B66668E5496F1E5D336885607 -1C78B5D21E976BD569FE32D72CCDF76D18D269021D031560411B90FE9A60F69F -4970E23A8561A4AD4842453AA028A34757BEFB025909C81AAB6C3DBD7B4AE9B6 -605459536AEE152869E68037522389A13FB8D354D67F851E9AD50F1A1F3656BF -848C03C80C5E27D3D4709BD1EDD4A63FAC970E3C09584336A5139D098E0E56B7 -6C4E57F6D8BA05EF3A403B217A3DE7AE0D703E4072572EACA1032488D6EADDF8 -C2ADB1FBDAE899166D639C345A7FB85A93C218C3AB37FE7F2EFA17B02CAFB166 -BC205CC32A709E3D4E433238FC743FB4AB8FE2BF306FD159C6A902754069B326 -3FF6B320535105308BDC53428C817A360ECABEB8D031480650CF58B4CEC5D3D0 -34ACBBF444AA5E07BFB919F5096184877BE17BD69443DF31BFE534452C512A6D -78472310B39354A8C90E41E94B1332E6A6660885D00EB7CFC629EEC5388EE234 -8D3610E421B8C0DDD9D4B440C05BDD3E5A84D34B939106A471DEABCDB3829A82 -9C8C2240F680A34D8E73B13601E24CAFFC3B46B39E828F80A9372D9CC73AEE16 -2B1D1FDAAB4AC23C3EBA6E7AFA442ABB8897636C9887456E80604972A1C16294 -9C0DAE2E06D44416BF812660478E1B336381F17EC405548C13D11AFC25FB3B24 -C0F929441C67C5A4F5CC87C9831FD54DCDDEBDDD43DF2DC5AC29C2FED14425EC -AF7387E1724C380C66B35CB2ADE134F69494AC18EB882467AB4B5C2DBF4A4A9E -1BFB20ABBC52BBBF7DA00D173B0E71A71C462F183767B65E7A39D471B02D7F7A -36904FCB7799C2E392F77F7E7F18F2041B066FFF9234F187394765E005ECBF61 -8D4AB34C8672BD1034E9F45F1E1C45575104B8220D72B1F65B42AAF8AD76C390 -4069B05551444C623F4452CB9292F95EA0184C89FB7DFD873B99BDD94CD625D1 -52DB055354A43DF9C1A6149B5C9AD9441272D4DD30EA76BB11CB9C90B00E64A4 -919D24F510A61A554278A38A7CC060E1075C71BDCF2B3212AEB7211CFE7AB524 -A3B6AAF83F219EFF76BDF1070D3EF3E3DE668C66496BB083A83961E08C5A4F82 -68F565468137ED808F7EFDF53B36A544F2BEEBDF2E1EABC9D8D6321525567EE3 -BA8F6F2AF8EC36494C1FD5E59341E57B04E50BD3ECB292D8497D9956F27B4852 -F29183734945D1DFE69A918FB27CF23070A409A730B0C942BCCCA43EA14E4716 -EC68BC96BDAB3340F9A6BF8346907AF1A1E264BCA7DC8E9C6201630547F8208E -0D00A3FDC080B295064C12FDE7B4A156858B070E140D6698F656626112B2E7F7 -B22A43849C7E64203821975D9E70CF829A17011819A6302554C19BE44CF7F6BA -DBCA2B816D5E7994433675BC206D061A06250FEDE20F49B8209E17F22E7FDDDB -F5634F83E8E14A774DAD4965CBF302047D23C83FC9A7134A18A0ED9723C05BED -2D38AE0DCE11C15463B4E8EC9C3FA1A22BE1CF8B688CA477F0B83D1E738CE20C -A8848360004B8F5D8653BC40669A3931A69548F00DA076160AE57E14029F2591 -B33A8E46388E691A9214BB5F05E7B85D2C0F207DE9F2FED91B7B14CB501DCC3E -2B75D027D46EEC000CC5E1165F27D8C7F69C3A727D92FDDA4DCB30EEE9E1D5AC -4E6191E97633CD86F29153A169E244FEC98320ACACDA602B01FEF73CD9C8C621 -15F758E2DEE4250AD1F92202058A39BA42B6D9F098A472EB4BDBA3419C6CFFAF -4FEC15B821528DC53C6433CE7341DBC64FFEA641D91EF21DAE4D9A8069DD19FE -D25062200D06183E7EF7AC6AE7C643908B5926B8B4BF0310AB90 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMSS17 -%!PS-AdobeFont-1.1: CMSS17 1.0 -%%CreationDate: 1991 Aug 20 17:33:59 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMSS17) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /CMSS17 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 12 /fi put -dup 46 /period put -dup 49 /one put -dup 57 /nine put -dup 65 /A put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 97 /a put -dup 99 /c put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 118 /v put -readonly def -/FontBBox{-58 -250 939 758}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5F075EA0A10A14816D516A63DE166FBCFEA932 -BF000C3B84394CB6E6A446D37717CF8AF9A27241D89E3EC12BBAA36A87DA0A50 -B96DE87FD2565D6BB4225E150CDC8FBE654B16102FE8DF3BB5EB869ECD8E521D -74ADF974252C93C4FA50311485350B2EC0A92EAB44C9A8BB11852B3666C5F393 -6BA5AE3D742F26EE549A603EC810A7528CDFC7D3A1580528936A7C291404D23C -A573D08407861ED401CA26626B04DC86EBB4547870BA7A03E49CAE3D0CA7BCD7 -6C28C3A89BF4182CB84BBBDC9DDAA541448456EAEE89E87C488851D1235F3326 -D866CED01587D10C2464C07E3DFB71E49317FCBCE83A4B85F2B7E544BFB398B8 -5BD9355CCF9088DB5108E011959AC68F9A3773B17656F85521618D608D9F6450 -BC4EA327B03E999BA05A16CFC2234F388EE7463AACF02EA3A45D5E65805C7ED9 -4618D5A8669FF3ABAF8B41D76D11F4AC0DB848BA8A5D51CCD6D85EB6BEA99A54 -80CA3DD9B7E9832296073E66AA9697E86758256A063934E0B30425BEB569D9A7 -C37604DF22CD0A369EE007F67CFF5A930B5F77EA030E547DC635869BE5905270 -09C91AEB22772C01412D78965DD2B489B4C4DF35FADD130DF1FCD2C59D0974E1 -4C161E5FF72F790700E0439032D0240542B702A7520469411C6809C27B3AA535 -A5ECD235FB90601C6492C6C3D2D38AB999445474D7E788097E247DE495BAF83A -7F1C70DD205967B579F69E764F4DDDE56AAC3D87CB837EADF755DB85B88EF041 -AC4F754DE77B66B0471384EFEBF9D67DF6626338DE3D4C65A1831032D36C0B8D -C60513EA65E9AD53E4F1F1AE4F6DB85E249AC53396FF5DB2189F37D359DF0AC5 -9369E07ACC443314B1A13CBCDC48DC2F95896CE74E346E7E94D94E777208230E -B440DC87E47392DD25752B424318B2E427FF04BF81048076E756899277425456 -872E14677210E65723CFF0D4C233BC976D1CF9C128C41E4BD36ACEA90DA355BA -E37B4193EF8C332275A19A1D7C42C1E9704B5C3ED7FD28E0A4378A8328EDD854 -84BACD143DB8449E5D1B01CCD7699D1550EFD45B3B17D34FFFB93A6C63F7A822 -B4C61B86AD1CF43C0579FEEBBD9CD164CA1127691D91895147393DB7F6BBB8DA -27F127BE45FFF7333A812BDCD259788BA0609199672F8672F56E5A6274C17677 -2F73EF9AE57277BE7CFAAE421521CC401C3C6C952D4C884353915FF5C3A61F64 -6544517B95599EAB8E9D757953F44B7A430EA322FA65BF56D944E82F16509880 -3BB6B2C5438F4F709D67B2C6653E22F681D3012E56515D0E1F01633A70B156D7 -163343AFE48E64ECEB5E8371D89A2DE8AD0A0ED2C424DCFAC827DD58DE0F486B -22B7CC010188AFA33F9F6D0DC067B0B104CB169824843C41AE7F9EA60ECA380B -8422FB6F445AD6D9F82B0A6E48FB1C809C0EBED48B750A18FBC23DBC8CB1FEF6 -56C1D4958F611E5F3BE7F90797D99A980518220D081A9308FA43B4A0AF0AA692 -187DE853449C9FD2D9908EAF7800C37A257BEF6DE606DDB3D061B6E9C58FE211 -5EA4896F2D5AC595597BCA18251B9EB5D05899F1435718D7489AE74321EE4232 -749AA4F7BE22AA99EC392B8173D600E5B5C187FCD41049C5492CD9944F42F49C -D434F66F747EA27306C2EFDF9D0A705CA721EEB94447AC5029983F1D407E1EDF -2D19A7ADF22678486BB6DF7D4626013761D1A8375A5C9229FFE3C49E6B815FF4 -5B9704BBE03A7055A0487C5989D7CBB888B2D9D75D31A7D305183F4D31C4F76D -773A95672EDCB63D0A8971C4162B47F7DDBA7245C14AC7DF36E77A99EA36D875 -79786F8DD335EB980F775F788AA3B1A2EA93C6D90A37DA71AD64BEE092AC8A6B -89B6C1BDCABF8237B3E6E3FE4819CC818315FDCEB2F1F296DA03B8B5124825DD -30570C8FD6F2EBC3BF5EA83D5D1B9AF41ECBEC37719AEE1F0B6B1868BA2724F7 -75D85134350FD4B86C579A98D092D655DE9E4330D6AD7E7C37C52DFD5B8D72AF -DEF13D26C2242410582BFB5887C523B7DA0D117F42DD35F79AF6ED7BB820A483 -E3B4DB9CEFA96210EA84F13E1E1207A44FA402CD224D2DEF2E5340B532977A4F -5C51B390DCC59157F6766DD137302C8F40880736C108ADB1A7059E259CD265B2 -803A6BF769D92666E64CD8A002C038DE90080EC900E50E81D533AB1DCA38FA7C -15506843732CEC5954D5BCC5774D04DE8FDE8F41DDD33E2C31C957A545C9EFF6 -2252A618475A8D5E653841056489BF82CCA74D4AC7325A54A2F23B5FE76480DC -7DEB30F25ECC2AE38294DF3C6E4281D2501A8BEC923311CADAC6882231BCE42C -F9C515052D7DE839850FF900CA3C88572099B6E6BE2B3AC063FC34446772462C -08C8F11F7CACAAE7BA023EAE9237FB5DD6544A3321DF3EFC047FA89EF0E77F00 -8975CED1E50F61BF083E652D8F9E322D2B4F75AF5D022C238A23573FA658DA85 -79C12DD3473DB18A2EDA21CBF0BA3C574FEB6FDE80365499A13B19489086FA35 -DC3C4046C181DFFB707921E71DB38261F2A7F4373A106021B17A469B058C8F92 -99A0D245CA208BA76546A248F23A1519347875D0D7D6E6A8BD720468367EE867 -967FF6A4728215316BA2146D75436694F5733140A13681F5E37658736AEA2CC9 -7D0E8F31494BAA74A7AC8C8FAA069C76873DED134CC6C1955B1DDA47BD620121 -52518CB3DE9FEF8606FD4946A135F932D0D2254D7C063DED1F37BBA76C085C58 -91C688B5ACFCEE89EA980E3474301A3CF333F2639DD38ACE03E12051DDA8D980 -F3DD48E088FE1517F1E86F56FB6B57F2CC133483344E26E69D406CC13D962C66 -ABA321EFA3A0D60759E7853087194C4FF18215ED32913570F42EA08C5E96EAEA -0953A943FFB290440C55F81EF8DAD2184475F7570FD8904CF0A60D34ED089D2B -B3238773CDF9EA4CEDE868BFC6AA5DEF73C445D32493C62265E2866AF2871EA4 -0AB89CA1E12CB25B3E8331BE45341C4B14A109C0956E495BF55A0DDE831D117C -2BDB9B19B30BB670CD462B2F3761AD9887E8FF1C328EF74DE38AE03867320C8A -E6A5F643C37BB6EAC4EEB628EE6A0A56EE1C1BA99BCCC2E53DDAA2DD55E552CB -00A01EE509936282E8EEB193B6C751E4C22FA9DB5FA1101E1BFC021AF4E1EDAD -3D0688960BA2438EF75DE5C9F9575DE69B1E38547CF90A49FB7456F1D9C55E0F -0072DABDA18031CA89556ACC1FB6049993ACD0B97FA85CCBBC4B3BD1D9C25033 -EADAAA65F292E0E3C6FA83BF16295CB1EE9E7A1CF2D97334B811DF4BCE5B2D8B -5D6A16DDCA0573879F074C92B330AC92D73300081BB444069EB53E59E5D59070 -A1FB5E1E6C8BB8D17B1055DEDF5DB4211FD6F07027AD9222C994F4EA13D51946 -AC24584FE64435EA163DEA7191429A0F84445EB82177BC3C915450E6C9BD5962 -F2D8E30A901AAB7DA4179B377E05832E68F8FF333138943C0FF74982681907AC -50B6214B45A7F5C3611409CCAE3FF462B669DC136C4D3084F81C7E61910D7B57 -EAD936693587B8E50C55BC20FA7C5C49C7FCF7E13702A84EE9798AF80A88A155 -5ACF7481DBFF8F9878CCE9CD49F160C66A2B021E3720F4AF52975F735E84BD50 -5FBE819A10B6FCE54B2EA1762A68240EA6EFB4438D4EDF605605E62C667FAD76 -8FAEA664CD45FD570B64CFB7C09B9CC636CA374364BD0D729AFF1C18879D6811 -9F13997D9A0A04CBEF04D03FD460DB50AF4D245EE0B6923C037B352A065271EA -833E8A7CB8E40CBE9B937B4F18D4F4809B0CB5C10D262E1B5E99EF67F8F8DD8E -23BA5F1B6D18B458ADA0AA5F121AF7C9D9EE3C5BFB3F0AADFF5293BA43BFD810 -6CE4FB2E8521AB6BEBE68754C253374B802F187DEAD3F01364A9E7A0337EE59D -B99E0A80A3192853131FA21D116BF30610C3962C757D058E5FDF9CE34F44E8B8 -57C8CFF155D8447C1A1D3D9651D6ADBD636700FEAA55161D4C3CB11DA36A5D64 -EF557369F25DA939E094DA00E94AD253C78B3EAA427CE4AFFA6DD2E3251AF25B -754730B072FEA24B5002CC3014A2FEFACC1594443DBA833A20440E7B784F122B -FBA817B5D243A01FF2511010565C07DCC24CA098321F85884BB51FC8EF8C0354 -C7DFC011D3172389CA464963C39F3071ECEBC8E1C3FBC2071E30F8D989BEC51A -908BEC59B59DE12E1BE7D2430A3EACC6899263F315C02871FFB1B0EEF4FC6603 -67CBBC243E9F32FF9EF6045080F8545C86E6134F3B3F27AEC86E0DB4320DEE59 -0A0DC84B6B67574BF33BF30F291E1E89502DDD34408DBF61F1FF6F03FCB2BD67 -F9D81EAE3EF51F6467E264E78C40E9C2D5CCA37122F5990A9ED2DC3EFA9C24AE -802B3BD19050AFE2F847BC06EB195D8770ED6DEC5927B89FAD44A3F979055C03 -A2CB8D685F90EB5B1564B4E2649B2FAD76897EB52C3DF4C1B7830147CD03864A -E324B9887DC341864704CC86DC98159C59A7FF5F1EF940F3223A6328735265B8 -0601D05DDF2AFFDCD2D097D49333A99CB9F3344FE36B5F546BBE50F0D4A47A4D -FA97B76BF1BC1DD26B5E53FDC5260BEAD099C80D91202F650888634AEA138E0B -6EC85A2EDF5B9296B328F14F1A97FFACD21C346FD0E5DC5BF8BBD582B1A2DC7D -4D6EBC0B87C04C0C6B7E35A78ADEE0C85076FED117475D880D8D7EABBD7B9E2A -E62939EB2E70B96915551C358658C64EF09472BD37A81D955A1EF45AC59151B6 -54EA2D5562ECA5B2D6C2951684CC52F7B6A696C39577DA5C25CE97B4B6E5864D -668777C8D50472FF34A2B855EB730E0495A87FEE1CB31041B946AADD7528740E -E1D56957395314C1BAE6AE7033A588FBFA1A05827CC2992970F0E58AF26172C4 -57AD52413366F206198BA7C0647C28772B5FC6E6320A22DB75E5F6B72EC87304 -056583EE24325B0AC4E5FC3E9C88F3630F22565C8654D92FB9309E58464A04D1 -2D9DC261A91A22603798576DBBFB3096E1C33A37271D39BFABF28D0147BBC69B -F798BEEC7A3B6947691659B5796F08D15944BB0A01B2B38B751FDC351C2B26BA -440C177A7A6220D37E15D310330022B835EF5BB9AFF527458F90317901B900FE -B66A00184CFE29970AED7E03AA383389D3D50FF29996054916CE85E9483EA4CF -D690BE40371344C92AD2875E42C06093700FD6ACB12EC00C7EBE332879154B14 -64BEC0601F102149A7FA1CA7ABD2BB44803A0A7F252FC4DF03C4A11D65C1E4DB -F37C0FCB21F4281F41DE1382698B70721ADF8B85C939B60595DFDBB12A6943A9 -15AF9454779D0D906898719F54ABB3E20CD903 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -TeXDict begin 39139632 55387786 1000 600 600 (caduceus.dvi) -@start /Fa 231[55 24[{}1 66.4176 /CMSY8 rf /Fb 205[35 -35 5[55 43[{}3 66.4176 /CMR8 rf /Fc 192[35 63[{}1 66.4176 -/CMMI8 rf /Fd 134[51 51 1[51 1[38 38 38 1[54 49 54 81 -27 51 1[27 54 49 1[43 54 43 54 49 51[33 31[54 54 12[{}23 -99.6264 /CMSL12 rf /Fe 139[38 49 50 2[59 65 94 30 2[35 -59 53 40 53 59 53 1[59 50[35 1[35 44[{}17 99.6264 /CMBXTI10 -rf /Ff 140[52 4[52 4[52 1[52 5[52 97[{}5 99.6264 /CMITT10 -rf /Fg 135[55 1[47 1[35 46 1[43 49 1[58 3[40 33 3[45 -3[51 36[76 27 27 29[42 28[{}15 99.6264 /CMMI12 rf /Fh -134[59 59 81 59 62 44 44 46 1[62 56 62 93 31 2[31 1[56 -34 51 62 50 62 54 10[85 86 78 62 84 1[77 84 1[106 67 -2[42 1[88 70 2[81 1[85 6[31 4[56 1[56 56 56 2[31 37 32[62 -12[{}43 99.6264 /CMBX12 rf /Fi 134[50 4[40 10[25 56 2[51 -13[104 73 2[61 2[70 3[58 8[70 67[{}11 99.6264 /CMSSBX10 -rf /Fj 152[45 45 102[{}2 90.9091 /CMSY10 rf /Fk 133[48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 1[48 1[48 48 48 12[48 1[48 11[48 -1[48 48 48 48 48 7[48 48 48 48 48 48 48 48 48 48 48 1[48 -4[48 33[{}51 90.9091 /CMTT10 rf /Fl 138[80 1[60 13[73 -80 70 1[75 29[101 67[{}7 143.462 /CMSSBX10 rf /Fm 134[85 -85 2[90 63 64 66 1[90 81 90 134 45 2[45 90 81 49 74 90 -72 1[78 11[124 1[90 2[110 121 1[153 3[60 2[101 2[117 -115 122 9[81 81 81 81 81 81 81 2[45 33[90 12[{}38 143.462 -/CMBX12 rf /Fn 149[28 39 39 50 50 7[66 39[0 18[50 1[100 -100 11[77 2[77 1[50 1[100 12[77{}15 99.6264 /CMSY10 rf -/Fo 134[71 71 1[71 75 52 53 55 1[75 67 75 112 37 2[37 -75 67 41 61 75 60 75 65 13[75 3[101 2[81 2[50 2[85 88 -1[97 1[102 9[67 67 2[67 67 67 2[37 45 45[{}36 119.552 -/CMBX12 rf /Fp 134[45 3[50 35 37 1[50 50 49 1[77 23 2[23 -50 1[30 43 50 43 1[47 9[92 64 2[54 2[62 3[53 8[62 67[{}22 -99.6264 /CMSS12 rf /Fq 134[123 123 168 1[129 90 92 95 -1[129 116 129 194 65 2[65 129 116 71 106 129 103 129 -113 12[162 1[173 8[87 2[146 2[168 165 15[116 116 49[{}29 -206.559 /CMBX12 rf /Fr 130[51 51 51 51 51 51 51 51 51 -51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 -51 51 1[51 51 51 51 51 51 51 1[51 51 2[51 51 1[51 51 -51 51 51 2[51 51 51 51 51 51 51 51 51 51 51 51 51 51 -51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 -51 51 1[51 51 1[51 1[51 33[{}83 99.6264 /CMTT12 rf /Fs -134[47 45 65 45 52 32 40 41 45 50 50 55 80 25 45 1[30 -50 45 30 45 50 45 45 50 9[97 2[70 55 2[66 2[87 61 1[51 -38 2[64 66 1[70 11[50 1[50 2[50 1[50 1[30 35 3[40 40 -30 25[57 55 12[{}46 99.6264 /CMTI12 rf /Ft 132[49 43 -51 51 70 51 54 38 38 38 51 54 49 54 81 27 51 30 27 54 -49 30 43 54 43 54 49 2[49 27 49 27 2[73 100 73 73 70 -54 72 76 66 76 73 89 61 76 50 35 73 77 64 66 75 70 69 -73 1[46 1[76 1[27 27 49 49 49 49 49 49 49 49 49 49 49 -27 33 27 76 1[38 38 27 76 2[81 49 14[49 5[54 54 57 11[{}84 -99.6264 /CMR12 rf /Fu 198[67 7[67 2[37 46[{}3 143.462 -/CMSS17 rf /Fv 137[89 1[70 74 66 1[100 97 100 154 46 -2[46 100 97 59 86 1[86 1[93 11[133 132 108 13[116 140 -124 1[129 52[104 12[{}24 206.559 /CMSS17 rf end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 600dpi -TeXDict begin -%%PaperSize: A4 - end -%%EndSetup -%%Page: 1 1 -TeXDict begin 1 0 bop 0 1411 3761 24 v 520 1778 a Fv(The)66 -b(CADUCEUS)e(veri\014cation)i(to)5 b(ol)1274 2179 y(fo)-5 -b(r)65 b(C)f(p)-5 b(rograms)1760 2558 y Fu(1.19)p 0 2702 -V 380 3058 a Ft(V)d(ersion)33 b(Jean-Christophe)h(Filli^)-49 -b(atre,)33 b(Thierry)h(Hub)s(ert)f(and)g(Claude)g(Marc)m(h)m(\023)-46 -b(e)1587 5078 y(June)33 b(23,)g(2009)743 5199 y(INRIA)g(T)-8 -b(eam-Pro)5 b(ject)34 b Fs(Pr)-5 b(oval)42 b Fr(http://proval.lri.fr) -694 5319 y Ft(INRIA)33 b(Sacla)m(y)g(-)1376 5294 y(^)1383 -5319 y(Ile-de-F)-8 b(rance)33 b(&)f(LRI,)h(CNRS)g(UMR)g(8623)814 -5439 y(4,)f(rue)h(Jacques)h(Mono)s(d,)f(91893)e(Orsa)m(y)j(cedex,)g(F) --8 b(rance)p eop end -%%Page: 2 2 -TeXDict begin 2 1 bop 1856 5816 a Ft(2)p eop end -%%Page: 3 3 -TeXDict begin 3 2 bop 0 764 a Fq(F)-19 b(orew)-6 b(ord)0 -1216 y Fp(Caduceus)33 b Ft(is)g(a)f(v)m(eri\014cation)h(to)s(ol)e(for)h -(C)g(programs.)44 b(Programs)32 b(are)g(sp)s(eci\014ed)i(using)f -(annotations)0 1337 y(in)k(sp)s(ecial)g(commen)m(ts.)58 -b(Pro)s(of)36 b(obligations)h(are)f(generated)i(using)f(the)g -Fp(Why)g Ft(to)s(ol)f([12])g(and)h(then)0 1457 y(can)c(b)s(e)g(v)-5 -b(alidated)33 b(using)g(v)-5 b(arious)33 b(pro)s(of)e(assistan)m(ts)k -(or)d(decision)i(pro)s(cedures.)146 1627 y(This)28 b(man)m(ual)e(is)h -(organized)f(as)h(follo)m(ws.)42 b(Chapter)26 b(1)g(is)h(a)f(tutorial,) -h(in)m(tro)s(ducing)h Fp(Caduceus)f Ft(fea-)0 1748 y(tures)k(step)g(b)m -(y)g(step,)h(illustrated)f(with)g(examples.)45 b(Chapter)31 -b(2)f(is)g(a)g(reference)i(man)m(ual,)g(pro)m(viding)0 -1868 y(the)h(complete)h(syn)m(tax)g(of)e(annotations,)h(list)g(of)f -(features,)i(etc.)0 2157 y Fo(License)0 2342 y Ft(The)42 -b Fp(Caduceus)f Ft(certi\014cation)h(to)s(ol)e(is)1517 -2339 y(c)1489 2342 y Fn(\015)g Ft(2003{2006)e(Lab)s(oratoire)i(de)h -(Rec)m(herc)m(he)i(en)e(Informa-)0 2462 y(tique)36 b(\()p -Fr(www.lri.fr)p Ft(\).)54 b(It)36 b(is)f(op)s(en)h(source)g(and)f -(freely)i(a)m(v)-5 b(ailable)35 b(under)h(the)g(terms)g(of)f(the)h(GNU) -0 2582 y(GENERAL)h(PUBLIC)h(LICENSE)h(V)-8 b(ersion)37 -b(2.)57 b(See)37 b(the)h(\014les)g Fr(COPYING)g Ft(and)f -Fr(GPL)h Ft(in)f(the)g(distri-)0 2703 y(bution.)0 2992 -y Fo(Authors)0 3176 y Fp(Caduceus)32 b Ft(is)e(dev)m(elop)s(ed)j(b)m(y) -e(Jean-Christophe)h(Filli^)-49 b(atre,)31 b(Claude)g(Marc)m(h)m(\023) --46 b(e)32 b(and)e(Thierry)i(Hub)s(ert.)0 3465 y Fo(Av)-7 -b(ailabilit)l(y)0 3650 y Ft(The)44 b Fp(Caduceus)f Ft(to)s(ol)f(is)h(a) -m(v)-5 b(ailable)43 b(from)g Fr(http://caduceus.lri.fr/)p -Ft(,)51 b(in)43 b(source)g(and)g(binary)0 3770 y(formats,)33 -b(together)f(with)i(this)f(do)s(cumen)m(tation)g(and)g(examples.)0 -4059 y Fo(Con)l(tact)0 4244 y Ft(General)24 b(questions)i(ab)s(out)e -Fp(Caduceus)h Ft(should)g(b)s(e)f(sen)m(t)h(to)f(the)g(Wh)m(y)h -(mailing)g(list)f(at)g(URL)g Fr(http://)0 4364 y -(lists.gforge.inria.fr/cgi)q(-)t(bi)q(n/ma)q(ilma)q(n/l)q(isti)q(nfo/)q -(why-)5 b(dis)q(cuss)q Ft(.)78 b(Note:)63 b(Only)43 b(the)0 -4485 y(lists)34 b(mem)m(b)s(ers)g(can)f(send)h(messages)g(to)e(the)h -(list.)146 4605 y(F)-8 b(or)34 b(bug)h(rep)s(orts,)h(please)g(use)f -(the)h(bug)f(trac)m(king)g(system)i(at)d Fr(https://gforge.inria.fr/)0 -4725 y(tracker/?atid=4012&group)p 1231 4725 31 4 v 43 -w(id=999&func=browse)p Ft(.)83 b(F)-8 b(or)43 b(securit)m(y)j(reasons,) -h(y)m(ou)e(need)g(to)0 4846 y(register)31 b(b)s(efore)f(submitting)h(a) -f(new)h(bug.)43 b(Please)31 b(create)g(an)f(accoun)m(t)h(there,)g -(where)g(y)m(ou)g(can)f(put)0 4966 y("ProV)-8 b(al")32 -b(for)g(the)h(required)h(\014eld)f("INRIA)g(Researc)m(h)h(Pro)5 -b(ject)34 b(y)m(ou)f(w)m(ork)g(with)h(or)e(w)m(ork)h(in".)1856 -5816 y(3)p eop end -%%Page: 4 4 -TeXDict begin 4 3 bop 1856 5816 a Ft(4)p eop end -%%Page: 5 5 -TeXDict begin 5 4 bop 0 764 a Fq(Chapter)78 b(1)0 1179 -y(T)-19 b(utorial)0 1694 y Fm(1.1)161 b(Basic)53 b(use)g(of)68 -b Fl(Caduceus)0 1905 y Ft(T)-8 b(o)35 b(in)m(tro)s(duce)g(ho)m(w)g(the) -g Fp(Caduceus)h Ft(to)s(ol)e(m)m(ust)h(b)s(e)g(used)h(in)e(practice,)i -(let)f(us)g(start)g(with)g(a)f(trivial)0 2018 y(program:)42 -b(a)30 b(function)i Fr(max)f Ft(computing)g(the)g(maxim)m(um)i(of)d(t)m -(w)m(o)h(in)m(tegers.)44 b(In)31 b(a)f(\014le)i Fr(max.c)p -Ft(,)g(let)f(us)0 2131 y(in)m(tro)s(duce)j(the)f(C)g(function)g -(together)f(with)i(its)f(sp)s(eci\014cation:)p 0 2237 -3748 4 v -2 3140 4 904 v 50 2316 a Fk(/*@)47 b(ensures)145 -2429 y(@)143 b(\\result)46 b(>=)h(x)h(&&)f(\\result)f(>=)h(y)g(&&)145 -2542 y(@)143 b(\\forall)46 b(int)h(z;)g(z)h(>=)f(x)g(&&)g(z)h(>=)f(y)g -(=>)h(z)f(>=)g(\\result)145 2655 y(@*/)50 2768 y(int)g(max\(int)f(x,)h -(int)g(y\))g Fj(f)145 2880 y Fk(if)g(\(x)h(>)f(y\))g(return)f(x;)i -(else)e(return)g(y;)50 2993 y Fj(g)p 3746 3140 V 0 3143 -3748 4 v 0 3296 a Ft(The)38 b(sp)s(eci\014cation)g(of)44 -b Fr(max)38 b Ft(is)f(giv)m(en)h(in)g(the)f(source)h(co)s(de)f(righ)m -(t)h(b)s(efore)f(the)g(function)h(de\014nition)0 3416 -y(in)43 b(a)f(commen)m(t)i(of)e(the)g(shap)s(e)h Fr(/*@)52 -b(...*/)p Ft(.)75 b(An)m(y)45 b Fp(Caduceus)e Ft(annotation)f(is)h -(placed)g(in)g(suc)m(h)h(a)0 3537 y(commen)m(t)32 b(\(or)f(in)g(a)f -(single-line)i(commen)m(t)g Fr(//@)52 b(...)p Ft(\).)44 -b(Note)31 b(that)g(the)g(c)m(haracter)g Fr(@)g Ft(is)h(considered)0 -3657 y(as)h(a)f(blank)h(inside)h(annotations.)146 3777 -y(The)g(sp)s(eci\014cation)g(is)f(here)h(a)e(p)s(ost-condition,)h(in)m -(tro)s(duced)h(b)m(y)g(the)f(k)m(eyw)m(ord)i Fr(ensures)p -Ft(.)45 b(This)0 3898 y(is)40 b(the)g(predicate)h(to)f(b)s(e)g(v)-5 -b(alid)40 b(when)h(the)f(function)g(returns.)66 b(The)41 -b(k)m(eyw)m(ord)h Fr(\\result)f Ft(denotes)0 4018 y(the)30 -b(v)-5 b(alue)31 b(returned)g(b)m(y)g(the)f(function,)h(th)m(us)g(of)f -(t)m(yp)s(e)h Fr(int)f Ft(in)h(this)f(example.)44 b(The)31 -b(p)s(ost-condition)0 4138 y(expresses)h(that)d Fr(\\result)i -Ft(is)e(the)h(smallest)h(in)m(teger)e(greater)h(than)f(or)f(equal)i(to) -f Fr(x)g Ft(and)h Fr(y)f Ft(\(there)h(are)0 4259 y(plen)m(t)m(y)k -(other)f(w)m(a)m(ys)h(to)f(sp)s(ecify)h(the)f Fr(max)g -Ft(function\).)146 4379 y(The)40 b(pro)s(of)e(obligations)g(are)h -(generated)h(in)e(t)m(w)m(o)i(steps.)63 b(First,)40 b(the)f(caduceus)i -(to)s(ol)d(m)m(ust)h(b)s(e)0 4500 y(run)33 b(on)f(the)h(source)h -(\014le)f Fr(max.c)h Ft(with)f(the)g(command:)0 4695 -y Fr(>)52 b(caduceus)h(max.c)0 4890 y Ft(This)42 b(generates)h(sev)m -(eral)g(\014les,)i(some)d(of)f(them)h(in)f(sub-directories.)72 -b(Among)41 b(those)h(\014les,)j(a)c(\014le)0 5010 y(named)28 -b Fr(max.makefile)j Ft(is)e(generated,)g(whic)m(h)g(con)m(tains)g(sev)m -(eral)h(commands)f(to)e(b)s(e)h(run)g(using)g(the)0 5131 -y(standard)33 b Fr(make)h Ft(to)s(ol.)146 5251 y(The)j(second)h(step)f -(is)f(then)h(to)f(generate)g(pro)s(of)g(obligations)g(for)f(some)i(pro) -m(v)m(er.)55 b(If)36 b(the)h(pro)s(ofs)0 5371 y(are)c(to)f(b)s(e)h -(made)g(with)g(the)g Fp(Co)s(q)f Ft(pro)s(of)g(assistan)m(t,)i(the)f -(command)g(is:)0 5567 y Fr(>)103 b(make)52 b(-f)g(max.makefile)i(coq) -1856 5816 y Ft(5)p eop end -%%Page: 6 6 -TeXDict begin 6 5 bop 0 100 a Ft(This)36 b(command)f(will)g(generate)h -(the)f(pro)s(of)e(obligations,)j(together)f(with)g(some)g(Co)s(q)g -Fs(mo)-5 b(deling)42 b Ft(of)0 220 y(the)33 b(C)g(program)f(\(\014le)h -Fr(caduceus_why.v)p Ft(\):)0 442 y Fr(why)52 b([...])h -(why/max_spec.why)0 563 y(why)f([...])h(why/max.why)0 -782 y Ft(and)33 b(then)g(will)g(try)g(to)f(compile)i(the)f(resulting)h -(Co)s(q)e(\014les:)0 1004 y Fr(coqdep)53 b([...])f(coq/max*_why.v)j(>)d -(max.depend)0 1124 y(coqc)g(-I)g(coq)g(coq/max_spec_why.v)0 -1245 y(coqc)g(-I)g(coq)g(coq/max_why.v)0 1464 y Ft(The)38 -b(last)f(\014le)h(con)m(tains)g(t)m(w)m(o)g(pro)s(of)f(obligations)g -(\(t)m(w)m(o)h(lemmas)g(whose)g(pro)s(ofs)f(ha)m(v)m(e)i(to)d(b)s(e)i -(\014lled)0 1584 y(in\);)29 b(see)e(the)g Fp(Why)g Ft(man)m(ual)g(for)f -(more)g(details)h([12].)42 b(On)26 b(this)h(example,)i(the)e -(compilation)g(succeeds,)0 1705 y(b)s(ecause)g(the)e(default)h(tactic)f -(giv)m(en)h(\()p Fr(intuition)p Ft(\))i(solv)m(es)f(the)f(obligations.) -41 b(In)25 b(general,)i(the)f(pro)s(ofs)0 1825 y(of)32 -b(this)h(\014le)g(m)m(ust)h(b)s(e)f(\014lled)g(in)g(man)m(ually)-8 -b(,)34 b(using)h Fr(coqide)f Ft(for)e(instance.)146 1949 -y(As)37 b(an)e(alternativ)m(e)i(to)f Fp(Co)s(q)51 b Ft(let)36 -b(us)h(use)f(the)h Fp(Simplify)f Ft(decision)h(pro)s(cedure.)54 -b(The)37 b Fr(make)g Ft(com-)0 2069 y(mand)c(b)s(ecomes:)0 -2291 y Fr(>)52 b(make)g(-f)g(max.makefile)i(simplify)0 -2510 y Ft(The)34 b(obligations)e(are)h(also)f(disc)m(harged)j -(automatically)e(in)g(that)f(case:)0 2733 y Fr(Running)53 -b(Simplify)h(on)d(proof)i(obligations)0 2853 y(\(.)f(=)f(valid)i(*)e(=) -h(invalid)h(#)f(=)f(timeout/failure\))0 2973 y -(simplify/max_why.sx.all:)58 b(..)51 b(\(2/0/0\))0 3094 -y(total)565 b(:)154 b(2)0 3214 y(valid)565 b(:)154 b(2)52 -b(\(100\045\))0 3335 y(invalid)463 b(:)154 b(0)52 b(\()103 -b(0\045\))0 3455 y(timeout/failure)55 b(:)154 b(0)52 -b(\()103 b(0\045\))0 3674 y Ft(When)59 b(an)e(obligation)g(fails)h -(with)h Fp(Simplify)q Ft(,)k(then)c(no)e(man)m(ual)i(pro)s(of)d(ma)m(y) -j(b)s(e)f(attempted,)0 3794 y(but)68 b(coun)m(ter-examples)j(can)d(b)s -(e)g(obtained)h(b)m(y)g(running)h Fp(Simplify)e Ft(man)m(ually)i(on)e -(the)g(\014le)0 3915 y Fr(simplify/max)p 618 3915 31 -4 v 40 w(why.sx.all)p Ft(.)46 b(It)31 b(ma)m(y)h(help)g(disco)m(v)m -(ering)h(missing)f(pre-conditions)h(for)d(instance.)0 -4223 y Fo(Other)45 b(targets)0 4414 y Ft(The)37 b(generated)f -Fr(makefile)i Ft(con)m(tains)f(man)m(y)g(other)f(targets,)h(for)e -(other)h(pro)m(v)m(ers)h(\()p Fr(cvcl)p Ft(,)h Fr(smtlib)p -Ft(,)0 4535 y(etc.\))44 b(or)32 b(to)s(ols)h(\()p Fr(goals)p -Ft(,)g Fr(gui)p Ft(\).)0 4814 y Fi(CV)m(C)k(Lite)0 5005 -y Ft(The)d(use)f(of)39 b Fp(CV)m(C)34 b(Lite)f Ft(is)g(v)m(ery)h -(similar)f(to)f(the)h(use)h(of)39 b Fp(Simplify)q Ft(.)k(Simply)34 -b(run)0 5227 y Fr(>)52 b(make)g(-f)g(max.makefile)i(cvcl)0 -5446 y Ft(and)31 b Fp(CV)m(C)i(Lite)f Ft(will)g(b)s(e)f(run)h(on)f(the) -h(pro)s(of)f(obligations)g(and)h(results)g(displa)m(y)m(ed.)46 -b(\()p Fp(CV)m(C)32 b(Lite)g Ft(input)0 5567 y(\014les)i(are)e -(generated)i(with)m(tin)f(the)g Fr(cvcl/)h Ft(sub)s(directory)-8 -b(.\))1856 5816 y(6)p eop end -%%Page: 7 7 -TeXDict begin 7 6 bop 0 100 a Fi(PVS)0 285 y Ft(T)-8 -b(o)33 b(use)g(the)g Fp(PVS)g Ft(pro)s(of)f(assistan)m(t,)i(\014rst)f -(run)0 490 y Fr(>)52 b(make)g(-f)g(max.makefile)i(pvs)0 -694 y Ft(It)26 b(generates)g(a)f(bunc)m(h)i(of)e(\014les)i(within)f -(the)g Fr(pvs/)h Ft(sub)s(directory)-8 b(.)42 b(Pro)s(of)25 -b(obligations)h(are)f(con)m(tained)0 815 y(in)33 b(the)g -Fr(pvs/max)p 645 815 31 4 v 39 w(why.pvs)h Ft(\014le.)0 -1076 y Fi(Why)k Fh(GUI)0 1261 y Ft(The)43 b Fp(Why)g -Ft(Graphical)g(User)g(In)m(terface,)j(describ)s(ed)e(in)f(the)g -Fp(Why)f Ft(man)m(ual,)k(ma)m(y)d(b)s(e)g(used)g(for)f(C)0 -1381 y(program,)32 b(b)m(y)i(running)0 1586 y Fr(>)52 -b(make)g(-f)g(max.makefile)i(gui)0 1791 y Ft(Inside)34 -b(this)f(in)m(terface,)h(a)e(C-lik)m(e)i(prett)m(y-prin)m(ter)g(for)e -(form)m(ulas)h(is)g(activ)m(e.)0 2052 y Fh(V)-9 b(eri\014cation)37 -b(Conditions)i(in)e Fi(Why)h Fh(syn)m(tax)0 2237 y Ft(The)c(v)m -(eri\014cation)g(conditions)f(can)g(b)s(e)g(pro)s(duced)g(in)g -Fp(Why)g Ft(syn)m(tax)h(using)f(the)h Fr(goals)f Ft(target:)0 -2442 y Fr(>)52 b(make)g(-f)g(max.makefile)i(goals)0 2646 -y Ft(Files)25 b(are)g(pro)s(duced)h(in)f(the)g Fr(why/)h -Ft(sub)s(directory)-8 b(.)42 b(A)25 b(\014le)h Fr(why/max)p -2495 2646 V 39 w(ctx.why)g Ft(con)m(tains)g(the)f(con)m(text)0 -2767 y(\(sym)m(b)s(ols,)39 b(axioms,)f(etc.\))54 b(and)36 -b(then)h(eac)m(h)g(v)m(eri\014cation)h(condition)e(is)h(con)m(taining)g -(in)f(a)g(separate)0 2887 y(\014le)26 b Fr(why/max)p -513 2887 V 39 w(po)p Fg(i)p Fr(.why)h Ft(with)f Fg(i)i -Ft(=)g(1)p Fg(;)17 b Ft(2)p Fg(;)g(:)g(:)g(:)23 b Ft(This)k(is)f -(useful)h(when)f(the)g(generation)g(of)f(the)h(V)m(Cs)g(tak)m(es)0 -3008 y(time.)55 b(This)37 b(w)m(a)m(y)-8 b(,)38 b(V)m(Cs)f(are)g -(generated)f(only)h(once)g(and)f(then)h Fp(Why)f Ft(\(or)g(its)g -(graphical)h(in)m(terface\))0 3128 y(can)c(b)s(e)g(used)g(to)g(disc)m -(harge)h(the)f(V)m(Cs)g(with)h(v)-5 b(arious)32 b(pro)m(v)m(ers.)0 -3462 y Fm(1.2)161 b(P)l(oin)l(ter)51 b(access)i(and)g(mo)t -(di\014cation)0 3674 y Ft(Let)33 b(us)g(consider)h(no)m(w)f(a)f(small)i -(program)e(in)m(v)m(olving)i(a)e(p)s(oin)m(ter,)i(in)e(a)h(\014le)g -Fr(abs.c)p Ft(:)p 0 3790 3748 4 v -2 4354 4 565 v 50 -3869 a Fk(//@)47 b(ensures)f(*p)h(>=)g(0)50 3982 y(void)f(abs1\(int)g -(*p\))h Fj(f)145 4095 y Fk(if)g(\(*p)g(<)h(0\))f(*p)g(=)h(-*p;)50 -4207 y Fj(g)p 3746 4354 V 0 4358 3748 4 v 0 4519 a Ft(Running)34 -b Fp(Caduceus)g Ft(and)f(then)g Fp(Simplify)g Ft(results)h(in:)0 -4724 y Fr(>)52 b(caduceus)h(abs.c)0 4844 y(generating)h(Why)e(code)g -(for)g(function)i(abs1)0 4965 y(>)e(make)g(-f)g(abs.makefile)i -(simplify)0 5085 y([...])0 5206 y(why)e([...])h(why/abs.why)0 -5326 y([...])0 5446 y(Running)g(Simplify)h(on)d(proof)i(obligations)0 -5567 y(\(.)f(=)f(valid)i(*)e(=)h(invalid)h(#)f(=)f(timeout/failure\)) -1856 5816 y Ft(7)p eop end -%%Page: 8 8 -TeXDict begin 8 7 bop 0 100 a Fr(simplify/abs_why.sx.all:)58 -b(*..)52 b(\(2/1/0\))0 220 y(total)565 b(:)154 b(3)0 -340 y(valid)565 b(:)154 b(2)52 b(\()f(67\045\))0 461 -y(invalid)463 b(:)154 b(1)52 b(\()f(33\045\))0 581 y(timeout/failure)k -(:)154 b(0)52 b(\()103 b(0\045\))0 754 y Ft(so)34 b(it)g(that)g(case,)i -(there)e(are)h(three)f(pro)s(of)g(obligations)g(and)g(only)h(t)m(w)m(o) -f(of)g(them)h(has)f(b)s(een)h(pro)m(v)m(ed.)0 874 y(T)-8 -b(o)33 b(in)m(v)m(estigate)h(the)f(unpro)m(v)m(ed)i(one,)e(w)m(e)g(ma)m -(y)h(run)e Fp(Simplify)i Ft(man)m(ually)g(b)m(y:)0 1047 -y Fr(>)52 b(Simplify)h(simplify/abs_why.sx.all)0 1167 -y(Counterexample:)103 1288 y(context:)205 1408 y(\(AND)308 -1529 y(\(<)e(\(offset)j(p\))d(0\))205 1649 y(\))0 1890 -y(1:)h(Invalid.)0 2130 y(2:)g(Valid.)0 2371 y(3:)g(Valid.)0 -2544 y Ft(The)39 b(coun)m(ter)f(example)i(giv)m(en)f(con)m(tains)f -Fr(<)52 b(\(offset)h(p\))f(0)p Ft(,)39 b(meaning)f(that)g(this)g -(program)g(ma)m(y)0 2664 y(not)46 b(run)h(as)f(exp)s(ected)i(if)e(p)s -(oin)m(ter)h Fr(p)g Ft(is)f(outside)i(its)e(v)-5 b(alid)47 -b(memory)g(blo)s(c)m(k)g(\(see)h(Section)f(2.4\).)0 2785 -y(Indeed,)38 b(a)d(segmen)m(tation)i(fault)e(w)m(ould)h(o)s(ccur)g(in)g -(that)f(case.)53 b(If)36 b(y)m(ou)g(try)g(to)f(use)h -Fp(Co)s(q)g Ft(instead)g(of)0 2905 y Fp(Simplify)q Ft(,)j(y)m(ou)f -(will)g(face)g(the)g(same)h(problem)f(when)h(trying)f(to)f(pro)m(v)m(e) -i(the)f(\014rst)g(obligation:)53 b(y)m(ou)0 3025 y(will)33 -b(end)h(up)e(with)0 3198 y Fr(1)52 b(subgoal)0 3319 y(p)g(:)f(pointer)i -(global)0 3439 y(alloc)g(:)e(alloc_table)0 3559 y -(_________________________)q(____)q(___)q(____)q(__\(1)q(/1\))0 -3680 y(valid)i(alloc)f(p)0 3852 y Ft(whic)m(h)34 b(is)f(not)g(pro)m(v) --5 b(able:)44 b(there)33 b(is)g(no)g(h)m(yp)s(othesis)h(whic)m(h)g -(ensures)h(the)e(v)-5 b(alidit)m(y)33 b(of)g Fr(p)p Ft(.)146 -3965 y(T)-8 b(o)31 b(\014x)g(this)h(problem,)g(one)f(should)g(sp)s -(ecify)h(a)f(pre-condition)g(to)f(function)h Fr(abs)p -Ft(,)h(whic)m(h)g(can)f(b)s(e)0 4078 y(giv)m(en)j(using)f(the)g -Fr(\\valid)h Ft(predicate)g(of)39 b Fp(Caduceus)34 b -Ft(as)e(follo)m(ws:)p 0 4162 3748 4 v -2 4952 4 791 v -50 4241 a Fk(/*@)47 b(requires)e(\\valid\(p\))145 4354 -y(@)j(ensures)e(*p)h(>=)g(0)145 4466 y(@*/)50 4579 y(void)f(abs2\(int)g -(*p\))h Fj(f)145 4692 y Fk(if)g(\(*p)g(<)h(0\))f(*p)g(=)h(-*p;)50 -4805 y Fj(g)p 3746 4952 V 0 4955 3748 4 v 0 5085 a Ft(If)31 -b(y)m(ou)i(run)e Fp(Caduceus)i Ft(again)e(on)g(this)h(v)m(ersion,)i(y)m -(ou)e(will)g(\014rst)g(notice)g(that)f(the)h(\014rst)g(obligation)f(is) -0 5206 y(no)m(w)38 b(automatically)f(disc)m(harged)h(b)m(y)g(Wh)m(y)-8 -b(,)39 b(and)e(as)g(b)s(efore)g Fp(Simplify)h Ft(will)f(succeed)j(to)c -(pro)m(v)m(e)i(the)0 5326 y(others.)43 b(If)27 b(y)m(ou)i(run)f -Fp(Co)s(q)g Ft(instead,)i(then)f(this)f(last)g(obligation)g(will)h(not) -e(b)s(e)i(pro)m(v)m(ed)g(automatically:)0 5446 y(y)m(ou)h(will)h(ha)m -(v)m(e)g(to)f(mak)m(e)h(the)f(pro)s(of)f(b)m(y)h(hand.)43 -b(After)30 b(executing)i(the)e Fr(intuition)i Ft(tactic,)f(the)f(goal)0 -5567 y(to)i(solv)m(e)i(has)f(the)g(follo)m(wing)g(shap)s(e:)1856 -5816 y(8)p eop end -%%Page: 9 9 -TeXDict begin 9 8 bop 0 100 a Fr(p)52 b(:)f(pointer)i(global)0 -220 y(...)0 340 y(intM_global)h(:)e(memory)h(Z)e(global)0 -461 y(...)0 581 y(result0)i(:)f(Z)0 702 y(HW_6)g(:)g(result0)h(=)f(p)f -(#)h(intM_global)0 822 y(...)0 942 y(intM_global0)i(:)e(memory)h(Z)e -(global)0 1063 y(HW_8)h(:)g(intM_global0)i(=)e(upd)g(intM_global)i(p)e -(\(-)f(result0\))0 1183 y(_________________________)q(____)q(___)q -(____)q(__\(1)q(/1\))0 1303 y(p)h(#)f(intM_global0)k(>=)c(0)0 -1471 y Ft(This)27 b(should)f(b)s(e)g(read)f(as)h(follo)m(ws:)40 -b Fr(intM_global)29 b Ft(and)c Fr(intM_global0)k Ft(are)c -Fs(glob)-5 b(al)28 b(memory)g(states)0 1591 y Ft(con)m(taining)i(in)m -(tegers)g(\(in)m(teger)g(memory)-8 b(,)31 b(global\).)42 -b Fr(p)51 b(#)h(intM_global)32 b Ft(denotes)e(the)f(v)-5 -b(alue)30 b(stored)0 1712 y(in)g Fr(intM_global)j Ft(at)c(\\address")i -Fr(p)p Ft(,)f(i.e)h(it)e(is)i(the)f(logical)g(represen)m(tation)h(of)f -(the)g(C)g(expression)i Fr(*p)p Ft(.)0 1832 y Fr(upd)g -Ft(is)f(the)g(logical)g(function)g(represen)m(ting)i(memory)f(up)s -(date:)43 b(\()p Fr(upd)32 b Fg(s)e(p)h(v)t Ft(\))g(is)g(the)g(memory)h -(state)0 1952 y(obtained)j(from)e Fg(s)h Ft(b)m(y)h(putting)g(v)-5 -b(alue)34 b Fg(v)k Ft(at)33 b(\\address")i Fg(p)p Ft(.)48 -b(Addresses)37 b(considered)f(here)f(m)m(ust)g(not)0 -2073 y(b)s(e)40 b(seen)i(as)e(in)m(tegers)i(lik)m(e)g(in)e(a)g(real)g -(computer,)k(but)c(simply)i(an)e(abstract)h(datat)m(yp)s(e)g -Fr(pointer)p Ft(:)0 2193 y(this)33 b(is)g(wh)m(y)h(in)f(the)g(follo)m -(wing)g(w)m(e)h(will)f(refer)g(to)f(them)h(as)g Fs(p)-5 -b(ointers)40 b Ft(instead)34 b(of)e(addresses.)146 2314 -y(So,)j(what)f(should)h(b)s(e)f(pro)m(v)m(ed)h(is)g(that)e(the)i(v)-5 -b(alue)34 b(stored)h(at)e(p)s(oin)m(ter)h Fr(p)h Ft(in)f(the)g(memory)h -(state)0 2434 y Fr(intM_global0)30 b Ft(is)d(non-negativ)m(e.)42 -b(Using)27 b(tactic)g Fr(subst)53 b(intM_global0)p Ft(,)31 -b(w)m(e)d(ha)m(v)m(e)g(to)e(pro)m(v)m(e)i(that)0 2601 -y Fr(HW_3)52 b(:)g(result)h(=)e(p)h(#)f(intM_global)0 -2722 y(HW_4)h(:)g(result)h(<)e(0)0 2842 y(HW_6)h(:)g(result0)h(=)f(p)f -(#)h(intM_global)0 2962 y(_________________________)q(____)q(___)q -(____)q(__\(1)q(/1\))0 3083 y(p)g(#)f(\(upd)h(intM_global)j(p)c(\(-)h -(result0\)\))i(>=)d(0)0 3250 y Ft(but)24 b Fr(p)51 b(#)h(\(upd)g -(intM_global)i(p)e(\(-)g(result0\)\))26 b Ft(is)e(simply)h -Fr(-result0)g Ft(since)g(w)m(e)g(access)g(exactly)0 3371 -y(to)34 b(the)h(v)-5 b(alue)35 b(whic)m(h)h(has)e(just)h(b)s(een)g(up)s -(dated.)50 b(This)35 b(shap)s(e)g Fg(p)f Fr(#)h Ft(\()p -Fr(upd)g Fg(s)f(q)39 b(v)t Ft(\))34 b(will)h(indeed)g(o)s(ccur)0 -3491 y(v)m(ery)j(often)f(when)h(making)f(pro)s(ofs,)h(and)f(it)f -(should)i(b)s(e)f(rewritten)h(in)m(to)f Fg(v)k Ft(when)c -Fg(p)e Ft(=)g Fg(q)40 b Ft(and)d(in)m(to)0 3611 y Fg(p)32 -b Fr(#)h Fg(s)g Ft(otherwise.)45 b(Since)33 b(it)g(o)s(ccurs)g(often,)g -(a)f(tactic)h(has)g(b)s(een)g(made)h(for)e(that,)g(called)h -Fr(caduceus)p Ft(.)0 3732 y(So)40 b(here,)i(the)e(pro)s(of)f(is)i -(simply)g(done)f(using)h(this)f(tactic)g(\(all)g(further)g(reasoning)g -(is)h(pure)f(linear)0 3852 y(arithmetic)33 b(that)g(is)g(done)g -(automatically\).)0 4179 y Fm(1.3)161 b(Arra)l(ys)0 4398 -y Ft(W)-8 b(e)33 b(no)m(w)g(illustrate)h(ho)m(w)f(arra)m(ys)g(are)g -(handled)g(b)m(y)i Fp(Caduceus)p Ft(.)0 4680 y Fo(1.3.1)136 -b(Arra)l(y)45 b(indexing)0 4858 y Ft(Let)28 b(us)h(\014rst)f(consider)h -(a)f(trivial)g(program)g(whic)m(h)h(p)s(erm)m(utes)h(to)d(elemen)m(ts)j -(of)e(an)g(arra)m(y)g(of)f(in)m(tegers:)p 0 4936 3748 -4 v -2 5613 4 678 v 50 5015 a Fk(void)46 b(swap\(int)g(t[],int)g(i,int) -g(j\))h Fj(f)145 5128 y Fk(int)g(tmp)g(=)h(t[i];)145 -5241 y(t[i])f(=)g(t[j];)145 5353 y(t[j])g(=)g(tmp;)50 -5466 y Fj(g)p 3746 5613 V 0 5616 3748 4 v 1856 5816 a -Ft(9)p eop end -%%Page: 10 10 -TeXDict begin 10 9 bop 0 100 a Ft(Running)45 b Fp(Caduceus)g -Ft(on)f(this)g(program,)i(without)e(an)m(y)g(annotation,)i(leads)f(to)e -(t)m(w)m(o)h(obligations)0 213 y(whic)m(h)g(are)f(indeed)h(not)f(pro)m -(v)-5 b(able:)65 b(as)43 b(b)s(efore,)i Fr(t)e Ft(m)m(ust)h(not)f(b)s -(e)g(n)m(ull,)j(but)d(also)g(the)g(indexes)i Fr(i)0 325 -y Ft(and)36 b Fr(j)h Ft(m)m(ust)g(b)s(e)g(v)-5 b(alid.)54 -b(With)37 b Fp(Caduceus)p Ft(,)h(these)g(conditions)f(ma)m(y)g(b)s(e)g -(required)g(using)g(predicate)0 438 y Fr(valid_index)p -Ft(,)f(i.e.)44 b(inserting)33 b(the)g(pre-condition)p -0 543 3748 4 v -2 769 4 226 v 50 622 a Fk(//@)47 b(requires)e -(\\valid_index\(t,i\))e(&&)48 b(\\valid_index\(t,j\))p -3746 769 V 0 772 3748 4 v 0 924 a Ft(As)31 b(this,)g(the)g(obligations) -f(are)g(no)m(w)h(solv)m(ed)h(automatically)e(b)s(oth)g(with)h(Simplify) -g(and)f(Co)s(q.)43 b(Ho)m(w-)0 1037 y(ev)m(er,)34 b(one)f(ma)m(y)g(w)m -(an)m(t)h(to)e(sp)s(ecify)i(the)f(function)g(in)g(more)g(details:)44 -b(for)32 b(example)p 0 1142 V -2 1480 4 339 v 50 1221 -a Fk(/*@)47 b(requires)e(\\valid_index\(t,i\))e(&&)48 -b(\\valid_index\(t,j\))145 1334 y(@)g(ensures)e(t[i])g(==)h -(\\old\(t[j]\))e(&&)j(t[j])e(==)h(\\old\(t[i]\))p 3746 -1480 V 0 1484 3748 4 v 0 1641 a Ft(where)33 b(in)e(the)h(p)s -(ost-condition,)g Fr(\\old)q Ft(\()p Fg(e)p Ft(\))f(means)h(the)g(v)-5 -b(alue)32 b(of)f(expression)i Fg(e)f Ft(b)s(efore)f(execution)i(of)0 -1761 y(the)g(function.)146 1881 y(With)39 b(Simplify)-8 -b(,)41 b(this)e(new)h(sp)s(eci\014cation)f(is)g(still)g(pro)m(v)m(ed)h -(automatically)-8 b(.)62 b(With)38 b(Co)s(q,)j(after)0 -2002 y Fr(intuition;)54 b(subst;)f(auto.)42 b Ft(w)m(e)g(ha)m(v)m(e)g -(2)f(subgoals)g(corresp)s(onding)h(to)f(the)g(t)m(w)m(o)h(terms)g(of)e -(the)0 2122 y(conjunction:)0 2316 y Fr(t)52 b(:)f(pointer)i(global)0 -2437 y(i)f(:)f(Z)0 2557 y(j)h(:)f(Z)0 2678 y(...)0 2798 -y(intM_global)j(:)e(memory)h(Z)e(global)0 2918 y(...)0 -3039 y(result)i(:)e(pointer)j(global)0 3159 y(HW_2)e(:)g(result)h(=)e -(shift)i(t)e(i)0 3279 y(...)0 3400 y(result0)i(:)f(Z)0 -3520 y(HW_4)g(:)g(result0)h(=)f(result)g(#)g(intM_global)0 -3641 y(result1)h(:)f(pointer)h(global)0 3761 y(HW_5)f(:)g(result1)h(=)f -(shift)g(t)g(i)0 3881 y(result2)h(:)f(pointer)h(global)0 -4002 y(HW_6)f(:)g(result2)h(=)f(shift)g(t)g(j)0 4122 -y(HW_7)g(:)g(valid)g(alloc)h(result2)0 4242 y(result3)g(:)f(Z)0 -4363 y(HW_8)g(:)g(result3)h(=)f(result2)h(#)e(intM_global)0 -4483 y(...)0 4604 y(intM_global0)j(:)e(memory)h(Z)e(global)0 -4724 y(HW_10)i(:)e(intM_global0)k(=)c(upd)h(intM_global)i(result1)g -(result3)0 4844 y(result4)f(:)f(pointer)h(global)0 4965 -y(HW_11)g(:)e(result4)i(=)f(shift)g(t)g(j)0 5085 y(...)0 -5206 y(intM_global1)i(:)e(memory)h(Z)e(global)0 5326 -y(HW_13)i(:)e(intM_global1)k(=)c(upd)h(intM_global0)j(result4)e -(result0)0 5446 y(_________________________)q(____)q(___)q(____)q -(__\(1)q(/2\))0 5567 y(shift)g(t)e(i)h(#)f(intM_global1)k(=)c(shift)i -(t)e(j)h(#)f(intM_global)1832 5816 y Ft(10)p eop end -%%Page: 11 11 -TeXDict begin 11 10 bop 0 340 a Fr(_________________________)q(____)q -(___)q(____)q(__\(2)q(/2\))0 461 y(shift)53 b(t)e(j)h(#)f(intM_global1) -k(=)c(shift)i(t)e(i)h(#)f(intM_global)0 676 y Ft(W)-8 -b(e)34 b(meet)g(here)g(for)f(the)h(\014rst)g(time)g(the)g(function)g -Fr(shift)p Ft(:)47 b(\()p Fr(shift)34 b Fg(p)g(i)p Ft(\))f(denotes)i -(in)f(the)g(logic)f(the)0 796 y(C)d(expression)i Fg(p)16 -b Ft(+)g Fg(i)31 b Ft(\(p)s(oin)m(ter)f(arithmetic\),)h(hence)g(\()p -Fr(shift)g Fg(t)f(i)p Ft(\))g(#)g Fg(s)g Ft(denotes)h -Fg(t)p Ft([)p Fg(i)p Ft(])f(in)g(the)g(memory)0 916 y(state)k -Fg(s)p Ft(.)48 b(Dealing)33 b(with)i(p)s(oin)m(ter)f(arithmetic)h(in)f -(general)g(will)h(b)s(e)f(explained)i(in)e(Section)g(2.4.)47 -b(F)-8 b(or)0 1037 y(the)40 b(momen)m(t,)i(w)m(e)f(only)f(ha)m(v)m(e)h -(to)e(deal)h(again)f(with)h(the)g(shap)s(e)g Fg(p)f Fr(#)h -Ft(\()p Fr(upd)g Fg(s)f(q)44 b(v)t Ft(\),)d(b)m(y)f(using)g(the)0 -1157 y Fr(caduceus)i Ft(tactic.)65 b(Ho)m(w)m(ev)m(er,)44 -b(this)c(do)s(es)g(not)g(w)m(ork)g(immediately)-8 b(,)43 -b(b)s(ecause)e(indeed)g(w)m(e)g(do)f(not)0 1278 y(kno)m(w)35 -b(whether)g Fg(i)f Ft(and)f Fg(j)40 b Ft(are)33 b(di\013eren)m(t.)48 -b(So)34 b(the)g(Co)s(q)g(pro)s(of)e(ma)m(y)j(b)s(e)f(made)g(b)m(y)g(a)g -(case)g(reasoning)0 1398 y(suc)m(h)g(as:)0 1615 y Fr(assert)53 -b(\(i=j)f(\\/)g(i<>j\).)103 1735 y(omega.)0 1950 y Ft(and)33 -b(then)g(one)g(ma)m(y)g(conclude)h(with)0 2167 y Fr(subst;)53 -b(caduceus.)0 2382 y Ft(Remaining)43 b(subgoals)g(are)g(solv)m(es)h -(analogously)-8 b(.)74 b(Indeed,)47 b(one)c(should)g(mak)m(e)h(the)f -(pro)s(of)f(script)0 2503 y(shorter)33 b(b)m(y)h(factorizing,)e(lik)m -(e)i(this:)0 2720 y Fr(intros.)0 2840 y(assert)53 b(\(i=j)f(\\/)g -(i<>j\).)103 2961 y(omega.)0 3081 y(intuition;)i(subst;)f(caduceus.)0 -3384 y Fo(1.3.2)136 b(Arra)l(ys)45 b(and)g(lo)t(ops)0 -3566 y Ft(Let)26 b(us)g(no)m(w)h(consider)g(a)e(more)i(complex)g -(example:)41 b(searc)m(hing)28 b(an)d(elemen)m(t)j(in)e(an)g(arra)m(y) --8 b(,)27 b(returning)0 3679 y(its)33 b(index)h(if)e(it)h(exists,)h -(and)f(the)g(\014rst)g(non-existen)m(t)h(index)g(otherwise:)p -0 3807 3748 4 v -2 5613 4 1807 v 50 3886 a Fk(/*@)47 -b(requires)e(\\valid_range\(t,0,n-1\))145 3999 y(@)j(ensures)145 -4111 y(@)143 b(\(0)47 b(<=)h(\\result)d(<)j(n)f(=>)g(t[\\result])e(==)j -(v\))f(&&)145 4224 y(@)143 b(\(\\result)46 b(==)h(n)g(=>)h(\\forall)d -(int)i(i;)g(0)h(<=)f(i)h(<)f(n)g(=>)h(t[i])e(!=)h(v\))145 -4337 y(@*/)50 4450 y(int)g(index\(int)e(t[],)i(int)g(n,)g(int)g(v\))g -Fj(f)145 4563 y Fk(int)g(i)h(=)f(0;)145 4676 y(/*@)g(invariant)e(0)j -(<=)f(i)h(&&)f(\\forall)f(int)g(k;)i(0)f(<=)g(k)h(<)f(i)h(=>)f(t[k])f -(!=)i(v)241 4789 y(@)f(variant)f(n)h(-)h(i)f(*/)145 4902 -y(while)g(\(i)g(<)g(n\))g Fj(f)241 5015 y Fk(if)g(\(t[i])f(==)h(v\))h -(break;)241 5128 y(i++;)145 5241 y Fj(g)145 5353 y Fk(return)e(i;)50 -5466 y Fj(g)p 3746 5613 V 0 5616 3748 4 v 1832 5816 a -Ft(11)p eop end -%%Page: 12 12 -TeXDict begin 12 11 bop 0 100 a Ft(In)36 b(the)h(pre-condition,)g(the)f -(new)h(predicate)g Fr(valid_range)s Ft(\()p Fg(t;)17 -b Ft(0)p Fg(;)g(n)24 b Fn(\000)h Ft(1\))35 b(is)i(used)g(to)e(sp)s -(ecify)j(that)0 220 y(all)h(memory)i(lo)s(cations)f Fg(t)p -Ft([)p Fg(i)p Ft(])g(for)f(0)g Fn(\024)h Fg(i)f Fn(\024)h -Fg(n)27 b Fn(\000)h Ft(1)39 b(are)g(v)-5 b(alid.)65 b(Notice)40 -b(also)f(the)h(use)h(of)e(univ)m(ersal)0 340 y(quan)m(ti\014cation)i -(\()p Fr(\\forall)p Ft(\))g(in)f(the)g(p)s(ost-condition,)i(together)d -(with)i(the)f(sym)m(b)s(ol)g Fr(=>)h Ft(to)e(denote)0 -461 y(logical)32 b(implication.)146 587 y(A)43 b(v)m(ery)h(imp)s(ortan) -m(t)e(no)m(v)m(elt)m(y)j(is)e(for)f(the)h Fr(while)h -Ft(lo)s(op:)62 b(it)43 b(is)g(annotated)f(with)i(an)e(in)m(v)-5 -b(arian)m(t)0 708 y(\(a)35 b(prop)s(ert)m(y)i(whic)m(h)g(holds)g(at)e -(the)i(lo)s(op)e(en)m(trance)i(and)f(is)g(preserv)m(ed)j(b)m(y)e(the)f -(lo)s(op)f(b)s(o)s(dy\))h(and)g(a)0 828 y(v)-5 b(arian)m(t)38 -b(\(a)f(quan)m(tit)m(y)i(whic)m(h)g(decreases)g(at)f(eac)m(h)g(lo)s(op) -f(step)h(for)f(a)h(w)m(ell-founded)h(ordering,)g(th)m(us)0 -948 y(ensuring)30 b(termination\).)43 b(The)30 b(three)g(kinds)h(of)e -(C)g(lo)s(ops)h(can)f(b)s(e)h(annotated)f(\()p Fr(while)p -Ft(,)i Fr(for)p Ft(,)g(and)e Fr(do)0 1069 y(...)52 b(while)p -Ft(\).)146 1195 y(A)47 b(lo)s(op)f(annotation)h(is)g(placed)g(righ)m(t) -g(b)s(efore)g(the)g(lo)s(op;)54 b(the)47 b(k)m(eyw)m(ord)i -Fr(invariant)g Ft(\(resp.)0 1316 y Fr(variant)p Ft(\))d(in)m(tro)s -(duces)g(the)g(in)m(v)-5 b(arian)m(t)45 b(\(resp.)80 -b(the)45 b(v)-5 b(arian)m(t\).)80 b(The)46 b(in)m(v)-5 -b(arian)m(t)45 b(is)g(optional)f(and)0 1436 y(m)m(ust)34 -b(app)s(ear)e(b)s(efore)h(the)g(v)-5 b(arian)m(t)32 b(when)i(presen)m -(t.)146 1563 y(With)41 b(Simplify)-8 b(,)44 b(the)d(\014v)m(e)h(pro)s -(of)e(obligations)h(generated)g(are)g(solv)m(ed)h(automatically)-8 -b(.)68 b(With)0 1683 y(Co)s(q,)39 b(the)f(\014rst)h(one)e(\(whic)m(h)i -(app)s(ears)f(to)g(b)s(e)g(the)g(v)-5 b(alidit)m(y)38 -b(of)f(the)h(in)m(v)-5 b(arian)m(t)39 b(when)f(en)m(tering)h(the)0 -1803 y(lo)s(op\))48 b(is)h(solv)m(ed)h(b)m(y)f Fr(intuition)p -Ft(.)94 b(The)49 b(second)h(one)e(is)h(the)g(v)-5 b(alidit)m(y)50 -b(of)e(the)g(access)j Fr(t[i])e Ft(is)0 1924 y(solv)m(ed)40 -b(b)m(y)g Fr(intuition;)54 b(subst;)f(auto)p Ft(.)62 -b(The)40 b(third)f(one)g(is)g(the)g(p)s(ost-condition,)h(is)f(solv)m -(ed)i(b)m(y)0 2044 y Fr(intuition;)54 b(subst;)f(auto)p -Ft(,)45 b(thanks)e(to)e(the)i(fact)e(the)h(the)h(lo)s(op)e(in)m(v)-5 -b(arian)m(t)42 b(is)h(true)f(at)f(exit)i(of)0 2165 y(the)f(lo)s(op.)69 -b(The)43 b(fourth)e(one)h(is)f(the)h(preserv)-5 b(ation)43 -b(of)e(the)h(in)m(v)-5 b(arian)m(t,)44 b(and)d(needs)i(a)e(little)h -(more)0 2285 y(reasoning:)0 2525 y Fr(intuition.)0 2646 -y(assert)53 b(\(h)f(:)f(kbalance)e(>=)i(0)h -Fj(g)p 3746 5613 V 0 5616 3748 4 v 1832 5816 a Ft(12)p -eop end -%%Page: 13 13 -TeXDict begin 13 12 bop 0 100 a Ft(The)41 b(new)f(thing)g(here)g(is)g -(this)h(last)e Fr(predicate)j Ft(declaration:)58 b(it)40 -b(is)g(simply)h(a)f(de\014nition)g(in)g(the)0 213 y(logic)25 -b(of)g(a)h(new)g(predicate)h Fr(purse_inv)p Ft(,)i(whic)m(h)e(applies)f -(to)g(a)f(\(p)s(oin)m(ter)h(to)f(a\))g(purse,)j(stating)d(that)h(it)0 -325 y(is)31 b(v)-5 b(alid)30 b(and)g(its)h(balance)f(is)h(non-negativ)m -(e.)44 b(One)30 b(ma)m(y)h(no)m(w)g(sp)s(ecify)g(t)m(w)m(o)g(functions) -g(for)f(crediting)0 438 y(and)j(withdra)m(wing)h(money)f(has)g(follo)m -(ws:)p 0 555 3748 4 v -2 2135 4 1581 v 50 634 a Fk(/*@)47 -b(requires)e(purse_inv\(p\))g(&&)i(s)g(>=)h(0)145 747 -y(@)g(ensures)e(purse_inv\(p\))e(&&)j(p->balance)e(==)i -(\\old\(p->balance\))d(+)j(s)145 860 y(@*/)50 972 y(void)f -(credit\(purse)f(*p,int)h(s\))h Fj(f)145 1085 y Fk(p->balance)e(=)j -(p->balance)d(+)i(s;)50 1198 y Fj(g)50 1424 y Fk(/*@)g(requires)e -(purse_inv\(p\))g(&&)i(0)g(<=)h(s)f(<=)g(p->balance)145 -1537 y(@)h(ensures)e(purse_inv\(p\))e(&&)j(p->balance)e(==)i -(\\old\(p->balance\))d(-)j(s)145 1650 y(@*/)50 1763 y(void)f -(withdraw\(purse)e(*p,int)i(s\))i Fj(f)145 1876 y Fk(p->balance)d(=)j -(p->balance)d(-)i(s;)50 1989 y Fj(g)p 3746 2135 V 0 2139 -3748 4 v 0 2301 a Ft(Execution)32 b(of)37 b Fp(Caduceus)32 -b Ft(on)f(this)g(\014le)g(pro)s(duces)h(indeed)g(a)e(w)m(arning,)i -(whic)m(h)g(will)f(b)s(e)g(explained)h(in)0 2422 y(the)h(next)g -(section.)45 b(F)-8 b(or)32 b(the)h(momen)m(t,)h(it)e(can)h(b)s(e)g -(safely)g(ignored.)146 2542 y(The)i(four)f(obligations)g(are)g(solv)m -(ed)h(automatically)g(b)m(y)g(Simplify)-8 b(.)49 b(With)34 -b(Co)s(q,)h(the)f(\014rst)g(thing)0 2663 y(to)h(do)g(man)m(ually)i(is)f -(to)f(unfold)h(the)g(de\014nition)g(of)f Fr(purse_inv)p -Ft(,)k(and)c(indeed)i(the)f(\014rst)g(obligation)0 2783 -y(for)c Fr(credit)p Ft(,)i(to)e(sho)m(w)i(that)f(access)h(to)e -Fr(p->balance)j Ft(is)e(v)-5 b(alid,)33 b(is)g(solv)m(ed)h(b)m(y)0 -2989 y Fr(unfold)53 b(purse_inv;)h(intuition.)0 3194 -y Ft(After)33 b(the)g(same)g(tactic,)g(the)g(second)h(obligation)e(for) -g Fr(credit)i Ft(results)g(in)m(to)f(t)m(w)m(o)g(subgoals:)0 -3400 y Fr(p)52 b(:)f(pointer)i(global)0 3520 y(s)f(:)f(Z)0 -3641 y(alloc)i(:)e(alloc_table)0 3761 y(balance_global)k(:)d(memory)g -(Z)g(global)0 3881 y(HW_2)g(:)g(valid)g(alloc)h(p)0 4002 -y(H0)f(:)f(s)h(>=)g(0)0 4122 y(H1)g(:)f(valid)i(alloc)g(p)0 -4242 y(H2)f(:)f(p)h(#)f(balance_global)k(>=)d(0)0 4363 -y(result)h(:)e(Z)0 4483 y(HW_3)h(:)g(result)h(=)e(p)h(#)f -(balance_global)0 4604 y(HW_4)h(:)g(valid)g(alloc)h(p)0 -4724 y(balance_global0)i(:)d(memory)h(Z)e(global)0 4844 -y(HW_5)h(:)g(balance_global0)j(=)d(upd)g(balance_global)j(p)c(\(result) -i(+)f(s\))0 4965 y(_________________________)q(____)q(___)q(____)q -(__\(1)q(/2\))0 5085 y(p)g(#)f(balance_global0)k(>=)d(0)0 -5446 y(_________________________)q(____)q(___)q(____)q(__\(2)q(/2\))0 -5567 y(p)g(#)f(balance_global0)k(=)d(p)f(#)h(balance_global)j(+)c(s) -1832 5816 y Ft(13)p eop end -%%Page: 14 14 -TeXDict begin 14 13 bop 0 100 a Ft(W)-8 b(e)46 b(meet)h(again)f(the)h -(notation)e Fg(p)h Ft(#)h Fg(s)e Ft(where)j Fg(s)e Ft(is)g(no)m(w)h -Fr(balance)h Ft(or)e Fr(balance0)p Ft(:)72 b(these)48 -b(are)0 220 y(also)34 b(memory)g(states)h(with)f(in)m(teger)h(memory)f -(cells,)i(they)e(represen)m(t)i(the)e(v)-5 b(alues)35 -b(of)e(the)h Fr(balance)0 340 y Ft(\014eld)k(for)f(eac)m(h)i(p)s(oin)m -(ter)f(to)f(a)g(purse.)60 b(In)38 b(general,)h(there)g(will)f(b)s(e)g -(memory)g(states)h(whose)g(names)0 461 y(corresp)s(onds)26 -b(to)f(names)h(of)e(eac)m(h)i(\014elds)g(of)e(structures,)k(this)e(is)f -(a)g(represen)m(tation)h(of)f(memory)h(states)0 581 y(already)36 -b(presen)m(t)i(in)e(an)g(early)h(w)m(ork)f(on)g(general)g(p)s(oin)m -(ter)h(programs)f(b)m(y)h(Burstall)f([14],)h(and)f(w)m(as)0 -702 y(emphasized)f(b)m(y)e(Bornat)g([13)o(].)146 822 -y(Indeed,)c(the)d(situation)g(is)g(v)m(ery)h(similar)f(to)f(arra)m(ys,) -j(w)m(e)e(again)f(meet)i(the)f(shap)s(e)g Fg(p)f Fr(#)h -Ft(\()p Fr(upd)g Fg(s)g(q)j(v)t Ft(\),)0 942 y(and)k(the)g(pro)s(ofs)f -(are)g(done)h(b)m(y)0 1124 y Fr(subst;)53 b(caduceus.)0 -1307 y Ft(for)32 b(eac)m(h)i(subgoals.)44 b(The)33 b(situation)g(is)g -(almost)g(the)g(same)h(for)e Fr(withdraw)p Ft(.)0 1636 -y Fm(1.5)161 b(Calling)52 b(functions)0 1847 y Ft(The)37 -b(next)h(step)f(in)g(this)g(tutorial)g(is)g(to)f(deal)h(with)g -(function)g(call.)55 b(Let)37 b(us)g(use)h(again)e(our)g -Fr(purse)0 1960 y Ft(structure,)e(and)f(consider)h(a)e(simple)i(test:)p -0 2053 3748 4 v -2 3069 4 1017 v 50 2132 a Fk(/*@)47 -b(requires)e(purse_inv\(p1\))f(&&)k(purse_inv\(p2\))145 -2245 y(@)g(ensures)e(\\result)f(==)j(0)145 2358 y(@*/)50 -2471 y(int)f(test1\(purse)d(*p1,)j(purse)f(*p2\))h Fj(f)241 -2584 y Fk(p1->balance)d(=)k(0;)241 2696 y(credit\(p2,100\);)241 -2809 y(return)e(p1->balance;)50 2922 y Fj(g)p 3746 3069 -V 0 3072 3748 4 v 146 3212 a Ft(This)35 b(function)f(requires)h(three)f -(pro)s(of)f(obligations,)h(t)m(w)m(o)g(of)f(them)h(b)s(eing)g(solv)m -(ed)h(b)m(y)f(Simplify)-8 b(.)0 3332 y(Unfortunately)g(,)36 -b(this)g(time)f(the)g(coun)m(ter-example)i(prop)s(osed)e(b)m(y)h -(Simplify)g(is)f(not)g(easy)h(to)e(in)m(ter-)0 3452 y(pret.)44 -b(Let's)33 b(go)f(to)f(Co)s(q)i(pro)s(ofs:)43 b(the)33 -b(\014rst)f(obligation)g(is)h(to)f(sho)m(w)h(the)g(v)-5 -b(alidit)m(y)33 b(of)f(use)h(of)f(p)s(oin)m(ter)0 3573 -y Fr(p1)h Ft(in)g Fr(p1->balance)54 b(=)e(0)p Ft(,)32 -b(it)h(is)g(solv)m(ed)h(b)m(y)0 3755 y Fr(unfold)53 b(purse_inv;)h -(intuition.)0 3937 y Ft(The)43 b(second)g(obligation)f(is)g(to)g(sho)m -(w)h(that)f(the)g(pre-condition)h(to)f(call)g(to)f Fr(credit\(p2,100\)) -46 b Ft(is)0 4057 y(v)-5 b(alid,)33 b(that)f(is)h(\(see)h(sp)s -(eci\014cation)g(of)e Fr(credit)p Ft(\))i Fr(purse_inv\(p2\))55 -b(&&)d(100)g(>=)g(0)p Ft(.)43 b(After)0 4239 y Fr(unfold)53 -b(purse_inv;)h(intuition.)0 4360 y(subst.)0 4542 y Ft(w)m(e)34 -b(ha)m(v)m(e)g(to)e(pro)m(v)m(e)0 4724 y Fr(p1)52 b(:)f(pointer)i -(global)0 4844 y(p2)f(:)f(pointer)i(global)0 4965 y(alloc)g(:)e -(alloc_table)0 5085 y(balance_global)k(:)d(memory)g(Z)g(global)0 -5206 y(H3)g(:)f(p1)h(#)g(balance_global)j(>=)c(0)0 5326 -y(H4)h(:)f(p2)h(#)g(balance_global)j(>=)c(0)0 5446 y -(_________________________)q(____)q(___)q(____)q(__\(1)q(/1\))0 -5567 y(p2)h(#)f(\(upd)i(balance_global)i(p1)c(0\))h(>=)g(0)1832 -5816 y Ft(14)p eop end -%%Page: 15 15 -TeXDict begin 15 14 bop 0 100 a Ft(but)27 b(the)g Fr(caduceus)i -Ft(tactic)e(do)s(es)g(not)f(solv)m(e)i(the)f(goal)f(this)i(time,)g(b)s -(ecause)g(indeed)g(the)f(tactic)g(needs)0 220 y(to)k(\014nd)h(whether)g -Fr(p1)g Ft(is)g(equal)g(to)f Fr(p2)g Ft(or)g(not.)43 -b(Although)31 b(it)h(w)m(ould)g(b)s(e)f(pro)m(v)-5 b(able)32 -b(b)m(y)g(cases,)h(at)e(this)0 340 y(p)s(oin)m(t)i(one)h(should)g -(understand)h(that)e(the)h(case)g(where)h Fr(p1=p2)f -Ft(is)g(not)f(supp)s(osed)i(to)e(happ)s(en,)h(and)0 461 -y(indeed)f(the)f(returned)h(v)-5 b(alue)32 b(of)f Fr(test1)i -Ft(w)m(ould)g(not)f(b)s(e)g(0)f(in)h(that)f(case)i(but)f(100.)43 -b(In)32 b(other)f(w)m(ords,)0 581 y(the)j(third)f(obligation,)g(whic)m -(h)i(is)e(the)h(pro)s(of)e(of)h(the)g(p)s(ost-condition,)h(will)f(not)g -(b)s(e)h(pro)m(v)-5 b(able.)45 b(This)0 702 y(is)31 b(an)f(instance)i -(of)e(the)h(so-called)g Fs(p)-5 b(ointer)32 b(aliasing)38 -b Ft(problem,)32 b(and)f(in)f(fact)h(one)f(should)i(a)m(v)m(oid)f(this) -0 822 y(aliasing)i(in)g(the)g(pre-condition)g(of)f Fr(test1)i -Ft(b)m(y)f(requiring)h(also)e Fr(p1)52 b(!=)g(p2)p Ft(.)146 -944 y(With)33 b(that)g(addition,)g(the)g(second)g(obligation)g(is)g -(pro)m(v)-5 b(able)33 b(in)g(Co)s(q)g(with)0 1157 y Fr(unfold)53 -b(purse_inv;)h(intuition.)0 1278 y(subst;)f(caduceus.)146 -1482 y Ft(But)36 b(the)g(third)g(obligation)f(is)h(not)g(pro)m(v)-5 -b(able,)37 b(b)s(oth)e(with)i(Simplify)f(and)g(Co)s(q.)53 -b(The)37 b(problem)0 1595 y(no)m(w)30 b(is)g(that)e(when)j(pro)m(ving)f -(p)s(ost-condition)f(of)g Fr(test1)p Ft(,)i(w)m(e)f(do)f(not)g(see)h -(an)m(ymore)h(the)e(implemen-)0 1708 y(tation)e(of)g -Fr(credit)i Ft(but)f(only)g(its)f(sp)s(eci\014cation,)j(and)e(in)g -(this)g(sp)s(eci\014cation,)i(nothing)d(is)h(said)g(ab)s(out)0 -1821 y(mo)s(di\014cation)34 b(of)f(memory)i(lo)s(cations)f(other)f -(than)h Fr(p->balance)p Ft(.)49 b(Indeed,)36 b(this)e(is)g(wh)m(y)i -Fp(Caduceus)0 1934 y Ft(issues)g(a)d(w)m(arning)i(on)e(function)h -Fr(credit)p Ft(:)48 b(the)34 b(righ)m(t)g(thing)g(to)f(do)h(is)g(to)f -(add)h(an)g Ff(assigns)k Fs(clause)0 2047 y Ft(in)m(to)33 -b(the)g(sp)s(eci\014cation)h(of)e Fr(credit)p Ft(.)45 -b(The)34 b(program)e(no)m(w)h(lo)s(oks)g(lik)m(e)p 0 -2171 3748 4 v -2 4090 4 1920 v 50 2250 a Fk(/*@)47 b(requires)e -(purse_inv\(p\))g(&&)i(s)g(>=)h(0)145 2363 y(@)g(assigns)e(p->balance) -145 2476 y(@)i(ensures)e(purse_inv\(p\))e(&&)j(p->balance)e(==)i -(\\old\(p->balance\))d(+)j(s)145 2589 y(@*/)50 2702 y(void)f -(credit\(purse)f(*p,int)h(s\))h Fj(f)145 2814 y Fk(p->balance)e(=)j -(p->balance)d(+)i(s;)50 2927 y Fj(g)50 3153 y Fk(/*@)g(requires)e -(purse_inv\(p1\))f(&&)k(purse_inv\(p2\))c(&&)j(p1)g(!=)g(p2)145 -3266 y(@)h(ensures)e(\\result)f(==)j(0)145 3379 y(@*/)50 -3492 y(int)f(test1\(purse)d(*p1,)j(purse)f(*p2\))h Fj(f)241 -3605 y Fk(p1->balance)d(=)k(0;)241 3718 y(credit\(p2,100\);)241 -3831 y(return)e(p1->balance;)50 3944 y Fj(g)p 3746 4090 -V 0 4094 3748 4 v 0 4268 a Ft(The)34 b Fs(assigns)41 -b Ft(clause)35 b Fr(assigns)53 b(p->balance)36 b Ft(is)e(v)m(ery)h -(similar)f(to)f(the)h(one)g(of)f(ESC/Ja)m(v)-5 b(a)34 -b([2])f(and)0 4388 y(JML)d([19)o(]:)42 b(it)30 b(sp)s(eci\014es)h(that) -e(no)g(other)h(memory)g(lo)s(cations)g(than)f Fr(p->balance)j -Ft(ma)m(y)e(b)s(e)g(mo)s(di\014ed)0 4509 y(b)m(y)37 b(the)f(function.) -54 b(Of)35 b(course,)j(that)e(mo)s(di\014cation)g(requires)i(to)d(mak)m -(e)i(again)e(the)i(v)m(eri\014cation)g(of)0 4629 y(function)26 -b Fr(credit)p Ft(:)42 b(the)27 b(second)g(obligation)f(is)g(a)g(bit)g -(more)g(complicated,)j(it)d(is)h(nev)m(ertheless)i(solv)m(ed)0 -4750 y(b)m(y)38 b(Simplify)h(automatically)-8 b(,)39 -b(and)f(with)g(Co)s(q)g(the)f(additional)h(assertion)g(is)g(solv)m(ed)h -(b)m(y)g(in)m(tuition)0 4870 y(so)33 b(indeed)h(the)f(same)g(pro)s(of)f -(remains)h(correct.)146 4992 y(Let's)27 b(no)m(w)f(go)g(bac)m(k)g(to)g -(function)g Fr(test1)p Ft(:)41 b(the)27 b(three)f(obligations)g(are)g -(no)m(w)g(solv)m(ed)i(b)m(y)e(Simplify)-8 b(,)0 5112 -y(and)33 b(for)f(the)h(Co)s(q)h(pro)s(of)e(of)g(the)h(third)g -(obligation,)g(after)f Fr(unfold)53 b(purse_inv;)h(intuition)p -Ft(,)36 b(w)m(e)0 5233 y(ha)m(v)m(e)e(to)e(solv)m(e)0 -5446 y Fr(p1)52 b(:)f(pointer)i(global)0 5567 y(p2)f(:)f(pointer)i -(global)1832 5816 y Ft(15)p eop end -%%Page: 16 16 -TeXDict begin 16 15 bop 0 100 a Fr(alloc)53 b(:)e(alloc_table)0 -220 y(balance_global)k(:)d(memory)g(Z)g(global)0 340 -y(HW_2)g(:)g(valid)g(alloc)h(p1)0 461 y(H0)f(:)f(p1)h(=)g(p2)f(->)h -(False)0 581 y(H)g(:)f(valid)i(alloc)f(p1)0 702 y(H3)g(:)f(p1)h(#)g -(balance_global)j(>=)c(0)0 822 y(H1)h(:)f(valid)i(alloc)g(p2)0 -942 y(H4)f(:)f(p2)h(#)g(balance_global)j(>=)c(0)0 1063 -y(balance_global0)k(:)d(memory)h(Z)e(global)0 1183 y(HW_3)h(:)g -(balance_global0)j(=)d(upd)g(balance_global)j(p1)d(0)0 -1303 y(H5)g(:)f(100)h(>=)g(0)0 1424 y(H6)g(:)f(valid)i(alloc)g(p2)0 -1544 y(H7)f(:)f(p2)h(#)g(balance_global0)j(>=)d(0)0 1665 -y(balance_global1)j(:)d(memory)h(Z)e(global)0 1785 y(HW_6)h(:)g(valid)g -(alloc)h(p1)0 1905 y(H8)f(:)f(not_assigns)k(alloc)d(balance_global0)j -(balance_global1)h(\(pset_singleton)f(p2\))0 2026 y(H10)d(:)g(p2)f(#)h -(balance_global1)j(=)d(p2)g(#)f(balance_global0)k(+)d(100)0 -2146 y(H2)g(:)f(valid)i(alloc)g(p2)0 2267 y(H11)f(:)g(p2)f(#)h -(balance_global1)j(>=)d(0)0 2387 y(result)h(:)e(Z)0 2507 -y(HW_7)h(:)g(result)h(=)e(p1)h(#)g(balance_global1)0 -2628 y(_________________________)q(____)q(___)q(____)q(__\(1)q(/1\))0 -2748 y(result)h(=)e(0)0 2907 y Ft(No)m(w)41 b(the)f(imp)s(ortan)m(t)g -(h)m(yp)s(othesis)i(w)m(e)f(ha)m(v)m(e)h(is)e Fr(H8)p -Ft(:)59 b(it)40 b(sp)s(eci\014es)j(that)c(b)s(et)m(w)m(een)k(memory)e -(states)0 3027 y Fr(balance0)i Ft(and)f Fr(balance1)p -Ft(,)j(the)d(only)g(memory)g(lo)s(cation)f(that)g(has)g(b)s(een)h -(assigned)h(is)f(the)f(one)0 3148 y(p)s(oin)m(ted)j(b)m(y)g -Fr(p2)p Ft(.)76 b(So,)46 b(since)f(w)m(e)f(kno)m(w)h(that)e -Fr(p1)g Ft(and)h Fr(p2)g Ft(are)f(di\013eren)m(t)h(\()p -Fr(H0)p Ft(\),)j(w)m(e)d(should)g(ha)m(v)m(e)0 3268 y -Fr(p1)52 b(#)f(balance1)j(=)d(p1)h(#)g(balance0)p Ft(.)45 -b(W)-8 b(e)33 b(pro)s(ceed)h(b)m(y)f(tactics)0 3427 y -Fr(subst)53 b(result.)0 3547 y(rewrite)g(H8;)f(intuition.)0 -3706 y Ft(resulting)34 b(in)e(subgoal)0 3865 y Fr(...)0 -3985 y(_________________________)q(____)q(___)q(____)q(__\(1)q(/1\))0 -4106 y(p1)52 b(#)f(balance_global0)56 b(=)51 b(0)0 4265 -y Ft(whic)m(h)34 b(is)f(pro)m(v)m(ed)h(b)m(y)g Fr(subst;)53 -b(caduceus)p Ft(.)0 4590 y Fm(1.6)161 b(A)53 b(complete)g(example)0 -4809 y Ft(TODO)0 5134 y Fm(1.7)161 b(Other)53 b(features)f(not)h -(already)h(in)g(the)f(tutorial)0 5382 y Fo(1.7.1)136 -b(Other)45 b(annotations)0 5567 y Ft(Beside)34 b(lo)s(op)e -(annotations,)h(there)g(are)g(three)g(other)g(kinds)h(of)e(inner)h -(annotations.)1832 5816 y(16)p eop end -%%Page: 17 17 -TeXDict begin 17 16 bop 0 100 a Fh(In)m(termediate)30 -b(assertions.)99 b Ft(An)26 b(assertion)h(can)f(b)s(e)g(placed)h(at)e -(an)m(y)i(statemen)m(t)g(p)s(oin)m(t.)42 b(A)25 b(pro)s(of)0 -213 y(obligation)32 b(is)h(generated)h(to)e(sho)m(w)i(its)f(v)-5 -b(alidit)m(y)d(.)44 b(Example:)p 0 371 3748 4 v -2 1048 -4 678 v 145 562 a Fk(...)145 675 y(if)j(\(a)h(>)f(b\))g -Fj(f)h Fk(int)f(tmp)g(=)h(a;)f(a)g(=)h(b;)f(b)g(=)h(tmp;)f -Fj(g)145 788 y Fk(/*@)g(assert)f(a)i(<=)f(b)g(*/)145 -901 y(...)p 3746 1048 V 0 1051 3748 4 v 0 1248 a Ft(Suc)m(h)d(an)e -(assertion)h(can)g(b)s(e)f(seen)i(as)f(a)f(cut)h(in)f(the)h(pro)s(of.) -72 b(It)43 b(is)g(a)f(prop)s(ert)m(y)h(a)m(v)-5 b(ailable)43 -b(b)s(elo)m(w)0 1369 y(this)37 b(program)f(p)s(oin)m(t)g(and,)h(con)m -(v)m(ersely)-8 b(,)41 b(it)36 b(is)g(collected)i(b)m(y)f(the)g(up)m(w)m -(ard)g(w)m(eak)m(est)i(preconditions)0 1489 y(computation.)0 -1787 y Fh(Lab)s(els.)99 b Ft(Usual)34 b(C)f(lab)s(els)h(can)f(b)s(e)g -(used)h(in)f(annotations)g(to)f(refer)h(to)g(terms)g(or)g(predicates)h -(at)f(a)0 1900 y(particular)g(program)f(p)s(oin)m(t.)44 -b(Example:)p 0 2058 V -2 2622 4 565 v 145 2250 a Fk(L:)145 -2362 y(/*@)j(invariant)e(i)j(>=)f(\\at\(i,L\))f(*/)145 -2475 y(while)h(\(i++)f(<)i(N\))f(...)p 3746 2622 V 0 -2625 3748 4 v 0 2823 a Ft(When)29 b(there)g(is)g(no)f(a)m(v)-5 -b(ailable)29 b(lab)s(el)g(in)f(the)h(co)s(de,)h(it)e(is)h(p)s(ossible)g -(to)f(insert)i(a)e(\\logical")f(lab)s(el)i(using)0 2936 -y(the)k(follo)m(wing)g(annotation:)p 0 3094 V -2 3658 -4 565 v 145 3285 a Fk(/*@)47 b(label)g(L)g(*/)145 3398 -y(/*@)g(invariant)e(i)j(>=)f(\\at\(i,L\))f(*/)145 3511 -y(while)h(\(i++)f(<)i(N\))f(...)p 3746 3658 V 0 3661 -3748 4 v 0 3923 a Fh(Sp)s(ecifying)36 b(pieces)f(of)f(co)s(de.)98 -b Ft(It)30 b(is)g(p)s(ossible)h(to)f(giv)m(e)h(a)e(sp)s(eci\014cation)i -(to)f(an)g(inner)g(statemen)m(t)0 4036 y(\(whic)m(h)k(ma)m(y)f(b)s(e)g -(a)f(blo)s(c)m(k)i(or)e(not\).)43 b(The)34 b(syn)m(tax)g(is)f(the)g -(same)h(as)e(a)h(function)g(sp)s(eci\014cation:)p 0 4200 -V -2 4877 4 678 v 145 4392 a Fk(...)145 4505 y(/*@)47 -b(ensures)f(a)h(<=)h(b)f(*/)145 4618 y(if)g(\(a)h(>)f(b\))g -Fj(f)h Fk(int)f(tmp)g(=)h(a;)f(a)g(=)h(b;)f(b)g(=)h(tmp;)f -Fj(g)145 4731 y Fk(...)p 3746 4877 V 0 4881 3748 4 v -0 5078 a Ft(Con)m(trary)35 b(to)f(the)g Fr(assert)i Ft(annotation,)e -(the)h(sp)s(eci\014ed)h(statemen)m(t)g(is)e(seen)i(as)e(a)g(blac)m(k)h -(b)s(o)m(x,)g(as)g(if)0 5198 y(it)c(w)m(ould)h(b)s(e)f(a)g(function)g -(call.)43 b(In)31 b(particular,)h(the)f(w)m(eak)m(est)j(precondition)e -(computation)f(will)h(not)0 5319 y(en)m(ter)i(this)f(statemen)m(t.)146 -5446 y(Inner)23 b(sp)s(eci\014cations)h(ma)m(y)f(b)s(e)f(used)h(to)e -(help)i(automatic)f(decision)h(pro)s(cedures)h(or)d(to)h(reduce)h(the)0 -5567 y(size)34 b(of)e(pro)s(of)g(obligations)g(\(there)i(w)m(ould)f(b)s -(e)g(more)g(n)m(umerous)h(but)f(smaller)g(pro)s(of)f(obligations\).) -1832 5816 y(17)p eop end -%%Page: 18 18 -TeXDict begin 18 17 bop 0 100 a Fo(1.7.2)136 b(Logical)46 -b(declarations)0 5454 y Ft(Analogously)40 b(to)g(the)g -Fr(predicate)i Ft(declaration)e(seen)h(in)e(Section)i(1.4,)g(it)e(p)s -(ossible)i(to)f(in)m(tro)s(duce)0 5567 y(logical)32 b(functions,)i(and) -f(axioms)g(on)g(them:)1832 5816 y(18)p eop end -%%Page: 19 19 -TeXDict begin 19 18 bop 0 3 3748 4 v -2 5536 4 5533 v -50 82 a Fk(/*@)47 b(predicate)e(is_min\(int)g(t[],int)h(n,int)g(min\))h -Fj(f)145 195 y Fk(@)239 b(\(\\forall)45 b(int)i(i;)g(0)h(<=)f(i)g(<)h -(n)f(=>)g(min)g(<=)h(t[i]\))e(&&)145 308 y(@)239 b(\(\\exists)45 -b(int)i(i;)g(0)h(<=)f(i)g(<)h(n)f(&&)g(min)g(==)h(t[i]\))145 -421 y(@)g Fj(g)145 534 y Fk(@*/)50 760 y(/*@)f(requires)e(n)j(>)f(0)h -(&&)f(\\valid_range\(t,0,n\))145 873 y(@)h(ensures)e -(is_min\(t,n,\\result\))145 986 y(@*/)50 1099 y(int)h(min\(int)f -(t[],int)f(n\))j Fj(f)145 1211 y Fk(int)f(i;)145 1324 -y(int)g(tmp)g(=)h(t[0];)145 1437 y(/*@)f(invariant)e(1)j(<=)f(i)h(<=)f -(n)g(&&)g(is_min\(t,i,tmp\))241 1550 y(@)g(variant)f(n-i)241 -1663 y(@*/)145 1776 y(for)h(\(i=1)g(;)g(i)h(<)f(n;)g(i++\))g -Fj(f)288 1889 y Fk(if)h(\(t[i])e(<)h(tmp\))g(tmp)g(=)g(t[i];)145 -2002 y Fj(g)145 2115 y Fk(return)f(tmp;)50 2228 y Fj(g)50 -2453 y Fk(/*@)h(logic)f(int)h(min\(int)f(t[],int)g(n\))h(reads)f(t[*])h -(*/)50 2566 y(/*@)g(logic)f(int)h(max\(int)f(t[],int)g(n\))h(reads)f -(t[*])h(*/)50 2792 y(/*@)g(axiom)f(min_is_min:)145 2905 -y(@)191 b(\\forall)46 b(int)h(t[];)f(\\forall)g(int)h(n;)g(n)h(>)f(0)h -(=>)f(is_min\(t,n,min\(t,n\)\))145 3018 y(@*/)50 3244 -y(/*@)g(axiom)f(is_min_is_min:)145 3357 y(@)191 b(\\forall)46 -b(int)h(t[];)f(\\forall)g(int)h(n;)g(n)h(>)f(0)h(=>)f(\\forall)f(int)g -(m;)145 3470 y(@)430 b(is_min\(t,n,m\))44 b(=>)j(m)g(==)h(min\(t,n\)) -145 3583 y(@*/)50 3808 y(/*@)f(requires)e(\\valid_range\(t,0,n\))e(&&)k -(n)g(>)h(0)145 3921 y(@)g(ensures)145 4034 y(@)239 b(min\(t,n\))45 -b(<=)i(\\result)145 4147 y(@*/)50 4260 y(int)g(average\(int)d(t[],int)i -(n\))h Fj(f)145 4373 y Fk(int)g(i;)145 4486 y(int)g(sum)g(=)h(0;)145 -4599 y(/*@)f(invariant)e(0)j(<=)f(i)h(<=)f(n)g(&&)g(i)h(*)f(min\(t,i\)) -f(<=)h(sum)241 4712 y(@)g(variant)f(n-i)241 4825 y(@*/)145 -4937 y(for)h(\(i=0)g(;)g(i)h(<)f(n;)g(i++\))g Fj(f)288 -5050 y Fk(sum)g(+=)h(t[i];)145 5163 y Fj(g)145 5276 y -Fk(return)e(sum)h(/)h(n;)50 5389 y Fj(g)p 3746 5536 V -0 5539 3748 4 v 1832 5816 a Ft(19)p eop end -%%Page: 20 20 -TeXDict begin 20 19 bop 146 100 a Ft(Missing:)45 b Fr(predicate)35 -b Ft(not)e(de\014ned)h(b)m(y)f(using)i Fr(reads)p Ft(.)0 -388 y Fo(1.7.3)136 b(In)l(v)-7 b(arian)l(t)46 b(declarations)0 -573 y Ft(Global)34 b(in)m(v)-5 b(arian)m(ts)36 b(ma)m(y)g(b)s(e)f -(stated:)49 b(they)36 b(are)f(assertions)i(that)e(m)m(ust)h(hold)f(at)f -(en)m(trance)j(and)e(at)0 694 y(exit)e(of)f(functions.)45 -b(Example:)p 0 833 3748 4 v -2 1849 4 1017 v 50 912 a -Fk(struct)h Fj(f)145 1024 y Fk(int)h(x;)145 1137 y(int)g(y;)50 -1250 y Fj(g)h Fk(s;)50 1363 y(/*@)f(invariant)e(s_intervals:)f(0)k(<=)f -(s.x)g(&&)g(s.x)g(<=)g(s.y)g(&&)g(s.y)g(<=)g(100)g(*/)50 -1589 y(int)g(c)g(=)h(12;)50 1702 y(/*@)f(invariant)e(const_c)h(:)h -(c==12)g(*/)p 3746 1849 V 0 1852 3748 4 v 146 2037 a -Ft(F)-8 b(or)34 b(example,)i(with)f(the)g(follo)m(wing)g(function,)g -(in)m(v)-5 b(arian)m(t)35 b Fr(s)p 2421 2037 31 4 v 37 -w(intervals)i Ft(is)e(b)s(oth)f(assumed)i(as)0 2150 y(pre-condition)e -(and)f(required)i(as)e(p)s(ost-condition,)h(and)f Fr(const)p -2412 2150 V 38 w(c)h Ft(is)g(assumed)h(\(but)e(not)g(required)0 -2263 y(since)h Fr(c)f Ft(is)g(not)f(mo)s(di\014ed\).)p -0 2383 3748 4 v -2 3060 4 678 v 50 2462 a Fk(/*@)47 b(requires)e(n>=0)i -(@*/)50 2575 y(void)f(f\(int)h(n\))g Fj(f)145 2688 y -Fk(int)g(t)h(=)f(s.x+n;)145 2801 y(if)g(\(t)h(<=)f(s.y)g(-)g(20\))g -(s.x)g(=)g(t)h(+)f(c)h(;)50 2913 y Fj(g)p 3746 3060 V -0 3064 3748 4 v 1832 5816 a Ft(20)p eop end -%%Page: 21 21 -TeXDict begin 21 20 bop 0 764 a Fq(Chapter)78 b(2)0 1179 -y(Reference)g(man)-6 b(ual)0 1631 y Fp(Caduceus)34 b -Ft(is)f(in)m(v)m(ok)m(ed)i(as)e(a)f(batc)m(h)h(compiler:)1341 -1823 y Fr(caduceus)i Ft([)p Fs(options)8 b Ft(])32 b -Fs(\014le)7 b Fr(.c)0 2153 y Fm(2.1)161 b(Command)53 -b(line)g(options)0 2373 y Fh(Generic)38 b(options:)0 -2572 y Fr(--help)50 b Ft(:)244 2732 y(Giv)m(e)33 b(usage)g(and)g(exit.) -0 2931 y Fr(--version)51 b Ft(:)244 3091 y(Giv)m(e)33 -b Fp(Caduceus)h Ft(v)m(ersion)g(n)m(um)m(b)s(er)g(and)f(exit.)0 -3291 y Fr(-v)49 b Ft(:)244 3450 y(V)-8 b(erb)s(ose)33 -b(mo)s(de.)0 3650 y Fr(-q)49 b Ft(:)244 3810 y(Quiet)33 -b(mo)s(de)g(\(default\).)0 4009 y Fr(--werror)51 b Ft(:)244 -4169 y(T)-8 b(urn)33 b(w)m(arnings)h(as)f(errors.)43 -b Fp(Caduceus)34 b Ft(will)f(stop)g(on)g(the)g(\014rst)g(w)m(arning.)0 -4368 y Fr(-d)49 b Ft(:)244 4528 y(Debugging)33 b(mo)s(de.)46 -b(In)34 b(this)g(mo)s(de,)g Fp(Caduceus)h Ft(details)f(ev)m(erything)h -(it)f(do)s(es,)g(prin)m(ting)g(a)f(lot)244 4649 y(of)f(material)h(on)f -(error)h(output.)43 b(Not)33 b(of)f(use)h(for)f(the)h(casual)h(user.)0 -4848 y Fh(Ov)m(erall)k(options:)0 5047 y Fr(-parse-only)52 -b Ft(:)244 5207 y(Stop)32 b(after)h(parsing.)0 5407 y -Fr(-type-only)51 b Ft(:)244 5567 y(Stop)32 b(after)h(t)m(yp)s(e-c)m -(hec)m(king.)1832 5816 y(21)p eop end -%%Page: 22 22 -TeXDict begin 22 21 bop 0 100 a Fh(Pre-pro)s(cessing)38 -b(options:)0 328 y Fr(-no-cpp)51 b Ft(:)244 502 y(T)-8 -b(urn)33 b(o\013)f(the)h(pre-pro)s(cessing.)0 730 y Fr(-cpp)38 -b Fe(c)-6 b(ommand)60 b Ft(:)244 904 y(Set)33 b(the)g(pre-pro)s -(cessor.)45 b(It)33 b(m)m(ust)h(b)s(e)f(an)f(executable)j(taking)e(the) -g(\014le)g(to)g(b)s(e)g(pre-pro)s(cessed)244 1025 y(on)i(its)g(command) -h(line)g(and)f(prin)m(ting)g(its)h(output)f(on)g(the)g(standard)h -(output.)50 b(The)36 b(default)244 1145 y(v)-5 b(alue)33 -b(is)g Fr(gcc)52 b(-C)g(-E)p Ft(.)0 1373 y Fr(-E)d Ft(:)244 -1547 y(Stop)j(after)g(pre-pro)s(cessing)h(and)f(dump)h(the)g(pre-pro)s -(cessed)g(\014le)g(on)f(standard)g(output)244 1668 y(\(mainly)33 -b(useful)h(for)e(debugging\).)0 1896 y Fh(Pro)s(of)37 -b(obligations)i(generation:)0 2124 y Fr(-why-opt)g Fe(string)60 -b Ft(:)244 2298 y(P)m(ass)34 b(options)f(to)f Fp(Why)h -Ft(\(to)f(b)s(e)h(used)h(in)f(the)g(generated)g Fr(Makefile)p -Ft(\).)0 2526 y Fr(-s)49 b Ft(:)244 2700 y(Use)33 b(a)g(separate)g -(\014le)g(for)f(eac)m(h)i(C)f(function.)244 2875 y(The)h(default)f(b)s -(eha)m(viour)g(is)h(to)e(generate)i(a)e(single)i Fp(Why)f -Ft(\014le)h(for)e(eac)m(h)i(C)f(\014le)g(and)g(therefore)244 -2995 y(to)39 b(get)h(all)f(pro)s(of)g(obligations)h(for)f(eac)m(h)i(C)f -(\014le)g(in)m(to)g(the)g(same)g(pro)m(v)m(er)h(\014le)f(\(e.g.)65 -b(all)40 b Fp(Co)s(q)244 3115 y Ft(obligations)34 b(in)h -Fr(coq/foo)p 1218 3115 31 4 v 39 w(why.v)g Ft(for)f(a)g(C)h(\014le)g -Fr(foo.c)p Ft(\).)50 b(With)35 b(this)g(option)f Fr(-s)p -Ft(,)i(a)e(separate)244 3236 y Fp(Why)i Ft(\014le)f(is)h(generated)g -(for)e(eac)m(h)i(C)g(function)g(and)f(therefore)h(a)e(separate)i(pro)m -(v)m(er)h(\014le)e(\(e.g.)244 3356 y(the)f(v)m(eri\014cation)h(of)e(a)g -(function)h Fr(f)f Ft(from)g Fr(foo.c)i Ft(will)f(generate)g(pro)s(of)f -(obligations)g(in)m(to)h(the)244 3476 y Fp(Co)s(q)e Ft(\014le)h -Fr(coq/foo)p 960 3476 V 999 3476 V 76 w(f)p 1087 3476 -V 37 w(why.v)p Ft(\).)0 3705 y Fr(-verify)39 b Fe(f,g,h,.)19 -b(.)f(.)67 b Ft(:)244 3879 y(Sp)s(ecify)34 b(the)f(sets)g(of)f -(functions)i(to)e(v)m(erify)-8 b(.)45 b(Implies)34 b -Fr(-s)p Ft(.)0 4107 y Fh(Mo)s(dels)39 b(selection:)0 -4335 y Fr(-no-fp)50 b Ft(:)244 4509 y(T)-8 b(urn)33 b(o\013)f(the)h -(\015oating-p)s(oin)m(t)f(arithmetic)i(mo)s(del.)44 b(See)33 -b(Section)g(2.3.3.)0 4737 y Fr(-int-model)40 b Fe(mo)-6 -b(del)59 b Ft(:)244 4911 y(Selects)34 b(the)f(mo)s(del)g(for)f(in)m -(teger)i(arithmetic.)44 b(See)33 b(Section)h(2.3.1.)0 -5139 y Fh(Pro)m(v)m(er)j(sp)s(eci\014c)h(options:)0 5368 -y Fr(-coq-tactic)i Fe(tactic)55 b Ft(:)244 5542 y(P)m(ass)34 -b(a)e(default)h(Co)s(q)g(tactic)g(to)f Fp(Why)h Ft(\(in)g(the)g -(generated)g Fr(Makefile)p Ft(\).)1832 5816 y(22)p eop -end -%%Page: 23 23 -TeXDict begin 23 22 bop 0 100 a Fm(2.2)161 b(Input)52 -b(Files)h(Syn)l(tax)0 328 y Ft(C)37 b(\014les)g(conform)g(to)f(the)h -(usual)g(ANSI)g(C)g(syn)m(tax)h(and)f(annotations)f(are)h(inserted)h -(in)f(the)g(source)0 448 y(as)c(commen)m(ts.)0 764 y -Fo(2.2.1)136 b(Lexical)46 b(con)l(v)l(en)l(tions)0 957 -y Fh(Co)s(de)0 1151 y Ft(The)34 b(lexical)f(con)m(v)m(en)m(tions)j -(conform)c(to)g(the)h(ANSI)h(C)f(standard)g(\(see)g(for)f(instance)i -([18]\).)0 1438 y Fh(Annotations)0 1631 y Ft(Within)f(annotations)g -(the)g(lexical)h(con)m(v)m(en)m(tions)h(are)d(the)i(same)f(as)g(C)g -(ones,)g(except)h(that:)145 1856 y Fn(\017)49 b Ft(the)33 -b(set)g(of)f(k)m(eyw)m(ords)k(is)d(di\013eren)m(t:)294 -2256 y Fr(\\forall)350 b(\\exists)249 b(int)657 b(float)607 -b(decreases)294 2376 y(\\true)452 b(\\false)300 b(if)708 -b(then)658 b(else)294 2497 y(invariant)248 b(variant)h(for)657 -b(label)607 b(assert)294 2617 y(requires)299 b(ensures)249 -b(assigns)453 b(logic)607 b(axiom)294 2738 y(predicate)248 -b(\\result)h(\\old)606 b(\\block_length)199 b(\\null)294 -2858 y(reads)452 b(\\valid)300 b(\\valid_index)198 b(\\valid_range)250 -b(\\fresh)294 2978 y(\\base_addr)197 b(\\nothing)145 -3284 y Fn(\017)49 b Ft(single-line)42 b(commen)m(ts)i(\(i.e.)70 -b(using)42 b Fr(//)p Ft(\))g(are)f(allo)m(w)m(ed)h(in)g(annotations,)i -(so)d(that)g(y)m(ou)h(can)244 3404 y(put)e(commen)m(ts)i(inside)g -(annotations)e(without)h(messing)g(traditional)f(C)h(compilers.)67 -b(Note)244 3525 y(that)38 b(former)g(syn)m(tax)i(for)d(commen)m(ts)j -(in)f(annotations)f(using)i Fr(\(*)f Ft(and)f Fr(*\))g -Ft(is)h(not)f(a)m(v)-5 b(ailable)244 3645 y(an)m(ymore.)0 -3961 y Fo(2.2.2)136 b(Syn)l(tax)0 4154 y Ft(Annotations)26 -b(are)f(inserted)i(in)m(to)f(programs)f(as)h(sp)s(ecial)g(commen)m(ts)i -(of)d(the)h(shap)s(e)g Fr(/*@)52 b(...)103 b(*/)26 b -Ft(or)0 4275 y(one-line)j(commen)m(ts)i(of)e(the)g(shap)s(e)h -Fr(//@)52 b(...)43 b Ft(Figure)29 b(2.1)f(giv)m(es)j(the)e(syn)m(tax)h -(for)f(the)g(additional)g(C)0 4395 y(constructs)35 b(con)m(taining)e -(annotations;)g(some)h(are)f(C)h(declarations)g(\(non-terminal)f -Fn(h)p Fd(declaration)p Fn(i)p Ft(\))0 4516 y(and)j(some)g(are)g(C)g -(statemen)m(ts)h(\(non-terminal)f Fn(h)p Fd(statemen)m(t)r -Fn(i)p Ft(\).)54 b(Figure)36 b(2.2)f(giv)m(es)i(the)f(syn)m(tax)h(for)0 -4636 y(the)c(annotations.)0 4996 y Fm(2.3)161 b(Arithmetic)0 -5253 y Fo(2.3.1)136 b(In)l(teger)46 b(arithmetic)0 5446 -y Ft(The)38 b(mo)s(del)f(used)h(for)e(in)m(teger)h(arithmetic)h(is)f -(con)m(trolled)h(through)e(the)h Fr(-int-model)j Ft(option.)56 -b(It)0 5567 y(tak)m(es)34 b(one)f(of)f(the)h(follo)m(wing)g(v)-5 -b(alues:)1832 5816 y(23)p eop end -%%Page: 24 24 -TeXDict begin 24 23 bop 0 3 3761 4 v 50 96 a Fn(h)p Fd(c)p -138 96 30 4 v 35 w(\014le)5 b Fn(i)563 b Ft(::=)100 b -Fn(h)p Fd(declaration)p Fn(i)1677 60 y Fc(?)50 346 y -Fn(h)p Fd(declaration)p Fn(i)299 b Ft(::=)100 b Fn(h)p -Fd(sp)s(ec)6 b Fn(i)33 b(h)p Fd(t)m(yp)s(e)5 b Fn(i)33 -b(h)p Fd(iden)m(ti\014er)7 b Fn(i)34 b Fr(\()f Fn(h)p -Fd(parameter)7 b Fn(i)2824 310 y Fc(?)2824 371 y Fr(,)2912 -346 y(\))32 b(;)1000 469 y Fn(j)100 b(h)p Fd(sp)s(ec)6 -b Fn(i)33 b(h)p Fd(t)m(yp)s(e)5 b Fn(i)33 b(h)p Fd(iden)m(ti\014er)7 -b Fn(i)34 b Fr(\()f Fn(h)p Fd(parameter)7 b Fn(i)2824 -433 y Fc(?)2824 494 y Fr(,)2912 469 y(\))32 b Fn(h)p -Fd(blo)s(c)m(k)6 b Fn(i)33 b Fr(;)1000 592 y Fn(j)100 -b Fr(/*@)33 b(logic)h Fn(h)p Fd(logic)p 1843 592 V 35 -w(t)m(yp)s(e)5 b Fn(i)33 b(h)p Fd(iden)m(ti\014er)7 b -Fn(i)34 b Fr(\()f Fn(h)p Fd(logic)p 2953 592 V 35 w(parameter)7 -b Fn(i)3461 556 y Fc(?)3461 617 y Fr(,)3549 592 y(\))1128 -715 y Ft([)32 b Fn(f)g(h)p Fd(term)p Fn(i)h(g)f(j)h Fr(reads)g -Fn(h)p Fd(lo)s(cation)p Fn(i)2428 678 y Fb(+)2428 739 -y Fr(,)2519 715 y Ft(])g Fr(*/)1000 837 y Fn(j)100 b -Fr(/*@)33 b(predicate)i Fn(h)p Fd(iden)m(ti\014er)7 b -Fn(i)34 b Fr(\()e Fn(h)p Fd(logic)p 2625 837 V 35 w(parameter)7 -b Fn(i)3133 801 y Fc(?)3133 862 y Fr(,)3222 837 y(\))1128 -960 y Ft([)32 b Fn(f)g(h)p Fd(predicate)5 b Fn(i)34 b(g)e(j)h -Fr(reads)g Fn(h)p Fd(lo)s(cation)p Fn(i)2623 924 y Fb(+)2623 -985 y Fr(,)2714 960 y Ft(])g Fr(*/)1000 1083 y Fn(j)100 -b Fr(/*@)33 b(axiom)h Fn(h)p Fd(iden)m(ti\014er)7 b Fn(i)34 -b Fr(:)43 b Fn(h)p Fd(predicate)5 b Fn(i)34 b Fr(*/)1000 -1203 y Fn(j)100 b Fr(/*@)33 b(invariant)i Fn(h)p Fd(iden)m(ti\014er)7 -b Fn(i)34 b Fr(:)43 b Fn(h)p Fd(predicate)5 b Fn(i)34 -b Fr(*/)1000 1324 y Fn(j)100 b Fr(/*@)33 b(ghost)h Fn(h)p -Fd(logic)p 1843 1324 V 35 w(t)m(yp)s(e)5 b Fn(i)33 b(h)p -Fd(iden)m(ti\014er)7 b Fn(i)34 b Ft([)f Fr(=)f Fn(h)p -Fd(term)p Fn(i)h Ft(])g Fr(*/)50 1574 y Fn(h)p Fd(assigned)p -447 1574 V 36 w(lo)s(cs)t Fn(i)218 b Ft(::=)100 b Fn(h)p -Fd(lo)s(cation)p Fn(i)1545 1538 y Fb(+)1545 1599 y Fr(,)1635 -1574 y Fn(j)32 b Fr(\\nothing)50 1827 y Fn(h)p Fd(sp)s(ec)6 -b Fn(i)583 b Ft(::=)100 b Fr(/*@)33 b Ft([)f Fr(requires)j -Fn(h)p Fd(predicate)5 b Fn(i)34 b Ft(])e([)h Fr(assigns)h -Fn(h)p Fd(assigned)p 3229 1827 V 36 w(lo)s(cs)t Fn(i)f -Ft(])1128 1947 y([)f Fr(ensures)j Fn(h)p Fd(predicate)5 -b Fn(i)33 b Ft(])g([)f Fr(decreases)j Fn(h)p Fd(v)-5 -b(arian)m(t)r Fn(i)33 b Ft(])f Fr(*/)50 2198 y Fn(h)p -Fd(statemen)m(t)r Fn(i)349 b Ft(::=)100 b Fn(h)p Fd(lo)s(op)p -1355 2198 V 34 w(annot)r Fn(i)32 b Fr(while)i(\()f Fn(h)p -Fd(expr)7 b Fn(i)33 b Fr(\))g Fn(h)p Fd(statemen)m(t)r -Fn(i)1000 2318 y(j)100 b(h)p Fd(lo)s(op)p 1355 2318 V -34 w(annot)r Fn(i)32 b Fr(do)h Fn(h)p Fd(statemen)m(t)r -Fn(i)h Fr(while)g(\()f Fn(h)p Fd(expr)7 b Fn(i)33 b Fr(\))1000 -2439 y Fn(j)100 b(h)p Fd(lo)s(op)p 1355 2439 V 34 w(annot)r -Fn(i)32 b Fr(for)i(\()e Fn(h)p Fd(statemen)m(t)r Fn(i)i -Fr(;)f Fn(h)p Fd(statemen)m(t)r Fn(i)h Fr(;)f Ft([)f -Fn(h)p Fd(expr)7 b Fn(i)33 b Ft(])g Fr(\))1128 2559 y -Fn(h)p Fd(statemen)m(t)r Fn(i)1000 2679 y(j)100 b Fr(/*@)33 -b(assert)h Fn(h)p Fd(predicate)5 b Fn(i)33 b Fr(*/)1000 -2800 y Fn(j)100 b Fr(/*@)33 b(label)h Fn(h)p Fd(iden)m(ti\014er)7 -b Fn(i)34 b Fr(*/)1000 2920 y Fn(j)100 b(h)p Fd(sp)s(ec)6 -b Fn(i)33 b(h)p Fd(statemen)m(t)r Fn(i)1000 3041 y(j)100 -b Fr(/*@)33 b(set)g Fn(h)p Fd(iden)m(ti\014er)7 b Fn(i)34 -b Fr(=)f Fn(h)p Fd(term)p Fn(i)f Fr(*/)50 3291 y Fn(h)p -Fd(lo)s(op)p 277 3291 V 34 w(annot)r Fn(i)308 b Ft(::=)100 -b Fr(/*@)33 b Ft([)f Fr(invariant)j Fn(h)p Fd(predicate)5 -b Fn(i)34 b Ft(])f([)f Fr(loop)p 2702 3291 31 4 v 38 -w(assigns)i Fn(h)p Fd(assigned)p 3522 3291 30 4 v 37 -w(lo)s(cs)t Fn(i)f Ft(])1128 3411 y([)f Fr(variant)j -Fn(h)p Fd(v)-5 b(arian)m(t)r Fn(i)32 b Ft(])g Fr(*/)82 -3532 y Fn(h)p Fd(v)-5 b(arian)m(t)r Fn(i)438 b Ft(::=)100 -b Fn(h)p Fd(term)p Fn(i)32 b Ft([)h Fr(for)g Fn(h)p Fd(iden)m(ti\014er) -7 b Fn(i)34 b Ft(])50 3782 y Fn(h)p Fd(logic)p 290 3782 -V 35 w(t)m(yp)s(e)5 b Fn(i)349 b Ft(::=)100 b Fr(void)33 -b Fn(j)f(h)p Fd(sign)p Fn(i)h Fr(char)g Fn(j)g(h)p Fd(sign)p -Fn(i)f Fr(short)i Fn(j)e(h)p Fd(sign)p Fn(i)h Fr(int)g -Fn(j)f(h)p Fd(sign)p Fn(i)h Fr(long)1000 3903 y Fn(j)100 -b(h)p Fd(sign)p Fn(i)32 b Fr(long)52 b(long)34 b Fn(j)e -Fr(float)i Fn(j)e Fr(double)i Fn(j)f Fr(long)52 b(double)1000 -4023 y Fn(j)100 b(h)p Fd(logic)p 1368 4023 V 35 w(t)m(yp)s(e)5 -b Fn(i)33 b Fr(*)g Fn(j)f(h)p Fd(iden)m(ti\014er)7 b -Fn(i)50 4143 y(h)p Fd(logic)p 290 4143 V 35 w(parameter)g -Fn(i)100 b Ft(::=)g Fn(h)p Fd(logic)p 1368 4143 V 35 -w(t)m(yp)s(e)5 b Fn(i)33 b(h)p Fd(iden)m(ti\014er)7 b -Fn(i)50 4264 y(h)p Fd(sign)p Fn(i)602 b Ft(::=)100 b(\()32 -b Fr(signed)i Fn(j)e Fr(unsigned)j Ft(\)?)50 4514 y Fn(h)p -Fd(lo)s(cation)p Fn(i)431 b Ft(::=)100 b Fn(h)p Fd(term)p -Fn(i)1000 4635 y(j)g(h)p Fd(lo)s(cation)p Fn(i)31 b Fr(.)44 -b Fn(h)p Fd(iden)m(ti\014er)7 b Fn(i)1000 4755 y(j)100 -b(h)p Fd(lo)s(cation)p Fn(i)31 b Fr(->)i Fn(h)p Fd(iden)m(ti\014er)7 -b Fn(i)1000 4876 y(j)100 b Fr(*)32 b Fn(h)p Fd(lo)s(cation)p -Fn(i)1000 4996 y(j)100 b(h)p Fd(lo)s(cation)p Fn(i)31 -b Fr([)i Fn(h)p Fd(term)p Fn(i)g Fr(])1000 5116 y Fn(j)100 -b(h)p Fd(lo)s(cation)p Fn(i)31 b Fr([)i(..)44 b(])g Fn(j)32 -b(h)p Fd(lo)s(cation)p Fn(i)f Fr([)i Fn(h)p Fd(term)p -Fn(i)g Fr(..)44 b(])1000 5237 y Fn(j)100 b(h)p Fd(lo)s(cation)p -Fn(i)31 b Fr([)i(..)44 b Fn(h)p Fd(term)p Fn(i)32 b Fr(])h -Fn(j)f(h)p Fd(lo)s(cation)p Fn(i)g Fr([)h Fn(h)p Fd(term)p -Fn(i)f Fr(..)44 b Fn(h)p Fd(term)p Fn(i)33 b Fr(])p 0 -5415 3761 4 v 930 5618 a Ft(Figure)g(2.1:)43 b(Annotations)33 -b(within)h(C)f(constructs)1832 5816 y(24)p eop end -%%Page: 25 25 -TeXDict begin 25 24 bop 0 3 3761 4 v 94 96 a Fn(h)p Fd(term)p -Fn(i)295 b Ft(::=)99 b Fn(h)p Fd(constan)m(t)r Fn(i)769 -216 y(j)g(h)p Fd(term)p Fn(i)33 b(h)p Fd(arith)p 1458 -216 30 4 v 35 w(op)s Fn(i)f(h)p Fd(term)p Fn(i)769 337 -y(j)99 b Fr(-)33 b Fn(h)p Fd(term)p Fn(i)g(j)f Fr(+)h -Fn(h)p Fd(term)p Fn(i)769 457 y(j)99 b Fr(*)33 b Fn(h)p -Fd(term)p Fn(i)769 577 y(j)99 b(h)p Fd(term)p Fn(i)33 -b Fr(->)g Fn(h)p Fd(iden)m(ti\014er)7 b Fn(i)769 698 -y(j)99 b(h)p Fd(term)p Fn(i)33 b Fr(.)43 b Fn(h)p Fd(iden)m(ti\014er)7 -b Fn(i)769 818 y(j)99 b(h)p Fd(iden)m(ti\014er)7 b Fn(i)34 -b Fr(\()f Fn(h)p Fd(term)p Fn(i)1752 782 y Fb(+)1752 -843 y Fr(,)1843 818 y(\))769 941 y Fn(j)99 b(h)p Fd(term)p -Fn(i)33 b Fr([)g Fn(h)p Fd(term)p Fn(i)f Fr(])769 1061 -y Fn(j)99 b Fr(\()33 b Fn(h)p Fd(term)p Fn(i)g Fr(\))769 -1182 y Fn(j)99 b Fr(\()33 b Fn(h)p Fd(logic)p 1220 1182 -V 35 w(t)m(yp)s(e)5 b Fn(i)34 b Fr(\))e Fn(h)p Fd(term)p -Fn(i)769 1302 y(j)99 b Fr(\\old)34 b(\()f Fn(h)p Fd(term)p -Fn(i)f Fr(\))h Fn(j)f Fr(\\at)h(\()g Fn(h)p Fd(term)p -Fn(i)g Fr(,)f Fn(h)p Fd(iden)m(ti\014er)7 b Fn(i)34 b -Fr(\))769 1422 y Fn(j)99 b Fr(\\result)35 b Fn(j)d Fr(\\null)769 -1543 y Fn(j)99 b(h)p Fd(sym)m(b)s(ol)t Fn(i)33 b Fr(\()g -Fn(h)p Fd(term)p Fn(i)g Fr(\))94 1793 y Fn(h)p Fd(sym)m(b)s(ol)t -Fn(i)191 b Ft(::=)99 b Fr(\\block_length)36 b Fn(j)c -Fr(\\base_addr)769 1914 y Fn(j)99 b Fr(\\abs)34 b Fn(j)e -Fr(\\sqrt)i Fn(j)e Fr(\\round_error)k Fn(j)c Fr(\\total_error)k -Fn(j)c Fr(\\exact)i Fn(j)e Fr(\\model)94 2164 y Fn(h)p -Fd(constan)m(t)r Fn(i)133 b Ft(::=)99 b Fn(h)p Fd(in)m(teger-constan)m -(t)r Fn(i)34 b(j)e(h)p Fd(\015oating-p)s(oin)m(t-constan)m(t)r -Fn(i)94 2415 y(h)p Fd(arith)p 345 2415 V 35 w(op)s Fn(i)148 -b Ft(::=)99 b Fr(+)33 b Fn(j)f Fr(-)h Fn(j)f Fr(*)h Fn(j)f -Fr(/)h Fn(j)f Fr(\045)94 2665 y Fn(h)p Fd(predicate)5 -b Fn(i)101 b Ft(::=)e Fr(\\true)769 2786 y Fn(j)g Fr(\\false)769 -2906 y Fn(j)g(h)p Fd(iden)m(ti\014er)7 b Fn(i)769 3026 -y(j)99 b(h)p Fd(iden)m(ti\014er)7 b Fn(i)34 b Fr(\()f -Fn(h)p Fd(term)p Fn(i)1752 2990 y Fb(+)1752 3051 y Fr(,)1843 -3026 y(\))769 3149 y Fn(j)99 b(h)p Fd(term)p Fn(i)33 -b(h)p Fd(relation)p Fn(i)f(h)p Fd(term)p Fn(i)g Ft([)h -Fn(h)p Fd(relation)p Fn(i)f(h)p Fd(term)p Fn(i)h Ft(])769 -3270 y Fn(j)99 b(h)p Fd(predicate)5 b Fn(i)34 b Fr(=>)f -Fn(h)p Fd(predicate)5 b Fn(i)769 3390 y(j)99 b(h)p Fd(predicate)5 -b Fn(i)34 b Fr(<=>)f Fn(h)p Fd(predicate)5 b Fn(i)769 -3510 y(j)99 b(h)p Fd(predicate)5 b Fn(i)34 b Fr(||)f -Fn(h)p Fd(predicate)5 b Fn(i)769 3631 y(j)99 b(h)p Fd(predicate)5 -b Fn(i)34 b Fr(&&)f Fn(h)p Fd(predicate)5 b Fn(i)769 -3751 y(j)99 b Fr(!)44 b Fn(h)p Fd(predicate)5 b Fn(i)769 -3871 y(j)99 b Fr(if)33 b Fn(h)p Fd(term)p Fn(i)g Fr(then)g -Fn(h)p Fd(predicate)5 b Fn(i)34 b Fr(else)f Fn(h)p Fd(predicate)5 -b Fn(i)769 3992 y(j)99 b Fr(\\forall)35 b Fn(h)p Fd(logic)p -1528 3992 V 35 w(parameter)7 b Fn(i)2036 3956 y Fb(+)2036 -4016 y Fr(,)2128 3992 y(;)32 b Fn(h)p Fd(predicate)5 -b Fn(i)769 4115 y(j)99 b Fr(\\exists)35 b Fn(h)p Fd(logic)p -1528 4115 V 35 w(parameter)7 b Fn(i)2036 4078 y Fb(+)2036 -4139 y Fr(,)2128 4115 y(;)32 b Fn(h)p Fd(predicate)5 -b Fn(i)769 4237 y(j)99 b Fr(\()33 b Fn(h)p Fd(predicate)5 -b Fn(i)34 b Fr(\))769 4358 y Fn(j)99 b Fr(\\old)34 b(\()f -Fn(h)p Fd(predicate)5 b Fn(i)33 b Fr(\))769 4478 y Fn(j)99 -b Fr(\\at)34 b(\()e Fn(h)p Fd(predicate)5 b Fn(i)34 b -Fr(,)f Fn(h)p Fd(iden)m(ti\014er)7 b Fn(i)33 b Fr(\))769 -4598 y Fn(j)99 b Fr(\\valid)34 b(\()f Fn(h)p Fd(term)p -Fn(i)g Fr(\))769 4719 y Fn(j)99 b Fr(\\valid_index)36 -b(\()d Fn(h)p Fd(term)p Fn(i)f Fr(,)h Fn(h)p Fd(term)p -Fn(i)g Fr(\))769 4839 y Fn(j)99 b Fr(\\valid_range)36 -b(\()d Fn(h)p Fd(term)p Fn(i)f Fr(,)h Fn(h)p Fd(term)p -Fn(i)g Fr(,)f Fn(h)p Fd(term)p Fn(i)h Fr(\))769 4960 -y Fn(j)99 b Fr(\\fresh)34 b(\()f Fn(h)p Fd(term)p Fn(i)g -Fr(\))769 5080 y Fn(j)99 b(h)p Fd(iden)m(ti\014er)7 b -Fn(i)34 b Fr(::)44 b Fn(h)p Fd(predicate)5 b Fn(i)94 -5330 y(h)p Fd(relation)p Fn(i)170 b Ft(::=)99 b Fr(==)33 -b Fn(j)f Fr(!=)i Fn(j)e Fr(<)g Fn(j)h Fr(<=)g Fn(j)f -Fr(>)h Fn(j)f Fr(>=)p 0 5378 3761 4 v 1160 5582 a Ft(Figure)g(2.2:)44 -b(Syn)m(tax)33 b(of)g(annotations)1832 5816 y(25)p eop -end -%%Page: 26 26 -TeXDict begin 26 25 bop 0 100 a Fr(-int-model)54 b(exact)244 -257 y Ft(This)33 b(is)f(the)g(default)g(mo)s(del.)43 -b(All)32 b(C)g(in)m(tegers)h(are)e(mapp)s(ed)i(to)e(mathematical)h(in)m -(tegers)h Fs(i.e.)244 377 y Ft(arbitrary)i(precision)h(in)m(tegers.)51 -b(It)35 b(is)g(th)m(us)g(a)g(mo)s(del)g(where)h(all)e(in)m(teger)i -(computations)g(are)244 497 y(assumed)44 b(to)f(b)s(e)f -Fs(exact)p Ft(.)74 b(As)43 b(a)f(consequence,)49 b(a)42 -b(C)h(program)f(pro)m(v)m(ed)i(correct)g(using)f(this)244 -618 y(mo)s(del)33 b(is)g(indeed)h(correct)f Fs(only)i(if)f(no)h(inte)-5 -b(ger)34 b(over\015ow)h(o)-5 b(c)g(curs)34 b(during)h(the)g(exe)-5 -b(cution)p Ft(.)244 775 y(Note)26 b(that)g(in)g(this)h(mo)s(del)f -(there)h(is)g(no)f(range)g(of)f(v)-5 b(alues)27 b(asso)s(ciated)g(to)f -(the)h(C)f(in)m(teger)h(t)m(yp)s(es.)244 895 y(F)-8 b(or)32 -b(instance,)i(if)e Fg(x)h Ft(has)g(t)m(yp)s(e)g Fr(char)p -Ft(,)h(y)m(ou)f(are)g(not)f(able)h(to)g(pro)m(v)m(e)g(that)g -Fn(\000)p Ft(128)27 b Fn(\024)h Fg(x)h(<)e Ft(127.)0 -1089 y Fr(-int-model)54 b(bounded)244 1246 y Ft(In)33 -b(this)h(mo)s(del)f(the)g(user)h Fs(pr)-5 b(oves)40 b -Ft(that)33 b(there)g(is)g(no)g(in)m(teger)h(o)m(v)m(er\015o)m(w)h -(during)e(the)g(program)244 1367 y(execution.)44 b(This)30 -b(means)g(that)f(eac)m(h)h(op)s(eration,)f(including)i(the)e(implicit)h -(con)m(v)m(ersions)i(from)244 1487 y(one)k(in)m(teger)g(t)m(yp)s(e)h -(to)e(another,)i(is)f(giv)m(en)h(a)e(precondition)i(to)e(establish)i -(that)e(the)h(result)h(of)244 1607 y(the)31 b(computation)h(\014ts)f -(in)m(to)g(the)h(target)f(t)m(yp)s(e.)43 b(As)32 b(a)f(coun)m(terpart,) -h(information)f(ab)s(out)f(the)244 1728 y(range)i(of)h(eac)m(h)g(in)m -(teger)g(v)-5 b(ariable)33 b(is)g(pro)m(vided.)244 1885 -y(The)h(sizes)g(of)f(the)g(v)-5 b(arious)33 b(in)m(teger)h(t)m(yp)s(es) -g(can)g(b)s(e)f(set)g(using)h(the)f(follo)m(wing)g(command-line)244 -2005 y(options:)p 964 2127 2077 4 v 962 2247 4 121 v -1014 2211 a(t)m(yp)s(e)p 1523 2247 V 375 w(option)p 2392 -2247 V 597 w(default)g(v)-5 b(alue)p 3039 2247 V 964 -2251 2077 4 v 962 2371 4 121 v 1014 2335 a Fr(char)p -1523 2371 V 357 w(-char-size)p 2392 2371 V 358 w Ft(8)p -3039 2371 V 964 2374 2077 4 v 962 2495 4 121 v 1014 2459 -a Fr(short)p 1523 2495 V 306 w(-short-size)p 2392 2495 -V 307 w Ft(16)p 3039 2495 V 964 2498 2077 4 v 962 2618 -4 121 v 1014 2582 a Fr(int)p 1523 2618 V 408 w(-int-size)p -2392 2618 V 409 w Ft(32)p 3039 2618 V 964 2622 2077 4 -v 962 2742 4 121 v 1014 2706 a Fr(long)p 1523 2742 V -357 w(-long-size)p 2392 2742 V 358 w Ft(32)p 3039 2742 -V 964 2745 2077 4 v 962 2866 4 121 v 1014 2830 a Fr(long)52 -b(long)p 1523 2866 V 101 w(-long-long-size)p 2392 2866 -V 103 w Ft(64)p 3039 2866 V 964 2869 2077 4 v 244 3037 -a(Within)33 b(sp)s(eci\014cations,)i(the)e(minimal)h(and)f(maximal)g(v) --5 b(alue)33 b(of)f(an)m(y)i(C)f(in)m(teger)h(t)m(yp)s(e)f -Fg(\034)44 b Ft(can)244 3158 y(b)s(e)33 b(referred)g(to)f(using)i(the)f -(notation)f Fr(\\min)p 1880 3158 31 4 v 38 w(range\()p -Fg(\034)11 b Fr(\))35 b Ft(and)d Fr(\\max)p 2756 3158 -V 38 w(range\()p Fg(\034)11 b Fr(\))35 b Ft(resp)s(ectiv)m(ely)-8 -b(.)0 3352 y Fr(-int-model)54 b(modulo)244 3509 y Ft(This)29 -b(is)f(the)g(mo)s(del)g(whic)m(h)h(is)f(faithful)g(to)f(the)h(program)f -(execution)j Fs(i.e.)41 b Ft(mo)s(dulo)28 b(arithmetic)244 -3629 y(is)33 b(p)s(erformed)g(as)g(so)s(on)f(as)h(an)g(o)m(v)m(er\015o) -m(w)h(o)s(ccurs.)244 3786 y(Sizes)46 b(of)e(in)m(teger)h(t)m(yp)s(es)h -(can)e(b)s(e)h(sp)s(eci\014ed)h(on)e(the)h(command-line)h(as)e(for)g -(the)h Fr(bounded)244 3906 y Ft(mo)s(del)33 b(ab)s(o)m(v)m(e.)0 -4190 y Fo(2.3.2)136 b(En)l(umeration)46 b(t)l(yp)t(es)0 -4375 y Ft(The)38 b(default)f(b)s(eha)m(vior)h(regarding)f(en)m -(umeration)h(t)m(yp)s(es)g(is)g(to)f(map)g(them)g(to)g(mathematical)h -(in-)0 4495 y(tegers)h(and)g(to)f(in)m(tro)s(duce)i(one)e(in)m(teger)i -(constan)m(t)f(for)f(eac)m(h)i(elemen)m(t)g(in)f(the)g(en)m(umeration.) -62 b(F)-8 b(or)0 4616 y(instance,)34 b(the)f(declaration)103 -4790 y Fr(enum)52 b(E)f({)h(A)f(=)h(0,)g(B,)g(C)f(};)0 -4965 y Ft(in)m(tro)s(duces)26 b(three)f(in)m(teger)g(constan)m(t)g -Fr(A)p Ft(,)g Fr(B)p Ft(,)f Fr(C)h Ft(with)g(v)-5 b(alues)25 -b(0,)h(1)e(and)g(2)g(resp)s(ectiv)m(ely)-8 b(.)44 b(But)24 -b(a)g(v)-5 b(ariable)0 5085 y(of)36 b(t)m(yp)s(e)i Fr(enum)52 -b(E)37 b Ft(will)g(not)g(b)s(e)g(guaran)m(teed)g(to)g(ha)m(v)m(e)h(one) -f(of)f(the)h(en)m(umeration)h(v)-5 b(alues:)53 b(it)37 -b(is)g(not)0 5206 y(pro)m(vided)d(as)f(input)g(and)g(it)f(is)h(not)g -(required)h(when)f(assigned)h(the)f(v)-5 b(ariable.)146 -5326 y(Option)26 b Fr(-check-enum)j Ft(enforces)e(the)g(in)m(v)-5 -b(arian)m(t)26 b(that)g(an)g(expression)i(of)e(an)f(en)m(umeration)j(t) -m(yp)s(e)0 5446 y(alw)m(a)m(ys)38 b(has)f(one)g(of)f(the)h(en)m -(umeration)h(v)-5 b(alues.)57 b(It)36 b(implies)j(that)d(a)g(pro)s(of)g -(obligation)g(is)h(emitted)0 5567 y(when)d(building)f(a)f(v)-5 -b(alue)33 b(of)f(an)m(y)i(en)m(umration)f(t)m(yp)s(e.)1832 -5816 y(26)p eop end -%%Page: 27 27 -TeXDict begin 27 26 bop 0 100 a Fo(2.3.3)136 b(Floating-p)t(oin)l(t)46 -b(arithmetic)0 284 y Ft(Floating-p)s(oin)m(t)29 b(arithmetic)i(is)g -(handled)g(b)m(y)i Fp(Caduceus)p Ft(.)44 b(The)31 b(mo)s(del)g(of)f(a)g -(\015oating-p)s(oin)m(t)f(n)m(um)m(b)s(er)0 405 y(is)k(a)f -Fs(triple)40 b Ft(consisting)34 b(of:)145 563 y Fn(\017)49 -b Ft(the)33 b(\015oating-p)s(oin)m(t)f(n)m(um)m(b)s(er,)i(as)f -(computed)h(b)m(y)f(the)g(program;)145 752 y Fn(\017)49 -b Ft(a)27 b(real)h(n)m(um)m(b)s(er,)i(whic)m(h)f(w)m(ould)g(b)s(e)e -(the)h(v)-5 b(alue)28 b(if)g(all)f(computations)i(w)m(ere)g(p)s -(erformed)f(on)f(real)244 872 y(n)m(um)m(b)s(ers)34 b(and)f(th)m(us)h -(exact;)145 1061 y Fn(\017)49 b Ft(and)33 b(another)f(real)h(n)m(um)m -(b)s(er,)h(whic)m(h)g(is)f(the)g(v)-5 b(alue)33 b(whic)m(h)h(should)g -(b)s(e)f Fs(ide)-5 b(al)5 b(ly)40 b Ft(computed.)0 1219 -y(W)-8 b(e)41 b(refer)h(to)e(these)j(three)f(comp)s(onen)m(ts)g(as)f -(the)h Fs(\015o)-5 b(ating-p)g(oint)50 b Ft(part,)43 -b(the)e Fs(exact)50 b Ft(part)41 b(and)g(the)0 1339 y -Fs(mo)-5 b(del)58 b Ft(part,)52 b(resp)s(ectiv)m(ely)-8 -b(.)95 b(The)49 b(third)g(comp)s(onen)m(t)h(\(the)f(mo)s(del\))g(can)g -(b)s(e)f(seen)i(as)f(a)f(ghost)0 1460 y(v)-5 b(ariable)33 -b(automatically)g(attac)m(hed)g(to)f(eac)m(h)i(\015oating-p)s(oin)m(t)e -(n)m(um)m(b)s(er.)146 1580 y(Within)37 b(annotations,)h(all)e(op)s -(erations)h(and)g(comparisons)g(are)g(p)s(erformed)g(on)f -Fs(r)-5 b(e)g(al)38 b(numb)-5 b(ers)p Ft(.)0 1701 y(A)28 -b(\015oating-p)s(oin)m(t)e(expression)k(is)e(\(implicitly\))h(understo) -s(o)s(d)f(as)g(its)g(\014rst)g(comp)s(onen)m(t)g(\(the)g(\015oating-)0 -1821 y(p)s(oin)m(t)42 b(n)m(um)m(b)s(er\))h(seen)g(as)f(a)g(real)g(n)m -(um)m(b)s(er.)72 b(The)43 b(follo)m(wing)f(constructs)h(are)f(pro)m -(vided)h(to)f(write)0 1941 y(annotations:)145 2110 y -Fn(\017)49 b Fr(\\exact\()p Fg(e)p Fr(\))p Ft(:)d(the)33 -b(exact)g(part)f(of)h(the)g(\015oating-p)s(oin)m(t)f(expression)i -Fg(e)145 2298 y Fn(\017)49 b Fr(\\model\()p Fg(e)p Fr(\))p -Ft(:)d(the)33 b(mo)s(del)g(part)f(of)g(the)h(\015oating-p)s(oin)m(t)f -(expression)j Fg(e)145 2487 y Fn(\017)49 b Fr(\\round_error\()p -Fg(e)p Fr(\))p Ft(:)c(a)27 b(shortcut)h(for)f Fn(j)p -Fg(e)12 b Fn(\000)g Fr(\\exact)q Ft(\()p Fg(e)p Ft(\))p -Fn(j)p Ft(,)28 b(that)g(is)g(the)g(di\013erence)h(b)s(et)m(w)m(een)g -(the)244 2607 y(\015oating-p)s(oin)m(t)j(part)g(of)g -Fg(e)h Ft(and)g(its)g(exact)g(part.)145 2796 y Fn(\017)49 -b Fr(\\total_error\()p Fg(e)p Fr(\))p Ft(:)c(a)27 b(shortcut)h(for)f -Fn(j)p Fg(e)12 b Fn(\000)g Fr(\\model)q Ft(\()p Fg(e)p -Ft(\))p Fn(j)p Ft(,)28 b(that)g(is)g(the)g(di\013erence)h(b)s(et)m(w)m -(een)g(the)244 2916 y(\015oating-p)s(oin)m(t)j(part)g(of)g -Fg(e)h Ft(and)g(its)g(mo)s(del)g(part.)145 3104 y Fn(\017)49 -b Fr(\\abs\()p Fg(e)p Fr(\))p Ft(:)c(the)33 b(absolute)g(v)-5 -b(alue)33 b(of)g(the)g(real)f(expression)j Fg(e)p Ft(.)44 -b(Can)33 b(b)s(e)f(written)i Fr(|)p Fg(e)p Fr(|)p Ft(.)145 -3293 y Fn(\017)49 b Fr(\\sqrt\()p Fg(e)p Fr(\))p Ft(:)c(the)33 -b(square)h(ro)s(ot)e(of)g(the)h(real)g(expression)h Fg(e)145 -3481 y Fn(\017)49 b Fg(e)289 3496 y Fb(1)329 3481 y Fr(^^)p -Fg(e)476 3496 y Fb(2)516 3481 y Ft(:)43 b(the)33 b(exp)s(onen)m -(tiation)h(of)e(real)h(n)m(um)m(b)s(ers)146 3650 y(Here)i(is)g(for)e -(instance)j(a)e(function)g(appro)m(ximating)h(the)g(exp)s(onen)m(tial)g -(and)f(a)g(p)s(ossible)i(sp)s(eci\014-)0 3770 y(cation:)0 -3929 y Fr(/*@)52 b(requires)h(x)f(==)g(\\exact\(x\))h(&&)f(|x|)g(<=)g -(1)103 4049 y(@)f(ensures)104 b(\\round_error\(\\result\))57 -b(<=)52 b(2)g(^^)f(\(-48\))103 4169 y(@*/)0 4290 y(double)i -(my_exp\(double)i(x\))c({)103 4410 y(return)h(1)g(+)f(x)h(+)g(x*x/2;)0 -4531 y(})146 4724 y Ft(The)39 b Fp(Why)g Ft(mo)s(del)f(for)g -(\015oating-p)s(oin)m(t)f(arithmetic)i(can)f(b)s(e)g(found)h(in)f -Fr(lib/why/floats.why)0 4844 y Ft(\(it)55 b(is)g(passed)h(to)e -Fp(Why)h Ft(automatically)-8 b(,)61 b(and)54 b(only)i(when)f(the)g(use) -h(of)e(\015oating-p)s(oin)m(t)g(arith-)0 4965 y(metic)61 -b(is)f(detected\).)127 b(This)61 b(mo)s(del)g(is)f(curren)m(tly)i -(realized)f(for)e(the)h Fp(Co)s(q)g Ft(pro)m(v)m(er)h(only)-8 -b(,)67 b(in)0 5085 y Fr(lib/coq/WhyFloats.v)p Ft(.)79 -b(It)43 b(requires)h(the)f(Co)s(q)g(library)h(on)e(\015oating-p)s(oin)m -(t)g(arithmetic)i(a)m(v)-5 b(ail-)0 5206 y(able)33 b(at)f -Fr(http://lipforge.ens-)t(lyon)q(.fr)q(/www)q(/pff)q(/)p -Ft(.)146 5326 y(This)49 b(mo)s(del)g(for)e(\015oating-p)s(oin)m(t)g(n)m -(um)m(b)s(ers)j(can)e(b)s(e)g(turned)h(o\013)f(using)g(the)g -(command-line)0 5446 y Fr(-no-fp)38 b Ft(and)f(then)g(all)g -(\015oating-p)s(oin)m(t)f(n)m(um)m(b)s(ers)j(are)d(mapp)s(ed)i(to)e -(real)h(n)m(um)m(b)s(ers,)j(as)d(if)f(all)h(com-)0 5567 -y(putations)c(w)m(ere)h(exact.)1832 5816 y(27)p eop end -%%Page: 28 28 -TeXDict begin 28 27 bop 0 100 a Fm(2.4)161 b(Memory)53 -b(mo)t(del)h(and)g(p)t(oin)l(ter)e(arithmetic)0 319 y -Ft(The)33 b(C)f(language)f(mak)m(es)j(almost)e(no)g(distinction)h(b)s -(et)m(w)m(een)g(arra)m(ys)g(and)f(p)s(oin)m(ters,)h(and)e -Fp(Caduceus)0 439 y Ft(iden)m(ti\014es)46 b(b)s(oth)e(notions)g(on)g -(the)g(mo)s(del)h(side.)78 b(A)44 b(p)s(oin)m(ter)h Fr(p)f -Ft(is)g(either)h(the)g Fr(null)g Ft(p)s(oin)m(ter,)i(or)0 -559 y(designates)39 b(a)f(particular)g(elemen)m(t)i(of)d(an)h(allo)s -(cated)g(memory)h(blo)s(c)m(k.)60 b(In)39 b(this)f(case,)i -Fr(p)f Ft(is)f(a)g(pair)0 680 y(of)43 b(a)g(base)h(address,)k -Fr(base)p 1041 680 31 4 v 38 w(addr\(p\))p Ft(,)g(and)c(an)f(o\013set)h -(inside)h(the)f(blo)s(c)m(k,)j Fr(offset\(p\))p Ft(.)78 -b(P)m(oin)m(ter)0 800 y(arithmetic)28 b(is)g(only)g(a)g(matter)f(of)g -(c)m(hanging)h(o\013sets)h(inside)g(a)e(giv)m(en)h(blo)s(c)m(k.)43 -b(If)34 b Fr(i)28 b Ft(is)g(an)g(in)m(teger)g(then)0 -921 y(the)35 b(p)s(oin)m(ter)g Fr(p+i)h Ft(has)f(the)h(same)f(base)h -(address)g(as)f Fr(p)g Ft(and)g(o\013set)g Fr(offset\(p\)+i)p -Ft(.)53 b(This)36 b(situation)0 1041 y(is)d(illustrated)h(b)s(elo)m(w:) -2019 1167 y(p)590 b(p)r(+i=shift\(p,i\))1135 1288 y Fn( )-48 -b(\000)-21 b(\000)-48 b(\000)q Ft(o\013set\(p\))p Fn(\000)h(\000)-21 -b(\000)-48 b(!)99 b(#)594 b(#)p 1086 1327 2235 4 v 491 -1408 a Ft(base)p 681 1408 30 4 v 36 w(addr\(p\))p 1084 -1444 4 121 v 1968 1444 V 1968 1444 V 2122 1444 V 2122 -1444 V 2612 1444 V 2612 1444 V 2765 1444 V 2765 1444 -V 3318 1444 V 1086 1447 2235 4 v 1135 1600 a Fn( )-26 -b(\000)-21 b(\000)f(\000)g(\000)h(\000)f(\000)h(\000)f(\000)g(\000)h -(\000)-26 b(\000)q Ft(blo)s(c)m(k)p 2067 1600 30 4 v -36 w(length\(a,p\))p Fn(\000)h(\000)k(\000)f(\000)g(\000)h(\000)f(\000) -h(\000)f(\000)g(\000)h(\000)-26 b(!)0 1747 y Ft(A)36 -b(memory)h(blo)s(c)m(k)g(is)g(constituted)g(of)f(zero,)h(one)f(or)g -(sev)m(eral)i(elemen)m(ts;)i(the)c(length)h(of)e(the)i(blo)s(c)m(k)0 -1868 y Fr(p)32 b Ft(p)s(oin)m(ts)g(at)f(is)h Fr(block)p -851 1868 31 4 v 38 w(length\(a,p\))p Ft(,)j(where)e Fr(a)e -Ft(is)h(the)g(curren)m(t)h Fs(al)5 b(lo)-5 b(c)g(ation)33 -b(map)p Ft(,)e(of)g(t)m(yp)s(e)h Fr(alloc)p Ft(.)0 1988 -y(This)41 b(map)g(is)f(precisely)j(telling)e(if)f(a)f(giv)m(en)j(base)f -(address)g(corresp)s(onds)h(to)d(an)i(allo)s(cated)f(blo)s(c)m(k)0 -2109 y(and,)33 b(if)f(so,)h(its)g(length.)44 b(The)34 -b(map)e Fr(a)h Ft(c)m(hanges)h(whenev)m(er)h(memory)f(is)f(allo)s -(cated.)146 2229 y(P)m(oin)m(ter)46 b(arithmetic)g(ma)m(y)f(pro)s(duce) -g(p)s(oin)m(ters)h(p)s(oin)m(ting)e(outside)i(blo)s(c)m(ks;)52 -b(there)45 b(is)g(nothing)0 2349 y(wrong)31 b(with)h(this)g(\(no)g(pro) -s(of)e(obligation)h(generated\).)44 b(But)32 b(whenev)m(er)h(a)f(p)s -(oin)m(ter)f(is)h(dereferenced)0 2470 y(a)g(pro)s(of)g(obligation)g(is) -h(generated)h(expressing)h(the)e(v)-5 b(alidit)m(y)33 -b(of)f(this)h(access:)513 2632 y Fr(valid)r Ft(\()p Fg(a;)17 -b(p)p Ft(\))27 b Fn(\021)h Fg(p)g Fn(6)p Ft(=)f Fr(null)56 -b Fn(^)f Ft(0)28 b Fn(\024)g Fr(offset)q Ft(\()p Fg(p)p -Ft(\))g Fg(<)f Fr(block)p 2689 2632 30 4 v 37 w(length)r -Ft(\()p Fg(a;)17 b(p)p Ft(\))0 2795 y(Additional)27 b(predicates)h(are) -e(in)m(tro)s(duced)i(to)e(express)i(that)f(access)h(to)e -Fr(p+i)h Ft(and)g(to)f(the)g(whole)i(range)0 2915 y Fr(p[i...j])35 -b Ft(is)e(v)-5 b(alid:)252 3078 y Fr(valid)p 513 3078 -V 37 w(index)q Ft(\()p Fg(a;)17 b(p;)g(i)p Ft(\))28 b -Fn(\021)g Fg(p)f Fn(6)p Ft(=)h Fr(null)56 b Fn(^)f Ft(0)27 -b Fn(\024)h Fr(offset)r Ft(\()p Fg(p)p Ft(\))22 b(+)g -Fg(i)28 b(<)f Fr(block)p 2950 3078 V 37 w(length)q Ft(\()p -Fg(a;)17 b(p)p Ft(\))359 3240 y Fr(valid)p 620 3240 V -37 w(range)q Ft(\()p Fg(a;)g(p;)g(i;)g(j)6 b Ft(\))27 -b Fn(\021)70 b Fg(p)27 b Fn(6)p Ft(=)h Fr(null)56 b Fn(^)f -Ft(0)27 b Fn(\024)h Fr(offset)r Ft(\()p Fg(p)p Ft(\))22 -b(+)g Fg(i)55 b Fn(^)g Fg(i)28 b Fn(\024)g Fg(j)61 b -Fn(^)1468 3361 y Fr(offset)q Ft(\()p Fg(p)p Ft(\))22 -b(+)g Fg(j)34 b(<)28 b Fr(block)p 2459 3361 V 36 w(length)r -Ft(\()p Fg(a;)17 b(p)p Ft(\))0 3509 y(Note)37 b(that)f(t)m(w)m(o)h -(di\013eren)m(t)h(blo)s(c)m(ks)f(are)g(truly)g Fs(sep)-5 -b(ar)g(ate)g(d)46 b Ft(i.e.)56 b(there)37 b(is)g(no)f(w)m(a)m(y)i(to)e -(access)i(and/or)0 3629 y(mo)s(dify)32 b(an)m(y)h(elemen)m(t)g(of)e(a)h -(blo)s(c)m(k)g(using)h(a)e(p)s(oin)m(ter)i(related)f(to)f(another)h -(blo)s(c)m(k.)44 b(There)33 b(is)g(no)e(w)m(a)m(y)0 3750 -y(to)h(express)j(that)d(t)m(w)m(o)h(blo)s(c)m(ks)h(allo)s(cated)e(with) -h(t)m(w)m(o)h(di\013eren)m(t)f(calls)g(to)f Fr(malloc)i -Ft(are)f(con)m(tiguous)g(in)0 3870 y(memory)-8 b(.)43 -b(In)30 b(particular,)h(a)e(C)g(program)h(realizing)g(a)f(bu\013er)h(o) -m(v)m(er\015o)m(w)h(cannot)e(b)s(e)h(pro)m(v)m(ed)h(correct.)146 -4024 y(As)36 b(sp)s(eci\014ed)h(in)e(the)h(ANSI)g(C)f(standard,)i(p)s -(oin)m(ter)e(subtraction)h(and)f(p)s(oin)m(ter)h(comparison)g(is)0 -4144 y(restricted)31 b(to)f(p)s(oin)m(ters)h(with)f(a)g(same)g(base)h -(address.)44 b(When)31 b(it)f(is)g(so,)h(p)s(oin)m(ter)f(subtraction)h -(\(resp.)0 4265 y(comparison\))i(corresp)s(onds)h(to)e(the)h -(subtraction)h(\(resp.)44 b(comparison\))34 b(of)e(o\013sets.)146 -4418 y(The)i(follo)m(wing)f(table)g(summarizes)h(the)f(v)-5 -b(arious)33 b(p)s(oin)m(ter)g(notions:)231 4564 y(C)g(syn)m(tax)p -1176 4600 4 121 v 615 w(annotation)f(syn)m(tax)p 2235 -4600 V 288 w(logic)p 181 4604 3399 4 v 231 4688 a Fr(p+i)p -1176 4724 4 121 v 843 w(p+i)p 2235 4724 V 906 w(shift\(p,i\))231 -4808 y(p-q)p 1176 4844 V 843 w(p-q)p 2235 4844 V 906 -w(sub)p 2445 4808 31 4 v 38 w(pointer\(p,q\))231 4929 -y(pq)p Ft(,)f Fr(p>=q)p -1176 4965 4 121 v 101 w(pq)p Ft(,)h Fr(p>=q)p 2235 4965 V 163 w Fn(f)p Fr(lt)p -Ft(,)p Fr(le)p Ft(,)p Fr(gt)p Ft(,)p Fr(ge)p Fn(g)p 2881 -4929 31 4 v 39 w Fr(pointer\(p,q\))p 1176 5085 4 121 -v 1227 5049 a(\\valid\(p\))p 2235 5085 V 600 w(valid\(a,p\))p -1176 5206 V 1227 5169 a(\\valid)p 1539 5169 31 4 v 39 -w(index\(p,i\))p 2235 5206 4 121 v 204 w(valid)p 2547 -5169 31 4 v 39 w(index\(a,p,i\))p 1176 5326 4 121 v 1227 -5290 a(\\valid)p 1539 5290 31 4 v 39 w(range\(p,i,j\))p -2235 5326 4 121 v 102 w(valid)p 2547 5290 31 4 v 39 w(range\(a,p,i,j\)) -p 1176 5446 4 121 v 1227 5410 a(\\block)p 1539 5410 31 -4 v 39 w(length\(p\))p 2235 5446 4 121 v 255 w(block)p -2547 5410 31 4 v 39 w(length\(a,p\))p 1176 5567 4 121 -v 1227 5531 a(\\base)p 1488 5531 31 4 v 38 w(addr\(p\))p -2235 5567 4 121 v 409 w(base)p 2496 5531 31 4 v 38 w(addr\(p\))1832 -5816 y Ft(28)p eop end -%%Page: 29 29 -TeXDict begin 29 28 bop 0 100 a Fm(2.5)161 b(Memory)53 -b(allo)t(cation)0 319 y Ft(There)40 b(is)g(a)f(limited)h(supp)s(ort)f -(for)f(the)i Fr(malloc)g Ft(function.)64 b(Curren)m(tly)-8 -b(,)42 b(only)e(expressions)i(of)c(the)0 439 y(shap)s(e)1240 -634 y Fr(\()p Fg(\034)11 b Fr(*\)malloc\()p Fg(e)55 b -Fr(*)c(sizeof\()p Fg(\034)11 b Fr(\)\))1240 754 y(\()p -Fg(\034)g Fr(*\)malloc\(sizeof\()p Fg(\034)g Fr(\))57 -b(*)52 b Fg(e)p Fr(\))1240 875 y(\()p Fg(\034)11 b Fr -(*\)malloc\(sizeof\()p Fg(\034)g Fr(\)\))0 1071 y Ft(are)27 -b(supp)s(orted,)j(where)f Fg(e)e Ft(is)h(an)f(in)m(teger)i(expression)h -(and)d Fg(\034)39 b Ft(a)27 b(t)m(yp)s(e)h(expression.)45 -b(When)28 b(a)f(function)0 1192 y(\(resp.)54 b(a)35 b(lo)s(op\))g(is)h -(allo)s(cating)g(memory)-8 b(,)37 b(some)g(predicate)f(is)h(added)f(to) -f(its)h(p)s(ostcondition)h(\(resp.)0 1312 y(to)27 b(its)g(lo)s(op)f(in) -m(v)-5 b(arian)m(t\))28 b(to)e(state)i(that)e(some)i(memory)g(w)m(as)g -(allo)s(cated)f(and)g(consequen)m(tly)j(that)d(an)m(y)0 -1433 y(v)-5 b(alid)36 b(p)s(oin)m(ter)f(b)s(efore)h(the)g(allo)s -(cation)e(is)i(still)g(v)-5 b(alid)36 b(after)f(the)h(allo)s(cation.)51 -b(Note)36 b(that)f(curren)m(tly)0 1553 y(there)e(is)g(no)g(w)m(a)m(y)h -(for)e(the)h(user)g(to)f(state)h(this)h(prop)s(ert)m(y)f(man)m(ually)h -(in)e(a)h(sp)s(eci\014cation.)146 1673 y(Example:)45 -b(see)34 b Fr(bench/c/good/malloc.c)k Ft(in)33 b(the)g(source)h -(distribution.)146 1794 y(There)g(is)f(no)g(supp)s(ort)g(for)f -Fr(free)h Ft(curren)m(tly)-8 b(.)0 2126 y Fm(2.6)161 -b(Unsupp)t(orted)51 b(features)0 2346 y Ft(If)43 b(a)g(feature)g(is)g -(not)g(supp)s(orted)h(b)m(y)h Fp(Caduceus)p Ft(,)i(it)c(is)h(rep)s -(orted)f(on)g(the)g(error)g(output)g(and)g(the)0 2466 -y(corresp)s(onding)33 b(function)h(is)f(skipp)s(ed:)0 -2669 y Fr(unsupported)54 b(feature)f(\(goto\);)g(skipping)h(function)f -(f)0 2873 y Ft(It)29 b(means)g(that)g(no)f Fp(Why)h Ft(co)s(de)g(is)g -(pro)s(duced)h(for)e(function)h Fr(f)p Ft(,)g(and)g(th)m(us)h(no)e(pro) -s(of)g(obligations,)h(but)0 2993 y Fr(f)k Ft(ma)m(y)g(still)g(b)s(e)g -(called)h(in)e(other)h(parts)g(of)f(the)h(co)s(de)g(and)g(its)g(sp)s -(eci\014cation)h(is)f(visible.)0 3282 y Fo(2.6.1)136 -b(F)-11 b(eatures)45 b(not)g(supp)t(orted)g(in)g(curren)l(t)f(v)l -(ersion)0 3467 y Ft(The)28 b(follo)m(wing)f(features)h(are)f(not)g(y)m -(et)h(supp)s(orted)f(b)m(y)j Fp(Caduceus)e Ft(but)f(will)h(b)s(e)f(so)g -(in)g(future)h(v)m(ersions)0 3587 y(of)k(the)h(to)s(ol:)145 -3790 y Fn(\017)49 b Ft(standard)33 b(library)g(functions:)44 -b Fr(memcpy)p Ft(,)35 b Fr(strcmp)p Ft(,)f(etc.)0 4079 -y Fo(2.6.2)136 b(Other)45 b(unsupp)t(orted)f(features)0 -4264 y Ft(The)34 b(follo)m(wing)e(features)i(are)e(not)h(planed)g(to)f -(b)s(e)h(supp)s(orted)h(b)m(y)g Fp(Caduceus)p Ft(:)145 -4467 y Fn(\017)49 b Ft(arbitrary)34 b Fr(goto)f Ft(\(some)h(simple)g -Fr(goto)p Ft('s)g(are)f(supp)s(orted\))145 4671 y Fn(\017)49 -b Ft(function)25 b(p)s(oin)m(ter)f(\(apart)g(from)g(trivial)h -(situations)g(where)h(w)m(e)f(kno)m(w)g(at)f(compile-time)i(whic)m(h) -244 4791 y(function)33 b(is)g(p)s(oin)m(ted)g(at\))145 -4995 y Fn(\017)49 b Ft(p)s(oin)m(ter)34 b(cast)h(\(e.g.)47 -b(casting)35 b(an)e Fr(int*)i Ft(to)f(a)f Fr(void*)p -Ft(,)j(passing)f(it)f(to)f(a)h(function)g(whic)m(h)i(casts)244 -5115 y(it)c(bac)m(k)i(to)e Fr(int*)p Ft(\))145 5318 y -Fn(\017)49 b Ft(an)m(y)33 b(non-ANSI)g(feature)1832 5816 -y(29)p eop end -%%Page: 30 30 -TeXDict begin 30 29 bop 1832 5816 a Ft(30)p eop end -%%Page: 31 31 -TeXDict begin 31 30 bop 0 764 a Fq(Bibliograph)-6 b(y)49 -1217 y Ft([1])49 b(CV)m(C)33 b(Lite.)44 b Fr(http://verify.stanford.ed) -q(u/CV)q(CL/)q Ft(.)49 1421 y([2])49 b(ESC/Ja)m(v)-5 -b(a2.)43 b Fr(http://www.sos.cs.ru.nl)q(/res)q(earc)q(h/es)q(cja)q(va)p -Ft(.)49 1625 y([3])49 b(HOL)32 b(4.)43 b Fr(http://hol.sourceforge.ne)q -(t/)p Ft(.)49 1829 y([4])49 b(HOL)32 b(Ligh)m(t.)44 b -Fr(http://www.cl.cam.ac.uk/use)q(rs/)q(jrh/)q(hol-)5 -b(lig)q(ht/)p Ft(.)49 2033 y([5])49 b(Isab)s(elle/HOL.)44 -b Fr(http://isabelle.in.tum.de/)q Ft(.)49 2237 y([6])49 -b(Mizar.)43 b Fr(http://mizar.uwb.edu.pl)q(/)p Ft(.)49 -2442 y([7])49 b(The)33 b(Co)s(q)g(Pro)s(of)f(Assistan)m(t.)45 -b Fr(http://coq.inria.fr/)p Ft(.)49 2646 y([8])k(The)33 -b(haR)-11 b(V)j(ey)33 b(decision)h(pro)s(cedure.)45 b -Fr(http://www.loria.fr/)2637 2620 y Fa(\030)2697 2646 -y Fr(ranise/haRVey/)p Ft(.)49 2850 y([9])k(The)33 b(Ob)5 -b(jectiv)m(e)35 b(Caml)e(language.)43 b Fr(http://caml.inria.fr/)p -Ft(.)0 3054 y([10])49 b(The)33 b(PVS)g(Sp)s(eci\014cation)h(and)f(V)-8 -b(eri\014cation)33 b(System.)45 b Fr(http://pvs.csl.sri.com/)p -Ft(.)0 3258 y([11])k(The)87 b(Simplify)g(decision)h(pro)s(cedure.)204 -b Fr(http://research.compaq.c)q(om/)q(SRC/)q(esc/)201 -3379 y(simplify/)p Ft(.)0 3583 y([12])49 b(The)33 b(Wh)m(y)h(v)m -(eri\014cation)g(to)s(ol.)42 b Fr(http://why.lri.fr/)p -Ft(.)0 3787 y([13])49 b(Ric)m(hard)35 b(Bornat.)50 b(Pro)m(ving)36 -b(p)s(oin)m(ter)f(programs)g(in)g(Hoare)g(logic.)50 b(In)35 -b Fs(Mathematics)i(of)g(Pr)-5 b(o-)201 3907 y(gr)g(am)34 -b(Construction)p Ft(,)e(pages)h(102{126,)e(2000.)0 4112 -y([14])49 b(Ro)s(d)28 b(Burstall.)39 b(Some)30 b(tec)m(hniques)j(for)c -(pro)m(ving)h(correctness)i(of)d(programs)g(whic)m(h)i(alter)f(data)201 -4232 y(structures.)45 b Fs(Machine)34 b(Intel)5 b(ligenc)-5 -b(e)p Ft(,)31 b(7:23{50,)g(72.)0 4436 y([15])49 b(P)m(atrice)c(Chalin.) -81 b(Reassessing)47 b(JML's)f(logical)f(foundation.)80 -b(In)45 b Fs(Pr)-5 b(o)g(c)g(e)g(e)g(dings)45 b(of)g(the)i(7th)201 -4556 y(Workshop)28 b(on)h(F)-7 b(ormal)27 b(T)-7 b(e)i(chniques)28 -b(for)g(Java-like)g(Pr)-5 b(o)g(gr)g(ams)29 b(\(FTfJP'05\))p -Ft(,)d(Glasgo)m(w,)i(Scot-)201 4677 y(land,)k(July)i(2005.)0 -4881 y([16])49 b(P)m(atrice)38 b(Chalin.)57 b(A)37 b(sound)h(assertion) -g(seman)m(tics)h(for)e(the)g(dep)s(endable)i(systems)g(ev)m(olution)201 -5001 y(v)m(erifying)c(compiler.)49 b(In)35 b Fs(Pr)-5 -b(o)g(c)g(e)g(e)g(dings)35 b(of)h(the)g(International)f(Confer)-5 -b(enc)g(e)35 b(on)h(Softwar)-5 b(e)36 b(En-)201 5122 -y(gine)-5 b(ering)36 b(\(ICSE'07\))p Ft(,)g(pages)h(23{33,)f(Los)g -(Alamitos,)h(CA,)g(USA,)g(2007.)e(IEEE)i(Computer)201 -5242 y(So)s(ciet)m(y)-8 b(.)0 5446 y([17])49 b(Claude)43 -b(Marc)m(h)m(\023)-46 b(e,)46 b(Christine)e(P)m(aulin)g(and)e(Xa)m -(vier)i(Urbain.)73 b(The)43 b(Krak)-5 b(atoa)41 b(to)s(ol.)72 -b Fr(http:)201 5567 y(//krakatoa.lri.fr/)p Ft(.)1832 -5816 y(31)p eop end -%%Page: 32 32 -TeXDict begin 32 31 bop 0 100 a Ft([18])49 b(Brian)c(Kernighan)g(and)h -(Dennis)g(Ritc)m(hie.)82 b Fs(The)46 b(C)h(Pr)-5 b(o)g(gr)g(amming)45 -b(L)-5 b(anguage)46 b(\(2nd)g(Ed.\))p Ft(.)201 220 y(Pren)m(tice-Hall,) -34 b(1988.)0 423 y([19])49 b(Gary)33 b(T.)h(Lea)m(v)m(ens,)h(Alb)s(ert) -f(L.)f(Bak)m(er,)i(and)f(Clyde)h(Rub)m(y)-8 b(.)46 b(Preliminary)35 -b(design)g(of)e(JML:)h(A)201 544 y(b)s(eha)m(vioral)j(in)m(terface)g -(sp)s(eci\014cation)h(language)e(for)g(Ja)m(v)-5 b(a.)54 -b(T)-8 b(ec)m(hnical)39 b(Rep)s(ort)d(98-06i,)g(Io)m(w)m(a)201 -664 y(State)c(Univ)m(ersit)m(y)-8 b(,)35 b(2000.)0 868 -y([20])49 b(Gary)33 b(T.)h(Lea)m(v)m(ens,)h(Alb)s(ert)f(L.)f(Bak)m(er,) -i(and)f(Clyde)h(Rub)m(y)-8 b(.)46 b(Preliminary)35 b(design)g(of)e -(JML:)h(A)201 988 y(b)s(eha)m(vioral)j(in)m(terface)g(sp)s -(eci\014cation)h(language)e(for)g(Ja)m(v)-5 b(a.)54 b(T)-8 -b(ec)m(hnical)39 b(Rep)s(ort)d(98-06i,)g(Io)m(w)m(a)201 -1108 y(State)c(Univ)m(ersit)m(y)-8 b(,)35 b(2000.)1832 -5816 y(32)p eop end -%%Page: 33 33 -TeXDict begin 33 32 bop 0 764 a Fq(Con)-6 b(ten)g(ts)0 -1314 y Fh(F)d(orew)m(ord)3249 b(3)0 1532 y(1)90 b(T)-9 -b(utorial)3166 b(5)146 1652 y Ft(1.1)100 b(Basic)33 b(use)h(of)39 -b Fp(Caduceus)33 b Ft(.)50 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)199 -b(5)146 1773 y(1.2)100 b(P)m(oin)m(ter)33 b(access)i(and)d(mo)s -(di\014cation)75 b(.)50 b(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)199 b(7)146 -1893 y(1.3)100 b(Arra)m(ys)62 b(.)50 b(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)199 b(9)371 2013 -y(1.3.1)111 b(Arra)m(y)33 b(indexing)88 b(.)50 b(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g -(.)g(.)g(.)g(.)199 b(9)371 2134 y(1.3.2)111 b(Arra)m(ys)33 -b(and)g(lo)s(ops)76 b(.)50 b(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)150 -b(11)146 2254 y(1.4)100 b(Structures)62 b(.)50 b(.)g(.)g(.)g(.)f(.)h(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)150 b(12)146 -2374 y(1.5)100 b(Calling)33 b(functions)85 b(.)49 b(.)h(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.) -h(.)g(.)g(.)g(.)g(.)g(.)g(.)150 b(14)146 2495 y(1.6)100 -b(A)32 b(complete)i(example)96 b(.)50 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.) -g(.)g(.)150 b(16)146 2615 y(1.7)100 b(Other)33 b(features)g(not)f -(already)h(in)g(the)g(tutorial)40 b(.)50 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)150 b(16)371 2736 -y(1.7.1)111 b(Other)33 b(annotations)99 b(.)50 b(.)g(.)g(.)g(.)g(.)g(.) -f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g -(.)g(.)150 b(16)371 2856 y(1.7.2)111 b(Logical)32 b(declarations)i(.)50 -b(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f -(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)150 b(18)371 2976 y(1.7.3)111 -b(In)m(v)-5 b(arian)m(t)33 b(declarations)e(.)50 b(.)g(.)g(.)g(.)g(.)f -(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.) -g(.)150 b(20)0 3194 y Fh(2)90 b(Reference)38 b(man)m(ual)2632 -b(21)146 3315 y Ft(2.1)100 b(Command)33 b(line)g(options)74 -b(.)50 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)150 b(21)146 -3435 y(2.2)100 b(Input)33 b(Files)g(Syn)m(tax)90 b(.)50 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)150 b(23)371 -3555 y(2.2.1)111 b(Lexical)33 b(con)m(v)m(en)m(tions)55 -b(.)50 b(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)150 b(23)371 3676 -y(2.2.2)111 b(Syn)m(tax)48 b(.)i(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g -(.)g(.)g(.)g(.)g(.)150 b(23)146 3796 y(2.3)100 b(Arithmetic)38 -b(.)50 b(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.) -h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)150 b(23)371 3917 y(2.3.1)111 b(In)m(teger)33 b(arithmetic)i(.)50 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)150 b(23)371 4037 -y(2.3.2)111 b(En)m(umeration)34 b(t)m(yp)s(es)72 b(.)50 -b(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f -(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)150 b(26)371 4157 y(2.3.3)111 -b(Floating-p)s(oin)m(t)31 b(arithmetic)f(.)50 b(.)g(.)g(.)f(.)h(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)150 -b(27)146 4278 y(2.4)100 b(Memory)33 b(mo)s(del)g(and)g(p)s(oin)m(ter)g -(arithmetic)92 b(.)50 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g -(.)g(.)g(.)g(.)g(.)g(.)150 b(28)146 4398 y(2.5)100 b(Memory)33 -b(allo)s(cation)85 b(.)50 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.) -150 b(29)146 4518 y(2.6)100 b(Unsupp)s(orted)33 b(features)43 -b(.)50 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)150 b(29)371 -4639 y(2.6.1)111 b(F)-8 b(eatures)33 b(not)f(supp)s(orted)i(in)f -(curren)m(t)g(v)m(ersion)d(.)50 b(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g -(.)g(.)g(.)g(.)150 b(29)371 4759 y(2.6.2)111 b(Other)33 -b(unsupp)s(orted)h(features)83 b(.)50 b(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)150 b(29)0 -4977 y Fh(Index)3373 b(33)1832 5816 y Ft(33)p eop end -%%Page: 34 34 -TeXDict begin 34 33 bop 0 559 a Fq(Index)0 990 y Fr(#)p -Ft(,)33 b(9)0 1198 y(Aliasing,)g(15)0 1319 y(Annotations,)g(23)0 -1439 y Fd(arith)p 212 1439 30 4 v 35 w(op)p Ft(,)g(grammar)f(en)m(try) --8 b(,)34 b(25)0 1560 y(Arithmetic,)g(23)0 1680 y Fr(assert)p -Ft(,)g(17,)e(24)0 1801 y Fr(assigns)p Ft(,)i(14,)f(15,)f(24)0 -1922 y Fr(axiom)p Ft(,)i(18,)e(24)0 2129 y Fp(Caduceus)p -Ft(,)i(3,)e(5,)h(7{10,)e(13,)i(15,)f(21,)g(27{29)0 2250 -y Fr(check-enum)p Ft(,)j(26)0 2371 y Fd(constan)m(t)p -Ft(,)f(grammar)e(en)m(try)-8 b(,)34 b(25)0 2491 y Fp(Co)s(q)p -Ft(,)e(5,)h(6,)f(8,)h(22,)f(27)0 2699 y Fr(decreases)p -Ft(,)j(24)0 2907 y Fr(ensures)p Ft(,)f(5,)f(24)0 3027 -y(En)m(umeration,)h(26)0 3235 y(Floating-p)s(oin)m(t)e(arithmetic,)h -(27)0 3356 y Fr(\\forall)p Ft(,)h(11)0 3476 y Fr(\\fresh)p -Ft(,)g(25)0 3684 y Fr(ghost)p Ft(,)g(24)0 3892 y Fr(-int-model)p -Ft(,)h(23)0 4012 y Fr(invariant)p Ft(,)g(11,)d(20,)g(24)0 -4220 y Fr(label)p Ft(,)i(17,)e(24)0 4341 y(Lexical)i(con)m(v)m(en)m -(tions)166 4461 y(C)f(programs,)g(23)0 4582 y Fr(logic)p -Ft(,)h(18,)e(24)0 4789 y Fr(\\max)p 210 4789 31 4 v 38 -w(range)p Ft(,)i(26)0 4910 y Fr(memory)p Ft(,)g(9)0 5031 -y Fr(\\min)p 210 5031 V 38 w(range)p Ft(,)g(26)0 5238 -y Fr(\\old)p Ft(,)g(10)0 5359 y(Option,)f(of)f(the)h(command)g(line,)h -(21)0 5567 y(P)m(oin)m(ter)g(aliasing,)f(15)1922 990 -y(P)m(oin)m(ter)h(arithmetic,)f(28)1922 1111 y Fd(predicate)p -Ft(,)h(grammar)e(en)m(try)-8 b(,)34 b(25)1922 1231 y -Fr(predicate)p Ft(,)h(13,)d(24)1922 1351 y Fp(PVS)p Ft(,)h(7)1922 -1555 y Fd(relation)p Ft(,)g(grammar)f(en)m(try)-8 b(,)34 -b(25)1922 1675 y Fr(requires)p Ft(,)h(8,)d(24)1922 1796 -y Fr(\\result)p Ft(,)i(5)1922 1999 y Fr(set)p Ft(,)f(24)1922 -2119 y Fr(shift)p Ft(,)h(10)1922 2240 y Fp(Simplify)p -Ft(,)e(6{8)1922 2360 y Fd(sym)m(b)s(ol)p Ft(,)i(grammar)e(en)m(try)-8 -b(,)34 b(25)1922 2481 y(Syn)m(tax)g(\(of)e(input)h(\014les\),)h(23)1922 -2684 y Fd(term)p Ft(,)f(grammar)f(en)m(try)-8 b(,)34 -b(25)1922 2887 y Fr(upd)p Ft(,)f(9)1922 3091 y Fr(\\valid)p -Ft(,)h(8)1922 3211 y Fr(\\valid)p Ft(,)g(25)1922 3331 -y Fr(\\valid)p 2234 3331 V 38 w(index)p Ft(,)g(10,)e(25)1922 -3452 y Fr(\\valid)p 2234 3452 V 38 w(range)p Ft(,)i(11,)e(25)1922 -3572 y Fr(variant)p Ft(,)i(11,)e(24)1832 5816 y(34)p -eop end -%%Trailer - -userdict /end-hook known{end-hook}if -%%EOF diff --git a/gwhy-2.26.patch b/gwhy-2.26.patch index 944cd3e..15a2576 100644 --- a/gwhy-2.26.patch +++ b/gwhy-2.26.patch @@ -1,5 +1,5 @@ ---- why-2.23-old/bin/gwhy.sh 2010-01-04 21:08:50.401993553 -0500 -+++ why-2.23/bin/gwhy.sh 2010-01-05 08:31:05.989807947 -0500 +--- bin/gwhy.sh.orig 2011-03-02 01:27:41.000000000 -0700 ++++ bin/gwhy.sh 2011-07-07 15:41:07.232455718 -0600 @@ -1,11 +1,17 @@ #!/bin/sh diff --git a/sources b/sources index 77a847d..760ff1b 100644 --- a/sources +++ b/sources @@ -1,2 +1,3 @@ -14563361a9427e58115825b4e782d23e krakatoa.pdf -c1fec836b51a5a10d30da82cfe3bbbb9 why-2.28.tar.gz +34d8772de3d68c15a3a12935d90a0d60 krakatoa.pdf +a7eb00d1f78e59221629604167eb3151 caduceus.ps +cbb3b109a37f968bea9ffa6e43e3b822 why-2.29.tar.gz diff --git a/why-2.28-Makefile.in.patch b/why-2.28-Makefile.in.patch index f94625b..128b4e9 100644 --- a/why-2.28-Makefile.in.patch +++ b/why-2.28-Makefile.in.patch @@ -1,6 +1,6 @@ ---- why-2.28.old/Makefile.in 2010-12-17 20:06:44.000000000 +0000 -+++ why-2.28/Makefile.in 2011-01-21 18:32:55.262077657 +0000 -@@ -843,14 +843,9 @@ +--- Makefile.in.orig 2011-03-02 01:27:41.000000000 -0700 ++++ Makefile.in 2011-07-07 15:41:43.759455717 -0600 +@@ -844,14 +844,9 @@ cp -f $(V7FILES) $(LIBDIR)/why/coq7 cp -f $(VO7) $(LIBDIR)/why/coq7 install-coq-v8 install-coq-v8.1: diff --git a/why.spec b/why.spec index 1e4cbfa..c206caf 100644 --- a/why.spec +++ b/why.spec @@ -1,10 +1,30 @@ +# Whether coq is available +%ifarch alpha %{arm} %{ix86} ia64 x86_64 ppc sparc sparcv9 +%global has_coq 1 +%else +%global has_coq 0 +%endif + +# Whether PVS is available +%ifarch %{ix86} x86_64 ppc sparcv9 +%global has_pvs 1 +%else +%global has_pvs 0 +%endif + +# What kind of ocaml build to do +%global opt %(test -x %{_bindir}/ocamlopt && echo 1 || echo 0) + +# Don't create debuginfo; it's not particularly useful for OCaml programs. +%global debug_package %{nil} + Name: why -Version: 2.28 -Release: 2.2%{?dist} +Version: 2.29 +Release: 1%{?dist} Summary: Software verification platform Group: Applications/Engineering -License: GPLv2 and MIT +License: LPGLv2 with exceptions URL: http://why.lri.fr/ Source0: http://why.lri.fr/download/why-%{version}.tar.gz Source1: README.why-gwhy.Fedora @@ -35,185 +55,257 @@ Patch0: gwhy-2.26.patch # this case. Patch1: why-2.28-Makefile.in.patch -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -BuildRequires: ocaml >= 3.09, ocaml-camlp4-devel, gtk2-devel -BuildRequires: ocaml-lablgtk-devel, ocaml-ocamlgraph-devel -BuildRequires: desktop-file-utils, dos2unix, prelink -BuildRequires: frama-c-devel >= 1.5 BuildRequires: auto-destdir -# Emacs is required for PVS to rebuild theories: -BuildRequires: cvc3, pvs-sbcl, emacs - -# Specialized dependency generator used because of problems with the -# default RPM OCAML dependency process. Per suggestion of the OCAML group: -%define _use_internal_dependency_generator 0 -%define __find_requires /usr/lib/rpm/ocaml-find-requires.sh -i Ast -i Cc -i Error -i Logic -i Logic_decl -i Ptree -i Types -i Env -i Misc -i Cil_types -i Db_types -i Lattice_With_Isotropy -i Signature -%define __find_provides /usr/lib/rpm/ocaml-find-provides.sh -i Project - - -ExcludeArch: sparc64 s390 s390x ppc ppc64 -%if 0%{?fedora} >= 11 -# Doesn't seem to build on ppc64 for Fedora >= 11 -# bz: 516317 -ExcludeArch: ppc64 +BuildRequires: cvc3 +BuildRequires: desktop-file-utils +BuildRequires: emacs-nox xemacs-nox +BuildRequires: frama-c-devel +BuildRequires: gtk2-devel +BuildRequires: ocaml +BuildRequires: ocaml-camlp4-devel +BuildRequires: ocaml-lablgtk-devel +BuildRequires: ocaml-ocamldoc +BuildRequires: ocaml-ocamlgraph-devel +%if %{has_coq} +BuildRequires: coq +%endif +%if %{has_pvs} +BuildRequires: pvs %endif -# No coq on ppc64 (any Fedora version) at the moment -%ifnarch ppc64 -%global has_coq 1 -%endif - -%global __ocaml_requires_opts -i Ast -i Cc -i Error -i Logic -i Logic_decl -i Ptree -i Types +# Only build on arches that support ocaml +ExclusiveArch: %{ocaml_arches} +# Filter out names that should not be exposed externally +%global __requires_exclude ocaml\\\(((Ast)|(Cc)|(Env)|(Error)|(Loc)|(Logic)|(Logic_decl)|(Misc)|(Parser)|(Project)|(Ptree)|(Types))\\\) +%global __provides_exclude ocaml\\\(((Lexer)|(Lib)|(Loc)|(Output)|(Parser)|(Project)|(Report)|(Xml))\\\) %description Why is a software verification platform that applies formal proving -tools to annotated programs. It is currently capable of analysis of C -(through the included tool "Caduceus"), Java (through the included -tool "Krakatoa"), and potentially ML programs with some modification -into Why's own ML-like language. Furthermore, Why is capable of -analysis of any program that is mapped onto its own internal -language. It uses a weakest precondition involving calculus to -generate potential theorems necessary for the proof of a program's -correctness. It translates these theorems into formats that can be -used by external proof assistants (without any extra work, Coq, PVS, -HOL Light, Mizar are supported - having one is recommended and Coq is -packaged for Fedora) and automated theorem provers (without any extra -work, Simplify, Alt-Ergo, Yices, Z3, CVC Lite, Zenon are supported and -Zenon is packaged for Fedora) so that these results can be externally -proven, resulting in a proof of program correctness. +tools to annotated programs. It is currently capable of analysis of C +(through the included tool "Caduceus"), Java (through the included tool +"Krakatoa"), and potentially ML programs with some modification into +Why's own ML-like language. Furthermore, Why is capable of analysis of +any program that is mapped onto its own internal language. It uses a +weakest precondition involving calculus to generate potential theorems +necessary for the proof of a program's correctness. It translates these +theorems into formats that can be used by external proof assistants +(without any extra work Coq, PVS, HOL Light, and Mizar are supported - +having one is recommended and both Coq and PVS are packaged for Fedora) +and automated theorem provers (without any extra work Simplify, +Alt-Ergo, Yices, Z3, CVC3, and Zenon are supported and Alt-Ergo, CVC3, +and Zenon are packaged for Fedora) so that these results can be +externally proven, resulting in a proof of program correctness. Note: Each user account must be set up by running "why-config" at the -command line (to set up a configuration file). Invoke the Jessie plug-in with: - frama-c -jessie FILE.c - +command line (to set up a configuration file). %package gwhy Group: Applications/Engineering Summary: IDE for Why software verification platform -Requires: why = %{version}, zenity +Requires: %{name}%{?_isa} = %{version}-%{release}, zenity %description gwhy Gwhy is an optional graphical user interface for the Why software -coordination platform. It assists in the coordination of dispatching +coordination platform. It assists in the coordination of dispatching assertions that need to be proven to different theorem provers by providing an interface to do this and also supports inspection of why input files. +%package jessie +Group: Applications/Engineering +Summary: Interface between why and frama-c +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: frama-c -# No Coq for ppc64 -> certain subpackages can't be built, but main why can be -%if 0%{?has_coq} == 1 +%description jessie +The Jessie plugin, an interface between why and frama-c. Invoke it with: + frama-c -jessie FILE.c + +%if %{has_coq} %package coq Group: Applications/Engineering Summary: Libraries for interfacing Coq with Why -Requires: why = %{version} -BuildRequires: coq +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: coq %description coq -This package contains a set of routines that assist in the -manipulation of why Coq-formatted output within Coq. +This package contains a set of routines that assist in the manipulation +of why Coq-formatted output within Coq. %endif +%if %{has_pvs} # Why's integration with PVS depends on the NASA Langley PVS Libraries, # which have no license information. This provides an alternative: %package pvs-support Group: Applications/Engineering Summary: Complete Why software verification platform suite -Requires: why = %{version} +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: pvs + %description pvs-support This package provides support definitions so that the Why software verification platform suite can invoke PVS without licensing issues. +%endif +%package emacs +Summary: Emacs support file for why files +Group: Development/Languages +Requires: %{name} = %{version}-%{release} +Requires: emacs(bin) +BuildArch: noarch + +%description emacs +This package contains an Emacs support file for working with why files. + +%package emacs-el +Summary: Emacs source file for why support +Group: Development/Languages +Requires: %{name}-emacs = %{version}-%{release} +BuildArch: noarch + +%description emacs-el +This package contains the Emacs source file for the Emacs why support. +This package is not needed to use the Emacs support. + +%package xemacs +Summary: XEmacs support file for why files +Group: Development/Languages +Requires: %{name} = %{version}-%{release} +Requires: xemacs(bin) +BuildArch: noarch + +%description xemacs +This package contains an XEmacs support file for working with why files. + +%package xemacs-el +Summary: XEmacs source file for why support +Group: Development/Languages +Requires: %{name}-xemacs = %{version}-%{release} +BuildArch: noarch + +%description xemacs-el +This package contains the XEmacs source file for the XEmacs why support. +This package is not needed to use the Emacs support. %package all Group: Applications/Engineering Summary: Complete Why software verification platform suite -Requires: why = %{version} -Requires: why-gwhy = %{version} -%if 0%{?has_coq} == 1 -Requires: why-coq = %{version} +Requires: why%{?_isa} = %{version}-%{release} +Requires: why-gwhy%{?_isa} = %{version}-%{release} +Requires: why-jessie%{?_isa} = %{version}-%{release} +%if %{has_coq} +Requires: why-coq%{?_isa} = %{version}-%{release} %endif -Requires: alt-ergo cvc3 coq pvs-sbcl gappa +%if %{has_pvs} +Requires: why-pvs-support%{?_isa} = %{version}-%{release} +%endif +Requires: alt-ergo cvc3 gappa zenon + %description all This package provides a complete software verification platform suite based on Why, including various automated and interactive provers. %prep %setup -q - -%patch0 -p1 -%patch1 -p1 +%patch0 +%patch1 cp -p %SOURCE1 %SOURCE2 %SOURCE3 %SOURCE4 %SOURCE5 %SOURCE6 %SOURCE7 %SOURCE8 %SOURCE9 %SOURCE10 %SOURCE11 %SOURCE12 %SOURCE13 ./ -# Frama-C's makefile does not handle DESTDIR; this lets us override it: -cp -p /usr/share/frama-c/Makefile.dynamic ./frama-c-plugin/ + +# Fix missing DESTDIRs in the makefile +sed -e 's|$(COQLIB)/user-contrib/Why|$(DESTDIR)$(COQLIB)/user-contrib/Why|' \ + -e 's|$(PVSLIB)/why|$(DESTDIR)$(PVSLIB)/why|' \ + -i Makefile.in + +%define fix_encoding() \ + iconv -f %2 -t %3 %1 > %1.utf8; \ + touch -r %1 %1.utf8; \ + mv -f %1.utf8 %1; + +# Fix encodings +for f in CHANGES COPYING examples/bresenham/bresenham.mlw \ + examples/bresenham/bresenham_coq.mlw examples/bresenham/bresenham_inv.mlw \ + examples/edit-distance/distance.mlw examples/heapsort/downheap.mlw \ + examples/heapsort/heapsort.mlw examples/heapsort/Inftree.v \ + examples/kmp/kmp.mlw examples/kmp/Lex.v examples/kmp/Match.v \ + examples/kmp/Next.v examples/misc/matrix.why examples/misc/matrix_why.v \ + examples/quicksort/partition.mlw examples/quicksort/Partition.v \ + examples/quicksort/quicksort.mlw examples/quicksort/Quicksort.v \ + examples/sqrt/sqrt.mlw examples/string-matching/Match.v; do + %fix_encoding $f ISO-8859-1 UTF-8 +done + +# Fix a doubly utf8-encoded file +%fix_encoding examples/sqrt/sqrt_why.v UTF-8 ISO-8859-1 + +# Fix line endings +for f in examples-c/tutorial/average.c examples-c/tutorial/purse.c \ + examples-c/ukkonen/main.c examples-c/ukkonen/ukkonen.c; do + sed "s/\r//" $f > $f.new + touch -r $f $f.new + mv -f $f.new $f +done + +# APRON support: fix some warnings that -warn-error turns into errors +sed -i "s/| JCTrange _/| JCTlet _ | JCTrange _/" jc/jc_annot_inference.ml + +# APRON support: add a missing include and a missing rpath +sed -e "s|-I +apron|-I +apron -I +mlgmpidl|" \ + -e "s|-lpolkaMPQ_caml|-Wl,-rpath,%{_libdir}/ocaml/apron|" \ + -i configure %build -# Native ocaml builds do not work on ppc64 (many packages have this problem) -%ifarch ppc64 -%global opt 0 -%else -%global opt %(test -x %{_bindir}/ocamlopt && echo 1 || echo 0) -%endif %if ! %{opt} %global opt_option OCAMLBEST=byte OCAMLC=ocamlc OCAMLDEP=ocamldep OCAMLYACC=ocamlyacc OCAMLLEX=ocamllex %else %global opt_option OCAMLBEST=opt OCAMLOPT=ocamlopt.opt %endif -# Don't create debuginfo; it's not particularly useful for OCaml programs. -%global debug_package %{nil} -# This option prints the actual make commands so we can see what's -# happening (eg: for debugging the spec file) -%global why_make_options VERBOSEMAKE=yes %{opt_option} - -# Remove spurious error and warn if buggy 0.91 is used, per: -# http://lists.gforge.inria.fr/pipermail/frama-c-discuss/2010-October/002303.html -sed -e 's/versions_ok = \["0\.91"\]/versions_ok = ["0.92.1"]/' -i tools/dpConfig.ml -# Command "pvs" is LVM2's /sbin/pvs, so rename "pvs" to pvs-sbcl: -sed -e 's/command = "pvs"/command = "pvs-sbcl"/' \ +# Update the version numbers of external programs +# Also, command "pvs" is LVM2's /sbin/pvs, so rename "pvs" to pvs-sbcl: +sed -e 's/versions_ok = \["0\.13\.0"\]/versions_ok = ["0.15.0"]/' \ + -e 's/versions_ok = \["0\.91";.*\]/versions_ok = ["0.93"]/' \ + -e 's/versions_ok = \["1\.0\.17";.*\]/versions_ok = ["1.0.29"]/' \ + -e 's/versions_ok = \["8\.0";.*\]/versions_ok = ["8.3pl2"]/' \ + -e 's/versions_ok = \["4\.1"\]/versions_ok = ["5.0"]/' \ + -e 's/command = "pvs"/command = "pvs-sbcl"/' \ -e 's/PVS, (pvs, \["pvs"\]);/PVS, (pvs, ["pvs-sbcl" ; "pvs"]);/' \ -i tools/dpConfig.ml -sed -e 's/pvs /pvs-sbcl /' -i configure -# Must disable plug-ins that no longer work, else running will cause warnings. -%configure --disable-security_slicing --disable-aorai PVSC=`which pvs-sbcl` %{!?has_coq: COQC=no} -sed -e 's/\"\/usr\/share\/coq\"/\$(DESTDIR)\/usr\/share\/coq\//' -i Makefile +sed -e 's/pvs/pvs-sbcl/' -i configure - -make %{why_make_options} +%if %{has_coq} +%configure --enable-verbosemake +%else +%configure --enable-verbosemake COQC=no +%endif +make %{opt_option} # Strip binaries (the Makefile misses some of them) strip bin/why-cpulimit +strip frama-c-plugin/Jessie.cmxs %if %opt -strip bin/*.opt +strip bin/rv_merge.opt bin/simplify2why.opt bin/tool-stat.opt \ + bin/why2html.opt bin/why-dp.opt bin/why-obfuscator.opt bin/why-stat.opt %endif -%check -%if %opt -%global why bin/why.opt -%else -%global why bin/why.byte -%endif -WHYLIB=lib %why --why --output min.why min.mlw -diff -u min.why min_why.why.result # Show differences from correct result. - %install -rm -rf %{buildroot} -mkdir -p %{buildroot}%{_libdir} %{buildroot}%{_bindir} %{buildroot}%{_datadir} - -#Edit makefile to use local Makefile.dynamic, and fix local version: -sed -e 's/\$(FRAMAC_SHARE)\/Makefile.dynamic/.\/Makefile.dynamic/' -i ./frama-c-plugin/Makefile -sed -e 's/echo/\# echo/' -i ./frama-c-plugin/Makefile.dynamic -sed -e 's/>>/\# >>/' -i ./frama-c-plugin/Makefile.dynamic - -make-redir install DESTDIR=%{buildroot} %{why_make_options} PVSLIB=%{buildroot}%{_libdir}/pvs/lib -sed -e 's!%{buildroot}!!' -i %{buildroot}%{_libdir}/pvs/lib/why/top.out +%if %{has_pvs} +make install DESTDIR=%{buildroot} %{opt_option} PVSLIB=%{_libdir}/pvs/lib +%else +make install DESTDIR=%{buildroot} %{opt_option} +%endif # Fix a small bug in their Makefile: if no Coq, NO .v files should be installed -%if 0%{?has_coq} != 1 +%if %{!has_coq} rm -f `find %{buildroot}%{_datadir}/coq -name '*.v'` %endif +# If no PVS, no .pvs files should be installed +%if %{!has_pvs} +rm -fr %{buildroot}%{_libdir}/pvs +%endif + # Install desktop icon and menu entry %global why_data_dir %{_datadir}/why mkdir -p %{buildroot}%{why_data_dir} @@ -229,26 +321,21 @@ mkdir -p %{buildroot}%{_libdir}/pvs/lib/ints/ cp -p div.pvs rem.pvs %{buildroot}%{_libdir}/pvs/lib/ints/ cp -p patch_jessie_pvs %{buildroot}%{_bindir}/ -%global why_doc_dir %{_defaultdocdir}/%{name}-%{version}/ -%global why_examples_dir %{why_doc_dir}examples/ -%global fix_encoding() dos2unix %1; mv %1 %1.old; \ - iconv -f ISO-8859-1 -t UTF-8 < %1.old > %1; rm -f %1.old ; +%global why_doc_dir %{_defaultdocdir}/%{name}-%{version} +%global why_examples_dir %{why_doc_dir}/examples/ # Fix up documentation and examples mkdir -p %{buildroot}%{why_examples_dir}mlw/ mkdir -p %{buildroot}%{why_examples_dir}c/ -cp -p doc/manual.ps %{buildroot}%{why_doc_dir}why-manual.ps -%fix_encoding COPYING -cp -p caduceus.ps krakatoa.pdf README.why COPYING LICENSE %{buildroot}%{why_doc_dir} +cp -p doc/manual.ps %{buildroot}%{why_doc_dir}/why-manual.ps +cp -p caduceus.ps krakatoa.pdf README.why CHANGES COPYING LICENSE README Version %{buildroot}%{why_doc_dir} -# Copy in the example files after converting to proper UTF-8, fix line -# encodings, leaving behind all generated files +# Copy in the example files, leaving behind all generated files cd examples for d in `find -mindepth 1 -maxdepth 1 -type d`; do mkdir -p %{buildroot}%{why_examples_dir}mlw/$d done for f in `find -regex '.*\(\.mlw\|\.why\)' | grep -E -v '_inv|_coq|_why'`; do - %fix_encoding $f cp -p $f %{buildroot}%{why_examples_dir}mlw/$f done @@ -257,70 +344,90 @@ for d in `find -mindepth 1 -maxdepth 1 -type d`; do mkdir -p %{buildroot}%{why_examples_dir}c/$d done for f in `find -regex '.*\.c'`; do - %fix_encoding $f cp -p $f %{buildroot}%{why_examples_dir}c/$f done +# Get rid of a BUILDROOT reference in a log file (fails QA_CHECK_RPATHS) +sed -i "s|%{buildroot}||" %{buildroot}%{_libdir}/pvs/lib/why/top.out -%clean -rm -rf %{buildroot} +# Remove a stray coq file (already installed in the right place) +rm -f %{buildroot}%{_libdir}/coq/jessie_why.v -%post -echo "ENABLE_JESSIE=yes" >> /usr/share/frama-c/known_plugins.ac -semanage fcontext -a -t textrel_shlib_t '%{_libdir}/frama-c/plugins/Jessie.cmxs' -restorecon '%{_libdir}/frama-c/plugins/Jessie.cmxs' +# Move the Emacs support file to the right places and byte compile it +cd .. +mkdir -p %{buildroot}%{_emacs_sitelispdir} +cp -p lib/emacs/why.el %{buildroot}%{_emacs_sitelispdir} +mkdir -p %{buildroot}%{_xemacs_sitelispdir} +cp -p lib/emacs/why.el %{buildroot}%{_xemacs_sitelispdir} +cd %{buildroot}%{_emacs_sitelispdir} +%{_emacs_bytecompile} why.el +cd %{buildroot}%{_xemacs_sitelispdir} +%{_xemacs_bytecompile} why.el +rm -fr %{buildroot}%{_libdir}/why/emacs -%postun -sed -e "/ENABLE_JESSIE=yes/d" -i /usr/share/frama-c/known_plugins.ac +%check +%if %opt +%global why bin/why.opt +%else +%global why bin/why.byte +%endif +WHYLIB=lib %why --why --output min.why min.mlw +diff -u min.why min_why.why.result # Show differences from correct result. %files -%defattr(-,root,root,-) %{_bindir}/* -#%{_libdir}/frama-c/* -%{_libdir}/caduceus/* -%{_libdir}/coq/* -%{_libdir}/jessie/* -%{_libdir}/why/* -%{_libdir}/pvs/lib/why/ -%{_datadir}/coq/* -%{_mandir}/man1/why.1.gz -%{why_doc_dir} +%{_libdir}/caduceus/ +%{_libdir}/why/ +%{_mandir}/man1/why.1* +%{why_doc_dir}/ # This last example is really an example only for Coq - only .v files %exclude %{why_examples_dir}mlw/string-matching/ # why-gwhy: %exclude %{_bindir}/gwhy* -%exclude %{why_data_dir}/gwhy-icon.png +# why-jessie +%exclude %{_bindir}/jessie # why-pvs-support: %exclude %{_bindir}/patch_jessie_pvs # why-coq: -%exclude %{_datadir}/coq/user-contrib/* %exclude %{_libdir}/caduceus/coq/ - %files gwhy -%defattr(-,root,root,-) +%doc README.why-gwhy.Fedora %{_bindir}/gwhy %{_bindir}/gwhy-bin -%dir %{why_data_dir} -%doc README.why-gwhy.Fedora -%{why_data_dir}/gwhy-icon.png +%{why_data_dir}/ %{_datadir}/applications/fedora-gwhy.desktop + +%files jessie +%{_bindir}/jessie +%{_libdir}/jessie/ +%{_libdir}/frama-c/plugins/Jessie.* %{_datadir}/applications/fedora-jessie.desktop - -%if 0%{?has_coq} == 1 +%if %{has_coq} %files coq -%defattr(-,root,root,-) -%{_datadir}/coq/user-contrib/* -%dir %{_libdir}/caduceus/coq/ %doc README.why-coq.Fedora +%{_libdir}/coq/user-contrib/Why/ +%{_libdir}/caduceus/coq/ %endif +%if %{has_pvs} %files pvs-support -%defattr(-,root,root,-) -%{_libdir}/pvs/lib/ints/ +%{_libdir}/pvs/lib/* %{_bindir}/patch_jessie_pvs +%endif +%files emacs +%{_emacs_sitelispdir}/why.elc + +%files emacs-el +%{_emacs_sitelispdir}/why.el + +%files xemacs +%{_xemacs_sitelispdir}/why.elc + +%files xemacs-el +%{_xemacs_sitelispdir}/why.el # "why-all" is a meta-package; it just depends on other packages, so that # it's easier to install a useful suite of tools. Thus, it has no files: @@ -328,6 +435,16 @@ sed -e "/ENABLE_JESSIE=yes/d" -i /usr/share/frama-c/known_plugins.ac %changelog +* Mon Jul 11 2011 Jerry James - 2.29-1 +- New upstream release (fixes FTBFS: bz 715902) +- Remove unnecessary spec file elements (BuildRoot, etc.) +- Update approach to filtering provides and requires +- Add has_pvs analogously to has_coq, and simplify macro usage +- Add (X)Emacs support packages +- New subpackage for the jessie plugin to avoid unowned directories and + permit a direct dependency on frama-c +- Prepare for the eventual availability of APRON + * Thu Apr 14 2011 Karsten Hopp 2.28-2.2 - add ppc to excludearch, too. No pvs-sbcl available there