Thread overview
BUG FIX - thread-windows.zip
Sep 26, 2003
jhenzie
Sep 29, 2003
dickl
Sep 29, 2003
jhe
September 26, 2003
Attached is the version(windows) fix for the deadlocking problem. It seems to work as expected but I would apprciate review.

Cheers

Justin


September 29, 2003
Great find !
I've installed your code and things seem to be working just fine (and put
the gc code back to its orginal form)

I've also made a small modification to the thread code to allow threads
which have completed
to be restarted.
    In start()
        if (state != TS.INITIAL)
   becomes
        if (state != TS.INITIAL && state != TS.TERMINATED)

I've come to the conclusion that it is too dangerious to add a killThread
rountine with all the
locking that goes on with the gc routines.

I think thats about it for the thread issues

tnx for your help Justin

<jhenzie@mac.com> wrote in message news:bl2enp$2mcg$1@digitaldaemon.com...
> Attached is the version(windows) fix for the deadlocking problem. It seems
to
> work as expected but I would apprciate review.
>
> Cheers
>
> Justin
>
>
>



September 29, 2003
My pleasure, I am going to start working on some refinements to the threading model so I will make sure to keep you in the loop.

Justin

In article <bl9l7q$67q$1@digitaldaemon.com>, dickl says...
>
>Great find !
>I've installed your code and things seem to be working just fine (and put
>the gc code back to its orginal form)
>
>I've also made a small modification to the thread code to allow threads
>which have completed
>to be restarted.
>    In start()
>        if (state != TS.INITIAL)
>   becomes
>        if (state != TS.INITIAL && state != TS.TERMINATED)
>
>I've come to the conclusion that it is too dangerious to add a killThread
>rountine with all the
>locking that goes on with the gc routines.
>
>I think thats about it for the thread issues
>
>tnx for your help Justin
>
><jhenzie@mac.com> wrote in message news:bl2enp$2mcg$1@digitaldaemon.com...
>> Attached is the version(windows) fix for the deadlocking problem. It seems
>to
>> work as expected but I would apprciate review.
>>
>> Cheers
>>
>> Justin
>>
>>
>>
>
>
>begin 666 thread.d
>M+R\@0V]P>7)I9VAT("AC*2 R,# R(&)Y($1I9VET86P@36%R<PHO+R!!;&P@
>M4FEG:'1S(%)E<V5R=F5D"B\O('=R:71T96X@8GD@5V%L=&5R($)R:6=H= HO
>M+R!W=W<N9&EG:71A;&UA<G,N8V]M"@HO+V1E8G5G/71H<F5A9#L*"B\J(#T]
>M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T](%=I;C,R(#T]/3T]/3T]
>M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/2 J+PH*=F5R<VEO;B H5VEN,S(I
>M"GL*"FEM<&]R="!W:6YD;W=S.PH*97AT97)N("A7:6YD;W=S*2!A;&EA<R!U
>M:6YT("@J<W1D9G I*'9O:60@*BD["@IE>'1E<FX@*$,I"B @("!T:')E861?
>M:&1L(%]B96=I;G1H<F5A9&5X*'9O:60J('-E8W5R:71Y+"!U:6YT('-T86-K
>M7W-I>F4L"@ES=&1F<"!S=&%R=%]A9&1R+"!V;VED*B!A<F=L:7-T+"!U:6YT
>M(&EN:71F;&%G+ H)=&AR96%D7VED*B!T:')D861D<BD["@H*+R\@5&AI<R!I
>M<R!E<75I=F%L96YT('1O(&$@2$%.1$Q%(&9R;VT@=VEN9&]W<RYD"F%L:6%S
>M($A!3D1,12!T:')E861?:&1L.PH*86QI87,@=6EN="!T:')E861?:60["@IC
>M;&%S<R!4:')E861%<G)O<B Z($5R<F]R"GL*(" @('1H:7,H8VAA<EM=(',I
>M"B @("!["@ES=7!E<B@B5&AR96%D(&5R<F]R.B B('X@<RD["B @("!]"GT*
>M"F-L87-S(%1H<F5A9 I["B @("!T:&ES*"D*(" @('L*(" @('T*"B @("!T
>M:&ES*&EN=" H*F9P*2AV;VED("HI+"!V;VED("IA<F<I"B @("!["@ET:&ES
>M+F9P(#T@9G ["@ET:&ES+F%R9R ](&%R9SL*(" @('T*"B @("!T:&ES*&EN
>M="!D96QE9V%T92@I(&1G*0H@(" @>PH)=&AI<RYD9R ](&1G.PH@(" @?0H*
>M(" @('1H<F5A9%]H9&P@:&1L.PH@(" @=&AR96%D7VED(&ED.PH@(" @=F]I
>M9"H@<W1A8VM";W1T;VT["@H@(" @=F]I9"!S=&%R="@I"B @("!["@EI9B H
>M<W1A=&4@(3T@5%,N24Y)5$E!3" F)B!S=&%T92$]5%,N5$5234E.051%1"D*
>M"2 @("!E<G)O<B@B86QR96%D>2!S=&%R=&5D(BD["@H)<WEN8VAR;VYI>F5D
>M("AT:')E861,;V-K*0H)>PH)(" @(&9O<B H:6YT(&D@/2 P.R Q.R!I*RLI
>M"@D@(" @>PH)"6EF("AI(#T](&%L;%1H<F5A9',N;&5N9W1H*0H)"2 @("!E
>M<G)O<B@B=&]O(&UA;GD@=&AR96%D<R(I.PH)"6EF("@A86QL5&AR96%D<UMI
>M72D*"0E[(" @86QL5&AR96%D<UMI72 ]('1H:7,["@D)(" @(&ED>" ](&D[
>M"@D)(" @(&EF("AI(#X](&%L;%1H<F5A9'-$:6TI"@D)"6%L;%1H<F5A9'-$
>M:6T@/2!I("L@,3L*"0D@(" @8G)E86L["@D)?0H)(" @('T*"2 @("!N=&AR
>M96%D<RLK.PH)?0H*"7-T871E(#T@5%,N4E5.3DE.1SL*"6AD;" ](%]B96=I
>M;G1H<F5A9&5X*&YU;&PL(# L("9T:')E861S=&%R="P@=&AI<RP@,"P@)FED
>M*3L*"6EF("AH9&P@/3T@8V%S="AT:')E861?:&1L*3 I"@E[(" @<W1A=&4@
>M/2!44RY415)-24Y!5$5$.PH)(" @(&%L;%1H<F5A9'-;:61X72 ](&YU;&P[
>M"@D@(" @:61X(#T@+3$["@D@(" @97)R;W(H(F9A:6QE9"!T;R!S=&%R="(I
>M.PH)?0H@(" @?0H*(" @(&EN="!R=6XH*0H@(" @>PH):68@*&9P*0H)(" @
>M(')E='5R;B!F<"AA<F<I.PH)96QS92!I9B H9&<I"@D@(" @<F5T=7)N(&1G
>M*"D["B @("!]"@H@(" @=F]I9"!W86ET*"D*(" @('L*"6EF("AT:&ES(#T]
>M/2!G9714:&ES*"DI"@D@(" @97)R;W(H(G=A:70@;VX@<V5L9B(I.PH):68@
>M*'-T871E(#T](%13+E)53DY)3D<I"@E[(" @1%=/4D0@9'<["@H)(" @(&1W
>M(#T@5V%I=$9O<E-I;F=L94]B:F5C="AH9&PL(#!X1D9&1D9&1D8I.PH)?0H@
>M(" @?0H*(" @('9O:60@=V%I="AU:6YT(&UI;&QI<V5C;VYD<RD*(" @('L*
>M"6EF("AT:&ES(#T]/2!G9714:&ES*"DI"@D@(" @97)R;W(H(G=A:70@;VX@
>M<V5L9B(I.PH):68@*'-T871E(#T](%13+E)53DY)3D<I"@E[(" @1%=/4D0@
>M9'<["@H)(" @(&1W(#T@5V%I=$9O<E-I;F=L94]B:F5C="AH9&PL(&UI;&QI
>M<V5C;VYD<RD["@E]"B @("!]"@H@(" @96YU;2!44PH@(" @>PH)24Y)5$E!
>M3"P*"5)53DY)3D<L"@E415)-24Y!5$5$"B @("!]"@H@(" @5%,@9V5T4W1A
>M=&4H*0H@(" @>PH)<F5T=7)N('-T871E.PH@(" @?0H*(" @(&5N=6T@4%))
>M3U))5%D*(" @('L*"4E.0U)%05-%+ H)1$5#4D5!4T4L"@E)1$Q%+ H)0U))
>M5$E#04P*(" @('T*"B @("!V;VED('-E=%!R:6]R:71Y*%!224]22519(' I
>M"B @("!["@EI;G0@;E!R:6]R:71Y.PH*"7-W:71C:" H<"D*"7L*"2 @("!C
>M87-E(%!224]22519+DE.0U)%05-%.@H)"6Y0<FEO<FET>2 ](%1(4D5!1%]0
>M4DE/4DE465]!0D]615].3U)-04P["@D)8G)E86L["@D@(" @8V%S92!04DE/
>M4DE462Y$14-214%313H*"0EN4')I;W)I='D@/2!42%)%041?4%))3U))5%E?
>M0D5,3U=?3D]234%,.PH)"6)R96%K.PH)(" @(&-A<V4@4%))3U))5%DN241,
>M13H*"0EN4')I;W)I='D@/2!42%)%041?4%))3U))5%E?241,13L*"0EB<F5A
>M:SL*"2 @("!C87-E(%!224]22519+D-2251)0T%,.@H)"6Y0<FEO<FET>2 ]
>M(%1(4D5!1%]04DE/4DE465]424U%7T-2251)0T%,.PH)"6)R96%K.PH)?0H*
>M"6EF("A39714:')E8610<FEO<FET>2AH9&PL(&Y0<FEO<FET>2D@/3T@5$A2
>M14%$7U!224]225197T524D]27U)%5%523BD*"2 @("!E<G)O<B@B<V5T('!R
>M:6]R:71Y(BD["B @("!]"@H@(" @<W1A=&EC(%1H<F5A9"!G9714:&ES*"D*
>M(" @('L*"71H<F5A9%]I9"!I9#L*"51H<F5A9"!R97-U;'0["@H)+R]P<FEN
>M=&8H(F=E=%1H:7,H*2P@86QL5&AR96%D<T1I;2 ]("5D7&XB+"!A;&Q4:')E
>M861S1&EM*3L*"7-Y;F-H<F]N:7IE9" H=&AR96%D3&]C:RD*"7L*"2 @("!I
>M9" ]($=E=$-U<G)E;G14:')E861)9"@I.PH)(" @(&9O<B H:6YT(&D@/2 P
>M.R!I(#P@86QL5&AR96%D<T1I;3L@:2LK*0H)(" @('L*"0E4:')E860@=" ]
>M(&%L;%1H<F5A9'-;:5T["@D):68@*'0@)B8@:60@/3T@="YI9"D*"0E["@D)
>M(" @(')E='5R;B!T.PH)"7T*"2 @("!]"@E]"@EP<FEN=&8H(F1I9&XG="!F
>M:6YD(&ET7&XB*3L*"6%S<V5R="AR97-U;'0I.PH)<F5T=7)N(')E<W5L=#L*
>M(" @('T*"B @("!S=&%T:6,@5&AR96%D6UT@9V5T06QL*"D*(" @('L*"7)E
>M='5R;B!A;&Q4:')E861S6S @+BX@86QL5&AR96%D<T1I;5T["B @("!]"@H@
>M(" @=F]I9"!P875S92@I"B @("![(" @"@EI9B H<W1A=&4@(3T@5%,N4E5.
>M3DE.1R!\?"!3=7-P96YD5&AR96%D*&AD;"D@/3T@,'A&1D9&1D9&1BD*"2 @
>M("!E<G)O<B@B8V%N;F]T('!A=7-E(BD["B @("!]"@H@(" @=F]I9"!R97-U
>M;64H*0H@(" @>PH):68@*'-T871E("$](%13+E)53DY)3D<@?'P@4F5S=6UE
>M5&AR96%D*&AD;"D@/3T@,'A&1D9&1D9&1BD*"2 @("!E<G)O<B@B8V%N;F]T
>M(')E<W5M92(I.PH@(" @?0H*(" @('-T871I8R!V;VED('!A=7-E06QL*"D*
>M(" @('L*"6EF("AN=&AR96%D<R ^(#$I"@E["@D@(" @5&AR96%D('1T:&ES
>M(#T@9V5T5&AI<R@I.PH*"2 @("!F;W(@*&EN="!I(#T@,#L@:2 \(&%L;%1H
>M<F5A9'-$:6T[(&DK*RD*"2 @("![(" @5&AR96%D('0["@H)"70@/2!A;&Q4
>M:')E861S6VE=.PH*"0EI9B H=" F)B!T("$]/2!T=&AI<R F)B!T+G-T871E
>M(#T](%13+E)53DY)3D<I"@D)(" @('0N<&%U<V4H*3L*"2 @("!]"@E]"B @
>M("!]"@H@(" @<W1A=&EC('9O:60@<F5S=6UE06QL*"D*(" @('L*"6EF("AN
>M=&AR96%D<R ^(#$I"@E["@D@(" @5&AR96%D('1T:&ES(#T@9V5T5&AI<R@I
>M.PH*"2 @("!F;W(@*&EN="!I(#T@,#L@:2 \(&%L;%1H<F5A9'-$:6T[(&DK
>M*RD*"2 @("![(" @5&AR96%D('0["@H)"70@/2!A;&Q4:')E861S6VE=.PH)
>M"6EF("AT("8F('0@(3T]('1T:&ES("8F('0N<W1A=&4@/3T@5%,N4E5.3DE.
>M1RD*"0D@(" @="YR97-U;64H*3L*"2 @("!]"@E]"B @("!]"@H@(" @<W1A
>M=&EC('9O:60@>6EE;&0H*0H@(" @>PH)4VQE97 H,"D["B @("!]"B @(" *
>M(" @('-T871I8R!U:6YT(&YT:')E861S(#T@,3L*"B @<')I=F%T93H*"B @
>M("!S=&%T:6,@=6EN="!A;&Q4:')E861S1&EM.PH@(" @<W1A=&EC($]B:F5C
>M="!T:')E861,;V-K.PH@(" @<W1A=&EC(%1H<F5A9%LP>#0P,%T@86QL5&AR
>M96%D<SL)+R\@;&5N9W1H(&UA=&-H97,@=F%L=64@:6X@0R!R=6YT:6UE"@H@
>M(" @5%,@<W1A=&4["B @("!I;G0@:61X(#T@+3$["0D)+R\@:6YD97@@:6YT
>M;R!A;&Q4:')E861S6UT*"B @("!I;G0@*"IF<"DH=F]I9" J*3L*(" @('9O
>M:60@*F%R9SL*"B @("!I;G0@9&5L96=A=&4H*2!D9SL*"B @("!V;VED(&5R
>M<F]R*&-H87);72!M<V<I"B @("!["@ET:')O=R!N97<@5&AR96%D17)R;W(H
>M;7-G*3L*(" @('T*"@H@(" @+RHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
>M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*@H@(" @("H@5&AI<R!I<R!J=7-T(&$@
>M=W)A<'!E<B!T;R!I;G1E<F9A8V4@8F5T=V5E;B!#(')T;"!A;F0@5&AR96%D
>M+G)U;B@I+@H@(" @("HO"@H@(" @97AT97)N("A7:6YD;W=S*2!S=&%T:6,@
>M=6EN="!T:')E861S=&%R="AV;VED("IP*0H@(" @>PH)5&AR96%D('0@/2!C
>M87-T*%1H<F5A9"EP.PH):6YT(')E<W5L=#L*"@ED96)U9R H=&AR96%D*2!P
>M<FEN=&8H(E-T87)T:6YG('1H<F5A9" E9%QN(BP@="YI9'@I.PH)="YS=&%C
>M:T)O='1O;2 ](&]S7W%U97)Y7W-T86-K0F]T=&]M*"D["@ET<GD*"7L*"2 @
>M("!R97-U;'0@/2!T+G)U;B@I.PH)?0H)8V%T8V@@*$]B:F5C="!O*0H)>PH)
>M(" @('!R:6YT9B@B17)R;W(Z("(I.PH)(" @(&\N<')I;G0H*3L*"2 @("!R
>M97-U;'0@/2 Q.PH)?0H*"61E8G5G("AT:')E860I('!R:6YT9B@B16YD:6YG
>M('1H<F5A9" E9%QN(BP@="YI9'@I.PH)="YS=&%T92 ](%13+E1%4DU)3D%4
>M140["@EA;&Q4:')E861S6W0N:61X72 ](&YU;&P["@ET+FED>" ]("TQ.PH)
>M;G1H<F5A9',M+3L*"7)E='5R;B!R97-U;'0["B @("!]"@H*(" @("\J*BHJ
>M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*@H@(" @("H@0W)E
>M871E(&$@5&AR96%D(&9O<B!G;&]B86P@;6%I;B@I+@H@(" @("HO"@H@(" @
>M<W1A=&EC('1H:7,H*0H@(" @>PH)=&AR96%D3&]C:R ](&YE=R!/8FIE8W0H
>M*3L*"@E4:')E860@=" ](&YE=R!4:')E860H*3L*"@ET+G-T871E(#T@5%,N
>M4E5.3DE.1SL*"70N:60@/2!'971#=7)R96YT5&AR96%D260H*3L*(" @(" @
>M("!T+FAD;" ](%1H<F5A9"YG971#=7)R96YT5&AR96%D2&%N9&QE*"D["B @
>M(" @(" @="YS=&%C:T)O='1O;2 ](&]S7W%U97)Y7W-T86-K0F]T=&]M*"D[
>M"@D*(" @(" @("!S>6YC:')O;FEZ960@*'1H<F5A9$QO8VLI"@E["@D@(" @
>M87-S97)T*"%A;&Q4:')E861S6S!=*3L*"2 @("!A;&Q4:')E861S6S!=(#T@
>M=#L*"2 @("!A;&Q4:')E861S1&EM(#T@,3L*"2 @("!T+FED>" ](# ["@E]
>M"B @("!]"@H@(" @('-T871I8R!^=&AI<R@I('L*(" @(" @(" @($-L;W-E
>M2&%N9&QE*&%L;%1H<F5A9'-;,%TN:&1L*3L*(" @("!]"B @(" @(" @(" *
>M(" @("\J*@H@(" @("H@4F5T=7)N<R!T:&4@:&%N9&QE(&]F('1H92!C=7)R
>M96YT('1H<F5A9 H@(" @("H@5&AE(')E='5R;F5D('1H<F5A9"!H86YD;&4@
>M:7,@82!W:6YD;W=S(')E<V]U<F-E(&%N9"!M=7-T(&)E(&5X<&QI8VET;'D*
>M(" @(" J(&-L;W-E9"X*(" @(" J+PH@(" @('-T871I8R!T:')E861?:&1L
>M(&=E=$-U<G)E;G14:')E861(86YD;&4H*2!["B @(" @(" @(" *(" @(" @
>M(" @('1H<F5A9%]H9&P@8W5R<F5N=%1H<F5A9" ]($=E=$-U<G)E;G14:')E
>M860H*3L*(" @(" @(" @('1H<F5A9%]H9&P@86-T=6%L5&AR96%D2&%N9&QE
>M.PH@(" @(" @(" @=&AR96%D7VAD;"!C=7)R96YT4')O8V5S<R ](&-A<W0H
>M=&AR96%D7VAD;"DM,3L*"B @(" @(" @("!U:6YT(&%C8V5S<R ](&-A<W0H
>M=6EN="DP># P,# P,# R.PH*(" @(" @(" @($1U<&QI8V%T94AA;F1L92AC
>M=7)R96YT4')O8V5S<RP@8W5R<F5N=%1H<F5A9"P@8W5R<F5N=%!R;V-E<W,L
>M"B @(" @(" @(" @(" @(" @(" @(" @(" @)F%C='5A;%1H<F5A9$AA;F1L
>M92P@8V%S="AU:6YT*3 L(%12544L(&%C8V5S<RD["@H@(" @(" @(" @<F5T
>M=7)N(&%C='5A;%1H<F5A9$AA;F1L93L*(" @("!]"GT*"@HO*BHJ*BHJ*BHJ
>M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*@H@*B!$971E
>M<FUI;F4@(F)O='1O;2(@;V8@<W1A8VL@*&%C='5A;&QY('1H92!T;W @;VX@
>M5VEN,S(@<WES=&5M<RDN"B J+PH*=F]I9" J;W-?<75E<GE?<W1A8VM";W1T
>M;VTH*0I["B @("!A<VT*(" @('L*"6YA:V5D"0D).PH);6]V"45!6"Q&4SHT
>M"3L*"7)E= D)"3L*(" @('T*?0H*?0H*+RH@/3T]/3T]/3T]/3T]/3T]/3T]
>M/3T]/3T]/3T]/3T]/3T@;&EN=7@@/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
>M/3T]/3T]/3T]("HO"@IV97)S:6]N("AL:6YU>"D*>PH*:6UP;W)T(&QI;G5X
>M.PII;7!O<G0@;&EN=7AE>'1E<FX["@IA;&EA<R!U:6YT('!T:')E861?=#L*
>M97AT97)N("A#*2!A;&EA<R!V;VED("@J7U]S:6=H86YD;&5R7W0I*&EN="D[
>M"@IS=')U8W0@<VEG<V5T7W0*>PH@(" @=6EN="!?7W9A;%LQ,#(T("\@*#@@
>M*B!U:6YT+G-I>F4I73L*?0H*<W1R=6-T('-I9V%C=&EO;E]T"GL*(" @(%]?
>M<VEG:&%N9&QE<E]T('-A7VAA;F1L97(["B @("!S:6=S971?="!S85]M87-K
>M.PH@(" @:6YT('-A7V9L86=S.PH@(" @=F]I9" H*G-A7W)E<W1O<F5R*2@I
>M.PI]"@IS=')U8W0@7W!T:')E861?9F%S=&QO8VL*>PH@(" @:6YT(%]?<W1A
>M='5S.PH@(" @:6YT(%]?<W!I;FQO8VL["GT*"G-T<G5C="!S96U?= I["B @
>M("!?<'1H<F5A9%]F87-T;&]C:R!?7W-E;5]L;V-K.PH@(" @:6YT(%]?<V5M
>M7W9A;'5E.PH@(" @=F]I9"H@7U]S96U?=V%I=&EN9SL*?0H*=6YI='1E<W0*
>M>PH@(" @87-S97)T*'-I9W-E=%]T+G-I>F4@(#T](#$R."D["B @("!A<W-E
>M<G0H<VEG86-T:6]N7W0N<VEZ92 ]/2 Q-# I.PH@(" @87-S97)T*'-E;5]T
>M+G-I>F4@/3T@,38I.PI]"@IE>'1E<FX@*$,I"GL*(" @(&EN="!P=&AR96%D
>M7V-R96%T92AP=&AR96%D7W0J+"!V;VED*BP@=F]I9"H@*"HI*'9O:60J*2P@
>M=F]I9"HI.PH@(" @:6YT('!T:')E861?:F]I;BAP=&AR96%D7W0L('9O:60J
>M*BD["B @("!I;G0@<'1H<F5A9%]K:6QL*'!T:')E861?="P@:6YT*3L*(" @
>M('!T:')E861?="!P=&AR96%D7W-E;&8H*3L*(" @(&EN="!P=&AR96%D7V5Q
>M=6%L*'!T:')E861?="P@<'1H<F5A9%]T*3L*(" @(&EN="!S96U?=V%I="AS
>M96U?="HI.PH@(" @:6YT('-E;5]I;FET*'-E;5]T*BP@:6YT+"!U:6YT*3L*
>M(" @(&EN="!S96U?<&]S="AS96U?="HI.PH@(" @:6YT('-C:&5D7WEI96QD
>M*"D["B @("!I;G0@<VEG9FEL;'-E="AS:6=S971?="HI.PH@(" @:6YT('-I
>M9V1E;'-E="AS:6=S971?="HL(&EN="D["B @("!I;G0@<VEG86-T:6]N*&EN
>M="P@<VEG86-T:6]N7W0J+"!S:6=A8W1I;VY?="HI.PH@(" @:6YT('-I9W-U
>M<W!E;F0H<VEG<V5T7W0J*3L*?0H*8VQA<W,@5&AR96%D17)R;W(@.B!%<G)O
>M<@I["B @("!T:&ES*&-H87);72!S*0H@(" @>PH)<W5P97(H(E1H<F5A9"!E
>M<G)O<CH@(B!^(',I.PH@(" @?0I]"@IC;&%S<R!4:')E860*>PH@(" @=&AI
>M<R@I"B @("!["B @("!]"@H@(" @=&AI<RAI;G0@*"IF<"DH=F]I9" J*2P@
>M=F]I9" J87)G*0H@(" @>PH)=&AI<RYF<" ](&9P.PH)=&AI<RYA<F<@/2!A
>M<F<["B @("!]"@H@(" @=&AI<RAI;G0@9&5L96=A=&4H*2!D9RD*(" @('L*
>M"71H:7,N9&<@/2!D9SL*(" @('T*"B @("!P=&AR96%D7W0@:60["B @("!V
>M;VED*B!S=&%C:T)O='1O;3L*(" @('9O:60J('-T86-K5&]P.PH*(" @('9O
>M:60@<W1A<G0H*0H@(" @>PH):68@*'-T871E("$](%13+DE.251)04P@)B8@
>M<W1A=&4A/513+E1%4DU)3D%4140I"@D@(" @97)R;W(H(F%L<F5A9'D@<W1A
>M<G1E9"(I.PH*"7-Y;F-H<F]N:7IE9" H=&AR96%D3&]C:RD*"7L*"2 @("!F
>M;W(@*&EN="!I(#T@,#L@,3L@:2LK*0H)(" @('L*"0EI9B H:2 ]/2!A;&Q4
>M:')E861S+FQE;F=T:"D*"0D@(" @97)R;W(H(G1O;R!M86YY('1H<F5A9',B
>M*3L*"0EI9B H(6%L;%1H<F5A9'-;:5TI"@D)>R @(&%L;%1H<F5A9'-;:5T@
>M/2!T:&ES.PH)"2 @("!I9'@@/2!I.PH)"2 @("!I9B H:2 ^/2!A;&Q4:')E
>M861S1&EM*0H)"0EA;&Q4:')E861S1&EM(#T@:2 K(#$["@D)(" @(&)R96%K
>M.PH)"7T*"2 @("!]"@D@(" @;G1H<F5A9',K*SL*"7T*"@ES=&%T92 ](%13
>M+E)53DY)3D<["@EI;G0@<F5S=6QT.PH)+R]P<FEN=&8H(F-R96%T:6YG('1H
>M<F5A9"!X)7A<;B(L('1H:7,I.PH)<F5S=6QT(#T@<'1H<F5A9%]C<F5A=&4H
>M)FED+"!N=6QL+" F=&AR96%D<W1A<G0L('1H:7,I.PH):68@*')E<W5L="D*
>M"7L@("!S=&%T92 ](%13+E1%4DU)3D%4140["@D@(" @86QL5&AR96%D<UMI
>M9'A=(#T@;G5L;#L*"2 @("!I9'@@/2 M,3L*"2 @("!E<G)O<B@B9F%I;&5D
>M('1O('-T87)T(BD["2\O($)51SH@<VAO=6QD(')E<&]R="!E<G)N;PH)?0H)
>M+R]P<FEN=&8H(G0@/2!X)7@L(&ED(#T@)61<;B(L('1H:7,L(&ED*3L*(" @
>M('T*"B @("!I;G0@<G5N*"D*(" @('L*"6EF("AF<"D*"2 @("!R971U<FX@
>M9G H87)G*3L*"65L<V4@:68@*&1G*0H)(" @(')E='5R;B!D9R@I.PH@(" @
>M?0H*(" @('9O:60@=V%I="@I"B @("!["@EI9B H=&AI<R ]/3T@9V5T5&AI
>M<R@I*0H)(" @(&5R<F]R*")W86ET(&]N('-E;&8B*3L*"6EF("AS=&%T92 ]
>M/2!44RY254Y.24Y'*0H)>R @(&EN="!R97-U;'0["@D@(" @=F]I9" J=F%L
>M=64["@H)(" @(')E<W5L=" ]('!T:')E861?:F]I;BAI9"P@)G9A;'5E*3L*
>M"2 @("!I9B H<F5S=6QT*0H)"65R<F]R*")F86EL960@=&\@=V%I="(I.PH)
>M?0H@(" @?0H*(" @('9O:60@=V%I="AU:6YT(&UI;&QI<V5C;VYD<RD*(" @
>M('L*"7=A:70H*3L*"2\K(&YO="!I;7!L96UE;G1E9 H):68@*'1H:7,@/3T]
>M(&=E=%1H:7,H*2D*"2 @("!E<G)O<B@B=V%I="!O;B!S96QF(BD["@EI9B H
>M<W1A=&4@/3T@5%,N4E5.3DE.1RD*"7L@("!$5T]21"!D=SL*"@D@(" @9'<@
>M/2!786ET1F]R4VEN9VQE3V)J96-T*&AD;"P@;6EL;&ES96-O;F1S*3L*"7T*
>M"2LO"B @("!]"@H@(" @96YU;2!44PH@(" @>PH)24Y)5$E!3"P*"5)53DY)
>M3D<L"@E415)-24Y!5$5$"B @("!]"@H@(" @5%,@9V5T4W1A=&4H*0H@(" @
>M>PH)<F5T=7)N('-T871E.PH@(" @?0H*(" @(&5N=6T@4%))3U))5%D*(" @
>M('L*"4E.0U)%05-%+ H)1$5#4D5!4T4L"@E)1$Q%+ H)0U))5$E#04P*(" @
>M('T*"B @("!V;VED('-E=%!R:6]R:71Y*%!224]22519(' I"B @("!["@DO
>M*R!N;W0@:6UP;&5M96YT960*"6EN="!N4')I;W)I='D["@H)<W=I=&-H("AP
>M*0H)>PH)(" @(&-A<V4@4%))3U))5%DN24Y#4D5!4T4Z"@D);E!R:6]R:71Y
>M(#T@5$A214%$7U!224]225197T%"3U9%7TY/4DU!3#L*"0EB<F5A:SL*"2 @
>M("!C87-E(%!224]22519+D1%0U)%05-%.@H)"6Y0<FEO<FET>2 ](%1(4D5!
>M1%]04DE/4DE465]"14Q/5U].3U)-04P["@D)8G)E86L["@D@(" @8V%S92!0
>M4DE/4DE462Y)1$Q%.@H)"6Y0<FEO<FET>2 ](%1(4D5!1%]04DE/4DE465])
>M1$Q%.PH)"6)R96%K.PH)(" @(&-A<V4@4%))3U))5%DN0U))5$E#04PZ"@D)
>M;E!R:6]R:71Y(#T@5$A214%$7U!224]225197U1)345?0U))5$E#04P["@D)
>M8G)E86L["@E]"@H):68@*%-E=%1H<F5A9%!R:6]R:71Y*&AD;"P@;E!R:6]R
>M:71Y*2 ]/2!42%)%041?4%))3U))5%E?15)23U)?4D5455).*0H)(" @(&5R
>M<F]R*")S970@<')I;W)I='DB*3L*"2LO"B @("!]"@H@(" @:6YT(&ES4V5L
>M9B@I"B @("!["@DO+W!R:6YT9B@B:60@/2 E9"P@<V5L9B ]("5D7&XB+"!I
>M9"P@<'1H<F5A9%]S96QF*"DI.PH)<F5T=7)N('!T:')E861?97%U86PH<'1H
>M<F5A9%]S96QF*"DL(&ED*3L*(" @('T*"B @("!S=&%T:6,@5&AR96%D(&=E
>M=%1H:7,H*0H@(" @>PH)<'1H<F5A9%]T(&ED.PH)5&AR96%D(')E<W5L=#L*
>M"@DO+W!R:6YT9B@B9V5T5&AI<R@I+"!A;&Q4:')E861S1&EM(#T@)61<;B(L
>M(&%L;%1H<F5A9'-$:6TI.PH)<WEN8VAR;VYI>F5D("AT:')E861,;V-K*0H)
>M>PH)(" @(&ED(#T@<'1H<F5A9%]S96QF*"D["@D@(" @+R]P<FEN=&8H(FED
>M(#T@)61<;B(L(&ED*3L*"2 @("!F;W(@*&EN="!I(#T@,#L@:2 \(&%L;%1H
>M<F5A9'-$:6T[(&DK*RD*"2 @("!["@D)5&AR96%D('0@/2!A;&Q4:')E861S
>M6VE=.PH)"2\O<')I;G1F*")A;&Q4:')E861S6R5D72 ]('@E>"P@:60@/2 E
>M9%QN(BP@:2P@="P@*'0@/R!T+FED(#H@,"DI.PH)"6EF("AT("8F('!T:')E
>M861?97%U86PH:60L('0N:60I*0H)"7L*"0D@(" @<F5T=7)N('0["@D)?0H)
>M(" @('T*"7T*"7!R:6YT9B@B9&ED;B=T(&9I;F0@:71<;B(I.PH)87-S97)T
>M*')E<W5L="D["@ER971U<FX@<F5S=6QT.PH@(" @?0H*(" @('-T871I8R!4
>M:')E861;72!G971!;&PH*0H@(" @>PH)<F5T=7)N(&%L;%1H<F5A9'-;," N
>M+B!A;&Q4:')E861S1&EM73L*(" @('T*"B @("!V;VED('!A=7-E*"D*(" @
>M('L*"6EF("AS=&%T92 ]/2!44RY254Y.24Y'*0H)>R @(&EN="!R97-U;'0[
>M"@H)(" @(')E<W5L=" ]('!T:')E861?:VEL;"AI9"P@4TE'55-2,2D["@D@
>M(" @:68@*')E<W5L="D*"0EE<G)O<B@B8V%N;F]T('!A=7-E(BD["@D@(" @
>M96QS90H)"7-E;5]W86ET*"9F;&%G4W5S<&5N9"D["2\O('=A:70@9F]R(&%C
>M:VYO=VQE9&=E;65N= H)?0H)96QS90H)(" @(&5R<F]R*")C86YN;W0@<&%U
>M<V4B*3L*(" @('T*"B @("!V;VED(')E<W5M92@I"B @("!["@EI9B H<W1A
>M=&4@/3T@5%,N4E5.3DE.1RD*"7L@("!I;G0@<F5S=6QT.PH*"2 @("!R97-U
>M;'0@/2!P=&AR96%D7VMI;&PH:60L(%-)1U534C(I.PH)(" @(&EF("AR97-U
>M;'0I"@D)97)R;W(H(F-A;FYO="!R97-U;64B*3L*"7T*"65L<V4*"2 @("!E
>M<G)O<B@B8V%N;F]T(')E<W5M92(I.PH@(" @?0H*(" @('-T871I8R!V;VED
>M('!A=7-E06QL*"D*(" @('L*"6EF("AN=&AR96%D<R ^(#$I"@E["@D@(" @
>M5&AR96%D('1T:&ES(#T@9V5T5&AI<R@I.PH)(" @(&EN="!N<&%U<V4@/2 P
>M.PH*"2 @("!F;W(@*&EN="!I(#T@,#L@:2 \(&%L;%1H<F5A9'-$:6T[(&DK
>M*RD*"2 @("![(" @5&AR96%D('0["@H)"70@/2!A;&Q4:')E861S6VE=.PH)
>M"6EF("AT("8F('0@(3T]('1T:&ES("8F('0N<W1A=&4@/3T@5%,N4E5.3DE.
>M1RD*"0E[(" @:6YT(')E<W5L=#L*"@D)(" @(')E<W5L=" ]('!T:')E861?
>M:VEL;"AT+FED+"!324=54U(Q*3L*"0D@(" @:68@*')E<W5L="D*"0D)9V5T
>M5&AI<R@I+F5R<F]R*")C86YN;W0@<&%U<V4B*3L*"0D@(" @96QS90H)"0EN
>M<&%U<V4K*SL)+R\@8V]U;G0@;V8@<&%U<V5D('1H<F5A9',*"0E]"@H)"2\O
>M(%=A:70@9F]R(&5A8V@@<&%U<V5D('1H<F5A9"!T;R!A8VMN;W=L961G90H)
>M"7=H:6QE("AN<&%U<V4M+2D*"0E["@D)(" @('-E;5]W86ET*"9F;&%G4W5S
>M<&5N9"D["@D)?0H)(" @('T*"7T*(" @('T*"B @("!S=&%T:6,@=F]I9"!R
>M97-U;65!;&PH*0H@(" @>PH):68@*&YT:')E861S(#X@,2D*"7L*"2 @("!4
>M:')E860@='1H:7,@/2!G9714:&ES*"D["@H)(" @(&9O<B H:6YT(&D@/2 P
>M.R!I(#P@86QL5&AR96%D<T1I;3L@:2LK*0H)(" @('L@("!4:')E860@=#L*
>M"@D)=" ](&%L;%1H<F5A9'-;:5T["@D):68@*'0@)B8@=" A/3T@='1H:7,@
>M)B8@="YS=&%T92 ]/2!44RY254Y.24Y'*0H)"2 @("!T+G)E<W5M92@I.PH)
>M(" @('T*"7T*(" @('T*"B @("!S=&%T:6,@=F]I9"!Y:65L9"@I"B @("![
>M"@ES8VAE9%]Y:65L9"@I.PH@(" @?0H*(" @('-T871I8R!U:6YT(&YT:')E
>M861S(#T@,3L*"B @<')I=F%T93H*"B @("!S=&%T:6,@=6EN="!A;&Q4:')E
>M861S1&EM.PH@(" @<W1A=&EC($]B:F5C="!T:')E861,;V-K.PH@(" @<W1A
>M=&EC(%1H<F5A9%LO*E]03U-)6%]42%)%041?5$A214%$4U]-05@J+R Q,#!=
>M(&%L;%1H<F5A9',["B @("!S=&%T:6,@<V5M7W0@9FQA9U-U<W!E;F0["@H@
>M(" @5%,@<W1A=&4["B @("!I;G0@:61X(#T@+3$["0D)+R\@:6YD97@@:6YT
>M;R!A;&Q4:')E861S6UT*(" @(&EN="!F;&%G<R ](# ["@H@(" @:6YT("@J
>M9G I*'9O:60@*BD["B @("!V;VED("IA<F<["@H@(" @:6YT(&1E;&5G871E
>M*"D@9&<["@H@(" @=F]I9"!E<G)O<BAC:&%R6UT@;7-G*0H@(" @>PH)=&AR
>M;W<@;F5W(%1H<F5A9$5R<F]R*&US9RD["B @("!]"@H*(" @("\J*BHJ*BHJ
>M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BH*(" @
>M(" J(%1H:7,@:7,@:G5S="!A('=R87!P97(@=&\@:6YT97)F86-E(&)E='=E
>M96X@0R!R=&P@86YD(%1H<F5A9"YR=6XH*2X*(" @(" J+PH*(" @(&5X=&5R
>M;B H0RD@<W1A=&EC('9O:60@*G1H<F5A9'-T87)T*'9O:60@*G I"B @("![
>M"@E4:')E860@=" ](&-A<W0H5&AR96%D*7 ["@EI;G0@<F5S=6QT.PH*"61E
>M8G5G("AT:')E860I('!R:6YT9B@B4W1A<G1I;F<@=&AR96%D('@E>" H)60I
>M7&XB+"!T+"!T+FED>"D["@H)+R\@3F5E9"!T;R!S970@="YI9"!H97)E+"!B
>M96-A=7-E('1H<F5A9"!I<R!O9F8@86YD(')U;FYI;F<*"2\O(&)E9F]R92!P
>M=&AR96%D7V-R96%T92@I('-E=',@:70N"@ET+FED(#T@<'1H<F5A9%]S96QF
>M*"D["@H)="YS=&%C:T)O='1O;2 ](&=E=$534"@I.PH)=')Y"@E["@D@(" @
>M<F5S=6QT(#T@="YR=6XH*3L*"7T*"6-A=&-H("A/8FIE8W0@;RD*"7L*"2 @
>M("!P<FEN=&8H(D5R<F]R.B B*3L*"2 @("!O+G!R:6YT*"D["@D@(" @<F5S
>M=6QT(#T@,3L*"7T*"@ED96)U9R H=&AR96%D*2!P<FEN=&8H(D5N9&EN9R!T
>M:')E860@)61<;B(L('0N:61X*3L*"70N<W1A=&4@/2!44RY415)-24Y!5$5$
>M.PH)86QL5&AR96%D<UMT+FED>%T@/2!N=6QL.PH)="YI9'@@/2 M,3L*"6YT
>M:')E861S+2T["@ER971U<FX@*'9O:60J*7)E<W5L=#L*(" @('T*"@H@(" @
>M+RHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ"B @(" @
>M*B!#<F5A=&4@82!4:')E860@9F]R(&=L;V)A;"!M86EN*"DN"B @(" @*B\*
>M"B @("!S=&%T:6,@=&AI<R@I"B @("!["@ET:')E861,;V-K(#T@;F5W($]B
>M:F5C="@I.PH*"51H<F5A9"!T(#T@;F5W(%1H<F5A9"@I.PH*"70N<W1A=&4@
>M/2!44RY254Y.24Y'.PH)="YI9" ]('!T:')E861?<V5L9B@I.PH)="YS=&%C
>M:T)O='1O;2 ]("AV;VED*BE?7VQI8F-?<W1A8VM?96YD.PH)<WEN8VAR;VYI
>M>F5D("AT:')E861,;V-K*0H)>PH)(" @(&%S<V5R="@A86QL5&AR96%D<ULP
>M72D["@D@(" @86QL5&AR96%D<ULP72 ]('0["@D@(" @86QL5&AR96%D<T1I
>M;2 ](#$["@D@(" @="YI9'@@/2 P.PH)?0H*"2\J($EN<W1A;&P@<VEG;F%L
>M(&AA;F1L97)S('-O('=E(&-A;B!S=7-P96YD+W)E<W5M92!T:')E861S"@D@
>M*B\*"@EI;G0@<F5S=6QT.PH)<VEG86-T:6]N7W0@<VEG86-T.PH)<F5S=6QT
>M(#T@<VEG9FEL;'-E="@F<VEG86-T+G-A7VUA<VLI.PH):68@*')E<W5L="D*
>M"2 @("!G;W1O($QF86EL.PH)<VEG86-T+G-A7VAA;F1L97(@/2 F<&%U<V5(
>M86YD;&5R.PH)<F5S=6QT(#T@<VEG86-T:6]N*%-)1U534C$L("9S:6=A8W0L
>M(&YU;&PI.PH):68@*')E<W5L="D*"2 @("!G;W1O($QF86EL.PH)<VEG86-T
>M+G-A7VAA;F1L97(@/2 F<F5S=6UE2&%N9&QE<CL*"7)E<W5L=" ]('-I9V%C
>M=&EO;BA324=54U(R+" F<VEG86-T+"!N=6QL*3L*"6EF("AR97-U;'0I"@D@
>M(" @9V]T;R!,9F%I;#L*"@ER97-U;'0@/2!S96U?:6YI="@F9FQA9U-U<W!E
>M;F0L(# L(# I.PH):68@*')E<W5L="D*"2 @("!G;W1O($QF86EL.PH*"7)E
>M='5R;CL*"B @(" @($QF86EL.@H)9V5T5&AI<R@I+F5R<F]R*")C86YN;W0@
>M:6YI=&EA;&EZ92!T:')E861S(BD["B @("!]"@H@(" @+RHJ*BHJ*BHJ*BHJ
>M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BH*(" @(" J(%1H:7,@9V5T<R!C86QL
>M960@=VAE;B!A('1H<F5A9"!G971S(%-)1U534C$N"B @(" @*B\*"B @("!E
>M>'1E<FX@*$,I('-T871I8R!V;VED('!A=7-E2&%N9&QE<BAI;G0@<VEG*0H@
>M(" @>PEI;G0@<F5S=6QT.PH*"2\O(%-A=F4@86QL(')E9VES=&5R<R!O;B!T
>M:&4@<W1A8VL@<V\@=&AE>2=L;"!B92!S8V%N;F5D(&)Y('1H92!'0PH)87-M
>M"@E["@D@(" @<'5S:&$).PH)?0H*"6%S<V5R="AS:6<@/3T@4TE'55-2,2D[
>M"@ES96U?<&]S="@F9FQA9U-U<W!E;F0I.PH*"7-I9W-E=%]T('-I9VUA<VL[
>M"@ER97-U;'0@/2!S:6=F:6QL<V5T*"9S:6=M87-K*3L*"6%S<V5R="AR97-U
>M;'0@/3T@,"D["@ER97-U;'0@/2!S:6=D96QS970H)G-I9VUA<VLL(%-)1U53
>M4C(I.PH)87-S97)T*')E<W5L=" ]/2 P*3L*"@E4:')E860@=" ](&=E=%1H
>M:7,H*3L*"70N<W1A8VM4;W @/2!G971%4U H*3L*"70N9FQA9W,@)CT@?C$[
>M"@EW:&EL92 H,2D*"7L*"2 @("!S:6=S=7-P96YD*"9S:6=M87-K*3L)+R\@
>M<W5S<&5N9"!U;G1I;"!324=54U(R"@D@(" @:68@*'0N9FQA9W,@)B Q*0D)
>M+R\@96YS=7)E(&ET('=A<R!R97-U;65(86YD;&5R*"D*"0EB<F5A:SL*"7T*
>M"@DO+R!297-T;W)E(&%L;"!R96=I<W1E<G,*"6%S;0H)>PH)(" @('!O<&$)
>M.PH)?0H@(" @?0H*(" @("\J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
>M*BHJ*BHJ"B @(" @*B!4:&ES(&=E=',@8V%L;&5D('=H96X@82!T:')E860@
>M9V5T<R!324=54U(R+@H@(" @("HO"@H@(" @97AT97)N("A#*2!S=&%T:6,@
>M=F]I9"!R97-U;65(86YD;&5R*&EN="!S:6<I"B @("!["@E4:')E860@=" ]
>M(&=E=%1H:7,H*3L*"@ET+F9L86=S('P](#$["B @("!]"@H@(" @<W1A=&EC
>M('9O:60J(&=E=$534"@I"B @("!["@EA<VT*"7L@("!N86ME9 D["@D@(" @
>J;6]V($5!6"Q%4U ).PH)(" @(')E= D).PH)?0H@(" @?0I]"@H*?0H*
>`
>end
>