ELF4t4 (444(((( ( x<< < ((( Qtd/lib/ld-linux.so.2GNU%/,+-&) (. *!"#%   $ 'SgD%$m9._\[f~K$LA=& & e RuZMQA9X't$+4)`C& 22DP4f > 6"_Jv_RegisterClasses__gmon_start__libc.so.6putcharstrcpystdoutungetcfscanffgetsmemcpysystemmallocfflush__sysv_signalfprintfstrcatstdinstrstrstrncmpstrncpyunlinkrealloc_IO_getcsscanfmemsetgetchartimestrcmpsprintffclosestderrfputc__ctype_b_locfwriteexitfopenatoi_IO_putc_IO_stdin_used__libc_start_mainstrchrfputsfree__xstatGLIBC_2.3GLIBC_2.1GLIBC_2.0$ii mii wii  -& & & $    $ ( , 0 4  8  <  @  D  H L P T X \ ` d h l p t x |     ! " # % & ( ) * , - .U,5 % % h% h% h% h%$ h %( h(%, h0%0 h8p%4 h@`%8 hHP%< hP@%@ hX0%D h` %H hh%L hp%P hx%T h%X h%\ h%` h%d h%h h%l h%p hp%t h`%x hP%| h@% h0% h % h% h% h% h% h% h% h% h % h(% h0% h8p% h@`1^PTRhOhTOQVh/USQ[tX[ÐU=& t Ȥ ҡȤ u& ÐU8 tt $8 ÐUD$E$U( E}u E*}'~ EE }'~E' ¡ )E tE D$$EE$EEE}u EE EE  tE D$$EE$YEMM}u E+ P @D$D$ T$D$$ k & H& *k t @D$$М蔤 @4 * $s4 *  ~*  & e* @D$$D*& @& 4*  @T$$V& H& * P @D$T$$3f6s 6s fzs ) P @D$T$$3f6s 6s fzs u) P H @T$L$$2f6s 6s fzs &) P H @T$L$$~2f6s 6s fzs (& @& D$$UE䡼& H& D$ D$D$$  EBfzs g(& @& D$$/UE衼& H& Ef@D$ D$D$$w  EBfzs '& @& D$$TE졼& H& D$ D$D$$  EBE$Nfzs q'$v`'D$ D$D$@$覢$/' $C' ' $& & $& & P T$$Fp &D$$Mx&D$$4_&  N&  T$$ '& &  &  %  %  P L$T$$j  %  P L$T$$t&  T$$L U% @=tD$$8 $o t @D$$Nϝk $D$$h蝞$ D$ D$D$,$ $  T$ D$D$,$ԟ `$ Q$  @$  D$ T$D$0$耟  $   L$ T$D$0$C # D$ D$D$/$ #  T$ D$D$/$۞ g#   XD$ D$D$.$藞C0 @@0@# P B0    T$$d& " P B0  & " @t 0s @0s  ,s @,s  $E& }}EE9E}UUM &  D$ D$D$@$g   @B! @@  ! P @B @v- @D$$T @ @@  =!  P @B   !&  D$1T$$K  D$ D$D$1$$  4   D$ T$D$1$ۛ g & @&  @@f=D @@84 -    B$ t* @@f=t @f@& H& & u>& u5 @@fu @D$$h t P T$$M4 M > D$ D$D$.$聚      & D$$谗& @& & H& 4s @f4s      L$ T$D$r$ؙ  D$RD$$bE& @& 5& H& 4s @f4s      L$ T$D$s$S  @ D$SD$$Cb $X D$ D$D$$   @B $~ND  D$ D$D$$脘   @B $D$ D$D$$3  C D$ D$D$$  @@ft0 @@f=t @D$$ǝ# @f@-  D$ T$D$:$j  @@ft6 @@f=t @D$$ǝ萔 @f@   L$ T$D$9$Ζ   T$$\  D$T$$ $'D$ D$D$.$L  @  T$ D$D$+$    L$ T$D$9$ؕ   T$$[ $S @@f@D$$ٝؓD$ D$D$.$I  @  T$ D$D$-$    L$ T$D$9$Ք   T$$Z $P @@f@D$$ՒФ    D$ T$D$$+ Ф  D$ D$D$$ y D$ D$D$$蹓 E D$ D$D$$舓  D$$R  & @& & H& 4s @f4s      L$ T$D$r$ frs  @ D$RD$$[R& @& B& H& 4s @f4s    L$ T$D$r$]  @ D$RD$$J[& @& & H& 4s @f4s    L$ T$D$r$Ƒ  @frs  D$RD$$Z& @&  & H& 4s @f4s      L$ T$D$s$) fps  @ D$SD$$Z $Pr D$ D$D$c$赐  $P4D$ D$D$$z $  D$ D$D$$5  $ED$$?C @D$$$l D$ D$D$$謏  $D$$C @D$ $A_$D$ D$D$$)  $9D$$3C& @&   @T$$;& H& M  <  @D$$C  P @T$$C$D$ D$D$$  $(C  ~  m  Y  T$ D$D$+$薍 "  T$ D$D$-$_   T$ D$D$*$(   T$ D$D$/$ }  T$ D$D$%$躌 F  T$ D$D$&$背   T$ D$D$^$L   T$ D$D$|$   T$ D$D$B$ދ j  T$ D$D$C$觋 3  T$ D$D$D$p   T$ D$D$E$9   T$ D$D$@$   T$ D$D$A$ˊ W  T$ D$D$?$蔊    T$ D$D$>$]   T$ D$D$F$&   T$ D$D$G$ { D$ D$D$~$辉 J D$ D$D$J$草  D$ D$D$!$\    T$ D$D$>$"   T$ D$D$?$ } & @& k uD$$%k EE Eu}M( ̤  & H&   D$ T$D$ $: 5 u t @EEE}G  D$AT$$P $N^  D$ T$D$ $蘇 $ D$ D$D$ $d js @fjs  & @&  & H& 4s @f4s    L$ T$D$R$ y & @& i & H& 4s @f4s    L$ T$D$R$脆 frs  @   D$'$-   D$ D$D$.$   @fB  @Bl D$ D$D$ $貅 > D$ D$D$!$脅 ns @fns  D$ D$D$ $B ls @fls  P   @T$L$$蟈  X P   @\$ T$L$$n < P @T$D$$!  P H @T$ L$D$$         s $Dru#D$$.* :  & D$$F      T$ D$D$?$   T$ D$D$?$ p  T$ D$D$>$譂 9  T$ D$D$>$v   T$ D$D$?$?   T$ D$D$>$   D$ T$D$*$΁ Z  D$ T$D$,$蔁    D$ T$D$+$Z   D$ T$D$-$  @  @B @|D$$d8c  @B @? P D$ D$T$$|   H T$ D$L$$<         w  f,u*   T$$m :   T$ D$D$,$t  f,u   D$ D$D$,$"  f,u'  T$$ t  T$ D$D$,$~ =    T$$XD D$$U} D$ D$D$ $;~   D$$}D$ D$D$.$}   @fB  @BWD$ D$D$.$}   @؉B f,u   D$ D$D$,$6}  f,u'  T$$   T$ D$D$,$| Q  f,u*   T$$G    T$ D$D$,$N|    D$ D$D$1$ |  D$ D$D$,${ n D$ D$D$1${   D$ T$D$,${    E)ȣ  EЋ E)Ɖ EPEȃ}uv}upE   f     y9  y   E^Ẽ}t7}}̃}x+} "E};EuE_EEWEЋ  9r u8   Ef    6$^EEEăl[^_ÐU}"t} t EEEU6Eu}_u EEEUE%UE%U(EUE ESUE E}\u;EE y $YE8EUE舐 E y $$EEUUE$E ЅoEƀ  y UD$$U( y $EEEEE;EuE E* y D$E$?8EEEUW$EE}H@$7vEED$E$Mk EhEET$$uCED$$ tUEPUEBUE B8 EPE@$E}u$(uEUEUEPUEBEtAEE}H@$Su‹EPEPED$$aUE B8 EPk EP$Ek $_U( ED$ D$ D$$<ED$ D$D$$FED$ D$D$$Zuzs fk EE@ftE@fED$D$oE$E@EEE< tE< tE<\t݋ED$$"EEE}"t}%t-} t<_ED$ D$D$$yRD$|E$s=ED$ D$D$$NEЋED$$EEEt }HEt#ED$ D$D$$ED$$"ED$ D$D$$E@$E}EED$ D$D$$zED$ D$D$$WU(k E,ED$E$u EE@$E}uEEU(`+ tI`+ EB`+ }uL`+  + EB+  + EB+ }u^  + @   + @ 8  H  y $PE/EEEEEEU`+ t `+ H`+  + J+ Uk E#ED$E$軾tE@$E}u׃}uED$$pEU$pEUEUE BUEB + EP E + U$XpEUEUE BUEB+ EP E+ }ED$ɢ$u E@kED$Ӣ$辽tIED$ߢ$襽t0ED$$茽tED$$n f& U(EEEE< tE< tEE< tE< uEE< tE< tEE<*tEE< tE< tEuED$$nD$[E$荼t3D${E$vuED$$,mEEEEUWV@ED$ D$D$$UP + EE@{E@EElEu}M(E@E*E<"uE E<\u E EEEűE$3E}E@D$ ED$D$uE$vE@EEԄEu؋}ԋM(uE@E*E<"uE E<\u E EEEűE$sE}t&E@D$ ED$D$E$躺E@ E}dED$ D$D$$脼@^_UWVPEE D$D$E$T + EE@E@EEдEuԋ}ЋM(\E@EE<"uE EEuE$LEE@EEE< tE< tEEȸ}H@$kEED$E$蝻EEĸ}HEHE EEE< tE< tED$E$uc}t*ED$ D$D$$ۺE}t-E@D$ED$ E D$D$ԣE$衸E@ E}GED$ D$D$$kP^_UWV4L + tL  + EE@EElEu}M(t|E@EEԄEu؋}ԋM(tDE@EEȴEű}ȋM(t L E@ E}94^_UWVE + u+ u EV + E_E@EElEuЋ}̋M(uED$D$E$϶E@ E}u + EE@EElEuċ}M(tuE@EEEu}M(t=E@EEEu}M(tEE@ E}@+ EEE@ E}u}u EEED$ D$D$$虷 + EE@EElEu}M(E@EEEu}M(tE@EEEu}M(tGE@E؃}u EEu؉t$ }܉|$D$E$螴EE@ E}+ EZE@uGE@E}u EEED$ ML$D$E$0EE@ E}u}uED$$4ED$ D$D$$EEԁĐ^_U(E + u + #& fu+ EE@tEE@ E}u}ED$ D$D$$CE+ EZE@tGE@E}u EEED$ ED$D$E$EE@ E}u}u#ED$ D$D$$.詴ED$ D$D$$膴UWV0 + EE@EE1Eu}M(uyEEEظ}HH E@D$D$:E$EEEԸ}HH"E@ E}<0^_UWV0 + E D$$' 輳' E}H' f + EE@EEܴEu}܋M(u^E@EEE< tE< tD$' E$İuED$D$E$貰E@ E}W0^_UWVED$ D$,D$$Lj + EEEE}HH E E@E@E}HH E@ E@EElEu܋}؋M(E@EĒEuЋ}̋M(E@EEEuċ}M(t\ED$&$tED$$|`EE@T$ D$D$E$E@ E}p+ EzEEE}HH E E@E@E}HH E@ E@ E}u u(ED$ D$D$$& fvED$ D$D$$ޯED$ D$D$$Ф軯D$E$設ED$ D$D$$腯+ EE@ED$D$E$LE@ET$ D$D$ E$"ED$ D$D$$%E@D$D$,E$E@D$D$EE$E@ E}6ED$ D$D$$T苮ED$ D$D$$XhED$ D$D$$ФED$xE$2ED$ D$D$$ + EE@EElEu}M(E@EEEu}M(E@EEEu}M(tIE@ET$ D$D$E$(E@D$D$E$ E@ E}+ EE@ED$D$E$轪E@ET$ D$D$ E$蓪ED$ D$D$$%pE@D$D$,E$QE@D$D$EE$2E@ E}6ED$ D$D$$& f)ED$ D$D$$إɫED$ D$D$$Ф覫D$E$蓩ED$ D$D$$p+ EzE@tgED$D$E$>E@ET$ D$D$E$E@D$D$EE$E@ E}uED$ D$D$$êED$ D$D$$8蠪ED$ D$D$$Ф}D$XE$jED$ D$D$$G + E E@EElEu}M(E@EDž|Džxu|x(E@tDžpDžltpl(tIE@ET$ D$D$|E$BE@D$D$E$#E@ E}+ EzE@ugED$D$E$ަE@ET$ D$D$E$账E@D$D$EE$蕦E@ E}uED$ D$D$$cED$ D$D$$@Ġ^_U(} E P$ED$T$E$E @@E @;EE D$D$E$ǥE @EEE< tE< tE<\t݋EE E ED$E$CE}uًED$D$E$PE D$D$E$2Uk D$D$E$U uL tE$PE$Tk D$D$E$ + u + t%ED$ D$D$$˦臦#ED$ D$D$$ߦbL t E$E$E$ Uq q Eq ET$$tzED$D$|$¥E@|D$$舤t;Eq T$D$$ED$$,hUE@E}SUE $bEE$E@‹ED$$U(} E f=E @$ EE@E@D$D$LE$΢ED$ D$%D$$x諤E@D$D$E$莢E@D$D$E$qED$ D$D$$N*E @$D$E$ E @ D$E$U(E$EE@ED$ E$uD$(E$詡;Ev EEEU(E $EE$jED$ D$D$$}}E@E@D$D$LE$HED$ D$%D$$x%E@D$D$E$E@D$D$E$ED$ D$D$$ȢE@‹ED$$qED$ D$D$$,莢UE$EE@ED$;E$,u.D$0E$uD$3E$tgE@ E@8 ED$$6QXEHt EH< * $  t) {t%}t+ @ EEEEE}EE@fu EEE D$D$ D$ED$E$}t-}t'E8 T$ D$ED$$E,}uEE$2EE!T_UWSP y $pEOEЋEЉEE  U Ũ};}̋H @ & uE$3D$DE$J y $"E "E׀}tD$ $G Eȸ}H f"& D$ D$D$$H  $  CE5 y $EE܋E܉E}\uc y $EEUU}nu E +}ru E }tu E }fuE y $芖'E e'E}t& uD$ $*/F& D$ D$D$$G  EBE.`E$&tlD$E$1& ID$ D$D$$$G  $ CE.E$u}_uFD$kE$& $ E}}}E!Eă}[9UċĪD$/D$$*$E}& PD$*D$$/E}& D$:D$$:ED$-D$I$-D$D$$>~EcD$+D$H$+ZE?D$CD$E$=6D$D$F$<ED$BD$D$=D$D$G$>ED$9D$@$=ED$:D$;$!D$D$A$=EjD$<D$=$?aEID$&D$?$&@E(D$|D$>$|EE& ID$ D$D$$$D }}؋E؃P[_US$D$ D$D$$C EzE D$E$"uV E BE t E $YCE E|EE r E$dCCt f@E.1D$ȭE$jufs @ffs  `+   + @EEgE@ @D$E$7  + P ED$E$Վ  + @EE@ @  + P EL$$腎uE@ @ D$T$$Э蜏  + D$$;@ E@ f E@ @$CE1E@$E}9  + P E`+ E{E@$EE} E$CE$rt E27E$觍t E3E$t E4E1E$[U(+ t+ E+ E+ =u0}t'}tE+ + E+ }ur}#ti}8t`}6tW}tN}tE}t<}}t6}t-}t$}tE+ + E3}uEk t 4 + + }t + =u+ E+ E+ & D$#$ u& @& &  ƀ+ D$%$ 诋uM+ @+ + u& + P&  + D$ $蓌.D$'$ Ju:+ H+ + &  + D$ $A}.uM <'uB @D$D$)$ ،&  + D$ $E-E}3TU0f :: 3f ;%f -- f ++ f << f >> f <= f <f >= f >f == yf =nf != \f ?? Jf ??f !! -f !"f && f || &  + D$ $`EEEÐU}u} u E6}t} u E!E ET$$ވEEUE)EЍEEE EtEEuEUW$E$EEl EdEED$$NuCk E@@T$$t'4 E@} t E @EEE@ PED$ ED$ED$$5E@$EE}uUWVP EE*E@@ftME@@ u6E@ E@8 E@D$$=T3E EPE fB& tAEPE@@ B } @u%EPD$ FED$D$$4} ucE@@ xE@@ ~E@D$$S3E@@ uHE@@ D$$p2%E@@ ~E@D$$g2}E@EE໯Eu}M(u=EPE@@ B } E@D$$į2E@EEEu؋}ԋM(uEPE@@ B NE@EEEű}ȋM(uEPE@@ @B } @uEPk @k k BZE@@E@@0t@E@@0f@u.E@8 E@ E@D$$1E@@6E@ E@8 E@D$$0E E@$EE}P^_UE@ U EP } t } E HUD$tak U JED$L$$t=k U JED$L$D$$4ED$$X/M Ik ET$UEErE@ EXE@@f=uE@P4E D$$%E@@f@uEPE D$$E@$E}uE@$E}uUfts k u*E@ E@8 D$$x/EE$(/EUE BEP EP k EPk EP$Ek E@ EE@@f=uE@P4E D$$eE@@f@uEPE D$$> EE@ E@8 E@D$$.E E@$E}US$ E}tE@ E@8 k u Ek &k E E@$EE@$uUEB$k EEE@ t)E@ @tE@ f=1u E@ @ tD$$-.E@ @@f=toE@ PE@ @@ ȀB E@ @f@E@ XD$ D$D$.$\/C0E@ @P0EB/E@ @@0@;EtE@ @D$$İ,E@$EE}E }~D$$?-$[U(Ek E4E@ @D$E$ {uEEEE@$E}uEEUE E} } 4}t{}}R}}9}}}@t|} }}#Eunsi@gnedf@ Ebit f@ @Ebytef@ @Echanf@ @Eshorf@t @Eint f@ @xEmtypf@e @cEstruf@ct@NEproc@type@8Elabef@l @E#Evaluf@e @EEEUED$E$4tED$$:zDž| Dž||U(E@$3$ xE@l@tlt-l t$ E$E@  u5E@@u)zs fu tEE@ B zs f8 D$$sE@D$|$E@@tE@@D$$s $sED$|D$$IJsE@E}[ÐUWV`E@EEEEEu؋}ԋM(u D$$"EEEEEű}ȋM(u(q t q @EEuutEEE Eu}M(u7q tq @tq @@EEuuEEEEu}M(u1q u Eq P r )ƉuEEEEu}M(uq q )ƉuYE@@tE@ftE$E3E@fuE$EUEBE$E܋E܃`^_UE@@@t&E@@ftE D$E$<ED$ D$D$1$p k EEEE@fE@@E@<E@f=#E@fuE@fdE@fSE@f=uE$1E@f=u!ED$D$E$^EE@f@uD$ED$E$=a t1 u"EPr 9}D r 9wp EBp P EBp $EED$$4hE@~ED$$ h$ hE@f=& D$ED$$1`$ f( E@ "  uF uED$D$$" 9hED$D$$" hE@f=D$E$^E@ uL ‹EP  EgfffE)É]؋EЉ)‰U؋E@ E@ Сq HE uD$" E$@A uD$" $"fED$" D$$(lfr ED$T$$8Of$`ceED$$.fE@~ED$$ fD$" $eEE@;E E@E}"D[US4}E@Ep uID$ D$D$.$D$ D$D$1$p EEE@f=u EED$T$E$[oETE@f@uED$ED$E$~]$ t1 u"EPr 9}D r 9p EBp P EBEEPEL$ T$D$$pdE@~ED$$ Rd$FdE@f=ءp $& \$D$$c\$ c( )E@ "  up u4EEPEL$T$ D$D$$" Vd2EEPEL$T$ D$D$$" "dE@f=ءp $\$$ZE@ uL ‹EP  EgfffE)É]EЉ)‰UE@ E@ Сq HE uD$" E$>= uD$" $"bEEHED$" T$ L$D$$Ubr ED$T$$88b$̴LaEEPEL$ T$D$$bE@~ED$$ aD$" $aEE@;EE@DE}Q4[ÐU4p u@q t $@q j`P tB, u9 u0< u'4p ur ~8p D$$/a t9, u < t'}tED$$ ` $* `E$"aUW4D D$$aESHf E@p D$$Z`E,p 9E~E D$ED$ D$D$8$`$/_tME $_}t E$^& D$ D$D$$C`$.}t E$^4_U(D$_E$H`ED$aE $2`E}t}u=E D$ED$$cY_$ED$$^ED$D$$^uʋE$*_EU$^$^$յ]$]$]$D]$l]$]$̶]$]$]$@o^$b]$tW^$k]$_]$ܷS]$$G]$H;]$x/]$^$]$Ӹ ]$\$\$<\$d\$\$\$\$\$=\$X\$\${\$Ѻo\$c\$W\$0K\$X?\$3\$'\$̻\$\$CU(EEE1E}U  )У   t EEED$$$d\_ )У  : t EEUT$$L\  )У   t EEED$$x[ )У   t EEUT$$b[` )У  t? t EEED$$ż[$%ZUWV)$AZEE&  &  & 4 E @A6$E $Z ,   uL f W H,p @,p ,p E @p # ,p @,p ,p E @p E $p ME E p ME  @ P    qE $dYD T  B 3T $E (p ME  E $XE E $EE D   ;YE  iE $\X$NLI  7  % < XE  E $WX ,p @,p ,p E @p E $WH   p$ :V$nV @ G   D$)$ W( 4p ME }~E <-}t, u $DU$p $p  p  p @f$p D$_$V4 4 u#$p D$$xV$i4 D$D$$$jU4 $U& 4 $p $}H@q pan.Dq pre p u (p tEpan.@___ p tcE ED$$4  p D$$菼@ 4 $YUD$D$@q E$<(p (p D$_$UE}u#(p D$$xT$)E ED$$4 4 D$$$$TED$D$$$Suȡ4 $TE${TD$D$@q E$^ E D$D$@q $<4p t $iD$_$@q T  u D$@q $xS$'E  DžDž (tJE DžDž(u$E D$D$$$SE D$$$T$$!8 8 0 0 <"0 HE0 EH0 @$0 $8 8 0  p t;}~ p D$$x$lR$@Q$t$ (Q$ǽQ& $P u2 u =t$P$U t+ u u   u( t  E$0E8p $ zEEf@$ bEEf@$JEEf@$2EEf@$EEf@S $PW t跣Dž\p uD< u) u  t  D$$B{@ $Dže^_UUW8 t 8 EE UT$D$$ O} tE D$E$O E$O t. t%$&O $?$'N E}HvD$ $-^O$ RN@ @@ _UE D$E$$}UW$}u E@E$*NE}uD$$8UEѸEEE$_UE@tE@@fEfEEfEf}t#f}tf}tf}tf} tf}uФ tEPE@@ ȀB UE@,E8Ek 9u!E@;E uE@;Eu E@ ;EtYE@E}u$Ek EUE BUEBUEB EP,EPUEB,U8$(zEE ‹Ef}t$E@tEPEPEPEPl}t$E@tEPEPEPEPB}t$E@tEPEPEPEP EP8 EP}t EPEPUEB UEB$Ъ EP } u @ k u EE} rt} su%EPE D$ D$D$$&} Ru&E@D$ PD$D$$k & 9 EE E} } 0}c}c}REr ?}-}*}z} t=}9t$LJD$$xQ$ t tE$ @$  H E@tVE@@ uCEPE@@ B  u$$ JE@D$$ĿJED$E$ kE}$JE $C$ ID$$Cv} t } uG0p #E u;} u E+E5ED$$@8J0p  E 0p } !uD$$pEEEU( @ Ef@ED$E$[D$ E D$D$?$ EUEBD$ ED$D$p$E$ 访‹EPD$ D$D$1$EUEBD$ ED$D$q$rEUEBED$ ED$D$@$DU( @ 4 @4  D$ E D$D$?$EUEBED$ ED$D$p$EUEBEU(& EEE}Dw U<}~#}ED$D$E$FED$D$E$FO ED$ D$D$$H' ED$ D$D$$rH ED$ D$D$$JH ED$ D$D$$"H ED$ D$D$$G ED$ D$ D$$G_ ED$ D$D$$G7 ED$ D$D$$G D$ D$E$bE ED$$@:F ED$ D$D$$"G D$' D$E$E D$ D$E$Do D$ D$E$DO D$1 D$E$D/ D$' D$E$D D$' D$E$bDD$' D$E$BDD$' D$E$"DD$' D$ E$DD$' D$)E$CoD$' D$3E$COD$' D$=E$C/ED$ D$ D$$EzED$ D$PE$ZCD$' D$UE$:CD$' D$^E$CD$' D$kE$BED$$.CoD$' D$pE$BOD$1 D$wE$B/D$1 D$E$BD$ D$E$bBD$1 D$E$BBD$' D$E$"BD$1 D$E$BD$ D$E$AoD$' D$E$AOD$ D$E$A/D$' D$E$AD$' D$E$bAD$ D$E$BAED$ D$ D$$CD$' D$E$@D$' D$E$@gD$' D$E$@GED$ D$ D$$BD$ D$E$r@D$1 D$E$R@D$ D$E$2@D$ D$E$@D$' D$ E$?ED$ D$ D$$AWD$ D$E$?7D$ D$$E$?D$1 D$.E$j?D$1 D$7E$J?ED$ D$ D$$?"AD$1 D$LE$?D$' D$RE$>oD$' D$WE$>OD$ D$\E$>/D$ D$aE$>D$1 D$fE$b>ED$ D$ D$$q:@D$1 D$~E$>D$1 D$E$=D$' D$E$=gD$' D$E$=GD$' D$E$='D$ D$E$z=D$ D$E$Z=D$ D$E$:=D$ D$E$=ED$ D$ D$$>ED$$;=gD$' D$E$D$' D$E$R<D$' D$E$2<ED$ D$ D$$ >D$' D$E$;zD$' D$ E$;]D$ D$E$;@ED$ D$ D$$'=D$' D$2E$n;U(q D$ D$D$$A=q D$ D$#D$$=q D$ D$D$$D$>D$T$ ED$D$E$q EE}yUE¡q ¡q  E ¡q fU( E EЙ}Љ)‰ЉEq D$ D$D$$S2q D$ D$#D$$\.2q D$ D$D$$ 2q D$ D$*D$$1q ED$ D$D$$/E¡q q D$D$$/q D$ D$D$$En1q ED$ D$D$$I/E¡q k2 q ED$ T$D$ $/q D$ D$*D$$0q D$ D$'D$$0q D$ D$D$$0UWS`} uE$E$EHRP,$d$]Eٽ f٭۝٭ E Й)Ek2U D$D$D$D$ \$L$$E<~u{E@Bt Gt4L>EL>E?E2L>E?EL>E?EL>EL>EED$!E$,t?E?E?EhD$?E$,tE?E?E4?E?EE} D$ ED$D$E$.EUĪ 9E¡q tWE¡q ЍPEH9w}t+EP r )‹ET$D$$KE@tEE D$T$$SED$$]yE$[aEd}~ $,FEPE=ȋEPE@ EE& L$D$$JEE@ ;E$]EE@;E\$ E@ E}NU(E}E@E@@f@E@D$ LD$D$$} t E f=.uD$$c} tEE @t;E @@f@u+E @D$ VD$D$$虶} E f= E f= uE @tRE @@f@uB}uD$$x6&E @D$ VD$D$$ E f=1t E f.uEE P ED$T$E$nE @$D$D$E$QUWV@E@E@uE@EEE}Hu3EEEܑEu}܋M(tSEEԸ}HuFEEE̘EuЋ}̋M(uED$$ɳ@^_ÐU$ӳEq D$E$aEEq }t q Uq Ъ UЪ U(EE}tgEt^Ef=uPED$$E}tEPЪ 9}#E@ E@8 EdE@$E1EPET$$\u E1E@E}uɋE@0E}t E;E 6EEU}t@} t:EP E @ 9t*E@ E@8 D$$(UEf=t?Ef=t3Efcu0E@ t&E@ f=.uE@ @u EEEU(EEEEEEE$fD$E$E}Ef=Ef=t~ t"E@E@T$D$$NE;EtCE@;Et8E@;Et-E@ƒEPEP0EP0EEEEEE@0E}U}tXk t(& t& k T$$ou'E@EE$E@E}uU8q E}6ED$$oE}EEEtE@EEEtE@EE ED$ ED$ED$$ }E$8$\$Z$$$r$%$U$ i$=$0Q$ $T4$$x$$$$$$$$$ $$'$$9v$Gj $S\$萛}u/EPET$$wuD$$l躭q @q q EP EPEPE@uD$$wEU(D$ D$D$$EEPEPEPEPvs @fvs E f=u E @E6$=E $ $D$$EEf=uEPEBE@EcEf:E@ f=t"E@ f=tE@ f=E@ EE@ PEBE@ PEP$sE$ D$ D$ED$$螭E$D$$‹EPEPEPEPEPD$ ED$D$:E$=EEPEPEPEPEEF$E$O $‹ED$$EUEBEEEU$IEUEUE BEU}tDEf=t Ef=uE$EuEf=uE$EY$4ԪEUEq EPBq q EPBq q EP,Eq EEEU }u EZEE}r|}s~ E-*w E,E@ $t EE@$$EEUq EEE@0E-E@0E E@0E}tEf.tE@@@0uE@PEB0qE@@@0f=t9}tE@@@0PE@9t3D$$E@E@@@0BE@,E}U8EEE@E$ED$ D$D$.$$jEEEEEEEEf=uU}tD$$E@tIEE}tEPEP5EPEPE@EE$nE EEE@E}Y}t3E@}uD$$耧EUPEE}tU}tOEf=u=E@hs @fhs D$$2@ H@ D$ D$ED$E$莨‹EEEBUEB$EE#ED$E$EEE@E}uׁ}ugq D$E$xD$ D$D$E$$TE ‹ED$$q @q q D$E$q D$E$EU(E@(EE;E E@E}uE@(EEE D$$E@E}u݋E@(D$E $a‹EP(E-E}UHE@$E D$$jfE@$EEE D$$IE@E}u6E@E D$$E@E D$$UEE&E D$E$E@;EtE@0E}uU(E@E$ED$ D$D$.$$RED$ D$D$E$Х‹EEEBUEB$}tE@t E@@tD$$lEEED$E$E@E}u݋E@ET$$q D$E$q D$E$iEU(D$ D$D$.$EE@D$ ED$D$c$赤$ U(Ef=uOD$E$IE}t3gEED$ED$E$PE D$E$E u U E E PEB0U EBU(}u EPEf:u.E@ $EEPED$$EEEq E$EEU}tVEq E$wEq f=t2q f=t$q f=tq D$E$U}q E9E;Eu&EPk 9uED$$E@E}u$wEUEk EPUE Bq EPEq U(E@Eq EE;Eu E@EGE@E}u܋E@ E@8 } tED$$譠EEUWV8q EE@;E} E u;EEEܯEu}܋M(E u7EEEжEuԋ}ЋM(tGE uAEEEĺEuȋ}ċM(u EEE@E}EE8^_Uq EE@;E u UEBGE@E}uۋE tE @ E @8 ED$$US$q EBEET$$uE@E T$$tE@E}u}uRE ET$D$$ED$$耝k ;E $E@t E@uED$$M%E@f=*$4*EE@@EE@@EE@EE $‹EPE@P0EP0q EPBq q EP,Eq EXD$ D$D$.$D$ D$D$c$ޞE@E@P EBBAE@E@P EBBAE@@ @EPEB0EPE@@ȀBE@@&tED$$d踛$[U(q EaEET$$zuE<:t0E@E@PEL$ T$D$$rE@E}uÐU($$EEEE@ЋEP q q )r ‹EPAq  u t!EPET$D$$E@u/Et EEEED$$蝗E@@ЋE@D$T$$*}‹EPEPEPE@@tE@PE@@@@Bq EP EP EPUE B }t E$r E r Eq U($EUEUE BUEBUEB r ʋEfPAr E‹EfPq EPEq E EE(E@ EEE@$E}uE@$E}uҡ(s UUEE9E}UUE(s q Uq E%E;EuEPB E@B E@E}uաq E@q EUq EE@tnEE@EVE@ Eq @$)u*q q 9Mq @fDŽE6q q @$=Cq @@$q @q @$7E}tEE؉E u}t u EU؍ET$$m%q @D$$}t $z$q @& D$D$$hq @@(t $$EEEE؉Eq @@$EE1E̋$E} Ef=u7r u M DžEЋE؉E܍EE$5E}tEE؉E u}t uEyU؍ET$$mq @D$$}t $z$uE& D$D$$Yg$jE̋@Ẽ}}UE)ыUE)H9|?E܉EE܉D$$mq @D$$$\$OEEq EEq q u q @q q D$$$ q & D$D$$[$r q E$CE EPq @ q q u q q E}&r Eq E EE؃4[UE@E'E ET$$XE@DE}u$H{EE EE PEfPE P EP E P EP E PEPE P0EP0r EPEEP@E @f=tuE @tVE @$={‹EPE'EPE E PEEE @;EXD$E$HZCE @tE D$$XzE P4EP4E P8EP8E PEE@ $EED$E$tpE@f=u#E D$ D$ED$E$膭@EPEEP E@ȉT$E D$ $Vr EP$[Uq }tr D$$4$: r ftq @u$@&q P r )ȉD$$Cq D$$GfU u tLE@D$$8$  tX t E$%]U8E}tEt E@E r ftIq t@q @u4Ԫ ;Et*}t$ tED$$N~EԪ E $f}E@EEtE@EE_Et E@EEED$ ED$ED$$a u7E@uD$E$t $xU(E@ E@8 E@@ftEE@@f=t5E@@D$$aE@D$$rE@ xE@D$$qE@ PE@D$T$$"E}uE@D$$qEU8EE@ E@8 E@ @ uE@ @$vE.E@ @ $E r ЍE r E}y E,q q )ȉEq E8EE;EE@ @ET$$ƾtBUE)щʋE@ @T$D$$׿ED$$"oE@D$@$hu'E@tE@@E_ESq EEq E@ EEP$EP E@EE@$‹EPE$KEUEBUEB Eq EEE@ E}UE)щʋE@ @T$D$$CȾE@D$$Wn$dĽq q )HEq ENE@ @ET$$'uED$ED$$oEE@ EE}uEEÐUEت US ت E_ NE )É]iE)‰Ui]A ت E_ NE )i )‰Уت ت ت ت ت [U}u E1E@$E}tEEE$EEUhEuDž Ef=u\r tDž Eq ED$$qEԋEԋET$$Eԉ Ef=uE@$$U E@$EEEE 2 uw s un$s ueE@uQr D 9|B$x$$q q )Ѓ~ $E@$EE[E @2 3 s &$s E@r D 9E܋ u& uE܋$E܋f=u6r uE܋@0 DžMEEhED$$貺E܋$=u$蓺EE܋& D$D$$lJ$ ]E܋@E܃}}u}tED$$+ Gr D 94$s 'E@ s 2  tED$$谹ED$$蛹& $nD$$ȸc t$蔹E2ËE$1Ds 2 ED$E D$ D$D$$$E2 ED$$2 E D$D$ $s8s u} 6s ft"2 E D$D$! $rB2 U T$ U T$D$2 $r}u4Ds P2 D$D$2 $yr8s @ft8s @fu 8s @t48s P8s  2 T$D$ E D$D$P  $r8s @E}}}t;}}t_}@}} Ds P2 D$D$2 $q8s @u4Ds P2 D$D$2 $Eq2 D$ D$D$$o se2 D$ D$D$$v r>2 D$ D$D$$} r8s D$$ "2 D$ D$D$$ r4[U(r E2 ED$D$ $^p2 ED$D$ $Ap2 ED$D$̆ $$p2 ED$D$ $p2 ED$D$ $o2 ED$D$* $o u2 ED$D$? $o{2 ED$ ED$D$T $o2 ED$D$r $co2 ED$D$ $Fo2 ED$D$ $)o2 D$ D$ D$$݃ qUHE@EEEE@EE@Ep% 9Euw umE2 D$ ED$D$ $n2 ED$D$? $~n2 D$ D$ D$$݃ YpMp% 9Et 5E@D$D$E$@E2 ED$ ED$D$ч $mp% 9Eu2 ED$D$ $mt% 9Eu2 ED$D$ $mE2 D$ ED$D$ $}m2 ED$ ED$D$T $Ym2 ED$ ED$D$ $5m2 ED$ ED$D$2 $mxs fE2 D$ ED$D$E $lE@ tj2 D$ D$D$$[ nE@ 2 D$D$$ 2 D$ D$D$$` gn2 D$ D$ D$$f BnE@ t%2 D$ D$ D$$݃ n2 D$ D$D$$q mEEEME؋@ E,Ef,u E܋@ EE܉E̋ẺEE@@t.E@ E@8 E@D$$ ^2 ED$D$ $RkE@@f=u[E@2 D$ D$ED$$ [tJE@ E@8 E@D$$ 2 E@T$$k2 ED$D$Ј $jE܋@$E܍E}E؋@$E؃}2 D$ D$D$$ۈ `lE2 D$ED$ D$D$$$E}~x2 D$ D$D$$} lE2 D$ED$ D$D$} $j2 D$ D$D$$ k2 D$ D$D$$ k2 ED$D$ $oi2 D$ D$D$$ JkE2 D$ED$$2 D$ D$ D$$݃ kUEEEEMEEEt>Ef.uE@0t E@0EEf=u E@$EE;Et}Eu}}uD$$ MEU(EEE}EE@;EEE}t(} }.tI}t;}tRuED$$xEEET$$/gME@0u EEE@0E-E@$ED$E D$$EEEqE tE@uEEJEEE} E}}uD$$ EEEU(E E@E} }*}}0}>}tM}@}@}} }%}iE@ t!E2 D$D$* $#f)EP E 2 T$ D$D$5  $eE8s Ds EEЋM9Ѕ~QDs EEЋM9E)щʋE@ 9}*Ds EEЋM9E)щʡDs Ds EP Ds Ds E@uHE@ u7E2 D$D$G $2eE8s Ds @Ds EE@ u. tEPET$D$$X  fE@Ds Ds E2 D$D$ $dE8s E2 D$D$ $vdE8s E2 D$D$ $JdE8s kE@8uED$$ EE@8 2 T$ D$D$̉  $c8s ED$$ډ E@t E@2 D$D$ $c2 D$ D$D$$9 eU(E\EEGEEED$E D$ ED$T$E$=cED$$ dEE;E|EEEuU2 D$$ c}'2 D$ D$D$$HJ dU}'2 D$ D$D$$ d%2 D$ D$D$$ gd2 D$ D$D$$ BdUHE2 D$ D$D$$4s ft*q u!q 2 D$D$ $aq 2 D$D$@ $aq @2 D$D$P $aq @2 D$D$c $vaq EE@;E~ E@EE@ E}uݡq EEE2 ED$ ED$D$u $aE@ 2 D$ ED$D$ $`E@} Dž2 D$ ED$D$ $`2 D$ D$D$$ |b2 ED$D$ $_`E$M2 D$ D$D$$Ҋ /b2 D$ D$ D$$  bE0EPEt5t{@tmta E@ tD2 D$ D$ D$$ ca2 ED$D$ $F_q2 ED$D$ $'_R2 ED$D$ $_32 ED$D$. $^D$$$< EE@ ;EE@} Dž2 T$D$M $^E2 D$D$_ $`^E@ E}2 D$ D$$D$$h (`E$2 D$ D$ D$$ _2 D$ D$D$$ _2 D$ D$D$$,rs fl2 D$ D$ D$$ y_E*2 D$ D$ D$$ K_E& 9E|̡2 D$ D$D$$Q _2 D$ D$D$$ ^E)2 ED$ ED$D$̋ $\E& 9E|͡2 D$ D$D$$ ^2 D$ D$ D$$ l^2 D$ D$D$$ G^2 D$ D$D$$ "^2 D$ D$D$$ ]2 D$ D$%D$$0 ]2 D$ D$D$$X ]2 D$ D$*D$$x ]2 D$ D$D$$ i]2 D$ D$D$$ D]Ek2 ED$D$ $[2 ED$ ED$D$ $Z2 D$ D$ D$$ \E& 9E|2 D$ D$D$$ \2 D$ D$D$$m |\2 D$ D$ D$$ W\2 D$ D$D$$ 2\2 D$ D$ D$$  \2 D$ D$D$$ [E"2 ED$D$8 $YE& 9E|ԡ2 D$ D$D$$ [2 D$ D$D$$q EWED$D$ $+[E@t Dž$ DžD E2 L$ D$D$P $XE@u%2 D$ D$D$$] Zps f}E2 D$D$t $X2 D$D$ $pX2 D$ D$D$$ KZED$D$ԍ $ZE2 ED$D$ ED$D$ $W2 ED$D$ ED$D$ $WE2 D$D$& $WEE@ ;Eo2 D$ D$D$$( hYE2 D$D$6 $GWED$D$ $Y2 D$D$D $W2 D$ D$D$$i XES2 ED$ D$D$} $V2 ED$ D$D$ $VEE@ ;E2 D$ D$D$$( UXE2 D$D$ $4V2 D$ D$D$$ӎ X2 D$ D$D$$ W2 D$ D$D$$ W2 D$ D$D$ $UED$D$ԍ $jWE32 ED$ED$ D$D$ $CUEE@ ;E¡2 D$ D$ D$$݃ WE@ E}2 D$ D$D$$Tq EOE@ E}uá2 D$ @ D$D$$舿2 D$ @ D$D$$c2 D$ D$D$$ PE*2 D$ D$D$$ PE& 9E|̡2 D$ D$D$$Q ^P2 D$ D$D$$% 9PE*2 D$ D$D$$B  PE(s 9E|̡2 D$ D$D$$ OÐU(q E0EED$$Mu E@E)E@E}uʋED$$$ jEEU}t.E@ $E@2 D$D$$ $5MUx% @x% 2 T$D$% $Mx% @x% 2 T$D$% $L2 D$ D$D$$(% N u'2 D$ D$$D$$@% N%2 D$ D$0D$$h% fN2 D$ D$ D$$% AN2 D$ D$D$$% N2 D$ D$D$$% M2 D$ D$D$$% MU2 D$ D$D$$% M2 D$ D$D$$& M2 D$ D$'D$$& [M2 D$ D$D$$<& 6M2 D$ D$&D$$T& M2 D$ D$D$${& L2 D$ D$&D$$& L2 D$ D$D$$& L2 D$ D$&D$$& }LU8 % D$a' $9L2 2  % D$a' $ L2 2 t~ % D$a' $K2 2 tT % D$a' $K2 2 t* % D$a' $K2 2 u$d' I$2 D$' D$' $jI0 2 D$D$' $II t%2 D$ D$(D$$' K2 D$ D$D$$( J2 D$ D$D$$( J2 D$ D$D$$#( J2 D$ D$D$$ J2 D$ D$D$$3( aJ2 D$ D$D$$C( t% 2 D$D$#, $>& 0 2 D$D$, $=2 D$  D$D$$:2 $ E}t5}tV}ts2 D$ D$D$$, n?L2 D$ D$D$$, G?%2 D$ D$D$$,  ?2 D$ D$*D$$- >2 D$ D$'D$$@- >2 $轗 t'2 D$  D$D$$%2 D$ D$'D$$h- s>2 D$ D$D$$- N>2 D$ D$0D$$- )>2 D$ D$D$$- >2 D$ D$D$$- =2 D$ D$D$$ =Qq E4E@@ s UEE9E}UUE죄s E@E}uơ =2 D$ D$ D$$- >=2 D$ D$D$$. =2 D$ D$D$$. <2 D$ D$D$$'. <2 D$ D$)D$$<. <2 D$ D$D$$f. <2 D$ D$D$$}. `<2 D$ D$D$$. ;<2 D$ D$D$$. <2 D$. $:2 D$. $92 D$ D$D$$. ;2 D$ D$D$$˫ ; uJ2 D$ D$D$$- t;2 D$ D$D$$/ O;2 D$ D$D$$0/ *;2 D$ D$ D$$6J2 D$ D$D$$2 62 D$ D$D$$d2 52 D$ D$D$$% 5x%  u%2 D$ D$D$$2 52 D$ D$D$$2 o52 D$ D$%D$$2 J52 D$ D$+D$$2 %5q EE$E@E}u )2 D$ D$ D$$3 42 D$ D$D$$3 42 D$ D$D$$(3 4q E9E@ЋE@ 2 T$ D$D$93  $J2E@E}u2 D$ D$D$$Q3 42 D$ D$D$$f3 32 D$ D$D$$j3 3%2 D$ D$D$${3 32 $n t V2 D$ D$D$$. _32 D$ D$ D$$3 :32 D$ D$D$$3 32 D$ D$D$$3 2 '2 D$ D$D$$;  2 D$ D$ D$$3 22 D$ D$ D$$3 `22 D$ D$D$$3 ;22 D$ D$D$$4 22 D$ D$!D$$ 4 1o2 D$ D$D$$D4 12 D$ D$D$$d4 12 D$ D$D$$4 1t^1 蛜q uD$$4 42 D$ D$D$$4  12 D$ D$D$$4 0q $2 D$ D$D$$˫ 02 D$  D$D$$"2 D$  D$D$$x% 2 D$D$4 $`.2 D$ D$ D$$- ;02 D$ D$D$$4 02 D$ D$D$$ /,s G0s :2 2 D$$2 D$ D$ D$$4 /2 D$ D$ D$$5 l/2 D$ D$D$$@5 G/2 D$ D$D$$_5 "/2 D$ D$D$$t5 .2 D$ D$D$$5 .2 D$ D$D$$- .2 D$ D$D$$5 .2 D$ D$D$$ i.2 D$ D$D$$5 D.2 D$ D$D$$5 .2 D$ D$D$$5 -2 D$ D$D$$6 -2 D$ D$D$$-6 -2 D$ D$D$$I6 -2 D$ D$D$$e6 f-2 D$ D$D$$6 A-2 D$ D$D$$6 -2 D$ D$D$$6 ,2 D$ D$ D$$6 ,2 D$ D$D$$6 ,2 D$ D$D$$ ,2 D$ D$D$$6 c,F2 D$ D$D$$6 9,-2 D$ D$D$$7 ,2 D$ D$D$$7 +2 D$ D$<D$$7 +2 D$ D$@D$$X7 +2 D$ D$D$$6 {+2 D$ D$D$$7 V+2 D$ D$D$$7 1+2 D$ D$D$$7  +2 D$ D$D$$7 *2 D$ D$'D$$7 *2 D$ D$D$$8 * t%2 D$  D$D$$ t2 $2 $U}t0q E E;Eu E@EE@E}uEEU}~%2 D$ D$ D$$.8 )2 E D$D$:8 $'E@ uNE@@t2 ED$D$>8 $z'%2 D$ D$D$$N8 S)2 UD$$'}~2 ED$D$S8 $'2 D$$)'U} tXvs ft& 2 U &  L$$'v 2 U%  L$$a'Pvs ft# 2 U & L$$2'! 2 U% L$$'U(E @EE @E2 ED$D$X8 $&E2 D$ D$D$$h8 'D$E$2 D$ D$D$$w8 'E}~%2 D$ D$ D$$.8 x'D$E$bE 2 D$ ED$D$}8 $?%}~2 ED$D$S8 $%2 D$$)%EE;ES2 D$ D$D$$8 &}'2 D$ D$D$$8 &%2 D$ D$D$$8 &E}d2 D$ D$D$$8 K&U(2 ED$D$X8 $&$E2 D$ D$D$$h8 %D$E$2 D$ D$D$$w8 %vs ftTE>EHU & P L$ED$ E D$T$E$oEE@;ERE>EHU% P L$ED$ E D$T$E$EE@;E2 D$ D$D$$8 $}'2 D$ D$D$$8 $%2 D$ D$D$$8 $E}k2 D$ D$D$$8 `$UE2 D$ D$D$$8 )$2 D$ D$D$$8 $2 D$ D$D$$8 #2 D$ D$D$$8 #2 D$ D$D$$8 #2 D$ D$D$$9 p#2 D$ D$D$$9 K#2 D$ D$D$$/9  D$ D$D$$>9 #2 D$ D$D$$Q9 "2 D$ D$D$$V9 "2 D$ D$ D$$r9 "2 D$ D$D$$9 m" t Džl9  Džl9 2 lT$D$9 $/ 2 D$ D$D$$9  "2 D$ D$D$$9 !2 D$ D$ D$$ : !2 D$ D$D$$: !2 D$ D$0D$$(: v!2 D$ D$D$$ Q!2 D$ D$D$$Y: ,!2 D$ D$D$$p: !k EEEE@<E@@$EE@f@u3E@;EE@EED$ED$E$LuE@f=uhpE@ u9E@@tED$D$>8 p$5 pnow.@ED$p$E@E}2 D$ D$+D$$: 2 D$ D$D$$: 2 D$ D$D$$: 2 D$ D$D$$7 w2 D$ D$ D$$: R2 D$ D$D$$˫ -US$E@2 E@ 2 p% 9 2 2 D$D$: $EE@@ 2  2 \$D$ T$D$:  $2 2 D$D$ ; $s2 2 D$D$&; $TE@@tE@@@EE2 2 ML$ D$D$D; $ p% 2 D$D$[; $2 p% 9t. u$2 2 D$D$ ; $sE@ ffs EE@@ 2  2 \$D$ T$D$:  $[2 p% 9u2 2 D$D$x; $-2 t% 9u2 2 D$D$; $E@@@2  2 D$ T$D$D;  $E2 D$D$; $E2 D$D$; $E2  2 D$ T$D$;  $b2 2 D$D$; $CE@@ 2 D$D$< $ 2 t% 9uJ2 D$ D$D$$$< 2 D$ D$D$$A< E@D$D$$.2 t% 9uJ2 D$ D$D$$^< u2 D$ D$D$$^< P2 E@@ T$$$[U}~SEE ;Et;E 9E| )Љ‹E A U}trEEbE$d $o $bE@$EE$E@E}uE@;EtE@0E}uU   E$Q ~   U}@EE}c}cp}+2}*}!}!E%}/}/}-}?}^}-4}*}H}~tp}~ }|tt}tV} tw}>|n}G~I}Jt0Z )Љ‹E A ,E@ $E@ $E@$$ UE@t=E@@f=u-E@$t#E@$@ tE@$@ $ETE@t E@@u1E@t E@EEa< ED$$i< E@@EEUEEE} } }rtQ}stT}@tns}+t1}+ }*tV},t&}-tBEEEE@ $EE E EU  }    Efcu)E@ $~   >E  t $  t $ US4E@(zEf.hE@(EEE@ЋED$T$$֫@EEP 2 2 ED$ED$T$ L$D$< $2  2 ED$ T$D$<  $E@EE}^E@(EEtE@ЋED$T$$"@2 D$ ED$D$< $WED$D$$y(E@EE}u2 D$ D$D$$< 4[UWVS $3   2 D$ T$D$>  $ E$o9E@2  2 D$ T$D$>  $ Ef=u EEE@2 M܉L$ D$D$4> $ EHE2 L$D$$蝞E@x E@yEE@BE@ƒ 2 ED$E D$ T$D$H>  $ 2 D$$  u0EHE@2 L$ D$D$X> $ 2 D$ D$ D$$g> Ef=u EEEP 2 ED$ED$ T$D$r>  $E EHE2 L$D$$WE@2 D$D$ > $ Ef=2 ED$ E D$D$> $ 2 D$$  u0EHE@2 L$ D$D$X> $t ED$E D$E$    2 D$ T$D$>  $- 2 D$$   u0EHE@2 L$ D$D$X> $   D$T$E$ <[^_U}u} u }t} u E}u EEE f9ucEPE @f9uPEPE @9u@EP E @ 9u0EPE @9u EPE @9uEPE @9t ENE P E@ T$$/t%E P$E@$T$$t EEEEEUEEE E;EPE@9uEPE@9t E@E@ EE@ E}t}u}u}u EEEEEU(Ef=u>ED$$EE@D$D$E$腠E E@0EEU(EE} tZGE$EEE}}}}.t }tEE}t E@;E uEEU(E@t E@E E@ EE @t E @E E @ E}u}u EmED$E$EED$E $ E}u}u E.}t!}tEET$$EEEU(EE}st1}s}ct.}rtA}t/}9t-E+E"EEEEE2 ElEE@T$$5tHEP E@T$$%t,EP ED$$ftE@;E uEEE@E}uEEUEE}st1}s}ct.}rtA}t/}9t-E+E"EEEE$EUEBUE UEBUEB EEPEP EPE2 EPUE2 UEEE}rt}9tWEPE@~EE@$E,E@ f=.tE@ f= tEE@$E}u΋E@ EZE@E}t=}t:Ef=9u E@$f=.uE@$@t EEE@ E}uEUS4EEEE@t E@E E@ EE$EEf=uPED$$#EE@;EuEE.E@ЋED$T$E$E E@0E}E@ E@E@;EEHEXE@2 L$\$ D$D$> $E2 D$D$$谔EHEPE@ 2 L$T$D$ ED$D$> $B}tE@;EE4[U t3 2 D$D$> $   U(E PE T$D$E$8%E f=tO tFED$ D$D$$? ED$ D$(D$$? ] zs fE @ EE@E@T$ D$D$E? E$ E@E}}trE f=9u$E @$f=.uE @$@@E frE@u ED$ D$D$$]? yED$ D$D$$o? VED$ D$ D$$? 3D$? D$ D$u D$M E$k EHЉu  s @fs 2 t/2 HD$D$? E$2 @2 #ED$ D$D$$? q u D$? D$ D$D$M E$jED$ D$D$$?  ED$ D$D$$o? ED$ D$ D$$?  u D$? D$ D$D$M E$j @ E@ E}4ED$ D$D$$? CUE$輘u) s fu H E uH2 E D$D$? $E@2 D$D$? $ @ |s @f|s  s Hfs  H  yD$$? M 2 D$D$@ $? u 2 D$!@ D$ D$D$M $wh2 ~+2 H2 2 H2 D$D$3@ $ s fEf.t<2 D$ D$D$$? }EPET$$|s Hf|s  H EEU(E EEf=uPED$$ EE@;EuEE.E@ЋED$T$E$胔E E@0E}tLE@;EtAE@ u E@u+ED$ED$E$MED$E$;UW4D$E $ EE}k EEED$E $t E}$H"EEEظ}H$‹E EET$ L$D$9@ $E@@k ED$E$ EE }JEk }t+ =@ tD$$>@ 84_UWVS|Ex% EEEE@EE@f E@fEf.Ef=E@2  2 D$ T$D$V@  $2 D$ D$D$$h@ qEHE2 L$D$$胋2 D$ D$ D$$z@ +E E@2  2 D$ T$D$V@  $EE E E@2  2 D$ T$D$V@  $ 12 p% 92 t% 9 2 D$E$E؃}E؋@E̋E؋EEE@EPE@ 2 \$T$ D$D$<  $E2 D$D$$'E؋@ @E؋@ x E؋@ @EE@EEP EH2 t$ |$ED$EЉD$ED$T$ L$D$@ $}E@0EPEHx% @x% 2 t$T$L$ \$D$@ $1E2 D$D$$EE@ u E@tE$=EE$:EEEE@ЋEH EX52 T$ED$L$ \$D$@ 4$}~D$$@ mEfrtC2 p% 9t42 t% 9t%2 D$ D$D$$A - u  tD$$&A }~2 E  2 s D$D$$   2 p% 9)2 D$ D$%D$$@A yE@2 D$D$hA $YE@2 D$D$A $92 D$A $$E@2 D$D$A $E@2 D$D$B $2 D$ D$D$$,B 2 D$ D$D$$AB 2 D$ D$ D$$FB uE@2  2 D$ T$D$PB  $K2 ED$$XE@t E@E E@ E}EEE܋f=uPE܋D$$EE@;EuEE.E@ЋED$T$E$TE E܋@0E܃}WE܋@;EHE܋@ u6E܋@u,E܋P 2 ED$ T$D$hB  $K2 D$ D$ D$$B !E܋2 D$D$$5E܋HE܋P 2 ED$L$ T$D$B $E܋@2  2 D$ T$D$PB  $ @ E܉D$E$E@E2 E܉D$$E@fNE@PEfP8E$d2 D$D$B $T t3Efsu%2 D$ D$D$$p=  2 D$D$B $  }tEЉD$ED$E$HEЉD$E$62 D$ D$D$$? RE@ u E@tj uJ2 EЉD$D$? $E@2 D$D$B $ @ ,2 D$$;2 D$$;2 D$ D$D$$B  t) 2 D$D$B $r  t+2 D$ D$ D$$B :EЉE̋E@ u,E@u"2 D$ ẺD$EЉD$E$wE EE@t E@EE@ t E@ EE@E}t E C EM 2 ẺD$EЉD$ED$ED$ED$ ED$D$C $q}uEЉEEEEE|[^_US4EEf=u]ED$$EE@D$D$E$蝇EEET$$XE@ECE@0t2E@ЋE@0D$T$$KEE@EE}t(E@x E@yE@ƒEPE@LE@ >EE}#}"}c}}.t@}}~%}tEE@$cE@$cEE@2  2 D$ T$D$V@  $E@ƒEH2 ED$ED$T$ L$D$+C $DZE@ f=.u*E@ @uEE@$bXED$E$E}E@t EE$ EEEEHE2 L$D$$~2 ED$D$ > $w} t%2 UT$ U T$D$> $N6E$   2 D$ T$D$>  $E@t E@;EuE@ tcE@ ;EtXEP E@ 2 T$D$ ED$D$AC  $2  2 ED$ T$D$XC  $2 D$$ o}~@ u7EPE@ 2 T$D$ ED$D$=  $9E$4[U(E@(EE @(E EE9uE@EE@E}t}uԃ}u }E f=E f.E@$@Et E@EEEtE@EElC ED$ED$$pC w$C $C $C s$C g$C [$C O$C C$C 7$C +$C $D USDEEE@E@ƒEPE@t E$`Ef=u#E@$ED$E D$$E@$E@2  2 D$ T$D$#D  $E@ƒE@ 2 T$ D$D$4>  $EHE2 L$D$$zE@yE@ƒEPE@ƒ 2 ED$E D$ T$D$H>  $[2 D$$ 6 u0EHE@2 L$ D$D$X> $ E@$EE@$]E$EE@(tED$E$E@EEfcE@ f=.E@ @E@(u~2 D$ D$D$$9D ME tJE@tE@EEM E@U؉T$D$$TD &EE@t'2 D$ D$D$$D %2 D$ D$D$$D E@EP2 ED$L$ T$D$r> $]EHE2 L$D$$oxE@yEE@BE@ƒ 2 ED$E D$ T$D$H>  $2 D$$  u0EHE@2 L$ D$D$X> $}t%2 D$ D$D$$ bE@E}PE@$E$EED$E D$$hE@E}u^Ef=tEf=tEf=uED$E D$E$ED$E D$E$oE@;EtE@0E}D[UEEEEf=ED$$#EEET$$E@t5E@u$E@ƒEPE@ƒEPE@t^E@tME@ƒEPE@ƒEP'E@$EE$E@E}uE@;EtE@0E}UEEE@ƒEPEf=tEf=tEf=uE@$E@$EE$E@E}uE@;EtE@0E}mU(}u EE  @ tD$$D eEE}t }t@yED$$EEET$$E$eEAE@0t1E@ЋE@0D$T$$z$*EEEEEEU}uEE2E@ E@8  E$EEU(EEE@xE$ t EEf=u+E@2 D$D$D $EYE@$E#E$tt E4E@E}u׋E@;EtE@0E}MEEUEE@$EVE@ f=.t>E@ f= uE@ @ $2EE@ $EE@$E}uEU8}u Es ft EE!E؁})U؋D E@$MEEE@EE$uE@@ t EEMMlE$uE@@ t EEEE1E$|uE@@ t EEUUE@@ EE@@ EE@@ EE@@ EE@@ EeE@@@uOE@@ u8E@D$D $tE@D$D $u EE̤ )щME@$ED$$)#DED$$(E P ED$T$E$ED$$&VE P$ED$T$E$ED$$)'CED$$(E P ED$T$E$ED$$^E P$ED$T$E$RED$$)7CED$$(E P ED$T$E$ ED$$|jE P$ED$T$E$ED$$);BED$$(#E P ED$T$E$ED$$<E P$ED$T$E$fED$$)KBED$$(E P ED$T$E$ED$$>~E P$ED$T$E$ED$$)OAED$$(7E P ED$T$E$ED$ D$D$$I E P$ED$T$E$jED$$)OAED$$(E P ED$T$E$#ED$ D$D$$I E P$ED$T$E$ED$$)C@ED$$(+E P ED$T$E$ED$ D$D$$I E P$ED$T$E$^ED$$)C@ED$$(E P ED$T$E$ED$ D$D$$I vE P$ED$T$E$ED$$)7?ED$$(E P ED$T$E$ED$ D$D$$I E P$ED$T$E$RED$$)7?ED$$(E P ED$T$E$ ED$ D$D$$I jE P$ED$T$E$ED$$)+>ED$$(E P ED$T$E$ED$ D$D$$I E P$ED$T$E$FED$$)+>ED$$(E P ED$T$E$ED$ D$D$$I ^E P$ED$T$E$ED$$)= u%ED$ D$ D$$I #ED$ D$D$$I  F= D$$I ,=& t3& E @T$$~u& D$$3J d& t3& E @T$$Bu& D$$LJ ( tD$$hJ  E @$8D$D$J E$E @ EEMED$ D$D$$J EP ED$T$E$"E@$EE}uE D$E$(s 9E~^(s D$ED$$J E @D$$J /(ED$ D$D$$J E(s 9E|΋ED$$)o;ED$ D$ D$$J E P ED$T$E$3ED$$); u(ED$ D$D$$J p:ED$ D$%D$$K H:ED$ D$ D$$:K  E P ED$T$E$ED$ D$ D$$HK W:bs f6 )ts fED$ D$D$$TK E P D$gK ED$ T$D$pK E$9E P D$M ED$ T$D$|K E$9ED$ D$ D$$K E P D$K ED$ T$D$pK E$b9E P D$K ED$ T$D$K E$69ED$ D$ D$$K E P D$K ED$ T$D$K E$88bs f6 )ts fED$ D$D$$TK E P D$gK ED$ T$D$pK E$f8E P D$M ED$ T$D$|K E$:8ED$ D$ D$$K E P D$K ED$ T$D$pK E$7E P D$K ED$ T$D$K E$7ED$ D$ D$$K E P D$K ED$ T$D$K E$p7i7bs f6 )ts fED$ D$D$$TK E P D$gK ED$ T$D$pK E$6E P D$M ED$ T$D$|K E$6ED$ D$ D$$K #E P D$K ED$ T$D$pK E$t6E P D$K ED$ T$D$K E$H6ED$ D$ D$$K E P D$K ED$ T$D$K E$55bs f ts fED$ D$D$$TK 'E P D$K ED$ T$D$pK E$x5E P D$K ED$ T$D$K E$L5ED$ D$ D$$K E P D$K ED$ T$D$K E$44bs f ts fED$ D$D$$TK +E P D$gK ED$ T$D$pK E$|4E P D$K ED$ T$D$|K E$P4ED$ D$ D$$K E P D$K ED$ T$D$K E$432 t% 9ED$ D$&D$$K IE P D$M ED$ T$D$L E$3E @$EEE@ f=.tE@ f= ED$ D$D$$%L E P D$J ED$ T$D$M E$3E P D$4L ED$ T$D$K E$2ED$D$:L E$QE@ f=.uEP ED$T$E$E@ P ED$T$E$E@$EE}ED$ D$D$$EL ED$ D$ D$$HL E P 2 D$K ED$ T$D$TL  $11 tRT tED$$1>1E P D$K ED$ T$D$cL E$11ts fED$ D$D$$TK E P D$lL ED$ T$D$rL E$61E P D$L ED$ T$D$K E$ 1ED$ D$ D$$K j,s ~0s u EL EL ED$D$L E$.E P D$L ED$ T$D$L E$0T t%ED$ D$"D$$L 6ED$ D$D$$L D$L E$js ft#ED$ D$D$$L o,s t50s u, t#ED$ D$ D$$L 1ED$ D$D$$]? ED$ D$D$$M ED$ D$D$$ M E P D$5M ED$ T$D$9M E$/|s @f|s E @$EED$VM E$fEP ED$T$E$ED$ D$D$$pM 'E@$t#ED$ D$D$$M E@$EE}i|s Hf|s ED$ D$D$$: ED$ D$ D$$FB E P D$M ED$ T$D$M E$-E @D$D$M E$EE @$EEMED$ D$D$$J EP ED$T$E$rE@$EE}u& 9Ebs @fbs E P & D$M ED$ T$D$M  $-bs Hfbs & D$ED$$M D$M $M Ft(ED$ D$D$$J 2E& 9E|΋ED$$),s ED$ D$D$$? 0s t,E P D$N ED$ T$D$N E$(,E P D$M ED$ T$D$N E$+ t#ED$ D$ D$$ N SED$ D$D$$AN 0T +ED$ D$D$$EN v+2 t% 9ED$ D$&D$$PN E P D$M ED$ T$D$L E$+E @$EEE@ f=.tE@ f= ED$ D$D$$%L ?E P D$J ED$ T$D$M E$*ED$D$wN E$E@ f=.uEP ED$T$E$LE@ P ED$T$E$+E@$EE}ED$ D$D$$EL rED$ D$ D$$HL OE P 2 D$K ED$ T$D$TL  $)) qED$ D$D$$N ,s t#ED$ D$D$$N E P D$K ED$ T$D$K E$),s tcE @XE P D$N ED$ T$D$N E$(E P D$K ED$ T$D$N E$(ED$$)E @tE @E @$EEEEE@ f=.ED$ D$D$$N 調EP ED$T$E$ ED$ D$D$$N kE P D$J ED$ T$D$N E$'ED$D$N E$%E@ f= ED$ D$D$$N E@ P ED$T$E$IED$ D$D$$N 訾E P D$J ED$ T$D$N E$&ED$D$N E$bEE@$EE}cED$ D$ D$$N E P D$M ED$ T$D$M E$l&E @$EEE@ f=.uAED$ D$D$$N 訽EP ED$T$E$ vE@ f= uDED$ D$D$$N XE@ P ED$T$E$#ED$ D$D$$N E@$EE}"(ED$ D$D$$N ׼E& 9E|΋ED$$)襻ED$$)蒻%ts fED$ D$D$$TK jE P D$N ED$ T$D$rL E$$E P D$L ED$ T$D$|K E$$ED$ D$ D$$K ,s qE @0s trED$ D$D$$N 觻E P D$K ED$ T$D$N E$#ED$ D$D$$N XED$ D$D$$N 5ED$ D$ D$$ O 0s t#ED$ D$D$$O ED$ D$D$$A úMED$ D$D$$N 蛺0s u1E P D$-O ED$ T$D$0O E$"E P D$K ED$ T$D$N E$"ED$ D$D$$8O E P D$-O ED$ T$D$M E$c"D$IO E$ED$ D$D$$WO 谹D$? E$0s t#ED$ D$D$$iO qE P D$nO ED$ T$D$wO E$!D$M E$4E @$EE,E@ f=.tE@ f= tEE@$E}u΋ED$ D$ D$$O ˸E @tE @E @$EEE@ f=.ED$ D$D$$? gED$ D$D$$N DEP ED$T$E$ED$ D$D$$O E P D$J ED$ T$D$N E$V ED$D$O E$迵D$M E$E@ f= ED$ D$D$$? qED$ D$D$$N NE@ P ED$T$E$ED$ D$D$$O  E P D$J ED$ T$D$N E$]ED$D$O E$ƴD$M E$E@$EE}MED$ D$D$$O sE P D$M ED$ T$D$M E$E @$EEE@ f=.uAED$ D$D$$N EP ED$T$E$bvE@ f= uDED$ D$D$$N 谵E@ P ED$T$E$#ED$ D$D$$N lE@$EE}"(ED$ D$D$$N /E& 9E|΋ED$ D$D$$O D$M E$ED$ D$D$$? Ǵ2 t/藯2 HD$D$? E$蜲2 @2 #ED$ D$D$$? lED$ D$D$$O Ijs ft#ED$ D$D$$O }u3E @~(ED$ D$D$$? \ EED$ D$D$$? 誳}E @ED$ D$D$$O oE P D$O ED$ T$D$M E$ED$D$O E$)ED$ D$-D$$P E @$E,E@ f=.tE@ f= tEE@$E}u΃}E @$EEE@ f=.iE@ f= V2 t/T2 HD$D$? E$I2 @2 +E(trp@t+1)@->bu@ p.ov@al =f@ E@ @tyE@ @D$D $uZED$E$E P D$M ED$ T$D$N E$4ED$D$2P E$蝯m|s @f|s ED$E${EP ED$T$E$ED$ D$D$$? <|s Hf|s E@$EE}l}E @$EE@ f=.E@ f= E@ @E@ @@f=t{E@ @@ujE@ @D$D $xtKE@$E:E@ PE@ @9uE@ @D$$HP 7`E@$E}uE@$E}(E @$EELE@ f=.tE@ f= uE@$ED$ D$D$$? ¯E@ f=.E@ f= E@ @D$D $qtmf`s |s @f|s EP ED$T$E$|s Hf|s f`s ED$ D$D$$uP E P D$J ED$ T$D$N E$aED$D$yP E$ʬE@$uE @ EEUT$D$P E$苬E@ f=.E@ f= E@ @D$D $:oE@ f=1uE@ @@f@IED$ D$D$$P ED$ D$ D$$P ֭f`s `s fbs bs fs |s @f|s EP ED$T$E$f`s `s fbs bs fs ED$ D$D$$P CEP ED$T$E$|s Hf|s ED$ D$ D$$P ED$ D$D$$ ӬE@$EE}ED$ D$D$$? 蘬ED$ D$D$$]? uED$ D$D$$M RED$ D$D$$ M /E P D$5M ED$ T$D$P E$|s @f|s E @$EEE@ f= tTD$VM E$辩EP ED$T$E$ ED$ D$D$$pM UD$VM E$jE@ P ED$T$E$ED$ D$D$$pM (E@$t#ED$ D$D$$M E@$EE}|s Hf|s ED$ D$D$$: 貪ED$ D$ D$$FB 菪,s E P D$K ED$ T$D$N E$ED$ D$D$$P 3ED$ D$D$$P ED$ D$D$$P ED$ D$D$$Q ʩED$ D$D$$Q 觩ED$ D$%D$$4Q 脩ED$ D$ D$$\Q aED$ D$ D$$}Q >ED$ D$D$$Q ED$ D$D$$Q ED$ D$D$$ ըED$ D$ D$$Q 貨D$Q E$蟦D$R E$茦ED$ D$%D$$,R iED$ D$D$$ FED$ D$D$$RR #ED$ D$D$$nR ED$ D$D$$ ݧED$ D$D$$tR 躧0bs f6 )ts fED$ D$D$$TK eE P D$gK ED$ T$D$pK E$ED$ D$ D$$|K E P D$K ED$ T$D$M E$gE P D$K ED$ T$D$pK E$;E P D$K ED$ T$D$K E$ED$ D$ D$$K o,s ~,E P D$yR ED$ T$D$R E$E @$EEEE1E@ f=.tE@ f= tEE@$EE}uɋE @t E;EHE P D$R ED$ T$D$K E$&E @$EEE@ f=.tE@ f= ED$ D$D$$R OE P D$J ED$ T$D$M E$ ED$D$R E$ E@ f=.uEP ED$T$E$\E@ P ED$T$E$;E@$EE}ED$$)肣 E P D$M ED$ T$D$R E$ E @$EEE@ f=.uAED$ D$D$$N EP ED$T$E$|vE@ f= uDED$ D$D$$N ʣE@ P ED$T$E$)#ED$ D$D$$N 膣E@$EE}"(ED$ D$D$$N IE& 9E|΋ED$$) E @ D$E$ED$ D$D$$R E P ED$T$E$LED$ D$D$$R 諢D$M E$ uj u%ED$ D$D$$R ]#ED$ D$D$$R 8D$M E$' ED$ D$ D$$R s E @ tbED$ D$D$$R ˡE P ED$T$E$-ED$ D$D$$R 茡E @$ ED$$([E @$P ED$T$E$ED$ D$D$$R )ED$$(E @$P$ED$T$E$uED$ D$D$$S ԠJ js ft#ED$ D$D$$S 蠠|s @f|s  2 Q2 HD$D$? E$F2 @2 ED$E$9E P ED$T$E$ED$ D$D$$? bED$ D$D$$? ՟E P ED$T$E$7ED$ D$D$$? 薟f`s E P ED$T$E$f`s ED$ D$D$$uP E|s Hf|s E P$ED$T$E$虿E @@f@u yED$ D$D$$P ۞ED$ D$ D$$P 踞f`s `s fbs bs fs |s @f|s E P ED$T$E$f`s `s fbs bs fs ED$ D$D$$P %E P ED$T$E$臾|s Hf|s ED$ D$ D$$P ؝ED$ D$D$$ 赝+js ft#ED$ D$D$$S 聝E @D$D$ S E$bE @ EHED$ D$D$$J 4EP ED$T$E$薽E@$E}uED$$)ljs ft#ED$ D$D$$S œED$ D$D$$*S 蟜E @ t1E @ @ft"E @ @D$D$I E$fE P ED$T$E$ƼED$$)%`s fuHE @t>E $耆.D$K ED$ E D$D$2S E$^WD$M ED$ E D$D$M E$0)ED$E D$E$ bs ftE @ED$$-E $D$D$I E$FED$$(E @D$E$ED$$)zE @D$D$9S E$js ft#ED$ D$D$$S 豚 u#ED$ D$ D$$ES 腚E @D$D$E$ ED$$ 6ED$ D$(D$$TS #ED$ D$)D$$<= ED$ D$D$$ ݙSjs ft#ED$ D$D$$S 詙ED$ D$D$$}S 膙E P ED$T$E$ED$ D$D$$J Gf`s `s fbs ED$$"E P ED$T$E$耹ED$ D$ D$$S ߘf`s `s fbs ?2 t% 9u#ED$ D$D$$S 蒘E$j 2 t% 9u(ED$ D$D$$S Pjs ftFED$ D$D$$S ED$ D$D$$S ED$ D$D$$S ֗D$M E$ŷ8 E$ǓxED$D $蠓EE@ u)}t#ED$ D$D$$N8 s}u |s fuD$$-Y E u$ ~D$M $dZ >U$ $  D$E$ ~D$M $Z 3>ÐUH @H H  u/2 D$ D$D$$Z H 2 ED$D$Z $ًUSL tL ;E u}uLL t3UJ L 2 T$L$ D$D$Z ${E L E [USL t2 L 2 ED$L$ T$D$Z $#[UD EE@;Et>E@E}u$ E P$ED$T$E$aED$$)ED$$(E P ED$T$E$ED$$<E P$ED$T$E$ED$$)]ED$$(EE P ED$T$E$ED$ D$D$$[ E P$ED$T$E$eED$$)~ED$$(~E P ED$T$E$ED$ D$D$$[ E P$ED$T$E$ED$$)Q~ED$$(9~E P ED$T$E$ED$ D$D$$[  E P$ED$T$E$YED$$)}ED$$(}E P ED$T$E$ED$ D$D$$[ ~E P$ED$T$E$ED$$)E} ED$$(-}E P ED$T$E$ED$ D$D$$[ }E P$ED$T$E$MED$$)| ED$$(|E P ED$T$E$ED$ D$D$$[ x}E P$ED$T$E$ED$$)9|u E @D$D$[ E$%{E @ EaE @ ;EuEP ED$T$E$^/ED$$,{EP ED$T$E$-E@$E}uED$$){ E P D$\ ED$ T$D$\ E$ E P D$\ ED$ T$D$ \ E$j E P D$\ ED$ T$D$\ E$9 E P D$\ ED$ T$D$\ E$Y E P D$\ ED$ T$D$ \ E$( E @t Dž(\  Dž+\ E P D$ED$ T$D$-\ E$E @$EEaE @$;EtED$$,zE@ D$E$ uEP ED$T$E$^E@$EE}u E P D$.\ ED$ T$D$-\ E$+E @tat t,MED$$?Wy8ED$$<By#ED$ D$D$$0\ -zE @$EEaE @$;EtED$$,xE@ D$E$uEP ED$T$E$3E@$EE}uE @ED$$>xE @t Dž3\  Dž7\ E P D$ED$ T$D$-\ E$E @$EEaE @$;EtED$$,wE@ D$E$uEP ED$T$E$EE@$EE}uED$$]wED$ D$D$$:\ xE P ED$T$E$ED$$)LwED$ D$D$$C\ 4xE P ED$T$E$ED$$)v1ED$ D$D$$I\ w ED$ D$ D$$M\ wE P ED$T$E$ED$$)vvED$$(^vE P ED$T$E$ED$$)/vkE @ tbED$ D$D$$W\  wE P ED$T$E$\ED$ D$D$$[\ vE @$ED$$(uE @$P ED$T$E$ED$ D$D$$a\ kvED$$(HuE @$P$ED$T$E$ED$ D$D$$f\ vBE P ED$T$E$`ED$ D$D$$j\ uE P$ED$T$E$!E @D$D$$_uEEE\E @EEUE}\uEUE}"u EƄ'}tEE}~E f=u%ED$ D$D$$n\ t#ED$ D$D$$u\ tD$D$~\ E$rE @ E8ED$$,|sEP ED$T$E$E@$E}u‹ED$$)>szED$ D$D$$\ &tE P ED$T$E$uED$$)r#D$-\ ED$ E D$D$-\ E$FED$E D$E$E @ED$$OrE @D$D$\ E$kqED$ D$D$$\ CsE P ED$T$E$ED$$)r@ED$ D$D$$\ rE @D$D$\ E$pED$ D$D$$\ rED$ D$D$$\ xrED$ D$D$$\ Pr|ED$ D$D$$\ (rTED$ D$D$$\ r,ED$ D$ D$$\ qED$ D$D$$\ qED$ D$D$$\ qED$ D$D$$\ `qED$ D$D$$\ 8qgQqE t"E D$D$\ E$n E D$D$\ E$nUf`s `s fbs ED$E D$E$f`s `s fbs UWV`}u2 D$$0MoE@ E@8 E!É})Űxb ࡤ2 U T$UT$$}2 D$ D$D$$a oW2 t% 9DT t%2 D$ D$ D$$a oEP 2 D$a E D$ T$D$a  $2 t% 9E@$EEEE1E@ f=.tE@ f= tEE@$EE}uɃ}uE@kEE@$E,E@ f=.tE@ f= tEE@$E}u΋E@E2 +EHE2 D$ D$D$$a [n2 ~"2 ED$D$a $5lE2 D$ D$D$$a  n12 D$ D$ D$$a m2 +EHEE@E@$EEgE@ EЁ} t}.t2 D$ D$D$$a imEP 2 D$a E D$ T$D$b  $2 ED$D$ b $kE@ f= uE@ P E D$$vEP E D$$_}2 D$D$b $j[2 D$ D$D$$a lEP 2 D$a E D$ T$D$b  $2 ED$D$ b $EjE@ @E@ @EEb Euȋ}ċM(uM2 D$ D$D$$b k2 ~>2 ED$D$a $iEP 2 E D$T$ $ }2 D$D$b $ii2 ~EE@$EE}2 +EHEE@u2 ~EE@$EE2E@ Eԁ} }.E@ @t?E@ @EEb Eu}M(f`s EP 2 E D$T$ $f`s 2 D$ D$D$$*b >j2 ~2 ED$D$a $h2 D$ D$D$$a i2 ~EE@$EE}2 +E2 B2 D$ D$D$$3E@ D$ $2E(D$ E$EEEEU}u E_E;E u EHEP E D$$uEP$E D$$t EEEEEU}tyEf@t Ef= u72 D$ D$D$$a  gE D$E$zEP E D$$EP$E D$${UW42 D$  D$D$$q EE2 D$D$ g $qdps fqED$D$+g $0f2 D$ D$D$$@g f2 D$ D$D$$Sg e2 D$ D$D$$eg eE2 D$D$pg $c2 D$ D$D$$g eE=2 ED$D$ED$ D$D$g $JcEE@ ;E2 D$ D$D$$g e2 D$ D$D$$g dED$D$g $dE,2 ED$ D$D$g $bEE@ ;EɋE@uq2 D$ D$D$$h `d2 D$ D$D$$ h ;d2 D$ D$ D$$@h d%2 D$ D$D$$Lh c2 D$ D$ D$$_h cE@ E}%2 D$  D$D$$q EOED$D$+g $TcE2 D$D$ g $CaE@u*2 D$ D$D$$ih cE@E@H2 D$D$h $`2 D$ D$D$$h b2 D$ D$D$$h bES2 ED$ D$D$h $e`2 ED$ D$D$h $>`EE@ ;E2 D$ D$D$$h  bH[slo@t].ff@ld@ 2 D$ D$D$$h aE,2 ED$ D$D$h $p_EE@ ;Eɡ2 D$ D$D$$g ;aE@ u%2 D$D$ i $_2 D$ D$D$$+i `EI2 D$ ED$D$=i $^2 ED$D$Ki $^EE@ ;E2 D$ D$D$$g d`2 D$ D$ D$$_h ?`E@ E}2 D$  D$D$$4_UWV}u E)EE}|}|}-}-3}&}%}!E*}R}R}/i}?_}^P}cF}}-Z}*} } }~} tg9} } }G(}>}.}1t}Jfxs E@EE`i Eu}M(u EE@@@E{fxs EiE@ $EVE@ $ECE@ $tE@$$t EEuuEE^_ÐUW  2  9}! 2  $ 2  2 Ѹ󪡼   2 EE¡2 ‹EE@$E}uۃ_U(}u EE¡2 E}u'ED$$hi [D$$~i  E@t EE@E@EtE;EUDE!E PE@9uEEQE@ E}uٍE}~EE D$$u EE@E}uEEUE4E¡2 tE¡2 @E 9E|UE @E}t?}t\Ef=9uNE@$f=.u=E@$@u.E,EfctEfrt EEEU(EE}t E@E}t E@E}E@E@(E@Ef=Ef=Ef=Ef=Ef=twD$E$iu`Ef=tTEf=tHEf=tE @ D$D$E$E @ D$D$E$E @$E&E@ D$D$E$YE@$E}uE @ D$D$E$(E @$ErE@ f= u"E@ @ D$D$E$8E@ f=.t)E fRtE@ D$D$E$E@$E}uE @ D$D$E$E @$E @$@ D$D$E$UE @$@$D$D$E$5ED$E D$E$E @ @ D$D$E$D$E D$E$E @$D$D$E$7E PE T$D$$i 7JD$$i U(q EE@Сt% 9E@Сp% 9E@$IE@E}td} t6E$"E@D$D$E$f@ t3E@D$D$E$@D$E$<E@E}q EE@ul t]$n HEPE@T$D$$n HE& D$D$$$ GE@ƒEPE@,E}^ tm~$HU(q D$D$n E$ GE D$ D$D$$n Hq EEEE}rt }t!lE@D$D$n E $FME@EEE}t}t}rtD$$o 3딋E@,E}UE D$ D$D$$*o  H E D$ D$D$$-o GE D$ D$D$$Eo GE D$ D$ D$$bo GE D$ D$+D$$po sGE D$ D$D$$o PGE D$ D$$D$$o -GE D$ D$$D$$o  GE D$ D$)D$$p FE D$ D$#D$$4p FE D$ D$D$$Xp FE D$ D$ D$$\p ~FE D$ D$D$$*o [FU8EEE@E@ƒEPE@EEf=uE@$${E@$E@$EuE$EE@EEfcu*E@ f=.uE@ @u E@(tED$ED$E$GE@E}uE@$EE$E@E}uEf=tEf=tEf=u^E@EE$EEPE@0B0E@EED$ED$E$E$W3Ef=uGED$$\SEE@D$D$E$ EE@ECE@0t2E@ЋE@0D$T$$EE@EEED$ED$E$E@(txEf=tjEf.t\E@(EKE$EE@ED$ED$E$mE$.E@E}uE@;EtE@0E}Uq E-E@;EuED$$hp VBE@ E}uUED$E$$y DžLEPD$E $y DžL UE9} DžL DžLLUq EGEt5Ef=tEf=tEf=u E$HE@,E}uU r ftq t q @t EEEUWSX t-X 0 T$ D$D$np $A!0 D$D$yp $AD$p $hAȞ Ȟ mHHHƄD$p $AȞ Ȟ 0 D$.$>E}EX t-X 0 T$ D$D$np $@!0 D$D$yp $@E.D$p $b@Ȟ Ȟ ukDDHƄD$p $@Ȟ Ȟ u$p e>$ u>0 D$$t!0 D$T$$p >q )r u2 $] r u# D$$yr uK  u& D$p $& D$p $H ~5r H 9|&$p <=H D$$p >r ft 2 4q EEPE9tE@,E}u}u:M܋2  r )É؋r L$ D$T$$ q =.q q )r EEf@'UJ2 9q @ q q @q  e u& D$Dq $A r ft#2 ur D$$Kq <2  r )ljr D$T$$bq <2 r D$${q qE@t+E@EE D$ T$ED$ $E@E}uE@$E}uE@E}uU(k EEE}E@@EE@@T$$uwE@xmE@f@u`E@0f=1uQD$ D$D$$_EUEBE$E@0D$$.E@E}7U(EE$ E@EE@ EEf,tEE E@ EEE$@uK$7EUED EP ED D @ EED$$E@$E}pE@$E}OU}tAE$@uD$E$E@$$E@ $UEE@$EEE@$E}uEUEE@$E)EE PE@ @9uEEE@$E}uEEU(}u} u E}t} u EE@EE @E}t}u E}tEP@E@@9t EEPE@f9t EvEET$$$t ESE@f=u?E@$t5E @$t+E @$P E@$@ D$T$$EEEU(D E3ED$ED$$t E@ DE@ E}u$菥EUED EP ED D @ U8E@EE@EpE@EOE$@0E@E$E@E܃}rt&}9tE@@$$H EE$&EE@$EE;EuTEPET$$"EEE@T$$EE;EuE@D$$E@E}n2E@D$$} D$$} ٢E@ E}E@E}E@$E}eU(D E\$ ~ EPED$T$$T$"~ E@EE@u$%~ \!EPED$T$$$<-E@t $4~ E@t $9~ E@t $?~ E$t ED~ EK~ ED$$P~ $>E@ t $U~ E@ E}$ hE@ E}$ IU(E @u T @T X ‹E fPE f@ E @ED$$X~ E @& D$D$$轀ED$$c~ }t-$z~ EPED$T$$:$ hE @EE;EtvE@ ti tCE@D$$~  EPED$T$$$ EPET$$E@ E}oU(Ef=]E @EEE$@EE;EE@ED$ED$$9t&ED$ D$~ E D$E$}D EEED$T$$ttE@E]ED$ED$$t4E$t#ED$ D$~ E D$E$JE@ E}u}uE@ E}WE@ E}U(}E$x@E tBED$$~ E@D$D$E$$~ 0 E9E@u!ED$ ED$ED$$~ E@E}u4 E9E@u!ED$ ED$ED$$~ E@E}u< EED$~ $ED$~ $ED$~ $tiE@EXE@E>E@u&EED$ ED$ED$$E@E}uE@$E}uE@E}%U(0 EEEE@E@EE@@fE@@@txE@@@ED$$uX t@ED$$~ EPED$T$$^$ EXE@ E}QE@E}0 9Eu 4 EEEE}EEU Er< ET tUED$~ $ED$~ $teED$~ $ltJ$ yEUEUE BE@2 EP< EPE< 2 U$%yEEEf@E@E@ EP EPE, D$E $%D$E$, 8 EPE8 U(} E f= ufE @ED$$JE @ EE-E;EuE@ D$E$\E@$EE}uFE P ED$ ED$T$E$[E P$ED$ ED$T$E$8U(< ElE@ERE@E8E@t%E@ED$ E D$T$E$E@E}u‹E@$E}uE@E}uU8< EED$~ $ED$~ $ED$~ $ED$W $EE@EjE@ EPEEf,u E@ EEE܋E܉EEED$ED$$E@$E}uE@$E}uE@E}U(k EEE}E@@E@f=#tzE@0tpE@f=uE@0f=.tTE@0f@tED$ D$D$/$vEUEBE@0D$E$3E@E}F< EBED$~ $ ED$~ $ED$~ $k EEE}E@@EE@@T$$xuuE@xkE@f=t^E@0tTE@0f@tED$ D$D$/$uEUEBE@0D$E$E@E}7E@E}U($ %0 E EEE@E@ft E蹇 E軇 ED$$:y E@D$$ E@EL$ EPED$T$$&E@D$$ć JE@ E}u$ /E@E}/$ˇ 00 9Eu 4 EEEE}$· U]8 0 8 t8 4 8 U(E@tE@t EE@t EE@ƒEP t&EPET$ E D$L$$҇ E@t> tED$$߇ E@ƒEPERE;E tAE@E0E¡2 E D$$uE@E}uEEUE;E tiE@t_E@tNE@ƒEPE@E,E¡2 E D$$E@E}uUE@EE;E u E@;EtDE@E}u$ pEUE UEBEPEPUEBU(E@E t!EE@T$D$$ BEPET$$uG t!EE@T$D$$ EPET$$sE@E}[U(E¡2 EE EE EE@E tAEEM!ЅЋEE T$ L$D$$ AEEM!ЅtE D$ED$E$U8E@EQE@:E@ EE%E¡2 PEE@E}uՃ}EE;EE¡2 @EEEEEPEM!ЅtuE¡2 @EE%E¡2 PEE@E}uՃ}~#E@tED$ED$E$EE@;EE@$E}U(E@EE@E@$E}uE@D$D$E$LU E@EE@E@tvE@-E} wZMUE%uEu2ECE¡2 $it EE@E}]EEUE@ EE¡2 EE@ttE@tjE@t^E@E}t#} }t0E-w# E2E$dt EE@E}XEEUH tED$$5 薺E@E~E@gE@VEEEEEEEE@EE¡2 EE@ƒE EPEE@t`E@tTE@E܃}s}r}0}ct*/}t }tE$eE EE@E}O}u}u}u }~f}u`E$uQE@ƒEP t1EED$ED$ED$ ED$T$$B E@$E}xUSE@EzE@cE@ $i‹EPEE@9u7E@EE@EEPE‹MEEPEEE@ ;EۋE@tUE@EAEPE@ XEPE@ M!ЉE}~E`E¡2 @uBEEEEEPEEPEM!ЉEE@;EE@$E}|[US$EEP $ 9~ E@ $ $ $ h( EE¡( EE@ ;EڋE @ EzE¡2 EE@tPEetKE@X E@ PE@@T$D$$`\$D$$ `E E@ f= u~E@f= uoE@PE@ @T$$dtME@ P E@@ T$D$$1`‹E@ @T$D$$ `E|E@ f= uUE@f= uFE@PE@ @T$D$$_D$D$$ _EEP E@T$$cuE@ f=tE@f= uE@ EE@ f= tE@f=uE@EE@ f= E@f= ~E@ P E@@ T$$FcXE@EJE@ f= u-EPE@ @ T$$ctE@ EE@ f= u-EPE@ @ T$$btE@EE@ f= u~E@f= uoE@PE@ @T$$|btME@ P E@@ T$D$$]‹E@ @T$D$$ ]EEEP E@T$$buE@ f=tE@f= uE@EE@ f= tE@f=uE@ EE@ f= uyE@f= ujE@ P E@@ T$${atHE@ X E@ PE@@T$D$$\\$D$$ \EIE@ f= u:E@f= u+E@ P E@@ T$$`t E@ EE$[U(E}y xEEH$EEpEUЋ&  9uP EH$EUЋ& L$ED$$[EE$E댍E}~}u $ lEEEU4 $UE t#$ dE$$ Mht$  @  E$ /ÐUEUE EUE EEE$E Ѕu֋Eƀ UHEE;EuE E8E ED$D$ E܉$u-D$D$$X4 E}-t_$  E}>u-D$D$$OX4 EG$̉  u!uă}[}ċ܉ D$/D$$\ED$\D$$/ED$&D$$&ED$|D$$|EdD$[D$$]ECD$-D$$>nE"EE E E D$D$E$W4 EEE<[^_UW$E$EE E,EED$$_u EEE@E}u$qEEEE}H@$JE‹EEED$$CE EPUE EEE$_U$DEEEEÐU  9}  ҉U@  @ EEUEE-E <(uEE <)uEE 9E|Ƀ}t @ $L U4 D$$ 裘U塼 ~ H U D$$e ݘ D$$~ ȘGTnFUW$   )У PE @E}ft9}f }dt}n}v ME EUE E< t*E E<"tE E< uE E EE E;EE D$$ 軘 E}H : @ - !E @D$$ O+ME }~E <- u0$ 6$͋ *$ $2S uX t $_U}EE}}D}}}q}}{t} '} } } ?} b}  4 D$$(評E@$4 D$ D$D$$ 膖E@ $4 D$$)S4 D$$(9E@$4 D$ D$D$$ E@ $r4 D$$)[4 D$$(ɔE@$54 D$ D$D$$ 覕E@ $4 D$$)s4 D$$(YE@$4 D$ D$D$$ 6E@ $4 D$$){4 D$$X4 D$ D$D$$ ԔE@$04 D$$)術4 D$$!臓4 D$ D$D$$ rE@$4 D$$)?4 D$ D$D$$ %4 D$ D$D$$% fE@4 D$D$* $בB4 D$ D$D$$/ 谓$3 ҒE$UEE}}Q}}};S}O}}} } }}u} } } $C $F ԑ$I Ñ$L 貑$P 衑$Z 萑{$] 肑m$!t_$UfQ$VXC$XJ5$% <'$ .$`  E$U$o } tE D$E$ E$ڐ t. t%$y 軐 $$'袏D$ $ 莐E$-yE 9E|$ ~& $1 @ UD$E$UE D$E$$EU$ E@E E$$ ЏE@E}u$ 赏E@E E$$ 蓏E@E}u$ xE@ E E$$ VE@E}u$ ;E@E E$_$ E@E}u$ U} EE  tQED$$ 赎E@EED$$ь 蕎E@E}u܋E$w @   9~  U E}tE  H EU @ T$D$֌ $ 踎 U8EE}t}t`E@D$E D$E$t)E@ D$E D$E$t EEEEE@D$E D$E$bu E@ D$E D$E$Bt EEEEUE @E=E$5;EED$ED$E$Pt EE@E}uEEUS$E$:E EfE@tPED$ED$$t2E١ ‹ETdQE @ EE}uEf= uE@ Ep$[US$E$4:E EE@t|ED$ED$$t^E<>vD$$ڌ }E١ ‹ET$QE @   EE}d$[U}tqE-E} w\U E@$@ @ E$E@ $0E@$E@ $U( E.EED$$iuEEhEE}u̡ E,EED$$-u E@E)E@E}u΋ED$$ EPED$E D$$^EEP ED$E D$$?EEEEUEE EEE!UEDd;Eu EEE;E̓}tEGE!UED$;Eu EEE;E̓}uEE 9EVEU(E t uEaccef@pt@q 9E |EfT0@YE @D$E$EE U¡ 9|Eaccef@pt@EE D$D$N E$EUS$E@u:D$D$$AD$ R D$ED$E$,E@E8E$E}E@tGED$E D$t$ED$ tD$D$] $&acce@pt_af@ll@ tx D$ED$ E D$T$$d E@$ЋEȋE@d؋ET$L$ \$D$$ ƃEPD$ T$ED$E$*E@E}$[UhE EE@}t(ED$ $u  9Eu-ED$ $ȁtEacce@pt_ED$D$ E$蘃ED$E$貂ED$ED$E$~EE}.E 9E~+UEEE]EE#EET$$tE@E}u׃}uE$EUEBEEE@E}uEU(EEtEE EVEET$$艀tEE+E@EE$.}t UEBEE E@E}uE@E}u}uE ES} uEEEE @uU EBE E*EE E@EE@uUE BEEEU(E$ D$D$ D$D$$sE EUEBEPEPE  EYE@E2E@EEET$$3E$q-EE}uȋE@E􋀨E}uU(EEEBE$<E}tED$ED$$<EEEE@E}u}uEEE$-$.EEEEUEEEE:E$%<E}tEUPEE EEEEE@E}uEU$+*E}t UE$8‹E} tE $~‹EP}tE$‹EP}tE$#‹EP}tE$~‹EP E$UE-E} Uȍ E@D$$@ D~D$ $@ +~@D$ $@ ~*D$ $@ }D$ $@ }E@ $TE@$FlD$ $@ }D$ $@ }D$ $@ }*D$č $@ u}D$ƍ $@ _}U}u E8Ef= u E@E!@ E$$@ LEEUHE@$EEPEPUEBE@$t‹EP E@ $EE$P‹EP t E$ t1E@ t E@ EE ẺD$$ g| t1E@t E@EE EЉD$$ -| E tED$$% | t1E@ t E@ EE EԉD$$9 { tED$$? { t1E@t E@EE E؉D$$9 l{EP E@ 9uEPE@9t& t $S WzE苀E t $a 1zE@t EPE@T$$‹EPE@EbE@EED$E$,;uE@E}uۃ}u#E$E7EEPEPUEBE@E}u$ d%EEEUEB EPE E@E"E@EED$$5EE}u؋E@E"E@EED$$5EE}u؋E@ E"E@EED$$e5EE}uE}m t   tED$$k ZyE@E2 t E$u t $ &yE@E}uȡ t D$$z x t   @  EE EEUSDE@ tED$$ x t E$kE$It $ gw E@  t $ xE@ E2 t E$: t $ wE@E}uȡ t $ vEX E$D$D$ \$D$$OU txED$$ kwE@EED$$ь KwE@E}u$ 0w tE@$TE$E@f=E@@t0E@@ E E@EE@uE@PEPE@@EEE E@EE@uE@P EPE@D$$$2UEBE$^EE@EE@PEPE@Ef= t[E@tHE@E(ED$E$f6t E'E@EE@u΋UEB UEBE-E؃}vU؋܎ E$ZED$$31E$v7}tED$$ 1E$ME@ @t#E$gD$$Ȏ E@@t#E$7D$$Ȏ E@ EEPEP}tEEE$1EEP EPE@EE@ $0‹EPEPE@BE$@‹EPE$_EPEHED$T$ ED$L$$E@ @t#E$KD$$Ȏ E@@t#E$D$$Ȏ E@E}tEEE$/EEP EPE@ EEPEPE@$0EEP EPUEB }tED$$.E$7E@ @t#E$QD$$Ȏ E@@t#E$!D$$Ȏ E@EE@ EE@ EEPEPEPEPEPEHED$T$ ED$L$$,E$4‹EP}tED$$-E$:D[US4}u EEE-E} wnMUE%AuE% u0DE@$‹EPE@ $‹EP E@$m‹EPEf=E@f= E@@f=E@ f= urE@ @f=u`E@ P E@@ T$D$$*-D$D$$ -\$D$$ ,EEf=E@f= E@@f= u~E@ f= uoE@ @f= u]E@ P E@@ T$D$$t,D$D$$ V,\$D$$ B,EEEMME4[U(} tE$E u tU4 D$ D$ D$$ pE$4 D$ D$D$$ Pp E$,E$ $JD$D$ ED$T$$E E$U E}u١ E$E$$K tW$ m D$$ n D$$< n D$$a {n$u mÐUE ET$$ mt EE PE@T$$.EEU}RE-E} 9MUE% uEE@uMME@$‹EPE@u"E@ D$$2)EE@ $C‹EP E@ u"E@D$$(EEEE@$‹EPE@uE@ $EME@ $‹EP E@ u E@E"UUED$$`(EEUWVp@ E.EED$$6ku EEE@E}uD$| E$kEEE Eu}M(tgEEE<_t E}?~}?~ED$$ EED$D$ E$slE$ EEEp^_U}E@tE@E@ tED$$ IkE@EXE@uEE$$D u%ED$| $iu D E@E}uU(E $E tE D$ED$$ j@ EhEED$$Giu E@ ED$[ $\uEEEEE@ EEEE EEEEEET$$EEE Eu}M(uU uLED$D$c E$>^ED$E$E@E}E@E}S}t } *EH^_UWVpE t EEE@ Ex}tE@ZE@ KE@E3}tE@E@ ED$E$}E tKEET$ D$ED$$h A\E$$ J[E$EET$$'EEE Eu}M(uU uLED$D$c E$d\ED$E$E@E}E@E}~}t } UuNuEp^_U}E@$E@t 4 D$ D$D$$ [EPE@D$T$$`t4 D$$1rZE4 D$D$ $aYH @H UWV } uE@uE@E4 D$D$ $Y t[4 D$ D$D$$ ZE@@$,4 D$ D$D$$ ZEEE Eu}M(u- u$E4 D$D$ $9X4 D$ D$D$$ ZH E@$H u%4 D$ D$ D$$ Y4 D$ D$D$$Ð Y @  ^_UWV0$EE$ν‹EE$=$l‹EP tOE D$$ɐ gXE$$ѐ PXE@$|ED$$Ԑ +XE@tE@$G$‹EP@ E=EE D$$VuEPEPUEBE@E}u$EE $ż‹EUEBUEBE EE Eu}M(uE@ @ UBE@ 0^_U@ EE@E@E}uD U(E t$[ 8E uE@ $$[  E4 D$ D$D$$ې SWP4 D$ D$D$$ )W%E$7E$E tED$ED$$ V}E$b}t0E@ t%4 D$ D$ D$$ V}u0@ u'4 D$ D$D$$ ZV/E$@ EE$E@E}uD t%4 D$ D$D$$ U4 D$ D$D$$- UUWS0EHE}O~T @  tED$$0 TE$EE  SE` EE܋E EE tE EEEEU܉ U܋ E}~E  EUE E ]EE$` UE  E` EEEEUEEE)E` ;EvԋUE @ E` EUE` UUEEUEEE;E|EEUEѸE0[_UEEE(E%=UtD$$M EEEE}O~ ` @` 1UE` @` E` EUE` U($d ^QEaE EE EE` EE E Et(ED$ED$ ED$ED$$ QE}O~U}u EEEf=t2Ef=uD$E@EEP EPUEB EEE@tE@Ef9tE@$‹EPE@ $i‹EP EEEU}uEEVE$ E}tEE:E@ $‹EP E@$‹EPE$Z EEU(Ef=t#E$ѽD$$ UE@-E} U0 ࡨ t $ aOE@D$$ E@Ef t $ OE@D$$ E@Ef  t $Ƒ NE@@EE@D$$Q E@ED$$4 EE+ t $ϑ ~NEf  t $ \NEf  t $ =NEf E@fE@$I‹EP t $ MEf t $ MEfE@@ EE@@ D$ED$$ $‹EP E@fE@EE$‹EPE$q$U8E} E ;Eu/E @ D$E$E @D$E$zE $ E u E VE$EE ;Et E E EE@$ EEET$$LE}}y6}u% D$ED$E$> E E2EEE@ EE;EuE@ gE EE$hEEET$$|KE}tL}y$ED$ED$E$‹E"EED$T$E$‹EUE ;Et E @ D$$E @ E fUhE}u EEEE}t}t EE ED$E$ED$$k}) EEf=u E@EEEEEEf= u4ED$$D$D$$ REGEf=u; D$$D$D$$ Ef=u E@ EEEE}( E- EE;EEfEfEf=u E@EEEEEEf=u E@EEEEEED$E$ tED$$1ED$ED$$ tED$$vEf=u E@ EEEE}Ef=u E@ EEEĉE}}) EEf=u E@EEEȋEȉEEf=u4ED$$D$D$$EGEf= u; D$$D$D$$  Ef=u E@ EEẺE}( E- EE;EEfEfEf=u E@EEEЋEЉEEf=u E@EEEԋEԉEED$E$\tED$$s1ED$ED$$ tED$$@Ef=u E@ EEE؉E}Ef=u E@ EEE܉E} EEEfE@ EED$$}u @  EUEB E@ EE@ E@Ef=t Ef=uiE@EE@EfE@PEPE@P EP E@PEPED$$EEE@ E} u"}uD$$` EE EEU(E EnEED$$:tH @ E@t ED$E$.tEE.E@$0EE@ EE}uEEU(}u EEE$GE}t EE @ $EE$‹EE$‹EPEPET$$ct+E@E@D$$gEEP EP E E@$.EEU D$$| aD D$$ LDU} tQ}t@E @D$$E @E @ D$$E @ E $U$EE‹EfUE BUEB EU}uEEE$EEEfEPEPEPEPEP EP EEEU}uEE@E$EE@$‹EPE@ $‹EP EEEU} u E}u E|ED$E $Ht E]E;Et EHE@D$E D$E$t EE@ D$E D$E$`EEU} u ErE ;EtED$E D$E$EHE PED$T$E$u EE P ED$T$E$|EEUED$E D$E$Uu EE D$ED$E$/EEU}u} u E}t} u EEE f9t EE@t6E @t,E @E@T$$?t EQE-E} Uܒ E E@t E @uD$$ OE @E@T$$4?EE PE@T$$EE PE@T$$u EE P E@ T$$u E_EVEЋE D$ED$$E2ED$$ ?D$$Ē ^EEU}u} u E}t} uB}uE f= u$EEf= u EEEE f9t EE@t3E @t)E @E@T$$=t EVE PE@T$$"t%E P E@ T$$t EE D$E$EEU}u} u E}t} u EEE f9t EE@t3E @t)E @E@T$$66666@6A6B6C666D6E6F6GH6;;JI ##KK-----------------------L---M-N-----------??OOOOOOOOPPPPQQQ//==99RRSSSS7777)))  )* 89: #$ !,<=>'(+OS`u^|z1k/WXtMGJ"javx2-[rdeCN?ATf]43b06Vih_E.\sZmR}{gwyoq~K{,K9V6(&'1R$aE|b}H~=>c?@efQ I`8"!#  zgRfLg,fXaq{{s779Nuy7`>  oO     , |, Rg S> >                      t + $ q h , , , , ,./ B -  66**67 H ;@BK>   ;< V V : ? lh pyt+(|v LN 29  }~E P 7Fc, 7DIOZdxxm R xKxx xg+7(oPNxxxm R+5anRRVU  (VQ* ? Llhe7PYOYNJlc@lFT"nM#PPPPPPPPPP]^AEP5abcLDBUiXlQmjkQ;PP=> 7~7;@%')+UU<UUUUUUZU*+PP[ JJU%-.Q!Q324[/7UU7c0c5cc  8c:;vqUUD{BCF5G5I55NOPDDDDYLnFlPPP[PPYMY[PPPFPlPPlnPPPPPPPpPPPPPPPPPPPPPPPPPPPPPPU-7UU7UU,.5/U%U69:U<U?UU@UAFUUUUUU7BG7DUUSUUUUUUUUUUUUUUUUUUUUUW_deghoprtuwx}y;)7CFKFFFFFFFFFFFFFFFFFFFFF%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&f `^L_LLLSTUVWXYZ[\]LLLLLLLLLLLLLLLLLLLLLLLHHHHIIIHHHHHHHHHHHHHHHHHHHHHHIPPPPPPPIIIIIIIIIIIQPIIIIIIIIIIIPP 0PPPP1PPPPdPPPPPPPPPPPPPPPPPPPPPPP\d$&(*24yd^HHd3Ysdd|_STUVWXYrstuZ[\]y^z_y^zy_^hijSTUVWklmnopqyXY^ rstuZvw\xz_]y^hijSTUVzW_klmnopqXY rstuZvw\x`]^z_hijSTUVWklmnopqXY rstuZ\x_]hijSTUVWklmnopqXYrstuZ\x]hijSTUVWmpqXYrstuZ[\x]STUVWXYZ[\]'h[((,(--%)y{*+9-(/})-)"1V:4%&()*+,-./}56:.[@:}p<=;=>[}[)5/O2.%SDU(*[O,}/#$[]^}  %&'/jk21}%&9()*+,-:/#$|}@153:[)9:;<=/>?2D1HI9;<=..(115/]^2HI#$5{(11%&)()*+,-_/Z|}{f5:5]].{,9}(..1  C}(((1)]^(({ {((((1..111:|}]).1.C>?"#$%&'.[FG1C/>?25,6789:;<=>?@ABCDEFGHI(]/2))([)[))))#$))}"#$%&'/)}2:/2CC6789:;<=>?@ABCDEFGHI?,)}>?(.{)1}])])}}))})"#$%&'BB))}{/),2){)678}){}>?@ABCDEFGz%&()*+,-/:]}}"#$%&'}]^/2%678*+-&/()+,-|}:]^>>&()+,-"#$%&'|}:/2678]^)>>|}%*+-/B"#$%&'/2678>?@ABCDEFG}"#$%&'/2678)>?@ABCDEFG%*+-/"#$%&'&(),/2678:>?@ABCDEFG}]^&(),"#$%&'|}:/2)678@ABCDEFG]^&(),|}%&(:*+,-/%&})*+-/%&]^*+-/^|}^|"#$%&'BCDEFG/|2678>?@ABCDEFG"#$%&'/2678>?@ABCDEFG"#$%&'&(),/2678:>?@ABCDE>?@ABCDEFG]^>?@ABCDEFG&(),@ABCDEFG|}:]^"%&'&(),678|}:]^&(),|}:"#$%&'/]^2678>?@ABCDE|}(-"#$%&'/2678>?@ABCDE~),"#$%&'/2678>?@ABCDE"#$%&'&()},/2678:>?@A]^    &(), !|}:.13:]^(),:|}"#$%&'/]^26789|}(),"#$%&':/2678>?@A]),"#$%&'|}/2678>?(),"#$%&':/}2678>?](),:}]"#$%&'),/2678}>?"#$%&'/2678}"#$%&'/2678>?H"#$%&'%&/*+2-./678v>[^"#$%&'/2678|}%&*+,-/%&*+-/%&)*+-/%&)*+-/  ^ ^"^|56^%&|})*+D-/|OSU|EPjk]^_`^z9:;<=>?@ABCDEFGHIy%&|*+-/:^%&*+-/|>?@ABCDEFG>?@ABCDEFG^>?@ABCDEFG>?@ABCDEFG%&(*+--/%&*+-/%&.)*+-/%&)*+-/>?@ABCDEFG]^%&*+-/]^\_^fg%&|~*+^-/%&|*+-/%&|*+^-/%&|*+-/>?@ABCDEFG^|^^|^||@ABCDEFG|    (- !*+,-.13:>?@ABCDEFG>?@ABCDEFG>?@ABCDEFG>?@ABCDEFG{(}~->?@ABCDEFG>?@ABCDEFG?@ABCDEFG?@ABCDEFG@ABCDEFG{~(-     !%&'*+,-./01234{(~:-    ( !-%&'*+,-.0134{~:(-   { ~ !%&'*+,-.0134(:-{~    [ !%&'*+,-.0134~:     !*+,-.134:     !*+,-.134:     !.13:syntax errorinitializer in parameter list:root:max nr of processes is 255 undeclared variable %sneed constant initializer for %s claim %s redefinedtrace %s redefinedtypedef %s must be globalinvalid use of '%s'label preceding declaration,label predecing xr/xs claim,malformed declarationcannot %s mtype (ignored)mtype declaration must be globalwidth-field %s too largeundeclared variable: %snot an eventbad label-name %sarithmetic on chanarithmetic on chan id'sused 'run' outside proctype:init:varrefinvalid PROVIDED clauseusage: provided ( ..expr.. )unsigned cannot be used as mesg typerargeval rargyacc stack overflow1=ؑ+etՕm–-gw6ԘD:K|ܚ3L]ƛVKZkܝ D!Οnʠ D~^mfv]g~2fϩYi9w)?ȭ+^oȮٮ->R.eӰ AxT²0aó.Mɵٵ2Bض?m&o)8͹;rQŻHl#4nTZ=procedure name %s redefinedstruct { char *c; char *t; } code_lookup[] = { { "%s", \"%%\n... }, { (char *) 0, "" } }; cannot happen, missing inline def %s"Matched""UnMatched""unMatched""StackOnly"expecting '[Un]Matched', saw %sc_state format (%s)array initialization error, c_state (%s)void globinit(void) { Global now.%s = %s; Hidden %s = %s; } void locinit%d(int h) { Local uchar *this = pptr(h); ((P%d *)this)->%s = %s; %s; uchar c_state[+%ssizeof(%s)%s%s]; uchar c_stack[WS"Hidden"%s; /* Hidden */ #if defined(C_States) && defined(HAS_TRACK) dereferencing state object: %sextern %s %s; #endif void c_stack(uchar *p_t_r) { #ifdef VERBOSE printf("c_stack %%u\n", p_t_r); if(%s) memcpy(p_t_r, %s, %s); else memset(p_t_r, 0, %s); p_t_r += %s; } void c_update(uchar *p_t_r) { printf("c_update %%u\n", p_t_r); memcpy(p_t_r, &%s, sizeof(%s)); p_t_r += sizeof(%s); void c_unstack(uchar *p_t_r) { printf("c_unstack %%u\n", p_t_r); memcpy(%s, p_t_r, %s); void c_revert(uchar *p_t_r) { printf("c_revert %%u\n", p_t_r); memcpy(&%s, p_t_r, sizeof(%s)); /* start of %s */ \#%s /* end of %s */ #define C_States 1 #undef C_States P%s->spin: in proctype %s, ref to object in proctype %s invalid variable ref in '%s'if (!(%s)) { if (!readtrail) { depth++; trpt++; trpt->pr = II; trpt->o_t = t;trpt->st = tt; Uerror("%s"); } else { printf("pan: precondition false: %s\n"); _m = 3; goto P999; } } now.{ _m = 3; goto P999; } } } ++--c_expr %s has side-effectsinline fcts too deeply nestedwrong nr of params on call of '%s'cyclic inline attempt on: %s#identmalformed preprocessor directive - # .malformed preprocessor directive - # .linenomalformed preprocessor directive - .fnamemalformed preprocessor directive - fname.bad param to inline %sc_code%dspin: saw char '%c' bad inline: %s /* line %d %s */ #line %d %s {inline text too long%3d: %s, warning: empty inline definition (%s) string not terminatedcharacter quote missing: %smzju[Tactiveassertatomicbitboolbreakbytec_codec_declc_exprc_statec_trackD_proctypedochanelseemptyenabledevalfalsefifullgotohidden:hide:ifinit:init:intlenlocal:local:mtypenemptynever:never:nfullnotrace:notrace:np_odofpc_valuepidprintfprintmpriorityproctypeprovidedrund_stepinlineshortskiptimeouttrace:trace:trueshow:show:typedefunlessunsignedxrxs_lastspin: line %d replacement value: %s formal par of %s matches replacement value,()'%c'///////////////////////////////// s^4I bitbyteproctype %s, '%s %s' could be declared '%s %s' redeclaration of '%s'(%s) has invalid width-fieldunsigned without width-field(%s) only an unsigned can have width-field:hide:bit variable (%s) cannot be hidden:show::local:chan initializer for non-channel %sbad array size for '%s'error: x[rs] claims from %s and %s conflicting claims on chan '%s'non-local x[rs] assertionxr or xs of non-chan '%s'bad mtype definitionname %s appears twice in mtype declarationtoo many mtype elements (>255)%s%s.[%d] %d %s <:struct-field:> <:global:> <%s> %d struct %schan %s-exported as run parameterimported as proctype parameterused as l-value in asgnmntused as r-value in asgnmntpolled in receive stmntused as parameter in receive stmntused as parameter in send stmntreceived fromsent to %s by: to %s par %d, never used under this namespin: warning, %s, proctype %sglobal, '%s%s' variable is never used _attempt to read value of '_'_last_p_pid_nr_prself-reference initializing '%s'undecl var %s (assuming int)findlab through getglobal on %s cannot happen, cast_val%d->%d (%d)value (%s) truncated in assignment#ifndef XUSAFE setq_claim(, %d, ", h, ""%s"); #endif %s[%d] = ~G%s = %s = %s MSC: ~G %s %s %3d: proc %3d (TRACK) line 1 "var" (state 0) [printf('MSC: globvar\\n')] = %s %s(%d):%s~G%s(%d):%s = %s(%d):%s = MSC: ~G %s(%d):%s %s (state 0) [printf('MSC: locvar\\n')]/lib/cppseed used: %d spin: %d error(s) - aborting Exit-Status 0%s %s > %sspin: preprocessing failed rwspin: cannot cp %s to %s use: spin [-option] ... [-option] file Note: file must always be the last argument -A apply slicing algorithm -a generate a verifier in pan.c -B no final state details in simulations -b don't execute printfs in simulation -C print channel access info (combine with -g etc.) -c columnated -s -r simulation output -d produce symbol-table information -Dyyy pass -Dyyy to the preprocessor -Eyyy pass yyy to the preprocessor -f "..formula.." translate LTL into never claim -F file like -f, but with the LTL formula stored in a 1-line file -g print all global variables -h at end of run, print value of seed for random nr generator used -i interactive (random simulation) -I show result of inlining and preprocessing -J reverse eval order of nested unlesses -jN skip the first N steps in simulation trail -l print all local variables -M print msc-flow in Postscript -m lose msgs sent to full queues -N file use never claim stored in file -nN seed for random nr generator -o1 turn off dataflow-optimizations in verifier -o2 don't hide write-only variables in verifier -o3 turn off statement merging in verifier -Pxxx use xxx for preprocessing -p print all statements -qN suppress io for queue N in printouts -r print receive events -S1 and -S2 separate pan source for claim and model -s print send events -T do not indent printf output -t[N] follow [Nth] simulation trail -Uyyy pass -Uyyy to the preprocessor -uN stop a simulation run after N steps -v verbose, more warnings -w very verbose (when combined with -l or -g) -[XYZ] reserved for use by xspin interface -V print version number and exitonoffspin: dataflow optimizations turned %s spin: dead variable elimination turned %s spin: statement merging turned %s spin: rendezvous optimization turned %s spin: case caching turned %s spin: bad or missing parameter on -o.].. /\/Spin Version 4.3.0 -- 22 June 2007spin: warning -o[123] option ignored in simulationsspin: cannot open %s progressaccept_%sspin: missing argument to -freading input from stdin:spin: -c precludes all flags except -t__p_pid_last_nr_prs00000144w1144114E244L02H334333444444d0000431I1Y1h114111 2Z2l2222m333nofilenamespin: line %3d %s, Error: saw ' near '%s'not enough memoryspin: Warning, never claim has side-effectnever claim contains i/o stmntsspin: warning, make sure that the S1 model also polls channel '%s' in its claim spin: never, saw incompatible with separate compilationenabled()pc_value()spin: Warning, using %s outside never claim spin: Error, using np_ outside never claim '%c' = '%d'\b\t\f\n\rconditionsendrecvrecv poll %s(x->y:z)%sactive%s&&%s=%sassert%satomic%sbreak%sc_code%sc_decl%sc_expr%sc_state%sc_track%snevera constant%s--%sd_step%sd_proctype%sdo%selse%sempty%senabled%s==%seval%sfi%sfull%s>=%sgoto%s>%shidden%sif%s++inline name%sinline%sinit%slocala label-name%s<=%slen%s<<%s<%smtypean identifier%s!=%s! (not)%snempty%snfullsub-sequence%snp_%sod%sof%s||%s!!%spc_valueprocess name%sprintf%sprintm%spriority%sproctype%sprovided%s?%s??%s>>%sruntoken: ::%sshow%s!a string%strace%stimeoutdata typename%stypedef%sx[rs]%s- (unary minus)a typename%sunlessBBGCBCoCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGD/DBBBBBBBBBBBBBBBBBDBBBBBBBBBBBBBBBBCBBBBBBBBBBBBBBCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBDWKwK/EOEoEEEWLIF/GKMIwHHJGEFLHOGwFJwLDGJ7FN?MoJoDKWFGLHKKoGF'JJE_MMIM/KOHLEMHDLJKLJDGIG_IGH?I7L/HFMIF%%%%Pages: (atend)%%%%PageOrder: Ascend%%%%DocumentData: Clean7Bit%%%%Orientation: Portrait%%%%DocumentNeededResources: font Courier-Bold%%%%EndComments%%%%BeginProlog50 dict begin/baseline 0 def/height 0 def/justify 0 def/lineLength 0 def/spacing 0 def/stipple 0 def/strings 0 def/xoffset 0 def/yoffset 0 def/ISOEncode { dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end /Temporary exch definefont} bind def/AdjustColor { CL 2 lt { currentgray CL 0 eq { .5 lt {0} {1} ifelse } if setgray } if/DrawText { /stipple exch def /justify exch def /yoffset exch def /xoffset exch def /spacing exch def /strings exch def /lineLength 0 def strings { stringwidth pop dup lineLength gt {/lineLength exch def} {pop} ifelse newpath } forall 0 0 moveto (TXygqPZ) false charpath pathbbox dup /baseline exch def exch pop exch sub /height exch def pop newpath translate lineLength xoffset mul strings length 1 sub spacing mul height add yoffset mul translate justify lineLength mul baseline neg translate dup stringwidth pop justify neg mul 0 moveto stipple { gsave /char (X) def { char 0 3 -1 roll put currentpoint gsave char true charpath clip StippleText grestore char stringwidth translate moveto } forall grestore } {show} ifelse 0 spacing neg translate%%%%EndProlog%%%%BeginSetup/CL 2 def%%%%IncludeResource: font Courier-Bold%%%%EndSetupgsave /Courier-Bold findfont 8 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor %d %d [ Spin Version 4.3.0 -- 22 June 2007 (%s -- %s -- MSC -- %d) ] 10 -0.5 0.5 0 false DrawText grestore %%%%Page: %d %d save 10 %d moveto %d %d lineto 10 %d lineto closepath clip newpath %f %f translate %f %f scale Y@msc%s.pswcannot create file '%s'%%!PS-Adobe-2.0 %%%%Creator: %s --%%%%Title: MSC %s %%%%BoundingBox: 119 154 494 638 %s%d.trail%s.trailrcannot open trail file%%%%Trailer end %%%%Pages: %d %%%%EOF spin: wrote %d pages into '%s.ps' %d %d moveto %d setlinewidth 0 setlinecap 1 setlinejoin %f %f %f setrgbcolor AdjustColor stroke grestore closepath fill /Courier-Bold findfont 6 scalefont (%d) ] 10 -0.5 0.5 0 1 setlinewidth 0 setlinecap 1 setlinejoin 0.92 0.92 0.92 setrgbcolor AdjustColor stroke %d:%s (%s) ] 10 -0.5 0.5 0 ,@showpage restore Cmax length of %d steps exceeded postscript file truncatedmax nr of %d steps exceeded abortingMSC: too many queues (%s)too many channel typesError: sending to an uninitialized chanSTDINinvalid use of STDINError: receiving from an uninitialized chan %s type-clash in %s, (%s<-> %s)%s->Send send%3d: warning: missing params in send %3d: warning: too many params in send %3d: warning: missing params in next recv %3d: warning: too many params in next recv Recv [Recv] <-recvrv-sendSent %3d: warning: missing params in rv-send %3d: warning: too many params in rv-send cannot happen, s_snd_-[%d]Sen?!,[]q\p %3d%3d . %s%c(state -) [values: %d(state -) [%dline %3d %s %s %s queue %d (%s) mtype name %s too long%d queue %d (%s(%d):%s[%d]): %s): invalid asgn to chaninvalid use of chan name_nr_pr_pattempt to assign value to system variable %sjump into d_step sequencespin: line %d %s, redundant skip -error: (%s:%d) label %s placed incorrectly =====> stmnt unless Label: stmntsorry, cannot jump to the guard of anescape (it is not a unique state)=====> instead of "Label: stmnt unless stmnt"=====> always use "Label: { stmnt unless stmnt }""atomic { Label: statement ... }""Label: atomic { statement ... }""d_step { Label: statement ... }""Label: d_step { statement ... }""{ Label: statement ... }""Label: { statement ... }"=====>instead of do (or if) :: ... :: Label: statement od (of fi)=====>always useLabel: do (or if) :: statement od (or fi)cannot happen - labelsnon_local jump in d_step sequencesequence must have at least one statement&[Ōtunexpected: loose endsduplicate `else'cannot happen - if_seqdubious use of 'else' combined with i/o,//||_unexpected unless structurelabel %s redeclaredundefined label %sacceptendprogresscannot happen - mov_lab %sspin: label '%s' (proctype %s) unknown label '%s'spin: cannot remote ref a label inside the same proctypefix_dest error (%s)cannot reference label inside atomic or d_step (%s):b%dmisplaced break statementd_stepatomicspin: warning, line %3d %s, atomic inside %s (ignored) spin: warning, line %3d %s, d_step inside d_step (ignored)spin: error, line %3d %s, unless in d_step (ignored) label %s %d <%s> Starting %s with pid %d --parsing error, no sequence %s%d:%sproc %d = %s 0: proc - (%s) creates proc %2d (%s) priority %dspin: too many processes (%d max) spin: saw %d parameters, expected %d wrong number of parameters:never:spin: couldn't find claim (ignored)0::never:spin: remote ref to proctype %s, has more than one match: %d and %d ------------- final state: -------------#processes: %d es%d process%s created cannot happen - weightsSelect a statement choice %d: unexecutable, [ + Escape] [else] unexecutable, [else]Make Selection %d no executable choicesSelect [1-%d]: %d %s choice is outside rangespin: error, cannot use 'enabled()' in models with synchronous channels.warning: never claim not used in random simulationwarning: trace assertion not used in random simulation-------------depth-limit (-u%d steps) reached <> [stmnt in d_step blocksterminates timeout rv-attempt in d_step sequencesaw preinitialized struct %ssetlocals: cannot happen '%s'missing actual parameters: '%s'array in parameter list, %stype-clash in params of %s(..), (%s<-> %s)spin: indexing %s[%d] - size is %d indexing array '%s'%3d: proc -%2d (%s) MSC: ~G line %d -line %3d %s (state %d) spin: error, type: %d not a labelname: '%s'remote ref to label '%s' inside d_stepunknown labelname: %sspin: remote reference error on '%s[%d]' refers to wrong proctype '%s'_premote ref: %s[%d] %s not foundhave only: %d %s Select stmnt () choice 0: other process choice %d: unexecutable, choice %d: (else) Make Selection %d Select [0-%d]: %s choice outside range unexecutableStmnt [] has escape(s): ] Escape takenassignment%s: assertion violatedspin: text of failed assertion: assert(spin: bad node type %d (run) spin: trail file doesn't match spec?aborting)!vL5S|}3(\4_u_1 too few print args %s%c%d%o%u%xbad print cmd: '%s'printf string too long?^}used: enabled(pid=thisproc) [%s]#if defined(VERI) && !defined(NOREDUCE) && !defined(NP) if (!state_tables#ifdef HAS_CODE && !readtrail#endif ) { printf("warning: for p.o. reduction to be valid "); printf("the never claim must be stutter-invariant\n"); printf("(never claims generated from LTL "); printf("formulae are stutter-invariant)\n"); } UnBlock; /* disable rendez-vous */#ifdef BITSTATE if (udmem) { udmem *= 1024L*1024L; SS = (uchar *) emalloc(udmem); bstore = bstore_mod; } else SS = (uchar *) emalloc(1L<<(ssize-3));#else hinit();#if defined(FULLSTACK) && defined(BITSTATE) onstack_init();#if defined(CNTRSTACK) && !defined(BFS) LL = (uchar *) emalloc(1L<<(ssize-3)); stack = ( Stack *) emalloc(sizeof(Stack)); svtack = (Svtack *) emalloc(sizeof(Svtack)); /* a place to point for Pptr of non-running procs: */ noptr = (uchar *) emalloc(Maxbody * sizeof(char));#ifdef SVDUMP if (vprefix > 0) write(svfd, (uchar *) &vprefix, sizeof(int));#ifdef VERI Addproc(VERI); /* never - pid = 0 */ active_procs(); /* started after never */#ifdef EVENT_TRACE now._event = start_event; reached[EVENT_TRACE][start_event] = 1; globinit();go_again: do_the_search(); if (--Nrun > 0 && HASH_CONST[++HASH_NR]) { printf("Run %%d:\n", HASH_NR); wrap_stats(); printf("\n"); memset(SS, 0, 1L<<(ssize-3));#if defined(CNTRSTACK) memset(LL, 0, 1L<<(ssize-3));#if defined(FULLSTACK) memset((uchar *) S_Tab, 0, maxdepth*sizeof(struct H_el *)); nstates=nlinks=truncs=truncs2=ngrabs = 0; nlost=nShadow=hcmp = 0; Fa=Fh=Zh=Zn = 0; PUT=PROBE=ZAPS=Ccheck=Cholds = 0; goto go_again;}#ifdef HAS_PROVIDEDint provided(int, uchar, int, Trans *);intPrintf(const char *fmt, ...){ /* Make sure the args to Printf * are always evaluated (e.g., they * could contain a run stmnt) * but do not generate the output * during verification runs * unless explicitly wanted * If this fails on your system * compile SPIN itself -DPRINTF * and this code is not generated */ if (readtrail) { va_list args; va_start(args, fmt); vprintf(fmt, args); va_end(args); return 1;#ifdef PRINTF va_list args; va_start(args, fmt); vprintf(fmt, args); va_end(args); return 1;extern void printm(int);#ifndef SC#define getframe(i) &trail[i];static long HHH, DDD, hiwater;static long CNT1, CNT2;static int stackwrite;static int stackread;static Trail frameptr;Trail *getframe(int d){ if (CNT1 == CNT2) return &trail[d]; if (d >= (CNT1-CNT2)*DDD) return &trail[d - (CNT1-CNT2)*DDD]; if (!stackread && (stackread = open(stackfile, 0)) < 0) { printf("getframe: cannot open %%s\n", stackfile); wrapup(); if (lseek(stackread, d* (off_t) sizeof(Trail), SEEK_SET) == -1 || read(stackread, &frameptr, sizeof(Trail)) != sizeof(Trail)) { printf("getframe: frame read error\n"); return &frameptr;#if !defined(SAFETY) && !defined(BITSTATE)#if !defined(FULLSTACK) || defined(MA)#define depth_of(x) A_depth /* an estimate */depth_of(struct H_el *s){ Trail *t; int d; for (d = 0; d <= A_depth; d++) { t = getframe(d); if (s == t->ostate) return d; printf("pan: cannot happen, depth_of\n"); return depthfound;voidpan_exit(int val){ if (signoff) printf("--end of output--\n"); exit(val);char *transmognify(char *s){ char *v, *w; static char buf[2][2048]; int i, toggle = 0; if (!s || strlen(s) > 2047) return s; memset(buf[0], 0, 2048); memset(buf[1], 0, 2048); strcpy(buf[toggle], s); while ((v = strstr(buf[toggle], "{c_code"))) { *v = '\0'; v++; strcpy(buf[1-toggle], buf[toggle]); for (w = v; *w != '}' && *w != '\0'; w++) /* skip */; if (*w != '}') return s; *w = '\0'; w++; for (i = 0; code_lookup[i].c; i++) if (strcmp(v, code_lookup[i].c) == 0 && strlen(v) == strlen(code_lookup[i].c)) { if (strlen(buf[1-toggle]) + strlen(code_lookup[i].t) + strlen(w) > 2047) return s; strcat(buf[1-toggle], code_lookup[i].t); break; } strcat(buf[1-toggle], w); toggle = 1 - toggle; buf[toggle][2047] = '\0'; return buf[toggle];char * transmognify(char *s) { return s; }add_src_txt(int ot, int tt){ Trans *t; char *q; for (t = trans[ot][tt]; t; t = t->nxt) { printf("\t\t"); q = transmognify(t->tp); for ( ; q && *q; q++) if (*q == '\n') printf("\\n"); else putchar(*q);wrap_trail(void){ static int wrap_in_progress = 0; int i; short II; P0 *z; if (wrap_in_progress++) return; printf("spin: trail ends after %%ld steps\n", depth); if (onlyproc >= 0) { if (onlyproc >= now._nr_pr) pan_exit(0); II = onlyproc; z = (P0 *)pptr(II); printf("%%3ld: proc %%d (%%s) ", depth, II, procname[z->_t]); for (i = 0; src_all[i].src; i++) if (src_all[i].tp == (int) z->_t) { printf(" line %%3d", src_all[i].src[z->_p]); printf(" (state %%2d)", z->_p); if (!stopstate[z->_t][z->_p]) printf(" (invalid end state)"); add_src_txt(z->_t, z->_p); pan_exit(0); printf("#processes %%d:\n", now._nr_pr); if (depth < 0) depth = 0; for (II = 0; II < now._nr_pr; II++) { z = (P0 *)pptr(II); c_globals(); c_locals(II, z->_t);#ifdef ON_EXIT ON_EXIT; pan_exit(0);FILE *findtrail(void){ FILE *fd; char fnm[512], *q; char MyFile[512]; strcpy(MyFile, TrailFile); if (whichtrail) { sprintf(fnm, "%%s%%d.%%s", MyFile, whichtrail, tprefix); fd = fopen(fnm, "r"); if (fd == NULL && (q = strchr(MyFile, '.'))) { *q = '\0'; sprintf(fnm, "%%s%%d.%%s", MyFile, whichtrail, tprefix); *q = '.'; fd = fopen(fnm, "r"); if (fd == NULL) { printf("pan: cannot find %%s%%d.%%s or %%s\n", MyFile, whichtrail, tprefix, fnm); pan_exit(1); } } { sprintf(fnm, "%%s.%%s", MyFile, tprefix); sprintf(fnm, "%%s.%%s", MyFile, tprefix); { printf("pan: cannot find %%s.%%s or %%s\n", MyFile, tprefix, fnm); } } } if (fd == NULL) { printf("pan: cannot find trailfile %%s\n", fnm); pan_exit(1); return fd;uchar do_transit(Trans *, short);getrail(void) int i, t_id, lastnever=-1; short II; Trans *t; fd = findtrail(); /* exits if unsuccessful */ while (fscanf(fd, "%%ld:%%d:%%d\n", &depth, &i, &t_id) == 3) { if (depth == -1) printf("<<<<>>>>\n"); if (depth < 0) continue; if (i > now._nr_pr) { printf("pan: Error, proc %%d invalid pid ", i); printf("transition %%d\n", t_id); break; } II = i; for (t = trans[z->_t][z->_p]; t; t = t->nxt) if (t->t_id == t_id) if (!t) { for (i = 0; i < NrStates[z->_t]; i++) { t = trans[z->_t][i]; if (t && t->t_id == t_id) { printf(" Recovered at state %%d\n", i); z->_p = i; goto recovered; } } printf("pan: Error, proc %%d type %%d state %%d: ", II, z->_t, z->_p); printf("transition %%d not found\n", t_id); for (t = trans[z->_t][z->_p]; t; t = t->nxt) printf(" t_id %%d -- case %%d, [%%s]\n", t->t_id, t->forw, t->tp); break; /* pan_exit(1); */recovered: if (gui) simvals[0] = '\0'; this = pptr(II); trpt->tau |= 1; if (!do_transit(t, II)) { if (onlyproc >= 0 && II != onlyproc) goto moveon; printf("pan: error, next transition UNEXECUTABLE on replay\n"); printf(" most likely causes: missing c_track statements\n"); printf(" or illegal side-effects in c_expr statements\n"); if (onlyproc >= 0 && II != onlyproc) goto moveon; if (verbose) { printf("depth: %%3ld proc: %%3d trans: %%3d (%%d procs) ", depth, II, t_id, now._nr_pr); printf("forw=%%3d [%%s]\n", t->forw, q); c_globals(); for (i = 0; i < now._nr_pr; i++) { c_locals(i, ((P0 *)pptr(i))->_t); } else if (strcmp(procname[z->_t], ":never:") == 0) { if (lastnever != (int) z->_p) { for (i = 0; src_all[i].src; i++) if (src_all[i].tp == (int) z->_t) { printf("MSC: ~G %%d\n", src_all[i].src[z->_p]); break; } if (!src_all[i].src) printf("MSC: ~R %%d\n", z->_p); lastnever = z->_p; goto sameas; if (strcmp(procname[z->_t], ":np_:") != 0) {sameas: if (no_rck) goto moveon; if (coltrace) { printf("%%ld: ", depth); for (i = 0; i < II; i++) printf("\t\t"); printf("%%s(%%d):", procname[z->_t], II); printf("[%%s]\n", q?q:""); } else if (!silent) { if (strlen(simvals) > 0) { printf("%%3ld: proc %%2d (%%s)", depth, II, procname[z->_t]); for (i = 0; src_all[i].src; i++) { printf(" line %%3d \"pan_in\" ", printf("(state %%d) [values: %%s]\n", z->_p, simvals); } printf("(state %%d) [%%s]\n", z->_p, q?q:""); printf("\n");moveon: z->_p = t->st; wrap_trail();f_pid(int pt){ int i; for (i = 0; i < now._nr_pr; i++) { z = (P0 *)pptr(i); if (z->_t == (unsigned) pt) return BASE+z->_pid; return -1;void check_claim(int);bstore_mod(char *v, int n) /* hasharray size not a power of two */{ unsigned long x, y; unsigned int i = 1; d_hash((uchar *) v, n); /* sets j3, j4, K1, K2 */ x = K2; y = j3; for (;;) { if (!(SS[x%%udmem]&(1< RANDSTOR) return 0; { SS[x%%udmem] |= (1< 0) sprintf(fnm, "%%s%%d.%%s", MyFile, Nr_Trails-1, tprefix); else sprintf(fnm, "%%s.%%s", MyFile, tprefix); if ((fd = creat(fnm, TMODE)) < 0) { if ((q = strchr(MyFile, '.'))) if (iterative == 0 && Nr_Trails-1 > 0) sprintf(fnm, "%%s%%d.%%s", MyFile, Nr_Trails-1, tprefix); sprintf(fnm, "%%s.%%s", MyFile, tprefix); fd = creat(fnm, TMODE); } } if (fd < 0) { printf("pan: cannot create %%s\n", fnm); perror("cause"); { printf("pan: wrote %%s\n", fnm);#ifdef BFS#define Q_PROVISO#ifndef INLINE_REV#define INLINE_REVtypedef struct SV_Hold { State *sv; int sz; struct SV_Hold *nxt;} SV_Hold;typedef struct EV_Hold { char *sv; int nrpr; int nrqs;#if VECTORSZ>32000 int *po; short *po; int *qo; uchar *ps, *qs; struct EV_Hold *nxt;} EV_Hold;typedef struct BFS_Trail { Trail *frame; SV_Hold *onow; EV_Hold *omask;#ifdef Q_PROVISO struct H_el *lstate; short boq; struct BFS_Trail *nxt;} BFS_Trail;BFS_Trail *bfs_trail, *bfs_bot, *bfs_free;SV_Hold *svhold, *svfree;uchar do_reverse(Trans *, short, uchar);void snapshot(void);SV_Hold *getsv(int n){ SV_Hold *h = (SV_Hold *) 0, *oh; oh = (SV_Hold *) 0; for (h = svfree; h; oh = h, h = h->nxt) { if (n == h->sz) { if (!oh) svfree = h->nxt; oh->nxt = h->nxt; h->nxt = (SV_Hold *) 0; if (n < h->sz) { h = (SV_Hold *) 0; /* else continue */ if (!h) { h = (SV_Hold *) emalloc(sizeof(SV_Hold)); h->sz = n; h->sv = (State *) emalloc(sizeof(State) - VECTORSZ + n); return h;EV_Hold *getsv_mask(int n){ EV_Hold *h; static EV_Hold *kept = (EV_Hold *) 0; for (h = kept; h; h = h->nxt) if (n == h->sz && (memcmp((char *) Mask, (char *) h->sv, n) == 0) && (now._nr_pr == h->nrpr) && (now._nr_qs == h->nrqs) && (memcmp((char *) proc_offset, (char *) h->po, now._nr_pr * sizeof(int)) == 0) && (memcmp((char *) q_offset, (char *) h->qo, now._nr_qs * sizeof(int)) == 0) && (memcmp((char *) proc_offset, (char *) h->po, now._nr_pr * sizeof(short)) == 0) && (memcmp((char *) q_offset, (char *) h->qo, now._nr_qs * sizeof(short)) == 0) && (memcmp((char *) proc_skip, (char *) h->ps, now._nr_pr * sizeof(uchar)) == 0) && (memcmp((char *) q_skip, (char *) h->qs, now._nr_qs * sizeof(uchar)) == 0)) { h = (EV_Hold *) emalloc(sizeof(EV_Hold)); h->nrpr = now._nr_pr; h->nrqs = now._nr_qs; h->sv = (char *) emalloc(n * sizeof(char)); memcpy((char *) h->sv, (char *) Mask, n); if (now._nr_pr > 0) { h->po = (int *) emalloc(now._nr_pr * sizeof(int)); h->ps = (int *) emalloc(now._nr_pr * sizeof(int)); memcpy((char *) h->po, (char *) proc_offset, now._nr_pr * sizeof(int)); memcpy((char *) h->po, (char *) proc_offset, now._nr_pr * sizeof(short)); memcpy((char *) h->ps, (char *) proc_skip, now._nr_pr * sizeof(uchar)); if (now._nr_qs > 0) { h->qo = (int *) emalloc(now._nr_qs * sizeof(int)); h->qs = (int *) emalloc(now._nr_qs * sizeof(int)); memcpy((char *) h->qo, (char *) q_offset, now._nr_qs * sizeof(int)); memcpy((char *) h->qo, (char *) q_offset, now._nr_qs * sizeof(short)); memcpy((char *) h->qs, (char *) q_skip, now._nr_qs * sizeof(uchar)); h->nxt = kept; kept = h;freesv(SV_Hold *p){ SV_Hold *h, *oh; if (h->sz >= p->sz) if (!oh) { p->nxt = svfree; svfree = p; { p->nxt = h; oh->nxt = p;BFS_Trail *get_bfs_frame(void){ BFS_Trail *t; if (bfs_free) { t = bfs_free; bfs_free = bfs_free->nxt; t->nxt = (BFS_Trail *) 0; { t = (BFS_Trail *) emalloc(sizeof(BFS_Trail)); t->frame = (Trail *) emalloc(sizeof(Trail)); return t;push_bfs(Trail *f, int d) t = get_bfs_frame(); memcpy((char *)t->frame, (char *)f, sizeof(Trail)); t->frame->o_tt = d; /* depth */ t->boq = boq; t->onow = getsv(vsize); memcpy((char *)t->onow->sv, (char *)&now, vsize); t->omask = getsv_mask(vsize);#if defined(FULLSTACK) && defined(Q_PROVISO) t->lstate = Lstate; if (!bfs_bot) { bfs_bot = bfs_trail = t; { bfs_bot->nxt = t; bfs_bot = t;#ifdef CHECK printf("PUSH %%u (%%d)\n", t->frame, d);pop_bfs(void) if (!bfs_trail) return (Trail *) 0; t = bfs_trail; bfs_trail = t->nxt; bfs_bot = (BFS_Trail *) 0;#if defined(Q_PROVISO) && !defined(BITSTATE) && !defined(NOREDUCE) if (t->lstate) t->lstate->tagged = 0; t->nxt = bfs_free; bfs_free = t; vsize = t->onow->sz; boq = t->boq; memcpy((uchar *) &now, (uchar *) t->onow->sv, vsize); memcpy((uchar *) Mask, (uchar *) t->omask->sv, vsize); if (now._nr_pr > 0) { memcpy((char *)proc_offset, (char *)t->omask->po, now._nr_pr * sizeof(int)); { memcpy((char *)proc_offset, (char *)t->omask->po, now._nr_pr * sizeof(short)); memcpy((char *)proc_skip, (char *)t->omask->ps, now._nr_pr * sizeof(uchar)); if (now._nr_qs > 0) { memcpy((uchar *)q_offset, (uchar *)t->omask->qo, now._nr_qs * sizeof(int)); { memcpy((uchar *)q_offset, (uchar *)t->omask->qo, now._nr_qs * sizeof(short)); memcpy((uchar *)q_skip, (uchar *)t->omask->qs, now._nr_qs * sizeof(uchar)); freesv(t->onow); /* omask not freed */ printf("POP %%u (%%d)\n", t->frame, t->frame->o_tt); return t->frame;store_state(Trail *ntrpt, int shortcut, short oboq) Trans *t2 = (Trans *) 0; uchar ot; int tt, E_state; uchar o_opm = trpt->o_pm, *othis = this; if (shortcut) {#ifdef VERBOSE printf("claim: shortcut\n"); goto store_it; /* no claim move */ this = (((uchar *)&now)+proc_offset[0]); /* 0 = never claim */ trpt->o_pm = 0; tt = (int) ((P0 *)this)->_p; ot = (uchar) ((P0 *)this)->_t;#ifdef HAS_UNLESS E_state = 0; for (t2 = trans[ot][tt]; t2; t2 = t2?t2->nxt:(Trans *)0) if (E_state > 0 && E_state != t2->e_trans) if (do_transit(t2, 0)) if (!reached[ot][t2->st]) printf("depth: %%d -- claim move from %%d -> %%d\n", trpt->o_tt, ((P0 *)this)->_p, t2->st); E_state = t2->e_trans; if (t2->st > 0) { ((P0 *)this)->_p = t2->st; reached[ot][t2->st] = 1;#ifndef NOCLAIM check_claim(t2->st); if (now._nr_pr == 0) /* claim terminated */ uerror("end state in claim reached");#ifdef PEG peg[t2->forw]++; trpt->o_pm |= 1; if (t2->atom&2) Uerror("atomic in claim not supported in BFS mode");store_it: if (!bstore((char *)&now, vsize))#ifdef MA if (!gstore((char *)&now, vsize, 0)) if (!hstore((char *)&now, vsize)) { nstates++;#ifndef NOREDUCE trpt->tau |= 64;#if SYNC if (boq != -1) midrv++; else if (oboq != -1) { Trail *x; x = (Trail *) trpt->ostate; /* pre-rv state */ if (x) x->o_pm |= 4; /* mark success */ push_bfs(ntrpt, trpt->o_tt+1); } else { truncs++;#if !defined(NOREDUCE) && defined(FULLSTACK) && defined(Q_PROVISO)#if !defined(QLIST) && !defined(BITSTATE) if (Lstate && Lstate->tagged) trpt->tau |= 64; if (trpt->tau&32) { BFS_Trail *tprov; for (tprov = bfs_trail; tprov; tprov = tprov->nxt) if (!memcmp((uchar *)&now, (uchar *)tprov->onow->sv, vsize)) { trpt->tau |= 64; break; /* state is in queue */ } } ((P0 *)this)->_p = tt; /* reset claim */ if (t2) do_reverse(t2, 0, 0); this = othis; trpt->o_pm = o_opm;Trail *ntrpt;bfs(void){ Trans *t; Trail *otrpt, *x; uchar _n, _m, ot, nps = 0; int tt, E_state; short II, From = (short) (now._nr_pr-1), To = BASE; short oboq = boq; ntrpt = (Trail *) emalloc(sizeof(Trail)); trpt->ostate = (struct H_el *) 0; trpt->tau = 0; trpt->o_tt = -1; store_state(ntrpt, 0, oboq); /* initial state */ while ((otrpt = pop_bfs())) /* also restores now */ { memcpy((char *) trpt, (char *) otrpt, sizeof(Trail));#if defined(C_States) && (HAS_TRACK==1) c_revert((uchar *) &(now.c_state[0])); if (trpt->o_pm & 4) printf("Revisit of atomic not needed (%%d)\n", trpt->o_pm); nps = 0; if (trpt->o_pm == 8) { revrv++; if (trpt->tau&8) { printf("Break atomic (pm:%%d,tau:%%d)\n", trpt->o_pm, trpt->tau); trpt->tau &= ~8; else if (trpt->tau&32) printf("Void preselection (pm:%%d,tau:%%d)\n", trpt->tau &= ~32; nps = 1; /* no preselection in repeat */ trpt->o_pm &= ~(4|8); if (trpt->o_tt > mreached) { mreached = trpt->o_tt; if (mreached%%10 == 0) { printf("Depth= %%7d States= %%7g ", mreached, nstates); printf("Transitions= %%7g ", nstates+truncs); printf("Nodes= %%7d ", nr_states); printf("Memory= %%-6.3f\n", memcnt/1000000.); fflush(stdout); depth = trpt->o_tt; if (depth >= maxdepth) Trail *x; if (boq != -1) { x = (Trail *) trpt->ostate; if (x) x->o_pm |= 4; /* not failing */ truncs++; if (!warned) { warned = 1; printf("error: max search depth too small\n"); if (bounded) uerror("depth limit reached"); if (boq == -1 && !(trpt->tau&8) && nps == 0) for (II = now._nr_pr-1; II >= BASE; II -= 1)Pickup: this = pptr(II); tt = (int) ((P0 *)this)->_p; ot = (uchar) ((P0 *)this)->_t; if (trans[ot][tt]->atom & 8) { t = trans[ot][tt]; if (t->qu[0] != 0) { Ccheck++; if (!q_cond(II, t)) continue; Cholds++; From = To = II; trpt->tau |= 32; /* preselect marker */ printf("%%3d: proc %%d PreSelected (tau=%%d)\n", depth, II, trpt->tau); goto MainLoop; trpt->tau &= ~32;Repeat: if (trpt->tau&8) /* atomic */ { From = To = (short ) trpt->pr; nlinks++; { From = now._nr_pr-1; To = BASE;MainLoop: _n = _m = 0; for (II = From; II >= To; II -= 1) this = (((uchar *)&now)+proc_offset[II]); /* no rendezvous with same proc */ if (boq != -1 && trpt->pr == II) continue; ntrpt->pr = (uchar) II; ntrpt->st = tt; trpt->o_pm &= ~1; /* no move yet */ trpt->o_event = now._event; if (!provided(II, ot, tt, t)) continue; E_state = 0; for (t = trans[ot][tt]; t; t = t->nxt) if (E_state > 0 && E_state != t->e_trans) break; ntrpt->o_t = t; oboq = boq; if (!(_m = do_transit(t, II))) continue; trpt->o_pm |= 1; /* we moved */ (trpt+1)->o_m = _m; /* for unsend */ peg[t->forw]++; printf("%%3d: proc %%d exec %%d, ", depth, II, t->forw); printf("%%d to %%d, %%s %%s %%s", tt, t->st, t->tp, (t->atom&2)?"atomic":"", (boq != -1)?"rendez-vous":""); if (t->e_trans) printf(" (escapes to state %%d)", t->st); printf(" %%saccepting [tau=%%d]\n", (trpt->o_pm&2)?"":"non-", trpt->tau); E_state = t->e_trans;#if SYNC>0 if (t->e_trans > 0 && (boq != -1 /* || oboq != -1 */)) { fprintf(efd, "error: the use of rendezvous stmnt in the escape clause\n"); fprintf(efd, " of an unless stmnt is not compatible with -DBFS\n"); pan_exit(1); if (t->st > 0) ((P0 *)this)->_p = t->st; /* ptr to pred: */ ntrpt->ostate = (struct H_el *) otrpt; ntrpt->st = tt; if (boq == -1 && (t->atom&2)) /* atomic */ ntrpt->tau = 8; /* record for next move */ else ntrpt->tau = 0; store_state(ntrpt, (boq != -1 || (t->atom&2)), oboq); now._event = trpt->o_event; /* undo move and continue */ trpt++; /* this is where ovals and ipt are set */ do_reverse(t, II, _m); /* restore now. */ trpt--; printf("%%3d: proc %%d ", depth, II); printf("reverses %%d, %%d to %%d,", t->forw, tt, t->st); printf(" %%s [abit=%%d,adepth=%%d,", t->tp, now._a_t, A_depth); printf("tau=%%d,%%d]\n", trpt->tau, (trpt-1)->tau); reached[ot][t->st] = 1; reached[ot][tt] = 1; ((P0 *)this)->_p = tt; _n |= _m; /* preselected - no succ definitely outside stack */ if ((trpt->tau&32) && !(trpt->tau&64)) { From = now._nr_pr-1; To = BASE; printf("%%3d: proc %%d UnSelected (_n=%%d, tau=%%d)\n", depth, II+1, (int) _n, trpt->tau); _n = 0; trpt->tau &= ~32; if (II >= BASE) goto Pickup; goto MainLoop; trpt->tau &= ~(32|64); if (_n != 0) printf("%%3d: no move [II=%%d, tau=%%d, boq=%%d, _nr_pr=%%d]\n", depth, II, trpt->tau, boq, now._nr_pr); if (boq != -1) { failedrv++; x = (Trail *) trpt->ostate; /* pre-rv state */ if (!x) continue; /* root state */ if ((x->tau&8) || (x->tau&32)) /* break atomic or preselect at parent */ { x->o_pm |= 8; /* mark failure */ this = (((uchar *)&now)+proc_offset[otrpt->pr]); printf("\treset state of %%d from %%d to %%d\n", otrpt->pr, ((P0 *)this)->_p, otrpt->st); ((P0 *)this)->_p = otrpt->st; unsend(boq); /* retract rv offer */ boq = -1; push_bfs(x, x->o_tt); printf("failed rv, repush with %%d\n", x->o_pm); else printf("failed rv, tau at parent: %%d\n", x->tau); } else if (now._nr_pr > 0) if ((trpt->tau&8)) /* atomic */ { trpt->tau &= ~(1|8); /* 1=timeout, 8=atomic */ printf("%%3d: atomic step proc %%d blocks\n", depth, II+1); goto Repeat; if (!(trpt->tau&1)) /* didn't try timeout yet */ { trpt->tau |= 1; printf("%%d: timeout\n", depth);#ifndef VERI if (!noends && !a_cycles && !endstate()) uerror("invalid end state");putter(Trail *trpt, int fd){ long j; if (!trpt) return; if (trpt != (Trail *) trpt->ostate) putter((Trail *) trpt->ostate, fd); if (trpt->o_t) { sprintf(snap, "%%d:%%d:%%d\n", trcnt++, trpt->pr, trpt->o_t->t_id); j = strlen(snap); if (write(fd, snap, j) != j) { printf("pan: error writing %%s\n", fnm); pan_exit(1);nuerror(char *str){ int fd = make_trail(); int j; if (fd < 0) return; sprintf(snap, "-2:%%d:-2\n", VERI); write(fd, snap, strlen(snap));#ifdef MERGED sprintf(snap, "-4:-4:-4\n"); trcnt = 1; putter(trpt, fd); if (ntrpt->o_t) trcnt++, ntrpt->pr, ntrpt->o_t->t_id); close(fd); if (errors >= upto && upto != 0)do_the_search(void) depth = mreached = 0; trpt = &trail[0]; trpt->tau |= 4; /* the claim moves first */ for (i = 0; i < (int) now._nr_pr; i++) { P0 *ptr = (P0 *) pptr(i);#ifndef NP if (!(trpt->o_pm&2) && accpstate[ptr->_t][ptr->_p]) { trpt->o_pm |= 2; if (!(trpt->o_pm&4) && progstate[ptr->_t][ptr->_p]) { trpt->o_pm |= 4; if (accpstate[EVENT_TRACE][now._event]) { trpt->o_pm |= 2; if (progstate[EVENT_TRACE][now._event]) { trpt->o_pm |= 4;#ifndef NOCOMP Mask[0] = Mask[1] = 1; /* _nr_pr, _nr_qs */ if (!a_cycles) { i = &(now._a_t) - (uchar *) &now; Mask[i] = 1; /* _a_t */#ifndef NOFAIR if (!fairness) { int j = 0; i = &(now._cnt[0]) - (uchar *) &now; while (j++ < NFAIR) Mask[i++] = 1; /* _cnt[] */ if (fairness && (a_cycles && (trpt->o_pm&2))) { now._a_t = 2; /* set the A-bit */ now._cnt[0] = now._nr_pr + 1; printf("%%3d: fairness Rule 1, cnt=%%d, _a_t=%%d\n", depth, now._cnt[now._a_t&1], now._a_t); /* capture initial state of tracked C objects */ c_update((uchar *) &(now.c_state[0])); if (readtrail) getrail(); /* no return */ bfs();#if defined(C_States) && defined(HAS_STACK) && (HAS_TRACK==1) /* initial state of tracked & unmatched objects */ c_stack((uchar *) &(svtack->c_stack[0]));#ifdef RANDOMIZE srand(123); new_state(); /* start 1st DFS */#ifdef INLINE_REVuchardo_reverse(Trans *t, short II, uchar M){ uchar _m = M; int tt = (int) ((P0 *)this)->_p;#include REVERSE_MOVESR999: return _m;#ifndef INLINEstatic char _tp = 'n'; static int _qid = 0;do_transit(Trans *t, short II){ uchar _m = 0;#ifdef M_LOSS uchar delta_m = 0; uchar ot = (uchar) ((P0 *)this)->_t; if (ot == EVENT_TRACE) boq = -1;#define continue { boq = oboq; return 0; }#define continue return 0#ifdef SEPARATE#include FORWARD_MOVESP999: if (ot == EVENT_TRACE) boq = oboq; return _m;#undef continuerequire(char tp, int qid) _tp = tp; _qid = qid; if (now._event != endevent) for (t = trans[EVENT_TRACE][now._event]; t; t = t->nxt) { if (do_transit(t, EVENT_TRACE)) { now._event = t->st; reached[EVENT_TRACE][t->st] = 1; printf(" event_trace move to -> %%d\n", t->st);#ifndef BFS if (accpstate[EVENT_TRACE][now._event]) (trpt+1)->o_pm |= 2; if (progstate[EVENT_TRACE][now._event]) (trpt+1)->o_pm |= 4;#ifdef NEGATED_TRACE if (now._event == endevent) depth++; trpt++; uerror("event_trace error (all events matched)"); trpt--; depth--; for (t = t->nxt; t; t = t->nxt) { if (do_transit(t, EVENT_TRACE)) Uerror("non-determinism in event-trace"); return; else printf(" event_trace miss '%%c' -- %%d, %%d, %%d\n", tp, qid, now._event, t->forw); now._event = endevent; /* only 1st try will count -- fixed 4.2.6 */ depth++; trpt++; uerror("event_trace error (no matching event)"); trpt--; depth--;enabled(int iam, int pid){ Trans *t; uchar *othis = this; int res = 0; int tt; uchar ot; /* if (pid > 0) */ pid++; if (pid == iam) Uerror("used: enabled(pid=thisproc)"); if (pid < 0 || pid >= (int) now._nr_pr) return 0; this = pptr(pid); TstOnly = 1; tt = (int) ((P0 *)this)->_p; ot = (uchar) ((P0 *)this)->_t; if (do_transit(t, (short) pid)) { res = 1; TstOnly = 0; return res;snapshot(void){ static long sdone = (long) 0; long ndone = (unsigned long) nstates/1000000; if (ndone == sdone) return; sdone = ndone; printf("Depth= %%7d States= %%7g ", mreached, nstates); printf("Transitions= %%7g ", nstates+truncs); printf("Nodes= %%7d ", nr_states); printf("Memory= %%-6.3f\n", memcnt/1000000.); fflush(stdout);#ifdef SCstack2disk(void) if (!stackwrite && (stackwrite = creat(stackfile, TMODE)) < 0) Uerror("cannot create stackfile"); if (write(stackwrite, trail, DDD*sizeof(Trail)) != DDD*sizeof(Trail)) Uerror("stackfile write error -- disk is full?"); memmove(trail, &trail[DDD], (HHH-DDD+2)*sizeof(Trail)); memset(&trail[HHH-DDD+2], 0, (omaxdepth - HHH + DDD - 2)*sizeof(Trail)); CNT1++;disk2stack(void){ long have; CNT2++; memmove(&trail[DDD], trail, (HHH-DDD+2)*sizeof(Trail)); || lseek(stackwrite, -DDD* (off_t) sizeof(Trail), SEEK_CUR) == -1) Uerror("disk2stack lseek error"); Uerror("cannot open stackfile"); if (lseek(stackread, (CNT1-CNT2)*DDD* (off_t) sizeof(Trail), SEEK_SET) == -1) have = read(stackread, trail, DDD*sizeof(Trail)); if (have != DDD*sizeof(Trail)) Uerror("stackfile read error");uchar *Pptr(int x){ if (x < 0 || x >= MAXPROC || !proc_offset[x]) return noptr; return (uchar *) pptr(x);int qs_empty(void);/* * new_state() is the main DFS search routine in the verifier * it has a lot of code ifdef-ed together to support * different search modes, which makes it quite unreadable. * if you are studying the code, first use the C preprocessor * to generate a specific version from the pan.c source, * e.g. by saying: * gcc -E -DNOREDUCE -DBITSTATE pan.c > ppan.c * and then study the resulting file, rather than this one */#if !defined(BFS) && (!defined(BITSTATE) || !defined(MA))new_state(void) uchar _n, _m, ot; short ooi, eoi; short II, JJ = 0, kk; int tt; short From = now._nr_pr-1, To = BASE;Down: printf("%%d: Down - %%s", depth, (trpt->tau&4)?"claim":"program"); printf(" %%saccepting [pids %%d-%%d]\n", (trpt->o_pm&2)?"":"non-", From, To); if (depth > hiwater) { stack2disk(); maxdepth += DDD; hiwater += DDD; trpt -= DDD; if(verbose) printf("zap %%d: %%d (maxdepth now %%d)\n", CNT1, hiwater, maxdepth); trpt->tau &= ~(16|32|64); /* make sure these are off */#if defined(FULLSTACK) && defined(MA) trpt->proviso = 0; if (depth >= maxdepth) { truncs++; (trpt+1)->o_n = 1; /* not a deadlock */ if (!warned) { warned = 1; printf("error: max search depth too small\n"); if (bounded) uerror("depth limit reached"); (trpt-1)->tau |= 16; /* worstcase guess */ goto Up;AllOver:#if defined(FULLSTACK) && !defined(MA) /* if atomic or rv move, carry forward previous state */ trpt->ostate = (trpt-1)->ostate; if ((trpt->tau&4) || ((trpt-1)->tau&128)) if (boq == -1) { /* if not mid-rv */#ifndef SAFETY /* this check should now be redundant * because the seed state also appears * on the 1st dfs stack and would be * matched in hstore below */ if ((now._a_t&1) && depth > A_depth) { if (!memcmp((char *)&A_Root, (char *)&now, vsize)) depthfound = A_depth; printf("matches seed\n");#ifdef NP uerror("non-progress cycle"); uerror("acceptance cycle"); goto Up; printf("not seed\n"); if (!(trpt->tau&8)) /* if no atomic move */#ifdef CNTRSTACK II = bstore((char *)&now, vsize); trpt->j6 = j1; trpt->j7 = j2; JJ = LL[j1] && LL[j2];#ifdef FULLSTACK JJ = onstack_now(); JJ = II; /* worstcase guess for p.o. */ II = gstore((char *)&now, vsize, 0);#ifndef FULLSTACK JJ = II; JJ = (II == 2)?1:0; II = hstore((char *)&now, vsize); kk = (II == 1 || II == 2); if (!fairness && a_cycles) if (II == 2 && ((trpt->o_pm&2) || ((trpt-1)->o_pm&2))) { II = 3; /* Schwoon & Esparza 2005, Gastin&Moro 2004 */ printf("state match on dfs stack\n"); goto same_case; if (!JJ && (now._a_t&1) && depth > A_depth) { int oj1 = j1; uchar o_a_t = now._a_t; now._a_t &= ~(1|16|32); if (onstack_now()) { II = 3; printf("state match on 1st dfs stack\n"); now._a_t = o_a_t; j1 = oj1; if (II == 3 && a_cycles && (now._a_t&1)) if (fairness && now._cnt[1] > 1) /* was != 0 */ { printf(" fairness count non-zero\n"); II = 0; } else#ifndef BITSTATE nShadow--;same_case: if (Lstate) depthfound = Lstate->D; uerror("non-progress cycle"); uerror("acceptance cycle"); goto Up; } if ((II && JJ) || (II == 3)) { /* marker for liveness proviso */ (trpt-1)->tau |= 16; truncs2++; if (!II || !JJ) { /* successor outside stack */ (trpt-1)->tau |= 64; if (II) if (!kk) if ((unsigned long) nstates%%1000000 == 0) snapshot(); if (vprefix > 0) if (write(svfd, (uchar *) &now, vprefix) != vprefix) { fprintf(efd, "writing %%s.svd failed\n", Source); wrapup();#if defined(MA) && defined(W_XPT) if ((unsigned long) nstates%%W_XPT == 0) { void w_xpoint(void); w_xpoint();#if defined(FULLSTACK) || defined(CNTRSTACK) onstack_put();#ifdef DEBUG2 printf("%%d: putting %%u (%%d)\n", depth, trpt->ostate, (trpt->ostate)?trpt->ostate->tagged:0); printf("%%d: putting\n", depth); if (depth > mreached) mreached = depth; if (trpt->tau&4) trpt->tau &= ~(1|2); /* timeout and -request off */ _n = 0; (trpt+1)->o_n = 0; if (now._nr_pr == 0) /* claim terminated */ uerror("end state in claim reached"); check_claim(((P0 *)pptr(0))->_p);Stutter: if (trpt->tau&4) /* must make a claimmove */ if ((now._a_t&2) /* A-bit set */ && now._cnt[now._a_t&1] == 1) { now._a_t &= ~2; now._cnt[now._a_t&1] = 0; trpt->o_pm |= 16; printf("%%3d: fairness Rule 3.: _a_t = %%d\n", depth, now._a_t); II = 0; /* never */ goto Veri0; /* Look for a process with only safe transitions */ /* (special rules apply in the 2nd dfs) */#ifdef SAFETY if (boq == -1 && From != To)/* implied: #ifdef FULLSTACK */ if (boq == -1 && From != To && (!(now._a_t&1) || (a_cycles && !((trpt-1)->proviso)) !(trpt->proviso)) (trpt-1)->ostate && !(((char *)&((trpt-1)->ostate->state))[0] & 128)) !(((char *)&(trpt->ostate->state))[0] & 128)) (trpt-1)->ostate && (trpt-1)->ostate->proviso == 0) trpt->ostate->proviso == 0) ))/* #endif */ for (II = From; II >= To; II -= 1)Resume: /* pick up here if preselect fails */ tt = (int) ((P0 *)this)->_p; ot = (uchar) ((P0 *)this)->_t; if (trans[ot][tt]->atom & 8) { t = trans[ot][tt]; if (t->qu[0] != 0) { Ccheck++; if (!q_cond(II, t)) Cholds++; From = To = II;#ifdef NIBIS t->om = 0; trpt->tau |= 32; /* preselect marker */ printf("%%3d: proc %%d Pre", depth, II); printf("Selected (om=%%d, tau=%%d)\n", t->om, trpt->tau); printf("%%3d: proc %%d PreSelected (tau=%%d)\n", depth, II, trpt->tau); goto Again; trpt->tau &= ~32;#if !defined(NOREDUCE) || (defined(ETIM) && !defined(VERI))Again: /* The Main Expansion Loop over Processes */ trpt->o_pm &= ~(8|16|32|64); /* fairness-marks */ if (fairness && boq == -1 && (!(trpt->tau&4) && !((trpt-1)->tau&128)) && !(trpt->tau&8)) { /* A_bit = 1; Cnt = N in acc states with A_bit 0 */ if (!(now._a_t&2)) if (a_cycles && (trpt->o_pm&2)) { /* Accepting state */ now._a_t |= 2; now._cnt[now._a_t&1] = now._nr_pr + 1; trpt->o_pm |= 8; printf("%%3d: fairness Rule 1: cnt=%%d, _a_t=%%d\n", depth, now._cnt[now._a_t&1], now._a_t); { /* A_bit = 0 when Cnt 0 */ if (now._cnt[now._a_t&1] == 1) { now._a_t &= ~2; now._cnt[now._a_t&1] = 0; trpt->o_pm |= 16; printf("%%3d: fairness Rule 3: _a_t = %%d\n", /* no rendezvous with same proc */ if (boq != -1 && trpt->pr == II) continue;Veri0: /* don't repeat a previous preselected expansion */ /* could hit this if reduction proviso was false */ t = trans[ot][tt]; if (!(trpt->tau&4) && !(trpt->tau&1) && !(trpt->tau&32) && (t->atom & 8) && boq == -1 && From != To) { if (t->qu[0] == 0 || q_cond(II, t)) { _m = t->om; if (_m>_n||(_n>3&&_m!=0)) _n=_m; continue; /* did it before */ trpt->o_pm &= ~1; /* no move in this pid yet */ (trpt+1)->o_event = now._event; /* Fairness: Cnt++ when Cnt == II */ trpt->o_pm &= ~64; /* didn't apply rule 2 */ if (fairness && !(trpt->o_pm&32) && (now._a_t&2) && now._cnt[now._a_t&1] == II+2) { now._cnt[now._a_t&1] -= 1; /* claim need not participate */ if (II == 1) now._cnt[now._a_t&1] = 1; printf("%%3d: proc %%d fairness ", depth, II); printf("Rule 2: --cnt to %%d (%%d)\n", now._cnt[now._a_t&1], now._a_t); trpt->o_pm |= (32|64); if (!provided(II, ot, tt, t)) continue; /* check all trans of proc II - escapes first */ trpt->e_state = 0; (trpt+1)->pr = (uchar) II; (trpt+1)->st = tt; for (ooi = eoi = 0, t = trans[ot][tt]; t; t = t->nxt, ooi++) if (strcmp(t->tp, "else") == 0) eoi++; if (eoi) printf("randomizer: suppressed, saw else\n"); { eoi = rand()%%ooi; printf("randomizer: skip %%d in %%d\n", eoi, ooi); if (eoi-- <= 0) break;DOMORE: for ( ; t && ooi > 0; t = t->nxt, ooi--) for (t = trans[ot][tt]; t; t = t->nxt) /* exploring all transitions from * a single escape state suffices */ if (trpt->e_state > 0 && trpt->e_state != t->e_trans) printf("skip 2nd escape %%d (did %%d before)\n", t->e_trans, trpt->e_state); (trpt+1)->o_t = t;#ifdef INLINEP999: /* jumps here when move succeeds */ if (!(_m = do_transit(t, II))) continue; if (boq == -1)#ifdef CTL /* for branching-time, can accept reduction only if */ /* the persistent set contains just 1 transition */ { if ((trpt->tau&32) && (trpt->o_pm&1)) trpt->tau |= 16; trpt->o_pm |= 1; /* we moved */ peg[t->forw]++;#if defined(VERBOSE) || defined(CHECK)#if defined(SVDUMP) printf("%%3d: proc %%d exec %%d \n", depth, II, t->t_id); printf("%%3d: proc %%d exec %%d, ", depth, II, t->forw); printf("%%d to %%d, %%s %%s %%s", tt, t->st, t->tp, (t->atom&2)?"atomic":"", (boq != -1)?"rendez-vous":""); if (t->e_trans) printf(" (escapes to state %%d)", t->st); printf(" %%saccepting [tau=%%d]\n", (trpt->o_pm&2)?"":"non-", trpt->tau); printf(" randomizer %%d\n", ooi);#ifdef HAS_LAST if (II != 0) now._last = II - BASE; trpt->e_state = t->e_trans; depth++; trpt++; trpt->pr = (uchar) II; trpt->st = tt; trpt->o_pm &= ~(2|4); if (t->st > 0) { ((P0 *)this)->_p = t->st;/* moved down reached[ot][t->st] = 1; */ if (a_cycles)#if (ACCEPT_LAB>0 && !defined(NP)) || (PROG_LAB>0 && defined(HAS_NP)) int ii;#define P__Q ((P0 *)pptr(ii))#if ACCEPT_LAB>0 /* state 1 of np_ claim is accepting */ if (((P0 *)pptr(0))->_p == 1) trpt->o_pm |= 2; for (ii = 0; ii < (int) now._nr_pr; ii++) { if (accpstate[P__Q->_t][P__Q->_p]) { trpt->o_pm |= 2; } }#if defined(HAS_NP) && PROG_LAB>0 { if (progstate[P__Q->_t][P__Q->_p]) { trpt->o_pm |= 4;#undef P__Q trpt->o_t = t; trpt->o_n = _n; trpt->o_ot = ot; trpt->o_tt = tt; trpt->o_To = To; trpt->o_m = _m; trpt->tau = 0; trpt->oo_i = ooi; if (boq != -1 || (t->atom&2)) { trpt->tau |= 8; /* atomic sequence in claim */ if((trpt-1)->tau&4) trpt->tau |= 4; trpt->tau &= ~4; { if ((trpt-1)->tau&4) /* if claim allowed timeout, so */ /* does the next program-step: */ if (((trpt-1)->tau&1) && !(trpt->tau&4)) trpt->tau |= 1; if (boq == -1 && (t->atom&2)) { From = To = II; nlinks++; { From = now._nr_pr-1; To = BASE; goto Down; /* pseudo-recursion */Up: printf("%%d: Up - %%s\n", depth, (trpt->tau&4)?"claim":"program"); if (depth <= 0) return; /* e.g., if first state is old, after a restart */ if (CNT1 > CNT2 && depth < hiwater - (HHH-DDD) + 2) trpt += DDD; disk2stack(); maxdepth -= DDD; hiwater -= DDD;if(verbose)printf("unzap %%d: %%d\n", CNT2, hiwater); if (trpt->o_pm&128) /* fairness alg */ { now._cnt[now._a_t&1] = trpt->bup.oval; _n = 1; trpt->o_pm &= ~128; depth--; trpt--; printf("%%3d: reversed fairness default move\n", depth); goto Q999; { int d; Trail *trl; now._last = 0; for (d = 1; d < depth; d++) { trl = getframe(depth-d); /* was (trpt-d) */ if (trl->pr != 0) { now._last = trl->pr - BASE; break; } } } now._last = (depth<1)?0:(trpt-1)->pr; now._event = trpt->o_event; if ((now._a_t&1) && depth <= A_depth) return; /* to checkcycles() */ t = trpt->o_t; _n = trpt->o_n; ot = trpt->o_ot; II = trpt->pr; tt = trpt->o_tt; this = pptr(II); To = trpt->o_To; _m = trpt->o_m; ooi = trpt->oo_i; _m = do_reverse(t, II, _m);R999: /* jumps here when done */ printf("%%3d: proc %%d ", depth, II); printf("reverses %%d, %%d to %%d,", t->forw, tt, t->st); printf(" %%s [abit=%%d,adepth=%%d,", t->tp, now._a_t, A_depth); printf("tau=%%d,%%d]\n", trpt->tau, (trpt-1)->tau); /* pass the proviso tags */ if ((trpt->tau&8) /* rv or atomic */ && (trpt->tau&16)) && (trpt->tau&64)) depth--; trpt--; (trans[ot][tt])->om = _m; /* head of list */ /* i.e., not set if rv fails */ if (_m)#if defined(VERI) && !defined(NP) if (II == 0 && verbose && !reached[ot][t->st]) { printf("depth %%d: Claim reached state %%d (line %%d)\n", depth, t->st, src_claim [t->st]); fflush(stdout); else trpt->e_state = 0; /* undo */ if (_m>_n||(_n>3&&_m!=0)) _n=_m; ((P0 *)this)->_p = tt; } /* all options */ if (!t && ooi > 0) printf("randomizer: continue for %%d more\n", ooi); goto DOMORE; else printf("randomizer: done\n"); /* Fairness: undo Rule 2 */ if ((trpt->o_pm&32) && (trpt->o_pm&64)) { if (trpt->o_pm&1) if (now._cnt[now._a_t&1] == 1) now._cnt[now._a_t&1] = 2; now._cnt[now._a_t&1] += 1; printf("undo Rule 2, cnt=%%d, _a_t=%%d\n", trpt->o_pm &= ~(32|64); { if (_n > 0) trpt->o_pm &= ~64; II = From+1; } } } if (II == 0) break; /* never claim */ } /* all processes */ /* Fairness: undo Rule 2 */ if (trpt->o_pm&32) /* remains if proc blocked */ if (now._cnt[now._a_t&1] == 1) now._cnt[now._a_t&1] = 2; now._cnt[now._a_t&1] += 1; printf("%%3d: proc -- fairness ", depth); trpt->o_pm &= ~32; && _n == 0 /* nobody moved */ && !(trpt->tau&4) /* in program move */ && !(trpt->tau&8) /* not an atomic one */#ifdef OTIM && ((trpt->tau&1) || endstate())#ifdef ETIM && (trpt->tau&1) /* already tried timeout */ /* see below */ && !((trpt->tau&32) && (_n == 0 || (trpt->tau&16))) && now._cnt[now._a_t&1] > 0) /* needed more procs */ { depth++; trpt++; trpt->o_pm |= 128 | ((trpt-1)->o_pm&(2|4)); trpt->bup.oval = now._cnt[now._a_t&1]; now._cnt[now._a_t&1] = 1; trpt->tau = 4; trpt->tau = 0; From = now._nr_pr-1; To = BASE; printf("%%3d: fairness default move ", depth); printf("(all procs block)\n"); goto Down;Q999: /* returns here with _n>0 when done */; if (trpt->o_pm&8) { now._a_t &= ~2; now._cnt[now._a_t&1] = 0; trpt->o_pm &= ~8; printf("%%3d: fairness undo Rule 1, _a_t=%%d\n", depth, now._a_t); if (trpt->o_pm&16) { now._a_t |= 2; trpt->o_pm &= ~16; printf("%%3d: fairness undo Rule 3, _a_t=%%d\n", /* preselected move - no successors outside stack */ if ((trpt->tau&32) && !(trpt->tau&64)) { From = now._nr_pr-1; To = BASE; printf("%%3d: proc %%d UnSelected (_n=%%d, tau=%%d)\n", depth, II+1, _n, trpt->tau); _n = 0; trpt->tau &= ~(16|32|64); if (II >= BASE) /* II already decremented */ goto Resume; else /* at least one move that was preselected at this */ /* level, blocked or truncated at the next level */ if ((trpt->tau&32) && (_n == 0 || (trpt->tau&16))) depth, II+1, (int) _n, trpt->tau); if (a_cycles && (trpt->tau&16)) { if (!(now._a_t&1)) printf("%%3d: setting proviso bit\n", depth); (trpt-1)->proviso = 1; trpt->proviso = 1; if ((trpt-1)->ostate) ((char *)&((trpt-1)->ostate->state))[0] |= 128; ((char *)&(trpt->ostate->state))[0] |= 128; (trpt-1)->ostate->proviso = 1; trpt->ostate->proviso = 1; From = now._nr_pr-1; To = BASE; _n = 0; trpt->tau &= ~(16|32|64); goto Again; /* do full search */ } /* else accept reduction */ _n = 0; trpt->tau &= ~(16|32|64); if (II >= BASE) /* already decremented */ goto Resume; goto Again; if (_n == 0 || ((trpt->tau&4) && (trpt->tau&2))) printf("%%3d: no move [II=%%d, tau=%%d, boq=%%d]\n", depth, II, trpt->tau, boq); /* ok if a rendez-vous fails: */ if (boq != -1) goto Done; /* ok if no procs or we're at maxdepth */ if ((now._nr_pr == 0 && (!strict || qs_empty())) || endstate() || depth >= maxdepth-1) goto Done; if ((trpt->tau&8) && !(trpt->tau&4)) { trpt->tau &= ~(1|8); /* 1=timeout, 8=atomic */ From = now._nr_pr-1; To = BASE; printf("%%3d: atomic step proc %%d ", depth, II+1); printf("unexecutable\n"); trpt->tau |= 4; /* switch to claim */ goto AllOver; if (!(trpt->tau&1)) /* didn't try timeout yet */ if (trpt->tau&4)#ifndef NTIM if (trpt->tau&2) /* requested */ { trpt->tau |= 1; trpt->tau &= ~2; goto Stutter; { /* only claim can enable timeout */ if ((trpt->tau&8) && !((trpt-1)->tau&4))/* blocks inside an atomic */ goto BreakOut; printf("%%d: req timeout\n", depth); (trpt-1)->tau |= 2; /* request */ printf("%%d: timeout\n", depth); trpt->tau |= 1;BreakOut:#ifndef NOSTUTTER if (!(trpt->tau&4)) { trpt->tau |= 4; /* claim stuttering */ trpt->tau |= 128; /* stutter mark */ printf("%%d: claim stutter\n", depth); goto Stutter; ; if (!noends && !a_cycles && !endstate()) { depth--; trpt--; /* new 4.2.3 */ uerror("invalid end state"); else if (a_cycles && (trpt->o_pm&2)) /* new 4.2.4 */ { depth--; trpt--; uerror("accept stutter");Done: if (!(trpt->tau&8)) /* not in atomic seqs */ if (_n != 0 /* --after-- a program-step, i.e., */ /* after backtracking a claim-step */ && (trpt->tau&4) /* with at least one running process */ /* unless in a stuttered accept state */ && ((now._nr_pr > 1) || (trpt->o_pm&2)) && !(now._a_t&1)) if (fairness) printf("Consider check %%d %%d...\n", now._a_t, now._cnt[0]); if ((now._a_t&2) /* A-bit */ && (now._cnt[0] == 1)) checkcycles(); checkcycles();#ifndef MA if (boq == -1 && (((trpt->tau&4) && !(trpt->tau&128)) || ( (trpt-1)->tau&128))) if (boq == -1) printf("%%d: zapping %%u (%%d)\n", depth, trpt->ostate, (trpt->ostate)?trpt->ostate->tagged:0); onstack_zap(); printf("%%d: zapping\n", depth); if (trpt->proviso) gstore((char *) &now, vsize, 1); if (depth > 0) goto Up;} void new_state(void) { /* place holder */ }assert(int a, char *s, int ii, int tt, Trans *t) if (!a && !noasserts) { char bad[1024]; strcpy(bad, "assertion violated "); if (strlen(s) > 1000) { strncpy(&bad[19], (const char *) s, 1000); bad[1019] = '\0'; strcpy(&bad[19], s); uerror(bad);#ifndef NOBOUNDCHECKBoundcheck(int x, int y, int a1, int a2, Trans *a3) assert((x >= 0 && x < y), "- invalid array index", a1, a2, a3); return x;wrap_stats(void) if (nShadow>0) printf("%%8g states, stored (%%g visited)\n", nstates - nShadow, nstates); printf("%%8g states, stored\n", nstates); printf(" %%8g nominal states (- rv and atomic)\n", nstates-midrv-nlinks+revrv); printf(" %%8g rvs succeeded\n", midrv-failedrv); printf(" %%8g nominal states (stored-atomic)\n", nstates-nlinks); printf(" %%8g midrv\n", midrv); printf(" %%8g failedrv\n", failedrv); printf(" %%8g revrv\n", revrv); printf("%%8g states, matched\n", truncs); printf("%%8g matches within stack\n",truncs2); printf("%%8g transitions (= visited+matched)\n", nstates+truncs); printf("%%8g transitions (= stored+matched)\n", printf("%%8g atomic steps\n", nlinks); if (nlost) printf("%%g lost messages\n", (double) nlost); printf("hash conflicts: %%g (resolved)\n", hcmp); printf("%%8g states allocated for dfs stack\n", ngrabs); printf("\nhash factor: %%4g (best if > 100.)\n\n", (double)(1<<(ssize-8)) / (double) nstates * 256.0); printf("bits set per state: %%u (-k%%u)\n", hfns, hfns);#if 0 printf("total bits available: %%8g (-M%%ld)\n", ((double) udmem) * 8.0, udmem/(1024L*1024L)); printf("total bits available: %%8g (-w%%d)\n", ((double) (1L << (ssize-4)) * 16.0), ssize);#ifdef COVEST /* this code requires compilation with -lm on some systems */ { double pow(double, double); double log(double); unsigned int best_k; double i, n = 30000.0L; double f, p, q, m, c, est = 0.0L, k = (double)hfns; c = (double) nstates / n; m = (double) (1<<(ssize-8)) * 256.0L / c; p = 1.0L - (k / m); q = 1.0L; for (i = 0.0L; i - est < n; i += 1.0L) { q *= p; est += pow(1.0L - q, k); f = m/i; est *= c; i *= c; /* account for loss from enhanced double hashing */ if (hfns > 2) est += i * pow(0.5, (double) ssize * 2.0); if (f < 1.134) best_k = 1; else if (f < 2.348) best_k = 2; else if (f < 3.644) best_k = 3; else best_k = (unsigned int) (pow(3.8L,1.0L/(f+4.2L))*f*.69315L + 0.99999999L); if (best_k != hfns && best_k > ssize) best_k = (unsigned int) 1.0 + ssize/log((double)best_k / (double)ssize + 3.0); if (best_k > 32) best_k = 1 + (unsigned int) (32.0/log((double)best_k/35.0)); if (est * (double) nstates < 1.0) { printf("prob. of omissions: negligible\n"); return; /* no hints needed */ if (best_k != hfns) { printf("hint: repeating the search with -k%%u ", best_k); printf("may increase accuracy\n"); { printf("hint: the current setting for -k (-k%%d) ", hfns); printf("is likely to be optimal for -w%%d\n", ssize); if (ssize < 32) { printf("hint: increasing -w above -w%%d ", ssize); printf("will increase accuracy (max is -w34)\n"); printf("(in xspin, increase Estimated State Space Size)\n");wrapup(void)#if defined(BITSTATE) || !defined(NOCOMP) double nr1, nr2, nr3 = 0.0, nr4, nr5 = 0.0;#if !defined(MA) && (defined(MEMCNT) || defined(MEMLIM)) int mverbose = 1; int mverbose = verbose; signal(SIGINT, SIG_DFL); printf("(%%s)\n", Version); if (!done) printf("Warning: Search not completed\n"); (void) unlink((const char *)stackfile); printf(" + Using Breadth-First Search\n"); printf(" + Partial Order Reduction\n");#ifdef COLLAPSE printf(" + Compression\n"); printf(" + Graph Encoding (-DMA=%%d)\n", MA);#ifdef R_XPT printf(" Restarted from checkpoint %%s.xpt\n", Source); printf(" + FullStack Matching\n"); printf(" + CntrStack Matching\n"); printf("\nBit statespace search for:\n");#ifdef HC printf("\nHash-Compact %%d search for:\n", HC); printf("\nFull statespace search for:\n"); printf(" notrace assertion +\n"); printf(" trace assertion +\n"); printf(" never claim +\n"); printf(" assertion violations "); if (noasserts) printf("- (disabled by -A flag)\n"); printf("+ (if within scope of claim)\n");#ifdef NOCLAIM printf(" never claim - (not selected)\n"); printf(" never claim - (none specified)\n"); printf("+\n"); printf(" non-progress cycles "); printf(" acceptance cycles "); if (a_cycles) printf("+ (fairness %%sabled)\n", fairness?"en":"dis"); else printf("- (not selected)\n"); printf(" cycle checks - (disabled by -DSAFETY)\n"); printf(" invalid end states - "); printf("(disabled by "); if (noends) printf("-E flag)\n\n"); printf("never claim)\n\n"); printf(" invalid end states "); printf("- (disabled by -E flag)\n\n"); printf("+\n\n"); printf("State-vector %%d byte, depth reached %%d", hmax, mreached); printf(", errors: %%d\n", errors); if (done) { extern void dfa_stats(void); if (maxgs+a_cycles+2 < MA) printf("MA stats: -DMA=%%d is sufficient\n", maxgs+a_cycles+2); dfa_stats(); wrap_stats(); printf("stackframes: %%d/%%d\n\n", smax, svmax); printf("stats: fa %%d, fh %%d, zh %%d, zn %%d - ", Fa, Fh, Zh, Zn); printf("check %%d holds %%d\n", Ccheck, Cholds); printf("stack stats: puts %%d, probes %%d, zaps %%d\n", PUT, PROBE, ZAPS); printf("\n"); nr1 = (nstates-nShadow)* (double)(hmax+sizeof(struct H_el)-sizeof(unsigned)); nr2 = 0.0; nr2 = (double) ((maxdepth+3)*sizeof(Trail));#if !defined(MA) || defined(COLLAPSE) nr3 = (double) (1L< 0.0) printf("%%-6.3f memory used for bit stack\n", nr5/1000000.); remainder = remainder - nr3 - nr5; printf("%%-6.3f actual memory usage for states", tmp_nr/1000000.); remainder = remainder - tmp_nr; printf(" ("); if (tmp_nr > 0.) { if (tmp_nr > nr1) printf("unsuccessful "); printf("compression: %%.2f%%%%)\n", (100.0*tmp_nr)/nr1); printf("less than 1k)\n"); { printf(" State-vector as stored = %%.0f byte", (tmp_nr)/(nstates-nShadow) - (double) (sizeof(struct H_el) - sizeof(unsigned))); printf(" + %%ld byte overhead\n", sizeof(struct H_el)-sizeof(unsigned)); printf("%%-6.3f memory used for hash table (-w%%d)\n", remainder = remainder - nr3; printf("%%-6.3f memory used for DFS stack (-m%%ld)\n", nr2/1000000., maxdepth); remainder = remainder - nr2; if (remainder - fragment > 0.0) printf("%%-6.3f other (proc and chan stacks)\n", (remainder-fragment)/1000000.); if (fragment > 0.0) printf("%%-6.3f memory lost to fragmentation\n", fragment/1000000.); printf("%%-6.3f total actual memory usage\n\n", memcnt/1000000.); printf("%%-6.3f memory usage (Mbyte)\n\n", printf("nr of templates: [ globals chans procs ]\n"); printf("collapse counts: [ "); { int i; for (i = 0; i < 256+2; i++) if (ncomps[i] != 0) printf("%%d ", ncomps[i]); printf("]\n"); if ((done || verbose) && !no_rck) do_reach(); { int i; printf("\nPeg Counts (transitions executed):\n"); for (i = 1; i < NTRANS; i++) { if (peg[i]) putpeg(i, peg[i]); } }#ifdef VAR_RANGES dumpranges(); if (vprefix > 0) close(svfd);stopped(int arg){ printf("Interrupted\n"); wrapup(); * based on Bob Jenkins hash-function from 1996 * see: http://www.burtleburtle.net/bob/#if defined(HASH64) || defined(WIN64)#define mix(a,b,c) \{ a -= b; a -= c; a ^= (c>>43); \ b -= c; b -= a; b ^= (a<<9); \ c -= a; c -= b; c ^= (b>>8); \ a -= b; a -= c; a ^= (c>>38); \ b -= c; b -= a; b ^= (a<<23); \ c -= a; c -= b; c ^= (b>>5); \ a -= b; a -= c; a ^= (c>>35); \ b -= c; b -= a; b ^= (a<<49); \ c -= a; c -= b; c ^= (b>>11); \ a -= b; a -= c; a ^= (c>>12); \ b -= c; b -= a; b ^= (a<<18); \ c -= a; c -= b; c ^= (b>>22); \{ a -= b; a -= c; a ^= (c>>13); \ b -= c; b -= a; b ^= (a<<8); \ c -= a; c -= b; c ^= (b>>13); \ b -= c; b -= a; b ^= (a<<16); \ a -= b; a -= c; a ^= (c>>3); \ b -= c; b -= a; b ^= (a<<10); \ c -= a; c -= b; c ^= (b>>15); \d_hash(uchar *Cp, int Om) /* double bit hash - Jenkins */{ unsigned long a = 0x9e3779b9, b, c = 0, len, length; unsigned long *k = (unsigned long *) Cp; length = len = (unsigned long) ((unsigned long) Om + WS-1)/WS; b = HASH_CONST[HASH_NR]; while (len >= 3) { a += k[0]; b += k[1]; c += k[2]; mix(a,b,c); k += 3; len -= 3; c += length; switch (len) { case 2: b += k[1]; case 1: a += k[0]; mix(a,b,c); j1 = c&nmask; j3 = a&7; j2 = b&nmask; j4 = (a>>3)&7; K1 = c; K2 = b;s_hash(uchar *cp, int om){ d_hash(cp, om); /* sets K1 and K2 */ if (S_Tab == H_tab) j1 = K1 %% omaxdepth; if (ssize < 8*WS) j1 = K1&mask; j1 = K1;#ifndef RANDSTORint *prerand;inirand(void) srand(123); /* fixed startpoint */ prerand = (int *) emalloc((omaxdepth+3)*sizeof(int)); for (i = 0; i < omaxdepth+3; i++) prerand[i] = rand();pan_rand(void){ if (!prerand) inirand(); return prerand[depth];main(int argc, char *argv[]){ void to_compile(void); efd = stderr; /* default */ bstore = bstore_reg; /* default */ while (argc > 1 && argv[1][0] == '-') { switch (argv[1][1]) { case 'a': fprintf(efd, "error: -a disabled"); usage(efd); break; case 'a': a_cycles = 1; break; case 'A': noasserts = 1; break; case 'b': bounded = 1; break; case 'c': upto = atoi(&argv[1][2]); break; case 'd': state_tables++; break; case 'e': every_error = 1; Nr_Trails = 1; break; case 'E': noends = 1; break; case 'F': if (strlen(argv[1]) > 2) stackfile = &argv[1][2]; break;#if !defined(SAFETY) && !defined(NOFAIR) case 'f': fairness = 1; break; case 'h': if (!argv[1][2]) usage(efd); else HASH_NR = atoi(&argv[1][2])%%33; break; case 'I': iterative = 2; every_error = 1; break; case 'i': iterative = 1; every_error = 1; break; case 'J': like_java = 1; break; /* Klaus Havelund */ case 'k': hfns = atoi(&argv[1][2]); break; case 'l': a_cycles = 1; break; case 'l': fprintf(efd, "error: -l disabled"); case 'M': udmem = atoi(&argv[1][2]); break; case 'G': udmem = atoi(&argv[1][2]); udmem *= 1024; break; case 'M': case 'G': fprintf(stderr, "-M and -G affect only -DBITSTATE\n"); case 'm': maxdepth = atoi(&argv[1][2]); break; case 'n': no_rck = 1; break; case 'p': vprefix = atoi(&argv[1][2]); break; case 'q': strict = 1; break; case 'r':samething: readtrail = 1; if (isdigit(argv[1][2])) whichtrail = atoi(&argv[1][2]); case 'P': readtrail = 1; onlyproc = atoi(&argv[1][2]); break; case 'C': coltrace = 1; goto samething; case 'g': gui = 1; goto samething; case 'S': silent = 1; break; case 'R': Nrun = atoi(&argv[1][2]); break; case 's': hfns = 1; break; case 'T': TMODE = 0444; break; case 't': if (argv[1][2]) tprefix = &argv[1][2]; break; case 'V': printf("Generated by %%s\n", Version); to_compile(); pan_exit(0); break; case 'v': verbose = 1; break; case 'w': ssize = atoi(&argv[1][2]); break; case 'Y': signoff = 1; break; case 'X': efd = stdout; break; default : fprintf(efd, "saw option -%%c\n", argv[1][1]); usage(efd); break; argc--; argv++; if (iterative && TMODE != 0666) { TMODE = 0666; fprintf(efd, "warning: -T ignored when -i or -I is used\n");#if defined(WIN32) || defined(WIN64) if (TMODE == 0666) TMODE = _S_IWRITE | _S_IREAD; TMODE = _S_IREAD;#ifdef OHASH fprintf(efd, "warning: -DOHASH no longer supported (directive ignored)\n");#ifdef JHASH fprintf(efd, "warning: -DJHASH no longer supported (directive ignored)\n");#ifdef HYBRID_HASH fprintf(efd, "warning: -DHYBRID_HASH no longer supported (directive ignored)\n");#ifdef NOCOVEST fprintf(efd, "warning: -DNOCOVEST no longer supported (directive ignored)\n");#ifdef BCOMP fprintf(efd, "warning: -DBCOMP no longer supported (directive ignored)\n"); if (hfns <= 0) { hfns = 1; fprintf(efd, "warning: using -k%%d as minimal usable value\n", hfns); omaxdepth = maxdepth; if (WS == 4 && ssize > 34) { ssize = 34; fprintf(efd, "warning: using -w%%d as max usable value\n", ssize); * -w35 would not work: 35-3 = 32 but 1^31 is the largest * power of 2 that can be represented in an unsigned long if (WS == 4 && ssize > 27) { ssize = 27; * for emalloc, the lookup table size multiplies by 4 for the pointers * the largest power of 2 that can be represented in a ulong is 1^31 * hence the largest number of lookup table slots is 31-4 = 27 hiwater = HHH = maxdepth-10; DDD = HHH/2; if (!stackfile) { stackfile = (char *) emalloc(strlen(Source)+4+1); sprintf(stackfile, "%%s._s_", Source); if (iterative) { fprintf(efd, "error: cannot use -i or -I with -DSC\n");#if (defined(R_XPT) || defined(W_XPT)) && !defined(MA) fprintf(efd, "error: -D?_XPT requires -DMA\n"); exit(1); if (iterative && a_cycles) fprintf(efd, "warning: -i or -I work for safety properties only\n");#if defined(SC) fprintf(efd, "error: -DBFS not compatible with -DSC\n");#if defined(HAS_LAST) fprintf(efd, "error: -DBFS not compatible with _last\n");#if defined(REACH) fprintf(efd, "warning: -DREACH redundant when -DBFS is used\n");#if defined(HAS_STACK) fprintf(efd, "error: cannot use UnMatched qualifier on c_track with BFS\n");#if defined(MERGED) && defined(PEG) fprintf(efd, "error: to allow -DPEG use: spin -o3 -a %%s\n", Source); fprintf(efd, " to turn off transition merge optimization\n"); pan_exit(1);#ifdef NOCOMP fprintf(efd, "error: cannot combine -DHC and -DNOCOMP\n"); fprintf(efd, "error: cannot combine -DHC and -DBITSTATE\n");#if defined(SAFETY) && defined(NP) fprintf(efd, "error: cannot combine -DNP and -DSAFETY\n"); fprintf(efd, "error: cannot combine -DMA and -DBITSTATE\n"); if (MA <= 0) { fprintf(efd, "usage: -DMA=N with N > 0 and < VECTORSZ\n");#if defined(BITSTATE) fprintf(efd, "error: cannot combine -DBITSTATE and -DCOLLAPSE\n");#if defined(NOCOMP) fprintf(efd, "error: cannot combine -DNOCOMP and -DCOLLAPSE\n"); if (maxdepth <= 0 || ssize <= 1) usage(efd);#if SYNC>0 && !defined(NOREDUCE) if (a_cycles && fairness) { fprintf(efd, "error: p.o. reduction not compatible with "); fprintf(efd, "fairness (-f) in models\n"); fprintf(efd, " with rendezvous operations: "); fprintf(efd, "recompile with -DNOREDUCE\n"); pan_exit(1);#if defined(REM_VARS) && !defined(NOREDUCE) { fprintf(efd, "warning: p.o. reduction not compatible with "); fprintf(efd, "remote varrefs (use -DNOREDUCE)\n");#if defined(NOCOMP) && !defined(BITSTATE) { fprintf(efd, "error: -DNOCOMP voids -l and -a\n");#ifdef MEMLIM memlim = (double) MEMLIM * (double) (1<<20); /* size in Mbyte */#ifdef MEMCNT#if MEMCNT<31 memlim = (double) (1< 1) HASH_NR = Nrun - 1; if (Nrun < 1 || Nrun > 32) { fprintf(efd, "error: invalid arg for -R\n"); usage(efd); if (fairness && !a_cycles) { fprintf(efd, "error: -f requires -a or -l\n");#if ACCEPT_LAB==0 { fprintf(efd, "error: no accept labels defined "); fprintf(efd, "in model (for option -a)\n"); { fprintf(efd, "warning: no explicit accept labels "); fprintf(efd, "defined in model (for -a)\n");#if !defined(NOREDUCE)#if defined(HAS_ENABLED) fprintf(efd, "error: reduced search precludes "); fprintf(efd, "use of 'enabled()'\n");#if defined(HAS_PCVALUE) fprintf(efd, "use of 'pcvalue()'\n");#if defined(HAS_BADELSE) fprintf(efd, "using 'else' combined with i/o stmnts\n"); fprintf(efd, "use of _last\n"); fprintf(efd, "warning: use of a rendezvous stmnts in the escape\n"); fprintf(efd, " of an unless clause, if present, could make p.o. reduction\n"); fprintf(efd, " invalid (use -DNOREDUCE to avoid this)\n"); fprintf(efd, " (this type of rv is also not compatible with -DBFS)\n");#if SYNC>0 && defined(BFS) fprintf(efd, "warning: use of rendezvous in BFS mode "); fprintf(efd, "does not preserve all invalid endstates\n");#if !defined(REACH) && !defined(BITSTATE) if (iterative != 0 && a_cycles == 0) fprintf(efd, "warning: -i and -I need -DREACH to work accurately\n");#if defined(BITSTATE) && defined(REACH) fprintf(efd, "warning: -DREACH voided by -DBITSTATE\n");#if defined(MA) && defined(REACH) fprintf(efd, "warning: -DREACH voided by -DMA\n");#if defined(FULLSTACK) && defined(CNTRSTACK) fprintf(efd, "error: cannot combine"); fprintf(efd, " -DFULLSTACK and -DCNTRSTACK\n");#if defined(VERI) if (!a_cycles && !state_tables) { fprintf(efd, "warning: never claim + accept labels "); fprintf(efd, "requires -a flag to fully verify\n"); if ( !readtrail { fprintf(efd, "warning: verification in BFS mode "); fprintf(efd, "is restricted to safety properties\n"); && !state_tables) { fprintf(efd, "hint: this search is more efficient "); fprintf(efd, "if pan.c is compiled -DSAFETY\n"); S_A = 0; { if (!fairness) S_A = 1; /* _a_t */ else /* _a_t and _cnt[NFAIR] */ S_A = (&(now._cnt[0]) - (uchar *) &now) + NFAIR - 2; /* -2 because first two uchars in now are masked */ signal(SIGINT, stopped); if (WS == 4 && ssize >= 32) { mask = 0xffffffff; switch (ssize) { case 34: nmask = (mask>>1); break; case 33: nmask = (mask>>2); break; default: nmask = (mask>>3); break; nmask = mask; } else if (WS == 8) { mask = ((1L<>3; } else if (WS != 4) { fprintf(stderr, "pan: wordsize %%ld not supported\n", WS); exit(1); } else /* WS == 4 and ssize < 32 */ nmask = (mask>>3); trail = (Trail *) emalloc(6*sizeof(Trail)); trail += 3; trail = (Trail *) emalloc((maxdepth+3)*sizeof(Trail)); trail++; /* protect trpt-1 refs at depth 0 */ { char nm[64]; sprintf(nm, "%%s.svd", Source); if ((svfd = creat(nm, 0666)) < 0) { fprintf(efd, "couldn't create %%s\n", nm); vprefix = 0;#if SYNC>0 && ASYNC==0 set_recvs(); run(); done = 1;usage(FILE *fd) fprintf(fd, "Valid Options are:\n"); fprintf(fd, " -a -> is disabled by -DNP "); fprintf(fd, "(-DNP compiles for -l only)\n"); fprintf(fd, " -a find acceptance cycles\n"); fprintf(fd, " -a,-l,-f -> are disabled by -DSAFETY\n"); fprintf(fd, " -A ignore assert() violations\n"); fprintf(fd, " -b consider it an error to exceed the depth-limit\n"); fprintf(fd, " -cN stop at Nth error "); fprintf(fd, "(defaults to -c1)\n"); fprintf(fd, " -d print state tables and stop\n"); fprintf(fd, " -e create trails for all errors\n"); fprintf(fd, " -E ignore invalid end states\n"); fprintf(fd, " -Ffile use 'file' to store disk-stack\n"); fprintf(fd, " -f add weak fairness (to -a or -l)\n"); fprintf(fd, " -hN use different hash-seed N:1..32\n"); fprintf(fd, " -i search for shortest path to error\n"); fprintf(fd, " -I like -i, but approximate and faster\n"); fprintf(fd, " -J reverse eval order of nested unlesses\n"); fprintf(fd, " -kN set N bits per state (defaults to 3)\n"); fprintf(fd, " -l find non-progress cycles\n"); fprintf(fd, " -l find non-progress cycles -> "); fprintf(fd, "disabled, requires "); fprintf(fd, "compilation with -DNP\n"); fprintf(fd, " -MN use N Megabytes for bitstate hash array\n"); fprintf(fd, " -GN use N Gigabytes for bitstate hash array\n"); fprintf(fd, " -mN max depth N steps (default=10k)\n"); fprintf(fd, " -n no listing of unreached states\n"); fprintf(fd, " -pN create svfile (save N bytes per state)\n"); fprintf(fd, " -q require empty chans in valid end states\n"); fprintf(fd, " -r read and execute trail - can add -v,-n,-PN,-g,-C\n"); fprintf(fd, " -rN read and execute N-th error trail\n"); fprintf(fd, " -C read and execute trail - columnated output (can add -v,-n)\n"); fprintf(fd, " -PN read and execute trail - restrict trail output to proc N\n"); fprintf(fd, " -g read and execute trail + msc gui support\n"); fprintf(fd, " -S silent replay: only user defined printfs show\n"); fprintf(fd, " -RN repeat run Nx with N "); fprintf(fd, "[1..32] independent hash functions\n"); fprintf(fd, " -s same as -k1 (single bit per state)\n"); fprintf(fd, " -T create trail files in read-only mode\n"); fprintf(fd, " -tsuf replace .trail with .suf on trailfiles\n"); fprintf(fd, " -V print SPIN version number\n"); fprintf(fd, " -v verbose -- filenames in unreached state listing\n"); fprintf(fd, " -wN hashtable of 2^N entries "); fprintf(fd, "(defaults to -w%%d)\n", ssize);Malloc(unsigned long n){ char *tmp;#if defined(MEMCNT) || defined(MEMLIM) if (memcnt+ (double) n > memlim) goto err;#if 1 tmp = (char *) malloc(n); if (!tmp) tmp = (char *) sbrk(n); if (tmp == (char *) -1L)err: printf("pan: out of memory\n"); printf(" %%g bytes used\n", memcnt); printf(" %%g bytes more needed\n", (double) n); printf(" %%g bytes limit\n", memlim); printf("hint: to reduce memory, recompile with\n"); printf(" -DMA=%%d # better/slower compression, or\n", hmax); printf(" -DBITSTATE # supertrace, approximation\n");#ifndef HC printf(" -DCOLLAPSE # good, fast compression, or\n"); printf(" -DHC # hash-compaction, approximation\n"); memcnt += (double) n; return tmp;#define CHUNK (100*VECTORSZ)emalloc(unsigned long n) /* never released or reallocated */ if (n == 0) return (char *) NULL; if (n&(sizeof(void *)-1)) /* for proper alignment */ n += sizeof(void *)-(n&(sizeof(void *)-1)); if ((unsigned long) left < n) { grow = (n < CHUNK) ? CHUNK : n; have = Malloc(grow); fragment += (double) left; left = grow; tmp = have; have += (long) n; left -= (long) n; memset(tmp, 0, n);Uerror(char *str){ /* always fatal */ uerror(str);#if defined(MA) && !defined(SAFETY)Unwind(void){ Trans *t; uchar ot, _m; int tt; short II; int i; uchar oat = now._a_t; now._a_t &= ~(1|16|32); memcpy((char *) &comp_now, (char *) &now, vsize); now._a_t = oat; trpt = getframe(depth); printf("%%d State: ", depth); for (i = 0; i < vsize; i++) printf("%%d%%s,", ((char *)&now)[i], Mask[i]?"*":""); if (trpt->o_pm&128) /* fairness alg */ { now._cnt[now._a_t&1] = trpt->bup.oval; depth--; trpt = getframe(depth); trpt--; goto Q999; { int d; Trail *trl; now._last = 0; for (d = 1; d < depth; d++) { trl = getframe(depth-d); /* was trl = (trpt-d); */ if (trl->pr != 0) { now._last = trl->pr - BASE; break; } } } now._last = (depth<1)?0:(trpt-1)->pr; now._event = trpt->o_event; if ((now._a_t&1) && depth <= A_depth) { now._a_t &= ~(1|16|32); if (fairness) now._a_t |= 2; /* ? */ A_depth = 0; goto CameFromHere; /* checkcycles() */ t = trpt->o_t; ot = trpt->o_ot; II = trpt->pr; tt = trpt->o_tt; this = pptr(II); _m = do_reverse(t, II, trpt->o_m); printf("%%3d: proc %%d ", depth, II); printf("reverses %%d, %%d to %%d,", t->forw, tt, t->st); printf(" %%s [abit=%%d,adepth=%%d,", t->tp, now._a_t, A_depth); printf("tau=%%d,%%d] \n", trpt->tau, (trpt-1)->tau); depth--; trpt--; /* reached[ot][t->st] = 1; 3.4.13 */ ((P0 *)this)->_p = tt; if ((trpt->o_pm&32)) if (now._cnt[now._a_t&1] == 0) now._cnt[now._a_t&1] = 1;Q999: now._a_t |= 2;CameFromHere: if (memcmp((char *) &now, (char *) &comp_now, vsize) == 0) return depth;static char unwinding;uerror(char *str){ static char laststr[256]; int is_cycle; if (unwinding) return; /* 1.4.2 */ if (strncmp(str, laststr, 254)) printf("pan: %%s (at depth %%ld)\n", str, (depthfound==-1)?depth:depthfound); strncpy(laststr, str, 254); errors++; if (readtrail) { wrap_trail(); return; } is_cycle = (strstr(str, " cycle") != (char *) 0); if (!is_cycle) if ((every_error != 0) || errors == upto) if (is_cycle) { int od = depth; unwinding = 1; depthfound = Unwind(); unwinding = 0; depth = od; if (depth > 1) trpt--; nuerror(str); if (depth > 1) trpt++; putrail(); if (strstr(str, " cycle")) { if (every_error) printf("sorry: MA writes 1 trail max\n"); wrapup(); /* no recovery from unwind */ { depth--; trpt--; /* undo */ if (iterative != 0 && maxdepth > 0) { maxdepth = (iterative == 1)?(depth-1):(depth/2); warned = 1; printf("pan: reducing search depth to %%ld\n", maxdepth); depthfound = -1;xrefsrc(int lno, S_F_MAP *mp, int M, int i){ Trans *T; int j, retval=1; for (T = trans[M][i]; T; T = T->nxt) if (T && T->tp) { if (strcmp(T->tp, ".(goto)") == 0 || strncmp(T->tp, "goto :", 6) == 0) return 1; /* not reported */ printf("\tline %%d", lno); for (j = 0; j < sizeof(mp); j++) if (i >= mp[j].from && i <= mp[j].upto) { printf(", \"%%s\"", mp[j].fnm); printf(", state %%d", i); if (strcmp(T->tp, "") != 0) { char *q; q = transmognify(T->tp); printf(", \"%%s\"", q?q:""); } else if (stopstate[M][i]) printf(", -end state-"); retval = 0; /* reported */ return retval;r_ck(uchar *which, int N, int M, short *src, S_F_MAP *mp){ int i, m=0; if (M == VERI && !verbose) return; printf("unreached in proctype %%s\n", procname[M]); for (i = 1; i < N; i++) if (which[i] == 0 && (mapstate[M][i] == 0 || which[mapstate[M][i]] == 0)) m += xrefsrc((int) src[i], mp, M, i); else m++; printf(" (%%d of %%d states)\n", N-1-m, N-1);putrail(void){ int fd; long i, j; Trail *trl;#if defined VERI || defined(MERGED) char snap[64]; fd = make_trail(); for (i = 1; i <= depth; i++) { if (i == depthfound+1) write(fd, "-1:-1:-1\n", 9); trl = getframe(i); if (!trl->o_t) continue; if (trl->o_pm&128) continue; sprintf(snap, "%%ld:%%d:%%d\n", i, trl->pr, trl->o_t->t_id); { printf("pan: error writing trailfile\n"); close(fd); wrapup();sv_save(void) /* push state vector onto save stack */{ if (!svtack->nxt) { svtack->nxt = (Svtack *) emalloc(sizeof(Svtack)); svtack->nxt->body = emalloc(vsize*sizeof(char)); svtack->nxt->lst = svtack; svtack->nxt->m_delta = vsize; svmax++; } else if (vsize > svtack->nxt->m_delta) { svtack->nxt->body = emalloc(vsize*sizeof(char)); svtack = svtack->nxt; svtack->o_boq = boq; svtack->o_delta = vsize; /* don't compress */ memcpy((char *)(svtack->body), (char *) &now, vsize); printf("%%d: sv_save\n", depth);sv_restor(void) /* pop state vector from save stack */ memcpy((char *)&now, svtack->body, svtack->o_delta); boq = svtack->o_boq;#ifdef HAS_STACK c_unstack((uchar *) &(svtack->c_stack[0])); c_revert((uchar *) &(now.c_state[0])); if (vsize != svtack->o_delta) Uerror("sv_restor"); if (!svtack->lst) Uerror("error: v_restor"); svtack = svtack->lst; printf(" sv_restor\n");p_restor(int h){ int i; char *z = (char *) &now; proc_offset[h] = stack->o_offset; proc_skip[h] = (uchar) stack->o_skip;#ifndef XUSAFE p_name[h] = stack->o_name; for (i = vsize + stack->o_skip; i > vsize; i--) Mask[i-1] = 1; /* align */ vsize += stack->o_skip; memcpy(z+vsize, stack->body, stack->o_delta); vsize += stack->o_delta;#ifndef NOVSZ now._vsz = vsize; for (i = 1; i <= Air[((P0 *)pptr(h))->_t]; i++) Mask[vsize - i] = 1; /* pad */ Mask[proc_offset[h]] = 1; /* _pid */ if (BASE > 0 && h > 0) ((P0 *)pptr(h))->_pid = h-BASE; ((P0 *)pptr(h))->_pid = h; i = stack->o_delqs; now._nr_pr += 1; if (!stack->lst) /* debugging */ Uerror("error: p_restor"); stack = stack->lst; this = pptr(h); while (i-- > 0) q_restor();q_restor(void){ char *z = (char *) &now; int k, k_end; q_offset[now._nr_qs] = stack->o_offset; q_skip[now._nr_qs] = (uchar) stack->o_skip; q_name[now._nr_qs] = stack->o_name; now._nr_qs += 1; k_end = stack->o_offset; k = k_end - stack->o_skip; if (q_zero(now._nr_qs)) k_end += stack->o_delta; for ( ; k < k_end; k++) Mask[k] = 1; Uerror("error: q_restor");typedef struct IntChunks { int *ptr; struct IntChunks *nxt;} IntChunks;IntChunks *filled_chunks[512];IntChunks *empty_chunks[512];int *grab_ints(int nr){ IntChunks *z; if (nr >= 512) Uerror("cannot happen grab_int"); if (filled_chunks[nr]) { z = filled_chunks[nr]; filled_chunks[nr] = filled_chunks[nr]->nxt; } else { z = (IntChunks *) emalloc(sizeof(IntChunks)); z->ptr = (int *) emalloc(nr * sizeof(int)); z->nxt = empty_chunks[nr]; empty_chunks[nr] = z; return z->ptr;ungrab_ints(int *p, int nr) if (!empty_chunks[nr]) Uerror("cannot happen ungrab_int"); z = empty_chunks[nr]; empty_chunks[nr] = empty_chunks[nr]->nxt; z->ptr = p; z->nxt = filled_chunks[nr]; filled_chunks[nr] = z;delproc(int sav, int h){ int d, i=0; int o_vsize = vsize; if (h+1 != (int) now._nr_pr) return 0; while (now._nr_qs && q_offset[now._nr_qs-1] > proc_offset[h]) { delq(sav); d = vsize - proc_offset[h]; if (sav) { if (!stack->nxt) { stack->nxt = (Stack *) emalloc(sizeof(Stack)); stack->nxt->body = emalloc(Maxbody*sizeof(char)); stack->nxt->lst = stack; smax++; stack = stack->nxt; stack->o_offset = proc_offset[h]; stack->o_skip = (int) proc_skip[h]; stack->o_skip = (short) proc_skip[h]; stack->o_name = p_name[h]; stack->o_delta = d; stack->o_delqs = i; memcpy(stack->body, (char *)pptr(h), d); vsize = proc_offset[h]; now._nr_pr = now._nr_pr - 1; memset((char *)pptr(h), 0, d); vsize -= (int) proc_skip[h]; for (i = vsize; i < o_vsize; i++) Mask[i] = 0; /* reset */delq(int sav){ int h = now._nr_qs - 1; int d = vsize - q_offset[now._nr_qs - 1]; int k, o_vsize = vsize; stack->o_offset = q_offset[h]; stack->o_skip = (int) q_skip[h]; stack->o_skip = (short) q_skip[h]; stack->o_name = q_name[h]; memcpy(stack->body, (char *)qptr(h), d); vsize = q_offset[h]; now._nr_qs = now._nr_qs - 1; memset((char *)qptr(h), 0, d); vsize -= (int) q_skip[h]; for (k = vsize; k < o_vsize; k++) Mask[k] = 0; /* reset */qs_empty(void) for (i = 0; i < (int) now._nr_qs; i++) { if (q_sz(i) > 0) return 0;endstate(void){ int i; P0 *ptr; for (i = BASE; i < (int) now._nr_pr; i++) { ptr = (P0 *) pptr(i); if (!stopstate[ptr->_t][ptr->_p]) if (strict) return qs_empty();#if defined(EVENT_TRACE) && !defined(OTIM) if (!stopstate[EVENT_TRACE][now._event] && !a_cycles) { printf("pan: event_trace not completed\n");checkcycles(void){ uchar o_a_t = now._a_t; uchar o_cnt = now._cnt[1]; struct H_el *sv = trpt->ostate; /* save */ uchar prov = trpt->proviso; /* save */ { int i; uchar *v = (uchar *) &now; printf(" set Seed state "); if (fairness) printf("(cnt = %%d:%%d, nrpr=%%d) ", now._cnt[0], now._cnt[1], now._nr_pr); /* for (i = 0; i < n; i++) printf("%%d,", v[i]); */ printf("\n"); printf("%%d: cycle check starts\n", depth); now._a_t |= (1|16|32); /* 1 = 2nd DFS; (16|32) to help hasher */ now._cnt[1] = now._cnt[0]; memcpy((char *)&A_Root, (char *)&now, vsize); A_depth = depthfound = depth; new_state(); /* start 2nd DFS */ now._a_t = o_a_t; now._cnt[1] = o_cnt; A_depth = 0; depthfound = -1; printf("%%d: cycle check returns\n", depth); trpt->ostate = sv; /* restore */ trpt->proviso = prov;#endif struct H_el *Free_list = (struct H_el *) 0;onstack_init(void) /* to store stack states in a bitstate search */{ S_Tab = (struct H_el **) emalloc(maxdepth*sizeof(struct H_el *));struct H_el *grab_state(int n){ struct H_el *v, *last = 0; if (H_tab == S_Tab) { for (v = Free_list; v && ((int) v->tagged >= n); v=v->nxt) { if ((int) v->tagged == n) { if (last) last->nxt = v->nxt;gotcha: Free_list = v->nxt; v->tagged = 0; v->nxt = 0; v->ln = 0; return v; Fh++; last=v; /* new: second try */ v = Free_list; if (v && ((int) v->tagged >= n)) goto gotcha; ngrabs++; return (struct H_el *) emalloc(sizeof(struct H_el)+n-sizeof(unsigned));#define grab_state(n) (struct H_el *) \ emalloc(sizeof(struct H_el)+n-sizeof(unsigned));unsigned longordinal(char *v, long n, short tp){ struct H_el *tmp, *ntmp; long m; struct H_el *olst = (struct H_el *) 0; s_hash((uchar *)v, n); tmp = H_tab[j1]; { tmp = grab_state(n); H_tab[j1] = tmp; for ( ;; olst = tmp, tmp = tmp->nxt) { m = memcmp(((char *)&(tmp->state)), v, n); if (n == tmp->ln) if (m == 0) goto done; if (m < 0)Insert: ntmp = grab_state(n); ntmp->nxt = tmp; if (!olst) H_tab[j1] = ntmp; olst->nxt = ntmp; tmp = ntmp; } else if (!tmp->nxt)Append: tmp->nxt = grab_state(n); tmp = tmp->nxt; if (n < tmp->ln) goto Insert; else if (!tmp->nxt) goto Append; m = ++ncomps[tp]; tmp->tagged = m; tmp->st_id = m; memcpy(((char *)&(tmp->state)), v, n); tmp->ln = n;done: return tmp->tagged; return tmp->st_id;compress(char *vin, int nin) /* collapse compression */{ char *w, *v = (char *) &comp_now; int i, j; unsigned long n; static char *x; static uchar nbytes[513]; /* 1 + 256 + 256 */ static unsigned short nbytelen; long col_q(int, char *); long col_p(int, char *); *v++ = now._a_t; if (fairness) for (i = 0; i < NFAIR; i++) *v++ = now._cnt[i]; nbytelen = 0;#ifndef JOINPROCS { n = col_p(i, (char *) 0);#ifdef NOFIX nbytes[nbytelen] = 0; nbytes[nbytelen] = 1; *v++ = ((P0 *) pptr(i))->_t; *v++ = n&255; if (n >= (1<<8)) { nbytes[nbytelen]++; *v++ = (n>>8)&255; if (n >= (1<<16)) *v++ = (n>>16)&255; if (n >= (1<<24)) *v++ = (n>>24)&255; nbytelen++; x = scratch; x += col_p(i, x); n = ordinal(scratch, x-scratch, 2); /* procs */ *v++ = n&255; nbytes[nbytelen] = 0; if (n >= (1<<8)) { nbytes[nbytelen]++; *v++ = (n>>8)&255; if (n >= (1<<16)) *v++ = (n>>16)&255; if (n >= (1<<24)) *v++ = (n>>24)&255; nbytelen++;#ifdef SEPQS { n = col_q(i, (char *) 0);#ifdef NOVSZ /* 3 = _a_t, _nr_pr, _nr_qs */ w = (char *) &now + 3 * sizeof(uchar); w += NFAIR;#if VECTORSZ<65536 w = (char *) &(now._vsz) + sizeof(unsigned short); w = (char *) &(now._vsz) + sizeof(unsigned long); *x++ = now._nr_pr; *x++ = now._nr_qs; if (now._nr_qs > 0 && qptr(0) < pptr(0)) n = qptr(0) - (uchar *) w; n = pptr(0) - (uchar *) w; j = w - (char *) &now; for (i = 0; i < (int) n; i++, w++) if (!Mask[j++]) *x++ = *w;#ifndef SEPQS x += col_q(i, x); x--; for (i = 0, j = 6; i < nbytelen; i++) { if (j == 6) { j = 0; *(++x) = 0; j += 2; *x |= (nbytes[i] << j); x++; for (j = 0; j < WS-1; j++) *x++ = 0; x -= j; j = 0; n = ordinal(scratch, x-scratch, 0); /* globals */ if (n >= (1<< 8)) { *v++ = (n>> 8)&255; j++; } if (n >= (1<<16)) { *v++ = (n>>16)&255; j++; } if (n >= (1<<24)) { *v++ = (n>>24)&255; j++; } *v++ = j; /* add last count as a byte */ for (i = 0; i < WS-1; i++) *v++ = 0; v -= i; printf("collapse %%d -> %%d\n", vsize, v - (char *)&comp_now); return v - (char *)&comp_now;#if !defined(NOCOMP)compress(char *vin, int n) /* default compression */ int delta = 0; s_hash((uchar *)vin, n); /* sets K1 and K2 */ if (S_A) { delta++; /* _a_t */ if (S_A > NFAIR) delta += NFAIR; /* _cnt[] */ memcpy((char *) &comp_now + delta, (char *) &K1, WS); delta += WS;#if HC>0 memcpy((char *) &comp_now + delta, (char *) &K2, HC); delta += HC; return delta; char *vv = vin; char *v = (char *) &comp_now; for (i = 0; i < n; i++, vv++) if (!Mask[i]) *v++ = *vv; printf("compress %%d -> %%d\n", n, v - (char *)&comp_now);#if defined(MA)#if !defined(onstack_now)int onstack_now(void) {}#if !defined(onstack_put)void onstack_put(void) {}#if !defined(onstack_zap)void onstack_zap(void) {}onstack_zap(void){ struct H_el *v, *w, *last = 0; struct H_el **tmp = H_tab; char *nv; int n, m; H_tab = S_Tab; nv = (char *) &comp_now; n = compress((char *)&now, vsize);#if defined(BITSTATE) && defined(LC) n = compact_stack((char *)&now, vsize); nv = (char *) &now; n = vsize;#if !defined(HC) && !(defined(BITSTATE) && defined(LC)) s_hash((uchar *)nv, n); H_tab = tmp; for (v = S_Tab[j1]; v; Zh++, last=v, v=v->nxt) { m = memcmp(&(v->state), nv, n); if (m == 0) goto Found; if (m < 0)/* NotFound: */ Uerror("stack out of wack - zap"); return;Found: ZAPS++; if (last) last->nxt = v->nxt; S_Tab[j1] = v->nxt; v->tagged = (unsigned) n;#if !defined(NOREDUCE) && !defined(SAFETY) v->proviso = 0; v->nxt = last = (struct H_el *) 0; for (w = Free_list; w; Fa++, last=w, w = w->nxt) { if ((int) w->tagged <= n) { if (last) { v->nxt = w; /* was: v->nxt = w->nxt; */ last->nxt = v; { v->nxt = Free_list; Free_list = v; if (!w->nxt) { w->nxt = v; Free_list = v;onstack_put(void){ struct H_el **tmp = H_tab; if (hstore((char *)&now, vsize) != 0) printf("pan: warning, double stack entry\n"); Uerror("cannot happen - unstack_put"); trpt->ostate = Lstate; PUT++;onstack_now(void){ struct H_el *tmp; struct H_el **tmp2 = H_tab; char *v; int n, m = 1; v = (char *) &comp_now; v = (char *) &now; H_tab = tmp2; for (tmp = S_Tab[j1]; tmp; Zn++, tmp = tmp->nxt) { m = memcmp(((char *)&(tmp->state)),v,n); if (m <= 0) { Lstate = (struct H_el *) tmp; PROBE++; return (m == 0);hinit(void) { void r_xpoint(void); r_xpoint(); dfa_init((unsigned short) (MA+a_cycles)); H_tab = (struct H_el **) emalloc((1L<= MA) { printf("pan: error, MA too small, recompile pan.c"); printf(" with -DMA=N with N>%%d\n", n); Uerror("aborting"); if (n > (int) maxgs) maxgs = (unsigned int) n; for (i = 0; i < n; i++) Info[i] = v[i]; for ( ; i < MA-1; i++) Info[i] = 0; Info[MA-1] = pbit; if (a_cycles) /* place _a_t at the end */ { Info[MA] = Info[0]; Info[0] = 0; } if (!dfa_store(Info)) { if (pbit == 0 && (now._a_t&1) && depth > A_depth) { Info[MA] &= ~(1|16|32); /* _a_t */ if (dfa_member(MA)) { Info[MA-1] = 4; /* off-stack bit */ nShadow++; if (!dfa_member(MA-1)) printf("intersected 1st dfs stack\n"); return 3; printf("new state\n"); return 0; /* new state */ if (pbit == 0) { Info[MA-1] = 1; /* proviso bit */ trpt->proviso = dfa_member(MA-1); Info[MA-1] = 4; /* off-stack bit */ if (dfa_member(MA-1)) { printf("old state\n"); return 1; /* off-stack */ } else { printf("on-stack\n"); return 2; /* on-stack */ printf("old state\n"); return 1; /* old state */compact_stack(char *vin, int n){ int delta = 0; delta++; /* room for state[0] |= 128 */ memcpy((char *) &comp_now + delta, (char *) &K2, WS); delta += WS; /* use all available bits */hstore(char *vin, int nin) /* hash table storage */{ struct H_el *tmp, *ntmp, *olst = (struct H_el *) 0; char *v; int n, m=0; uchar rem_a; { v = (char *) &comp_now; n = compact_stack(vin, nin); { v = vin; n = nin; v = vin; n = nin; #ifdef HC rem_a = now._a_t; now._a_t = 0; #endif now._a_t = rem_a; { v[0] = 0; /* _a_t */ for (m = 0; m < NFAIR; m++) v[m+1] = 0; /* _cnt[] */ m = 0; { tmp = grab_state(n); H_tab[j1] = tmp; { for (;; hcmp++, olst = tmp, tmp = tmp->nxt) { /* skip the _a_t and the _cnt bytes */ if (tmp->ln != 0) { if (!tmp->nxt) goto Append; m = memcmp(((char *)&(tmp->state)) + S_A, v + S_A, n - S_A); if (m == 0) {#define wasnew 0 int wasnew = 0; if (S_A) { if ((((char *)&(tmp->state))[0] & V_A) != V_A) { wasnew = 1; nShadow++; ((char *)&(tmp->state))[0] |= V_A; } if (S_A > NFAIR) { /* 0 <= now._cnt[now._a_t&1] < MAXPROC */ unsigned ci, bp; /* index, bit pos */ ci = (now._cnt[now._a_t&1] / 8); bp = (now._cnt[now._a_t&1] - 8*ci); if (now._a_t&1) /* use tail-bits in _cnt */ { ci = (NFAIR - 1) - ci; bp = 7 - bp; /* bp = 0..7 */ ci++; /* skip over _a_t */ bp = 1 << bp; /* the bit mask */ if ((((char *)&(tmp->state))[ci] & bp)==0) { if (!wasnew) { wasnew = 1; nShadow++; ((char *)&(tmp->state))[ci] |= bp; } /* else: wasnew == 0, i.e., old state */ if (wasnew) tmp->tagged |= V_A; if ((now._a_t&1) && (tmp->tagged&A_V) && depth > A_depth)intersect: printf("1st dfs-stack intersected on state %%d+\n", (int) tmp->st_id); return 3; printf(" New state %%d+\n", (int) tmp->st_id); dumpstate(1, (char *)&(tmp->state),n,tmp->tagged); if ((S_A)?(tmp->tagged&V_A):tmp->tagged) /* already on current dfs stack */ /* but may also be on 1st dfs stack */ && depth > A_depth && (!fairness || now._cnt[1] <= 1) ) goto intersect; printf(" Stack state %%d\n", (int) tmp->st_id); dumpstate(0, (char *)&(tmp->state),n,tmp->tagged); return 2; /* match on stack */ dumpstate(1, (char *)&(tmp->state), n, 0); printf(" Old state %%d\n", (int) tmp->st_id); dumpstate(0, (char *)&(tmp->state), n, 0);#ifdef REACH if (tmp->D > depth) { tmp->D = depth; printf(" ReVisiting (from smaller depth)\n"); nstates--;#if defined(BFS) && defined(Q_PROVISO) Lstate = (struct H_el *) tmp; return 1; /* match outside stack */ } else if (m < 0) { /* insert state before tmp */ ntmp = grab_state(n); ntmp->nxt = tmp; if (!olst) H_tab[j1] = ntmp; olst->nxt = ntmp; tmp = ntmp; } else if (!tmp->nxt) { /* append after tmp */Append: tmp->nxt = grab_state(n); tmp = tmp->nxt; } } tmp->st_id = (unsigned) nstates; printf(" Push state %%d\n", ((int) nstates) - 1); printf(" New state %%d\n", (int) nstates);#if !defined(SAFETY) || defined(REACH) tmp->D = depth; { v[0] = V_A; { unsigned ci, bp; /* as above */ if (now._a_t&1) v[1+ci] = 1 << bp; tmp->tagged = (S_A)?V_A:(depth+1); dumpstate(-1, v, n, tmp->tagged); Lstate = (struct H_el *) tmp; dumpstate(-1, v, n, 0);#include TRANSITIONSdo_reach(void)#if defined(BFS) && defined(REACH)#undef REACH#define BASE 1#define BASE 0typedef struct Trans { short atom; /* if &2 = atomic trans; if &8 local */ short escp[HAS_UNLESS]; /* lists the escape states */ short e_trans; /* if set, this is an escp-trans */ short tpe[2]; /* class of operation (for reduction) */ short qu[6]; /* for conditional selections: qid's */ uchar ty[6]; /* ditto: type's */ short om; /* completion status of preselects */ char *tp; /* src txt of statement */ int st; /* the nextstate */ int t_id; /* transition id, unique within proc */ int forw; /* index forward transition */ int back; /* index return transition */ struct Trans *nxt;} Trans; #define qptr(x) (((uchar *)&now)+(int)q_offset[x])#define pptr(x) (((uchar *)&now)+(int)proc_offset[x])extern uchar *Pptr(int);#define q_sz(x) (((Q0 *)qptr(x))->Qlen) #ifndef VECTORSZ#define VECTORSZ 1024 /* sv size in bytes */#ifndef CHECK#define CHECK#ifndef DEBUG#define DEBUG#define NOFAIR#ifdef NOREDUCE#define XUSAFE#if !defined(SAFETY) && !defined(MA)#define FULLSTACK#ifdef SAFETY && !defined(HASH64)#define CNTRSTACK#define NOCOMP#if !defined(LC) && defined(SC)#define LC#if defined(COLLAPSE2) || defined(COLLAPSE3) || defined(COLLAPSE4)/* accept the above for backward compatibility */#define COLLAPSE#undef HC#define HC4#ifdef HC0#define HC 0#ifdef HC1#define HC 1#ifdef HC2#define HC 2#ifdef HC3#define HC 3#ifdef HC4#define HC 4unsigned long ncomps[256+2];#define MAXQ 255#define MAXPROC 255#define WS sizeof(long) /* word size in bytes */typedef struct Stack { /* for queues and processes */ int o_delta; int o_offset; int o_skip; int o_delqs; short o_delta; short o_offset; short o_skip; short o_delqs; short o_boq; char *o_name; char *body; struct Stack *nxt; struct Stack *lst;} Stack; typedef struct Svtack { /* for complete state vector */ int m_delta; short o_delta; /* current size of frame */ short m_delta; /* maximum size of frame */ struct Svtack *nxt; struct Svtack *lst;} Svtack; Trans ***trans; /* 1 ptr per state per proctype */ #if defined(FULLSTACK) || defined(BFS)struct H_el *Lstate;int depthfound = -1; /* loop detection */int proc_offset[MAXPROC];int q_offset[MAXQ];short proc_offset[MAXPROC];short q_offset[MAXQ];uchar proc_skip[MAXPROC];uchar q_skip[MAXQ];unsigned long vsize; /* vector size in bytes */int vprefix=0, svfd; /* runtime option -pN */char *tprefix = "trail"; /* runtime option -tsuffix */short boq = -1; /* blocked_on_queue status */typedef struct State { uchar _nr_pr; uchar _nr_qs; uchar _a_t; /* cycle detection */ uchar _cnt[NFAIR]; /* counters, weak fairness */ unsigned short _vsz; unsigned long _vsz; uchar _last; /* pid executed in last step */#if nstates_event<256 uchar _event; unsigned short _event;){ int j, h = now._nr_pr; int k; uchar *o_this = this; if (TstOnly) return (h < MAXPROC);/* redefine Index only within this procedure */#undef Index#define Index(x, y) Boundcheck(x, y, 0, 0, 0) if (h >= MAXPROC) Uerror("too many processes"); switch (n) { case 0: j = sizeof(P0); break; default: Uerror("bad proc - addproc"); if (vsize%%WS) proc_skip[h] = WS-(vsize%%WS); proc_skip[h] = 0; for (k = vsize + (int) proc_skip[h]; k > vsize; k--) Mask[k-1] = 1; /* align */ vsize += (int) proc_skip[h]; proc_offset[h] = vsize; { int dummy = 0; write(svfd, (uchar *) &dummy, sizeof(int)); /* mark */ write(svfd, (uchar *) &h, sizeof(int)); write(svfd, (uchar *) &n, sizeof(int)); write(svfd, (uchar *) &proc_offset[h], sizeof(int)); write(svfd, (uchar *) &proc_offset[h], sizeof(short)); write(svfd, (uchar *) &now, vprefix-4*sizeof(int)); /* padd */ if (fairness && ((int) now._nr_pr + 1 >= (8*NFAIR)/2)) { printf("pan: error: too many processes -- current"); printf(" max is %%d procs (-DNFAIR=%%d)\n", (8*NFAIR)/2 - 2, NFAIR); printf("\trecompile with -DNFAIR=%%d\n", NFAIR+1); vsize += j; for (k = 1; k <= Air[n]; k++) Mask[vsize - k] = 1; /* pad */ Mask[vsize-j] = 1; /* _pid */ hmax = max(hmax, vsize); if (vsize >= VECTORSZ) { printf("pan: error, VECTORSZ too small, recompile pan.c"); printf(" with -DVECTORSZ=N with N>%%d\n", vsize); memset((char *)pptr(h), 0, j); ((P0 *)this)->_pid = h-BASE; ((P0 *)this)->_pid = h;addqueue(int n, int is_rv){ int j=0, i = now._nr_qs; if (i >= MAXQ) Uerror("too many queues"); default: Uerror("bad queue - addqueue"); q_skip[i] = WS-(vsize%%WS); q_skip[i] = 0; k = vsize; if (is_rv) k += j; for (k += (int) q_skip[i]; k > vsize; k--) Mask[k-1] = 1; vsize += (int) q_skip[i]; q_offset[i] = vsize; Uerror("VECTORSZ is too small, edit pan.h"); memset((char *)qptr(i), 0, j); ((Q0 *)qptr(i))->_t = n; return i+1;{ int j; uchar *z; #ifdef HAS_SORTED if (!into--) uerror("ref to uninitialized chan name (sending)"); if (into >= (int) now._nr_qs || into < 0) Uerror("qsend bad queue#"); z = qptr(into); j = ((Q0 *)qptr(into))->Qlen; switch (((Q0 *)qptr(into))->_t) { case 0: printf("queue %%d was deleted\n", into+1); default: Uerror("bad queue - qsend"); if (in_s_scope(into+1)) require('s', into);q_zero(int from){ if (!from--) { uerror("ref to uninitialized chan name (q_zero)"); switch(((Q0 *)qptr(from))->_t) { case 0: printf("queue %%d was deleted\n", from+1); Uerror("bad queue q-zero");not_RV(int from){ if (q_zero(from)) { printf("==>> a test of the contents of a rv "); printf("channel always returns FALSE\n"); uerror("error to poll rendezvous channel");setq_claim(int x, int m, char *s, int y, char *p){ if (x == 0) uerror("x[rs] claim on uninitialized channel"); if (x < 0 || x > MAXQ) Uerror("cannot happen setq_claim"); q_claim[x] |= m; p_name[y] = p; q_name[x] = s; if (m&2) q_S_check(x, y); if (m&1) q_R_check(x, y);short q_sender[MAXQ+1];q_S_check(int x, int who){ if (!q_sender[x]) { q_sender[x] = who+1; if (q_zero(x)) { printf("chan %%s (%%d), ", q_name[x], x-1); printf("sndr proc %%s (%%d)\n", p_name[who], who); uerror("xs chans cannot be used for rv"); if (q_sender[x] != who+1) { printf("pan: xs assertion violated: "); printf("access to chan <%%s> (%%d)\npan: by ", q_name[x], x-1); if (q_sender[x] > 0 && p_name[q_sender[x]-1]) printf("%%s (proc %%d) and by ", p_name[q_sender[x]-1], q_sender[x]-1); printf("%%s (proc %%d)\n", p_name[who], who); uerror("error, partial order reduction invalid");short q_recver[MAXQ+1];q_R_check(int x, int who){ if (!q_recver[x]) { q_recver[x] = who+1; printf("recv proc %%s (%%d)\n", uerror("xr chans cannot be used for rv"); if (q_recver[x] != who+1) { printf("pan: xr assertion violated: "); printf("access to chan %%s (%%d)\npan: ", if (q_recver[x] > 0 && p_name[q_recver[x]-1]) printf("by %%s (proc %%d) and ", p_name[q_recver[x]-1], q_recver[x]-1); printf("by %%s (proc %%d)\n",q_len(int x){ if (!x--) uerror("ref to uninitialized chan name (len)"); return ((Q0 *)qptr(x))->Qlen;q_full(int from) uerror("ref to uninitialized chan name (qfull)"); Uerror("bad queue - q_full");q_e_f(int from){ /* empty or full */ return !q_len(from) || q_full(from);#if NQS>0qrecv(int from, int slot, int fld, int done){ uchar *z; int j, k, r=0; if (!from--) uerror("ref to uninitialized chan name (receiving)"); if (from >= (int) now._nr_qs || from < 0) Uerror("qrecv bad queue#"); z = qptr(from); if (done && (in_r_scope(from+1))) require('r', from); switch (((Q0 *)qptr(from))->_t) { default: Uerror("bad queue - qrecv"); return r;longcol_q(int i, char *z){ int j=0, k; char *x, *y; Q0 *ptr = (Q0 *) qptr(i); switch (ptr->_t) {run(void){ /* int i; */ memset((char *)&now, 0, sizeof(State)); vsize = (unsigned long) (sizeof(State) - VECTORSZ);/* optional provisioning statements, e.g. to *//* set hidden variables, used as constants */#ifdef PROV#include PROV settable(); Maxbody = max(Maxbody, sizeof(P%d)); reached[%d] = reached%d; accpstate[%d] = (uchar *) emalloc(nstates%d); progstate[%d] = (uchar *) emalloc(nstates%d); stopstate[%d] = (uchar *) emalloc(nstates%d); visstate[%d] = (uchar *) emalloc(nstates%d); mapstate[%d] = (short *) emalloc(nstates%d * sizeof(short)); NrStates[%d] = nstates%d; stopstate[%d][endstate%d] = 1; retrans(%d, nstates%d, start%d, src_ln%d, reached%d); if (state_tables) { printf("\nTransition Type: "); printf("A=atomic; D=d_step; L=local; G=global\n"); printf("Source-State Labels: "); printf("p=progress; e=end; a=accept;\n"); printf("Note: statement merging was used. Only the first\n"); printf(" stmnt executed in each merge sequence is shown\n"); printf(" (use spin -a -o3 to disable statement merging)\n"); pan_exit(0);#define ACCEPT_LAB 1 /* at least 1 in np_ */#define ACCEPT_LAB %d /* user-defined accept labels */#define PROG_LAB %d /* progress labels */uchar *accpstate[%d];uchar *progstate[%d];uchar *reached[%d];uchar *stopstate[%d];uchar *visstate[%d];short *mapstate[%d];int NrStates[%d]; Maxbody = max(Maxbody, sizeof(Q%d)); r_ck(reached%d, nstates%d, %d, src_ln%d, src_file%d); case %d: j = sizeof(P%d); break; this = o_this; return h-BASE;#define Index(x, y) Boundcheck(x, y, II, tt, t)#if defined(BITSTATE) && defined(COLLAPSE)/* just to allow compilation, to generate the error */long col_p(int i, char *z) { return 0; }long col_q(int i, char *z) { return 0; }col_p(int i, char *z){ int j, k; unsigned long ordinal(char *, long, short); P0 *ptr = (P0 *) pptr(i); default: Uerror("bad proctype - collapse"); if (z) x = z; else x = scratch; y = (char *) ptr; k = proc_offset[i]; for ( ; j > 0; j--, y++) if (!Mask[k++]) *x++ = *y; x -= j; if (z) return (long) (x - z); return ordinal(scratch, x-scratch, (short) (2+ptr->_t)); default: Uerror("bad qtype - collapse"); y = (char *) ptr; k = q_offset[i]; /* no need to store the empty slots at the end */ j -= (q_max[ptr->_t] - ptr->Qlen) * ((j - 2)/q_max[ptr->_t]); return ordinal(scratch, x-scratch, 1); /* chan */ case %d: r = ((Q%d *)z)->contents[slot].fld%d; break;int unsend(int into){ int _m=0, j; uchar *z; uerror("ref to uninitialized chan (unsend)"); j = ((Q0 *)z)->Qlen; ((Q0 *)z)->Qlen = --j; default: Uerror("bad queue - unsend");unrecv(int from, int slot, int fld, int fldvar, int strt) uerror("ref to uninitialized chan (unrecv)"); if (strt) ((Q0 *)z)->Qlen = j+1;/** function prototypes **/char *emalloc(unsigned long);char *Malloc(unsigned long);int Boundcheck(int, int, int, int, Trans *);int addqueue(int, int);/* int atoi(char *); *//* int abort(void); */int close(int);int delproc(int, int);int endstate(void);int hstore(char *, int);int gstore(char *, int, uchar);int q_cond(short, Trans *);int q_full(int);int q_len(int);int q_zero(int);int qrecv(int, int, int, int);int unsend(int);/* void *sbrk(int); */void Uerror(char *);void assert(int, char *, int, int, Trans *);void c_chandump(int);void c_globals(void);void c_locals(int, int);void checkcycles(void);void crack(int, int, Trans *, short *);void d_hash(uchar *, int);void s_hash(uchar *, int);void r_hash(uchar *, int);void delq(int);void do_reach(void);void pan_exit(int);void exit(int);void hinit(void);void imed(Trans *, int, int, int);void new_state(void);void p_restor(int);void putpeg(int, int);void putrail(void);void q_restor(void);void retrans(int, int, int, short *, uchar *);void settable(void);void setq_claim(int, int, char *, int, char *);void sv_restor(void);void sv_save(void);void tagtable(int, int, int, short *, uchar *);void uerror(char *);void unrecv(int, int, int, int, int);void usage(FILE *);void wrap_stats(void);int onstack_now(void);void onstack_init(void);void onstack_put(void);void onstack_zap(void);int q_S_check(int, int);int q_R_check(int, int);uchar q_claim[MAXQ+1];char *q_name[MAXQ+1];char *p_name[MAXPROC+1];to_compile(void){ char ctd[1024], carg[64]; strcpy(ctd, "-DBITSTATE "); strcpy(ctd, ""); strcat(ctd, "-DNOVSZ "); sprintf(carg, "-DMEMLIM=%%d ", MEMLIM); strcat(ctd, carg); sprintf(carg, "-DMEMCNT=%%d ", MEMCNT); strcat(ctd, "-DNOCLAIM "); strcat(ctd, "-DSAFETY ");#ifdef NOFAIR strcat(ctd, "-DNOFAIR ");#ifdef NFAIR if (NFAIR != 2) { sprintf(carg, "-DNFAIR=%%d ", NFAIR); strcat(ctd, carg); strcat(ctd, "-DNOREDUCE ");#ifdef XUSAFE strcat(ctd, "-DXUSAFE "); strcat(ctd, "-DNP "); strcat(ctd, "-DPEG "); strcat(ctd, "-DVAR_RANGES "); strcat(ctd, "-DHC0 "); strcat(ctd, "-DHC1 "); strcat(ctd, "-DHC2 "); strcat(ctd, "-DHC3 "); strcat(ctd, "-DHC4 "); strcat(ctd, "-DCHECK "); strcat(ctd, "-DCTL "); strcat(ctd, "-DNIBIS ");#ifdef NOBOUNDCHECK strcat(ctd, "-DNOBOUNDCHECK ");#ifdef NOSTUTTER strcat(ctd, "-DNOSTUTTER "); strcat(ctd, "-DREACH "); strcat(ctd, "-DPRINTF "); strcat(ctd, "-DOTIM "); strcat(ctd, "-DCOLLAPSE "); sprintf(carg, "-DMA=%%d ", MA); strcat(ctd, "-DSVDUMP ");#ifdef VECTORSZ if (VECTORSZ != 1024) { sprintf(carg, "-DVECTORSZ=%%d ", VECTORSZ); strcat(ctd, "-DVERBOSE "); strcat(ctd, "-DSDUMP "); strcat(ctd, "-DCOVEST "); printf("Compiled as: cc -o pan %%span.c\n", ctd); "%s", #define SYNC %d #define ASYNC %d short Air[] = { ,%s (short) Air%d, (short) Air%d }; char *procname[] = { ":np_:", }; np_ uchar sv[VECTORSZ]; } State; #define HAS_TRACK %d int addproc(int n, int par%d int provided(int II, unsigned char ot, int tt, Trans *t) { switch(ot) { default: return 1; /* e.g., a claim */ } return 0; } if (state_tables) ini_claim(%d, 0); iniglobals(); } void iniglobals(void) { #ifdef VAR_RANGES logval(" Maxbody = max(Maxbody, sizeof(State)-VECTORSZ); } endstopstateprogressprogstateacceptaccpstate %s[%d][%d] = 1; %s label inside d_step%s label inside atomic-spin: %3d:%s, warning, %s - is invisible visstate[%d][%d] = 1; spin: warning, line %3d %s, proctype %s:global '%s %s' could be declared 'bit %s' '%s %s' could be declared 'byte %s' ((P%d *)pptr(h))->; = %s%s:", ((P%d *)pptr(h))->:never:error: %s defines local %s void c_chandump(int unused) { unused = unused++; /* avoid complaints */ } void c_chandump(int from) { uchar *z; int slot; from--; if (from >= (int) now._nr_qs || from < 0) { printf("pan: bad qid %%d\n", from+1); return; } z = qptr(from); switch (((Q0 *)z)->_t) { case %d: ((Q%d *)z)->for (slot = 0; slot < %sQlen; slot++) { printf(" ["); printm(%scontents[slot].fld%d); printf("%%d,", %scontents[slot].fld%d); printf("],"); } break; printf("\n"); } printf(" (struct %s)\n"); %s%s. printf(" %s %s: %%d\n", %s%s); { int l_in; for (l_in = 0; l_in < %d; l_in++) { printf(" %s %s[%%d]: %%d\n", l_in, %s%s[l_in]); } printf(" chan %s (=%%d): len %%d:\t", %s%s, q_len(%s%s)); c_chandump(%s%s); printf(" chan %s[%d] (=%%d): len %%d:\t", %s%s[%d], q_len(%s%s[%d])); c_chandump(%s%s[%d]); :trace::notrace:((P%d *)pptr(pid))->void c_globals(void) { /* int i; */ printf("global vars:\n"); now.void c_locals(int pid, int tp) { /* int i; */ switch(tp) { case %d: printf("local vars proc %%d (%s):\n", pid); /* none */ break; } } void printm(int x) { switch (x) { case %d: Printf("%s"); break; default: Printf("%%d", x); ); ", now.cannot hide non-globals (%s)cannot hide channels (%s)/* hidden variable: */int _; /* a predefined write-only variable */ %s%s%s%s%s%s %s%s%s[%d]%s%s%s[%d] %s%s%s[l_in]%s%s%s[l_in]addqueue(%d, %d)%d:init:#define Pinit ((P%d *)this) _:never_template:_#define P%s ((P%d *)this) typedef struct P%d { /* %s */ unsigned _pid : 8; /* 0..255 */ unsigned _t : %d; /* proctype */ unsigned _p : %d; /* state */ } P%d; #define Air%d 0 #define Air%d (sizeof(P%d) - Offsetof(P%d, %s) - %d*sizeof(uchar)short)int)cannot happen Air %s) #define _NP_ %d uchar reached%d[3]; /* np_ */ #define nstates%d 3 /* np_ */ #define endstate%d 2 /* np_ */ #define start%d 0 /* np_ */ case %d: /* np_ */ ini_claim(%d, h); ((P%d *)pptr(h))->_t = %d; ((P%d *)pptr(h))->_p = 0; reached%d[0] = 1; accpstate[%d][1] = 1; case %d: /* %s */ #define start%d %d #define start_claim %d #define start_event %d ((P%d *)pptr(h))->_p = %d; reached%d[%d]=1; case %d: /* %s */ if () return 1; /* params: */ array in parameter list, %s ((P%d *)pptr(h))->hidden array in parameter %s = par%d; /* locals: */ #ifdef HAS_CODE locinit%d(h); confusing control structure uchar %s; unsigned %s : %d unsigned %s : 1spin: warning: bit-array %s[%d] mapped to byte-array uchar %s short %s int %sundeclared structure element %s struct %s %svariable %s undeclared[%d]ushortuint Qlen; /* q_size */ #define NQS 1 /* nqs=%d, but has_io */ #define NQS %d short q_flds[%d]; short q_max[%d]; case %d: j = sizeof(Q%d); q_flds[%d] = %d; q_max[%d] = %d; break; typedef struct Q%d { uchar _t; /* q_type */ struct { unsigned fld%d : 1; uchar fld%d; short fld%d; int fld%d; bad channel spec } contents[%d]; } Q%d; typedef struct Q0 { /* generic q */ uchar _t; } Q0; int Q_has(int, int, intint Q_has(int into, int want%d, int fld%d{ int i; if (!into--) uerror("ref to unknown chan (recv-poll)"); if (into >= now._nr_qs || into < 0) Uerror("qrecv bad queue#"); for (i = 0; i < ((Q0 *)qptr(into))->Qlen; i++) { if (want%d && qrecv(into+1, i, %d, 0) != fld%d) continue; return i+1; return 0; #if NQS>0 void qsend(int into, int sorted, int fld%d /* =rv= */ case %d:%s (trpt+2)->o_m = 0; if (!sorted) goto append%d; for (j = 0; j < %sQlen; j++) { /* find insertion point */ ((Q%d *)z)->contents[j].fld if (fld%d > %s%d) continue; if (fld%d < %s%d) goto found%d; found%d: for (k = %sQlen - 1; k >= j; k--) { /* shift up */ %scontents[k+1].fld%d = %scontents[k].fld%d; append%d: /* insert in slot j */ #ifdef HAS_SORTED (trpt+1)->ipt = j; %sQlen = %sQlen + 1; %s%d = fld%d; case %d: return %d; case %d: return (q_sz(from) == %d); case %d:%s if (fld == 0) r = %scontents[slot].fld0; switch (fld) { default: Uerror("too many fields in recv"); if (done) { j = %sQlen - 1; %sQlen = 0; ((Q%d *)z)->contents { j = %sQlen; %sQlen = --j; for (k=slot; k#include #include #include #include #include #include #if defined(WIN32) || defined(WIN64)#include #else#include #include #include #include #include #define Offsetof(X, Y) ((unsigned long)(&(((X *)0)->Y)))#ifndef max#define max(a,b) (((a)<(b)) ? (b) : (a))#ifndef PRINTFint Printf(const char *fmt, ...); /* prototype only */#ifdef CNTRSTACK#define onstack_now() (LL[trpt->j6] && LL[trpt->j7])#define onstack_put() LL[trpt->j6]++; LL[trpt->j7]++#define onstack_zap() LL[trpt->j6]--; LL[trpt->j7]--#if !defined(SAFETY) && !defined(NOCOMP)#define V_A (((now._a_t&1)?2:1) << (now._a_t&2))#define A_V (((now._a_t&1)?1:2) << (now._a_t&2))int S_A = 0;#define V_A 0#define A_V 0#define S_A 0#ifdef MA#undef onstack_now#undef onstack_put#undef onstack_zap#define onstack_put() ;#define onstack_zap() gstore((char *) &now, vsize, 4)#if defined(FULLSTACK) && !defined(BITSTATE)#define onstack_put() trpt->ostate = Lstate#define onstack_zap() { \ if (trpt->ostate) \ trpt->ostate->tagged = \ (S_A)? (trpt->ostate->tagged&~V_A) : 0; \ }struct H_el { struct H_el *nxt;#ifdef FULLSTACK unsigned int tagged;#if defined(BITSTATE) && !defined(NOREDUCE) && !defined(SAFETY) unsigned int proviso;#if defined(CHECK) || (defined(COLLAPSE) && !defined(FULLSTACK)) unsigned long st_id;#ifdef COLLAPSE#if VECTORSZ<65536 unsigned short ln; unsigned long ln;#if !defined(SAFETY) || defined(REACH) unsigned int D; unsigned state;} **H_tab, **S_Tab; typedef struct Trail { int st; /* current state */ uchar pr; /* process id */ uchar tau; /* 8 bit-flags */ uchar o_pm; /* 8 more bit-flags */#if 0 Meaning of bit-flags: tau&1 -> timeout enabled tau&2 -> request to enable timeout 1 level up (in claim) tau&4 -> current transition is a claim move tau&8 -> current transition is an atomic move tau&16 -> last move was truncated on stack tau&32 -> current transition is a preselected move tau&64 -> at least one next state is not on the stack tau&128 -> current transition is a stutter move o_pm&1 -> the current pid moved -- implements else o_pm&2 -> this is an acceptance state o_pm&4 -> this is a progress state o_pm&8 -> fairness alg rule 1 undo mark o_pm&16 -> fairness alg rule 3 undo mark o_pm&32 -> fairness alg rule 2 undo mark o_pm&64 -> the current proc applied rule2 o_pm&128 -> a fairness, dummy move - all procs blocked#if defined(FULLSTACK) && defined(MA) && !defined(BFS) uchar proviso;#ifndef BFS uchar o_n, o_ot; /* to save locals */ uchar o_m;#ifdef EVENT_TRACE#if nstates_event<256 uchar o_event; unsigned short o_event; int o_tt; short o_To;#ifdef RANDOMIZE short oo_i;#if defined(HAS_UNLESS) && !defined(BFS) int e_state; /* if escape trans - state of origin */#if (defined(FULLSTACK) && !defined(MA)) || defined(BFS) struct H_el *ostate; /* pointer to stored state */#if defined(CNTRSTACK) && !defined(BFS) long j6, j7; Trans *o_t;#ifdef HAS_SORTED short ipt; union { int oval; int *ovals; } bup;} Trail;Trail *trail, *trpt;FILE *efd;uchar *this;long maxdepth=10000;long omaxdepth=10000;char *stackfile;uchar *SS, *LL;uchar HASH_NR = 0;double memcnt = (double) 0;double memlim = (double) (1<<30);/* for emalloc: */static char *have;static long left = 0L;static double fragment = (double) 0;static unsigned long grow;unsigned int HASH_CONST[] = { /* asuming 4 bytes per int */ 0x88888EEF, 0x00400007, 0x04c11db7, 0x100d4e63, 0x0fc22f87, 0x3ff0c3ff, 0x38e84cd7, 0x02b148e9, 0x98b2e49d, 0xb616d379, 0xa5247fd9, 0xbae92a15, 0xb91c8bc5, 0x8e5880f3, 0xacd7c069, 0xb4c44bb3, 0x2ead1fb7, 0x8e428171, 0xdbebd459, 0x828ae611, 0x6cb25933, 0x86cdd651, 0x9e8f5f21, 0xd5f8d8e7, 0x9c4e956f, 0xb5cf2c71, 0x2e805a6d, 0x33fc3a55, 0xaf203ed1, 0xe31f5909, 0x5276db35, 0x0c565ef7, 0x273d1aa5, 0x8923b1dd, 0};int mreached=0, done=0, errors=0, Nrun=1;double nstates=0, nlinks=0, truncs=0, truncs2=0;double nlost=0, nShadow=0, hcmp=0, ngrabs=0;#ifdef BFSdouble midrv=0, failedrv=0, revrv=0;unsigned long nr_states=0; /* nodes in DFA */long Fa=0, Fh=0, Zh=0, Zn=0;long PUT=0, PROBE=0, ZAPS=0;long Ccheck=0, Cholds=0;int a_cycles=0, upto=1, strict=0, verbose = 0, signoff = 0;#ifdef HAS_CODEint gui = 0, coltrace = 0, readtrail = 0, whichtrail = 0, onlyproc = -1, silent = 0;int state_tables=0, fairness=0, no_rck=0, Nr_Trails=0;char simvals[128];#ifndef INLINEint TstOnly=0;unsigned long mask, nmask;#ifdef BITSTATEint ssize=23; /* 1 Mb */int ssize=19; /* 512K slots */int hmax=0, svmax=0, smax=0;int Maxbody=0, XX;uchar *noptr; /* used by macro Pptr(x) */#ifdef VAR_RANGESvoid logval(char *, int);void dumpranges(void);#define INLINE_REVextern void dfa_init(unsigned short);extern int dfa_member(unsigned long);extern int dfa_store(uchar *);unsigned int maxgs = 0;State comp_now; /* compressed state vector */State comp_msk;uchar *Mask = (uchar *) &comp_msk;State comp_tmp;static char *scratch = (char *) &comp_tmp;Stack *stack; /* for queues, processes */Svtack *svtack; /* for old state vectors */static unsigned hfns = 3; /* new default */static unsigned long j1;static unsigned long K1, K2;static unsigned long j2, j3, j4;static long udmem;static long A_depth = 0;long depth = 0;static uchar warned = 0, iterative = 0, like_java = 0, every_error = 0;static uchar noasserts = 0, noends = 0, bounded = 0;#if SYNC>0 && ASYNC==0void set_recvs(void);int no_recvs(int);#if SYNC#define IfNotBlocked if (boq != -1) continue;#define UnBlock boq = -1#define IfNotBlocked /* cannot block */#define UnBlock /* don't bother */#endif int (*bstore)(char *, int);int bstore_reg(char *, int);int bstore_mod(char *, int);void active_procs(void);void cleanup(void);void do_the_search(void);void find_shorter(int);void iniglobals(void);void stopped(int);void wrapup(void);int *grab_ints(int);void ungrab_ints(int *, int);Trans *settr( int t_id, int a, int b, int c, int d, char *t, int g, int tpe0, int tpe1){ Trans *tmp = (Trans *) emalloc(sizeof(Trans)); tmp->atom = a&(6|32); /* only (2|8|32) have meaning */ if (!g) tmp->atom |= 8; /* no global references */ tmp->st = b; tmp->tpe[0] = tpe0; tmp->tpe[1] = tpe1; tmp->tp = t; tmp->t_id = t_id; tmp->forw = c; tmp->back = d; return tmp;} cpytr(Trans *a) int i; tmp->atom = a->atom; tmp->st = a->st;#ifdef HAS_UNLESS tmp->e_trans = a->e_trans; for (i = 0; i < HAS_UNLESS; i++) tmp->escp[i] = a->escp[i]; tmp->tpe[0] = a->tpe[0]; tmp->tpe[1] = a->tpe[1]; for (i = 0; i < 6; i++) { tmp->qu[i] = a->qu[i]; tmp->ty[i] = a->ty[i]; tmp->tp = (char *) emalloc(strlen(a->tp)+1); strcpy(tmp->tp, a->tp); tmp->t_id = a->t_id; tmp->forw = a->forw; tmp->back = a->back;#ifndef NOREDUCEintsrinc_set(int n){ if (n <= 2) return LOCAL; if (n <= 2+ DELTA) return Q_FULL_F; /* 's' or nfull */ if (n <= 2+2*DELTA) return Q_EMPT_F; /* 'r' or nempty */ if (n <= 2+3*DELTA) return Q_EMPT_T; /* empty */ if (n <= 2+4*DELTA) return Q_FULL_T; /* full */ if (n == 5*DELTA) return GLOBAL; if (n == 6*DELTA) return TIMEOUT_F; if (n == 7*DELTA) return ALPHA_F; Uerror("cannot happen srinc_class"); return BAD;srunc(int n, int m){ switch(m) { case Q_FULL_F: return n-2; case Q_EMPT_F: return n-2-DELTA; case Q_EMPT_T: return n-2-2*DELTA; case Q_FULL_T: return n-2-3*DELTA; case ALPHA_F: case TIMEOUT_F: return 257; /* non-zero, and > MAXQ */ Uerror("cannot happen srunc"); return 0;int cnt;isthere(Trans *a, int b){ Trans *t; for (t = a; t; t = t->nxt) if (t->t_id == b) return 1;mark_safety(Trans *t) /* for conditional safety */{ int g = 0, i, j, k; if (!t) return 0; if (t->qu[0]) return (t->qu[1])?2:1; /* marked */ for (i = 0; i < 2; i++) { j = srinc_set(t->tpe[i]); if (j >= GLOBAL && j != ALPHA_F) return -1; if (j != LOCAL) { k = srunc(t->tpe[i], j); if (g == 0 || t->qu[0] != k || t->ty[0] != j) { t->qu[g] = k; t->ty[g] = j; g++; } } } return g;retrans(int n, int m, int is, short srcln[], uchar reach[]) /* process n, with m states, is=initial state */{ Trans *T0, *T1, *T2, *T3; int i, k; int g, h, j, aa; int p; if (state_tables >= 4) { printf("STEP 1 proctype %%s\n", procname[n]); for (i = 1; i < m; i++) for (T0 = trans[n][i]; T0; T0 = T0->nxt) crack(n, i, T0, srcln); return; do { for (i = 1, cnt = 0; i < m; i++) { T2 = trans[n][i]; T1 = T2?T2->nxt:(Trans *)0;/* prescan: */ for (T0 = T1; T0; T0 = T0->nxt)/* choice in choice */ { if (T0->st && trans[n][T0->st] && trans[n][T0->st]->nxt) break; } if (T0) printf("\tstate %%d / %%d: choice in choice\n", i, T0->st); if (T0) for (T0 = T1; T0; T0 = T0->nxt) { T3 = trans[n][T0->st]; if (!T3->nxt) { T2->nxt = cpytr(T0); T2 = T2->nxt; imed(T2, T0->st, n, i); continue; } do { T3 = T3->nxt; T2->nxt = cpytr(T3); } while (T3->nxt); cnt++; } } while (cnt); if (state_tables >= 3) { printf("STEP 2 proctype %%s\n", for (i = 1; i < m; i++) { if (trans[n][i] && trans[n][i]->nxt) /* optimize */ { T1 = trans[n][i]->nxt; printf("\t\tpull %%d (%%d) to %%d\n", T1->st, T1->forw, i); if (!trans[n][T1->st]) continue; T0 = cpytr(trans[n][T1->st]); trans[n][i] = T0; reach[T1->st] = 1; imed(T0, T1->st, n, i); for (T1 = T1->nxt; T1; T1 = T1->nxt) { T1->st, T1->forw, i); if (!trans[n][T1->st]) continue; T0->nxt = cpytr(trans[n][T1->st]); T0 = T0->nxt; reach[T1->st] = 1; imed(T0, T1->st, n, i); if (state_tables >= 2) { printf("STEP 3 proctype %%s\n", { if (!trans[n][i]) continue; /* check for each state i if an * escape to some state p is defined * if so, copy and mark p's transitions * and prepend them to the transition- * list of state i */ if (!like_java) /* the default */ { for (T0 = trans[n][i]; T0; T0 = T0->nxt) for (k = HAS_UNLESS-1; k >= 0; k--) { if (p = T0->escp[k]) for (T1 = trans[n][p]; T1; T1 = T1->nxt) { if (isthere(trans[n][i], T1->t_id)) T2 = cpytr(T1); T2->e_trans = p; T2->nxt = trans[n][i]; trans[n][i] = T2; } } } else /* outermost unless checked first */ { Trans *T4; T4 = T3 = (Trans *) 0; T2->nxt = (Trans *) 0; if (T3) T3->nxt = T2; else T4 = T2; T3 = T2; if (T4) { T3->nxt = trans[n][i]; trans[n][i] = T4; } { if (a_cycles) { /* moves through these states are visible */#if PROG_LAB>0 && defined(HAS_NP) if (progstate[n][i]) goto degrade; for (T1 = trans[n][i]; T1; T1 = T1->nxt) if (progstate[n][T1->st]) goto degrade; if (accpstate[n][i] || visstate[n][i]) if (accpstate[n][T1->st]) T1 = trans[n][i]; if (!T1) continue; g = mark_safety(T1); /* V3.3.1 */ if (g < 0) goto degrade; /* global */ /* check if mixing of guards preserves reduction */ if (T1->nxt) { k = 0; { if (!(T0->atom&8)) for (aa = 0; aa < 2; aa++) { j = srinc_set(T0->tpe[aa]); if (j >= GLOBAL && j != ALPHA_F) goto degrade; if (T0->tpe[aa] && T0->tpe[aa] != T1->tpe[0]) k = 1; } } /* g = 0; V3.3.1 */ if (k) /* non-uniform selection */ for (aa = 0; aa < 2; aa++) { j = srinc_set(T0->tpe[aa]); if (j != LOCAL) { k = srunc(T0->tpe[aa], j); for (h = 0; h < 6; h++) if (T1->qu[h] == k && T1->ty[h] == j) break; if (h >= 6) { T1->qu[g%%6] = k; T1->ty[g%%6] = j; g++; } } } if (g > 6) { T1->qu[0] = 0; /* turn it off */ printf("pan: warning, line %%d, ", srcln[i]); printf("too many stmnt types (%%d)", g); printf(" in selection\n"); goto degrade; /* mark all options global if >=1 is global */ for (T1 = trans[n][i]; T1; T1 = T1->nxt) if (!(T1->atom&8)) break; if (T1)degrade: for (T1 = trans[n][i]; T1; T1 = T1->nxt) T1->atom &= ~8; /* mark as unsafe */ /* can only mix 'r's or 's's if on same chan */ /* and not mixed with other local operations */ if (!T1 || T1->qu[0]) continue; j = T1->tpe[0]; if (T1->nxt && T1->atom&8) { if (j == 5*DELTA) { printf("warning: line %%d ", srcln[i]); printf("mixed condition "); printf("(defeats reduction)\n"); goto degrade; } for (T0 = T1; T0; T0 = T0->nxt) for (aa = 0; aa < 2; aa++) if (T0->tpe[aa] && T0->tpe[aa] != j) printf("[%%d-%%d] mixed %%stion ", T0->tpe[aa], j, (j==5*DELTA)?"condi":"selec"); printf(" '%%s' <-> '%%s'\n", T1->tp, T0->tp); } } { T2 = trans[n][i]; if (!T2 || T2->nxt || strncmp(T2->tp, ".(goto)", 7) || !stopstate[n][i]) continue; stopstate[n][T2->st] = 1; if (state_tables) { printf("proctype "); if (!strcmp(procname[n], ":init:")) printf("init\n"); else printf("%%s\n", procname[n]); reach[i] = 1; tagtable(n, m, is, srcln, reach); } else { int nrelse; if (strcmp(procname[n], ":never:") != 0) { for (T0 = trans[n][i]; T0; T0 = T0->nxt) { if (T0->st == i && strcmp(T0->tp, "(1)") == 0) { printf("error: proctype '%%s' ", procname[n]); printf("line %%d, state %%d: has un", srcln[i], i); printf("conditional self-loop\n"); pan_exit(1); } } } nrelse = 0; { if (strcmp(T0->tp, "else") == 0) nrelse++; if (nrelse > 1) { printf("error: proctype '%%s' state", procname[n]); printf(" %%d, inherits %%d", i, nrelse); printf(" 'else' stmnts\n"); pan_exit(1); } } if (!state_tables && strcmp(procname[n], ":never:") == 0) { int h = 0; if (T0->forw > h) h = T0->forw; h++; frm_st0 = (short *) emalloc(h * sizeof(short)); frm_st0[T0->forw] = i;imed(Trans *T, int v, int n, int j) /* set intermediate state */{ progstate[n][T->st] |= progstate[n][v]; accpstate[n][T->st] |= accpstate[n][v]; stopstate[n][T->st] |= stopstate[n][v]; mapstate[n][j] = T->st;tagtable(int n, int m, int is, short srcln[], uchar reach[]){ Trans *z; if (is >= m || !trans[n][is] || is <= 0 || reach[is] == 0) reach[is] = 0; for (z = trans[n][is]; z; z = z->nxt) crack(n, is, z, srcln); int i, j; tagtable(n, m, z->st, srcln, reach); for (i = 0; i < HAS_UNLESS; i++) { j = trans[n][is]->escp[i]; if (!j) break; tagtable(n, m, j, srcln, reach);crack(int n, int j, Trans *z, short srcln[]){ int i; if (!z) return; printf(" state %%3d -(tr %%3d)-> state %%3d ", j, z->forw, z->st); printf("[id %%3d tp %%3d", z->t_id, z->tpe[0]); if (z->tpe[1]) printf(",%%d", z->tpe[1]); if (z->e_trans) printf(" org %%3d", z->e_trans); else if (state_tables >= 2) { if (!z->escp[i]) break; printf(" esc %%d", z->escp[i]); printf("]"); printf(" [%%s%%s%%s%%s%%s] line %%d => ", z->atom&6?"A":z->atom&32?"D":"-", accpstate[n][j]?"a" :"-", stopstate[n][j]?"e" : "-", progstate[n][j]?"p" : "-", z->atom & 8 ?"L":"G", srcln[j]); for (i = 0; z->tp[i]; i++) if (z->tp[i] == '\n') printf("\\n"); putchar(z->tp[i]); if (z->qu[0]) { printf("\t["); for (i = 0; i < 6; i++) if (z->qu[i]) printf("(%%d,%%d)", z->qu[i], z->ty[i]); printf("]"); printf("\n"); fflush(stdout);#define BYTESIZE 32 /* 2^8 : 2^3 = 256:8 = 32 */typedef struct Vr_Ptr { char *nm; uchar vals[BYTESIZE]; struct Vr_Ptr *nxt;} Vr_Ptr;Vr_Ptr *ranges = (Vr_Ptr *) 0;logval(char *s, int v){ Vr_Ptr *tmp; if (v<0 || v > 255) return; for (tmp = ranges; tmp; tmp = tmp->nxt) if (!strcmp(tmp->nm, s)) goto found; tmp = (Vr_Ptr *) emalloc(sizeof(Vr_Ptr)); tmp->nxt = ranges; ranges = tmp; tmp->nm = s;found: tmp->vals[(v)/8] |= 1<<((v)%%8);dumpval(uchar X[], int range){ int w, x, i, j = -1; for (w = i = 0; w < range; w++) for (x = 0; x < 8; x++, i++)from: if ((X[w] & (1<= 0 && j != 255) printf("-255");dumpranges(void) printf("\nValues assigned within "); printf("interval [0..255]:\n"); { printf("\t%%s\t: ", tmp->nm); dumpval(tmp->vals, BYTESIZE); printf("\n");/*#define uchar unsigned char*/#define ulong unsigned long#define ushort unsigned short#define TWIDTH 256#define HASH(y,n) (n)*(((long)y))#define INRANGE(e,h) ((h>=e->From && h<=e->To)||(e->s==1 && e->S==h))extern char *emalloc(unsigned long); /* imported routine */extern void dfa_init(ushort); /* 4 exported routines */extern int dfa_member(ulong);extern int dfa_store(uchar *);extern void dfa_stats(void);typedef struct Edge { uchar From, To; /* max range 0..255 */ uchar s, S; /* if s=1, S is singleton */ struct Vertex *Dst; struct Edge *Nxt;} Edge;typedef struct Vertex { ulong key, num; /* key for splay tree, nr incoming edges */ uchar from[2], to[2]; /* in-node predefined edge info */ struct Vertex *dst[2];/* most nodes have 2 or more edges */ struct Edge *Succ; /* in case there are more edges */ struct Vertex *lnk, *left, *right; /* splay tree plumbing */} Vertex;static Edge *free_edges;static Vertex *free_vertices;static Vertex **layers; /* one splay tree of nodes per layer */static Vertex **path; /* run of word in the DFA */static Vertex *R, *F, *NF; /* Root, Final, Not-Final */static uchar *word, *lastword;/* string, and last string inserted */static int dfa_depth, iv=0, nv=0, pfrst=0, Tally;static void insert_it(Vertex *, int); /* splay-tree code */static void delete_it(Vertex *, int);static Vertex *find_it(Vertex *, Vertex *, uchar, int);static voidrecyc_edges(Edge *e) if (!e) return; recyc_edges(e->Nxt); e->Nxt = free_edges; free_edges = e;static Edge *new_edge(Vertex *dst){ Edge *e; if (free_edges) { e = free_edges; free_edges = e->Nxt; e->From = e->To = e->s = e->S = 0; e->Nxt = (Edge *) 0; e = (Edge *) emalloc(sizeof(Edge)); e->Dst = dst; return e;recyc_vertex(Vertex *v) recyc_edges(v->Succ); v->Succ = (Edge *) free_vertices; free_vertices = v; nr_states--;static Vertex *new_vertex(void){ Vertex *v; if (free_vertices) { v = free_vertices; free_vertices = (Vertex *) v->Succ; v->Succ = (Edge *) 0; v->num = 0; v = (Vertex *) emalloc(sizeof(Vertex)); nr_states++; return v; allDelta(Vertex *v, int n){ Vertex *dst = new_vertex(); v->from[0] = 0; v->to[0] = 255; v->dst[0] = dst; dst->num = 256; insert_it(v, n); return dst;insert_edge(Vertex *v, Edge *e){ /* put new edge first */ if (!v->dst[0]) { v->dst[0] = e->Dst; v->from[0] = e->From; v->to[0] = e->To; recyc_edges(e); if (!v->dst[1]) { v->from[1] = v->from[0]; v->from[0] = e->From; v->to[1] = v->to[0]; v->to[0] = e->To; v->dst[1] = v->dst[0]; v->dst[0] = e->Dst; } /* shift */ { int f = v->from[1]; int t = v->to[1]; Vertex *d = v->dst[1]; v->from[1] = v->from[0]; v->from[0] = e->From; e->From = f; e->To = t; e->Dst = d; e->Nxt = v->Succ; v->Succ = e;copyRecursive(Vertex *v, Edge *e){ Edge *f; if (e->Nxt) copyRecursive(v, e->Nxt); f = new_edge(e->Dst); f->From = e->From; f->To = e->To; f->s = e->s; f->S = e->S; f->Nxt = v->Succ; v->Succ = f;copyEdges(Vertex *to, Vertex *from){ int i; { to->from[i] = from->from[i]; to->to[i] = from->to[i]; to->dst[i] = from->dst[i]; if (from->Succ) copyRecursive(to, from->Succ);cacheDelta(Vertex *v, int h, int first){ static Edge *ov, tmp; int i; if (!first && INRANGE(ov,h)) return ov; /* intercepts about 10%% */ if (v->dst[i] && h >= v->from[i] && h <= v->to[i]) { tmp.From = v->from[i]; tmp.To = v->to[i]; tmp.Dst = v->dst[i]; tmp.s = tmp.S = 0; ov = &tmp; return ov; for (ov = v->Succ; ov; ov = ov->Nxt) if (INRANGE(ov,h)) return ov; Uerror("cannot get here, cacheDelta"); return (Edge *) 0;Delta(Vertex *v, int h) /* v->delta[h] */ if (v->dst[0] && h >= v->from[0] && h <= v->to[0]) return v->dst[0]; /* oldest edge */ if (v->dst[1] && h >= v->from[1] && h <= v->to[1]) return v->dst[1]; for (e = v->Succ; e; e = e->Nxt) if (INRANGE(e,h)) return e->Dst; Uerror("cannot happen Delta"); return (Vertex *) 0;numDelta(Vertex *v, int d) ulong cnt; if (v->dst[i]) { cnt = v->dst[i]->num + d*(1 + v->to[i] - v->from[i]); if (d == 1 && cnt < v->dst[i]->num) goto bad; v->dst[i]->num = cnt; { cnt = e->Dst->num + d*(1 + e->To - e->From + e->s); if (d == 1 && cnt < e->Dst->num)bad: Uerror("too many incoming edges"); e->Dst->num = cnt;setDelta(Vertex *v, int h, Vertex *newdst) /* v->delta[h] = newdst; */{ Edge *e, *f = (Edge *) 0, *g; /* remove the old entry, if there */ { if (h == v->from[i]) { if (h == v->to[i]) { v->dst[i] = (Vertex *) 0; v->from[i] = v->to[i] = 0; } else v->from[i]++; } else if (h == v->to[i]) { v->to[i]--; } else { g = new_edge(v->dst[i]);/* same dst */ g->From = v->from[i]; g->To = h-1; /* left half */ v->from[i] = h+1; /* right half */ insert_edge(v, g); goto part2; for (e = v->Succ; e; f = e, e = e->Nxt) { if (e->s == 1 && e->S == h) { e->s = e->S = 0; goto rem_tst; if (h >= e->From && h <= e->To) { if (h == e->From) { if (h == e->To) { if (e->s) { e->From = e->To = e->S; e->s = 0; break; } else goto rem_do; e->From++; } else if (h == e->To) { e->To--; } else /* split */ { g = new_edge(e->Dst); /* same dst */ g->From = e->From; g->To = h-1; /* g=left half */ e->From = h+1; /* e=right half */ g->Nxt = e->Nxt; /* insert g */ e->Nxt = g; /* behind e */ break; /* done */rem_tst: if (e->From > e->To) { if (e->s == 0) {rem_do: if (f) f->Nxt = e->Nxt; else v->Succ = e->Nxt; e->Nxt = (Edge *) 0; recyc_edges(e); { e->From = e->To = e->S; e->s = 0; break;part2: /* check if newdst is already there */ if (v->dst[i] == newdst) { if (h+1 == (int) v->from[i]) { v->from[i] = h; return; if (h == (int) v->to[i]+1) { v->to[i] = h; { if (e->Dst == newdst) { if (h+1 == (int) e->From) { e->From = h; if (e->s == 1 && e->S+1 == e->From) { e->From = e->S; e->s = e->S = 0; if (h == (int) e->To+1) { e->To = h; if (e->s == 1 && e->S == e->To+1) { e->To = e->S; if (e->s == 0) { e->s = 1; e->S = h; /* add as a new edge */ e = new_edge(newdst); e->From = e->To = h; insert_edge(v, e);static ulongcheap_key(Vertex *v){ ulong vk2 = 0; if (v->dst[0]) { vk2 = (ulong) v->dst[0]; if ((ulong) v->dst[1] > vk2) vk2 = (ulong) v->dst[1]; } else if (v->dst[1]) vk2 = (ulong) v->dst[1]; if (v->Succ) { Edge *e; for (e = v->Succ; e; e = e->Nxt) if ((ulong) e->Dst > vk2) vk2 = (ulong) e->Dst; Tally = (vk2>>2)&(TWIDTH-1); return v->key;mk_key(Vertex *v) /* not sensitive to order */{ ulong m = 0, vk2 = 0; Edge *e; { m += HASH(v->dst[0], v->to[0] - v->from[0] + 1); vk2 = (ulong) v->dst[0]; if (v->dst[1]) { m += HASH(v->dst[1], v->to[1] - v->from[1] + 1); if ((ulong) v->dst[1] > vk2) vk2 = (ulong) v->dst[1]; { m += HASH(e->Dst, e->To - e->From + 1 + e->s); if ((ulong) e->Dst > vk2) vk2 = (ulong) e->Dst; return m;mk_special(int sigma, Vertex *n, Vertex *v) Edge *f; if (v->dst[i]) { if (sigma >= v->from[i] && sigma <= v->to[i]) { m += HASH(v->dst[i], v->to[i]-v->from[i]); if ((ulong) v->dst[i] > vk2 && v->to[i] > v->from[i]) vk2 = (ulong) v->dst[i]; { m += HASH(v->dst[i], v->to[i]-v->from[i]+1); if ((ulong) v->dst[i] > vk2) for (f = v->Succ; f; f = f->Nxt) { if (sigma >= f->From && sigma <= f->To) { m += HASH(f->Dst, f->To - f->From + f->s); if ((ulong) f->Dst > vk2 && f->To - f->From + f->s > 0) vk2 = (ulong) f->Dst; } else if (f->s == 1 && sigma == f->S) { m += HASH(f->Dst, f->To - f->From + 1); if ((ulong) f->Dst > vk2) vk2 = (ulong) f->Dst; } else { m += HASH(f->Dst, f->To - f->From + 1 + f->s); if ((ulong) n > vk2) vk2 = (ulong) n; m += HASH(n, 1);void dfa_init(ushort nr_layers){ int i; Vertex *r, *t; dfa_depth = nr_layers; /* one byte per layer */ path = (Vertex **) emalloc((dfa_depth+1)*sizeof(Vertex *)); layers = (Vertex **) emalloc(TWIDTH*(dfa_depth+1)*sizeof(Vertex *)); lastword = (uchar *) emalloc((dfa_depth+1)*sizeof(uchar)); lastword[dfa_depth] = lastword[0] = 255; path[0] = R = new_vertex(); F = new_vertex(); for (i = 1, r = R; i < dfa_depth; i++, r = t) t = allDelta(r, i-1); NF = allDelta(r, i-1);static void complement_dfa(void) { Vertex *tmp = F; F = NF; NF = tmp; }doubletree_stats(Vertex *t){ Edge *e; double cnt=0.0; if (!t->key) return 0; t->key = 0; /* precaution */ if (t->dst[0]) cnt++; if (t->dst[1]) cnt++; for (e = t->Succ; e; e = e->Nxt) cnt++; cnt += tree_stats(t->lnk); cnt += tree_stats(t->left); cnt += tree_stats(t->right); return cnt;dfa_stats(void){ int i, j; double cnt = 0.0; for (j = 0; j < TWIDTH; j++) for (i = 0; i < dfa_depth+1; i++) cnt += tree_stats(layers[i*TWIDTH+j]); printf("Minimized Automaton: %%6d nodes and %%6g edges\n", nr_states, cnt);dfa_member(ulong n){ Vertex **p, **q; uchar *w = &word[n]; p = &path[n]; q = (p+1); for (i = n; i < dfa_depth; i++) *q++ = Delta(*p++, *w++); return (*p == F);dfa_store(uchar *sv){ Vertex **p, **q, *s, *y, *old, *new = F; uchar *w, *u = lastword; int i, j, k; w = word = sv; while (*w++ == *u++) /* find first byte that differs */ ; pfrst = (int) (u - lastword) - 1; memcpy(&lastword[pfrst], &sv[pfrst], dfa_depth-pfrst); if (pfrst > iv) pfrst = iv; if (pfrst > nv) pfrst = nv;/* phase1: */ p = &path[pfrst]; q = (p+1); w = &word[pfrst]; for (i = pfrst; i < dfa_depth; i++) *q++ = Delta(*p++, *w++); /* (*p)->delta[*w++]; */ if (*p == F) return 1; /* it's already there *//* phase2: */ iv = dfa_depth; do { iv--; old = new; new = find_it(path[iv], old, word[iv], iv); } while (new && iv > 0);/* phase3: */ nv = k = 0; s = path[0]; for (j = 1; j <= iv; ++j) if (path[j]->num > 1) { y = new_vertex(); copyEdges(y, path[j]); insert_it(y, j); numDelta(y, 1); delete_it(s, j-1); setDelta(s, word[j-1], y); insert_it(s, j-1); y->num = 1; /* initial value 1 */ s = y; path[j]->num--; /* only 1 moved from j to y */ k = 1; { s = path[j]; if (!k) nv = j; y = Delta(s, word[iv]); y->num--; delete_it(s, iv); setDelta(s, word[iv], old); insert_it(s, iv); old->num++; for (j = iv+1; j < dfa_depth; j++) if (path[j]->num == 0) { numDelta(path[j], -1); delete_it(path[j], j); recyc_vertex(path[j]);splay(ulong i, Vertex *t){ Vertex N, *l, *r, *y; if (!t) return t; N.left = N.right = (Vertex *) 0; l = r = &N; for (;;) { if (i < t->key) { if (!t->left) break; if (i < t->left->key) { y = t->left; t->left = y->right; y->right = t; t = y; if (!t->left) break; r->left = t; r = t; t = t->left; } else if (i > t->key) { if (!t->right) break; if (i > t->right->key) { y = t->right; t->right = y->left; y->left = t; if (!t->right) break; l->right = t; l = t; t = t->right; l->right = t->left; r->left = t->right; t->left = N.right; t->right = N.left; return t;insert_it(Vertex *v, int L){ Vertex *new, *t; ulong i; int nr; i = mk_key(v); nr = ((L*TWIDTH)+Tally); t = layers[nr]; v->key = i; if (!t) { layers[nr] = v; t = splay(i, t); if (i < t->key) { new = v; new->left = t->left; new->right = t; t->left = (Vertex *) 0; } else if (i > t->key) new->right = t->right; new->left = t; t->right = (Vertex *) 0; } else /* it's already there */ { v->lnk = t->lnk; /* put in linked list off v */ t->lnk = v; new = t; layers[nr] = new;static intcheckit(Vertex *h, Vertex *v, Vertex *n, uchar sigma){ Edge *g, *f; int i, k, j = 1; for (k = 0; k < 2; k++) if (h->dst[k]) { if (sigma >= h->from[k] && sigma <= h->to[k]) { if (h->dst[k] != n) goto no_match; for (i = h->from[k]; i <= h->to[k]; i++) { if (i == sigma) continue; g = cacheDelta(v, i, j); j = 0; if (h->dst[k] != g->Dst) goto no_match; if (g->s == 0 || g->S != i) i = g->To; for (f = h->Succ; f; f = f->Nxt) { if (INRANGE(f,sigma)) { if (f->Dst != n) goto no_match; for (i = f->From; i <= f->To; i++) { if (i == sigma) continue; g = cacheDelta(v, i, j); j = 0; if (f->Dst != g->Dst) goto no_match; if (g->s == 1 && i == g->S) continue; i = g->To; if (f->s && f->S != sigma) { g = cacheDelta(v, f->S, 1); if (h->Succ || h->dst[0] || h->dst[1]) return 1;no_match:find_it(Vertex *v, Vertex *n, uchar sigma, int L){ Vertex *z, *t; i = mk_special(sigma,n,v); if (!t) return (Vertex *) 0; layers[nr] = t = splay(i, t); if (i == t->key) for (z = t; z; z = z->lnk) if (checkit(z, v, n, sigma)) return z;delete_it(Vertex *v, int L){ Vertex *x, *t; i = cheap_key(v); if (!t) return; { Vertex *z, *y = (Vertex *) 0; for (z = t; z && z != v; y = z, z = z->lnk) ; if (z != v) goto bad; if (y) { y->lnk = z->lnk; z->lnk = (Vertex *) 0; layers[nr] = t; return; } else if (z->lnk) /* z == t == v */ { y = z->lnk; y->left = t->left; y->right = t->right; t->left = t->right = t->lnk = (Vertex *) 0; layers[nr] = y; /* delete the node itself */ if (!t->left) { x = t->right; { x = splay(i, t->left); x->right = t->right; t->left = t->right = t->lnk = (Vertex *) 0; layers[nr] = x;bad: Uerror("cannot happen delete");#if defined(MA) && (defined(W_XPT) || defined(R_XPT))static Vertex **temptree;static char wbuf[4096];static int WCNT = 4096, wcnt=0;static uchar stacker[MA+1];static ulong stackcnt = 0;extern double nstates, nlinks, truncs, truncs2;xwrite(int fd, char *b, int n) if (wcnt+n >= 4096) { write(fd, wbuf, wcnt); wcnt = 0; memcpy(&wbuf[wcnt], b, n); wcnt += n;wclose(fd) if (wcnt > 0) write(fd, wbuf, wcnt); wcnt = 0; close(fd);w_vertex(int fd, Vertex *v){ char t[3]; int i; Edge *e; xwrite(fd, (char *) &v, sizeof(Vertex *)); t[0] = 0; { t[1] = v->from[i], t[2] = v->to[i]; xwrite(fd, t, 3); xwrite(fd, (char *) &(v->dst[i]), sizeof(Vertex *)); { t[1] = e->From, t[2] = e->To; xwrite(fd, t, 3); xwrite(fd, (char *) &(e->Dst), sizeof(Vertex *)); if (e->s) { t[1] = t[2] = e->S; xwrite(fd, (char *) &(e->Dst), sizeof(Vertex *));w_layer(int fd, Vertex *v){ uchar c=1; if (!v) return; xwrite(fd, (char *) &c, 1); w_vertex(fd, v); w_layer(fd, v->lnk); w_layer(fd, v->left); w_layer(fd, v->right);w_xpoint(void){ int fd; char nm[64]; int i, j; uchar c; static uchar xwarned = 0; sprintf(nm, "%%s.xpt", Source); if ((fd = creat(nm, 0666)) <= 0) if (!xwarned) { xwarned = 1; printf("cannot creat checkpoint file\n"); xwrite(fd, (char *) &nstates, sizeof(double)); xwrite(fd, (char *) &truncs, sizeof(double)); xwrite(fd, (char *) &truncs2, sizeof(double)); xwrite(fd, (char *) &nlinks, sizeof(double)); xwrite(fd, (char *) &dfa_depth, sizeof(int)); xwrite(fd, (char *) &R, sizeof(Vertex *)); xwrite(fd, (char *) &F, sizeof(Vertex *)); xwrite(fd, (char *) &NF, sizeof(Vertex *)); { w_layer(fd, layers[i*TWIDTH+j]); c = 2; xwrite(fd, (char *) &c, 1); wclose(fd);xread(int fd, char *b, int n){ int m = wcnt; int delta = 0; if (m < n) { if (m > 0) memcpy(b, &wbuf[WCNT-m], m); delta = m; WCNT = wcnt = read(fd, wbuf, 4096); if (wcnt < n-m) Uerror("xread failed -- insufficient data"); n -= m; memcpy(&b[delta], &wbuf[WCNT-wcnt], n); wcnt -= n;x_cleanup(Vertex *c){ Edge *e; /* remove the tree and edges from c */ if (!c) return; for (e = c->Succ; e; e = e->Nxt) x_cleanup(e->Dst); recyc_vertex(c);x_remove(void){ Vertex *tmp; int i, s; int r, j; /* double-check: */ stacker[dfa_depth-1] = 0; r = dfa_store(stacker); stacker[dfa_depth-1] = 4; j = dfa_member(dfa_depth-1); if (r != 1 || j != 0) { printf("%%d: ", stackcnt); for (i = 0; i < dfa_depth; i++) printf("%%d,", stacker[i]); printf(" -- not a stackstate \n", r, j); stacker[dfa_depth-1] = 1; s = dfa_member(dfa_depth-1); { tmp = F; F = NF; NF = tmp; } /* complement */ if (s) dfa_store(stacker); stacker[dfa_depth-1] = 0; dfa_store(stacker); stackcnt++; { tmp = F; F = NF; NF = tmp; }x_rm_stack(Vertex *t, int k){ int j; Edge *e; if (k == 0) { x_remove(); if (t) { for (j = e->From; j <= (int) e->To; j++) { stacker[k] = (uchar) j; x_rm_stack(e->Dst, k-1); { stacker[k] = e->S;insert_withkey(Vertex *v, int L){ Vertex *new, *t = temptree[L]; if (!t) { temptree[L] = v; return v; } t = splay(v->key, t); if (v->key < t->key) } else if (v->key > t->key) { if (t != R && t != F && t != NF) Uerror("double insert, bad checkpoint data"); { recyc_vertex(v); new = t; temptree[L] = new; return new;find_withkey(Vertex *v, int L){ Vertex *t = temptree[L]; { temptree[L] = t = splay((ulong) v, t); if (t->key == (ulong) v) return t; Uerror("not found error, bad checkpoint data");r_layer(int fd, int n) char c, t[2]; { xread(fd, &c, 1); if (c == 2) break; if (c == 1) { v = new_vertex(); xread(fd, (char *) &(v->key), sizeof(Vertex *)); v = insert_withkey(v, n); } else /* c == 0 */ { e = new_edge((Vertex *) 0); xread(fd, t, 2); e->From = t[0]; e->To = t[1]; xread(fd, (char *) &(e->Dst), sizeof(Vertex *)); insert_edge(v, e);v_fix(Vertex *t, int nr){ int i; Edge *e; if (t->dst[i]) t->dst[i] = find_withkey(t->dst[i], nr); e->Dst = find_withkey(e->Dst, nr); v_fix(t->left, nr); v_fix(t->right, nr);v_insert(Vertex *t, int nr){ Edge *e; int i; v_insert(t->left, nr); v_insert(t->right, nr); /* remove only leafs from temptree */ t->left = t->right = t->lnk = (Vertex *) 0; insert_it(t, nr); /* into layers */ if (t->dst[i]) t->dst[i]->num += (t->to[i] - t->from[i] + 1); e->Dst->num += (e->To - e->From + 1 + e->s);x_fixup(void) for (i = 0; i < dfa_depth; i++) v_fix(temptree[i], (i+1)); for (i = dfa_depth; i >= 0; i--) v_insert(temptree[i], i);x_tail(Vertex *t, ulong want){ int i, yes, no; Edge *e; Vertex *v = (Vertex *) 0; if (!t) return v; yes = no = 0; if ((ulong) t->dst[i] == want) { /* was t->from[i] <= 0 && t->to[i] >= 0 */ /* but from and to are uchar */ if (t->from[i] == 0) yes = 1; if (t->from[i] <= 4 && t->to[i] >= 4) no = 1; if ((ulong) e->Dst == want) { /* was INRANGE(e,0) but From and To are uchar */ if ((e->From == 0) || (e->s==1 && e->S==0)) else if (INRANGE(e, 4)) if (yes && !no) return t; v = x_tail(t->left, want); if (v) return v; v = x_tail(t->right, want); if (v) return v;x_anytail(Vertex *t, Vertex *c, int nr){ int i; Edge *e, *f; Vertex *v; if ((ulong) t->dst[i] == c->key) { v = new_vertex(); v->key = t->key; f = new_edge(v); f->From = t->from[i]; f->To = t->to[i]; f->Nxt = c->Succ; c->Succ = f; if (nr > 0) x_anytail(temptree[nr-1], v, nr-1); if ((ulong) e->Dst == c->key) f->From = e->From; f->To = e->To; f->s = e->s; f->S = e->S; x_anytail(t->left, c, nr); x_anytail(t->right, c, nr);x_cpy_rev(void){ Vertex *c, *v; /* find 0 and !4 predecessor of F */ v = x_tail(temptree[dfa_depth-1], F->key); if (!v) return (Vertex *) 0; c = new_vertex(); c->key = v->key; /* every node on dfa_depth-2 that has v->key as succ */ /* make copy and let c point to these (reversing ptrs) */ x_anytail(temptree[dfa_depth-2], c, dfa_depth-2); return c;r_xpoint(void){ int fd; char nm[64]; Vertex *d; int i, j; if ((fd = open(nm, 0)) < 0) /* O_RDONLY */ Uerror("cannot open checkpoint file"); xread(fd, (char *) &nstates, sizeof(double)); xread(fd, (char *) &truncs, sizeof(double)); xread(fd, (char *) &truncs2, sizeof(double)); xread(fd, (char *) &nlinks, sizeof(double)); xread(fd, (char *) &dfa_depth, sizeof(int)); if (dfa_depth != MA+a_cycles) Uerror("bad dfa_depth in checkpoint file"); path = (Vertex **) emalloc((dfa_depth+1)*sizeof(Vertex *)); layers = (Vertex **) emalloc(TWIDTH*(dfa_depth+1)*sizeof(Vertex *)); temptree = (Vertex **) emalloc((dfa_depth+2)*sizeof(Vertex *)); lastword = (uchar *) emalloc((dfa_depth+1)*sizeof(uchar)); lastword[dfa_depth] = lastword[0] = 255; path[0] = R = new_vertex(); xread(fd, (char *) &R->key, sizeof(Vertex *)); R = insert_withkey(R, 0); F = new_vertex(); xread(fd, (char *) &F->key, sizeof(Vertex *)); F = insert_withkey(F, dfa_depth); NF = new_vertex(); xread(fd, (char *) &NF->key, sizeof(Vertex *)); NF = insert_withkey(NF, dfa_depth); r_layer(fd, i); if (wcnt != 0) Uerror("bad count in checkpoint file"); d = x_cpy_rev(); x_fixup(); stacker[dfa_depth-1] = 0; x_rm_stack(d, dfa_depth-2); x_cleanup(d); printf("pan: removed %%d stackstates\n", stackcnt); nstates -= (double) stackcnt;proctype %s not found Addproc(%d); #define _T5 %d #define _T2 %d case _T5: /* np_ */ if (!((!(o_pm&4) && !(tau&128)))) if (!((!(trpt->o_pm&4) && !(trpt->tau&128)))) continue; /* else fall through */ case _T2: /* true */ _m = 3; goto P999; /* np_ demon: */ trans[_NP_] = (Trans **) emalloc(2*sizeof(Trans *)); T = trans[_NP_][0] = settr(9997,0,1,_T5,0,"(np_)", 1,2,0); T->nxt = settr(9998,0,0,_T2,0,"(1)", 0,2,0); T = trans[_NP_][1] = settr(9999,0,1,_T5,0,"(np_)", 1,2,0); pan.cpan_s.cpan_t.cpan.hpan_s.hpan_t.hpan.tpan_s.tpan_t.tpan.mpan_s.mpan_t.mpan.bpan_s.bpan_t.bwspin: cannot create pan.[chtmfb]Spin Version 4.3.0 -- 22 June 2007#define Version "%s" #define Source "%s" char *TrailFile = Source; /* default */ #if defined(BFS) #ifndef SAFETY #define SAFETY #ifndef XUSAFE #define XUSAFE #ifndef uchar #define uchar unsigned char #ifndef uint #define uint unsigned int _:never_template:_spin: warning, make sure that the S1 model includes the same remote references#ifndef NFAIR #define NFAIR 2 /* must be >= 2 */ #define HAS_LAST %d #define DELTA %d #ifdef MA #if MA==1 #undef MA #define MA 100 #endif #endif #ifdef W_XPT #if W_XPT==1 #undef W_XPT #define W_XPT 1000000 #define NTIM %d #define ETIM %d #define REM_VARS 1 #define REM_REFS %d #define HAS_SORTED %d #define M_LOSS #define HAS_RANDOM %d #define HAS_CODE #define HAS_STACK #define HAS_ENABLED 1 #define HAS_UNLESS %d #define HAS_PROVIDED %d #define HAS_PCVALUE %d #define HAS_BADELSE %d #ifndef NOREDUCE #define NOREDUCE 1 #define HAS_NP %d #define MERGED 1 #ifdef NP /* includes np_ demon */ #define HAS_NP 2 #define VERI %d #define endclaim 3 /* none */ #if !defined(NOCLAIM) && !defined NP #define endclaim endstate%d #define EVENT_TRACE %d #define endevent endstate%d #define NEGATED_TRACE 1 typedef struct S_F_MAP { char *fnm; int from; int upto; } S_F_MAP; /*** Generated by %s ***/ /*** From source: %s ***/ #include "pan.h" #include "pan_s.h" #include "pan_t.h" State A_Root; /* seed-state for cycles */ State now; /* the full state-vector */ extern int verbose; extern long depth; #ifndef NOBOUNDCHECK #define Index(x, y) Boundcheck(x, y, II, tt, t) #else #define Index(x, y) x #ifdef PEG struct T_SRC { char *fl; int ln; } T_SRC[NTRANS]; void tr_2_src(int m, char *file, int ln) { T_SRC[m].fl = file; T_SRC[m].ln = ln; } void putpeg(int n, int m) { printf("%%5d trans %%4d ", m, n); printf("file %%s line %%3d\n", T_SRC[n].fl, T_SRC[n].ln); #define tr_2_src(m,f,l) #endif void settable(void) { Trans *T; Trans *settr(int, int, int, int, int, char *, int, int, int); trans = (Trans ***) emalloc(%d*sizeof(Trans **)); if (II == 0) { _m = step_claim(trpt->o_pm, trpt->tau, tt, ot, t); if (_m) goto P999; else continue; } else #define rand pan_rand #if defined(HAS_CODE) && defined(VERBOSE) printf("Pr: %%d Tr: %%d\n", II, t->forw); switch (t->forw) { #ifndef PEG void set_claim(void) { Trans *T; extern Trans ***trans; extern Trans *settr(int, int, int, int, int, printf("Pr: %%d Tr: %%d\n", II, forw); switch (forw) { default: Uerror("bad forward move"); case 0: /* if without executable clauses */ continue; case 1: /* generic 'goto' or 'skip' */ IfNotBlocked case 2: /* generic 'else' */ if (o_pm&1) continue; if (trpt->o_pm&1) continue; if (II == 0) goto R999; switch (t->back) { default: Uerror("bad return move"); case 0: goto R999; /* nothing to undo */ struct { int tp; short *src; } src_all[] = { { %d, &src_ln%d[0] }, { 0, (short *) 0 } }; short *frm_st0; extern short *frm_st0; #undef rand } #define FORWARD_MOVES "pan_s.m" #define REVERSE_MOVES "pan_s.b" #define SEPARATE #define TRANSITIONS "pan_s.t" extern void ini_claim(int, int); #define FORWARD_MOVES "pan.m" #define REVERSE_MOVES "pan.b" #define TRANSITIONS "pan.t" no runable processvoid active_procs(void) { #define NTRANS %d long peg[NTRANS]; #define FORWARD_MOVES "pan_t.m" #define REVERSE_MOVES "pan_t.b" #define TRANSITIONS "pan_t.t" extern int Maxbody; #if VECTORSZ>32000 extern int proc_offset[]; extern short proc_offset[]; extern uchar proc_skip[]; extern uchar *reached[]; extern uchar *accpstate[]; extern uchar *progstate[]; extern uchar *stopstate[]; extern uchar *visstate[]; extern short *mapstate[]; void ini_claim(int n, int h) { extern State now; extern void set_claim(void); #ifdef PROV #include PROV set_claim(); switch (n) { } } int step_claim(int o_pm, int tau, int tt, int ot, Trans *t) { int forw = t->forw; int _m = 0; extern char *noptr; int II=0; #define continue return 0 #include "pan_t.m" P999: return _m; } #undef continue int rev_claim(int backw) { return 0; } #include TRANSITIONS || %s(((P%d *)this)->now.[%d] case %d: if ( (t->ty[i] == && ((%s%s)) || ) return 0; break; #define LOCAL 1 #define Q_FULL_F 2 #define Q_EMPT_F 3 #define Q_EMPT_T 4 #define Q_FULL_T 5 #define TIMEOUT_F 6 #define GLOBAL 7 #define BAD 8 #define ALPHA_F 9 int q_cond(short II, Trans *t) { int i = 0; for (i = 0; i < 6; i++) (!(trpt->tau&1))1 { if (t->ty[i] == TIMEOUT_F) return %s; if (t->ty[i] == ALPHA_F) #ifdef GLOB_ALPHA return 0; #else return (II+1 == (short) now._nr_pr && II+1 < MAXPROC); switch (t->qu[i]) { case 0: break; default: Uerror("unknown qid - q_cond"); return 0; } return 1; extern uchar reached%d[]; #define nstates%d %d /* %s */ extern short src_ln%d[]; extern S_F_MAP src_file%d[]; #define endstate%d %d #define src_claim src_ln%d #define nstates_claim nstates%d #define nstates_event nstates%d /* PROC %s */ /* proctype %d: %s */ trans[%d] = (Trans **) emalloc(%d*sizeof(Trans *)); #define in_s_scope(x_y3_) 0 #define in_r_scope(x_y3_) 0 no namebad channel name '%s' trans[%d][%d]->escp[%d] = %d; reached%d[%d] = 1; /* escape #%d: %d */ /* end-escapes */ case %d: /* STATE %d - line %d %s - [] */ #if defined(C_States) && (HAS_TRACK==1) c_update((uchar *) &(now.c_state[0])); _m = %d+delta_m; delta_m = 0; goto P999; /* STATE %d */ sv_restor(); goto R999; tr_2_src(%d, %s, %d); /*->*/ trans[%d][%d] = settr(%d,%d,%d,%d,%d,"", %d, %d, %d); T = trans[ %d][%d] = settr(%d,%d,0,0,0,"", %d, %d, %d); /* %s:%d */ T->nxt = settr(%d,%d,%d,0,0,"%d, %d); bad hop %s:%d -- at %d, <> looking for %d -- merge %d:%d:%d (trpt+1)->bup.ovals = grab_ints(%d); ; if (trpt->o_pm&1) uerror("non-determinism in D_proctype"); /* dead %d: %s */ #ifdef HAS_CODE if (!readtrail) #endif = 0(trpt+1)->bup.ovals[%d] = (trpt+1)->bup.oval = ; #ifdef HAS_CODE ; case %d: /* STATE %d */ cannot happen, dobackward; /* %d */ = trpt->bup.ovals[%d]%s%dmodifier overflow error trans[%d][%d] = settr(0,0,0,0,0,"",0,0,0); ] (%d:%d - %d) same as %d (%d:%d - %d) */ case %d: /* STATE %d - line %d %s - [] (%d:%d:%d - %d) */ merge requires more than 256 bupsIfNotBlocked cannot happen, case_cache #if defined(VERI) && !defined(NP) { static int reported%d = 0; if (verbose && !reported%d) { printf("depth %%d: Claim reached state %%d (line %%d)\n", depth, frm_st0[t->forw], src_claim[%d]); reported%d = 1; fflush(stdout); } } #endif reached[%d][%d] = 1; /* stop at bad hop %d, %d */ /* merge: (%d, %d, %d) */ _m = %d; goto P999; /* %d */ /* STATE %d */ ungrab_ints(trpt->bup.ovals, %d); goto R999; /* c */ %ssettr(%d,%d,%d,%d,%d,"settr(%d,%d,%d,%d,0," /* m: %d -> %d,%d */ reached%d[%d] = 1;-error: (%s:%d) saw 'unless' on a guard: =====>instead of do (or if) :: ... :: stmnt1 unless stmnt2 od (of fi)=====>use :: stmnt1 od (or fi) unless stmnt2=====>or rewrite T = trans[%d][%d] = #if 0 /* dead link: */ spin: line %3d %s, Warning: condition is always false T = T->nxt = T->nxt = cycle of goto jumps /* mark-down line %d */ _pid_ߪȨӪXǪǪߪߪ1oǪǪȨȨԨǪǪͩȨ$ߪcontinue%s%s%sUerror("block in step seq")%s%d !( -( ~(%%<=>=!===||&&<<>>((tau)&1)((trpt->tau)&1)spin: line %3d, warning: 'timeout' in d_step sequence claim %s, (not runnable)eventmap %s, (not runnable)'run' in d_step sequence (use atomic)addproc(%d, %d parameters used, max %d expected too many parameters in run %s(...), 0enabled(II, (!(o_pm&4) && !(tau&128))(!(trpt->o_pm&4) && !(trpt->tau&128))((P0 *) Pptr(+BASE))->_p #ifndef XUSAFE ]&1) || (!(q_claim[q_R_check(, II)) && ]&2) || , II)) &&q_S_check( #endif )q_len(q_full()==0)(q_len())(!q_full()>0)if ((ot == EVENT_TRACE && _tp != 's') || _qid+1 != \ || qrecv()-1, %d, 0) != ) continue || (x_y3_ == !q_full(]&2) if (q_claim[, II);lenfullif (q_%s)) ( { nlost++; delta_m = 1; } else { ; if (TstOnly) return 1; if (no_recvs(II)) continue; if (readtrail && gui) { char simtmp[32]; ); sprintf(simvals, "%%d!", sprintf(simtmp, "%%d", ); strcat(simvals, simtmp); strcat(simvals, ","); qsend(, %d channel name: %d msg parameters sent, %d expected too many pars in send)) if (q_zero({ boq = ; Uerror("rv-attempt in d_step"); }; } if ((ot == EVENT_TRACE && _tp != 'r') 0, %d, 0) != (((boq == -1 && && ) || (boq == q_zero( && ( == qrecv(0, %d, 0)) && Q_has(, 1, , 0, 0]&1) if ( { uerror("polling rv chan"); continue; } ) boq != { if (boq != ; } else { if (boq != -1) } ) == 0) if (q_len(; XX=1 != 0, %d, 0)) ; if (!(XX = Q_has())) XX; if (TstOnly) return 1if (q_flds[((Q0 *)qptr(-1))->_t] != %d) Uerror("wrong nr of msg fields in rcv"); , XX-1, %d, 0); cannot use var ('%s') in multiple msg fields = XX-1, %d, %d); #ifdef VAR_RANGES logval("", ); #endif sprintf(simvals, "%%d?", { boq = -1; #ifndef NOFAIR if (fairness && !(trpt->o_pm&32) && (now._a_t&2) && now._cnt[now._a_t&1] == II+2) { now._cnt[now._a_t&1] -= 1; #ifdef VERI if (II == 1) now._cnt[now._a_t&1] = 1; #ifdef DEBUG printf("%%3d: proc %%d fairness ", depth, II); printf("Rule 2: --cnt to %%d (%%d)\n", now._cnt[now._a_t&1], now._a_t); trpt->o_pm |= (32|64); } }) && \ not_RV() > 0 \ && qrecv(0, %d, 0) == Q_has(if (!()) if (o_pm&1) if (trpt->o_pm&1) /* else */( () ? ) : ) )if (TstOnly) return 1; Printf(%sprintm(((int)/* %s */ sv_save(); #if defined(C_States) && (HAS_TRACK==1) assert(", II, tt, t)Uerror("cannot get here")return 0if (TstOnly) return (II+1 == now._nr_pr); if (!delproc(1, II)) spin: bad node type %d (.m) - line %d n  Zj а?K۶Ib'o\Jдij>F2Vܵno name - putname%s%s%s.undeclared variable '%s'proctype-name '%s' used as array-name_pattempt to read value of '_'%s:ref to array element invalid in this context hint: instead of, e.g., x[rs] qu[3], use chan nm_3 = qu[3]; x[rs] nm_3; and use nm_3 in sends/recvs instead of qu[3][%%d][ Index(%d) ].%s((P%d *)Pptr(BASE+f_pid(%d)))->%smore than one run operator in expressionuse of run operator in compound expressionrun operator used in invalid context %3d, { %s, %d, %d }, { %s, %d, %d } putsrc mismatch %d - %d, file %s uchar reached%d [] = { }; #define reached_claim reached%d #define reached_event reached%d short src_ln%d [] = { "-"S_F_MAP src_file%d [] = { #define src_claim src_ln%d #define src_event src_ln%d !(-(~(%%<=>=!===||&&<<>>run %s()len(full(empty(nfull(nempty(!!!??<??[?[enabled(eval(np_pc_value(( () -> ) : ) ) = printfannotate(%sprintm({%s}assert(.(goto)goto %sbreakelse-end-D_STEPATOMICsub-sequenceIFDOunlesstimeout'%c'%dwVVVTVVVVh}|VVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVV@VVVV VVVVVVVVVVVVVVVVVVVVV%VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV&CVVVH5VVVVVVVVViA 1VVVVVVVV"SOVVVVVVVVV{VVVV0   $ 8   , <  VVdelproc(0, now._nr_pr-1)if (_m == 2) )_m = unsend(XX = trpt->bup.ovals[%d]; XX = 1; unrecv, XX-1, (%d, , %d); _trpt->bup.oval = trpt->bup.ovalp_restor(II); sv_restor(); spin: bad node type %d (.b) r"""rr"""rr"r#r"""""""""""""""r!"""""""""""""""""r"""""""""""r"""""""""""""""""""1""""""""r"r""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#""r""rr"r"""""###""""""""""rr""""""""rrrrr""r"""""""!""""rrrrrrrrrr""r case %d: ((Q%d *)z)->contents#ifdef HAS_SORTED j = trpt->ipt; #endif for (k = j; k < ((Q%d *)z)->Qlen; k++) { %s[k].fld%d = %s[k+1].fld%d; } j = ((Q0 *)z)->Qlen; ((Q%d *)z)->contents[j].fld %s%d = 0; _m = (trpt+1)->o_m; if (_m) (trpt-1)->o_pm |= 1; UnBlock; _m = trpt->o_m; break; if (strt) boq = from+1; if (strt && slot<%d) { for (j--; j>=slot; j--) { %s[j+1].fld%d = %s[j].fld%d; } } if (strt) { %s%d = 0; if (fld == 0) %s0 = fldvar; switch (fld) { case %d: %s%d = fldvar; break; _pidcannot find state %d fsm_dfs: cannot happen cannot happen, popbuild__pid_lastspin: bad node type %d line %d (ana_stmnt) aborting^=b@b@b@==b@b@b@==b@=@=b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@{?@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@>b@b@b@b@b@b@b@b@b@b@b@=b@b@b@b@^=b@b@b@b@b@b@b@b@b@b@b@b@ @@>}>b@b@b@b@b@b@b@b@=b@^=b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@b@^==:>@b@@b@b@=^=^=b@^=b@b@b@b@b@@@@b@@b@@b@b@@@@b@@@b@b@b@b@b@b@b@b@^=^=^=^=@b@b@?b@b@b@b@b@b@b@=b@b@b@b@==========b@b@^=unreachable code: %s, line %3d: unsigned char Is_Recv[%d]; void set_recvs(void) { Is_Recv[%d] = 1; unexpected: do at start of d_step} int no_recvs(int me) { int h; uchar ot; short tt; Trans *t; for (h = BASE; h < (int) now._nr_pr; h++) { if (h == me) continue; tt = (short) ((P0 *)pptr(h))->_p; ot = (uchar) ((P0 *)pptr(h))->_t; for (t = trans[ot][tt]; t; t = t->nxt) if (Is_Recv[t->t_id]) return 0; } return 1; (%s) %s%d.trail%s.trailrspin: cannot find trail filespin: warning, "%s" is newer than %s CYCLE> <<<<>>>> -------------depth-limit (-u%d steps) reached %3d: proc %d, no matching stmnt %d %3d: claim terminates %3d: proc %d terminates %3d: stop error, proc %d (i=%d) trans %d, %c %3d: no process %d (state %d) [] transition failed#%dNever claim moves to line %d [%d:%d:%d spin: trail ends after %d steps step %d: proc %d (state %d) - d %d %d:%d:%d:%d d_step sequence too longS_%.3d_0: /* break-dest */ S_%.3d_0goto %s breaks from d_step seqcannot happen (dstep.c)illegal operator in 'd_step:' '''%s'run operator in d_stepremote reference in d_stepprocess terminationnested d_step sequencenested atomic sequence || (boq == -1 /* else */)(1 /* else */)(boq == -1) && (boq == -1 && continue'unless' inside d_step - ignoredif (!()) continue;if ((boq != -1) || !(boq == -1 && if (boq != -1 || (trpt->o_pm&1)) continue;IfNotBlocked sv_save(); reached[%d][%d] = 1; reached[%d][t->st] = 1; reached[%d][tt] = 1; Uerror("block in d_step seq, line %d")S_%.3d_0: /* 1 */ goto S_%.3d_0; S_%.3d_0: /* 2 */ goto S_%.3d_0; /* 'break' */ goto S_%.3d_0; /* NEXT */ cannot interpret d_step/* 'goto' */ /* '.' */ ; goto S_%.3d_0; /* ';' */ goto S_%.3d_%d%s: /* 3 */ Uerror("blocking sel in d_step (nr.%d, near line %d)"); typename %s was defined beforeillegal reference inside typedefstruct %s { /* user defined type */ }; %s is not a typenameredeclaration of '%s'(%s) only an unsigned can have width-field:hide::show::local:bad array size for '%s'spin: indexing %s[%d] - size is %d indexing error '%s'no subfields %sbad subfield type %d bad subfield entry %d cannot locate subfield %snon-zero 'rgt' on non-structurearray of structures in param list, %scannot happen cpnn.%s[%d]no field '%s' defined in structure '%s' %s%s.%s%s[%d].[ %d ]..%s[%d] %s(%d):%s.%s = unexpected - no symbolntyp %d unexpected %s, no '.'spin: saw ''incomplete structure ref '%s'cannot retrieve field %d bad structure %sunexpected type - tail_addproctype %s redefined:%s:L:G:%s)ccccccqc)Cc))ŏF))FFFF͍cccccccccc)type = %d unexpected chan def type possible aliases of no valid name RUN ASGN RCV InitzdName[%s], DR %s [[ ]] fully relevant %s due to uses(%d): (exact match)(alias match)<>:params::vars::never::trace::notrace:proctype %s relevant, due to symbol cannot find proctype %scannot happen, missing proc in ast:init::run:spin: redundant in proctype %s (for given property): - line %3d %s (state %d) [] *%3d +%3d #%3d ? %d -> %d Unless <:%d>AST_START %s from %d spin: error: DEF and USE of same var in rcv stmnt: -- %d AST_track, NOT EXPECTED ntyp: %d u```]]```]]`]y]```````````````Ay````````````````````````````]````u````````````2y2````````]`u``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````uy`y``@uy`````yyy`y`y``yyyyyy````````@@@@y````````````]]]]]]]]]]``uRelevant variables:spin: redundant vars (for given property):spin: consider using predicate abstraction to replace:sourcesinkspin: proctype %s defines a %s process spin: proctype %s mimics a buffer to reduce complexity, consider merging the code of each source process into the code of its target each sink process into the code of its source to reduce complexity, avoid buffer processesspin: slice criterion type=%d spin: possibly redundant parameters in: critical(%d) CTL -- %s premark nomark liftmark ROUND %d -- changes %d no slice criteria (or no claim) specifiedspin: no redundancies found (for given property) Explicit List:* %3d <:%d>, ==EndX[%d:%d:%d] bad scratch: %d inspect pair %d %d subgraph: %d .. %d possible pair %d %d -- %d Curtail %s: scratch %d -- %d %d %d %d %s (%d): states=%d (max %d), words = %d, bpw %d, overflow %d d_step {atomic { { };%s: /* normal */ {} unless {}; /* end unless */doif::od;fi;c_code c_expr { } ->;proctype %s() provided {}expected ')'expected predicateCCCCCsyntax errorformula: expected '%c'truefalseexpected '<>' or '<->'expected '<->' qP/parentheses not balancedtotal memory used: %9ld largest stack sze: %9d spin -f: saw '-%c' usage: spin [-v] [-n] -f formula -v verbose translation -n normalize tl formula and exit || && U V (falsetrue(%s) D Unknown token: []<>-><->predicate||&&end of formulatl_spin: , saw ' tl_spin: %s ---------^ new: , old: nxt: other: Push %s, from %s, S%dtoo many Untilswarning: node %s not found && (() || (1))))T%daccept_all%s_%smaxred=%d, count=%d, curnm=%s, nwnm=%s (greencnt=%d,%d, redcnt=%d,%d) initT%d_UV|&X!TF? 9 9 # 9   P  m   true formula-old: [%s] formula-nxt: [%s] compare old to: %s [%s] compare nxt to: %s => different => match New Node %s [] nr %d Done with %s Is Not New Has Next [] Expand %s, from handle: : assertion failed OO,x? /* Normlzd: */ /* * %d states in Streett automaton * %d Streett acceptance conditions * %d Buchi states */accept_allacceptname too long %saccept%s/* redundant state %s */ replace %s with %s nonxtA: nonxtB: combo: BINGO %s: -%s %d %d %d === state %s, trans to %s redundant conditions <-> %s bucky match %s T0_initT0%s%d: state %s equals state %s == :: () -> goto %s %s: /* */ T0%s: if :: false fi; %s << >> %s never { /* /* >>%d,%d<< */ accept_init: 0 /* false */; accept_all: skip } tl_spin: memalloc %ld bytes releasing a free block size pool allocs frees%5d %6ld %6ld %6ld : assertion failed !true => false!false => true!!p => p!(p V q) => (!p U !q)!(p U q) => (!p V !q)!X -> X!!(p && q) => !p || !q!(p || q) => !p && !q;t<t<:t<:;t<f:k;I;;cannot happen, Canonicalcache stores : %9ld cache hits : %9ld sameform...type: %d cannot happen, sameformJJJIJXJJJIxJxJXJcannot happen, anywhere$ $ PH   H܇ o|oo< Rbr‰҉"2BRbrŠҊ"2BRbr‹ҋ4 4";BI/M/RX/]dkrz$/@+  .*%ǬάѬ8֬ݬ/  '/-6,7&!*-0 9/=DK(T#])f jqx/~. 7.&/­0ŭ0A|FLVұPRS,rLsZoperator: keyword: function-name: Pcy,;M\kz",KVesK !7Mcq KWec)4?RYp K%3BLsXX ?X@p!8@hnx4d ,T0Rbt(Tn@h 0SXhy $=Hhh$%@$fx(hh*CXx6BI_nBX8h -D_ht$*BUhpb$$/Dp%? \b8]%? \bt8]$ $&8t.D|8t.Njq$$ * $8 h       P u   $     ( H v      $ T         ( Q d    0 W g x   $  <  c l     0 O \ c |    c     / M j      0 T  | 0 O \    0 T  | 0 O \   , C R ` l       $ C Y $p       #  0 D X _ p    0 D X       C Y $\       #   D X _ p     D X       $/ < $U f $p   $ $ D f l $     , hP ~     8   - @ $S l x   $  x     h   ! 7 $B ] l |      $ $ $0 Y $n x  $      h 4 u  O ` u  w $     $ $ 6 D $l       d h  d  u    = U $p  $    T h   = T    h  X  $   $  $   u $   8' 6 $E Q e $u    8  2 $= e $W p  $   ( H u   8    $ e $  1 $G W   l   $  $ 0 $@ x    h! l! !  ! h$" x" "  " &# $8#  l# # # $# # # # $ $8$ y$ $$ $ $$ $ $ # $ .% @% u ^%  # w% % % $ % & $& D& a& q&  & & $& & ' ' ,' d' $$p' h' ' h' ' ' ( #( ,( ?( M( f( x( (  ( (  ) ) \) ) h) ) ) (* j* * *   * * * h + + $)+ $7+ A+ _+ {+ + + $+ , ', $7, L, $, , , - E-  # \- -   ' - - - - - # - . 3.  ' H. - # d. . . .   . . / -/ H/ / ' / / 0 *0 @0  #( Y0 f0 x0 0  0 0 0 0  -1 @1   ' d1 1  1 1 2 $2 D2 \2 s2 2 2 2  2 2  2 23 N3 a3 u3 3 3 3 c 3 3  3 4 4  <4 1 2 #( l4 4 4 4 4 5 <5 $ g5 x5 - $ 5 5 5 5 $5 $6 +6 $<6 `6 & 6  6 6 6  7 !7 @7 $ d7 x7 7 7 $ 7 8  8 \8 8 8  9 $@9 {9 9 9 9 9 $: L: $l: : : :  ; 0; X; t; ; ; ; < < $5< P< ' `< < <  < $= K= h= {= =  = =   =  > 7> H> X> > > ? (? # `? ? ? ? @ "@ # <@  # t@ @  @ @  $A VA iA  $|A A  A N3  A A (B  $IB eB $oB $B B $B B C 0C DC dC C  $C C C $C  C D 8D FD D dD pD D B D 0C DC dC C  D D # D ` E E  ,E \E E E E E E  hE F 7F  E LF uF hF F F F G G =G WG fG vG G G G WG G G H @H # `H H , H H  I  KI hTI I I I J J 6J HJ PJ xJ J J J J J HJ K /K J ?K MK + dK K K hK K dK L L $L HL TL dL ~L $L L L M ,M # PM M E M M hM M N 0N - M ON dN M N  N N N  +O  # 6O @O xO N O hM O O M &P 8P TP xP  P P P P Q %Q 8Q FQ dQ Q Q u  Q + Q Q Q R /R LR \R R ' R R S ,S 6S GS XS S $S S T $4T pT T T T $T T $GS (U pU $fxU $U pU $V [ V[ #( d[ [ [ [  [ \ A\ L\ X\ \ \  \  ] 2] D] l] ] ] ] ]  ^ .^ - H^  d^ ^ ^ h^ ^   ^  ^  *_ <_ d_ _ h_ _ h' _ <_ h' _ ` .` h:` hT` _ :` y` 2] ` ` ` # 0a Za  xpa a a a a b # b  ?b Ub  db - WG b b # b b c b c $c 4c ^ hc hc c c  ' 2] c c  d $d  h3d Hd kd  d  ) c  d ' d d d d 0e he  xe e e e   e %f 7f X\ Hf uf f hf  f f  g g Mg #( Vg  lg g g g g # WG  h Dh fh zh h  h h  h i ' i Pi |i i hi i i i c '  j h'j h ;j Tj hj h j j hj k k $k # Hk  xk k k k k l l +6 /l  =l Pl ]l ll  Pl l l l hm ;m Tm  cm xm m m m WG n   $| M h   h c   h; f X *_ | _  Դ   < k  ĵ   W l    w  I b t   h  ( J Z p  Ǹ c   Z  4 T      I  M < u   غ  / H {  ƻ  f  ܻ ƻ -  D d    м &   D d      Ͻ   W  8 X $d   ľ   0 T x     , h P t    T   ( L   $ $, F X f s          , = X   f   w     `  0 h     $   8 \  2] ^   h  , L |   ,S   6 D p    ( \  2] ^  h   H h  6   , \ {    6  ( T |     H |     8       1 H f h |    5 H     Y i x     W L  X h   W  8  X ,S     4 ] p     <         4 v     L  G      , P  '     -  ,  p      4 t     H      & 4 hv   h  c   < l 2] z  l   A   l hD |      7  P  w         $  8     ( d    < d    ( P   | M     h+ 1  @ x 2]     F G 8 f C U WG l     9 O d    h   + h > T        h P       _ J  . < D   $O ` 2] ^   h h T    $ X  ,S  WG  8 p   ( 2] ^ h h   $ d    T    p   P |   0 t     $BN f t     h  # t ' , t P x   -    T hc       T  " $/ $BL f     ( H q       "  # 8   H l | #       ,S $ # @ `  > WG    ,S  h/ 9 {  F \ p      h 7 T {      0 T # x      D a ,S $ hk t  WG  #      * = P Ȏ   , h   x    $   @ f     ƌ   # H , < P b |       h H    P   | M     9 8D G  \      0 $P g p       , H h  b        @ u       $  S a v   $ C  C D 8D FD D    # 8 T t  0C DC     D   : P      <    q #(    TI I    , d #(  ,     ; R e         5 D F `       F 4 h    f    4 V s       F     5 P      w F   #( M     4  s 7 R ] u        6 P ~      -  L        % F 3 L u   X      9 P s       h 5 ( G ^ x       F  ?  Z h  F      9 P s       h 5 < G \       F    6 ` H p          < h  Q  2]   WG  _   hD  l  WG    M `   WG     @ b WG u    _   h  x  L      ( f   9    -        4 H k {    h  - 3 D h       8 4 b  v   -     9  ! &! - @! d!    x! ! ! ! ! _ ! h! !  " ." _ 4" hI" $`" " " " " " # =# W# 2]  q# WG # # # # # \E # $ $ h)$ D$ c$ s$ $ $  $ $ $  $ $ $   % h% \E &% <% m% |% % % % % % % % %  & #& 0& H =& $ c$ s$ $ $  $ $ $  $ $ $   % Z& h& & WG & h& & h' % 7' K' `' ' f ' ' ' ( ( H +( ?( H( o( ~( ( c ( ( ( ( ( ( ( m% 0) `) ) ) ) * *  * @* d* h* * G * * 2] + + WG 1+ D+ d+ + + + + + h, ,  <, [, ) * *  x, , d* x, , , , - .- H- hb- t- - - - F - - h. - @. hi. ~. . . . . / ?/ M/ \/ u i/ |/ / / / / / f / /  0 70 H0 l0 0 0 0 0 (  1 %1  +O  81 G1 +O  W1 g1 y1 - 1 . 1 h1 . 2 12 92 K2 _2 |2 -  . 2 @. h2 ~. h2 - .  2 2 3 43 D3 u  f3 p3 c 3 '  3 3 h3  3 3  ,4  \4 ` 2] + 4 4 _ 4 b4 F 4 `  5  5 > ' P5 w5 5 5 F 5 5 h5 5 5 6 86 b6 x6 6 6 6 6 6 7 <7 c7 z7 7 7 7 7 7 8 ,8 O # H8 q8 $ # 8 8 _ 8 8 M 8 9 :9 # T9 n9 9 # 9 9  # 9 9 . :  : * 2] 4: d+ + `: : + : : .; G D;  .  R; p; 8; h; h2 ; ; ; ; 5 ; ; ; 2] + ; WG 1+ < 6< R< .    [< t< 8< < - < =    = M= c= |i s= h= 2] F = = = = > WG  > 8> h> > > > ? ,?  M? l? ? ? ? ?  ?  @ $@  _ 2] R@ D3 `@ w@ @ @ - @  @ @ A    A  PA  c A D3 2] A A w@ @ B WG B >B CB  XB  B B  hR@    A  B    C  @C lC yC C  C C   C  D ,D RD lD D D D D hD D u  E (E - IE QE nE u E  E E hE F 7F 2] F + HF WG 1+ XF > > |F ? ,?  F  ! _ F  F F h G  (G =G LG oG  |G hG G G $ G $H XH H H Pl H  I FI dI I I I J  J @J vJ J J J  # K K !K /K |i WG =K LK 5 \K lK K hK K hK hK F K K L L XL L G L L L L L L L L L M M M - )M FM ZM pM M  M M M N hN $N 5N DN TN 5 bN qN ~N N N N  M N hN (O #( TN qN UO jO O O O O O  &P @P hTP pP P P P P Q PQ Q Q Q Q WG Q  & R h&R { t Pt st t t t t t u $u Tu ju u u u u v xv 1v Jv bv 5 zv v v v v v w w hx Px yx LK x hx x ^ x & x  y L #y L ;y L Sy L ky M y  y x y Pl y y y z .z lC Lz fz ׋ z - z ' z w z z { { yx # K{  y 4 g{  { { @ } } } ~ ~ ~ H T Y m o          ' ; O c w   Œ ג ݒ     5 H     ȓ    H      I ג V d r      Õ ܕ ג  D p           4 t    ͗     ג    0 W  h y   ǘ   ( . E d  Й  4 l  ؚ  4 \      D {      ͜   ג      * 7 H   X      , T  b o         ֞       * : M N l M    ̟  M  , K d }   Ƞ    , E ^ w   ¡ ۡ    ( \       $ @ |     . =  L g w ג    ̤    6   M `   Х    (  K \    g    % D g e  x    ! 8 N  b l  ג    g  , I  f    ũ ܩ    5 @ p  ̪  < M b w     ˫ 5 Ϋ  ޫ    $ @ b     ̬    1 J a x  ˫     ԭ  L   خ  ( N   [ o }       P p   {      Ű ٰ p       M 1 D T M z   ӱ     3 I \ n w ~   T  Ȳ    !   3  ; T x   ϳ      8 X   ߴ  (   .  < H k    ǵ      ǵ * A  L P ` x x   ϳ      (  5  P t    ܷ  (    $ L s   w  и x   ϳ       8 `   ʹ й  $ J d    ͺ     I X  $ J d    q ͺ     Ż ϻ  L         L n   ļ      "  L @ T l     H    @ d    Ⱦ ݾ    H . L m   ¿ ۿ    - E P Y h        L 0 d      H @ |      4 X i p       4 @ ` X u    {          8 ^ s |         E \      ( : B  P u L      % 5 < w           T  D p    T   * H  h  x  x         3 H L    T l      0  [ l  @       $ H d       s   . @ Z k       M   M    7 L X M T w  M      ; O ^ l t  M T   M     ' = G 5 U ^   {      5    M T   , T  x             M ( < ` M    @ _ M |      M  4 t   , j M t     X  M   8 M p | m      M    M   2 L q    M   M p  m    /  M = M ^ M k       M    M = , G M e v      M p     / G [   m    [   # ? X t          M p   $ K b v      M p   z   9  X  M    M   z  Q l     L   M  D  M = X  M     ( J ^ p   M p    ޫ M z    L  ( d      M p  H ޫ M h z         ; L X       L  H g | L        , 8  K [ u      0 X y  M        .  C a  p 5 z  z       (   ( ; T r          *     > P _  w m     M    M   ( G c z        (  M  8 g  M         ( \      M   g  ޫ M z   L |   L     4 X      < h   h 5 M      M   7 M P    H t M     M (   M L S i 1        / L j  M T w      P  M  c w  ޫ M      M   $ O i M w     $ A ^ l   M  - ; L X h  M      " < P c y        - L @ Y d x   M     *  p p  M = D ^ M v         4 F Q  j z        F   7 H R  p  c x     M p    M   + M < J S   f x          8 \      M      M  8 L       5 L l  |   L     C \ p   L   C \ L    p  M = $ V  M g  + M       M   M p   <  M M  + ` M f  t        . < c s    . L     ) D L \          , L h  M p  m      *  M p 6 m A P i t  M p   M   z    4 L ( l   M     5  M p 1 L M Y j      M T     M 4 X z       ( X     M   H l    M p        F X      M p    $ F [  M p m |     $ ; \       M  E b ~    M p   M        D ` L  | ` 5  M =   M        1      P t s   5  M   M =    $ N i  x   M T  ^   M        T q       5  M p * C M ` M z U h M       M p   M `  - M H p  z       M p ;  M L m M    M =   M  M 0 z @ d       L M   0 h    L      M p 0 X M ` M z |        . @ L M  h          @ L M    M =    M T  M  M   M < o q  M T |   M i 4   M  H |   M ! 4! M d! ! ! 0" p" M " " " M # # H# M k# # # M   # M # M $$ 6$ B$ ]$ z$ t M $ $   & & '  ' ' ' ' %' -' 5' ;' C' K' Q' Y' Q_FULL_F q_fullQ_FULL_T!q_fullQ_EMPT_F !q_lenQ_EMPT_T q_lenQ_FULL_F q_e_fQ_FULL_T!q_fullQ_EMPT_F q_e_fQ_EMPT_T q_len  GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8)GCC: (GNU) 4.0.2 20051125 (Red Hat 4.0.2-8).symtab.strtab.shstrtab.interp.note.ABI-tag.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment#(( 1HHX7 ?Go^To||@c  l ܇H u$$ p<< { , P @P@B $ $( (0 08 8< <    & l  ԡ`A" 4.%(H|܇ $ <  P @P$ ( 0 8 <    &  ( *0 88 E& TȤ [0 q` }, 4 $ 8 O `PK& & & M  & &  $D' -" 6" ? G Ql/ Zn a?[ lk u7N ~`+ + @ + @ + + ' V + @F    3  +  + + #k -XV 6l =  F  OPP W HZ el u/ > p p   '  1  p $p (p ,p D 4p @q @8p @p  [B  0p "+` X1q 7 >Ī GȪ Nq Rq Tq ]q _q aq cq eq gq lsq yq Tof \v q Pmq w {[ )} q q q   q  Ֆ1 t j t# > & o .j 5q ? KSr ` j s} }Xr   r > B   5H Ԫ ت  s $s s ; N  v * 1  8` 9? E L` dT dZ` L` f (l tr 0y H  p@ < < 0  44 L ` (    \ <@ D @  ` 8s qO 4qW ; A Dr Ks Rt [vB c8 p  y.  ~   a` x 9    ք jD    u ( u (  s $K / 7K A7 N WI  bA# idg w֥  ߧy |   $ @ D Li H r L  'H 4  ` H q    $ 7$ / 9 - C M W .  _ /O g / q e0 z 1 2   3N c3 <4- i6 8b  8H  +9 J9 :e e:  =  ";  3E ! * d& 4 4HE > yHx D Ȟ G gT R Z ] ` i \Uw q x  U  hV XQ RXR X Y e      ,m p %xl      % -  7  ? Jo P   X 8 e , k  v  @  Ő  <     D  ѓO 1 QS = H    u  T * X 4 { C u P j ] 0 f 4 o ^8 z   h k u h 0 u 4 ~ 5 Ƨ  ǨS    թ ( 6 4 {| A P J  Z  g L n ij { Y<   2m s  -  1   } 0 0: ;@ Ej V8 _ g oM0 |}( 0 O{ l 6  q $I m 0   $ ( ]   (` (1<h& CN&  S ] h  tL }[ [ i| 6    <           & 1g2 ;  D M2 U4 ` g nn w G     8  C}    {     a % * @  c  @  PM    &* *D 2 4 8! D$ L&% V%  a'S q ) {+ - w/ H 80 32  ` @ @ < W><    JL  dw #6@ > L=  Ul8 ]& c6jS hdž u ~Q >  bs < "  & ad  d - vUn   js ,  ř - +g= GԈO P [ g q  z H_ #y   r `s OR   ; b 2   < }t  2 ,s F %1 .<z 8M @r KP Sm ]4 gL'k s2 v5 tQ  @X2%q A 2  +$   @P (s $ 7 )K!  y k ' .$A$, K S2 ^V gy s _B J  PI< 9 q 2 ( 4 b U5 0s O"    '@T20Th 9hs E. M V` Yg' _Ĥ l q9> {q  O  2   N< @  [2ds #  q Uf ?3" ̪ H !`z )i 1ښ1 9q =pv G T 8X= [ a~s kN xq ~y  9o & \t%  Le \$  + L  $ , :  X6 ' /W 8 BX8 K Q [~mD v( rF_ $  `  x $Ala  'm|0   = E  s r %z ,ls 8 BX Mk@ V  ^& p&  & (8 s  ZS  nC 5  r k  rs R4 #ڞ ,Ф 5 : C I3 V c i4s p x {;& #  VC q   k  G  ps `B   $ z & -Ъ 8 Bj[ L( X3!j ` e  o zuB] k k 3 $ MA  G 2 q " ih M(w Q&  ~  b  & /4 5u > Hq NgH W. ^ jF+ rT {s  & 2  ;_ n F7 ]e lg; ns U  3 + ?c 2 @K )  *ts 1D ;T GRM`, hV v: }: ( E^W   0 TO\ I  v 4  o] 8 z & '=8D / 4 7 : ?e K/  P1C \zs e+M tq zu 'M ^xs ( S / 7 < & >1  6s p% ,L 5G] M U"l [  f n3 t }9  z<   P G^ 'fs 2 N q    ( `zn / z` 8 5j A ^QD L @ T B{+ ` h  u   \O ).  (    fGY r  @I r  @F2 fN !M !9 !vs ! -!=!WE!2 O!l% W!+g! o!& y!O"" ~![E !_  !q !D ! !2 !Ÿ, !4!& !! !" " 4 " $"  ."Ğ 6"H ="= B"}BJ"2 S" Y"1 b"F k"C}" 4"& ""l "֊f "A " "mN "|s " "N "" , " "  "L ## #q #P #2/#- 8#T ?#2 J#( ]#j c#LA j#8 w# #DP#O R #'X # #W #9 #@ng #P#̤ #4#f#us # $1N $Z $,$ @$HM J$>c$cf  i$E q$V z$( $H $Q $  $l $ $ $k $¦K $X $q $ $k $ $ % %"#%i call_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST__completed.4577p.4576__do_global_dtors_auxframe_dummy__CTOR_END____DTOR_END____FRAME_END____JCR_END____do_global_ctors_auxy.tab.cyyrcsidEmbeddedinEventMaphas_iniyygrowstackspinlex.cin_commentIArgnoInliningnotquoteisalpha_isdigit_getwordgetinlineuninlinefollowdef_inlineseqnamesiseqnameReDiRectInlinerInline_stubc_addedc_trackedbuf.2859check_inlineIArg_contdo_directivec_code.3448lexcheck_nameNamesIArg_nst.3854hold.3852last.3851sym.clast_namesamenamesymtabsetonexusetallxuputtypexxchan_checkvars.cmaxcolnrgetglobalsetglobaldummy.2370dummy.2498main.cOperatorKeywordFunctionadd_ltlltl_filenvr_filePreCntPreProcpreprocessonlyout1SeedUsedPreArgexplainwarn_nn.3350ps_msc.cPsPrepspnoldepthTotStepsScalerpfdIProcLineRDMTLmaxxmesg.cn_remq_rema_snds_snda_rcvsa_sndsr_talkdifcolumnsdocolumnsflow.cbreakstackcur_sbreak_idRjumpslocalnew_elif_sequnless_seqhas_chanrefadd_elescape_elattach_escapemov_labcolonsinnermostwalk_atomicsched.cPriority_Sumsetlocalsformdumpsetparamstalkp_blockedis_blockedsilent_movespickprocaddsymboloneparamlastnever.3646run.cSeedE_CheckEscape_Checkeval_syncassignnonprogresspc_enabledEnabled1pangen1.cCode2aCode2bCode2cHead0HeaderHeader0Head1Addp0Addp1Addq0Addq1Addq11Addq2Addq3Addq4Addq5Code0R0R0aR0bCode1Code3R2R3R4R5R6R8aR8bR12ProtoSvMapLstSetacceptorsprogressorsnBitsTypesreverse_namesput_ptypedoglobaldohiddentc_predef_npput_pinitend_labslndo_initblogncasespangen2.cNvr1Pre0PreambleTailDfaXptuniqAllGlobalfprocreverse_procstm_predef_nptt_predef_npCfileputprocgenconditionalsfind_iddolenBBDDDocaseDetput_seqaddTpeTPET_sumcnt_seqTpeEPTtyp_seqhiddenT_musNngetNidvalTpeput_escpput_subpatch_atomicscan_seqmark_seqgetweightidenticalsamedeadsfindnextadvanceequiv_mergesprev_casenew_casenr_bupnrhopscheck_neededmulti_neededmulti_undodoforwardXZYZmaxYZYZcntCnTdobackwarddidcaselastfirstlab_transfermodifiercase_cacheput_elnested_unlessfind_targett_cycglob_argsBailoutdo_countruncountopcountpangen3.cfrstskipputnrcolputfnmlastfnmlastfromputfnm_flushdumpskiplastdefsymboliccomworkpangen4.ccheck_procpangen5.cfsm_tablemax_st_idcur_st_idFSM_DFSnew_dfsgood_deadeligiblecanfill_inpushbuildbsbfpopbuildbuild_stepFSM_MERGERFSM_ANArel_transtrans_freerel_statefsm_freeFSM_DELmkstateget_transFSM_EDGEana_stmntana_varana_seqguided.clastclaimwhichprocnewerfdlost_traildstep.cTjJtLastGotoSourcedTojumpSpecialDestedJumptoMopupFirstTimeillegalfilterbadCollectGuardsputCodebno.2396structs.cUnamesPnamesputUnamedo_samecpnnretrieveis_explicitpc_zpp.cpangen6.cin_recvAST_isiniAST_varname_def_indicesdef_usename_def_usecur_tAST_mutualAST_add_aliaschalcurAST_run_aliasAST_findrunastAST_par_chansAST_setcurAST_parachaliasAST_haschanAST_nrparAST_ordAST_otherchanlistAST_aliasesAST_indirectAST_ChangesAST_Roundname_AST_trackdef_relevantAST_relevantexpl_parexpl_varAST_relparAST_dorelevantrpnAST_procisrelevantAST_proc_isrelAST_scoutrunAST_tagrunsAST_reportAST_alwaysAST_edge_dumpAST_dfsAST_dumpAST_sendsAST_alfindAST_transAST_def_usecheck_sliceAST_dump_relrel_varsAST_suggestionsAST_preserveslicerAST_data_depAST_blockableAST_spreadAST_notrelevantAST_withchanAST_suspectAST_shouldconsiderFSM_criticalAST_ctrlAST_control_depAST_prelabelAST_criteriaAST_dominantAST_alias_analysisAST_hiddenshow_explAST_add_explicitexplicitAST_fp1AST_mk1AST_par_initAST_var_initbad_scratchmark_subgraphAST_pairAST_checkpairssubgraphact_domreachabilitysee_elseis_guardcurtailinit_domon.5174ndom.5173dom_perculatedom_forwardno_statereprosrc.cindenttl_parse.cprectl_factortl_formulabin_simplertl_leveltl_lex.ctl_getwordtl_followtl_lextl_main.chasuformcntuformtl_statstl_non_fataltl_trans.cMappedNodes_SetNodes_StackRed_cntLab_cntBaseStack_szdump_graphpush_stackpop_stackbuf.1603cnt.1602newnamehas_clausemk_grnmk_redlivenessfindgraphAddoutchouekaset_prefixfsm_transmkbuchidupSlistcatSlistfixinitngflattenDuplicatesdumpdumpbufnot_newexpand_gtl_buchi.cneversametransPrunefindstateDfshitsallnonxtcombinationcluttershowtransmergetransall_trans_matchall_buckybuckyballsmergestatesrev_transtcntprintstateclr_reachtl_mem.ceventfreelistreqtl_rewrt.ccanaddcanmarknodetl_cache.cstoredCacheHitsismatchCachesputboxgetchar@@GLIBC_2.0rem_labc_add_lociniteval_suba_statsIArgsqlenno_internalstrackvarsetxusccacheterseclose_sequnclutterdumpclaimprocadd_seqdeadvarmk_skipgensvmappslinerepro_proccolumnshas_enabledcast_valno_side_effectsset_laboptimizationsstrchr@@GLIBC_2.0unrem_Seqtail_addinlineonlyyystacksizeEtimeoutssetmtypesr_bufhookupany_opertl_clutterHave_claimnocastschedlookupc_splurgebb_or_ddpnoungetc@@GLIBC_2.0wrapupMH_DYNAMICwalk_structinteractivefsmu_synctl_Getcharaddtranstrapwonlyany_andSkip_claimfindlocputunamestl_yylvalgenaddqueuetbtl_emallocgenotheryyerrflagyysindexstrcmp@@GLIBC_2.0LastXdoqthhas_remoteusagenotabsdumpclaims_fp_hwyytextNparsgetsymc_trackisequaltl_verbosehas_typrunstmntsmergerfprintf@@GLIBC_2.0dumplocalverbosemulti_ovaltl_yylexfflush@@GLIBC_2.0export_astmstyytabledumpglobalstwocasesnot_claimunlink@@GLIBC_2.0rvoptlabtabcasing__fini_array_endtl_outunskipyyparseu_async__statlike_javano_wrapupyysslimyydefredpc_valuehas_badelsesymdumpc_structqhqmake__dso_handleRandqishiddennqsf_pid__libc_csu_finiseparatetcAST_trackputlegendana_srcyyvspputchar@@GLIBC_2.0yyrindexno_arrayssetpnametl_UnGetcharqtabis_skipgensrcfirstrowhashget_labprehinthas_labrdyWidth_setnochan_manipR14nnTotalevalindexcross_dstepsElcntfull_namecanonicaleventmapsystem@@GLIBC_2.0eventmapnrenablepstextplunk_c_declstl_errscpyfilehastracksputtypeputs@@GLIBC_2.0_initdoindentyywraphas_globaldumptabsetptypetl_yycharputarrowyysspchecktypemalloc@@GLIBC_2.0in_cachec_previewreleasenodeFatalrepro_srcprerusetl_yyerrorfscanf@@GLIBC_2.0scanf@@GLIBC_2.0glob_inlineltabwalk2_structoMHdo_unlessgetlocaltl_explainwithprocnameRvoussetvalhas_pcvalueputremotestepnumberisalnum_putnamestdout@@GLIBC_2.0stderr@@GLIBC_2.0interprintqlen_typeplunk_exprLval_structyynerrsc_chandumpgenheadersetutypetrackchanuseyyoutdepthXu_ListCaccesshas_randomdumpsrc__xstat@@GLIBC_2.0find_labrealreadpush_negationxspinplunk_inlineplunk_c_fctsyyvalhas_ioAll_Memcomplete_rendezfatalany_undotl_lookupcolboxAl_Elc_splurge_anyNidmake_atomicone_lfttime@@GLIBC_2.0has_sortedspit_recvsstart_claimremotelabNtimeoutsprep_inline_startDstepStartAST_storeq_is_synclimited_vishunteleyyssc_add_locloose_endsfgets@@GLIBC_2.0ismtypeqrecvcontextNextLabgenuniodo_varputstmnto_maxTvalBufqfullfputs@@GLIBC_2.0ini_structstrstr@@GLIBC_2.0Mparsonly_nxtdataflowc_add_deftl_terseownerCnt_fldsAST_slicenprocall_lftsputsrcrm_selfrefsseqlistannounceexpandnewstatesNamesNotAddedtmchanaccessemalloctyp_cktl_nnpushbreakcnt_mparshas_npsymvarTestOnlyfsm_printcheckvarDone_casettrev_escapealldonecheck_sequencehas_xurepro_subputpostludeyylenstrncmp@@GLIBC_2.0analyzeplunk_reverseprintmnon_fatal__fini_array_startputcodemk_explicitoFnamefputc@@GLIBC_2.0__libc_csu_initmatch_trailin_boundhas_remvarpickup_inlineputskipFnamevalidref__bss_startrel_usesr_mesgdolocaldump_structmaindo_locinitshas_codeproper_enablernstopcount_runsany_termyygindex__libc_start_main@@GLIBC_2.0has_provided__init_array_endc_wrappertfrees_trailhas_stackCanonicalStack_mxhas_stateclaimnrrealloc@@GLIBC_2.0any_runsstrcat@@GLIBC_2.0c_varMax_Redtyp2cdata_startGenCodeqhideretargetprintf@@GLIBC_2.0runnableyyinsetaccesscheck_param_count_finigetnodememcpy@@GLIBC_2.0has_lastPidisproctyperunfclose@@GLIBC_2.1__sysv_signal@@GLIBC_2.0tl_mainchannmfix_desttl_parseputpreludenr_errsstruct_nameyydebuggencodetablec_add_hiddenhuntstartstartpagepreprocessjump_etc__preinit_array_endSranddupnodenrRdysameformRval_structtranscache_statsfind_maxelcommentp_talkhas_unlessc_add_globinitexit@@GLIBC_2.0yydgotorepro_seqOkBreakatoi@@GLIBC_2.0rem_SeqExpand_OkstatcachedputpagesUniquejumpstepsremotevarfsm_tblbreak_destsscanf@@GLIBC_2.0_edata_IO_putc@@GLIBC_2.0_GLOBAL_OFFSET_TABLE_free@@GLIBC_2.0IsGuard_endwhorunsundostmntTstOnlycutoffevalyycheckuse_freeLeveltrackrunopen_seqmemset@@GLIBC_2.0R13stdin@@GLIBC_2.0tl_balancedprune_optsrem_varsetlocalisutype_isokR15anywherestrncpy@@GLIBC_2.0checkrunyylvalntimesno_printchnameLastStepseedyfopen@@GLIBC_2.1c_add_svm_lossMadeChoice__init_array_startqsendgetvalright_linkedput_uform_IO_stdin_usedDoDumpputgridreadyfind_inlineyylexgetunameyylhsrunsafesprintf@@GLIBC_2.0fwrite@@GLIBC_2.0Sym_typ__data_startany_lorspitbox_IO_getc@@GLIBC_2.0_Jv_RegisterClassessametrees__ctype_b_loc@@GLIBC_2.3dotagc_stateEnabled0__preinit_array_startc_add_stackdump_condpreconditionsetunameyyvsyycharMtypetargetntrailXgenaddprocall_nameslineno__gmon_start__yyerrorstrcpy@@GLIBC_2.0dumplabels