Python-Dev
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2000 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 1999 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
March 2003
- 74 participants
- 97 discussions
It has been a while since I posted a copy of PEP 1 to the mailing
lists and newsgroups. I've recently done some updating of a few
sections, so in the interest of gaining wider community participation
in the Python development process, I'm posting the latest revision of
PEP 1 here. A version of the PEP is always available on-line at
http://www.python.org/peps/pep-0001.html
Enjoy,
-Barry
-------------------- snip snip --------------------
PEP: 1
Title: PEP Purpose and Guidelines
Version: $Revision: 1.36 $
Last-Modified: $Date: 2002/07/29 18:34:59 $
Author: Barry A. Warsaw, Jeremy Hylton
Status: Active
Type: Informational
Created: 13-Jun-2000
Post-History: 21-Mar-2001, 29-Jul-2002
What is a PEP?
PEP stands for Python Enhancement Proposal. A PEP is a design
document providing information to the Python community, or
describing a new feature for Python. The PEP should provide a
concise technical specification of the feature and a rationale for
the feature.
We intend PEPs to be the primary mechanisms for proposing new
features, for collecting community input on an issue, and for
documenting the design decisions that have gone into Python. The
PEP author is responsible for building consensus within the
community and documenting dissenting opinions.
Because the PEPs are maintained as plain text files under CVS
control, their revision history is the historical record of the
feature proposal[1].
Kinds of PEPs
There are two kinds of PEPs. A standards track PEP describes a
new feature or implementation for Python. An informational PEP
describes a Python design issue, or provides general guidelines or
information to the Python community, but does not propose a new
feature. Informational PEPs do not necessarily represent a Python
community consensus or recommendation, so users and implementors
are free to ignore informational PEPs or follow their advice.
PEP Work Flow
The PEP editor, Barry Warsaw <peps(a)python.org>, assigns numbers
for each PEP and changes its status.
The PEP process begins with a new idea for Python. It is highly
recommended that a single PEP contain a single key proposal or new
idea. The more focussed the PEP, the more successfully it tends
to be. The PEP editor reserves the right to reject PEP proposals
if they appear too unfocussed or too broad. If in doubt, split
your PEP into several well-focussed ones.
Each PEP must have a champion -- someone who writes the PEP using
the style and format described below, shepherds the discussions in
the appropriate forums, and attempts to build community consensus
around the idea. The PEP champion (a.k.a. Author) should first
attempt to ascertain whether the idea is PEP-able. Small
enhancements or patches often don't need a PEP and can be injected
into the Python development work flow with a patch submission to
the SourceForge patch manager[2] or feature request tracker[3].
The PEP champion then emails the PEP editor <peps(a)python.org> with
a proposed title and a rough, but fleshed out, draft of the PEP.
This draft must be written in PEP style as described below.
If the PEP editor approves, he will assign the PEP a number, label
it as standards track or informational, give it status 'draft',
and create and check-in the initial draft of the PEP. The PEP
editor will not unreasonably deny a PEP. Reasons for denying PEP
status include duplication of effort, being technically unsound,
not providing proper motivation or addressing backwards
compatibility, or not in keeping with the Python philosophy. The
BDFL (Benevolent Dictator for Life, Guido van Rossum) can be
consulted during the approval phase, and is the final arbitrator
of the draft's PEP-ability.
If a pre-PEP is rejected, the author may elect to take the pre-PEP
to the comp.lang.python newsgroup (a.k.a. python-list(a)python.org
mailing list) to help flesh it out, gain feedback and consensus
from the community at large, and improve the PEP for
re-submission.
The author of the PEP is then responsible for posting the PEP to
the community forums, and marshaling community support for it. As
updates are necessary, the PEP author can check in new versions if
they have CVS commit permissions, or can email new PEP versions to
the PEP editor for committing.
Standards track PEPs consists of two parts, a design document and
a reference implementation. The PEP should be reviewed and
accepted before a reference implementation is begun, unless a
reference implementation will aid people in studying the PEP.
Standards Track PEPs must include an implementation - in the form
of code, patch, or URL to same - before it can be considered
Final.
PEP authors are responsible for collecting community feedback on a
PEP before submitting it for review. A PEP that has not been
discussed on python-list(a)python.org and/or python-dev(a)python.org
will not be accepted. However, wherever possible, long open-ended
discussions on public mailing lists should be avoided. Strategies
to keep the discussions efficient include, setting up a separate
SIG mailing list for the topic, having the PEP author accept
private comments in the early design phases, etc. PEP authors
should use their discretion here.
Once the authors have completed a PEP, they must inform the PEP
editor that it is ready for review. PEPs are reviewed by the BDFL
and his chosen consultants, who may accept or reject a PEP or send
it back to the author(s) for revision.
Once a PEP has been accepted, the reference implementation must be
completed. When the reference implementation is complete and
accepted by the BDFL, the status will be changed to `Final.'
A PEP can also be assigned status `Deferred.' The PEP author or
editor can assign the PEP this status when no progress is being
made on the PEP. Once a PEP is deferred, the PEP editor can
re-assign it to draft status.
A PEP can also be `Rejected'. Perhaps after all is said and done
it was not a good idea. It is still important to have a record of
this fact.
PEPs can also be replaced by a different PEP, rendering the
original obsolete. This is intended for Informational PEPs, where
version 2 of an API can replace version 1.
PEP work flow is as follows:
Draft -> Accepted -> Final -> Replaced
^
+----> Rejected
v
Deferred
Some informational PEPs may also have a status of `Active' if they
are never meant to be completed. E.g. PEP 1.
What belongs in a successful PEP?
Each PEP should have the following parts:
1. Preamble -- RFC822 style headers containing meta-data about the
PEP, including the PEP number, a short descriptive title
(limited to a maximum of 44 characters), the names, and
optionally the contact info for each author, etc.
2. Abstract -- a short (~200 word) description of the technical
issue being addressed.
3. Copyright/public domain -- Each PEP must either be explicitly
labelled as placed in the public domain (see this PEP as an
example) or licensed under the Open Publication License[4].
4. Specification -- The technical specification should describe
the syntax and semantics of any new language feature. The
specification should be detailed enough to allow competing,
interoperable implementations for any of the current Python
platforms (CPython, JPython, Python .NET).
5. Motivation -- The motivation is critical for PEPs that want to
change the Python language. It should clearly explain why the
existing language specification is inadequate to address the
problem that the PEP solves. PEP submissions without
sufficient motivation may be rejected outright.
6. Rationale -- The rationale fleshes out the specification by
describing what motivated the design and why particular design
decisions were made. It should describe alternate designs that
were considered and related work, e.g. how the feature is
supported in other languages.
The rationale should provide evidence of consensus within the
community and discuss important objections or concerns raised
during discussion.
7. Backwards Compatibility -- All PEPs that introduce backwards
incompatibilities must include a section describing these
incompatibilities and their severity. The PEP must explain how
the author proposes to deal with these incompatibilities. PEP
submissions without a sufficient backwards compatibility
treatise may be rejected outright.
8. Reference Implementation -- The reference implementation must
be completed before any PEP is given status 'Final,' but it
need not be completed before the PEP is accepted. It is better
to finish the specification and rationale first and reach
consensus on it before writing code.
The final implementation must include test code and
documentation appropriate for either the Python language
reference or the standard library reference.
PEP Template
PEPs are written in plain ASCII text, and should adhere to a
rigid style. There is a Python script that parses this style and
converts the plain text PEP to HTML for viewing on the web[5].
PEP 9 contains a boilerplate[7] template you can use to get
started writing your PEP.
Each PEP must begin with an RFC822 style header preamble. The
headers must appear in the following order. Headers marked with
`*' are optional and are described below. All other headers are
required.
PEP: <pep number>
Title: <pep title>
Version: <cvs version string>
Last-Modified: <cvs date string>
Author: <list of authors' real names and optionally, email addrs>
* Discussions-To: <email address>
Status: <Draft | Active | Accepted | Deferred | Final | Replaced>
Type: <Informational | Standards Track>
* Requires: <pep numbers>
Created: <date created on, in dd-mmm-yyyy format>
* Python-Version: <version number>
Post-History: <dates of postings to python-list and python-dev>
* Replaces: <pep number>
* Replaced-By: <pep number>
The Author: header lists the names and optionally, the email
addresses of all the authors/owners of the PEP. The format of the
author entry should be
address(a)dom.ain (Random J. User)
if the email address is included, and just
Random J. User
if the address is not given. If there are multiple authors, each
should be on a separate line following RFC 822 continuation line
conventions. Note that personal email addresses in PEPs will be
obscured as a defense against spam harvesters.
Standards track PEPs must have a Python-Version: header which
indicates the version of Python that the feature will be released
with. Informational PEPs do not need a Python-Version: header.
While a PEP is in private discussions (usually during the initial
Draft phase), a Discussions-To: header will indicate the mailing
list or URL where the PEP is being discussed. No Discussions-To:
header is necessary if the PEP is being discussed privately with
the author, or on the python-list or python-dev email mailing
lists. Note that email addresses in the Discussions-To: header
will not be obscured.
Created: records the date that the PEP was assigned a number,
while Post-History: is used to record the dates of when new
versions of the PEP are posted to python-list and/or python-dev.
Both headers should be in dd-mmm-yyyy format, e.g. 14-Aug-2001.
PEPs may have a Requires: header, indicating the PEP numbers that
this PEP depends on.
PEPs may also have a Replaced-By: header indicating that a PEP has
been rendered obsolete by a later document; the value is the
number of the PEP that replaces the current document. The newer
PEP must have a Replaces: header containing the number of the PEP
that it rendered obsolete.
PEP Formatting Requirements
PEP headings must begin in column zero and the initial letter of
each word must be capitalized as in book titles. Acronyms should
be in all capitals. The body of each section must be indented 4
spaces. Code samples inside body sections should be indented a
further 4 spaces, and other indentation can be used as required to
make the text readable. You must use two blank lines between the
last line of a section's body and the next section heading.
You must adhere to the Emacs convention of adding two spaces at
the end of every sentence. You should fill your paragraphs to
column 70, but under no circumstances should your lines extend
past column 79. If your code samples spill over column 79, you
should rewrite them.
Tab characters must never appear in the document at all. A PEP
should include the standard Emacs stanza included by example at
the bottom of this PEP.
A PEP must contain a Copyright section, and it is strongly
recommended to put the PEP in the public domain.
When referencing an external web page in the body of a PEP, you
should include the title of the page in the text, with a
footnote reference to the URL. Do not include the URL in the body
text of the PEP. E.g.
Refer to the Python Language web site [1] for more details.
...
[1] http://www.python.org
When referring to another PEP, include the PEP number in the body
text, such as "PEP 1". The title may optionally appear. Add a
footnote reference that includes the PEP's title and author. It
may optionally include the explicit URL on a separate line, but
only in the References section. Note that the pep2html.py script
will calculate URLs automatically, e.g.:
...
Refer to PEP 1 [7] for more information about PEP style
...
References
[7] PEP 1, PEP Purpose and Guidelines, Warsaw, Hylton
http://www.python.org/peps/pep-0001.html
If you decide to provide an explicit URL for a PEP, please use
this as the URL template:
http://www.python.org/peps/pep-xxxx.html
PEP numbers in URLs must be padded with zeros from the left, so as
to be exactly 4 characters wide, however PEP numbers in text are
never padded.
Reporting PEP Bugs, or Submitting PEP Updates
How you report a bug, or submit a PEP update depends on several
factors, such as the maturity of the PEP, the preferences of the
PEP author, and the nature of your comments. For the early draft
stages of the PEP, it's probably best to send your comments and
changes directly to the PEP author. For more mature, or finished
PEPs you may want to submit corrections to the SourceForge bug
manager[6] or better yet, the SourceForge patch manager[2] so that
your changes don't get lost. If the PEP author is a SF developer,
assign the bug/patch to him, otherwise assign it to the PEP
editor.
When in doubt about where to send your changes, please check first
with the PEP author and/or PEP editor.
PEP authors who are also SF committers, can update the PEPs
themselves by using "cvs commit" to commit their changes.
Remember to also push the formatted PEP text out to the web by
doing the following:
% python pep2html.py -i NUM
where NUM is the number of the PEP you want to push out. See
% python pep2html.py --help
for details.
Transferring PEP Ownership
It occasionally becomes necessary to transfer ownership of PEPs to
a new champion. In general, we'd like to retain the original
author as a co-author of the transferred PEP, but that's really up
to the original author. A good reason to transfer ownership is
because the original author no longer has the time or interest in
updating it or following through with the PEP process, or has
fallen off the face of the 'net (i.e. is unreachable or not
responding to email). A bad reason to transfer ownership is
because you don't agree with the direction of the PEP. We try to
build consensus around a PEP, but if that's not possible, you can
always submit a competing PEP.
If you are interested assuming ownership of a PEP, send a message
asking to take over, addressed to both the original author and the
PEP editor <peps(a)python.org>. If the original author doesn't
respond to email in a timely manner, the PEP editor will make a
unilateral decision (it's not like such decisions can be
reversed. :).
References and Footnotes
[1] This historical record is available by the normal CVS commands
for retrieving older revisions. For those without direct access
to the CVS tree, you can browse the current and past PEP revisions
via the SourceForge web site at
http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/python/nondist/peps/?cvsroot=…
[2] http://sourceforge.net/tracker/?group_id=5470&atid=305470
[3] http://sourceforge.net/tracker/?atid=355470&group_id=5470&func=browse
[4] http://www.opencontent.org/openpub/
[5] The script referred to here is pep2html.py, which lives in
the same directory in the CVS tree as the PEPs themselves.
Try "pep2html.py --help" for details.
The URL for viewing PEPs on the web is
http://www.python.org/peps/
[6] http://sourceforge.net/tracker/?group_id=5470&atid=305470
[7] PEP 9, Sample PEP Template
http://www.python.org/peps/pep-0009.html
Copyright
This document has been placed in the public domain.
Local Variables:
mode: indented-text
indent-tabs-mode: nil
sentence-end-double-space: t
fill-column: 70
End:
8
14
23 Feb '05
Hi.
[Mark Hammond]
> The point isn't about my suffering as such. The point is more that
> python-dev owns a tiny amount of the code out there, and I don't believe we
> should put Python's users through this.
>
> Sure - I would be happy to "upgrade" all the win32all code, no problem. I
> am also happy to live in the bleeding edge and take some pain that will
> cause.
>
> The issue is simply the user base, and giving Python a reputation of not
> being able to painlessly upgrade even dot revisions.
I agree with all this.
[As I imagined explicit syntax did not catch up and would require
lot of discussions.]
[GvR]
> > Another way is to use special rules
> > (similar to those for class defs), e.g. having
> >
> > <frag>
> > y=3
> > def f():
> > exec "y=2"
> > def g():
> > return y
> > return g()
> >
> > print f()
> > </frag>
> >
> > # print 3.
> >
> > Is that confusing for users? maybe they will more naturally expect 2
> > as outcome (given nested scopes).
>
> This seems the best compromise to me. It will lead to the least
> broken code, because this is the behavior that we had before nested
> scopes! It is also quite easy to implement given the current
> implementation, I believe.
>
> Maybe we could introduce a warning rather than an error for this
> situation though, because even if this behavior is clearly documented,
> it will still be confusing to some, so it is better if we outlaw it in
> some future version.
>
Yes this can be easy to implement but more confusing situations can arise:
<frag>
y=3
def f():
y=9
exec "y=2"
def g():
return y
return y,g()
print f()
</frag>
What should this print? the situation leads not to a canonical solution
as class def scopes.
or
<frag>
def f():
from foo import *
def g():
return y
return g()
print f()
</frag>
[Mark Hammond]
> > This probably won't be a very popular suggestion, but how about pulling
> > nested scopes (I assume they are at the root of the problem)
> > until this can be solved cleanly?
>
> Agreed. While I think nested scopes are kinda cool, I have lived without
> them, and really without missing them, for years. At the moment the cure
> appears worse then the symptoms in at least a few cases. If nothing else,
> it compromises the elegant simplicity of Python that drew me here in the
> first place!
>
> Assuming that people really _do_ want this feature, IMO the bar should be
> raised so there are _zero_ backward compatibility issues.
I don't say anything about pulling nested scopes (I don't think my opinion
can change things in this respect)
but I should insist that without explicit syntax IMO raising the bar
has a too high impl cost (both performance and complexity) or creates
confusion.
[Andrew Kuchling]
> >Assuming that people really _do_ want this feature, IMO the bar should be
> >raised so there are _zero_ backward compatibility issues.
>
> Even at the cost of additional implementation complexity? At the cost
> of having to learn "scopes are nested, unless you do these two things
> in which case they're not"?
>
> Let's not waffle. If nested scopes are worth doing, they're worth
> breaking code. Either leave exec and from..import illegal, or back
> out nested scopes, or think of some better solution, but let's not
> introduce complicated backward compatibility hacks.
IMO breaking code would be ok if we issue warnings today and implement
nested scopes issuing errors tomorrow. But this is simply a statement
about principles and raised impression.
IMO import * in an inner scope should end up being an error,
not sure about 'exec's.
We will need a final BDFL statement.
regards, Samuele Pedroni.
18
78
> *Guido van Rossum * guido(a)python.org <mailto:guido%40python.org>
> //
>
>Tuples are for heterogeneous data, list are for homogeneous data.
>
Only if you include *both* null cases:
- tuple of type( i ) == type( i+1 )
- list of PyObject
Homo-/heterogeneity is orthogonal to the primary benefits of lists
(mutability) and of tuples (fixed order/length).
Else why can you do list( (1, "two", 3.0) ) and tuple( [x, y, z] ) ?
>Tuples are *not* read-only lists.
>
It just happens that "tuple( sequence )" is the most easy & obvious (and
thus right?) way to spell "immutable sequence".
Stop reading whenever you're convinced. ;-) (not about mutability,
but about homo/heterogeneity)
There are three (mostly) independent characteristics of tuples (in most
to least important order, by frequency of use, IMO):
- fixed order/fixed length - used in function argument/return tuples and
all uses as a "struct"
- heterogeneity allowed but not required - used in many function
argument tuples and many "struct" tuples
- immutability - implies fixed-order and fixed-length, and used
occasionally for specific needs
The important characteristics of lists are also independent of each
other (again, IMO on the order):
- mutability of length & content - used for dynamically building collections
- heterogeneity allowed but not required - used occasionally for
specific needs
It turns out that fixed-length sequences are often useful for
heterogeneous data, and that most sequences that require mutability are
homogeneous.
Examples from the standard library (found by grep '= (' and grep '= \[' ):
# homogeneous tuple - homogeneity, fixed order, and fixed length are
all required
# CVS says Guido wrote/imported this. ;-)
whrandom.py: self._seed = (x or 1, y or 1, z or 1)
# homogeneous tuple - homogeneity is required - all entries must be
'types'
# suitable for passing to 'isinstance( A, typesTuple )', which
(needlessly?) requires a tuple to avoid
# possibly recursive general sequences
types.py: StringTypes = (StringType, UnicodeType)
# heterogeneous list of values of all basic types (we need to be
able to copy all types of values)
# this could be a tuple, but neither immutability, nor fixed length,
nor fixed order are needed, so it makes more sense as a list
# CVS blames Guido here, too, in version 1.1. ;-)
copy.py: l = [None, 1, 2L, 3.14, 'xyzzy', (1, 2L), [3.14, 'abc'],
{'abc': 'ABC'}, (), [], {}]
Other homogeneous tuples (may benefit from mutability, but require
fixed-length/order):
- 3D coordinates
- RGB color
- binary tree node (child, next)
Other heterogeneous lists (homogeneous lists of base-class instances
blah-blah-blah):
- files AND directories to traverse (strings? "File" objects?)
- emails AND faxes AND voicemails AND tasks in your Inbox (items?)
- mail AND newsgroup accounts (accounts?)
- return values OR exceptions from a list of test cases and test suites
(PyObjects? introduce an artificial base class?)
Must-be-stubborn-if-you-got-this-far-ly y'rs ;-)
kb
15
48
Guido writes:
> IMO, xrange() must die.
Glad to hear it. I always found range() vs xrange() a wart.
But if you had it do do over, how would you do it?
-- Michael Chermside
6
12
I tried adding a variety of new instructions to the PVM, initially with a
code compression goal for the bytecodes, and later with a performance goal.
definitions:
USING_LOAD_FAST_N
accesses to locals with an index<16 using a one byte instruction (no
oparg)
USING_LOAD_CONST_N
accesses to consts with an index<16 using a one byte instruction (no
oparg)
USING_STORE_FAST_N
accesses to locals with an index<16 using a one byte instruction (no
oparg)
USING_SHORT_CMP
compare ops using a one byte instruction (no oparg)
PyStone score for best of 10 runs.
umodified 2.3a2 22200
using enum, 22200 (compacting the opcode numeric space using an enum instead
of #defines)
USING_LOAD_FAST_N 22700
USING_LOAD_CONST_N 22400
USING_STORE_FAST_N 22400
USING_LOAD_FAST_N, USING_LOAD_CONST_N 22350
USING_LOAD_FAST_N, USING_STORE_FAST_N, 22000
USING_LOAD_FAST_N, USING_LOAD_CONST_N, USING_STORE_FAST_N 22200
USING_SHORT_CMP 21500
USING_LOAD_FAST_N, USING_LOAD_CONST_N, USING_STORE_FAST_N, USING_SHORT_CMP
22000
Conclusions:
While reducing the size of compiled bytecodes by about 1%, the proposed
modifications at best increase performance by 2%, and at worst reduce
performance by 3%.
Enabling all of the proposed opcodes results in a 1% performance loss.
In general, it would seem that adding opcodes in bulk, even if many opcodes
switch to the same labels, results in a minor performance loss.
Running PyStone under windows results in a fairly large variation in
results. Ive attached a zip file containing the source files I modified. If
someone would like to try this code on their systems, I would be grateful to
know what kind of results they achieve.
The various proposed opcodes are controlled by a set of #defines in the file
opcode.h
Next steps:
The results of my static analysis indicate that the indices used on
LOAD_FAST, LOAD_CONST, STORE_FAST are almost always small. There may be some
benefit to optimising these instructions to use single byte opargs.
The results of my static and dynamic analysis indicate that the (COMPARE_OP,
JUMP_IF_FALSE, POP_TOP) pattern is highly used. Im looking at what changes
would need to be made to the compiler to remove the need for this sequence
of instructions.
begin 666 source.zip
M4$L#!!0````(`.0E6RZ%[DUZ.%X``)9\`0`'````8V5V86PN8^Q]?5<;.;+W
MW^2<?(>&>V9B)X8%,CLO,,D>`B9AQ\&L;2:9)S?7M[&;T!O3[76W,=S=/)_]
M^5657EK=:AS83';/>6[.3 )2J50JE4I5I9+ZP1\>!^WK:#3/HV"47D[C233&
M#^,H>/R'!U3Y]NW;8- -#KH[#X* ?\NF$6#FTR"+PMGH(DX^!.?I+/@8W2S2
MV3@+SFZ">4:E83".1WF<)N'L1C<>IZ/Y993D09ROHHQ[^8\X&4WFZ'+MY":_
M2).-B[5BH2*+2FWA^2R\C-*SOT:CW*V(KL*)6Y).:3QN69;/YJ/\,KH\BV:J
MN_-Q=!Y<AJ,XR=/LH@"+L@^3N2"(DG%\7B#NYU%^,T75<^;58#Y+@OPBSH(T
M">+SX":=SS17\<-%^C%"%8%$P5G\(<@6<3ZZV $3J/5_@( XB8+]O7Y[..AV
MAR^.7@9;J#34G=P,#]HO3E\2]"%8/H[.YA\^@-6,$81'L^DLPM^,4N/K= :]
MO?UV$&RMH%TG7:Q/HJMH$N2S<!0%YU&8SV=1L<'^J_;^+^VW^]+@()V?3:+U
MT44T^AA$UZ-H2E,:\._H&@T-6X@70F>79R9XW'@\"B>3Z2P=-1NVM!7X?V[N
M/E!#6X2S,88WFH2SD+K+J)LLQ\^C`CS-]9 E`<@/Z5^+J0H-2@`]3U@D"]0\
M!@W@G:_)>9CEGB9H4&G.?]4B&J=#ZGX)BKK6T74^-!CN3\1\.@[S:*@6ZC"<
M?<@L.D%0PFE_N04?RF>"S%)00Z47S20-A1COG-A5T>D,#SM[+X>_[O6"+4_Y
M+V^";;U4M-#KWH KF,Y8XITACR["&0].1+@(SN*B6\@/) GNV$IBUWJPLA+0
M'^&"CWU7:3PNX!YB;>0`B<;UO0`IT+I="7]\:+%$[TJV10.<T($W9]&0<4W
MX:7(A#PO??*/]%"=^' ZG=P,LTD,],N5@TMDF&7QAZ2NL>5;I:I>/5Q.A^D\
MA[J.1) _OVE\.4UG.311>MGX'.(5/#CLMEG>T]D\GHR'HPF&?V>61=CFA_1[
M1!MPHR*Z,HO+D;HRET4YBUR<G*? .;B81>&X3[V@V=W1S:)ZA!5@F!V7H4#S
M=D1:I+*\*]T9U7&\][H];/=ZW=[P=?]E\)\/5M82<"1X],W&]N9F]BC 1IZD
M>2#@XS73\&6G^V*O,_2T_S!)S\))\'EH3H]?=$^/#SI=Z+ 2GDDZ`IJK<!:'
M9Q.+"NPYCV91,H(!=A9A^)%:"#2C%<2'O7:9OO-9%-T5+1H&ZL\:!"D`W"1E
M`R\;I=-HC??L@QN,.1ZQD,W90(!B.X\G9%@\U$KYX#>P[&A_V'[;WC\=''6/
MAR>][N%1IVTAWO[E=.^@_U /!06O]OJO^D?_!_;+3T]_>OK#PP<K\X1H`ZV3
M%$2,K_\V#\?O+.#[70_,*)TGN0L$G3_)(L":OD_VCGI]%*R(D.FVTS">9>^V
M__C#>_SU/:-?T?2AUD*@$G6"MHK%-):]!OT[_XKIHVP-5N4%%BK^\&ZGF69X
M=,*EQZ>O(a)ZTM9\,C).],[7N(OML$_P>;I;+#T^-]FII@JURQUQ_8VFU/;;MG
MZY^6ZE^W!Z^Z!\%WI6*64UWYQU+EOL'V?:EF\-M)._BA5/BR?=SN[0VZO>#'
M4DUW\*K="WXJE9YT3X*M36;[<9K#,@_/H/_9E&8F9N!C]H!DWPZ1:Z30Y<=E
M%":TS .H('%P\OD44Y=$$5RB/,6Z"D;09-CH-[BU\,MMC[Y#(8 ,S_5IF%\$
M;-Y"RP*=^&5Q!O<*6)B(HW,"GW%I""1PG\8B.PLN1B7_BK\2(B&%\7X9_P^M
M\QO2C@EY#T!$@&72PT10:?]"V\'PZF;0I9,;[.UY\"'*LP"_PZ*,QHQI@2U9
MJ-L#4:31YY.\12CP\T3,^8MX&H276!@E=@>P">!5*HX1#BNISYZ51?2)*USK
M/J%Z`B3.GXIP/2D*U9.*,#TI"A&0E8EX[ET?S_WK`NU=FI][:'Z ]>[*:N.D
MVV^J]8P?WS]Y\N"!W=/P8YL\H9=1O@\(VBN+UD$63<Z;#_[^8 6N(1Q4\B)?
MD!GQ:PBOMK$6FS]K8LLQDZ2OS?<M]=.6^6G;_/3T?:L$_YVI^Z/YZ7OSTP\5
M^!]-W4_OL3-_$I5<&GNW>9_!8I1'Q_N]]B%9KL=I$@&_X8"4H$.M>ZVE-8 /
M*\@@V@EYM+O6L96P0<#H!6CXJKUW\(#\Y $$^4,\A-(&\==8D.R0)U@5),RS
MZ#+&>DK/"6L$IS:=K<>Y_+#!/OY*R2 #+EK[Z%[0S^98Y87FU,-9A,6I]MQH
M3'@P@^B6")G-DP2UJGD'ZXMZ7T3A1[O=4PL>B^V3`% _`3SX0]VE7.DSX!^@
M=IA$B[(M*3/ 3:4`/P;/3,/AR_WA,5H9@%;PK?":)PF#I"I:[\>GG4Z3V+W"
MH0^>SG."43/)`/CU$_>V_ESS#)V=[ZHRRPJ4;NI2=Z2H49B&12+)A?R%:"G(
M3D'6FJ@A&2KLN<P1^$E7T2R+&BX'6L%5G,4Y!4/DIY98L8^A=POK4^H:I7[L
MV%H!P1?Z92S<\3C"BDA'I7Z!NS2NTV,S,LOP*E-6U02 W:;U_@3J^0V >M%Y
MYA 9*&QVIARRI<K2<!!-5/^?ZB2+UD>"V(=O/"7'("<,-.U..;3XH"$=N_()
M0(<X!M&ULF%!WH4QK@QI:6S/9L-^E/?S&0H;^!T^""M45*0S<=G7[%H-)T34
MC5JJ:++FDV+I\7S]^3GY::./>3HUJ\"%5JOZI>X@0P^+\"8+%$R>TL8:SX++
M-,MI>XY41".:M<@9>; 2/ X2%&<9G(')C4"+A2(*B2?RK5*APE[0I6<2[D$T
MRX74,U!JR$1=H3!P&H)HSY+<0A-A.7ZQ$3VL\[H5_$#"DLFC'$'G:$JT6Y5&
M0U?=A\D-&]_1#"!A8L9[LP'#25B 6(?@",D:BA-2D=P],32^B@+2L^!<.I^,
ME?T&4-,9XQC=C":199D(OV5-F25V^I3U5E#I?YUGN4PAN2Z-,(/!-DTSV4)N
MXF@R)A%L!>3;A!/JW9B,[L8075^$P"5[(a)HB5YO$SO?T%WWX;.+)6IW&E)0NL
M1F)%UJ@MJ;IE.<-2I!5=T!DH=??JDJ[%;RZ^UQRP/\!.3 @E?$^JZMU[D 1$
M?U_3*WJMM3(8=E_\N;T_:&%2SV% I^?%'<?HI=9*K_NI16VMG%%KD(2F0>!M
M;4%M>V+))YK6/A8;S)<)L?[3[JVV!<@N&Q/H]VC0^%:@A_07UOYFBQ0*(4_/
MAAD,>,)=4# @6*KSZ1".N%037)%LD*IASL(L'AD\%CNJ,$>7I@9%XE1D_&MC
M'+$)A!Z;A0VG%:C&NJ"*=0H]F:OBP):34(1Y/JLVR.HJZ#PEG'D(GT53#WB8
M#9,YY,1?E45_F]-"]E9>PAG!#%?K+L+LHEI*ZM4S#AF#G6/6V?$(]NL>QM<J
M,2*MY43JI?%L?@Y=I)7/X(0BX7TLW,.]T\X@^$=0*'RU]VL;.V]+VIY/P@\\
MJ8&+$P=T4MK09@R?WA3M&DVS*?"@@4H,/2S'P"^*$UBSMJP5`J&5IEQ&!=)$
MQ%&I%/),FU;%6*;2+P*I;0D#J@LTK"FH$EU<`:[>L:M.%6;5UN0@1PY6LP0]
M8D<GIEIOZ*#/FZ/!J^'@50_*@<L2CE9UCP<RI8CP'7>'KPJ'DM%LEJ0XE-3>
MC3W+G-[D;![QF2<&BR%SJ&BH[:8A#*<9]HW=(a)*)1DU#.=B%%[>N8"#/:S#3(
M24UAS7\L'D!R@>S6Q2C8);;8H5"@MG*R7;5+=Y3$N2#-&E2.O4&VKC)B:PQA
MKZB0KFP*#S4&DI54F O=;"':JM'?YO%,:BH=MX(M`G:&8;%BIE7I,!Y3B)V,
M6W>(>X*]`UQZB'?HNXJO%V&=977X9EQ;(a)Z^6.&G<\%K89DJTP5UT$8:'81Y.
MV !NK/EP[C!P`(\Q4-QC+&MWG "AP+7T^XMPVE T!JMU5)%97D-9DB;K3%TZ
M&;O4U7']RS)*<+J,<LFH'S<!\ZBEL\_N9#'#HBSW<C?YX<!'G-G@8)R)GS$.
MZ&B+;,#^<.\<C7"J_Y',V"C)D&\@=BLD84*I(3HT"B,<@2F*>Y.E#B-\S%;^
M!<T)]9F)Z4T^%U IRC/$.K&M$!IL*WS4HMV%F',M7*PP_AM,LACUX23CX"QZ
MBB1OA1!-<R6,^3F1?1E1K#3.+EL!J":FY*P7@5R#9G2J-^&C-0YQ;C2A+<MB
M4ZOA5F]3<=@:*'5F/P0O*/9K-0Z.<Y3NI6@OAC$*J3[.,9R(@J@I?(3@<CZZ
M""(2A'6=M0$F'*3,1>8$1I3 "5PP1V81+PQJ&8['!!321)DIYDD,@5+QZ/'&
M!3E429;CMQ;[,&BKIE2U)1HYH+P(,RZ<Q'D^`<4Q1Z6P>::S&S#LWT=M>PYE
MLB"#O:-@>33P>6 *VZ)9I/QP?=@79"F)TUA.QT _>:3A&!67Z7@^B3(^(*!Y
M/2OD7V41#"2,$]"0,IIR0H)DH0OJE7_ 2846_QT6M)(6TC+7!\52(0*W/'92
MU2R[=]-DZ+*DQHQJJ1HTM1O\YVLAF2GC-$IO59U-4_6%-S?!^4\/EMUME-(:
MQ32P]0:>WTVX5[B9-"?'W+"E?I\D'K& O];J34Z-<#049C?)Z +;0SK/)H6P
M%>OVLY T<2/:@!HY/3YZ"^%4$8D`:,83,H,AMJ_#47#TARZ+]21BS3%+"4N4
M-?D\*H,VHD7 2#-@(<T2.GKF+-*[B4/0!H YX&Y+?5N0+!E2["0)C\T!%S<_
MRH/L0A2>",XF+[9L/L(NP0-8W^*2\S">T(ZUOFY^E(; 0@2&(QHA^">G:F%B
ML^3T(1VZ^!##$[P1]#@2Y/,P4VQI%UHRV,84[(]SZE)X(_P>SSG"!<T>7%)\
M:XI9UO.2-=' 8 #U#:TIX(#DLK,YY&%JT)I^:@JE. >5G5EM)99"CI2EH]%\
M)OLZ88Z3\K2W@(0XE]*AI"-$B.R!\5G+G"A>2JBZR>>921:>1ZL^AX>/$3%.
MT76.V#AC!^8S##1-));)GH9J)+IS,M'G)%1_N:'7ATY,?;/7.SXZ?KF*[OJ_
M'>^_ZG6/NZ?]SF^!)"N@*MCO'K17E>21IB<K9I$&"-!E,:534'J496FVP[.V
MU82*ITB<PP[#5R%^ET&WFZ5BC&(<D753'BSU+8<_QE:28^4W!(M.F:WPS6_
MVTG\$3M)B_''<B(;3A35,?9ANYHPNS/,DCEGIED)P@]@9993<^$Q#"Q3B)YT
M:X;.;VR5=#=&L.-*6X-RM#W*6<9DLK Z@4#/;Z,T=TV2&]A9(3)G480!8V72
M/$OD%,$;).::.3P(9\DJF #9Y.IP#*$C8,?&;04+O8(AN%<`2\#/6<B&*&!=
M3D_1O;16UJ2#"[UU\,]L8V/#.;4]/FD?'T!FZ "S'SS=5EZP/4!D?=]XS.&(
MAAP#D18W!T+0S9H0IN.=@_%](0^*3M0GG/VK&YS',S[2VKP5:A+>!B2\'N8I
M`D+*54<Q-M/AWGA\(ACH_+7A&4?Y7,L>CT%^LAM&)PR(82[B1Y5F_@+"G\!N
MC $-"<TB48G@JX8XXIQJ&)%"H4H3<.545AM9H-3$776B*0C'H\E$)A\8%F3B
M(U,,HKIJPN5$J37"H4U!)Y7IZ +^+3 2)7]%22-&N@`6WS>N`"@#"A#/G#F2
MG=_PQ.F-XB]_(?'&WL!Q13X?<D0B?K]!?$=;^F>W6HL)0"7^1IT[Z^ Z1TZ&
M@WCT,9JI[DN3+D3T6<7+HIRDZ91(,33;R6LG8__4Z=T5$FUDZ#76<T&(Q!FJ
MDY5Z2ZIHT.,PH]ZB9^>X`%V8V$UM0'JG?=.=]>JJ6"$+H;&[:XVX&(4UJ]LN
M;X8)7&E &9. <D>V0 Z$!&1_+ A%=#G-Q6%:43+@$PU"B=X\M8J&8O_U\JLI
M(Y0-6M7!S\$FC]B57K\`O8D>B5LN/O:-"H:Z2PO"C?\L-E=N),[@WG%XQ&E'
M\UE&@C:)+]WP) !M]5"J0=#FIM5DE$+2TR =@K!B*)V7,12=BF&_TAIHR=D5
M6$93H<#6Z^@)F>7S3+9<DB6[SAJ8\BQ-N)2/Z+"7+Y!$(H&%*)F3N7XSI)8\
M%6]>_38\[@XX7GZ<BL,/4%6#^QSM$TI!XOJV,0'3$>_Z8PO90^+34;_MPH$5
MZ[,PSL3&?81-CIS91\56@].>('\DW'L4F&1C"_8"J_<7@6*1]@+M=X]A<)VV
M!6Z4TG'://*"_G;4[APP&!^//L*!J9R(E0[?7';A,@4-YNYIY_-DBHG@LP+*
MH+WU^H3<9E&3FL33^21D%\K:$'(!2)QZD!VGB/[3W22<Z:P%ZYSF9Q/AK"%"
M)_(a)+.2L.`TH]#=)'@60>\_F#"N@/]RG8<T0K!LXJ2S^$W]GE[0Z@JGV95O37
M?CJFP=(_NGJ4%D>KNB\6<0YSAG5@]@CF>="_R3"+[$G#QS&$QQD[T,4]HT1
M^[J!3B6%S/0GO:C21I']A*T5;/XS54R1]9./K/9Q]D/?B;?-9/!E1Y7SG<4<
M&E_'U=SE=$KYS9(a)?Z$F;,^SD+.OVM%O(;3?6H0]M#, .D#7)<)JR)F7]?$R'
M7IP8GDW2G*Q<D(XMAB%Y.L0KP: -99)8GZ#ED(RNV:X%8L$2*IYM[M+4[Y."
M,87 6 '&GN*%-1Y[BR0%_J[;V%W4^(''T[-J\XP")([RK/8./<D]BT!FHH[A
MZR=I\C_1+$7'HDK=EI:CU]RZ)XD1*1>B.4O.TK97W'80T7T0Y*6HYAF<LRD2
M#BGS0(BO:[_8]1;/_<6YOQC3%X67.J<CP!^EM4YZ2(%0,Y'5D<!WY-0BQ&\D
M1[A?D)4RJG*(E.Y!V(4%K(a)0-F.^>S^5J(LFGH>A5PM<:H6;9R8NT(\/755-Q
M.Q^4,H+9-&FP& \G9\'/S[0?/#R[R2,:_%#.G&'U"-3\K(D.T9(\$.1E<L>L
MU^G"E)N523YF)JG6\-'%4RX0`(RPF<.)L$(<^VQ.>P([-Y<PE,73.0>#)9^;
MC;4B"J1T4\R?J8D*23]);NAE]=$*]"!U'E5I/3-F6=#._%%&B3NCHQ1 *')O
MVRDM-.&+8L:N!HP.AS?T#=9F\(]_F$+5NLES"-> !X-%'$<SX@& QNST2TK[
M0B(O$@U75V#5*;\>Q20"Q88`,1XEI5UB>[C1.TM)HNUQNB;,>/ 0M:-!^W7C
M"EQKHIH0L `.N;@A)48&8>8W6Y"B9E-RF)?AB?(C;((-TZI(*V3;0ZK!>'3<
M'_2&W</#/JV&E8;5PK 9"E/8M-&(]MM!]X1@"RK[R1,78*_WLH3MR;-@&]39
MDG?K6^]__OG')IR$8N'V>XOISZ>O3P;=QK6+Z5F1+K1&O=ODQ6\H*G7.4&(C
MLPZT1E2:^/C2'R"G==AI_]KNT$"<C2Y8EU0W7F5<8_MO@^+?T&*EX6 @+VS3
M0@D#7;3,$ O2;\-P/:CT[3)H\.JH!YB@`O2T`'38/>T-7GDP?>=T-QB"*HB0
MARJP'!4NL-#G(a)]_VPA.I7O"G7G AV@?_707^Q5X?]\"8WWL'?VXDI38\_4D9
M_.2T+^@=(P:"[,=^HD1^?=T!;Y;O")MF&O_*WP/Q!!M.ORUU$:[^CU9]"$:8
MV\8L-RUDWLRSB[5F<W<Y$LFM=861=B6;JTGI><#TR5*NA%.1?1L9Z114M(HL
MLGPKS$>9![;JG^0##R <__7+\X+4;G4NG2DL,\QRP<^$\M@=-=UQ[F@Z&LGJ
M?K[<V8@AA]9.0ORE:2(:?0W3% PXK<\DQB[9MV)6N%W%R?IT0OP-$[ER1>8'
M'T4R-&(,8D[L8B,5?+BH*><BR*20.CEKR[7I"312WJK%UJ+NI-:29C$(D#H-
MB-F?L_D(^,V<DX@5-I[/M#-LL4GN-8"!179 "3C(@9($2>0<+ R&2#:=#(?Z
MTAOLU0^CC5$ZF6 _AE!K8H'),DX2'! Q9ET@620Z-W^=3->Q2D4@"\I*A)G&
ME@RRN8+PUM^+EO4EDJ<+T\VBO:+N.A7+`<48E.@O_U/(*$<G).CJ/*BQ:?;&
M&1]Q:-]*72*HNSA@M-]IORV2S<]]<"N3YV_C5N,(^2W?;&WR;BA!UFY?(@N\
M*Q.GZV]$O&9FLF>%I2_;>(H#G?-)NO#?@)#U)>8\J4R1"!.5?_*DAL3@>3E8
M)W2MK]<TV*TENC=/8%$[%SDNP^OX<GYINP@8!Y^D1LCFD+'HGO05))/U[QOH
M@RHXYL:9A7DFCR_H:R=.Y<@^QZ#SW02(..<!:@76#&_Q.:!$.,S1,R]+.2BU
MI^X4PX_H'/$QG&V<2TH;7C4L<.)A\WT*"L=:IXZ[@Q93#>B^@?1Z>W^A;B#7
M0D6T.=O(^%/L8VF!WU#@C;U1/J>(9,NYJLK*3],5YW0Y4#6($VB,L3(a)8.L"H
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
MD$XR*L6+8LS_Z+AS=-S>X9MN3_AOB<&;JUQRR3!$T(a)=.?$7^0W0M6!'D['2/
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
MF?&L+3G_EU-HSS@CM]=]!M,ULKOJ*[EXC=:5'>>!E9_5^_ CT)0YH<"::2%
M&I;=P.2/D1U;5"<N%J).:AR@>N&Q,"9"&6B'P];Y!H-Z"Z%&IB>LY50*F]8=
M-MUCE++>ZT=WB'>&E@ZN*OHBE+<%LJQ4NM')>K$7^>R3?'J"V(NZ=25!O\'I
M2<<N*V$[/[2_Y-4[OP,L=0[IKL[H:U\8I*JUO[#<,FO6^[9);>"R<U10CLKK
M_CV&0'A_GQ&\WCO9<?9'H=^JL3OG@(J*NX<O7+WR:AW)+_4TRL/*XW*ONKW!
M</_UR4-[O/KZ! ^#0J/O!)5"O+SCKT#,`+P<[+_:>>@NH(=VE/*K<UD!#RR#
M%Z"PA*XS\/31:?LZ_HN/3!_DRX&OL+U3'7D?@-5"#!X8E@RO]G;)PGN[1$)N
M#\O72T:7TP9_<1Q_T1?A'];<,=EU*]2'\3,4UUX\>5A_\T2J*@?V7%R='O0#
M)"'V1= 1B'CY0-L%T&>UH#*5%O39[:#'!:RKMX.^+-#Z/+@=M%T`K<<JXJ!!
MKXC610VHE1P+OEH&M\D2U85A'UL6]<!8_A2HEZB"G4 _'07(L@."(M-6-GO^
M,7!ZV+&H(75#9)^@(FJ85P_ME,M1DL%:44BE$H9T==3#6Y245&JNR/<>2XSL
MGA"Q]5<J[K7VEBV]NI7G77CWO/!5DU(BHX>5<3FM77%E.'>YU<.Y:ZT>SEUH
M]7#N*JN'<Y=8+5QE?=7#U2^N96M+EM;RE55>6/5WZ.RJ\B\JL5J^P(a)6Z\N.D
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
M1A#-2WH7WIL*P>KIZ=)66VQZ9K-"?:J(2B6MH\N1L!BP6�!=6 !>;0S":P
MQ[(2P8_T$K9<`KJF)_3E67)=]AX<@1(_BQ5D-6A,@7X">A8=96QLR:21"0_#
M?G'#6"*+,ANXU]()@U8S1;QYZ"(N45Z0M..*\4I&S2J#9IT]8R"<?>6Z[B<R
M.NG.4,S*KB7">D.Q00FHMG,P3!VH[7J>6]=!4U6Q7N/-F0#K.H220&$L"=0Q
MD%ABK^QM?5__4F)#J%$KHG[);L,<8UOJG$PEGCR;FQ[W609;LB3'S! ZGFXX
M^1*&]M$*9.!32Z()W#CV-]"M+L8;+@*#_@,7`):-FCOQK.@G"AXNU>BG$"]B
MCWC@Q@`8^4+QVUFQ0.!9M?CCTI5^7')AHS[V6PX"OS7JGXF;KK<!GOA0-6\`
M>YCS?5/F/QL^Q4$>T3;9C0M_^0AY`$,VWD-E#D] ;G!%R(ZVS'<Z?&%=IBU>
MH9V%5T..B&;5O(DC1;PY#8;MB0O2M2H;6F&Y#%$$+2W+;#;W?8<-&$K/=>]
MSC)O`B3$^<!OH0:!\Q%;P-WV12-4VMFHF>EH011TQ(P4)H_ERT0^.6KY.R=>
MBI*G+L5<Y=:&/_'K'AZ'+$S_2.2/'XY^?G?\^MF)F[\0*,E>[P\J?;OXIOR"
M> X1(Z9"HIAH;[9]IQZD8C/D7EIPI4H\?=\Z'PD4JOH1*V;1_G6PTE#^^+%]
MD3OO)](A$%#MKH2L=U1UO:SH+'8Q.'XMGR\%?[:UN[U=8N\TA\E=)I_A?\.D
M4RDO_=/"*.JB[ *NDTDUO$US-9;RBT>.`I!Z"N<5!6(=.]CPCXMRWD%46R>C
MF-C1M;98'W@H`+U""Y1)X&-VO2QFPX2;::W/#-VA.@Q75@`#:?<MKW63-HDS
M'&5RE21GEUM"+Z)-]A/PV)'_2F2W_"6/WE2S8G!E)*"=M=+TPAY<J,3@;%QE
M>=$BQK;S.J5=.*&.;2)C\P`ZQ,88&X.,GFDLL&AL3GC(0N,X+<%HVYV9_<)V
M0&.9^F7W$;JW`'Q?5HNAN78(1+3*AT"BT([F8GQ@[U1[D#M/*E>_3,:+<DXG
M>26W7MYX^L0E4\\+.?@7%KV[I;V8)HN2S/EASD=#Z>R:C@H#2S\(B3^ Q#76
MXZ-R5DDY&<<2P8@UUK@%^D&3DE+XL7GM.3][?R@ARM\6Q<BUX,B#`\ QF0\(
M#J\<P*$%#?'3/9C:E0RA+Y'$:<1\E'U7F5"<8^+06.7];=!<X#[@`"^JE:/K
MAY2L%YJFU*!GVBPN)O!5BXNY4P%S1-,GWQ]^MO4%*CXDH;J-4HX#JLSO-^BJ
M^V>;T,.-O)\$AO(4K,<W*J7"?>8/"+NY`[F:]!K+2V@9D4I!& UVW7C4;'D[
M#6].Q+M3T7K!]-7W0!Q+QYB5\'6;E8"R<7/M2C;#,FSUO <0]3LV>MXP+._]
M\_)=,S76V1IWDNONBG74N)L"07K.,!EE*2P3<\/8F"E:==Q?9Y$H:,,(2?(V
MT3 >X@ETX%@4$J_'X.#8'KOSLJG<9 XJEUL9.7X<8:4J?C2 =O%?M[Q;<<5W
MC_U)I<%^H@6?S%9:%0`A4=LM>"J:TY.U"VU,IB9%4(LQ:_4VYFH2D'SL\</(
M#+O"X+#.'(QH7S0G+]\P(a)==MGK.?EU,!IA<9JR"ZFI[P_76&.BNFUWR_FW9+
M_)VSIXM/82OQ&3?(%STO"GJ=,#_+25G-\HOW<XQUR5YHIF@M18 H`)8,+,OR
M8\)[?KG:`-1=MG6J0B/'#ACE])O=:DE4)=>-FL+KMSY2F7<_Z_=IML*&+N&!
M(a))2!!+,4R6.&L'P($D2(F) 5BL!%R"8/M[N?/(;DBY3YP<<SSK,HU&V?1I*%
M)'<ZG(a)G+_5?.IT*W?HKA]S4]QKNTAA9WJ1G%Z>Z@,M)UT:NFZ<=8-;$%=@VJ
M!T);PARS;6@JIWNA7M49D#P&%4@\&$A)L=,6%P5;TQZ$<0U%N(FO<X=$\(RA
M>=*&)?PF9C7E&Y@Z6]/)M8@7&8AP3LZ-7SR/YN*((QK'TZ*Y'DLH;]4R.L^]
ME\8X3:)30(%5\(V>+V+VO?/?R1IE%'\A'T)6"B4'(TXOWA1Z*!"?[^CG%<[N
MD?J"L=',*1/:PH! '[-LZ@($SA&N@.;IJWA,@1..+G"FPKNI;([ZR2,^R^ :
M%]G$7:3(2U0OL10,64L:SW#PO_)HPE]Z'F$O&BB^027-,M;U0'FI?8KH():J
M=-BGPVO"?+:8B%)G9%GWBU?.R1J#BZGG<)5B:GF 'BA4@.F9N'_!29J1KY&;
M)A@`L'!QLO5_7V!W]![DDUW/=):-%A3=.F$0<)=/D20;X!D(_1"JB/ 03.FX
M%/]?8-$>P(T]PL7(,8>N`]<">-$K[9?%QVS(GF'0'_L[5P>L<;$K@)3352QF
M[W@*+;.'Z!BA"!G'^U!_7)]W7I.Y`W<H8$A]Q(a)C.T>(L3VDC=.C.LO)23M;0
M2P(D!8NR2&J^][#O/BV*$O5#Q,-P`8X!#"G-0 ;O?A7?:M7[^OAQFU=?F&'C
MW5%CQ3E S-6_0;#Y67)9Y,,-<]80\V7+.(TG7D(RK._#?)B?LAN^[GV?R4I?
M(a)1M/);Y#?I5VW.=3DGM_>&$.,[S'&;_3)T*?6S&690C"DB:&^9!F^QE%2F(R
MZ/D^7]EBP90Z)S@U)<&]S(M%60$K7$#4G D$$> _]2S&GI/%4&H_`V_6TM %
M63% $5]2'S;#>.K5`32-F]"T7ARBOO:=LA+T&N/HM99+%ZT`IA,&:K)-V5L=
M4G,8%E"'%A^1@38C-6K94[;7_&Y&9BN<BG)D@<GFK)%55"!/1E9(.E"K=;!<
MNG*(TF?[B SE:3#VDXS#?N,AQ"2/?I@2I3[_M&66WIBS+;1M(VV4LC[([/0/
MRX1S#,SSTWR4SZ^9E/(\S8D^3^.1Q_Y6>HO#2)\`HI]Q*#,@0#(VGZS"G&7K
M5>9OHOUNJ?P>M"L_K*G8O!FUQY1<(Y5KQ7*-7%J5T$2YUPX@?:R&L&K%8-"F
M*2W<.HT9EW*%_IW4RFKI7RG^41*OG@QQHJ^?&G$JB%I<LURM7ZW6+U:-9O5@
MMMFBEL7;<^6_C?*"NI"0ZOPL6'[\T% 2'H.!G5 4S%M<1TF]B<C932G^:&LC
M$4<,A5I,:#M1PH"O;$S$101+-TMAS< RR>>E^J#(G/<:RSRALA&>/+JM*2<Z
M)VICO<ZX29;-F\9"9',Y`&]1/9J/1!.11/732MUT8[T44T51[>-7?5Z?WH&?
MBREELI -3 %?W!+<X\2/)9@B3-]CXUE(]#4_4_*T[W[))T .['P:!?'LY+<7
MXC!$F95U32W39Z2VG!)2=;F,^#16*+6XY `V\3B?D_26&>14#X=\QMZ2UIZT
MY#I;4NG%)$F'PYQ6H+YOFP?(:$^P$Z-N:@T$1/QND6L\Q.J6STKTADF5=-D%
M2MLN8#23V$=T^P`<"\&TL\4H0]/\?':>#?V^#7';UPZ]YQ)IVZ>ELJ!U$G]2
MW9D.CC><I\1\::4O^U"JSHY?P5Q5R[P0Z%-L'><+HE9W42(";<3^`QE:MNE&
M9Y=HR82!,X QZP4,K[>5A!WT<QI\7^Z8V#X#KA2H-AUQ4".8(/M?QI2GESIR
MYZ>-EP!U@^D6)< X+:FN=:E;O?'XH'KM@WVH5-\WN?[9!G*OR[RA021/PEXZ
MK0ROF/%H.*Q)O%M<16YYZ0Q%^HQ `6I@G)=,8YK;0@IN)E"!OUO]1I_,;JQY
M?!;I+R.5#BG2OD5BE;72>SXW(@P\G-//ONXB"HJH:QYVX:]Z>F',2C7C6<?&
MW&VB^+>]CHOH0EW8W"#;$L!+K9Y;#YPDN\19+OB IMTPP[::ESL4SITK)26U
MB2^;F^*G&E*6=]8"$/77.BN\XH)B%0_89CF_'G%L@U3$#&,-AY[<604N=I&(
M!\E[!U>V$[J?L@D%(#\3C(@C5(@O*H2^:S<`Y9T="@EA93:8%\"4+JV!^)\+
M&SYG67(Q^+:]%V[@IDFW^$8(Q&<XWK%G;G,/%^/QM1!$Q;W^7MA-9VDG\$/I
M,DZOB7>L>_7VN* BDS4Z6R%9M;MS@4Y0GHVU+:Q@]B$1>YS-O^HD"+,@&#Z/
M>DFW0ES_D<"0_CZ?#+(a)_5(U.#GNZ*"A#H OR5A([KHL%+1.".QCR,_Z^R.P&
M3 +)L>0M4VB*#U!S3+PEG+-<OT041GY.R]3>)D?LKSN?#,>3H0N-`.+1X! G
M2 E^A1;M:"47(Y1T5;1[?<9(GNH0."8HOZ,(a)O\RG?(+9KHCMXW9.Z3AA)UG7
M]:<1/&ICI(7<6FJ>Q*MVNV>L\IBE'C'J!95XQV+/(^)$A)F/:,DLRV&6LUN=
MA^;O%M)]>!@>_*=XC;N7>2KN[I3F*FQ[\+9'VDVZVV'COUR<@2LE-#+->QX)
MSU5OR,.QO5%_C*EBM6M8=2VH&EW!?->36>. R'%4G[A$4-U+D3(M7>YKC/!E
MQ3^-UN;1U%N>G53LH+U<L(Q250T78&Q-L,#2IKY".V@QGE4P<*28L6>_GX#*
M_@HWV4SO<8Q <X")N/[RL$ZLMI>].GQ0-!96IQ.$D8@<?\:'$\*:CH/-P8YZ
M[(6>`!J*R*='FYLE+=I+L[^HV+)^1!G?]=',7?X\/DZ[)NG:8\\L5JI6N26=
M=SN,82T1X_K7T9(.[7C'4'="M2K1T$#CC6L,B2ONJ<20J8,?FYM]S!^(C$$2
M<JY36M'V6&]C&NOKS3_^^.8UGAVO3JWIC,U+.Z4D6 &:D:>0NY7=`</A_L!7
M3^ P$7XBB"XJRL/6F,OZPI-0Z!!Q/C/*^Q*.'RD-(a)BA]7DXHGT.!T6MW[CJ_
MDM_?W;9>27MA&CA5;E9+(B6;5ZK?N!K!@ZP[!AYYIV2POB5F8U]42C:#L)B+
MF@V#1CU#_[2537$,\=2G/7#$K"V-;E'5=FH7II;**OB"@*0[J%PM$M(*0?$_
MM_O1Y8,#(Z@9%57Y8/-MWA@?M3IB*UILY;. QD]7]VS'KFJMEB2^*!7S<Y,B
M3%SR-Q;O&TK77>2JE2V,G:##.,@#,/_[B$\*2)&_.\4KY-8J/%WMI:B8E\ZX
M8N6+\,(9-?OVNJ2[*JGF&EL6M5*.(XE<L'1VB#2,/VB,W2:S"._6!KIK<T@D
M_ ^1?O';BPK<:V*^N:DJUX_?\FM,*;,&S#7*HW-CUOEY$><A\^\1&>FSP>C4
M_+E@/ZP<[+"U6<RN:3-,MQPHF?NKX\T1#,C$C6"+Q2'XW)+)8EZ^1\0,B)M1
M\()[.&LP@HF?GB;G="77O*<E3D!J@*^ZHRH[K/A9\P595O16&.RARPSU)@!)
M$RQ*[*%&.&L>/'X'`,(G5 `@/]+5EV00:4FD'&8IQU44%%>#`MZ$+*;X(%U#
M$K@=^:>T2;Y6>95,1,G72BJIDA,U:!=<N%3V907[8<&AFW-:Y2<7&:-<"L[A
MV3%PEP)79D(a)65.9PUF=T3S^_N/!^R'S"K_QP>UCP03^JKF25`%'>&"8(T?W8
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
M/4V(a),\)Y9EV2HLD.I6\35T"=>O0_+DT,L^09$N10=BO<G%:IHZ:IL1@_&PX0
MQ5C/1P,;F(M5U@.W9FA!3+N0N\0NMFCD%?1T30*8R6TOF1FCK-E0^S-CAO?Z
MA$R\[4BNE&ZEDH_4Y%I89?##A2#:*-PUG709)M[F># >X;\C;G>_&=Q[&[RE
M1JV#LY&BW!KHR["0O%4=D,C%PEBYKH:QFAXEL7:U78)NQG02:*OH/(.KZ(ZB
MT^GV.G%YN'&%PUO46,^W#E81=QA0S#JWY$DG1-1VHK3MN+6OX\DIBP"_`33
MT9"\)8#?X.@X0FJ*+B(!:]]Z-D@G@Q+"/&_H;GV647Z=$%!@BK=K7AZ]^1Z9
MOCE-SKJ(XF3C#AF/I$9L?B7Q":;=.)0=!^Z.G4N:11[S@.;O@*7&@U266_LB
MJ!;@?<OI@..!A3O%U)L6;8]QKGR',_ZD9OTU3:H<^NWY9RP-H'G+LI&>>.F2
M3A]PI$%X:2JI4$U<SCC11,RX"RLIB>R9'"FY;"CL&.="3L%*":A^78 M#1-1
M,F.LF.98H)DLP0-9?8VT6@?+$+_T>2+U]FOI50[]$D4E9HIT=8Y0RF#^Z]B'
M"E=ZX-PDMM.V)S9MZ*6M$WG5LVW&\MA3-W;)ALHL)D1Z76I:(]PT8Z5MZ5@;
MV6EFWF3#+>@FE9W]EMZ\\5(S:.(Y&(/F8GVE#WG&'H;_9+W"!DF6&;3#@/X/
M<H<7Z5 Z\'AKZU>6Z%5+RK>@M#-1>[X80;N$4V*T?-MZE]STQ5?,+G_2A%G#
M5P!XKM"99$A^(Q'LMW@7UHHZ\?WX6?/[M\=O7STSI;&79&_XBFSL!=GXZ['-
MEV/#J[$3^2D$;FEUI<T@C*9TXZJ$A<L5D3"/QS(K?47_\JRM8N ;#\V2F$K
MOH_GX/TG?OM+]49?93+9]V>7K1/.QMA;W@&:OJDKX8H7)!<=: G0"Z$@*FHT
M3$Y1*I$)U14=.U"W)\<H)AF))+8M^QB5U](E9RJ;TM60(1:%64;+K1Z[\PAH
MLQ_>W)+@N7+.!Z)\$*@HT>FW+-P2RH(#V%PNWJ(%-3,DQ6')B&=#CD:HPRLP
MGZ?R0/()1R'HRH/XLS'@+WW*J3+#6-G]Q .@.LWG#WH^@.,R+6FH.*)=G$FK
M<O^6?DW#?@^-2+HIB37@A%D(4S&YKK8V(!P1`\*PKF'CM1L4$V_UN9\?V;BH
MO]M "MQ^PQFZ68D.CY\=!=%N//* ^C7X[WX\_A:!=I$JX 9LW685"/7S@[<_
MOHG5>33418"',70Q#$;X=>DVWSD\T!22K@AHZ 8_DJI]0M^;#PB(a)B%\0.$8P
M_TO$)CR3-P00_,8Y]$[<G\?/7Q\=.1,A\N+$O?:7)F[Y>L2]U@<I6!3V-3$?
MP5K28"]AB-/^_$/(\_U3-GN?3BE$+!SINQQT?#U1\A<.^1#>/!?1,\%M/+L3
MC^KI0@JXEA3YLYGP'&.93N#/DZGEC_QA&K)M>*.W*70D=9]HXVV*=8]3W&/*
M-DUIU%V3CE\7KT>JU+4[RG&+FE(64B[>:TNS=Z\]7]R*A'%VQ2+@E;GBZLGB
M@)&91,9VH;GY>?U>N0?U5\MY!G>[`J9:QT'UV.\@<1"ZF$4T<)6Y;"TVW)[]
M*H,V>9$72/-]]]$$"I/^/\2/H8.P"LJ_WBWZJ6VGMY@.:68Z?U]]2U[@"OI
M$I1[A=RBO3>2R+^F:Z7U(1)A4*4_%?;VIT?$@(T`'"(]<+4Q:XB8$I4.^=!^
M/*@O=7_4T!&]YQ-Y12%N$=GG&-J@&"4WG.^:J>*-`9ZT_%M]TSI9^T^]$I^5
M)E.\O_W8N6$CI&!BN?=W*WGC"3#BD17QC8"H"T]!5J64[]6M>7RK?^)A->!4
MA*Q$B*:36UOM2?TU45NS\VC?_EH7.'L;1%3O"-SJ"8\"MXWE:5TUP:BH.LOI
M;T 2?:-S7^>UV==ZQXO_N_Z8OBQ(CZ4_;^8HL$JW&:Q.5ZZW)HLOP\1?0DEC
MV43<4"/)>U-\B#W*HJ,-`\KA4-#\"JHV!$!51_N>:7TWL.3MQLD#M'!=G0HK
M;.^TQLD8UU)KZ2XK1V?E351G>K?QN[&GC7&O&+/;!M]F]Z';CKA,ZVK5MHXU
M#A>UQ(EMY:'C4#6V"E,E6>,52>,^L.N57GX7YVV:B^&SWK74.O<V&@WZJ^>R
M>7]]_/S%CT?B6I7C:@FM[8?+&*B,^%UD<J+B3&+EBW,>AK^F(D.G8NZ'L\NA
MG5DQS7!AC5^4Q2:8HV?Y45IV+*5\AH#J?%8N";5L`^.4HHXSNER(*X/Y$(5D
MB6Z=J6NVU?T2W:4%>Z/]<"CJK[+5:/E=5>G-SS\=^2JUHN,WW^,89=_%7ZPY
M5U5]$18-9>/>1MPS:#Z'>O8<MF6N(5?#X-;S37RGT:D7%B+6Y6NGHEVI?H-9
MZIW-1'GVOP]^>&?F["JK[8$CGKA/]1#>T[1WVX<Z8'ZIV<3IU$#+I%,!B1W1
M_T9V527C$7$Y2)&N<'&"X64*&:=R)4ZR2"B%J])KK-K*)WP6X3_A,Q@<;G(#
MOJJ>0-A'I<RS52&!U4NYZ%5G@N]_/:M6,TMX%>-6Z9!G7MV(6S?C%[.FC6TH
M-(:EI9FR*SS7YV>B8Y+><=&*@+O=\B:%=UC@=#SQ1:YAX$*U>*/6X:L]KEC[
MM*__7__^3ZQ_](_Y>=>%4#^JX#>71PV../GQQ>'1X.CU:X10OCSY#E%Q]SJH
M.!DBYL_/?!$*O<;ODK'R7<>$;ZD4<_!>DC51MD@?L4B7^DB!C'*TD2/0\$J.
M+E)YTAV1B/B%WG3O:W8OP.&,/.=#C1-8Y!,]!? [>J* Z\[?6H' ^5]=6ZXJ
MFI''(4+EK"REZF:E[K8F"=O&$)),`A]V\+O/%\;'"))_+MOCNYZ7=$HB)C 3
M.("J=Q4CDAN.Z .C<O<H@12J^H/\@;^B061Z053J]BKG+Z?7G$7U>L!DU ,2
M28Z*IA00XW(<Q?$3';0P(L 3%/D#'4 E8&@ZPH 9;1H11\,V,6@F/ /V(<3E
MTGHG.>/#E=>(S%HW?RY[E?=2I>"@)(;[M^43G7<L"+%Z4F(J2D]7WWRSN2,&
M3#S9F YB1"W\/9L5Y@5+=BS[Q3V^VLIJ)JOI\25%.1=+N^Y*@K2',C5H`C@H
M+T-EP2D'PY4P7*OD$S0G9.[(6>."_=*XX=KF1%;,6>U?Z]6R7:&68M2"S3+S
M+_$XPTH3VS)R_L8WT8QC>R\R-?4D=8B;BI591W-YV[U[1K@X>(;5%'OX:M[7
M,7VX>\]Z"7/;CS%P3Z7A.?0(R\-V]=DH!=0UTM!6,: A\W!])VM>-,4T"*V#
M&O)/GXCY[DTC.B. *X+V25/+<EV"[,NH5WHW3^&T2"I_TLFT/K6H)MH+FAD_
M-(6EXX=+I*=8ZI-:;V98P=(Y'S!#P*Z%C]*.'%G/'<30Y=W4V/\KC,V-AT=H
MQZ=4N *A-NN FQ5(:"1\N2+CRB1M"T'M+TX`[5<Z^:M[A< __*?Z*'!58:$$
M7T3&PJ=>;#=9U<GZ>6$2O%?_6/82$,ZAN?CE<F_Y-Z()N"461]@]D!0N0I H
M1J?;AY<^2J7\E4S?*4>0IN7 K]-^9XAB:,7RU\VGY:^"(OX6`D!_ZN_+ZK/L
M4!+RD&#^'CE]#5-$0T96"8SP<ZK8:Q[WM5=:HA+W$:D5_M1!T^Z!:^-Q:<;2
M8=C3:/-:5F8>,<]EJB=.06"ZK)U5,IA=R>R6NYEY<TPX4+V&`UX_5HRMZH7;
MVE C><G2DM31;42J^L=5CXU\D2R:%_]'I6MSY_:RI76NS,+0E+5GV2@N:\K%
M2*V3N(3B&?3?14C=K3*U@ZA<5[N:Y)[4)-=A)>.)50`-?C-19\I_:@G@Q3,>
M,)(I=4%7`G7[B2;.4Y&/?N5+,IX2;ADLESF,-HKB94)Q!!1"<-#-BY.]#3_.
M[B5D@%WT>F'>@"+(Y(T!?[ *_)6"5B0">;[F*>(L2" O`S,!)JN_U07QI@F-
MWZQY:>$!?L0[HS2:F(YO#K_7_L2&^(XBN1MF,9AB28)%-L7><D\U>,R2$@D'
MI]V\`"N(?_+Z"(P*>GV$KN91.BI 5%*35G:QERW^W7Q,N](![3"[+1J3;V;8
M8Y,K4FM7-55_,)_/"%=WD\.J#M)P*WUS5#M'\(TZZ.(1]B\8X7I.<>SK:"<A
MHV$,$AQ"/]G6W."QPV/&-!:GJ N,)Q![%BR1)$K&+#0U,J%2A$;2.5&J,^!V
M!QU[]L;^,Z9[R$$J\6:<2&7@,C,-R%Z;E6>%SF4"@=>H+W$+P(a)%TT$RP_.!6
MK+"JB2RRM_H*O^[':KLJ?*"!K",`P0@%!#6N8Q"^$\8&Y9AQ'Y>F#O%X4WB^
M^<C%D\+EQW=*/+*T8>._E7NV.]'JGOLO8?42OW"KL>PV@U;T4YU=C597L)^7
M#)^_?%JP1+ <R)GY/LF%/RPGP3*J,1AJZ+U/D $=`KTU-]BJJ'*"T> QZ K:
M%)>@%_5)_[8!0YNX+'WVN0^9T;;4)F 2B%^V_T:C>CAX2 C6HC&\_N+[X(C[
M6V0>)9Z*:[1>)(GTAB&!4B :8"):1=J+1YB@1'/WML682&)O):K-BDZ,KBP.
M@&]9'BCT<2BW]"J:3P+_C>H[I52 T57#5$NI*7_$U_=G='VI[U66.5IS?;$D
M51NP$53"9@_,BB4`\PR5EK4!-?YTP=1BX]RV)U@\4!*QYJ&)%.DQ"?T="49A
MN!" J"BU*4J&YR%5AV/'8^9H<VJ9;DQH(K5=W=FTD@/RTV*4TXE2,[5'P/'"
MT[IQ:GK!3%W/U0OEYWH"K!@LN.:O6KZAT;;S_E/;*80_6%%PX(8$[QT_81UO
MG2#J]6?;Q;KLS92Q<1">X^O68[:K\PP'2N8F?(A"53^;-5CT&-X8'9?.?N!D
MOCZJO2G^U!U+O^NG\C 7?94N[$?!I-M%J^:%*&F+O4J[Y$":T&]/]/&@;Z-9
M%)+W^"SVAD,A-*OKF!!E)XB)-,VR`0Q7U=GE.O1[*\AVY52T206@KZBMGAE
MI5G7HFB3_[BY[%FT4YN6\38WM$'/-,VW(3/,\-8S#*5O)SD=B+05'[:627(.
M+;M-_H0.";\\K[:35 [4N08.DM$P/0Y4S0(N^L#NGF6$5M_(Z&^,"X^E@LYN
M-&&">>YM+1+"H+OC\.1N.,3UJM"#M*O//\7*M:I+U3I97Q',J::R\HNN"HH5
M!BTCO%XMQL]G6=:MW_^A"KJFWHADG8IH^&M@\X+3X(9'P,[$&4 W?>E<9I;3
M+=^RQ93G+;<-^F\BFHAV"+1QC*X]1]@V,RC@`)J=/(T.Y*"D'PS#6$FB`[7=
M[5[6-XR8$E>'*]73,IV=<U/G6SXED&AZ849[=J?/S\YEK19"O%Y,!M2;%)Y/
M_>('E7-.2.23Z6*NI-#$CMZXI?;V$S6%:^W>L$DTJ(VB/:5T\\%!C2X*K^;<
M@CX2'4+(O#W!)F+P]M4+NHCFZ!95E$Y<I6^%."C?OGG^)^&9\I:;85"=>58,
MPYH$*/QI<?R'7!X>G!R_?7UX1-XXZL1D=9(N&F)S,!F&I1AL`56<*]5N/N\D
M(=*#%*/A-EYJXL^&A!@!L<VN;E%:B3QA75FZ>14%RB'5G:RQ;PI*><>9I\*3
M0,H60Y-JC'_M,2>;$X-?89 WV?G4F,*7*G8IOOO'G!PD#<Z^S,%6F\#@+P`$
M!\\#_*V(T5<'$%43!.R7?P=G*EN7&V-6Q<E7H2'Z6?'LYU<'+U\<PAMZ=/B6
M(HI\`%5L0WD!&W@V2Z^[\N+%+[M??O4W?0'.6*0C.;C.2[D7!$B/><6C95RV
MC6L"J*.7!"I-A\@*/1)/<=VMUSCQ:%S5&+5>%Q%4=1^/\PP]RVA%#!6I9RI1
M"1K5,B?>IV 36B2?_56SQ]K7LFQP?^_^QG_?#_SYZW^\/7AV<M_0MJ1--R4^
MQH]B6NZC-"2O9M8(a)YF6(K\(7_XML#.XWQH,^OC\X^9YVP3*L^]Z;=T7M8(#B
MCTCH!CW*T+UE[J2'SUP#17'NHORFW8-KA !U#9B P[['B@L8(0&\1X2H78C8
M)8ST8DC@J]!LNU^3'XR4+^N2%+F:(&NMS2]:V@1DI$E&\^G3W2]ZJZKM-*JY
M>CM?]3ZG="PK:^^VU?[3#2H_B6*L]5JI!YS10 "Q\P:226+23PA68#[A/_B_
MGQX`V8=TT]+ 0CX1*?_IX,7K$X7RF@:<F?847@5ZA:;Y(RJL4C4Q&40M%;Z:
MLC'(8%@E*YO[$6USOZ%N^(OI6RC2KG%JU,+?8@3H3V@79Q?\#U!+`P04````
M" "D'5LN.*P$73U]``!\"0(`"0```&-O;7!I;&4N8]1]?5<;.;+WW^%3:-@S
MP0Z&,9#,G0N3S"'$).PEP/*R,W.37)_&;J G=MOKMGF9W7SWYU=54I>ZU6V'
MG+WGW"<S0+=452J52B6I5%+_\,SLC8;C9!";*#7Q_7(a)29UDR2DTZZL=F.C))
M.HTGP[B?1-/8]"CQV0]+2T#[[;??S/FQ>7.\O60,OT7]ONEV^Z->MVNBZ722
M7,Z \_(ET"@5U(3 Z/*/N#=5D.P71\&81C)=R4QO-IG$Z73P8*8WL;E*)MG4
M)--X:$97G *"O5&*Q.EL/(B;#OUMG,83XC-+AD@W?\R&8W,UFIC+21Q]_F$2
M3V>3U(QFTRP!&RO3R</Z^OI5DD:#P<.*([([&(SNS KH3Y-T%J] `@QNX4QO
M$,VRF#@!_II-=<A'\9T9C:F67.Y@%/63])IX!IEDFD0#_.W']YP;69C1V*&/
M`#@Q?]T]!>VD]QF">?:#65KZ2Y+V!C/07#YYF-Z,TO6;93^1FHJ2-&4Z^ARG
MQ:3K230D%HJI/6[[$G;V,)Q&E^54KE89<CJ9]:;#>'@93XI,_=R;/HP!_8IU
MY?QF$L<&="]'@\Q<349#H_R8: +E&V0CTX\ASK@/$1E7T9:Y2Z8WD ]2NF8\
M`<1]G$&52*;)Q*31,,[630YO>E&Z,C66#2V%233N;I+>C13#1$9F&*4/!FU]
M-<O04([%9LM ,<U=3.1,[R;N?39HF1A$4&XTI<(?S$UT&Z,PY$?I==QWY)/,
MW,:3!S-+!\GG>/ @M,8C]"L(M;F.#@0Y75&%J,Q!W$W2,2"^>VG\=Y3UEW@R
M@88L^\DH-<M+7%LSLW$?&A\04Q%2@\5I/[ERA5XE?I%X"PM$XL+B"&9Q8?%M
M--#"Z"TH3!/K"V.8^L*68*4(['@\38;)G_'^(+HV+TU[!QHIK6V.3[IO.H>=
M\XYI^VF[9V<';X_,1B'MY.3P=[.IN'_?/>T>'N^^851-.CL_/NTPJJ9)&3XR
M4KI[A\=G%Z>=;N?T]/C4?%Q:)K5*1U.HXB!^C24(]SJQ\O_Z\W<Y6#!0=
M^I;VI#= 6Z=XRGJC<;SLD;XX.3S8VSWO='=/WUZ\[QR=$^T^;&+2(\%%D^O9
M$'849$$2=*YF:6]*UIT))/3HD3LX/.R\W3WLOOG]:/?]P5[W;._XI$,4OU_?
M`%/;&![BGD&3K<"\CB93\VP%_>=SG$DO--'P,KF>C6;9');?'AZ_1A&[^^>=
M4R=\E$ $M/():*&W7,,64$^_C&$GT9<'H\MH`-9A@2>1\A[2O3CK5!*%W>[#
MAB2C"<C.IW=XO =R0K6:017F&.A#-",L>MJW]%"0T/=I4DOM7YQ#$X@DF\%N
M]VJ&42G&D"E"S<QPAH%MU,,8:,320 #729JB>]OQCSNM1UCD"-U[??'6URX1
M(NI*PW)\.;ON=CVL][M';P\[W</.D=E\\:/74_;W&_=-%'65Q=/15>/D80^&
M_Y@'[9:Y;RXM95.(JX<.]YXM_YOXB@?VK@P$@R2;?OB$[O?/I2?_Q C3A1KV
M1K-TNMQZ<MX].#IO/7E"97@YS=:3T\[NF^.CP]^_M"Q6.ACU,"J4D#2C"@>,
M8=2$`5AN%9$TIPKM"N8B+$B2`1\B4&T9_OCU7SM[0&$,20\1W&PE"U%<3B42
MZ5R(8S.J46!(:K TKU("&)^1'^)I7B5>+QX,JO$DKPZ/%)B8"?$TKPJO#L?"
MAP@\=QQ K=/1<LM0`RN2EU=5U@!=*+H,2W,Y07E'%X>'7YY@NG,&FPNR`QKI
MOV ,.GEX,^IAN#C%"-$@':'I< O]%(\-UP=:QBIVR^3*VC*D@T@A2$RV8 +H
M.05 .D4RMV?K8_IQR? _V\3(<4(4&+QK75M&^/^ 5-NT>'2M]>E3D^C1S]XD
MYE'$G[5CJG4$RP*#+(8HPLA+5NDFCB;3]>7FCF<=Q&289TM<Y32^@RDYQZS0
MI4_QW/+@((G,?_]\UUR"#:$2G)!V^-5)2MY47/(N,L.S4B(&2@F081&&Y%1,
M@3C"1"<RV#=J[T(>R; NSS5(4*9C6ANH`")MM;,$J"O3^.[D87=RW3U!(?$Y
MK7T:(K3E!/_.CK^C_\[.DK-_T<,VFREHYI,GHAY/5=>>6A'BR=.VIRPZ'X-(
M^.]H02JVBW8D>)'C' "JX;Q\B"L`4=UE]$*62@FY(ILYU%UCS0')K503,+)"
MY,9S$M?VED8U__J7$1Q-:])0Y[59/!Q/'Z $KJ@CJ'Z[B69EBI+K4)>$L4+)
M3[3DH!0"UAS#Q'8D'>7!ONV==O9S7"[TBR7HV X):DX-08>K!)'UIL-9C$'I
M7U1)11+=/5HYG<91__7L"O-9MGU-)ZW.9-(]BZ=G;-8:>+_O<:,@?31I,0?+
MEP_3V+,^,C>ZA$VR2Z6U++[F&>X$A:R-4JS/+[DH6*)B>PI_+J6AC=7D^0TW
MTE?98I!UND2<B3U68YS;8 74!E,S&UAHA:ZRU<T=L_0E-ZVWHZ0O1K4?1P-P
M:N=H:MW8<**)?I,V(a)N#77KGYR4Y5CE2B.H_XJ\E"5>;DVFK7Y)(HZG.=>*IS
MZW.<O-2&TIH,N4CZ4CLX3>+QI%J(6(Y.2*<^O&BW/UE;+6V#SK*VL2,0:M^1
MNOS++[\LYQE^HC,JKH[:T+0Z;I,QR&F',#M%9%?@TZ>HCO0BZ7"!"(FN\J?0
MNV<T*3DX>AM@%(N:7TQ>Q$+RVFK'9]TL'0-J>M6 <%N&>MB(GYO<]?G?\L]^
MWY=5J(GP-);N8SYB:;J%Q(_++6X4\WW_U;+BHSSNGWYGL_.]'6<*E-U]K,?D
MD=GPU05\BIZ0OPR+NT!56J:4,LZG+KWA&(7A-T2CAE'HJ&"8T;%]T08`6M.-
M#3XAQM/UDUD39$T)\?GEYW;SE[6-[8TR(6ON+!U->"09LI!*A%\7D5@H&VMD
MQ^ZE5C:+"8F=!BE]_59B8N+])GL\*;6A2DT3OIV@-]J,_81O(JB66@@&IEOI
M^#UF,$JOI<O IW=3;5H)QL##>]/&SP9^-O&SA9_G^'F!GQ]!_J;M,_8.Q,!5
MT$\(BLRQJQ8>"7>C`C?0(T!5X6Y6X8:*`[@J[*UY7"OR5B7R\VKD4#,`687_
MHAH_5 1 5N'_6(FO[:[X/U;B`QT-\C]H5/JU2;^VZ-=S^O4"OX#W/[#2)2N&
MC*(YXH3 DMRX,JF<M4U5P1LHH-N:\M>LF4EC\21"J:&<R9B6M4EJWN[]PKM9
MA66IG0Y2BOBP5!)8[&,^?'#>>,H8`H21KXTA9]DMMF0D*VA\LR4PC7XL.R:C
M2=.?OK4,>0VF8_<.I@@!$T*;SB.E336:?!U/:1,M`,^\=.KLY*EL^N,7B BH
M2Q!0F@4I++VU'!Q>PG*BK)O.X/*KS,GB?\S(@5V5-XS&8XRS4BH9""V5WI0]
M>@L(]""DL,Y27VTMW@Q,>F_CZ2YDT2J*;!3B:T; +B\I'/GN^<G^X>[;,TPK
M]W<O#L^=B$1'&2AW\3@B]!(0GDZP?X1U?%B_01R%(D5=;J2U0HP[;&^2VU5\
MMD%V`M]T96(:WX?0PQB[*WVMB>?6=76U29GBJGBK&+B,*JK93WHA)'I(;P(R
M=3E,/2146_,T"1.UCSG'E#847L1KI_YP;(9TNGOO=D_/S$?T\_;&YM;S%S_^
MQT__N?MZ#SKP]MW!7__K\/W1\<G?3L_.+_[^ZV^__W<WNNP!^_HF^>/S8)B.
MQO_ )'YV>W?_\.<R6RBPP"-!E]8(62-K;AL8!ABEJRO*,YQ,)BKCW5'L?B5]
MGQ&PZ,]-2^1FJ=T\D15(QJ.M@$O2Z+."?X#S_]-.GE_"5:HPAF7"3>7(K6P*
ME#WL3V2TV[+T+U$9TTJ='(H-FH,HR@YEF?'J:I/6QD7"8] S&&O(%7%W0TN!
M!JK)U$,NLM556SRRW6#19F3WME&>[7/80]H5GVOFN0LDXL!-[A/46WA//'_/
MV\YY]^S@OSL-`=[!7F9B7M%^I"F[BFY+: ?GG?>"UC))[C*Z];U/WY668;?6
MHT*V:3^:1@-VH#00%I"N"?_F"L,K;23*J)@-1E/VCS@OS.NH?\#UC09[4*6&
MY.F0[EP^KEP!/DA/!E$O;CRMY[]9$'*;A5R<"BYYWA??T0ML]?/RBWIBY-5Y
M8XPQ!4<OLLM^7DT1A0[0= JN:3J+#AR\`;XN+S5-WDNNW3*B]588TJ?R''DG
M5S&R3=S6NJ-+OG,VOZP?^0SJ9].&BCBYV5<N4YI>U4@213XE[9+6%.42@&:.
M0+6:!\_Y"@YA+<)P((ID)3\/R8$H$C7-`B0+4JK-O*Y%^0I-K;P(P\$HEC3Q
M/!R!4(Q'^$^#GEOE]7Q2,F9V"1&D0S8U62KO($NE*GHJ[)@L'J "L/$"IIM6
MI+.AQ3Q#M[:Z]O7F,IX>(";,HOGF,K20;/E=2%<.5AHV@^$M]&2!5(G68^RB
M<*J&$53\E=91Y]?29OM378QX/CGSG?KOPT742]TLTUQK$)!IGS1/M\:1FS]+
MOJZ]D$=_&4]W!5@?/5"Q,6QJRH#2M KJ+(]H1I&NTU"%Y(a)0[.RC!JM8JN)H=
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
M!$CS\=7+B$8=R-J*7I(a)XF8SHX.LY[(G46/>G/ &XP@156\GW'>*))Q0`U2(X
M2>H"?*HHH4L`]]E#.HWNF4.A-164U^1M^SO-4!K+C3^3X^,F0C;K>;/AT*XP
M66[D_OVIB@=0UU@Q8C*<L+_[KJ(X*>P6$LLIW-52T'84M9=VO&.'O8FAA4Z/
MWT=8-)$-),O/1REA9@$<\W)8'"4<MQ/W^0RS*#75EI>U;/OYV#,="*XK][:I
M+(EH#V'.J8#Y#8NVX0IM%T*D4?_"^VWI_:[TSD)G8^(V=JXB=2QZ<P;4H&AP
M.*\[GF4WU18GL5N8N>$$^_G4A/9^_&F-*)+:,. [9<LPSKGS`GQ@(#_33=R(
M&\&-34)\V6Z]Y$V)DMU<RF-"8@:81X;_4EF_T?B;JB<N<C]M;4T-5!4WG\QW
MP@R-(IYATZB*1?(QR[ 5MLW MXC!-BWLQ70$ZCRSO8LF??]0;%8*-C$)?#YQ
M%V I62U_CM@RQ3= HQA%)2EQ2$X@M3(NH:FX"4Y&VQ OA*Q3.^$G!(<T'@&-
M5?A7LD'3X4K"E%%=Q8A"`Q^'`^-#7IY'U `8R'@<PFB,A5T=RAR\JSM,HN;B
M55;J$C8%09J]Q<U(+ZZP"F"=V]0_5])B90P)+D8D:[P`KT[$M:@@/T<#:#E?
MKS."7H/&08#UN/K7=LNPQE +K RRQ^FLG$M?Q/-"`KR^_/J:%^-K$D&(&PXV
MI%.'^H>/&EJ]D) >/R1*@CS9%_^'%J(*,J;CG2 S'LQ"R:I@YV &6%5M*&2N
MX7V<1'>(4,UD'II3]]N:H>*K+HT2\XEC0-$)_6@<ZRCBT=.-1MZ&7:P^BA;N
M3\XUQ\$*U#W)0$0J550P+2.F&4^7;[!H!&2DQH$%##FE:5@=D1H46(,N>M6"
M0N<C=T<!>HT%5'+58J!V"&EI^U1C6>_!XQ&!%,T&4[(LV>.Q^2Z.;\;K7HW)
M+-:CIW7XXC]^?+FRE?IX/+& ]7BJ(2&RF'[J+9,8WE#:OY[+0*6:R=T\/"LC
M5W;VU<J-2-01HWVM?M92XGN9`LDO)"8FZB8>C,45YL_KP=HXZK-3!W_],%^-
M64-86F)^IOP=L[J:\.%*.<H()K I17-MK$1XX50DCNW*AM6CEK%ER$,?J\8;
M+<XN!CC5A=3H%AER+9_X03%A\=_WM\WWV<>4KKSX_:332)LM@P`V_&T62+_*
M*?/[VEI%/8_VW@$OKRI78N_=P>&;!E4"A,&$6<7VM-"0:NL-1>]/&D=-PUA'
MO .%DSL%1]J<-4'/'UHURI;EA!,(<.<WV("C40&Z\K&]X@Z2!L3RBLL*B]SX
MU6Z8W;3/P8(a)-.Z"1DT"\$38,H=UN-YOJ/K#>@RL$1Y1*`.,9EW&([L8!SE^%
MJ!MDC/P&#XS\-;@DG<>5J7C?6*1L'CT>3WS>W](&BUL!!>0[>D9 )%5WW4K)
M&OOG)\NV69BLT91MEZ3AEYHF.UR:(%M<FJ"+>$W1':MBJKH<-5EVF33![B9I
M@KH<-*DF^%"@)7E93J^K0TG1_6T73=7]E2##CU'49-T+"1()5A,+>R.:G&]V
M:)+;R]"4?)-"DW3W05O4\Y\O&=8@.,URAT,/=L/4.];G."9ZP1T,*+_R!@8U
M%V&.;P]*N=KCZS(JL;1OA'C2GZMSZNYZ\/M/55[M/0_:NDUU?KE-G:87]LT;
M'FKI/:"J]EC@=4S1+*$J([PD528*6:],J.'L<:O6_!+Z#CN+\2L<H[-M^K]O
M0,%Z4=D^O$02H])#BE\8QMGX53E\JQWG:FQ:97Y:$ #QA'E/Z-54;]@<X55+
MZ6?D&="MLA'B;*W(7".I!TS4.]EZ>?$ZB'^G0T W'TI.XXS&CZ<Y6,NH3')M
M4P5<0$4!6Z9LE"KNB1C:F2ECZ\3S629"E,BX?+*']O1&08VI?I8Y1@4!7G&"
M;1K=\PM8S5I,[IG9;,[=#E2_87U;4RXQ"?4-=7>+)IA;K)K&TS9!VB'EHOAB
M+&PH`9QS]+CAEY]?4OP1^+,@Q;9LNTJK&.<UI79$W>DK;;>%AS@\2_Q!:;'#
MGUFLDQ=D4"^N>Y:5+UEDW&/'MGU_19>)A%FO7IF?,*^VY]7O7>S794QWQ28\
MUD.0U:Q8#:QG1^(,W&4UPIN<M@RU/]QL#-M@<4? &F#S:]IC7'U%C#\<F-6
M.G"?X2BH#4K4-ZH=WD)FH&65[:C!=O7"DWP(K3P+*MS#$\QO="\FS#+!#$=R
M2IM122IQV6YNY$T;USP2(@,%+](L@%H!N5.R2OP5=T,Y.5K2*HA!X@7E(*CB
MK''?Y?.@2E(9F$M2Z\74E33C@C02-4WGAGI_F<>[''/T2@:OBTI5<"Y;113(
MFK/KVRM4*]TCJ5>JT5C^`BBW_2(a)L1JQ;OXM$.;A%5F'C1ZMA?G83*&4;TOGM
MO'/TIO.&KO^5.JFA0K:/SME$_^E+LDCXQS4I4023`"R18>RPSKJ_L[C.SW#H
M/NW=C"9<<__.>;?CJ,$VE&+R#2 _Q.D&`#OR*-1V:O@GP'*#"@92A1?!EF=)
M)Z2@[BZ7!K!?\+/-8&;-9E3+)6>^7C JC?)I>/%,A$?MS=QQS(IE2E'[TW+5
MV<$$?X!]A-?OUOEY=G::?CP#[^O_%3X;,$F\RT(T<OQB8.)21E*0#7PA>O;0
MWP>!^P0#WO#>5S<^F9]_IM$.X,0)P(4")-FP,)N<ZU,!% /+&)KCOL)TXB<+
MJR4XZ ",>Q*E2$T7QQ%(($&A(;?MI(UB;N1HA#T_SQ\6\&W4=R2-9B&+.63;
M27G>MOL[Q('060':A"-W`E[M^>I9FM IJL%#:>_==;M%85SDX/7?L0XLO-^6
M(KON6HCNPD\Z?BFK8KF;*:4U\9/IO)":V[57HTO>%8) @N <@W^^8^9._43N
M]*ZP-G78=\7#K2DC(/2DNYL=(a)J5&.1 G56\7NXRHY@!!QMBALF.)D=,\_@>Y
MRF7 )H-8JKOC,8PHTZ5P')ZCUN-(W<Z*=<.::SP'46_2!)A894V:ZD0>S:$.
M"EY(*U80YA/,P<+%@&C4@OWN7J VCI)314!X'@QY4:<%"ZVF3-+U;RU2G1_>
M<[% *JD+L;RG4-FX8:>_+>]B$_<L]_N([[@[I04Y5E%NJ#KRPVVW3=?%Y6*B
M#G[06>%FPDJ&Z.5YZZSZYW0PA?['($Q*A/U$.9N$<T%L:0G'W4LO46"6@Q3E
MP[&.W[9;C+W[`QBM_/ZAS2%"*]V5/&7#I>B\GN=3J:PX(7@\-/Q;U"AG=1/+
M-2<"']'0`=T1SHZ),&)(`N,+G749/'3)7.C)"B;&/!#%-;+-PAK6@)J\Z9(7
M%7.'XU)TA-+&\0* 1L(QEKKR=9491#O!#BNB@D6^W"!<$A#T@IBQ5][8A82Z
MY(_M!7P`5NBBP?[ .2 MUE9Z7)#KV F5DU>Y20N2%7B7L"8BX6)QRB3E$[E:
M#Y0N8P_D[(0@6DO^VNXR"AA_V":*&'L%`\>9UN-UL[%*J:M$GA>WPJO@DM*P
M1, JV$Y[XX>&Y*QN0/U$`YN2Z>4)R9:QJJ,>U-J),:O&_&FB]LK2V'3KW8/"
M0)9W_7S!)Q=L[/=VV 37&X73ED7,MXCDM>E?72I)MN%*W8RC<DWIK@?=LV!P
MW9*H60@GQJV@=-4GJ;Y-] (_NQJJR3C^6@-P,L,6>^??5V7#R]N%1/<YBXU"
MJKO'S&P6DMTW2\Q68+KIQ.-LW"4.ZJ88U2U9-_HS;!CZ[%]!)-+2)#LI.$-%
M,1$.AYATE+I-<CJ.)&Z,:@U4S1-M%"SDYMY&,;!BKH[8BE&'P(ZF("U3B/)R
MTU__NPAZ-S%0FC0U1 9U6V6/IM1,!/!2487B3\0`4P&(8#$($Z#SHJF;YF?+
M6:B2X3U/_H5-]3T:'OWYG?HSAKVOZ=8M6OK1!-(F<*(a),*N[KIF1!V9&.K^Z<
M=/>.WW06VP-B`6-@_OT>M)S,2:NUH^<,!>&A-?4C/V0C%O1GV8#LV\CX___L
M49%_"-"V"@`*L5\][:[978*UD6E82"Z"CTRS\=FVFEK8=EM[19$GLPG]C9D@
M&.08!7P8YVCO_.#XB'M(00F8',JS2RHIQ'WQI_,;?0/IX!S%%;$HOQ[MX+VB
M,9>Z8?N4@L^/3\X/WL,-_T;964"8-JFV[?->Y_"PR) :5$5D.=<9?^;*XOMR
M:-I6*QIB?^].\&5T(2)Y0[YD'NL)Z#9>/0FN6CT)W>WS:I&X"UM#%73>[W2D
M1R>,7.0X3SM+`Z.J(O5<U4/7[]$4#D)$RB "HY(EJ"=L8@BGN[][=NZO\05>
M52! D,1*%+5D)1S*JL10?2EB@ YJ'?H>?%54N_78BC/2PIH'&(^HNB(]KNZ"
MLKCRWE?8'EU[QEI<_0#E,?57K*\3`',<?(3@R<(K]#54)OC^G!KP:F>8GN#B
M(8H`M2L&LO?DCV?JH=MUL]3ZV<2BY8&&7^I&%N&4I@`;;1&/-2H)G57)/[R(
M.19?P2$W7;"[DL]EC69R<0<A\^Q ;COE&TT(:1H-:%/U>GH#)R!,T)2"3*SG
MX4!6@G*ERF7,Z)?\$4_ 3)+KFRD8O\N7Q#86S[PD?=X]]0;ZY6?+:F]]0%L@
M+Z#\N>78GQVX]5$X;ZB-YDMXAXPI.I(9=[-3/[A/VEX<$*MN99LUS2M;`A(;
MHG8VH6G6+-5JY?(/, )&7*U>%?-%KOA7I4(:J^,I'S1/>?O.59E':[<WN+*^
M0H!N]0HMRH0J"8\2;R9(E*4_JW-Q57;:^1NDP-VQJ;*5.,KR:HR9=YI.SW5?
M&^$`?3E+.F\UDGF*#L^1<\C><^CGC+2YCV=\8S.E$]J_'IR_.[XXQZP8LYK.
M;W9B/:3IS$[^B<PG:(H\" MI)(-"HZZ9C3DDA1R0B!]>"?U!KB9]_>N**TN4
M/<\8%.$.?3\+G*RCXBE8]"KKJGO6;+<T'B!S"[#VBNC7/>V2D%2:AHTA*C+%
M!CH1>(JR+"KCWIN?)0"!1:#K-,F5TY6_8CW3N:<O9R(4U9E/J[5R\IP@P*':
MUN6;^/Z'$5I0+[=\A0#D;!TN'6J!986\2P8#(W66W7V]=<D'L]\VY?O$GO-^
MP&R\K 6*7=LV;PG;9]@S]R;R8F:?Y?=QL'O1034XKUE<,+K<JF.XACM@\4T6
ME9Q4^GB5:IH<6F8[>!G+EUWE5C"5>:,IG&GGLVVKC5IN4]4N\=OIO<]<L/.T
M/T[)%+JX9W O7=V-*>]FU]BAQ.D3-/8P>L"@.^ /5;-?'C6IZT#"M72B_) U
M]?Q!?&_^I.+_7(=EXX"I=7'][&-11,/$>??D]/@<WQ]L+$>XYWRY914);#-:
M,N1^27GHQHJ+K>$<\\]"G]N3<KF2>_8%(.J5RCOR/Q_!2?]^$1?]^P(;^Q"C
M2/H-VS3D,P_5EK,?\VWML^G53Z[MLI/IQ%E,5@_1>7>9`VQHWAR0]L49]DR[
M%T<'Y#Q8*M^6[9'W;V&ZE$L)^")*F3CP@27^TJ&Q_PKJ_Q=1865\UA)GAS7L
M>)ONR*9:AA^N@TQ9K)N:;HU"96"ND,D>_(\?H>*T6H)^R75&\=45NGV<RBV1
ML^7U]67N12$)A)'Q_NE/%"XMBWXNDHK'\XP[VD6:<.7?L PNSO=_:DQ;8&_-
MX ]5R_6ZF3KGRKW^MD!I-^ND]-"W'0Y"<*VB%'41-_/<R+=N&)%=TORJS_7I
M)$HSN5QR_=Q[MBUGMU&-[+7P!(XV#@PUTY!-4!;'0[[K#.\IY.:N-!Q=<<OJ
M34!K:]969;+=#Q+NZB]R5MF;C7F:1W:U;IC/IO/'^- CYO9_8%.LR^L?L]$T
M9CVQ"3BJ-T1U[3A>5'@:$?T;-W[AOV9;3'K>+802?Q0E3[1I,VD_H6YM5A8-
MQC=1@SCA:ZV%)[N7HK974V<K1:@+"_4DK\SJ:L8#A18GSL> U*1$ZK26E,I%
M_9A*3/K1"OMNO83EE<=?IBV=J+#7DT=J\AZ/P3=FZ?*"VF/YQ]C+PA!R9]=8
M]N8"T++W]K'RF"33R7 U)S(M6EM#J;35)Q5[=(64\9?F.<E'9EJ6G"1L2(+2
MSR3 #D^$N2;/U0Q1`U9S.8_-,I_2H+#FE<:<2Q9EHO(80-[V=;PM6.0[HIGO
M_NK+6!]A15REM(/YWE3:1;-V] E94N75Y"LYNU&@QF\YR49K/_WTXC_7-G3+
M8#$Q@8$Y7/[XVV_+//60_6<DS-KM%[V/LW?O#(a)^736-C4_;Y9%X%6H\X8V.C
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
M'.MS(a)!?.R#]?939VD*!MH C:3-N,4$1Z4D#XXA"]?HG6]D/QTDANBH120./E
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
M?$1*:P;55A]V1-W"1J2%\$</(a)?X(Z+G/.UEAZA,$_S8ML'P$/?^/><C-8V@O
M3I^TC(,;Q8V4$0*_\&QX29>/44-4--Z&C7--0!R1F2 %W8(OQTPB3BM>R"P'
M#"UEYI^ EEFRN&=T'M^2Q:8_6:2GN@(O;<7\XO2\?]'_J1=H04=E_29.>L\/
MZYH0)EJS"3U3^;H$GDW>72=P)\#>?;/\S0K_%@2@5)M *_Z+[E@/@FKL$ "Y
MS 0NTQ#*V FJVE1\%"0@Q_#WV\<]UG\="!G>X?D/J%#I=QP*PXN7Y.BX_U/_
M7)RAER!?G+V4[*<]U4"7"ME\O_$7O;,GO9,+']_3IR^/3DL55/7+.'N5GAV=
MGIZ9MK[X0:/EBCT].:03#MW_#?[[)L+W5[)X" YJZNX+6WR13=CL#M9:`[)+
M6I\;%08U8_NQ-D=*];7YD1<I;Z@.GS[U!U=6&RVKDK,+/"VYN),A5>*4!G:+
M1K1[]R.:O4FN9E\XH@J#FBGQR?KCJD#6']VCWK.+\Q_ZS_PI?,3)%:-\UG_^
M0Z#.&27?S4 +S?R!)JL&_#HXN/NAQMG\"P=:(.@P:R?6'V8%X@]SM62O:Q17
MA\=8G@''F[PG3SVCV!6&1NCD#\S7=S\B'R;3+QP1"X&:4-S7'P\!L<YH/.F?
M/7EY_ R^>RN&Y)?3L[6'1 GE#<E?[WY(OFPX="@4YW6'0D"L,Q0_/3ZLFA=?
M. 9"?_J[. B?[FP08KH^PFO:8'*[B7\D@$Z%`@<PJ(Q(5.P7'*E\AVMBU#S@
MOQ_);_GG._./9-V3KT>/('>+[!]*25+.0*>:^4>2Y?\@/:#[7]E7!HZ(YWN.
M(a)VGT`%&;;.[SL]XA_-24"CS7`KT_]_[\$G$U6$@)'("59B&C5+/WYWVWX:HB
M1[URZU(J*J*@I4Y.+ZK@G/3V":7O#F@3NV<0TV>.&XZ/3Y'>DV.\U'KV++;6
M/V&^JJZ3!>J<,_LM?D98H_8+X^L^\BUBSH@620$*A;K@-BF=\<%HCPB2]JJ0
M^?CP::6TD^U8I@E$Y,NO9<[LDS5-?1CI`J> Q:I%O\W2T#+349;"^]8K1V E
M]*:2^SR%9O<7_C%Q14E_-88'89%<CEC":66H(ZO;8B68=;/#%;5SXF\'<I\D
MW>,L^@L%H7S8VT V^TW +Q;!8EJRNZ/9Q):%%]&-C>\H3WPK#.'4_X"3(:+<
MV# Z>YO :;F&G%*1)"7)._XA[KLH+,D[W<FTN[M1</^T<;1K<G<AXSG-8:,^
MB$H8_4QFH^)M2108P JJO]C*]+/X;W,;6YQ)0D[%?))0EA!E6XD"!4).18AU
M<SH[= ,J97)<'M@<\)C;3Y-L^KFA0$1BC5Y C"(>+(GH&4$\VHU:%,RS(R58
M>Z,FT-!XE+K2[@00U79=IU<;1RS!13-[,@9FM'X^M94P5DIYDR95'NP9F!BB
M+V7N;V@T"T[&ECY9+#Q5N'Y&N$;HG6_ WK/FN>1G:_UBM_C2"09EU'1*U[G5
MPY'K`*LE@Z9AC3/V[_]FW26*K\3S'T[/$(?B^(5_AK%LB>B?6WR@057:9?ZM
MPA!'6;@C1=6SH7L&JJ=ZV,F;NEY;Z$+*;T]V$EE]!8BTJ"O^`\-1RWE_8Q%W
MR"W;:D^T%?,PQ/!K=QS1!F2 NK0MD*T@NYD<_6Q:],EAE_#!K\AJWA[G2WXM
M_.7EU*<7BR[U#&S)?3ZPK0.*DD$)T&HB0PEBMO.B7T/^UYJM[[>]7H96F99=
MD@X>6:YWY"HK,7^8@_SK1H'IPRQ6&8.=;(41O7R2S:?!0.Q/0'%KX7(Y<4V2
M*5@DB"5%Z'$BK%">(0TG)GL2DB(@:"&TMF>>R:#VX5TMR9_</OYX2[&O/1\B
MY/5^"*,?L@7@H$IVEQ-S7PV12*<?_K3![T0+'(\HU#H*\T&^$*Y8.G-!5IT#
MXY+T&'V!@'[B!,9,9,!3?F_@Q*XU[GSA<"09CEF+NT=;^E"">%O]<H:$FQ@1
MGD;&;R2C+:0$_(1BI(H>^,W0>+ BQ!B[H5;N<#6-(<^4>"TJX61$T><$Y'VP
M^WWQPVB.-UQ1<"(M^<Q:::/R&Q0><W@F!FSX@BPAI=)[1/;$A^1;JUQN'RUP
M%%#\>YU<;EOJAB/(JNOZ\X%XP#'A:O<W4"\0<70#!*\-.DI@U) ?(^*%/\64
M7PA,QUJ!$4;(=^.8;EP9MX'9# 0GU:; B;XB`V'Z^ZL1_OM+*N&]&A8JM/_(
MW,/_R,(XNFK+L]Z+,R%$)^(<QH<2Y-M2E-]P2EV?DI9E!8[?0)FE0?0*E^C>
M\M!NU'@(DEG&J*$DKTSN20K-U0:+7VVKT_4=C&O7]\FT*9^RO'^R;]BKMKMJ
M-RCZ[ET&NKP$ZI-=.T5L2HHZF6$J4(&^JEP6V%C(@Y@>MP\X,FDQ2G+'OK1O
M="PN&GO-?1%LM@2TF0BY8K<O0##G7A1:] K=-QA0+#\DLRHD`;K:)- )"M^^
M%!0-H5#8XRM4H$*K.Y[2K@FD@!>VX\,?>\J</$3>(;)R"W/,'X-P]<FW`E:3
M1^F7-J2EW".4[UI9V,M^N <1%6B'3B+AHXB>1<(G<=(N?^E!O'@>"1Y(@@?
M)5],S2;8I]_%8UX1C'-QJBIB&_9#R;^L]\E]]O[X/LE$"$#TH^*A=>&>A5_C
M#<D?RD1&T ;QDH(a)D.?RM2!Z#U#^T7\,-J+XEJ?<#NDF'+'9!/KE2#QZ6Y'G\
M(a)44.N&"".5W;_U;X"NY-\]IGR54/.H+N?3RF#5[E_';E68PV7'KW5,7.J]%*
M7YU8_Q-!]R96=*Q5])#MX^Z4B[YW^A'MR7.A4*_<6@]0>'=A+_7EROH/'M=_
MU,(WWA9<8=JU`)XPVXX#S[Q-S')]-M5>P>^ L;.,Q_$LUG"!](JFD1\Z5P8G
M:&%!\R'Z#W"DD]M-%N=SU\+OJ:@9?\:6;NG>LT"O(TO5K7&J6GCUHVY5O0=!
M=<BM^2(H:JSP\D>[;,7&JTY<%4VH`QDHCW33P0;C)"-)/:LZBE?SO+<XP%6O
M"[_QWA:*K.4%W*X.2#W6.WG2\PY1[@/#^KTH%$DCT4'2B$2+'3?2BK3VOE$.
MRUWO913]\':5N]DTG.X0\DY(D0`)M,(J+%7?;7^)5U?OT9[CAMT2Q&<K3[84
M[L#ZR[L<U8X0-87?`A!<S,CD'8E,\'QK/LWDV.&*WT)Z9Z/7U(.?2;"SS$_8
MI93*Q[H;-8]2EU_2T4_:IN.1+NOR4)B$CN:-V5A6'M?:68/?^<N/82ZE:<!2
MVE/8NR=^I8421B[*FL X%A)<=:A+;_N1F^NX((L):@VE9=0F4-&:WN0?8I$;
M'JSZL0CLK];,H_$E%&0[9][8R%[<;B@0-#7OWV]*;OO^9K3H#\IN-3\UN_C_
M?YMMT]_H4Q$(a)3X.PAV N_'L3Q",_NFT1A$&$OK<BOWX:+5/O037.BXL/8;=V
MJY[";JSP&G9I6M03HT0.(<ARSV"Y-%'JY'&4\!.>64*BTS&>#5D*Z317.!8W
MA18X`*W)N>@<3;):<Y'"._$2<*L1#?C&XRP;*_]<1,M#LE2(6BA&?WW__?>&
M!NL/%>!4KZ#_7$MY/@!Z(%Z2H!I8X L)]>NK?Q"A:+]=DD[E0"Q6TED;D65%
M/)4X+HZ%2"YWO2^KX=5B@DNCWBFYO&AR3Z0S@76![VT*K!Y2&'F]7GW!#F,#
M6U9M,/X[9BOL1I/K#ZH(SLMOX-8W;!?0>_"I)'$$JD!_KG-67Z_4<%UUJLA#
MC>N<24 #2$\)5?R!X\2>>A[LG[PX0F@0?O01"85MN6Y%.7WP42K\3=.&U@BC
M(:'AJ2PSL0>[]$9(;1CK'S[YT/3QDP*K+*=%BCWZJJK[\O:IW/GOJHK*&XMR
MT8.JHF>51;^N'*<3;YS^6E4.1N?E<I^JROG%[J\PDO<#(\D>0Q9171^]K2FC
ML3-&)YQ[)BLY^M:I65[:#$'JW0'S%60`V<OR.L>\AMAJJT2GU8*%MOT4S6/>
M%4W&R8>KP:80*O$HP7]7U@N"A+8:XLWXI7V4#F,_=3!UCV=,DM)Z>LDOT+$_
M%K46HF<?O@<(@8 \=0^M](L\PY^PDD-*N79L93S:55HB:*(O!KU?7IPYXL05
M#5MTK:CP,:C4I>9=S@F$8TOVZWL85LIT']"-Y)$8'/KV;5W)J#$LK-!?4C?#
MHK7*(+7AW48B^R_'T!J_U0_MI7"L&9FDV*BN-L3;JYPWH?,\O9TE-PB<^ Q+
MNO*:S)+GKNL=UL.I22I%EI9W8@3R8,]YPC =DK;ND-M.3*SDZ-=.]-U-G&7#
MZ_C@U2:7?D_S1%-M=%'QJ,J8=M"(O:/"/&7-6+38?=8(18O^GZ$C8M8C[D:H
M-_= O& XQ^='IX\/C[ D%CO?J/:.$UDM[S?B4;>7D)DPU#4@U[>.(]D#MD</
MQVCV7?.<'?;/>^0/^?#L^3F(Z'DQX_ZQ03HO"" Q_F8G+3RF5[C[H=_3R?SZ
MC5W[_@2K9AL[05<X7TL<IG+U8D[F.*LPOW5-1^GW:<6-AS>YYZ9\+ABH.A4X
MH1FU>"I(a))I!^.9\,W,$AVW!'\\PZ$Q%O(_%(@)'Z^>9[SV\(a)I.S!"X^^X)1E
MQB*KP^>'.9$RG R<Q)X_^G5[>QN[_ '_,$48<7]M*EW+'OK(/;3N-H^/#]O6
M/]2WNMQ;KX&J7PB9<$M;@H[=K^H-M=U^25WIFOPN],[O7EBW'H =!9N(X$!6
MFPGHDH,@I;Z U6\/>V]W%?M$$",$7*$(<!^B*J[K0ZXH;<+\A!9K$5YDP&WE
M1H=C"OK!7G;&'UT[(+C42MF\2R*=*-1J1^"ZLRNCUK ;,&"G54#.3MWI4,>)
MK9HF5U>E*+WA@XU/+F=,^)LH%B8)#TD=ROS&A6T_X?]:(VN7T4X5X] (G?1^
M/NJ?](#[EZ+.B->U$]2_RN%AM:.YK:-+M:0T97UF>P#O,&TU[D3+6I%#U+ @
M*29/E@`%J:_Q;*INML][)[VS0ZCBN!%?IKZTL$/;9^-A=7B>I(P,3*'M;4D9
M2)O#TOO@KOWA&PY=& O-6Q1[N.E3E(6CE\P!]6K'CTD\'O'(KNR-TU15IN $
MO:E],4<PO#!#^)IUL>E]#:/LWS*U>5?.X9Q?$[Z,GX-4>)V"Y\Y'D!*NP"J*
M&(YA(H&/39#]YFSZL1EQ*U'#EF9^0MY5DJ(P\B_'9&7?J'3,O,)8_V>_=_1T
ME:'F,_]Z0VVJZE!S`J:_O;5X]Y=7KT+NFX-=] ]&7'[AJ;I4XP_MH&(,>3IU
M"P?[=0[GU7X#I_@KN;F=3&=KQ /I'[^@QV3/SDZ//76>?S'QZ5KS_GB8-226
ME!2NGW[62VO&J57L6AL(7]!029$&-%RU,LBP'),+^=?C<EM795!-26KBVC6#
M$H9ODFS_ZB:01(HORTUB@$*6`H *&\X!6&'!`,3:Y+Z&RR]WU_JSNVJV2W&N
MH"B3J\?"!G&(8-C<.5<@64"=`!G6J;R!./I?-"O^6!_/X?+L)_+^V&JTLG8#
MO'*_X7FT17%]],-AWBS#=L$*W\C)6%?PA\$+#/Y8*.?VZ1" =U"O^Q" S/L-
M?:Y1"FGG:GY=+;<PE8J*/J^X>P.'=LDJ'4G5>WEPMA,7>*M@W7"4SWX*CO,U
MUL82%!;BE58O[VH2/H?71S,65O7Y4NT3PD.O43)2+WJ7<#9EY2P]S Q7WW54
MFJ7&3U#9*>U+2-5%VAIPO VY>A P_J*]JKK:6[Z#VE<9A[>/'D3[T5LS#*7^
M($/&1$"$3<:U>?K#4!26IV:-W@JIZK8"A5H@DFXI=N%9$U880]EVHN =LEKQ
M$5^NJOA #=UT]!MN:NBW/+; V2I)\Y\=^26GK/")JBP'^W:AD/+WBF!5Q.$_
M@CC\07%8-6"X'Q>B]TOO"<;\^*)T;GA8Y;3<NGF%QTJT7CMR;DA5E?%C[/3>
M>&D?CK(\@>3H8GH>C\1UL'WJ)53@8P`,V\B"DQR%.":<PZ1DOQFQAXV]S2K3
M3:.4S.8)^Z:HT$6%+)JN)VB2`!O>9E5:6<0L)H0)L$[2VSGA$#9NWMI:/9PE
M,3W7$B3%';R+G&[6J@<U:/&$L;^QV0#)0M(-.F-3? H4VMA4:TR%H<:NWO>N
M)FBF&H!Z]I^>^:=K_>D9?Y9L/WW33]_RTS7\+-I]NG:6FVJZMBZO^".A1CE5
MVBN2=)?=,PT&HQB1F0<#=6SD^(+WH(MO:(+_+ASEP;2^,#Z#'XXC<;TT][.+
MZ3SF>+A>?%R+7L((YZC)(^$":MGL'XN7.H'"IWF:=H3'U!'\X$.;E(I#HTC*
M\!QB^5<QHO3V9@1%% E"WY"0$__.,W$Y?Y60#W>L:M?#L0&2&= -='1GKR'2
M$'JW#2"Y""?+PR'PTQ&)S:!"MHQLN:)13!R<I/INWBZ:!(I\&+09LS-!'@5(
M?@QU$%9L@XPLVL"$'?]W^)3 A*>*W]A-0%:H37ID3K9O@QR*$9:V*NZ,P6<=
M*G:26K\EH_+*5S:[1Q'7/%1<"(BMEJ0PW23!M^82YPBS.43G"3H,E@/!E-!?
M"[@XL_$=K W@$+V\9"]6HCL6L=5[%KY/"49B(C/H=!0%GD7"%0OON=:&W"&K
M$M7:2"W$5W,-X;CWEF2OAT2RX' P>#U H[0:8KCM(</=+\#]Q7Y\1EZ%`.%J
M->%!^8VQ2A.NG$-=,[D2P1B%SY3]&6* >.PG\Z-:XM.FIKWR`Z]M/2QLMH^^
M5:\\&G<Z&-I8*.<??"3ZHFH_?N90"]<<:@%S-/LMN66-B# +O%S\@)T$CO*I
MMYQA(G^@Q%"G<\?:X0"&A)9DKAMA`6#6DTKDE^O]\&,>:)%?M8M3+JA]P;A4
MP%VI3&.R8.EJE0&95/U[\/-ZP\CU.@1EPMN%+)@Z#'A;TAJ9H.'HKX;11IN%
M*-H;3@KM%4Z4[:7O>5$D[L)"JHM&H5"%(D/S2^@H[GI1E+]LK!R[-5GK!]FU
M_=C@;OQP;M /]%GOO6=%QSTA%>L6[CA+NZD*^)1"LID8Y$).C"QTQV2-)DB/
MD"0(8H2)]UX<YP$Y9L!P)T!,W[-7N"=D=;>&=R)=Y8#>>!5=`"_9`UWFJM8]
MR_6#U_SV7;A>/G15- VK)H$3RHM@8 GTADZ4.+"#?8&!$QQU^'B-RJ^)6I3R
M+&J*)YUGL9S[/%QT"E*KH:GW0[6:C9/,3#SK8U\BX<N[6[+;]74:@LSAX_/3
MHY?T6%$IX-%#!Q$Y8;:JG@>0!,@48#>*^"PH],,]K\QYC$ I/^I8&KKH4'JJ
MD+" XS] ([\WRMC!J8+U_Q\Q4:19U43@NYD_R!27P_+U]YTW`?;SA\^X^3J[
M@]GF8HYUFL'J;/+58T$+YEW?ZG/9*?:'?\P4<U<#63 M`=B+&;)NXQ&?O##.
M=S.%_AB<0G]<=(a)I1E$E4+OG-;6!1V(O.(U&$T\^K!I\4,^-R-]O;%!>X!=W\
MQM&F\0#+4,X/\)EW#+]5-+GQ79J,D7VTYY:_H@J]DZ<6'K=A7/UFQJ=<DO+D
MEAN3Q+VT%R(L!WS2[2$4LB2ALJ3*.J?^YZB20K)!QT =ODW!D)U62=0NV1YT
MN")[Q(DF;FPU:00P* E"%$8+]5W,['%CF-F6))[?4#P.2YO147N;ZGEM[T&4
MB7D3"^X0,DX!SFU=T+)V80)S<P,=GG@D`G!E. *,60+L!$$6>I:K"*:W**>=
MWMR0=N<X9XY!M,Q@D#@N^X8D3D!P-J8KTQG5BJ/5NA!LI2;6`>Q%H^TVX>BP
M@L5RJ X"19:$<6"\DSA3S.\S@L9L:W.#<)_&7;:$8.34`)F^/@IS77W<9E93
MP)L;`CF?O:/XEFUVI1[N$UD\'TW:+KB/N,(HWRH1K3@F?4_R#9$R#U.M29F,
MX(BGEN0764#&!P6-C*34DP1H$H>,J#Z-N\>?+1"B5(F,PQ-;_1)B+1"_W2$(
M7+9DTFQ],2N'1=>DSTN5],5YEY,BO,@89*+>+I0_NTC8S5,>(.4!4AZ0*K(!
MN@BW\#0&+3)O#@J-LS<05 %OO/OL\$E'9N7D%@#L')TFUV]F^S #>MUDAL4K
MCKC[F(a)&D5Y-.U 3,9I%6S8SK9]GD,J%.2+,R,YHH52HN+$S__Z3H80TDJFWT
M=>W9.#2W0!0%QAL;=E'M_?*D]^(";K\UPUU;-5676)-4=FR]0QF<.7O=(;0[
MA.8K@-XC+^54H>UE2QFT&5,_T6&,T$&X9 ?9KQP/WQM '_'S+I[\L-$&-X[!
MMU<H4E%YEQQG[[PJ>SM_4-T4&D&'`SA+GIO\BJBF[R)_0A=:(!]*$3XII5@P
MEI:5Y-YE>M>15M%$?^ 5G,'Y2(+HG+R]Z$\\NPSD; ;:2[=V0RTBQ=U8-_X]
M7P^58:F:[3LZAIV9CG[$M[.8^// %CB]P(a)R$EBOND.1\EAFO\S.=WT3;GY((
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
ME[Y/4-H';?)M#"U9(7U\4%&(a)EW/XPV;Q%%(;_36,?9H,3WW.L8 E8%@AJDH6
M3_D8JQ34(:(FANDH4[Y039-"E:PK/JVC*8$JUJ6;5I&4<!7UCZ5U-"E4Z7H\
M>3T<5PZ>]72BX#@A#$S=9VL530JB?55$^6I18?L^3<MK2J *UHA"!?X.%Q<M
MK1:G[W!QU3ZJ!J-Z1>[)"UA_)ZC7M6G"(!M>Y:W9J)&RY&A[6L66Q.\0_JJY
MTPC+@>*JV-/B_!TNKGH_6T%3`E7LJE372RWMKIH!H*)AU*+V.TR40G%\AXNK
M?E(K<$JXBBHPM8JF>%54PVD+TV^_F"H_<ZCRY1=5S:@M21]!;&>3O&GZ[1=;
M.MR%RLWMKKP7S=/<!(P2PA%*(^[2;2!.MCVUH:9WTF.)Z=*Z190VHB?YN2=7
MSD\L)9;VK7@XJ 26&Q7ZJCB7-E;UIK26NT7_U.L?<K7MI?LNQ6WG>28*$1S1
MLPHK0JI3I7F][O1N([K6"T\"V %DD(; 8CDBHC^B.TE$?<+"3:DPCC\04E;F
MD;Z>7_WZ<.>52HI<'<)*2@,__9,J$MJ^4D#V([IIDR(J%P-GI++"K5CD"-#+
MP>=$21PEG0HI#<*:;,FYPEFXI-1614*D:6'-`2B%(JM-4.A0+$*H2TSH8@':
MD?R#Z^?N?D[/!UG*1^JK%HT3K U@(#&1#W**M/W5J)%KZ75P=^U)E*@D$B-@
M"!J+:&A^.QIB?,1\3XS)K1Q"[>&WME2OX';=(ZM/2E%M<#5A=A6S*NE$LJ]*
M+(,]]]V/6$)#;THHGXB)XO *#"3J'S@/86M$W)IF_-[57@:U#CIHISMSEID*
M-6JH,$L5>&H=IE+2KL=6`;X*,U;(Y^6S0TA[#%5"T7+*:Q9ZI#%TI"JSF\="
MI8Y6$C+,1<I&RD<>(X5]+:KQW#H"8Y@:Z=JHH&1X6B(WH+$1<0(9#QP?GOW8
M.^/1067TM&A"12U:>1]27;<P8<4("I;D24A96W;G![WA[=WX*6T,"%MX6@ML
M[O7VAT+1VJ4"/5=RP7S'S3"$Q?C[5D9J870QN>V*^8T1N7:IG#%1P;/*R'OP
M)<5651$J(]BNW86*D&40(6ETB'F4HM^V@VS4HLZVE^<B%9Q+S9#QN'3R9!+E
M&'%'BB/]8%FS!JVJ#XFX+N=^<L\=5+:T0GC6#LX)23FE%%1 =D?E*)^>?H6=
M]0WMBW/O+D(Q,/<:&Y=Z[O6YU50%F5>PE?&XM?&=5#AH[&\6AU_P7IF-ZL87
M;!T:X5+S#PO\[+&F9\!_9X/"HO"51L7;9^HUCTW^V:S7/=8O,";[%B+ZX8Q*
MY*6ET3XI#(9CG#(a)C.2H-!C>3T1P]'<B3>Y'9(1EUD+A4.#4I+'M+W3:D[346
MO=F()/Z9=CNP<&*L_[6WW257Z'H&%V3Q_ @/'W^_16HIK5:]4B.DU1*1%T":
M$YFH%$[3.'(C= +\#:XY<E1&OI[7"L;:165+41M4CK:YM150M:@M7O@$(X>_
M.W6=73-:'BOY/>IV71F:_^2$C=\@\YZ,);E#1F^O$=]AUDW2W(DHR^E;;57C
M*(1_CFZ7.DB^)9P./O;ZPWG<H; 1_IU@DF_#=$N'R=S'F\D\4SQ&JKPUJ.@I
MH$KU6M3KRNC50@OK?5W-K\+CSR P6_BN)+0$M%9*6_U^993 '?)O\<<,8SV9
MCB!<UDS*(S^@'%(.JU#IQ,_&+!TXY^TX'MP[D%>S\:I(8]BPYRFU<8ZO%D%D
MW[U<MQ3:A,K;+8CSPT]66)T4M00T*G^8M039K]$Z_OX-_[_CI= Z?H95$9Z'
M8U4_>:YNG_LGO&G]QM^B`VOAYM:U_<7ES2+EAT\QW=?BG8@!J0DFE^ -H&A2
MA<\3? Z>R,C9AW>=B.=V),96M#S0/@BBYP`+]?@I4$;SS!8UBM_:%J7FXF:)
MX4SI*1='%OWCHO/6L)Z/`[ZIL* BFYP*T<K8G'/&4G3P0&4S/B4^FP.A^%D\
MI'\(U2MV+GV%H3=M20D74\MJ*!7B,VH0('+[))K,+5L/6:9>,;80@D_U>BT^
MAD#+<85#JL>^GPEP]R"#QV!&"VT`XX"!%44'Q@OZH%&5("/(a)Q.B%7<E:XX8K
MO-;,0>NY`U"6KIL/.%&;$[$ZA;OK=<YV&R9^%@NV9R()>O"-78F!D\OR9/'/
M3F31%N)/RJ-]7?D4*3IC@NT*C#KF#&&#-7K1//(J99>5]I<2`!#%A ._SBX=
M-O:XEDMS(R0UXA_H^=7 )!%"SP;GIR_/$!*_?SYX>?'LCR9L[^7V)5@/(F7@
M0M?8^>RJ^\=&'F\L*KTML441>^!R7 E"?/8'C&\$:&4UG2?4)%%2P>N5S ZJ
M3=FW)0RS:Q%-,M)^33"/<VXGV+[8@=HM.<HF'Q@H\7HRSE3H;V$9]_ B52?Y
M=:O0*O,^7D?3O_& -F B%NBFIGD\:(*K`!/!BR29@?JDR!=&[OCP_,?](D9*
M.O?:EF]I)>J:(H#A$[X,D 7'.E3>$# H19PG?,VB*Y@7RGL1E:^P/!";<W&7
MNPT^RN)<26ZH-_'TFBFIL-&7*S"^W1?D.5UI1G 3P2J/#%B4\FIJIH-5OM#2
M#6 D<Y5CF^XLUS^-8:G4+< =3X:C@>%-@J&PN1=J$6M7<;*JE<GD'A4-9O;"
M.IJD%B,='^<M;#E^'J^"64>,PNE?2*/DIZZ*)I</JO>IRRA#^9?Q>(R?3'F!
MPRQS1*8SAQD?LZ1]R60B$:!0,<J34H"ZJ""RM:S%`F6]0[ 4MR7L#=9V(5PC
M[^2F/K2T!T?RY7O>_Z]>RX*5VY$EUD(3> 'NSJ'EJA2FW#V)D')ZR2Y*1RU>
MA(3/9,N14SCJD121U82F'P)+=,UNTLWP@_K6,1FZ@KD)I*:4;QEQR91NV-^@
MB?M9HB53S7XJV1PX!022:3:3(Y*;/$XGF$3V^/^+$5H)1N54`NDE"HY^ND'6
M2Q>L_70=2[]1U_JB>MQ$"RSA9,RCTS=#N$%-49Z?(F,RVT!9A; XH@[&+5KV
M+I[?[/9V&LM37/&EPMY6A](a)#]9VNQ*HQS72X.C]\[D=O.1[Y>'Y-BZ\T;-PQ
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
M;AO?(a)H.*2)"IW&P6%'C(Z["C]^M,F0&C&2-%J6QI" ZD!^K&HH*"%9^%=2@P
M%>.DM\&T8V#^NC@8\3E7&#P0<#C(J=<_\AZE[>%'_\Q>Y\S7/'-GBD&NE\/-
M#HKT_O>=PD+7@>!=-[_&Q>B<B*XWU&7KL[C2<(:^K-6-YK)YQNOJNF/)V6"?
MZQW4>$0C#U0[XY.;0A]-V+&S&\!1!GE#./1];G"&PK%WDHC)?OM=#)#;75DS
M]Q;1F30G%CR_98('UZ84[>,!;K21@C:.'4D,]&X9L(6<06KO=@I4K\9(0XMX
M2X6[IRD?>/.!69@98G&V+^$75L5[?JI.@,VUWXRC[I0)OCU#+/4/!KVL52-U
MR.<<R9_;8R5;(P5KR](P)3M5H>I=;N0W%<0ZKG1+:\'&^H>D?9" ^+ M?&M,
MIAP+2/U@3Q; R)/05EFR]L^";]4I]8%?IFB6J&[ 70N.ND1)NA]['0+ >D-M
M4P51W54&GOVZ",,3!2$9U\!3A;'MM"JX_?\L!//1)3OKB;9=JKX-E_*VC2JZ
M@GX9S(4'D2X?67!U8=FHW^4L\$2S'CEIXMYB)Q)EJT[K@K*G]Z'U^^J-3CQ(
M#$)@GY[#WG9NHNPV-HQ5>7+ L[WC4S&F6: NXQ@:6G.B)(_4#W" -Y4`'-'+
M^CT"M7U^#=E-WHG-=HQ]+7N,S#\N3COHR6>_P,WRU_:3G><OMR8OMW9<'@Q*
M+Y&")MC;[:DD4QXU%9<1[0:4GE_ZI^D"3)P-+;KR41 /Y4>8IB(BO36M$P\F
MJ\OPA!J'7Q+0>)8-":V8Y],]Z"@KJ(QK!N2.+9%.F$:("Y ,!B&:0@RNX^!A
M"]!:8G(:2BN/\$"$F $KDRFNNN;I/Y=F1_#CG5U9Z@<\23'[0VW/^M)$VK"$
MTD*:V<_Q04';,F5CUG;6I'7CP*W*?%>79R[N6IX"`0UCF)!N^*RR?IZU^?8D
M:::!SG1B9HGO"%Q&[P)/5Z3K<W.LR-Y$DI]MOW$6V]"-6T6CW9C:RA0HQXJ#
MF2[:)?'P,RIS]@P%#KQ],;RXK@K2WQ1VEH#-E+MVL96U,<(80OJTB5'VL4R/
M(_3SYGKMU.=^\=L;24?SY/76!"XH;[:W=EX']MHG>J+[!0&7'3 <IUY(QA'A
MD8!LM5^)D2^/%=%DY(FK^,%'Q@A.ZOZPUGEK6.N\,ZR5DJW;CM+C5_+-:RA9
MV\46CN,U8^;8%L.2HYF(K4239WG5[/)&H[DA/$8YZ"G*I2A:G!WE>N,Z21C3
M+Q&P?>).ID&9C8TL[V2_H?_[Q#*%H)3F?08MZ(a)AI^$.E,/<&XEL-)E&_HA#B
MGUNU7ELOP9SHEDRMO+#6P1+?/.S/"12XKT(<'HXZFN'WL:D!-R@(O1<C+_Z_
M""GXA-^)S]XJNFT\7*UVX47S\;P:,>[E!.=?@O %#)Y!B4U1I;05*7V/?'XQ
MN,[H0>-/S^,T8]*!44B\I]9X`<7L_]*6_M'R?J87KTQ2:_@JN%%+#;%BG2R*
MQM;KX^$L*Y2%OLVJ%V@BY(C?71EV5\2=)07L;ZOZC9<0\\[#JC0.-^9]LU0&
M&J*.;D%'$+(%I[@05)#JS$[F"TRSP:8V8-I_H_H,@;K"U/ABM)S3+KX71"_@
MLB!SM>V-5=-OK2W21*CND[%Z^*FKFLXM=V1D\&6G,5W2FJT#8B82!:U=6*V(
M<+UTF<(N)R9B9U8\0R-^<EJ!M%H#D)^34U9G]0'V;-!:-GO6LFH%I5:_VU)X
M;K)MA=L&3-/ZY=J[RU[Y]OIZO/=8C[=157)7W+==!:M;RU*$[:5DM1?+R1I
MGP3?H%IK#2RG1;.P&UQ7'VD!<92HF:'<>;X0&CX7Y\BB3M7=@',/"4->CW)9
MUCU'XT_5_;PJ[P-#8U#I6G+F*5YM== 867HZ[B>ZR#PCFY I8K+X&H:G8/;E
M1D%GE=V-'/*G^X(89P'$8LMXY50?#6BF`S#9M_QT;XFGNA\`:+&GNC\AT#[5
M6N[;8E]]+_N]T$OC8ZT/]L4CF]$^7QCMTT.6AKKTYOL%R^S&A2&2873],V$(
MWZ-"\W#XJL?I4>1N);-[T#>[GQN[Q.-B3J !?TO^=/)[F.LSU7%0N9>]![R)
M3EQ%0'.XTW>7O+(T[D6]@W??PXL+"%H3*4 $=K+WO3(52KYQ<-7Q&[XY>&4Y
M1<[V2?J=(V_:R.SON:K.V\-X)C]!SH^'Y/0L0G25T]TJ-S)*YMO&8;3O=/'.
MUJ6X*B&:8"-H3P*>"R)2&L3#=](_E'Q/[O&A1,.^B1UR8D1$]C[Q'?7X-1_%
MR2'>U(>]I>* -VN.R1O:,G]24Z=SQFAL479G^[ 5B>&.5V'>]^[=_*Q9@<DP
M0<3'#CI_.8W<QT0]=NX%QQ>B@TC*:1J+O>:9X.;>]])4.U6"W4$RH$:1P+J/
MV@X;%V-,V'*V?PR'*, )P7;@""3EW=E\\>Z]B*R![Z7.UG(GH$[9(30!>X=G
M>XMCX24@@:Y'\Q]L4'"F4M]O=:RZ/)PMT%@'B&F3=K7^>=0$OL.D+.T.A.A+
MM1/J! #A2J5F;.M'4R6=345#`K@G\[W%?"&C;DWWWBMT<\.=S1<2^JR.(I''
M"WF7T(@ETQ]Z<HV?1$_GB,+11-L%";PV<8AA>7(@@>+DN M8ALNOG6]V? BS
MGT_:J(MGC933O4Q<V,<>L_JS7V;T>6<)=Z>XP?R"U,(^];#Y4# W,\31QVI^
M*>[;^.=*/94NYA_WS1DY$.*4I(W%F/(-^)>(#VMF(8K^;6DCD8T"B? R__[G
MW=6-=[)FGV8A"G/SV17XJ6Q?H_R,Y?=Q)%HUV\O.5!1WM.5K*=,H/UP>'=*^
M3DL*G,"36"-?J2G":*I9X]5@)BE5Y+5K`.I*KQ?U_33[1?2$"\V8.&X,*,QJ
M0^>(M(?=P"KNX3[+T5 #@D[2[E36'[>1QX2>N^7%-6H(@N)BO5(/?Q:@%FXX
M*/U'!Z?HC^++CZWX,HHNC]=0^7^T=B?69<8/U=J=\.?;Z@O_$/[C2^4@C-##
M_0J8`NGM2E[$OA790RET+X;[>S(ERD+5*<]*YCU>09O1% B^QB+6*?;0M7B>
M4PW&7J8(30?<TP$E8%@\[I*?\DAB7GF48I$Q&_>JNS#T1"B0K3_>B-_>R@UN
M"Y+B,#6D5KS%`8++$E3W8O -Z8+C3(a)4OC__?C;(5;V;OE(.EQT&[4._A6MIL
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
M$T'1GAG3W6%OH<N3\H:1$H*((77+-&W871%51>>T(a)I[0LH5].V%"R'U=BZIE
MHB>8FM&)[@F)!>%5CQ9"]D@D^?MLHPN)1>/S1=HGC+W/.)J0<C02&Y^TQT6:
M:+('4E4]4NU82U+J5*DR6>^61.ROL58Q6D+A!V80A\,X'.UBNTLHKHAH!E@,
MD?#'J("!]@=!; 9[9H@,RL5OUL=$8=44M*$:=M1(RK6!16/9DYVM(W&X991#
M.FVTV(O8.E=R">3:,"&:+;O^8[$D3+E%$G0KN9D3UH)C6C>NSRA-I$-80&FA
MU@[N*+ JA.ZZQ]@>Z[H+Y;;E44[8[N)JJ0TN&5'*!?M.NM<?CVQLQ.]%@H,4
MARF.4CQ-\2S%\Q0O4KQ,\0JE@=,:(!XB'B$^17Q6'/FNB&J#;Q!''D-Q(@\0
M#Q&/$)\B/D-\CO@"\27B*YS/7H(#+(98C+ XQ<)EB4MU\'YY%-"5*N4!XB'B
M$>)3Q&>(SQ%?(+Y$?(7SV4MP@,40BQ$6*,G#I<*/#W9)*>J&V$5,%WD?(4&X
M29"GLU.=(A0]HCQ=*C165"%T08F"16EJHLN9M6%38;^<U+$U![2BY0TIKXV"
MFQ;XMGU/A/0]-JPG6L>6[-%/3ID8$Q:FO4A/S$#NNV/#TVW#>LBHTI%JTOAE
M_BM#R_7'\3B1HM[._]W6C;&;N"6R*CS3B9D0IJ OM&PCD[$2K-7@F^_J_\\%
MT23G3I=CW'<7R#7E+?A;R9$"NU=$L"BAT9'C_:#?_]+3-M0YH!624 5F3B21
M4[5+@#!F)BTO-16\P,+%[LOKVX.!6V]G:G(-82;\3O[.'R)*)E0K(?QVF"N0
M, F["MC=/S7P"BIC]^$"?O]YW'M9F)$YN)FV!J[S>&:[F.ZY_?YY8]:;[K&]
M^2@M,/VC^>@NW*B@4]!3<.,4W/04[Z)X/VJJG9KJOH).01$,Y?V#")T*JA)P
M`5$DE[!W8U)U9<AZ15"N!I_7FR_YY^[SKQ]I9;YDA][#?N].U]V_W+X5_=%[
M=7,O/_\"4$L!`A0`% ````@`Y"5;+H7N37HX7@``EGP!``<````````````@
M`````````&-E=F%L+F-02P$"% `4````" "D'5LN.*P$73U]``!\"0(`"0``
M`````````" ```!=7@``8V]M<&EL92YC4$L!`A0`% ````@`[B9;+HNMV4\1
M! ``Y@T```@````````````@````P=L``&]P8V]D92YH4$L%!@`````#``,`
*H@```/C?````````
`
end
3
2
We seem to have added tzset() gimmicks to CVS Python.
test_time now fails on Windows, simply because time.tzset raises
AttributeError there.
Now Windows does support tzset(), but not TZ values of the form
test_time.test_tzset() is testing, like
environ['TZ'] = 'US/Eastern'
and
environ['TZ'] = 'Australia/Melbourne'
The rub here is that I haven't found *any* tzset man pages on the web that
claim TZ accepts such values (other than to silently ignore them because
they're not in a recognized format). The POSIX defn is typical:
http://www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap08.html
and search down for TZ. There's no way to read that as supporting the
values we're testing.
Anyone have a clue?
not-all-pits-should-be-dived-into-ly y'rs - tim
5
17
[Moving a discussion about capabilities to where it arguably belongs]
[Ben Laurie]
> The point about capabilities is that mere possession of a capability is
> all that is required to exercise it. If you start adding security
> checkers to them, then you don't have capabilities anymore. But the
> point is somewhat deeper that than - given capabilities, you can
> implement proxies without requiring any more infrastructure - you can
> also implement security schemes that don't really correspond to any kind
> of security checking at all (ok, you can probably find some convoluted
> way to achieve the same effect, but I'll bet it comes down to having
> tokens that correspond to proxies, and security checkers that allow you
> to proceed if you have the appropriate token - in other words,
> capabilities, but very hard to use).
>
> So, it seems to me, its simpler and more powerful to start with
> capabilities and build proxies on top of them (or whatever alternate
> scheme you want to build).
>
> Once more, my apologies for not just getting straight to the point.
>
> BTW, if you would like to explain why you don't think bound methods are
> the way to go on python-dev, I'd love to hear it.
It seems to e a matter of convenience. Often objects have many
methods to which you want to provide access as a group. E.g. I might
have a service configuration registry object. The object behaves
roughly like a dictionary. A certain user may be given read-only
access to the registry. Using capabilities, I would have to hand her
a bunch of capabilities for various methods: __getitem__, has_key,
get, keys, items, values, and many more. Using proxies I can simply
give her a read-only proxy for the object. So proxies are more
powerful.
Before you start saying that we should use capabilities as the more
fundamental mechanism and build proxies on top of that: as you point
out, we already have an equivalent more fundamental mechanism, bound
methods, which is equivalent to capabilities. It's just that raw
capabilities aren't very usable, so one way or another we've got to
build something on top of that.
--Guido van Rossum (home page: http://www.python.org/~guido/)
12
67
Guido wrote:
>
> I understand how class ZipFile could exercise authority in a
> rexec-based world, if the zipfile module was trusted code. But I
> thought that a capability view of the world doesn't distinguish
> between trusted and untrusted code. I guess I need to understand
> better what kind of "barriers" the capability way of life *does* use.
I think you are on track with regard to the deeper question you are grappling
with. Almost all dangerous things come ultimately from C code. (I can think of
one danger that can come from pure Python code: it can provide an illicit
communications channel between other objects.)
So in the "separate policy language" way of life, access to the ZipFile class
gives you the ability to open files anywhere in the filesystem. The ZipFile
class therefore has the "dangerous" flag set, and when you run code that you
think might misuse this feature, you set the "can't use dangerous things" flag
on that code.
In the capability way of life, it is still the case that access to the ZipFile
class gives you the ability to open files anywhere in the system! (That is: I'm
assuming for now that we implement capabilities without re-writing every
dangerous class in the Library.) In this scheme, there are no flags, and when
you run code that you think might misuse this feature, you simply don't give
that code a reference to the ZipFile class. (Also, we have to arrange that it
can't acquire a reference by "import zipfile".)
So far the two approaches have the same effect, and the difference, for better
or for worse, is that the policy of "this code can't use ZipFile" is encoded in
Python reference-management code in the latter and encoded in a pair of flags in
the former.
Now, we might want to allow certain code to use something else dangerous (such
as the socket module) while simultaneously disallowing it from using ZipFile.
As we add N more dangerous modules, and M more objects of untrusted code that we
want to control, we have an N*M access control matrix to configure which code
can use which modules. (In an access control matrix, rows are "subjects" --
things that can exercise authority and columns are "resources" -- things that
might require authority when used.)
In a system where designation is not unified with authority, you tell this
untrusted code "I want you to do this action X.", and then you also have to go
update the policy specification to say that the code in question is allowed to
do the action X. This "say it twice if you really mean it" overhead puts a
practical limit on how fine-grained your policies can be, and it adds a source
of accidents that lead to security holes.
So now with a large or fine-grained access control matrix, we see the "unify
designation and authority" maxim really shines, and really matches well with
the Zen of Python.
But there is still another advantage that capabilities offer over other access
control systems. With normal access control (and an extremely diligent and
patient programmer and user) you can in theory achieve the Principle of Least
Privilege -- that the untrusted code runs with the minimal set of authorities
necessary to do its job. However, this is implemented by creating a new
"principal" -- a new row in the access control matrix, setting the access
control bits in each element of that row, and preventing any other code from
setting the bits in that row.
Now, observe that only maximally trusted code -- with "root" authority -- is
allowed to make these kinds of updates to the access control matrix. This means
that all code is divided into two kinds: the kind that can impose
Least-Privilege on code that it invokes (this code has root authority), and the
kind that can be constrained by Least-Privilege when it is invoked (this code
doesn't).
With capabilities there is no such distinction. All code can be constrained to
have access to only the privileges that it requires, and at the same time all
code can constrain other code that it invokes.
This feature, which I call "Higher-Order Principle of Least Privilege" [*]
enables new applications.
For example, using first-order Least-Privilege a web browser which runs
cap-Python "caplets" could extend selective privileges to the caplets, such as
permission to read a certain file, while withholding others, such as permission
to write to that file, or permission to send the contents of the file to a
remote computer.
In addition, if cap-Python supports Higher-Order Least-Privilege, those caplets
could themselves use other caplets ("web services"?) without unnecessarily
exposing their privileges to those sub-caplets.
One could imagine, for example, a web browser written in cap-Python, which runs
inside the first web browser (e.g. Mozilla with a cap-Python plug-in), and uses
cap-Python caplets to extend its (the cap-Python web browser's) functionality.
If people already had the cap-Python plug-in installed in their local Mozilla,
then simply visiting the "cap-python-browser.com" site would be sufficient to
launch the cap-Python web browser.
Of course, this could lead straight to a fully functional desktop, making good
on Marc Andreesen's old threat to turn the browser into the operating system and
the operating system into the device driver.
This would be effectively the "virtualization" of access control. I regard it
as a kind of holy Grail for internet computing.
Regards,
Zooko
[*] I call it that because it is the application of the Principle of Least
Privilege to the implementation of the Principle of Least Privilege. One should
be able to impose least-privilege constraints on the code one uses without
requiring full root privileges oneself!
http://zooko.com/
^-- under re-construction: some new stuff, some broken links
4
3
Guido van Rossum <guido(a)python.org> writes:
>> > I think you could subclass the metaclass, override __new__, and delete
>> > the bogus __getstate__ from the type's __dict__. Then you'll get the
>> > default pickling behavior which ignores slots; that should work just
>> > fine in your case. :-)
>>
>> Ooh, that's sneaky! But I can't quite see how it works. The error
>> message I quoted at the top about __getstate__ happens when you try to
>> pickle an instance of the class. If I delete __getstate__ during
>> __new__, it won't be there for pickle to find when I try to do the
>> pickling. What will keep it from inducing the same error?
>
> Just try it. There are many ways to customize pickling, and if
> __getstate__ doesn't exist, pickling is done differently.
Since this doesn't work:
>>> d = type('d', (object,), { '__slots__' : ['foo'] } )
>>> pickle.dumps(d())
I'm still baffled as to why this works:
>>> class mc(type):
... def __new__(self, *args):
... x = type.__new__(self, *args)
... del args[2]['__getstate__']
... return x
...
>>> c = mc('c', (object,), { '__slots__' : ['foo'], '__getstate__' : lambda self: tuple() } )
>>> pickle.dumps(c())
'ccopy_reg\n_reconstructor\np0\n(c__main__\nc\np1\nc__builtin__\nobject\np2\nNtp3\nRp4\n.'
especially since:
>>> dir(d) == dir(c)
1
I don't see the logic in the source for object.__reduce__(), so where
is it? OK, I see it in typeobject.c. But now:
>>> c.__getstate__
<unbound method c.<lambda>>
OK, this seems to indicate that my attempt to remove __getstate__ from
the class __dict__ was a failure. That explains why pickling c works,
but not why you suggested that I remove __getstate__ inside of
__new__. Did you mean for me to do something different?
I note that c's __slots__ aren't pickled at all, which I guess was the
point of the __getstate__ requirement:
>>> x = c()
>>> x.foo = 1
>>> pickle.dumps(x) == pickle.dumps(c())
1
Fortunately, in our case the __slots__ are empty so it doesn't matter.
--
Dave Abrahams
Boost Consulting
www.boost-consulting.com
3
4
It's apparent that I didn't explain capabilities clearly enough. Also
I misunderstood something about rexec in general and ZipFile in particular.
Once we succeed at understanding each other, I'll then inquire whether you agree
with my Big Word Proofs.
(I, Zooko, wrote lines prepended with "> > ".)
Guido wrote:
>
> > So in the "separate policy language" way of life, access to the
> > ZipFile class gives you the ability to open files anywhere in the
> > filesystem. The ZipFile class therefore has the "dangerous" flag
> > set, and when you run code that you think might misuse this feature,
> > you set the "can't use dangerous things" flag on that code.
>
> But that's not how rexec works. In the rexec world, the zipfile
> module has no special privileges; when it is imported by untrusted
> code, it is reloaded from disk as if it were untrusted itself. The
> zipfile.ZipFile class is a client of "open", an implementation of
> which is provided to the untrusted code by the trusted code.
<Zooko reads the zipfile module docs.>
How is the implementation of "open" provided by the trusted code to the
untrusted code? Is it possible to provide a different "open" implementation to
different "instances" of the zipfile module? (I think not, as there is no such
thing as "a different instance of a module", but perhaps you could have two
rexec "workspaces" each of which has a zipfile module with a different "open"?)
> > In this scheme, there are no flags, and when you run code
> > that you think might misuse this feature, you simply don't give that
> > code a reference to the ZipFile class. (Also, we have to arrange
> > that it can't acquire a reference by "import zipfile".)
>
> The rexec world solves this very nicely IMO. Can't the capability
> world do it the same way? The only difference might be that 'open'
> would have to be a capability.
I don't understand exactly how rexec works yet, but so far it sounds like
capabilities.
Here's a two sentence definition of capabilities:
Authority originates in C code (in the interpreter or C extension modules), and
is passed from thing to thing. A given thing "X" -- an instance of ZipFile, for
example -- has the authority to use a given authority -- to invoke the real
open(), for example -- if and only if some thing "Y" previously held both the
"open()" authority and the "authority to extend authorities to X" authority, and
chose to extend the "open()" authority to X.
That rule could be enforced with the rexec system, right?
Here is a graphical representation of this rule. (Taken from [1].)
http://www.erights.org/elib/capability/ode/images/fundamental.gif
In the diagram, the authority is "Carol", the thing that started with the
authority is "Alice", and Alice is in the process of extending to Bob the
authority to use Carol. This act -- the extending of authority from Alice to
Bob -- is the only way that Bob can gain authority, and it can only happen if
Alice has both the authority to use Carol and the authority to extend
authorities to Bob.
Those two sentences above (and equivalently the graph) completely define
capabilities, in the abstract. They don't say how they are implemented. A
particular implementation that I find deeply appealing is to make "has a
reference to 'open'" be the determiner of whether a thing has the authority to
use "open", and to make "has a reference to X" be the determiner of whether a
thing has the authority to extend authorities to X. That's "unifying
designation with authority", and that's what the E language does.
> But I think "this code can't use ZipFile" is the wrong thing to say.
> You should only have to say "this code can't write files" (or
> something more specific).
I agree. I incorrectly inferred from previous messages that the current problem
under discussion was allowing or denying access to the ZipFile class. But
whatever resource we wish to control access to, these same techniques will
apply.
> > In a system where designation is not unified with authority, you
> > tell this untrusted code "I want you to do this action X.", and then
> > you also have to go update the policy specification to say that the
> > code in question is allowed to do the action X.
>
> Sorry, you've lost me here. Which part is the "designation" (new word
> for me) and which part is the "authority"?
Sorry. First let me point out that the issue of unifying designation with
authority is separable from "the capability access control rule" described
above. The two have good synergy, but aren't identical.
By "designation" I meant "naming". For example... Let's see, I think I'll go
back to my toy tictactoe example from [2].
In the tictactoe example, you have to specify which wxWindow the tictactoe game
object should draw into. This is "designation" -- you pass a reference, which
designates which specific window you are talking about. If you use the
principle of unifying designation and authority, then this same act -- passing a
reference to this particular wxWindows object -- conveys both the identification
of which window to draw into and the authority to draw into it.
# access control system with unified designation and authority
game = TicTacToeGame()
game.display(wxPython.wxWindow())
If you have separate designation and authority, then the same code has to look
something like this:
# access control system with separate designation and authority
game = TicTacToeGame()
window = wxPython.wxWindow()
def policy(subject, resource, operation):
if (subject is game) and (resource is window) and \
(operation == "invoke methods of"):
return True
return False
rexec.register_policy_hook(policy)
game.display(window)
This is what I call "say it twice if you really mean it".
Hm. Reviewing the rexec docs, I being to suspect that the "access control
system with unified designation and authority" *is* how Python does access
control in restricted mode, and that rexec itself is just to manage module
import and certain dangerous builtins.
> It really sounds to me like at least one of our fundamental (?)
> differences is the autonomicity of code units. I think of code (at
> least Python code) as a passive set of instructions that has no
> inherent authority but derives authority from the built-ins passed to
> it; you seem to describe code as having inherent authority.
I definitely don't intend for code to have inherent authority (other than the
Trusted Code Base -- the interpreter -- which can't help but have it). The
word "thing" in my two-sentence definition (a white circle in the diagram) are
"computational things that can have state and behavior". (This includes Python
objects, closures, stack frames, etc... In another context I would call them
"objects", but Python uses the word "object" for something more specific -- an
instance of a class.)
> > This would be effectively the "virtualization" of access control. I
> > regard it as a kind of holy Grail for internet computing.
>
> How practical is this dream? How useful?
Let's revisit the issue once we understand one another's access control schemes.
;-)
Regards,
Zooko
[1] http://www.erights.org/elib/capability/ode/overview.html
[2] http://mail.python.org/pipermail/python-dev/2003-March/033938.html
http://zooko.com/
^-- under re-construction: some new stuff, some broken links
4
3