lightweight embedded database table object

Warren Postma embed at geocities.com
Mon Apr 3 14:48:22 EDT 2000


I am trying to find or build a small python database for a deeply embedded
Python application, that runs on an embedded piece of hardware we're
developing. The hardware is
basically PC compatible, and runs an embedded realtime operating system.
Python runs great on it, but I have to have ALL C modules statically linked
in.

I have attached some sample code to show the sorts of things I'm trying to
do.  The performance of the pure-python isn't great, I'd rather use a
compiled C python module
that did similar things. Has anyone written one.

I've looked at Gadfly, and since Gadfly can consume loads of RAM, it's not
exactly ideal for me. I don't really need an SQL grammar, but if it weren't
for the RAM issue, I'd consider it.

The lwdb module I've attached uses BSDDB v2 as the disk-based
store-and-retrieve method.

It adds ascii-delimited (CSV) import and export features (not well tested
yet), and a trivial assortment of types (say, float, string and integer for
now, but I'll be adding others like datetime fields, etc).

I'd like an ultra-compact binary storage method and maybe even a very-fast
compression method, and I'm thinking of adding support for the "ROTOR"
builtin Python module, so that the database store can be somewhat "opaque".
I will be storing user names and passwords in there, so I'll probably want
to add some encryption.

Perhaps all those things I can do with Python plus a little marshalling or
pickling are worth the overhead of a BSDDB file, which seems to use about
200K of disk space for every 100K of data in the variable-length-record
field.

I've considered things like dBase files, but they are such a crusty old
standard, really.  If I had to go that way, I would buy Codebase from
Sequiter Software, and whip up a C to Python interface to them. Anyone else
done any Python+Codebase work?

I don't really need wicked-fast lookup on disk. I'm wondering if I should
just invent my own C module to do this job.  Then again, I could be very
foolish, as any "database" code you write ends up always being more
complicated than you originally thought.

Warren Postma

----

attached sample code:
     lwdb.py - lightweight database table object (stores in a bsd database)
     lwdbrec.py - lightweight database record object (primitive
typed-database-'tuple')

[I have no idea of attachments bounce from the mailing list or newsgroup, or
if they considered In Bad Taste, but as they are small, I'm going ahead
anyways....]





begin 666 lwdbrec.py
M(B(B#0H@;'=D8G)E8RYP>2 M(&1E9FEN97, at 82!L:6=H='=E:6=H="!D871A
M8F%S92!O8FIE8W0 at +2!V97(@,"XP,2 M(&UA<F-H(#(P,# -"B @(" @*$,I
M(#(P,# @5V%R<F5N(%!O<W1M82P at 6E12($-O;G1R;VP at 4WES=&5M<PT*#0H@
M,2X at 8V]N=&%I;G, at 86X@871T<FEB=71E(&YA;65D(')O=RP@=VAI8V@@:7,@
M86X at 87)R87D@;V8@=F%L=65S+"!O;F4 at 9F]R#0H@(" @96%C:"!R;W<N#0H-
M"B R+B!!(&-L87-S+6%T=')I8G5T92!C86QL960@)V%T=')I8G5T97,G(&1E
M9FEN97,@=&AE(&%T=')I8G5T97,@=&AA="!E86-H#0H@(" @<F]W('1Y<&4@
M;75S="!H;VQD+B @268 at 82!R;W<@=F%L=64@:7,@;W!T:6]N86P@=&AE;B!R
M;W=;3ET at 8V%N(&)E($YO;F4-"B @("!W:&EC:"!I<R!E<75I=F%L96YT('1O
M(&$@3E5,3"!D871A8F%S92!F:65L9"X-"@T*(#,N($5A8V@@8VQA<W,@;75S
M="!I;7!L96UE;G0 at 82!K97DH*2!M971H;V0@=&AA="!R971U<FYS(&$@:V5Y
M('9A;'5E+"!W:&EC: T*(" @(&UU<W0 at 96ET:&5R(&)E(&$@<W1R:6YG+"!O
M<B!C;VYV97)T<R!T;R!A('5N:7%U92!K97D@<W1R:6YG('5S:6YG('1H90T*
M(" @('-T86YD87)D('!Y=&AO;B!S='(H*2!F=6YC=&EO;BX at 6VYO=&4Z(&UI
M9VAT(&1E8VED92!L871E<B!T;R!S=&%N9&%R9&EZ90T*(" @(&]N(')E<'(H
M*2!F;W(@:V5Y+7-T<FEN9R!G96YE<F%T:6]N+B!S=&%Y('1U;F5D+ET-"@T*
M(#0N(%-I;F-E('=E(&%R92!0:6-K;&EN9R!T:&5S92!R;W=S+"!W92!D;VXG
M="!W86YT('1O('-T;W)E('1H92!C;VQU;6X@;F%M97,-"B @("!E86-H('1I
M;64@=V4@<W1O<F4 at 82!R;W<L('-O('=E(&]N;'D@<W1O<F4@=&AE(&%R<F%Y
M(&]F(')O=R!V86QU97,L(&%N9 T*(" @('=E)VQL('-T;W)E(&$@<W!E8VEA
M;"!R96-O<F0@<V]M97=H97)E('=I=&@@86QL('1H92!O=&AE<B!I;F9O<FUA
M=&EO;BP-"B @("!I;F-L=61I;F<@=&AE(&1A=&%B87-E+7-C:&5M82!A;F0@
M<V\@;VXN#0H-"B U+B!2;W=S(&%R92!E87-I;'D at 8V]N=F5R=&5D(&9R;VTO
M=&\@87-C:6D at 9&5L:6UI=&5D("AC<W8I(&9O<FUA=',N(" @(" @#0H@#0H@
M5T%23DE.1SH at 2$E'2$Q9(%5.4D5,24%"3$4 at 15A015))345.5$%,($-/1$4A
M(%5312!!5"!/5TX at 4DE32R$-"B -"B(B(@T*#0IF<F]M('1Y<&5S(&EM<&]R
M=" J( T*:6UP;W)T(&5X8V5P=&EO;G,L(&]S+"!S>7,L('1I;64L('-T<FEN
M9RP@<'!R:6YT#0H-"@T*(R!R97%U:7)E9"!F:65L9"!F;&%G<S\-"G)E<75I
M<F5D(#T@,0T*;W!T:6]N86P@/2 P#0H-"F-S=E]S97 @/2 B+"(-"@T*#0HC
M($9I96QD(&1E9FEN:71I;VX at 871T<FEB=71E<RP at 8GD@=&AE:7(@<&]S:71I
M;VXZ#0H-"E]P871T97)N7V9O<F1E<B ](# @(R!W:&%T(&]R9&5R(&1O97,@
M:70 at 9V5T('!R:6YT960@=&\@;VX@=&AE('-C<F5E;B H0U-6(&9O<FUA="D-
M"E]P871T97)N7V9T>7!E(" ](#$@(R!W:&%T('!Y=&AO;B!T>7!E(&ES(&ET
M/PT*7W!A='1E<FY?9G=I9'1H(#T@,B C('=H870@=VED=&@@9&]E<R!I="!G
M970@=VAE;B!P<FEN=&5D(&]N('1H92!S8W)E96X@*$-35B!F;W)M870I#0I?
M<&%T=&5R;E]F<F5Q9" @/2 S(",@:7,@=&AE(&9I96QD('9A;'5E(')E<75I
M<F5D(&9O<B!A;&P@<F]W<S\-"E]P871T97)N7V9I;FET=B ](#0@(R!W:&%T
M(&ES('1H92!I;FET:6%L('9A;'5E('=H96X at 82!N97<@;VYE(&ES(&-R96%T
M960-"@T*(R!.86UE<W!A8V4 at 9F]R(%-A9F4 at 179A;'5A=&EO;G,L('5S960@
M:6X@<V5T7V-S=E]R;W<Z#0H-"G-A9F5?979A;" ]('L@(E]?8G5I;'1I;G-?
M7R(@.B![(").54Q,(B Z($YO;F4@?2!]#0H-"F-L87-S($Q71&)296-%<G)O
M<BA!<FET:&UE=&EC17)R;W(I. at T*(" @("(B(EI44B!$871A8F%S92!296-O
M<F0 at 3W!E<F%T:6]N($9A:6QE9"(B(@T*(" @('!A<W,-"@T*9&5F(&-S=E]V
M86PH>"DZ#0H@(" @(F-O;G9E<G0 at 82!V87)I86)L92!T;R!A('-T<F%I9VAT
M($%30TE)(&9O<FUA="P at 8F%C:W-L87-H+7%U;W1E<R!A;&P@<W1R:6YG(&1A
M=&$B#0H@(" @:68@*'@@/3T at 3F]N92DZ#0H@(" @(" @(')E='5R;B B3E5,
M3"(-"B @("!I9B H='EP92AX*2 ]/2!3=')I;F=4>7!E*3H-"B @(" @(" @
M<F5T=7)N("<B)RMS=')I;F<N<F5P;&%C92AX+" G(B<L('(G7"(G*2LG(B<@
M(R!H86YD;&5S(&5M8F5D9&5D('%U;W1E<PT*(" @(&5L<V4Z#0H@(" @(" @
M(')E='5R;B!S='(H>"D@(R!T:&4@<W1R:6YG('1H870@=VEL;"!R97!R;V1U
M8V4 at 6"!I9B!E=F%L=6%T960-"@T*9&5F(&UA:V5?8W-V7VAE861E<BAF:65L
M9',I. at T*(" @(")R971U<FX@<F]W(&%S(&$@8V]M;6$@<V5P87)A=&5D('9A
M<FEA8FQE("AA<V-I:2D@<W1R:6YG(@T*(" @(&X@/2!F:65L9'-;,%T-"B @
M("!F;W(@:2!I;B!F:65L9'-;,3I=. at T*(" @(" @(" @;B ](&X@*R!C<W9?
M<V5P("L@:2 C(&-O;6UA('-E<&%R871E9 T*(" @(')E='5R;B!N#0H-"B @
M(" -"B,@;'=D8E]R96,Z($-L87-S('=I=&@@<W1R:6-T('1Y<&4 at 8VAE8VMI
M;F<@86YD(&$@<VEN9VQE(&ME>3H-"B,-"@T*8VQA<W,@;'=D8E]R96,Z#0H@
M(" @(FQI9VAT=V5I9VAT(&1A=&%B87-E(')E8V]R9"(-"B @("!C<W9?:&5A
M9&5R(#T@(B(-"B @("!A='1R:6)U=&5S(#T@>WT-"B @("!O<F1E<B ](%M=
M(" @( T*(" @(&1E9B!?7VEN:71?7RAS96QF+')O=SU.;VYE*3H@(R!C86X@
M;W!T:6]N86QL>2!S<&5C:69Y(&$@9&EC=&EO;F%R>2!O9B!V86QU97,A#0H@
M(" @(" @(")L=V1B7W)E8R!C;VYS=')U8W1O<B!C86QL<R!S971U<"@I('1O
M(&EN:71I86QI>F4@<F]W(&-O;G1E;G1S(@T*(" @(" @("!S96QF+G-E='5P
M*')O=RD-"@T*(" @(&1E9B!S971U<"AS96QF+')O=SU.;VYE*3H-"B @(" @
M(" @(FUI<V-E;&QA;F5O=7,@<F]W(&1A=&$@:&]U<V5K965P:6YG("AS:&]U
M;&0 at 8F4@8V%L;&5D(&)Y(&$@<F]W)W, at 7U]I;FET7U\I(@T*(" @(" @("!I
M9B H;&5N*'-E;&8N871T<FEB=71E<RD]/3 I. at T*(" @(" @(" @(" @<F%I
M<V4 at 3%=$8E)E8T5R<F]R+"!@<V5L9BY?7V-L87-S7U]@*R(N871T<FEB=71E
M<R!N;W0@<V5T(2(-"@T*(" @(" @("!I9B H;&5N*'-E;&8N;W)D97(I/3TP
M*3H-"B @(" @(" @(" @(')A:7-E($Q71&)296-%<G)O<BP at 8'-E;&8N7U]C
M;&%S<U]?8"LB+F]R9&5R(&YO="!S970A(@T*#0H-"B @(" @(" @:68@*')O
M=R ]/2!.;VYE*3H-"B @(" @(" @(" @('-E;&8N<F5S971?=&]?9&5F875L
M=',H*0T*(" @(" @("!E;&EF("AT>7!E*')O=RD]/4QI<W14>7!E*3H-"B @
M(" @(" @(" @('-E;&8N7U]D:6-T7U];(G)O=R)=(#T@<F]W#0H@(" @(" @
M(&5L:68@*'1Y<&4H<F]W*3T]4W1R:6YG5'EP92DZ#0H@(" @(" @(" @("!S
M96QF+G-E=%]C<W9?<F]W*')O=RD-"B @(" @(" @96QS93H-"B @(" @(" @
M(" @(')A:7-E($Q71&)296-%<G)O<BP@(G-E='5P.B!E>'!E8W1E9"!L:7-T
M(&]R('-T<FEN9RP at 9V]T("(K<W1R*'1Y<&4H<F]W*2D-"@T*#0H@(" @(" @
M('-E;&8N7U]D:6-T7U];(E]D:7)T>2)=(#T@, T*#0H@(" @9&5F(')E<V5T
M7W1O7V1E9F%U;'1S*'-E;&8I. at T*(" @(" @(" B9FEL;"!I;B!D969A=6QT
M('9A;'5E<R!F;W(@96%C:"!A='1R:6)U=&4B#0H@(" @(" @(&X@/2!L96XH
M<V5L9BYO<F1E<BD-"B @(" @(" @<V5L9BY?7V1I8W1?7ULB<F]W(ET@/2!;
M3F]N95TJ;B C(&-R96%T92!A;B!E;7!T>2!A<G)A>2QL96YG=&@@;BX@(" @
M( T*(" @(" @("!F;W(@>"!I;B!R86YG92 at P+&XI. at T*(" @(" @(" @(" @
M9FEE;&0@/2!S96QF+F]R9&5R6WA=( T*(" @(" @(" @(" @82 ]('-E;&8N
M871T<FEB=71E<UMF:65L9%T@(R!G970 at 86X@871T<FEB=71E(&)Y(&9I96QD
M(&YA;64-"B @(" @(" @(" @('-E;&8N7U]D:6-T7U];(G)O=R)=6WA=(#T@
M85M?<&%T=&5R;E]F:6YI='9=#0H@(" @(" @(" @(" C<')I;G0 at 9FEE;&0L
M(B ]("(L8&%;7W!A='1E<FY?9FEN:71V76 -"B @(" @(" @<V5L9BY?7V1I
M8W1?7ULB7V1I<G1Y(ET@/2 P#0H-"B @("!D968 at 9V5T:V5Y;F%M92AS96QF
M*3H-"B @(" @(" @(G)E='5R;B!T:&4@<')I;6%R>2!K97D@;F%M92(-"B @
M(" @(" @<F5T=7)N('-E;&8N;W)D97);,%T-"B @(" -"B @("!D968@<V5T
M7V9R;VU?9&EC="AS96QF+&1I8W0I. at T*(" @(" @(" B87-S:6=N('9A;'5E
M<R!T;R!F:65L9',@=VET:"!F:65L9&YA;65S(&%N9"!V86QU97,@:6X@=&AE
M(&1I8W1I;VYA<GD@)V1I8W0G(@T*(" @(" @("!F;W(@82!I;B!D:6-T+FME
M>7,H*3H@(R!G970 at 82!K97D-"B @(" @(" @(" @('-E;&8N7U]S971A='1R
M7U\H82QD:6-T6V%=*0T*( T*(" @(&1E9B!K97DH<V5L9BDZ#0H@(" @(" @
M(")R971U<FX@=&AE(&ME>2!U<V5D('=H96X@<W1O<FEN9R!O<B!L;V]K:6YG
M('5P(&$@<F]W(@T*(" @(" @("!T<GDZ#0H@(" @(" @(" @("!R971U<FX@
M<V5L9BY?7V1I8W1?7ULB<F]W(EU;,%T-"B @(" @(" @97AC97!T($ME>45R
M<F]R. at T*(" @(" @(" @(" @<F%I<V4 at 3%=$8E)E8T5R<F]R+" B36ES<VEN
M9R]I;G9A;&ED(&ME>3H@)R(K<V5L9BYK97EN86UE*R(G(@T*#0H@(" @9&5F
M(&ME>71Y<&4H<V5L9BDZ#0H@(" @(" @(')E='5R;B!S96QF+F%T=')I8G5T
M97-;,%U;7W!A='1E<FY?9G1Y<&5=.PT*(" @(" @(" -"B @("!D968 at 7U]R
M97!R7U\H<V5L9BDZ#0H@(" @(" @(")D969A=6QT(')E<')E<V5N=&%T:6]N
M(&]F(&1A=&%B87-E(')E8V]R9"!I<R!A<R!A(&-S=B!R;W<B#0H@(" @(" @
M(')E='5R;B!S96QF+F-S=E]R;W<H*0T*(" -"B @("!D968 at 7U]S971A='1R
M7U\H<V5L9BQN86UE+'9A;'5E*3H-"B @(" @(" @(F-U<W1O;2!?7W-E=&%T
M=')?('=I=&@@='EP97-A9F5T>2!C:&5C:R(-"B @(" @(" @82 ]('-E;&8N
M871T<FEB=71E<UMN86UE70T*(" @(" @("!I9B H=F%L=64@/3T at 3F]N92DZ
M#0H@(" @(" @(" @("!I9B H85M?<&%T=&5R;E]F<F5Q9%TI. at T*(" @(" @
M(" @(" @(" @(')A:7-E($Q71&)296-%<G)O<BP@(D-A;B=T('-E="!F:65L
M9"!T;R!.54Q,("AI92!.;VYE*2(-"B @(" @(" @(" @('-E;&8N<F]W6V%;
M,%U=(#T at 3F]N90T*(" @(" @("!E;'-E. at T*(" @(" @(" @(" @=')Y.B @
M(" @(" @(" @( T*(" @(" @(" @(" @(" @(&EF("AT>7!E*'9A;'5E*2 ]
M/2!A6U]P871T97)N7V9T>7!E72DZ#0H@(" @(" @(" @(" @(" @(" @('-E
M;&8N<F]W6V%;,%U=(#T@=F%L=64-"B @(" @(" @(" @(" @(" @(" @<V5L
M9BY?7V1I8W1?7ULB7V1I<G1Y(ET@/2 Q#0H@(" @(" @(" @(" @(" @96QS
M93H-"B @(" @(" @(" @(" @(" @(" @<F%I<V4 at 3%=$8E)E8T5R<F]R+" B
M26YV86QI9"!T>7!E(&EN(&%S<VEG;FUE;G0B*V!T>7!E*'9A;'5E*6 -"B @
M(" @(" @(" @(&5X8V5P="!+97E%<G)O<CH-"B @(" @(" @(" @(" @(" C
M<')I;G0@(F%T=')I8G5T97,Z("(L<V5L9BYA='1R:6)U=&5S#0H@(" @(" @
M(" @(" @(" @<F%I<V4 at 2V5Y17)R;W(L("));G9A;&ED(&%T=')I8G5T92 B
M*V!N86UE8 T*(" @(" @(" @(" @#0H@(" @9&5F(%]?9V5T871T<E]?*'-E
M;&8L;F%M92DZ#0H@(" @(" @(")G970 at 871T<FEB=71E(&9R;VT at 8W-V+7)O
M=R!A='1R:6)U=&5S+"!O<B!I;G-T86YC92P@;W(@8VQA<W,B#0H@(" @(" @
M(", at 9FER<W0@<V5A<F-H(')O=R!A='1R:6)U=&5S. at T*(" @(" @("!T<GDZ
M#0H@(" @(" @(" @("!C;VQN=6T@/2!S96QF+E]?8VQA<W-?7RY?7V1I8W1?
M7ULB871T<FEB=71E<R)=6VYA;65=6S!=#0H@(" @(" @(" @("!R971U<FX@
M<V5L9BY?7V1I8W1?7ULB<F]W(EU;8V]L;G5M70T*(" @(" @("!E>&-E<'0@
M2V5Y17)R;W(Z#0H@(" @(" @(" @("!T<GDZ#0H@(" @(" @(" @(" @(" @
M(R!N97AT('-E87)C:"!I;G-T86YC92!D:6-T:6]N87)Y#0H@(" @(" @(" @
M(" @(" @<F5T=7)N('-E;&8N7U]D:6-T7U];;F%M95T-"B @(" @(" @(" @
M(&5X8V5P="!+97E%<G)O<CH-"B @(" @(" @(" @(" @(" C(&9I;F%L;'D@
M<V5A<F-H(&-L87-S(&1I8W1I;VYA<GD-"B @(" @(" @(" @(" @("!R971U
M<FX@<V5L9BY?7V-L87-S7U\N7U]D:6-T7U];;F%M95T-"@T*(" @( T*#0H@
M(" @9&5F(&%T=')?8V]U;G0H<V5L9BDZ#0H@(" @(" @(')E='5R;B!L96XH
M<V5L9BYA='1R:6)U=&5S+FME>7,H*2D-"@T*#0H@(" @9&5F(&-S=E]R;W<H
M<V5L9BDZ#0H@(" @(" @(")R971U<FX@<F]W(&%S(&$@8V]M;6$@<V5P87)A
M=&5D('9A<FEA8FQE("AA<V-I:2D@<W1R:6YG(@T*(" @(" @(" C<')I;G0@
M(CXB+'-E;&8N<F]W#0H@(" @(" @(')O=SUS96QF+E]?9&EC=%]?6R)R;W<B
M70T*(" @(" @("!S='(Q(#T at 8W-V7W9A;"@@<F]W6S!=("D@(R!C;VYV97)T
M('1O('-T<FEN9W,-"B @(" @(" @9F]R(&D@:6X@<F]W6S$Z73H-"B @(" @
M(" @(" @('-T<C$@/2!S='(Q("L at 8W-V7W-E<" K(&-S=E]V86PH:2D@(W-E
M<&%R871E9"!B>2!C;VUM87,-"B @(" @(" @<F5T=7)N('-T<C$-"@T*(" @
M(&1E9B!S971?:V5Y*'-E;&8L:V5Y*3H-"B @(" @(" @(FUO<W1L>2!F;W(@
M:6YT97)N86P@=7-E+B!D;V5S;B=T('9A;&ED871E("=K97D@=F%L=64G+B!B
M92!C87)E9G5L(2(-"B @(" @(" @<V5L9BY?7V1I8W1?7ULB<F]W(EU;,%T]
M:V5Y#0H@(" @(" @( T*(" @(&1E9B!S971?8W-V7W)O=RAS96QF+')O=RQS
M97 ]8W-V7W-E<"DZ#0H@(" @(" @(")C;VYV97)T(&$@<F]W(&9R;VT at 8W-V
M(&9O<FUA="X@:71E;7, at 35535"!B92!S97!A<F%T960 at 8GD@8V]M;6%S("$B
M#0H@(" @(" @('1R>3H-"B @(" @(" @(" @('-E;&8N7U]D:6-T7U];(G)O
M=R)=(#T at 979A;"@@(ELB*W)O=RLB72(L('-A9F5?979A;" @*0T*(" @(" @
M(" @(" @;B ](&QE;BAS96QF+F]R9&5R*2UL96XH<V5L9BYR;W<I#0H@(" @
M(" @(" @("!F;W(@:2!I;B!R86YG92 at P+&XI. at T*(" @(" @(" @(" @(" @
M('-E;&8N7U]D:6-T7U];(G)O=R)=+F%P<&5N9"A.;VYE*0T*(" @(" @("!E
M>&-E<'0 at 3F%M945R<F]R. at T*(" @(" @(" @(" @<F%I<V4 at 3%=$8E)E8T5R
M<F]R+" G<V5T7V-S=E]R;W<@+2!I;G9A;&ED(')O=R M(&-H96-K(&EF('-T
M<FEN9W, at 87)E(&%L;"!Q=6]T960Z("<K<F]W#0H@(" @(" @(" @(" -"B @
M(" @(" @#0H@(" @(" @( T*(" @(" @(" -"@T*(" @(&1E9B!V86QI9&%T
M92AS96QF*3H-"B @(" @(" @(G)A:7-E<R!A;B!E>&-E<'1I;VX@:68@=F%L
M:61A=&EO;B!F86EL<RP@:64@<F5Q=6ER960 at 9FEE;&0@;F]T('!R;W9I9&5D
M(@T*(" @(" @("!F;W(@>"!I;B!S96QF+F%T=')I8G5T97,N:V5Y<R at I.@T*
M(" @(" @(" @(" @:68@<V5L9BYA='1R:6)U=&5S6WA=6U]P871T97)N7V9R
M97%D73H-"B @(" @(" @(" @(" @("!I9B!S96QF+E]?9&EC=%]?6WA=(#T]
M($YO;F4Z#0H@(" @(" @(" @(" @(" @(" @(')A:7-E($Q71&)296-%<G)O
M<BP@(G9A;&ED871E*"D at 9F%I;&5D("T@<F5Q=6ER960 at 9FEE;&0@;F]T('-E
M="(-"@T*#0H-"B,@<')O8FQE;3H at 66]U(&-A;B!H879E(&9I96QD(&YA;64L
M(&]R(&9I96QD(&EN9&5X(&%S('1H92!P<FEM87)Y#0HC(&QO;VMU<"P at 8G5T
M(&YO="!B;W1H+B!3;R!W92!C<F5A=&4 at 8F]T:"!A(&YA;64@;&]O:W5P(&1I
M8W1I;VYA<GD-"B, at 86YD('1H96X@<V]R="!T:&%T(&)Y(&9I96QD(&]R9&5R
M:6YG('1O(&-R96%T92!A(&9I96QD(&]R9&5R:6YG('1H870-"B,@=V]R:W,-
M"F1E9B!L=V1B7V]R9&5R*&%T=')I8G,I. at T*(" @(&ME>7,@/2!A='1R:6)S
M+FME>7,H*3L-"B @("!N(#T@;&5N*&ME>7,I#0H@(" @;W)D97(@/2!;3F]N
M95TJ;B C(&-R96%T92!A<G)A>2!L96YG=&@@3 at T*(" @(&9O<B!I(&EN(&ME
M>7,Z#0H@(" @(" @(&]R9&5R6R!A='1R:6)S6VE=6S!=(%T@/2!I#0H@(" @
M<F5T=7)N(&]R9&5R#0H-"B @(" -"@T*>" ]($YO;F4@(R!M86ME('@@<W1I
M8VL at 87)O=6YD(&%F=&5R('1E<W0H*0T*#0ID968@=&5S="@I. at T*(" @('!R
M:6YT("),:6=H='=E:6=H="!$871A8F%S92!296-O<F0 at 0VQA<W, at 5&5S=',B
M#0H@(" @9VQO8F%L('@-"B @("!C;&%S<R!L=V1B7W!E<G-O;BAL=V1B7W)E
M8RDZ#0H@(" @(" @(" @("!A='1R:6)U=&5S(#T@>PT*(" @(" @(" @(" @
M(")N86UE(CH@(" @*# L(" @(" @(%-T<FEN9U1Y<&4L(" X,"P@("!R97%U
M:7)E9"P@("(B*2P-"B @(" @(" @(" @(" B861D<F5S<R(Z("@Q+" @(" @
M("!3=')I;F=4>7!E+" @,C P+" @<F5Q=6ER960L(" B(BDL#0H@(" @(" @
M(" @(" @(F%G92(Z(" @(" H,BP@(" @(" @26YT5'EP92P@(" @(#$P+" @
M(')E<75I<F5D+" @," I+ T*(" @(" @(" @(" @(")W96EG:'0B.B @*#,L
M(" @(" @($9L;V%T5'EP92P@(" U+" @("!R97%U:7)E9"P@(#4N-2D-"B @
M(" @(" @(" @('T-"B @(" @(" @(" @(&]R9&5R(#T@;'=D8E]O<F1E<BAA
M='1R:6)U=&5S*2 C(&-R96%T97,@=&AE(&]R9&5R:6YG+7-T<FEN9PT*(" @
M(" @(" @(" @8W-V7VAE861E<B ](&UA:V5?8W-V7VAE861E<BAO<F1E<BD@
M(R!M=7-T(&)E(&YA;65D(&-S=E]H96%D97(-"B @(" @(" @(" @(&ME>6YA
M;64@/2 B;F%M92(@(R!M=7-T(&1E9FEN92!A(&ME>2$@;W1H97)W:7-E(&%T
M=')I8G5T92 P('=I;&P at 8F4@=7-E9"$-"B @(" @(" @(" @(&1E9B!?7VEN
M:71?7RAS96QF+&1I8W0]3F]N92DZ#0H@(" @(" @(" @(" @(" @<V5L9BYS
M971U<"AD:6-T*0T*(" @('!R:6YT(")R96-O<F0 at 8W)E871I;VX@=&5S=',N
M+BXB#0H@(" @<')I;G0@(F-S=E]V86P@=&5S=',Z(@T*(" @('!R:6YT(")C
M<W9?=F%L*#4I/2 B+&-S=E]V86PH-2D-"B @("!P<FEN=" B8W-V7W9A;"A<
M(F)O8BP at 7%Q<(G1H92!S;&]B7%Q<(BD](BP at 8W-V7W9A;"@B8F]B+"!<(G1H
M92!S;&]B7"(B*0T*#0H@(" @<')I;G0@(F-R96%T92!P97)S;VX at 8VQA<W,N
M+BXB#0H-"B @(" @(" @(" @( T*(" @('!R:6YT(")I;G-T86YT:6%T92!A
M('!E<G-O;BXN+B(-"B @("!X(#T@;'=D8E]P97)S;VXH*0T*(" @('!R:6YT
M('@N871T<FEB=71E<PT*(" @('!R:6YT(&1I<BAX*0T*(" @('!R:6YT(")S
M970@<&5R<V]N)W,@=F%L=65S+BXN+B(-"B @("!X+FYA;64@(" @/2 B5V%R
M<F5N(@T*(" @('@N861D<F5S<R ]("(Q(%-O=71H9V%T92!3="(-"B @("!X
M+F%G92 @(" @/2 U#0H@(" @<')I;G0@(F1U;7 @<&5R<V]N(&%S(&-S=B!F
M:6QE(&9O<FUA="XN+B(-"B @("!P<FEN="!X+F-S=E]H96%D97(-"B @("!P
M<FEN="!X+F-S=E]R;W<H*0T*(" @('!R:6YT('@N<F]W#0H@(" @<')I;G0@
M(F1U;7 @<&5R<V]N(&ME>2!V86QU92XN+B(-"B @("!P<FEN="!X+FME>2 at I
M#0H@(" @<')I;G0@>"YK97EN86UE#0H@(" @<')I;G0@(B B#0H@(" @<')I
M;G0@(F-R96%T92!A;F]T:&5R('!E<G-O;B(-"B @("!Z(#T@;'=D8E]P97)S
M;VXH*0T*(" @('HN<V5T7V-S=E]R;W<H("<@(D)O8B(L(" B,2!3;W5T:&=A
M=&4B+" T,R G("D-"B @("!Z<W1R/2!Z+F-S=E]R;W<H*0T*(" @('!R:6YT
M('IS='(-"B @("!D96P@>@T*(" @('H@/2!L=V1B7W!E<G-O;B at I#0H@(" @
M<')I;G0@(G)E8V]V97(@<F]W(&9R;VT at 8W-V(&]U='!U=#HB#0H@(" @>BYS
M971?8W-V7W)O=RAZ<W1R*0T*(" @('!R:6YT('HN<F]W#0H@(" @#0H@(" @
M<')I;G0@(F1U;7 @<&5R<V]N('-C:&5M83HB#0H@(" @<'!R:6YT+G!P<FEN
M="AX+E]?8VQA<W-?7RY?7V1I8W1?7ULB871T<FEB=71E<R)=*0T*(" @('!R
M:6YT('@N7U]C;&%S<U]?+E]?9&EC=%]?6R)O<F1E<B)=#0H@(" @<')I;G0@
M(G1E<W1S(&9I;FES:&5D+B(-"@T*#0II9B!?7VYA;65?7R ]/2 G7U]M86EN
27U\G. at T*(" @('1E<W0H*0T*
`
end

begin 666 lwdb.py
M(B(B#0H@;'=D8BYP>2 M($QI9VAT=V5I9VAT($1A=&%B87-E(%1A8FQE($]B
M:F5C=', at +2!697)S:6]N(# N,#$@+2!-87)C:" R,# P#0H@#0H@(" @(" @
M(" H0RD@,C P,"!787)R96X at 4&]S=&UA+"!:5%(@0V]N=')O;"!3>7-T96US
M#0H-"B!);7!L96UE;G0 at 82!L:6=H='=E:6=H="!R;W<M8F%S960 at 9&%T86)A
M<V4L('5S:6YG(%!I8VML960 at 07)R87ES(&]F(%!Y=&AO;@T*(%-T<FEN9W,L
M($EN=&5G97)S+"!E=&,L(&%S(&$@9F%S="!E9F9I8VEE;G0 at 9&%T82US=&]R
M86=E(&%N9"!L;V]K=7 -"B!T96-H;FEQ=64N#0H-"B!)9B!Y;W4@;F5E9"!T
M;R!P97)S:7-T(&%R8FET<F%R>2!0>71H;VX@;V)J96-T<R!I;B!A(&9I;&4@
M;W(@9&%T86)A<V4L#0H@>6]U(&UI9VAT('=A;G0 at 4VAE;'9E(&]R(&1B4VAE
M;'9E("AW:&EC:"!A;'-O('5S97,@=&AE(&)S9"!D871A8F%S92DN#0H-"B!)
M9B!O;B!T:&4@;W1H97(@:&%N9"!Y;W4@:&%V92!A('-E="!O9B!R;W=S+"!A
M;&P@;V8@=VAI8V@@87)E(&]F(&5X86-T;'D-"B!T:&4@<V%M92!D871A('1Y
M<&4L('=I=&@@=&AE('-A;64 at 871T<FEB=71E<R H8V%N;VYI8V%L(&5X86UP
M;&4@:7, at 82!L:7-T#0H@;V8@<&5O<&QE)W,@;F%M97,L(&%D9')E<W-E<RP@
M86YD('1E;&5L<&AO;F4@;G5M8F5R<RD@=&AE;B!T:&ES(&QI='1L90T*(&UO
M9'5L92!M87D at 8F4@;V8@=7-E('1O('EO=2X-"@T*(%=!4DY)3D<Z($A)1TA,
M62!53E)%3$E!0DQ%($584$5224U%3E1!3"!#3T1%(2!54T4 at 050@3U=.(%))
M4TLA#0H-"B(B(@T*#0II;7!O<G0 at 97AC97!T:6]N<PT*:6UP;W)T('-Y<PT*
M:6UP;W)T('-T<FEN9PT*:6UP;W)T(&]S#0II;7!O<G0@=&EM90T*9G)O;2 @
M('1Y<&5S(&EM<&]R=" J#0IT<GDZ#0H@(" @9G)O;2 @(&)S9&1B,B!I;7!O
M<G0 at 9&(@#0IE>&-E<'0 at 26UP;W)T17)R;W(Z#0H@(" @<F%I<V4 at 26UP;W)T
M17)R;W(L(")L=V1B+G!Y.B!9;W4@<F5A;&QY('-H;W5L9"!I;G-T86QL($)3
M1"!$871A8F%S92!697)S:6]N(#(N(@T*#0IF<F]M(" @8U!I8VML92!I;7!O
M<G0 at 4&EC:VQE<BP at 56YP:6-K;&5R( T*9G)O;2 @(&-3=')I;F=)3R!I;7!O
M<G0 at 4W1R:6YG24\-"F9R;VT@("!L=V1B<F5C("!I;7!O<G0@*@T*#0HC(&1E
M9F%U;'0@;&EG:'1W96EG:'0 at 9&%T86)A<V4 at 97AT96YS:6]N. at T*>G1R9&)?
M97AT(#T@(BYL9&(B#0H-"B, at 9&5F875L="!C;VYD:71I;VYS#0ID969?<W1A
M=&4@/2 P#0ID969?<V5V97)I='D@/2 S#0H-"@T*#0IC;&%S<R!,5T1B17)R
M;W(H07)I=&AM971I8T5R<F]R*3H-"B @(" B(B),:6=H='=E:6=H="!$871A
M8F%S92!/<&5R871I;VX at 1F%I;&5D(B(B#0H@(" @<&%S<PT*#0H-"B,@;7D@
M=F5R>2!O=VX@;&ET=&QE(&)I;F%R>2!S96%R8V at L(')E9'5N9&%N="P@<VEN
M8V4@=&AE<F4G<R!O;F4@:6X-"B, at 8FES96-T+G!Y+ at T*9&5F(%]B:6Y?<V5A
M<F-H*&QI<W0L:71E;2QF:7)S=#TP+&QA<W0]+3$L9&5P=&@],"DZ#0H@(" @
M(G)E='5R;B!I;F1E>"!O9B G:71E;2<@:6X@)VQI<W0G+B!A<W-U;65S(&QI
M<W0@:7,@<V]R=&5D(@T*(" @(&EF("AD97!T:#YL96XH;&ES="DO,BDZ#0H@
M(" @(" @(')A:7-E(%-T86YD87)D17)R;W(L(")?8FEN7W-E87)C:#H@:6YT
M97)N86P@<F5C=7)S:6]N(&QI;6ET(')E86-H960B#0H@(" @:68@;&%S=" \
M(# Z#0H@(" @(" @(&QA<W0@/2!L96XH;&ES="DM,0T*(" @('@];&%S="UF
M:7)S= T*(" @(&EF("AX/# I. at T*(" @(" @("!R86ES92!3=&%N9&%R9$5R
M<F]R+" B7V)I;E]S96%R8V at Z(&YO="!F;W5N9"(-"B @("!I9B H>#T],"DZ
M#0H@(" @(" @(&X@/2!F:7)S= T*(" @(&5L<V4Z#0H@(" @(" @(&X@/2!F
M:7)S=" K("AX*S$I+S(-"B @("!I9B!L:7-T6VY=(#T](&ET96TZ#0H@(" @
M(" @(')E='5R;B!N#0H@(" @96QI9B!I=&5M(#P@;&ES=%MN73H-"B @(" @
M(" @<F5T=7)N(%]B:6Y?<V5A<F-H*&QI<W0L:71E;2QF:7)S="QN+3$L9&5P
M=&@K,2D-"B @("!E;'-E. at T*(" @(" @("!R971U<FX at 7V)I;E]S96%R8V at H
M;&ES="QI=&5M+&XK,2QL87-T+&1E<'1H*S$I#0H@(" @(" @( T*(" @( T*
M(" @( T*#0ID968 at 7V-O;%]M87 H9G)O;5]O<F1E<BQT;U]O<F1E<BDZ( T*
M(" @("(B(@T*(" @(%]C;VQ?;6%P*&9R;VU?;W)D97(L=&]?;W)D97(I("T^
M(&UA<%]A<G)A>2P at 93$L(&4R#0H@(" @#0IF:6YD<R!C;W)R97-P;VYD:6YG
M(&5L96UE;G0@:6X@=&]?;W)D97(@9F]R(&5A8V@@96QE;65N="!I;@T*9G)O
M;5]O<F1E<BP at 86YD(')E='5R;G,@=&AE(&EN9&5X97,@:6X at 86X@87)R87D@
M=&\@<VAO=R!T:&4-"F-O<G)E<W!O;F1A;F-E+B!!;'-O(')E='5R;G,@='=O
M(&5R<F]R(&-O=6YT<RX at 5&AE(&9I<G-T(&ES#0IT:&4@;G5M8F5R(&]F(&ET
M96US(&EN(&9R;VU?;W)D97(@=VET:"!N;R!C;W)R97-P;VYD:6YG(&UA=&-H
M#0II;B!T;U]O<F1E<BP at 86YD('1H92!S96-O;F0@:7,@=&AE(&YU;6)E<B!O
M9B!I=&5M<R!I;B!T;U]O<F1E<@T*=&AA="!A<F5N)W0@:6X at 9G)O;5]O<F1E
M<BX-"@T*4W!E8VEA;"!#87-E.B!I9B!F<F]M7V]R9&5R(&%N9"!T;U]O<F1E
M<B!A<F4@=&AE('-A;64@;&5N9W1H+"!A;F0-"G1H92!I=&5M<R!A<F4@:6X@
M=&AE('-A;64@;W)D97(L('1H96X at 93$L(&%N9"!E,B!A<F4@<F5T=7)N960@
M87,-"BTQ('=H:6-H(&UE86YS(")N;R!C;VYV97)S:6]N(&YE8V5S<V%R>2(N
M#0H-"F5X86UP;&4Z#0H-"B @("!L:7-T+&4Q+&4R/5]C<W9?;6%P*"!;(")A
M(BPB8B(L(F,B+" B9"(@72P at 6R B8R(L(")A(BP@(F(B(%T@*0T*(" @('!R
M:6YT(&QI<W0@#0H@(" @6S$L(#(L(# L("TQ72 C(&UA=&-H97, at 82T^82P@
M8BT^8BP at 8RT^8RP at 8G5T(")D(B!H87,@;F\@;6%T8V@@#0H@(" @<')I;G0@
M93$L93(@(R!E<G)O<B!C;W5N=',_#0H@(" @,2 P#0H-"B @("!?8W-V7VUA
M<"@@6R B82(L(F(B+")C(B!=+"!;(")A(BP@(F(B+" B8R(@72 I#0H@(" @
M*%LP+#$L,ETL+3$L+3$I#0H@(" @#0H@(" @(B(B#0H@(" @=CTP(",@;G5M
M8F5R(&]F('9A;&ED(&9I96QD(&UA=&-H97,A#0H@(" @;B ](# -"B @("!S
M=')A:6=H=" ](# @(R!I<R!T:&4@;6%P<&EN9R!;,"PQ+#(L,RPT+"XN+BY=
M("T^(&YO(&-O;G9E<G-I;VX@;F5C97-S87)Y/PT*(" @(&UA<#$@/2![?0T*
M(" @(",@;6%P,2!C;VYT86EN<R!T:&4@;W)D97(@;V8@:71E;7,@:6X@=&]?
M;W)D97(L(&QO;VME9"!U<"!B>2!N86UE. at T*(" @(&9O<B!T;U]I=&5M(&EN
M('1O7V]R9&5R. at T*(" @(" @("!M87 Q6W1O7VET96U=(#T@;@T*(" @(" @
M(" C('1R86-K('-T<F%I9VAT(&UA<'!I;F=S. at T*(" @(" @("!I9B H;&5N
M*&9R;VU?;W)D97(I/3UL96XH=&]?;W)D97(I*3H-"B @(" @(" @(" @(&EF
M("AF<F]M7V]R9&5R6VY=(#T]('1O7VET96TI. at T*(" @(" @(" @(" @(" @
M('-T<F%I9VAT(#T@<W1R86EG:'0@*R Q#0H@(" @(" @(&X];BLQ#0H@(" @
M(" @( T*(" @(",@;6%P,B!C;VYT86EN<R!T:&4@=')A;G-L871I;VX at 9G)O
M;2!S=&%R=&EN9R!O<F1E<B!T;R!F:6YA;"!O<F1E<CH@(" @(" @(" @(" -
M"B @("!M87 R(#T at 6UT-"B @("!F;W(@9G)O;5]I=&5M(&EN(&9R;VU?;W)D
M97(Z#0H@(" @(" @(&EF(&UA<#$N:&%S7VME>2AF<F]M7VET96TI. at T*(" @
M(" @(" @(" @;6%P,BYA<'!E;F0H(&UA<#%;9G)O;5]I=&5M72 I#0H@(" @
M(" @(" @("!V/78K,0T*(" @(" @("!E;'-E. at T*(" @(" @(" @(" @;6%P
M,BYA<'!E;F0H("TQ("D@(R!S:VEP(&ET96TA#0H@(" @:68@*'8]/3 I. at T*
M(" @(" @("!R971U<FX at 6UTL;&5N*&9R;VU?;W)D97(I+&QE;BAT;U]O<F1E
M<BD@(R!N;R!M871C:&5S+"!A;&P at 97)R;W)S(0T*(" @(&5L<V4Z#0H@(" @
M(" @(&EF("AS=')A:6=H=" ]/2!L96XH9G)O;5]O<F1E<BDI. at T*(" @(" @
M(" @(" @93$L93(]+3$L+3$-"B @(" @(" @96QS93H-"B @(" @(" @(" @
M(&4Q(#T@;&5N*&9R;VU?;W)D97(I+78-"B @(" @(" @(" @(&4R(#T at +3$J
M("@@*&QE;BAF<F]M7V]R9&5R*2UL96XH=&]?;W)D97(I*2UE,2 I#0H@(" @
M(" @(')E='5R;B!M87 R+&4Q+&4R#0H@(" -"@T*#0H-"@T*#0H-"@T*#0H@
M(" @#0H@#0H@(" @(" @(" @(" @#0HC(&=E;F5R:6,@=&%B;&4@:&%N9&QI
M;F<@8VQA<W,Z( T*8VQA<W,@;'=D8E]T86)L93H-"B @("!D968 at 7U]I;FET
M7U\H<V5L9BQT86)L96YA;64L9&5S8W)I<'1I;VXL(')O=U]C;&%S<U]O8FHL
M(&9I;&5N86UE+"!U<V5?=6YI<75E8VAE8VL],2QU<V5?875T;VEN8STP+'5S
M95]I;G1K97ES/3 I. at T*(" @(" @(" @<V5L9BYT86)L96YA;64@/2!T86)L
M96YA;64-"B @(" @(" @('-E;&8N9&5S8W)I<'1I;VX@/2!D97-C<FEP=&EO
M;@T*(" @(" @(" @<V5L9BYR;W=?8VQA<W-?;V)J(#T@<F]W7V-L87-S7V]B
M:@T*(" @(" @(" @<V5L9BYA9&1E9" ]($YO;F4@#0H@(" @(" @("!S96QF
M+FUO9&4@/2 P(",@," ](&)R;W=S:6YG+" Q(#T at 861D960@;F5W(')O=RP@
M;F]T('!O<W1E9"!Y970-"B @(" @(" @('-E;&8N8VQO<V5D/3$-"B @(" @
M(" @(&EF("AU<V5?=6YI<75E8VAE8VLI. at T*(" @(" @(" @(" @<V5L9BYU
M;FEQ=65C:&5C:R ](#$-"B @(" @(" @(&5L<V4Z#0H@(" @(" @(" @("!S
M96QF+G5N:7%U96-H96-K(#T@, T*(" @(" @(" @(" @#0H@(" @(" @("!I
M9B H=7-E7V%U=&]I;F,I. at T*(" @(" @(" @(" @('-E;&8N875T;VEN8R ]
M(# @(R!F96%T=7)E(&5N86)L960-"B @(" @(" @(&5L<V4Z#0H@(" @(" @
M(" @(" @<V5L9BYA=71O:6YC(#T at +3$@(R!F96%T=7)E(&1I<V%B;&5D#0H@
M(" @(" @("!I9B H=7-E7VEN=&ME>7,I. at T*(" @(" @(" @(" @('-E;&8N
M:6YT7VME>7,@/2 Q#0H@(" @(" @("!E;'-E. at T*(" @(" @(" @(" @('-E
M;&8N:6YT7VME>7,@/2 P#0H@(" @(" @("!S96QF+G-F;&%G(#T@," C('-T
M;W)E<R!F;&%G<R!V86QU92!F<F]M(&QA<W0 at 8V%L;"!T;R!O<&5N*"D-"B @
M(" @(" @(&EF(&9I;&5N86UE(#T]($YO;F4Z#0H@(" @(" @(" @(" @(" @
M(&9I;&5N86UE(#T@=&%B;&5N86UE*WIT<F1B7V5X= T*(" @(" @(" @<V5L
M9BYO<&5N*&9I;&5N86UE*0T*#0H@(" @9&5F(&-L;W-E*'-E;&8I. at T*(" @
M(" @(" B8VQO<V4 at 9FEL92!A;F0 at 8V]M;6ET(&%L;"!C:&%N9V5S(2(-"B @
M(" @(" @:68@*'-E;&8N;6]D92 ]/2 Q*3H@(R!P;W-T(&)E9F]R92!C;&]S
M:6YG(0T*(" @(" @(" @(" @<V5L9BYP;W-T*"D-"B @(" @(" @<V5L9BYU
M<&1A=&5?:&5A9&5R*"D-"B @(" @(" @<V5L9BYD8BYC;&]S92 at I#0H@(" @
M(" @('-E;&8N9&ER='D@/2 P#0H@(" @(" @('-E;&8N8VQO<V5D/3$-"@T*
M(" @(" @(" -"B @(" @(" @#0H@(" @9&5F(&]P96XH<V5L9BP at 9FEL96YA
M;64L(&9L86=S/61B+D1"7T-214%412P@;6]D93TP-C8V+"!C86-H93TP+"!F
M:6QE='EP93UD8BY$0E](05-(*3H-"B @(" @(" @<V5L9BYF:6QE;F%M92 ]
M(&9I;&5N86UE#0H@(" @(" @('-E;&8N8VQO<V5D/3 -"B @(" @(" @:68@
M='EP92AF;&%G<RD@/3T@='EP92 at G)RDZ#0H@(" @(" @(" @(" @(" @<V5L
M9BYS9FQA9R ](&9L86=S#0H@(" @(" @(" @(" @(" @:68@<V9L86<@/3T@
M)W(G. at T*(" @(" @(" @(" @(" @(" @("!F;&%G<R ](&1B+D1"7U)%041/
M3DQ9#0H@(" @(" @(" @(" @(" @96QI9B!S9FQA9R ]/2 G<G<G. at T*(" @
M(" @(" @(" @(" @(" @("!F;&%G<R ](# -"B @(" @(" @(" @(" @("!E
M;&EF('-F;&%G(#T]("=W)SH-"B @(" @(" @(" @(" @(" @(" @9FQA9W,@
M/2 @9&(N1$)?0U)%051%#0H@(" @(" @(" @(" @(" @96QI9B!S9FQA9R ]
M/2 G8R<Z#0H@(" @(" @(" @(" @(" @(" @(&9L86=S(#T@(&1B+D1"7T-2
M14%410T*(" @(" @(" @(" @(" @(&5L:68@<V9L86<@/3T@)VXG. at T*(" @
M(" @(" @(" @(" @(" @("!F;&%G<R ](&1B+D1"7U1254Y#051%#0H@(" @
M(" @(" @(" @(" @96QS93H-"B @(" @(" @(" @(" @(" @(" @<F%I<V4@
M3%=$8D5R<F]R+" B9FQA9W,@<VAO=6QD(&)E(&]N92!O9B G<B<L("=W)RP@
M)V,G(&]R("=N)R!O<B!U<V4@=&AE(&1B+D1"7RH at 9FQA9W,B#0H@(" @(" @
M('-E;&8N9&(@/2!D8BY$0B at I#0H@(" @(" @('-E;&8N9&(N:6YF;RYD8E]C
M86-H92 ](&-A8VAE#0H@(" @(" @('-E;&8N9&(N;W!E;BAF:6QE;F%M92P@
M9FEL971Y<&4L(&9L86=S+"!M;V1E*0T*(" @(" @("!T<GDZ#0H@(" @(" @
M(" @(" C(&-R96%T92!A('-T<FEN9R!T:&%T(&QO;VMS(&QI:V4 at 82!F:6QE
M#0H@(" @(" @(" @("!B=68]4W1R:6YG24\H<V5L9BYD8ELB(2)=*2 C('-P
M96-I86P@<F]W(&YA;65D("(A(B!I<R!T:&4 at 9&%T86)A<V4@:&5A9&5R+"!E
M=&,N#0H@(" @(" @(" @(" C(&-R96%T92!A(')O=R!C;&%S<R!O8FIE8W0@
M9G)O;2!A('-T86YD87)D(&1I8W1I;VYA<GDZ#0H@(" @(" @(" @("!S96QF
M+F1B:6YF;SU5;G!I8VML97(H8G5F*2YL;V%D*"D-"B @(" @(" @(" @(&EF
M("AS96QF+F%U=&]I;F,^/3 I. at T*(" @(" @(" @(" @(" @('-E;&8N875T
M;VEN8R ]('-E;&8N9&)I;F9O6R)A=71O:6YC(ET-"B @(" @(" @(" @('!R
M:6YT(")L;V%D960@<')E=FEO=7,L('-E;&8N875T;VEN8STB+'-E;&8N875T
M;VEN8PT*(" @(" @("!E>&-E<'0Z#0H@(" @(" @(" @("!P<FEN=" B;F5W
M('1A8FQE(@T*(" @(" @(" @(" @<V5L9BYD8FEN9F\@/2![?0T*(" @(" @
M(" @(" @<V5L9BYD8FEN9F];(F]R9&5R(ET@/2!S96QF+G)O=U]C;&%S<U]O
M8FHN;W)D97(@(R!F:65L9"!N86UE<R!A;F0@=&AE:7(@;W)D97)S(&EN('1H
M92!R;W<@87)R87D-"B @(" @(" @(" @('-E;&8N=7!D871E7VAE861E<B at I
M#0H@(" @(" @(" @("!R971U<FX@(R!D;VXG="!N965D('1O(&-H96-K(&-O
M;'5M;B!M87!P:6YG+"!A<R!W92!J=7-T(&-R96%T960@:70A#0H@(" @(" @
M(", at 8VAE8VL@8V]L=6UN(&UA<'!I;F<Z#0H@(" @(" @(&UA<"QE,2QE,B ]
M(%]C;VQ?;6%P*'-E;&8N9&)I;F9O6R)O<F1E<B)=+"!S96QF+G)O=U]C;&%S
M<U]O8FHN;W)D97(I#0H@(" @(" @(&EF("AE,3XP*6]R*&4R/C I.B C(&5R
M<F]R<R$_#0H@(" @(" @(" @("!R86ES92!,5T1B17)R;W(L(")M=7-T(')E
M<&%I<B at I(&1A=&%B87-E(&)E9F]R92!O<&5N:6YG(2!C;VQU;6X@;F%M97,@
M8VAA;F=E9"!O<B!R96]R9&5R960A(@T*(" @(" @(" -"B @("!D968@=7!D
M871E7VAE861E<BAS96QF*3H-"B @(" @(" @(G=R:71E(&$@<W!E8VEA;"!R
M96-O<F0@=&\@=&AE(&1A=&%B87-E+"!C;VYT86EN:6YG(&-O;'5M;B!N86UE
M<R!A;F0@='EP97,B#0H@(" @(" @(&EF("AS96QF+F-L;W-E9"DZ#0H@(" @
M(" @(" @("!R971U<FX-"B @(" @(" @<V5L9BYD8FEN9F];(F%U=&]I;F,B
M72 ]('-E;&8N875T;VEN8R C(&%U=&\@:6YC<F5M96YT:6YG(&9I96QD<RT@
M;F5X="!V86QU90T*(" @(" @("!S96QF+F1B:6YF;ULB=7!D871E(ET@/2!T
M:6UE+G1I;64H*0T*(" @(" @(" -"B @(" @(" @8G5F(#T at 4W1R:6YG24\H
M*2 -"B @(" @(" @<&L@/2!0:6-K;&5R*&)U9BPQ*0T*(" @(" @("!P:RYD
M=6UP*'-E;&8N9&)I;F9O*0T*(" @(" @("!S96QF+F1B6R(A(ET@/2!B=68N
M9V5T=F%L=64H*0T*#0H@(" @(" @( T*(R @("!D968 at 7U]D96Q?7RAS96QF
M*3H-"B,@(" @(" @('!R:6YT(")L=V1B=&%B;&4N7U]D96Q?7R(-"B,@(" @
M(" @('-E;&8N8VQO<V4H*0T*#0H-"B @(" @(" @(" @(" -"B @("!D968@
M8W-V7V5X<&]R="AS96QF+&9I;&5N86UE*3H@#0H@(" @(" @(")D=6UP(&-O
M;G1E;G1S('1O(&-S=B!F:6QE("T@<F5T=7)N<R!C;W5N="!O9B!R;W=S(&5X
M<&]R=&5D(@T*(" @(" @("!F/6]P96XH9FEL96YA;64L(G<B*0T*(" @(" @
M("!F+G=R:71E*"!S96QF+G)O=U]C;&%S<U]O8FHN8W-V7VAE861E<B K(&-H
M<B at Q,"D@*0T*(" @(" @("!K97ES(#T@<V5L9BYK97ES*"D@(R!N;W1E.B!S
M96QF+FME>7, at 86QR96%D>2!R96UO=F5S('1H92!S<&5C:6%L("(A(B!K97DN
M#0H@(" @(" @(&ME>7,N<V]R="@I#0H@(" @(" @("-P<FEN=" B:V5Y<ULP
M73TB+&ME>7-;,%T-"B @(" @(" @9F]R(&D@:6X@:V5Y<SH-"B @(" @(" @
M(" @(&8N=W)I=&4H('-E;&8N9V5T<F]W*&DI+F-S=E]R;W<H*2 K(&-H<B at Q
M,"DI#0H@(" @(" @(" @(" @(" -"B @(" @(" @9BYC;&]S92 at I#0H@(" @
M(" @(')E='5R;B!L96XH:V5Y<RD-"@T*(" @(&1E9B!C<W9?:6UP;W)T*'-E
M;&8L9FEL96YA;64L*3H-"B @(" @(" @(FEM<&]R="!A(&-S=B!F:6QE+"!C
M86X@:6UP;W)T('!A<G1I86P at 9FEL92!I;F9O<FUA=&EO;BP at 86YD(&-A;B!I
M9VYO<F4 at 97AT<F$@8V]L=6UN<R(-"B @(" @(" @9CUO<&5N*&9I;&5N86UE
M+")R(BD[#0H@(" @(" @(&5M<'1Y<F]W/5M.;VYE72IL96XH<V5L9BYR;W=?
M8VQA<W-?;V)J+F%T=')I8G5T97,I(", at 871T<FEB=71E(&-O=6YT(0T*(" @
M(" @("!L:6YE<R ](&8N<F5A9&QI;F5S*"D-"B @(" @(" @8V]L<R ](&5V
M86PH(ELB*VQI;F5S6S!=*R)=(BQS869E7V5V86PI#0H@(" @(" @(&QA<W0@
M/2!L96XH8V]L<RDM,0T*(" @(" @("!N965D;6%P(#T@,0T*(" @(" @("!C
M;VQ?;6%P+&4Q+&4R(#T at 7V-O;%]M87 H8V]L<RD-"B @(" @(" @:68@*&4Q
M/# I86YD*&4R/# I. at T*(" @(" @(" @(" @;F5E9&UA<" ](# @(R!D:7)E
M8W0 at 8V]P>2P@;F\@8V]N=F5R<VEO;@T*(" @(" @("!E;&EF(&4R(#X](&QE
M;BAC;VQS*3H-"B @(" @(" @(" @(')A:7-E($Q71&)%<G)O<BP@(DYO(&-O
M;'5M;B!N86UE<R!M871C:"X at 0V%N)W0@:6UP;W)T(&9I;&4A(@T*(" @(" @
M("!F;W(@;"!I;B!L:6YE<ULQ.ETZ#0H@(" @(" @(" @("!I9B!N965D;6%P
M. at T*(" @(" @(" @(" @(" @('(@/2!E;7!T>7)O=ULZ70T*(" @(" @(" @
M(" @(" @(&-O;',@/2!E=F%L*");(BML:6YE<ULP72LB72(L<V%F95]E=F%L
M*0T*(" @(" @(" @(" @(" @(&9O<B!N(&EN(')A;F=E*# L;&%S="DZ(",@
M;6%P(&EN=&\@<@T*(" @(" @(" @(" @(" @(" @("!M(#T at 8V]L7VUA<%MN
M70T*(" @(" @(" @(" @(" @(" @("!I9B!M(#X@,#H-"B @(" @(" @(" @
M(" @(" @(" @(" @(');;5T@/2!C;VQS6VY=#0H@(" @(" @(" @("!E;'-E
M. at T*(" @(" @(" @(" @(" @('(@/2!C;VQS6SI=(", at 8V]P>2!C;VQS(2!A
M=F]I9"!P<F]B;&5M<R$-"B @(" @(" @(" @(&YE=W)O=R ]('-E;&8N<F]W
M7V-L87-S7V]B:B at I(", at 8W)E871E(&9R;VT at 9&5F875L=',-"B @(" @(" @
M(" @(&YE=W)O=RY?7V1I8W1?7ULB<F5C(ET@/2!R#0H@(" @(" @(" @("!S
M96QF+G!U=')O=RAN97=R;W<I#0H@(" @(" @(" @(" -"B @(" @(" @#0H@
M(" @9&5F(&ME>7,H<V5L9BDZ( T*(" @(" @(" B<F5T=7)N(&ME>7,N(')A
M:7-E<R!E>&-E<'1I;VX@:68 at 96UP='D@;W(@;F]T(&]P96XB#0H@(" @(" @
M(&ME>7,@/2!S96QF+F1B+FME>7,H*0T*(" @(" @("!T<GDZ#0H@(" @(" @
M(" @("!K97ES+G)E;6]V92 at B(2(I(",@<F5M;W9E('-P96-I86P@=F%L=64A
M#0H@(" @(" @(&5X8V5P="!686QU945R<F]R. at T*(" @(" @(" @(" @<&%S
M<PT*(" @(" @(" C(&-O;G9E<G0@:V5Y<R!T;R!I;G0Z#0H@(" @(" @(&EF
M('-E;&8N:6YT7VME>7,Z#0H@(" @(" @(" @("!R971U<FX@;6%P*&EN="QK
M97ES*0T*(" @(" @("!E;'-E. at T*(" @(" @(" @(" @(W!R:6YT(")S='(@
M:V5Y<R(-"B @(" @(" @(" @(')E='5R;B!K97ES#0H@(" @#0H@(" @9&5F
M(&ME>6-O=6YT*'-E;&8I. at T*(" @(" @(" B<F5T=7)N(&ME>2!C;W5N="X@
M<F5T=7)N<R P(&EF(&5M<'1Y(@T*(" @(" @("!I9B!S96QF+F1B(#T]($YO
M;F4Z#0H@(" @(" @(" @("!R971U<FX@, T*(" @(" @("!E;'-E. at T*(" @
M(" @(" @(" @<F5T=7)N(&QE;BAS96QF+F1B+FME>7,H*2DM,0T*#0H-"B @
M("!D968 at 861D<F]W*'-E;&8L*BIO<'1I;VYA;%]A<F=S*3H-"B @(" @(" @
M(F%D9')O=R!C<F5A=&5S(&$@=V]R:VEN9R!R;W<N(&%D9')O=RAF,3U<(F%<
M(BQF,CTU*2!S971S(&9I96QD<R!F,2!A;F0 at 9C(B#0H@(" @(" @("-P<FEN
M=" B861D<F]W+3XB+&]P=&EO;F%L7V%R9W,-"B @(" @(" @:68@*'-E;&8N
M;6]D92 ]/2 Q*3H@(R!I9B!E9&ET:6YG+"!P;W-T('!R979I;W5S(')O=PT*
M(" @(" @(" @(" @(" @('-E;&8N<&]S="@I(" @(" @(" -"B @(" @(" @
M;F5W<F]W(#T@<V5L9BYR;W=?8VQA<W-?;V)J*"D@(R!C<F5A=&4 at 9G)O;2!D
M969A=6QT<PT*(" @(" @("!I9B H<V5L9BYA=71O:6YC(#X](# I. at T*(" @
M(" @(" @(" @(" @(&YE=W)O=RYS971?:V5Y*'-E;&8N875T;VEN8RD-"B @
M(" @(" @(" @(" @("!S96QF+F%U=&]I;F,@/2!S96QF+F%U=&]I;F,@*S$-
M"B @(" @(" @(" @(" @("!S96QF+F1I<G1Y(#T@,2 C(&9O<F-E('=R:71E
M(&]F(&%U=&]I;F-R96UE;G0@=F%L=64-"B @(" @(" @(" @(" @(" C<')I
M;G0@(FME>2 ]("(L<V5L9BYA=71O:6YC#0H@(" @(" @(&EF("AL96XH;W!T
M:6]N86Q?87)G<RD^,"DZ(",@:6YI="!P87)A;65T97)S/PT*"0EN97=R;W<N
M<V5T7V9R;VU?9&EC="AO<'1I;VYA;%]A<F=S*0T*(" @(" @("!S96QF+FUO
M9&4@/2 Q(",@<&5N9&EN9R!E9&ET<PT*(" @(" @("!S96QF+G!E;F1I;F<@
M/2!N97=R;W<-"B @(" @(" @<F5T=7)N(&YE=W)O=PT*#0H@(" @9&5F('!O
M<W0H<V5L9BDZ#0H@(" @(" @(")A9G1E<B!A9&1R;W<@>6]U(&-A;B!C86QL
M('!O<W0@;W(@8V%N8V5L+B!I9B!Y;W4 at 8V%L;"!C86YC96PL('1H92!P;W-T
M('=I;&P@;F]T(&AA<'!E;B(-"B @(" @(" @:68@*'-E;&8N<&5N9&EN9R!I
M<R!.;VYE*3H-"B @(" @(" @(" @(')E='5R;B!.;VYE#0H@(" @(" @(&EF
M("AS96QF+FUO9&4@/3T@,"DZ#0H@(" @(" @(" @("!R971U<FX at 3F]N90T*
M(" @(" @("!I9B H<V5L9BYU;FEQ=65C:&5C:RDZ#0H@(" @(" @(" @("!I
M9B H<V5L9BYH87-?:V5Y*'-E;&8N<&5N9&EN9RYK97DH*2DI. at T*(" @(" @
M(" @(" @(" @(')A:7-E($Q71&)%<G)O<BPB<&]S="!F86EL960Z(&ME>2!N
M;W0@=6YI<75E.B B*W-T<BAS96QF+G!E;F1I;F<N:V5Y*"DI#0H@(" @(" @
M(" @(" -"B @(" @(" @<V5L9BYP=71R;W<H('-E;&8N<&5N9&EN9R I#0H@
M(" @(" @('-E;&8N<&5N9&EN9R ]($YO;F4-"B @(" @(" @<V5L9BYM;V1E
M(#T@, T*(" @(" @(" -"B @("!D968 at 8V%N8V5L*'-E;&8I. at T*(" @(" @
M("!S96QF+G!E;F1I;F<@/2!.;VYE#0H@(" @(" @('-E;&8N;6]D92 ](# -
M"@T*(" @(&1E9B!D96Q?86QL<F]W<RAS96QF*3H-"B @(" @(" @(F1E;&5T
M97, at 86QL(&1A=&$@<F]W<R!I;B!A(&9I;&4L(&EN8VQU9&EN9R!T:&4 at 8V]L
M=6UN(&YA;65S(@T*(" @(" @("!S96QF+G!E;F1I;F<@/2!.;VYE#0H@(" @
M(" @('-E;&8N;6]D92 ](# -"B @(" @(" @9F]R(&D@:6X@<V5L9BYD8BYK
M97ES*"DZ#0H@(" @(" @(" @("!D96P@<V5L9BYD8EL@:2!=#0H@(" @(" @
M( T*(" @(" @(" -"B @("!D968 at 9&5L<F]W*'-E;&8L9&5L<F]W*3H-"B @
M(" @(" @9&5L('-E;&8N9&);(&1E;')O=RYK97DH*2!=#0H@(" @(" @(&1E
M;"!D96QR;W<-"@T*(" @(&1E9B!H87-?:V5Y*'-E;&8L:V5Y*3H-"B @(" @
M(" @(G-E87)C:"!F;W(@8GD@:V5Y('9A;'5E("AA<R!A('-T<FEN9RDN(')E
M='5R;G,@,"!O<B Q(@T*(" @(" @("!R971U<FX@<V5L9BYD8BYH87-?:V5Y
M*'-T<BAK97DI*0T*#0H@(" @9&5F(&=E=')O=RAS96QF+&ME>2DZ#0H@(" @
M(" @(")L;V]K=7 @<F]W(&)Y(&ME>2!V86QU92 H87, at 82!S=')I;F<I+B!R
M971U<FYS(')O=R!O8FIE8W0B#0H@(" @(" @(&EF("AS96QF+FUO9&4@/3T@
M,2DZ(",@=V]R:VEN9R!R;W<_#0H@(" @(" @(" @("!I9B H<V5L9BYP96YD
M:6YG+FME>2 at I(#T](&ME>2DZ#0H@(" @(" @(" @(" @(" @<F5T=7)N('-E
M;&8N<&5N9&EN9R @(R!R971U<FX@=V]R:VEN9R!R;W<-"B @(" @(" @(R!G
M970@=&AE(&-S=B!S=')I;F<@9G)O;2!T:&4 at 9FEL93H-"B @(" @(" @<F]W
M/7-E;&8N9&);<W1R*&ME>2E=#0H@(" @(" @(')E='5R;B!S96QF+G)O=U]C
M;&%S<U]O8FHH<F]W*0T*(" @(" @(" @(" @#0H@(" @9&5F('!U=')O=RAS
M96QF+"!R;W<I. at T*(" @(" @(" B<'5T(&$@<F]W(&EN=&\@=&AE(&1A=&%B
M87-E+B!R;W<@;75S="!H879E(&ME>2 at I(@T*(" @(" @("!R;W=?8W-V/2!R
M;W<N8W-V7W)O=R at I#0H@(" @(" @(&ME>2 ]('-T<BAR;W<N:V5Y*"DI#0H@
M(" @(" @(&EF(&QE;BAK97DI/3TP. at T*(" @(" @(" @(" @<F%I<V4 at 3%=$
M8D5R<F]R+" B4F]W(&AA<R!N;R!K97D@=F%L=64A(@T*(" @(" @("!S96QF
M+F1B6VME>5T@/2!R;W=?8W-V#0H@(" @#0H-"FQW9&)?=&%B;&5S(#T@>WT-
M"@T*(R!E=F5R>2!A9&0@=&\@=&AE('1A8FQE(&%D9', at 82!M971H;V0-"F1E
M9B!L=V1B7W1A8FQE7V%D9"AT86)L96YA;64L9&5S8W)I<'1I;VXL<F]W7V-L
M87-S7V]B:BQF:6QE;F%M93U.;VYE+'5S95]U;FEQ=65C:&5C:STQ+'5S95]A
M=71O:6YC/3 L=7-E7VEN=&ME>7,],"DZ#0H@(" @(F%D9',@:71E;2!T;R!T
M86)L97, at 9&EC=&EO;F%R>2(-"B @("!O8FH@/2!L=V1B7W1A8FQE*'1A8FQE
M;F%M92P-"B @(" @(" @(" @(" @(" @(" @9&5S8W)I<'1I;VXL#0H@(" @
M(" @(" @(" @(" @(" @(')O=U]C;&%S<U]O8FHL#0H@(" @(" @(" @(" @
M(" @(" @(&9I;&5N86UE+ T*(" @(" @(" @(" @(" @(" @("!U<V5?=6YI
M<75E8VAE8VLL#0H@(" @(" @(" @(" @(" @(" @('5S95]A=71O:6YC+ T*
M(" @(" @(" @(" @(" @(" @("!U<V5?:6YT:V5Y<PT*(" @(" @(" @(" @
M(" @(" @("D-"B @("!L=V1B7W1A8FQE<UMT86)L96YA;65=(#T@(&]B:@T*
M(" @(')E='5R;B!O8FH-"@T*#0ID968@=&5S=%]A8W1I=F5?861D<F]W<R at I
M. at T*(" @(")C86QL960 at 8GD@=&5S="@I('1O(&%D9"!S;VUE('-A;7!L92!R
M;W=S('1O(&$@9&%T86)A<V4B#0H@(" @8V]U;G0@/2 Q,# -"B @("!G<F]U
M<',@/2!;(")',2(L(")',B(L(")',R(L(")31R(@70T*(" @('1A9T$@/2!;
M(D-/3TPB+")"4D5!2T52(BPB0558(BPB4D]/32(L(D5154E0(BPB34E30R(L
M(D%,5"(L(DY%6%0B70T*(" @('1A9T(@/2!;(E1%35 B+")44DE0(BPB4U1!
M5$4B+" B5$535"(L(")&055,5"(L(")35TE40T at B(%T-"B @("!C;V1E(#T@
M,3 P, T*(" @(&9O<B!G(&EN(&=R;W5P<SH-"B @(" @(" @9F]R(&$@:6X@
M=&%G03H-"B @(" @(" @(" @(&9O<B!B(&EN('1A9T(Z#0H@(" @(" @(" @
M(" @(" @8V]D92 ](&-O9&4@*R Q, T*(" @(" @(" @(" @(" @(&%C=&EV
M92YA9&1R;W<H('1A9SUG*R(N(BMA*V(L(&1E<V-R:7!T:6]N/2)3;VUE=&AI
M;F<@;F%M960@(BMG*R(@:&%S("(K82MB+"!N=6UC;V1E/6-O9&4@*0T*(" @
M(" @(" @(" @(" @("-P<FEN="!A8W1I=F4N<&5N9&EN9RYK97DH*0T*#0H-
M"F1E9B!T97-T*"DZ#0H@(" @(FEF(&QW9&(N<'D@:7,@<G5N(&%S(&$@<W1A
M;F1A;&]N92!P<F]G<F%M+"!I="!R=6YS('1E<W0H*2!T;R!T<GD@;W5T('1H
M92!F=6YC=&EO;G,@:6X@=&AI<R!M;V1U;&4B#0H@(" @9VQO8F%L(&%C=&EV
M90T*(" @('0@/2!;70T*(" @('0N87!P96YD*'1I;64N=&EM92 at I*0T*(" @
M(&-L87-S(&%L87)M7V5V96YT7W)E8RAL=V1B7W)E8RDZ#0H@(" @(" @(" @
M("!A='1R:6)U=&5S(#T@>PT*(" @(" @(" @(" @(")U;FEQ=65I9"(Z(" @
M("@P+" @(" @("!);G14>7!E+" @(" @,3 L(" @<F5Q=6ER960L(" B(BDL
M#0H@(" @(" @(" @(" @(G1A9R(Z(" @(" @(" @*#$L(" @(" @(%-T<FEN
M9U1Y<&4L(" T," L("!R97%U:7)E9"P@("(B*2P-"B @(" @(" @(" @(" B
M9&5S8W)I<'1I;VXB.B H,BP@(" @(" @4W1R:6YG5'EP92P@(#@P("P@(')E
M<75I<F5D+" @(B(I+ T*(" @(" @(" @(" @(")N=6UC;V1E(CH@(" @("@S
M+" @(" @("!);G14>7!E+" @(" @,B @+" @<F5Q=6ER960L(" P*2P@(" @
M(" @(" -"B @(" @(" @(" @(" B<W1A=&4B.B @(" @(" H-"P@(" @(" @
M26YT5'EP92P@(" @(#(@("P@(')E<75I<F5D+" @,"DL(" @(" @(" @#0H@
M(" @(" @(" @(" @(G-E=F5R:71Y(CH@(" @*#4L(" @(" @($EN=%1Y<&4L
M(" @(" R(" L("!R97%U:7)E9"P@(# I+" @(" @(" @( T*(" @(" @(" @
M(" @(")A8VLB.B @(" @(" @("@V+" @(" @("!);G14>7!E+" @(" @,B @
M+" @<F5Q=6ER960L(" P*2P@(" @(" @(" -"B @(" @(" @(" @(" B9&%T
M971I;64B.B @(" H-RP)("!&;&]A=%1Y<&4L(" @.2 @+" @<F5Q=6ER960L
M(" P+C I#0H@(" @(" @(" @("!]#0H@(" @(" @(" @("!O<F1E<B ](&QW
M9&)?;W)D97(H871T<FEB=71E<RD-"B @(" @(" @(" @(&-S=E]H96%D97(@
M/2!M86ME7V-S=E]H96%D97(H;W)D97(I(",@;75S="!B92!N86UE9"!C<W9?
M:&5A9&5R#0H@(" @(" @(" @("!D968 at 7U]I;FET7U\H("!S96QF+" @<F]W
M/4YO;F4@*3H-"B @(" @(" @(" @(" @("!S96QF+G-E='5P*')O=RD@(R!I
M;FET:6%L:7IE('1O(&1E9F%U;'0@=F%L=65S#0H@(" @<')I;G0@(DQI9VAT
M=V5I9VAT($1A=&%B87-E("T at 0F%S:6, at 5&5S=',B#0H@(" @(W!R:6YT(")M
M87 @=&5S=" Q.B(L7V-O;%]M87 H(%L@(F$B+")B(BPB8R(L(")D(B!=+"!;
M(")C(BP@(F$B+" B8B(@72 I#0H@(" @(W!R:6YT(")M87 @=&5S=" R.B(L
M7V-O;%]M87 H(%L@(F$B+")X(BPB>2(L(")Z(B!=+"!;(")P(BP@(F$B("!=
M("D-"B @(" C<')I;G0@(FUA<"!T97-T(#,Z(BQ?8V]L7VUA<"@@6R B02(L
M(E at B+" B4B(L(")1(B!=+"!;(")!(BPB6"(L(")2(BP@(E$B(%T@*0T*(" @
M('!R:6YT(")T86)L92!A8W1I=F4Z(@T*(" @(&%C=&EV92 @(#T@;'=D8E]T
M86)L95]A9&0H(")A8W1I=F4B+" @(")A8W1I=F4 at 86QA<FUS(BP at 86QA<FU?
M979E;G1?<F5C+ T*(" @(" @(" @(" @(" @(" @(" @(" @(" @(" @("!U
M<V5?=6YI<75E8VAE8VL],2QU<V5?875T;VEN8STQ+'5S95]I;G1K97ES/3$I
M#0H-"B @("!T+F%P<&5N9"AT:6UE+G1I;64H*2D-"B @("!P<FEN=" B=&%B
M;&4@:&ES=&]R>3HB#0H@(" @(VAI<W1O<GD@(#T@;'=D8E]T86)L95]A9&0H
M(")H:7-T;W)Y(BP@(")A;&%R;2]E=F5N="!H:7-T;W)Y(BP at 86QA<FU?979E
M;G1?<F5C("D-"B @("!T97-T7V%C=&EV95]A9&1R;W=S*"D[#0H-"B @("!T
M+F%P<&5N9"AT:6UE+G1I;64H*2D-"@T*(" @(&L@/2!A8W1I=F4N:V5Y<R at I
M#0H@(" @:RYS;W)T*"D-"B @("!N/6QE;BAK*0T*(" @('!R:6YT(")A8W1I
M=F4N:V5Y<STB+'-T<BAK6S Z,3!=*5LZ+3%=+"(L("XN+BX at +" B+'-T<BAK
M6VXM,3 Z;ETI6S$Z70T*(" @('!R:6YT(")A8W1I=F4N:V5Y8V]U;G0](BQA
M8W1I=F4N:V5Y8V]U;G0H*0T*(" @(&1I<B at I#0H@(" @<')I;G0@(F%C=&EV
M92!E>'!O<G0Z(@T*(" @(&%C=&EV92YC<W9?97AP;W)T*")A8W1I=F4N8W-V
M(BD-"B @("!T+F%P<&5N9"AT:6UE+G1I;64H*2D-"@T*(" @('!R:6YT(")A
M8W1I=F4 at 8VQO<V4Z(@T*(" @(&%C=&EV92YC;&]S92 at I#0H@(" @<')I;G0@
M(F1O;F4N(@T*(" @('0N87!P96YD*'1I;64N=&EM92 at I*0T*(" @('!R:6YT
M(")T:6UE<SHB#0H@(" @<R ]('1;,%T-"B @("!F;W(@<B!I;B!T6S$Z73H-
M"B @(" @(" @<')I;G0@<BUS#0H@(" @(" @(',]<@T*#0H-"@T*#0II9B!?
J7VYA;65?7R ]/2 G7U]M86EN7U\G. at T*(" @('1E<W0H*0T*(" @( T*
`
end




More information about the Python-list mailing list