[XML-SIG] The Zen of DOM

Laurent Szyster l.szyster@ibm.net
Thu, 06 Apr 2000 11:49:30 +0200


This is a multi-part message in MIME format.
--------------6CDEB2A441690ACFA4000AE5
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Andy Robinson wrote:
> 
> It seems to me that one could use Python's extreme flexibility to
> take a generic approach to tree-building, and see if there was a
> class available corresponding to a particular tag before creating
> some generic node; if so, create it, pass it the available
> attributes, then pass child nodes to an add() method so it could
> organize them itself.  Then I could magically end up with a
> notation like...
>
>     presentation.slides[3].frames[1].paragraphs[0].text

> ...without having to write lots of new stuff in the parser as well
> as the application class hierarchy every time.  Or at least to
> navigate the tree using generic node/child notation, but get my own
> class instances attached at each point.
> 
> Has anyone actually worked on this?  Is there a solution lurking in
> the package somewhere?  Or is the preferred approach to get a DOM
> tree, then walk through it building my own objects?

Yes, I did. Here is attached the latest version of myXML. Store it
into your python library /site-packages directory and do:

  from myXML import base, xmlns

  class Presentation(base.element)
      pass

  # ...

  class Paragraph(base.element)
      pass

  NS = {'myNamespace':
        {'presentation': Presentation,
         'slide': Slide,
         'frame': Frame,
         'paragraph': Paragraph,}}

  dom = xmlns.DOM(NS)
  parser = xmlns.Parser()
  parser.parse(open('myFile'), dom)

	# or abreviated as:
	#
        # xmlns.Parser().parse(open('myFile'), xmlns.DOM(NS))
	#

  presentation = dom.root()
  print presentation.slide[3].frame[1].paragraph[0].textof()

As you will see from the code I reused much of Greg Stein qp_xml.py.

If you want to play with it there is also some support for XPATH,
XSLT and XLINK in this package.


Laurent Szyster
--------------6CDEB2A441690ACFA4000AE5
Content-Type: application/x-compressed;
 name="myXML-0.2.8.tgz"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="myXML-0.2.8.tgz"

H4sIAFuY1zgAA+w9/3fbtvH91for8FGWUYplSvLXVbOcuIm7dk3Trs76+iarehQFWYwpUiUp
O1rb//1zd/hCgKRkJ3HS7c18jSUBh8Ph7nB3AI7ofPXTty/bn33Uh+13jg4O2GeMdY8OOuan
ejqMHXUOD466+93OEfw+2ts7+IwdfFyyxLNMMy9h7LMw3Qx3W/1/6TMn+Y9GQRRko5G7WH2E
PrqdzuH+/gb5Hx6S/Dv73f2jbheq4fPwM9b5CLSUnv9x+Y9GXhiORqzPBs7YS7nTYs7beRil
9CUMoiv6svCyGX1Jw8wZ1v5oqh+e+3rE/EfJf5y5j8/m+b/b2evsCft/eNDZ3d2F6s7RXvdh
/n+Kp16v1ywdqNVezzhLg/ki5GnGoIa9+O5bNl4G4YQnrOGxNAwuZxnj0cyLfD7nUcbiKftl
MQK7AQhY7+dmzY/n4yDiE3YTZDOWmRi/X2WzOGKT2F+KtuM33M/YPJ7w0K3VvoCOoDBiixVH
s9NiMw7dsL97c56y56GX+FdOys6wDsCR/hqgjpOMpVkSRJe1WpasejVULVkuMdX4W58vMvY1
lZ4lSZwIsGkSzxkR7yUpT9Jiu1qNIzDYyNEoAjLAXG4zx6VCB2r90EtTxkPihUBJfyZ8ypRn
baQ8nLbYkydXN00Bgg8WuqPRJPDR+S4XEy/jDYDQABpPxt9m8ZSwmO2BJoFjGiRppsunQK3P
gkhW+jMQXsKjvKFuDCPxXYm8ST9G0zgM4xvkpIJMeLZMAFmZrAhaFokKprJbYKdmiHoUKZpw
AZTTqKF5mHK7rSTjVRzxvDNApJq6QTThbwU5RWrY8YmGG+x0h5WYNUCw3R3ekZAaSdkPuRed
CQ1ocMkMrkYHNGqi596iYYG3EE713FTaI9Dy1PcWHCdWwwfd8AA2yoIs4Gn/199lL1SB7CTt
dxO+CD2fK/j6n+v4x5sv/lpv3gX+mODD7I7gJwR+qcFJ82YwjySpK9RCRbQbZHyeNgxd2Yzd
QtS0lE9JDAGlDCbL+aLBWzDlbhLoaDSS/YyX0yl04Rw7oN/Aa5zCmlb80WLXXrjkRKk78rIs
qaBUYqEPmP3scdqvP07r8IU1BBJTWoSwKVgCGmhImEGnXM7XHLumuaE6OEFqTZSqUbNZnuZ8
3RwXTPFNptj1ul9L1wwjYHSXAzvH7cfpCY5d8lMA2TOlPKb2iWOYNi20EUmxSnQ5Cj36XMvW
DtxEWj30HK811Jw2YdLB8fVqVBjxGxC+NPG1ddadpnW/UzLwSRxbNiCvoRZowvCzbF7BNfBQ
ojewotNT3xM+j6/BM6KP9YPEX4KHhMIpT8htkm/DOnTiWcKByaCPXrRirutWIoTqCMg16fOi
ifiNAykomGX58uHaamYPtlseKDaRTOR95JPtTwr21+Iqt6p4yZ2qKZ1TtNag53jLFHqLBY8m
kkZh1oHWNUK5ma2IiTPvmtsteRPUNs24N3nKxtz3limERvGcMxV7zDG40oiEJDKSYO5OKuTs
ZQwWcmuFehe26LBJPco1y5YDOdeHrhwRN1gqQqtv+MqIq27Dg4tOPrRANbvJbgmWTRfNwtw2
9AyrXZrMzXxaGsFSVXNpGqqRWNRIO/A9ycaI7EZfvPzu+TfnX//rDNX5cO8v+3kdTLSRaNbH
73Y4mHCQpiRsEs9tLYeCCj2HUsAEfzforwFIXzUNjXxAVKEC2SpTtExKNQsokFGwK5jwPOGo
PTnahXsOC6hMWoCvwFSEPNHR3fnr0x9elyJDoFRag4KiuGfRZA2ms1cvRraVLLPhlvYGzc8h
svD8jCcvQBOKoM9fnL4+tbnzljhRtgo0a6U8g2ixzEisRQsmbCeJHoVu8iNbLXiDWjZZvy9+
Ok6zYJ6uFW1vF0IODdlZd5NVuwHPyFnXLiR6AB0hAKK8iZwIWqWbJXjlEsqY1lDnOBZp5jOG
Lq9KNRU4IPDrVJKCsH3WwUAq1+lq0uzO8rblhZDScjJf5xSNNhQ9VPYc1qc2OYkXgPGm3lvM
oeakD9BUlPYYxnBpSf0rCLZw5UClFZicPRWRAs00qYmZd9liwrqXl2VVvRN2XfSIXBQs7gOY
6sL1yMBHQXAlLZzJGBtdWPga0lHRPIAADK19n4gSPgcWLy1bXiK466Pe5PGY+Kniu/5gaARo
W4/YNAhDEfcIrAzdSxBHXrKyIuQAA8XEiy55o9NiIY8agjUttluYZ8onDsTfYIguSn43V4QG
p4QrNJnEsph+YrBVXhOjlS11qleJOUxV+ATFebhb4YQtO26HRbmegB3MteQ91WP9oJXDw6di
VGqoZq9VuwSWr9KKJkesgq8c7SYjWI1Kx5tFBI8YhtNsuajmaoF8i63CPT0wdxNzb1mt4EKj
yH9YAW0a5N3EQy5drdIw+nsv4fDqKWov8G0MEITRIiWvx92nEoixCgXoYsm23OdYLwi1PBZd
ia+qVc6ORzs7OxAcp7hViktyZpgy+iHi1mtQtAb8axb2Mm9dAi2gdd6bwiYCx4b4KOK8T79l
I/5wQ3f/s/u+FLImVjkpxpN+U+5RLCBoyVj9IvoxDia0cS/WlHXdMwaxShxyd68DRVkw5y7+
kYULsRGOuFtodBpiX6PbrG7DdqDIoMBh7PGEjVdAn6BgAg74ImOPcVh+Sjtm6IWRdBi8DPL8
bgUlOPcXOuApgmDHXbtj3OWARjyr6LQI+zrOvJDwXWQF8vzOtt9t5pqqWfsiSLLVWt7arN29
C2ub1cA4tN278xS+DR5Ph0XW7uK/tubw3u0c3iuTsXc3Dpsk+HvQ8V5bsfAWjpstG/7utr8H
tMsvbSmKKlk8p+0kQxZr5LD/Hiq+X+bD/geLYx//5eI4uF0cB2UyDt5DHAfQ8cH7iMPf38bG
4vOdhNFi49CLrpC+95bLtTlBHiRyN4lo1/BlY+r5WZz0ux3T6eJi13Gc4zlPU++Sn0DhMW0S
exOITtK0Xw/d9N+rNOPJs2CMq7usfvLSW1K4eS4qjtvYgppCaKob8iS4ojZjXj85gx/AB/Y8
9q+O21lM0ON4sjohMo4XJ18FDIFax+2FLpvFNwwCC7aKlxD1TrzV07x2fNLbaR63xwqYzYLJ
BNaF9RVP6yfHgaLyuB2csOM0uIw8cJacBZN+vdPZ3T94+c3fXxx19rpnp387eHH0j/1OvX2S
o28r4o7bmjfAKKEEsQ9sqx/7EJJxWmSeXERCr8srTMF2w5+L1vhX7QaYJTB5jtsGYoFWO3dD
ssE0P4DugxRHo7kXRKORY512p6u0xS55Fi8wjKedjBapFAGNoBjqveQSFUGAueKjAS1dqLge
dHvDlpP05GENtgDYX3/X472CuYlDJmT5OPHX4ArXzNeCoCn1kwPQoOIFrsChfNAZNsUGVLPq
+EjosDwY9LI4aCB+pLXh7CSYjNTtOE1o+kenUPxXPyL3gzK+PloC0K35P7uU/9ntYgZQt4P5
f92D/Yf8n0/x4CERSb86lYY8A+mIMi+YJnRbRkx+HL+AtX3wluMhfvl0V1Tisl1C0eTG0yGA
py10ZUYEQOkwXhzpSzRAQK94wm9blI2JAA3slI6y75QOgFvihf3wcoZAz0wSUIMcROmwJfMO
KOdqXd5AeQDVvRTzEDYifd9khKqz81JHH5CikCvKXZIVSj2vyVioUB0bESUy9GQugySipZMa
NsnhnpMhdMKBGJvYfcm3C+w8A+wkXXg+pQGtTTvIoUBf8h82kOJ77uB1ldxVr6iwsxY0lRG/
qU5ze8QWgX/FPCZGSUYlSlnmjUPoGTf9zAOHv+5sOJPWW3D5gAZXNwMHbIYzHMqvUAU/jEPK
jcfTiJKYLrdbzXYbk/NQBUWTApfkaQ3PWXNv+Q1UJTfixOkK36Sl95HY8B7WUQhdBrXWVvZ4
BWF7Spt8wXgJMZ7DpsswXLFfll4YTANYNJFkLVQlLciZJE5ncvKqkhOINZs0YAO6ihwFzb18
pCpFIx+WSHyN4nziMQ9WpglEvwmmwmHKLLQo4JFcclI1IWwAeQ5bdDw0vjy9QuVWkJxqpppV
nQaooYqdY/xlesacNDLeKS3OpFxpfQuTeualMxxOGKTZHeSmskHU1LkP4W3CWSFBORopA5bi
8A05wRBLggqS4uGCEkiKazFFQJVoKrlgUm0Jbg0L7sSGtUglDwyDbM5NcVygPYFOGcNDDpyz
OWtSH9hiGQblMqNUWoQoHRFUtVEwk8t01AcKNLriK5BZc828NGMnHS/m1nVdslB+XmOZPnMJ
a1OyjmbKGnCcymknTYaTvzlDOmfnOJQt87rWFMNeF1AYWU9WRF1OW7rHseHO15rx3WFs61qr
8VkNxJLhy3+8kiGsUqIWW6Z8BHXeMswk6cHkbZ4wPA1gqog2jtqvgDERTJ/tdC0va+Cq9JJa
dWmPwZFrEGFHir5d+F6s2XpkmfmaokFSCDEpT4jEQW9vSEk+yAiD35UY0SSBn8SkoeSa484m
bq66bBJHTibyWli8zMD8vjp31fmPXE6JzoAHQ0WLHpmaagK2WSJCAQ4EgFyoDADXdrc3rIhr
S8Qbx41m8pwIa8tngBuz5e7jcBAzRUTsRjataMu2NmRmaFtWOGbX3IQ/q8bGRYKBAeLDrdFN
nFzpuHowtKbt3fNUpL9WWSolC0vVfTVdy3NTkzVwnEKKy5YYiMQy6B0Oc0y9jagI/rC3Lmem
mkGEImeKcn5ySudommVvaDizS24FmRA+EQtwYZHLW7s1UCTd1oh+0PqIHKXc+pjpde+Y8pT2
EbfG1Tewinwo+dLAuoQoI+2ptTY9qlkrzYRPmWFUWCLkr1I0aXc4l+uaNKvc4Bvc6TQLwes9
nebfJWPmrtk3/3GZNcUkGcVODbClcm9oLOAJYeWdsjJcZTqNJYZ7SYT4nxRGa9NobxEQGbPq
rKk7yA6fYvZPMT9njYN+SNK5ryQdjfshUedTJuq8On/I1fkPytXJxbFGFA/pOp80XUfLA0I3
NEcbEnYOb5MMuZDrCvkclhlz+MHyOcR/uXyObpfPUZmMo/eQzxF0fPRe8jncxsbi8x6Sdxgt
y/r1H758/pfd3br42aNbW/r1n15+/eqb+sfK72HUS28GUUi/PsuyRa/dvrm5cUV1e0P+jyL6
q9ffvqw/JAM9JAM9JAP9gY/M/8HJ/Afl/7C9o4Ndyv+BWXmwvy/yf/Z2H/J/PsWT3/+jdMBO
BELTHgbjFlsmofokF92CZU5VfpBMJtqcIPSIyX14Iy+BtUV6AHybwyod049GVgoD2BxoSBcR
MU/0g3kS+qhU7PB5uGeexssECvQSmfbPPfbPH17iiQK+UuPVxKltPN1IgkseGcwMNG1Q81fn
0pin/ozTWQXPQgx+8Io0OkAHdOBDwa7+suTJClxA4l3OxW6HYp6rviBOYe+sU8JHLI7CFUuX
C+Rpyr56/fp72gGAniDGmAYhT9FTz1tkgnFfYB5TH+YFALhEJSKrTnimGN+R+UXCzd0Puxn2
5YitVBroZlxCS9xl9MsyzjihHuz2hs31+FHBCuhmgE3qnYsjb4ie7S3gmbtYZgkHHoMbcf52
9toRIqiAmoFbgSjWOfXx/BSdBV4QgEmPzt2hFyG41xI8jyYC3nzTnoaZJH48wfSMJJmnl3iL
FYHh0NBt4U03q0IbTAQRzZAzu51Oea+cOE0IUC7FPiu31+3XlJ97ER7AejC4NMUJAdFpOryI
GGuQkolp+zhtUsBKGi9GsDHLxOrin5HUW5h22IEUNvaDSMVP4ePlhVzfnYmm0I1xsmQh/fo7
SRoMPcMJrEhHlPC9ImYQ9yFoO9GAmWvWuYihr9vis9Dw1sIHn/LlGHLhM12Imxx05TSIvDBc
FWeI64dxqiQmT81wYYI2LYw9TK1gN3wsEimiK+Ad2DFhxrSBg4VGjFlUnj8TG4ICTwoo0ARQ
wpBpEWs1MuojjNJhaA3HCNRv9tw4uWx3P//887a+5xEB8VCBdr+oacL9JQ5TXJPx6rwlepc2
EI0PpQJhtcoGwqAs77c1GBrRr+C5aQbfxEFE2F2hbOpsIMdgvPYNM4S61+eYaD5tTgupE9QA
ajdd45UDUfw9FzGwaektcJshAG/yI+/GldxWq05iJkhWIZUtjAu8TDJk0lcVHZsFYuoVZTsY
+73wpbYmMpa+Hy3nHxT/7XWPuvL+x73u4ZGM/w4e7n/9JI8R/0kdqNVOReSyM00C8G8Qh7xQ
dzV+J+5q/BbvaqRIjG5qRNtz9Wa89K843eO4DHmrRvlvnrz2UW4xoQHjCSyJuSuumeRvFxit
wUqXhbBiXuKexhK3f8DOEQ0syDANIoqjHTRpEy+BUG6JyUrxdTDhaW0ep5nK45pyWuMDOOcT
FfNNOIR0iZcFeLICy/IUbNbcy8wua2FwxdlP5y9fU+5p7Syn6nwVZd5bYwfmtZEX5ccRhgas
QUlkXObEyZMqY62+5ba3tsCLbQ3wcFhYpC36exqGRPmxjlRPmE4plaMq9Gah1c0QPZXZp0Jb
mmaR41XRzzt1A6v0ck9QaHS29QSCi2yJLpA2bnwvQpHS7VTy6s80DMCZYYIdyQEi5bl3pe6b
3GKWVqBk6kgfvhNfx3z1ep6yloGp5XW2iAF4HHLVHj0j99LV/xV4cCxiMIPFnsgbUHeROinT
iWKibVs0KSAiI634F2R4DmS2KQi4Urg3Myi65hS7r2D8KzYmR2qSY+JsVwmWsGO8aCCexstI
JmZWdNyyOyYs79J5G3srUhBE09igoIAIfnjqJjSIpVcLXE6oPFmrF8QzeIYQxTny4bifVCO+
jXbiFhVVYueYtZyy+iWPQJnDOqmegzxy0GzVTzvzL36qrxlkP2/2Z/YMG/Vlg8J8WkbaQLWQ
lkTkqEZoI2PcM/cSEjolt6C/F8kTFWYGzOZk6Wd3GrBQLBlXC1WHqIvhdYCKB8wJJo5Ifo5Z
vdM5qtfUMGVPA0TyTGy6HlnjUgtVa7ch4WJHQWz06U1MWAlmZCQ4WfCWMOShl9EuBF0ZKtop
L6Sv8L16c86h6dWbF4FPn39LvMVs/XtNd7not/CShhbu2gshu+Y1orKhWwVZSLRRbC+/gYES
sIvpC0V82k+a1zZrx5t+rHcSJLHm5X4Nwf7GgA+bSgaNgX5tYdhkdoD9TvexlvgxqO72V8LV
M8p+ZxvXsvfwxsQjDLxj0FuIQ1g6o7ukPQyHxKobjYQMYMCbeZeD3k53WGcpxRrGHhBjJ2yS
eDdjz79iPXCb8U0KM/UmItH6eBMf+kgIc/Y6jwvtvMm1B+guYeSTgEKlCkLwIACb75skpRYm
6/FYhJ5bunGtU9amk/EugZk2e+vlkvdys2TVtZIgDP39TOXvSG2ltapQufx9Q3xA/8/srs4g
zHG9CdLGChVdUZFrwgb1subKLRMlR2hNlXeeJqdq1Aizdshy2KflKXaaD71U9yPgPkUOIFqR
+1eCAaw/Vr+s8OM6tNVbWYKY7nBAHVGKvObbHXbCPsxUqEebARHxazOQwWyIqk0p7rgVL2yq
fjVBWh9aizUkzqZr9OTqQE6PxtI4TR2scfyZTVw53bvQT96mopumdoDUav3bieXeCAchl/jE
gOQP2j0X7yrQFroxsIvy3CE0I7EzZmGTZei8/Xi+wO1RRYlNiCylHDn6VpN7JV8uIzp1TdF4
Sxxg8xQ82kjMNF7IVYzoDks9WJ3MxxM8U2BifhKV6t5kXDLr1Q6sfEfP6f+OABEOXkOKZ8n1
2ujsbQaWj6ufLzl2ij9Od/7l7fwbil4ElwE633pn53P4+Qp0WLZX0NtMAuFB8s6o59axyO4N
ClRXtdE5ohuwi+QiusiGEimVUUuNtj4UBbpPLHoC8D+SBeozZ/BzfbjtAN3icLzxtOe67eb2
b277tzb8ByHe6HvBxx/QCCeYPC+EVP8ZgBv1bWy6XW8+bbhPnjbh42nvGZZil1DcfPqnepNw
zEoIcrDfBk+GTWh5cTFouNtPmxcXQ8LU/u1PTWyOK/tic6fhyOYOQuofzSfNp8+grqCE+lFg
0AjanG87T/rys44YiTNQDSPCHdWrN2gWcosFBovLkoaoQ8NPpgNnsVes+/X3Zg1fsJPl+asD
8v8/QLslDfqrzqfUdJBpC7BKhh8i/690MyzufUruwHTyEjAD8vQKmllusXhFsepFftlWAblo
P4DmvbmbcDrhh/+GLeb8f3tf3t22leT7d/Qp0MxJSDoUKcl2kpElJbKtJOpxHD9b6aRH0fEB
SZCCBRIMQVpS3H6f/dWvqu6CjaSd5fXMmOfEEUGgcJe6tS//gqn5s2aJ9Uy6Y1JkZq3dCjGP
xZZDUQVa7kYC1GuWaXR5VE1Z99YJMypkzBPZ5OUmfgIfAruqdsqZnuxfC8fgsnzL7v5FNWOq
eGdwJ6h9n5+FsBpEs26d7laJwyUQ1ejbPPYGFpqBedcUGZs1z38S2F3Yo11wQ9qIEZfnWTGc
HV4n95Z3QZeKN7S7V9EtyUbt/HrKsXAourLxxybYXovhrhix0TEYiOkgomymJUxwlISsrxLS
Zja1nyadGIctXITeAeaobDGZHpZwmZ4DvFLqH/CawDTuNFasYLP5LjvarED4nUqEp/fzeMvA
4CBmeJsftE+51HKeDL6DUOmJDrUQVI6TLVm1Ai2u+uzhHYuVhHnNFZi1cjVW7dOK4evKCOXz
m8w032dpqneWV152t5bW2M97D2/N2ufHucH610/Z1xbttZVrQFSTDvbgEsUsWlF7LW1vekUl
LDDD2msfrxoXrcpmKyJLXFiW5lZ5Ff57UZHKU7TZaNYh3brxVckRfBjKgEtbWn3UVxC9WtSu
JHve5m44mxqip5KPQYhaAWjNoufiOBo/TtkhCN0yGgY/Pzs++w4vmgRvxNrRu3POr7t4+7fG
u8zh/YSueqpbBtwC5Np9V+jt1URw5U7VHOcc0z+qbOdQQOtaAriSA21MQEt0wJS7odtaTdGE
g5NOcLxPMpCAIQlRhZ3yu+uepvWtA6ASU0HLF5CsyVhVU00aOUNAXonxYvfUqq5ypR/RpdqH
qp9cdSBMkkLkHOchwjDir6paPXyrBZ+4vLS3WxI1TKRdr1eRdO2ZT3KGj4qXbWYWq4RWHGSh
G4fumzPrMJDCcuYHU3jHCmTMlRWQf0uQ3Y9VWJWLHounhF3x0Jpy9rdb2WW6TIbapQlW5wCe
L0Xxcq6keok4dN4vk17nCPpDnCvv4p3Ivf39KrXP/u08W3/schZf7/uq3gDoPhwHb3P3/0E+
KWNazsH/c5xPlT4Onel6NwdCIIXHGdiVXoJZhYWmrnhTJdE5ORf4RW/NGo+Jv2Oa9J1f07/c
OYLGRcfO+1H1oD78ulpMf72q4tMKN4j1gRSrW23q/MjhpOOrlRnLgZbIK8XF8h+VKcHlUt6F
pMDaJOH12bizCnC1Wbny8zqQFRDLAPl6aM2ojGya/jST8gJAIiMuuU3AIyHJUhDklBZGOSjI
0nJQzMktA2LXqgLKSomdXh5lB3+ZKA/+4pfcyyVSotBKIZXxmUvCLKRm5+8LXPZ65d27xdvh
uE5fR3OEVZWTuRkF2sVnAhKL1zy05y2F0lCX9plHbZtZuVfKrDQNE216pUTpmOzKbBEultlh
Y4oAwqQRoKbQYQMB1Du7O7uN4Oaw8UUjuD1s3NO0RpN5OZgeNp8c//j85OlZ8OK//vni7OR5
M0iXh42H82VG5zJrBOlh46fTFyeNYEBX6X+zK0TM7N69f+/zL3fu3bvP0HcZ+p6FTvDDQDIw
J2GcLNL9RJIebYLn3jVJQZziyc/vCICdioTP8MglfTJkuMCmh43jH7/98cXZ6dPgycnjHx81
Nh32/S937t/b4bfu6LC/XDHucDleZot42k2i4XJQHLas6h4t67d0V/AE98iIJa3UH+/3x88f
BcePf3j6Yt1YAVmGtusv6ffhfBAcDzksMbwKOd7vYZpluZcRxi+CCZGFbUERlyHSCKLpIB2i
PE/ji368yPwX7d31XnSGOpgohRlgEQKNl7Urc0mA54j4bgSSzyuRtHlEsHF5WA4Tg3HQw/BM
IqtX59+1BBWU3xWcX4Puy/mYMKWM7iaoqwozLd43Coj2/pi9QdLyOhz+9v2Q+D3Q9o9E1PdB
TdnJbBYNYlCqDTF1Y9wEHS2g5e9DRaX2P0O/Ds4I+i/TpqcAsE+5efDVzSQJiA8gMphwprvT
+OroAAM8alpGWpV9ve2rKavzr7Pd0qUmDdy9wx9u5YB+mcqQaAaAxzABBYndRTiSc+KyuwW4
6KgZJ+zokjUL1cHoY346/7pwUC9W3EyI0gurfncBstW/mpdhO7/OY9eaJ3Age+HXaw7zqkH7
IFa/rCd3nr/X29yQW1/nKeGnwdfxsB38K6icfRGSJ4pwgVQ1OYj5lHfWU8MFkY6aNmrG/oRC
jvnwHPtTlSyLD+kYN91aw1ECgGoP84RMzl7TAB9za1mDkIc1Dqnyafmr0Pu7ToT25h5oxLon
ruYrb0ytuJqg6oeekvevf8A//0+qfLAnlQ/er/SB5v5kyeJPS/9ak/91f+fe519I/48v7t7d
u/c58r929j7kf/0lHy//S3BAErPiYRQG/egyRkNO/2dIBZx0gQOA/J7rOElglEK6OvJKwoTO
2W0SZZdRtMi2SNpBxBJ3m3ZZBpp3w4W3mT5sbT0Sa76nku10g4dLLjqOezk9Cz11XSFP6J64
0iV5JeQ8MbVIz6+WsyAdmTOUImfCT/PnPFou7tZBdZvgAJPbZ207l0kzRzYUHb3lwBU251QM
KwlpmkPWe4O/vsY73jYQD60iEP+z2w2eS5iIzaQQiWoahP0sTTiTQmhrU1wN/Vv6fzzPvEkc
ZCTJREcdZPUMwiRxA+1KcpP8jlVAFcGhqZTIm2GA8KZI+lKWyj7aEcAnFUdS4Z1UDzjlCArX
IUinyNhTGOb/x0mW2vSLwsTociIpd/l5tRrdbq/RpvkZKGaaFfO7voymnKlk8rvuFGdqgMiE
ac81m4XnrJMNaSPpgIc2K9AUTBCv5iI1QPo10+bf97rBt5yso2WEFxFJvfgyMjGj+fW52w2+
wdmZpQtaFRIUgEmjBA2qp2PSAfTxIw4RHZIoMYwQlDe4tJANOD5fNDYcsTgaElxIuSYjvGEk
H9QrIo2BfRqwlSThzO8vYKSQBu47R0IOqW4XDTvoly/NX3dM1h48I1yPEmWmaYNCN2lGIN5Q
r1cH//8rGt9yzueN2FQ8iX+THAVkAWISg8s4wl4BzBxoDlcalmSQTiaplX5EEXCHD5l+6XJ8
WUj+SgnPkFtYjLY1YOZRtkzo6SySTCcB6xIPu6Lo8BLHUyRUZBYJ/OYLQgmg59wIbm0LdesG
J7TUtwsik+NmpqlZljxpEpPDMEac9Coi2R4ZE3bhni+n+zlq8a3WM7YLzhMEMJ6JfYOk7PoZ
/x7V2VPyKWsmrdHRGx17+Sbat8BfGhR+qyUFiB68tlM3aJths7hAKc/JVWT1hpOkKddWMZB1
inQWjsEfQOOHWtP32GMSTLhNZi7bEbnKgVZn0WQTe85EcgdP4eIDoXdksn1XkRjmvlErY6m0
svmU+cDVLNn6ZZk2d6O/ZaTXyecjS254Kp6WOZHfw2nFLnnmXAVjsm91CPYGO+qP6BSChU4i
Wo6hG8hJ4NLzoJkEV68YR7CVtsvT1Svsv3P4HdN/LomPM3a8x8RxYp7J5ecNXjBOn/4Awt/J
dwnbNPeuOvWuI4U3OrJaXry0rJ58tSHTcpG/2VBpucbfbKS0uWq+r0nws0ehHKN+/jLc/u14
+78uzB872//Rvbjzyy+tLv3T5uB05iil8PI33TtfvUUIuNevyrhTvEsaBioXWn61Wf47sC0P
TMQpX+7AsAAl4JdfTHGaNbc35O5GM1cxIt9fXOMrcK0V5Uvfcv+wKZ1jT5/RC2hs3pXq5JwA
VrrotzHPKzlR13UvLzQv56HM5stp9BK2K+ME9ofzUnqwVFQ3OXvee37yaBvinacNe01I8FyV
v5HHXpWNJr/kIvBzo5dK7f5PbkFc6Xb7+wbt0by5R6z/lpdvk6ZuDEu2VJfQNGvL3bJ+QMVB
qZe/7LzMvS3XoG2r8paodIu/+ejypvd1bK+af08sqO+LV4UXlXeXl2pjTGEQ3EbPrlIFypR6
L7JrPctFe1a1ztu082L5jaWni7e/b5+x/LdAA3vYKckw3zAPeGv6zEXEcV4KbN7FFcAqmjx6
s3iXRo8VmZHVbvr17R0LoN7r7Lu+jvTvJm0czf5sTBrccS0hYv2oNuzqqNOuQs8SzE0bPNbv
SBlcuddj9dOVSx7k+j6unn9Unn8u9NEkLBZCID+2WjmKrhj0J/ld+pg98/MXOyIparKjUefe
PXdMZR+TPGbTYd85fUyfLCeO5Z6z1vGu2MhNLtBO+3wX2fQlZLnJZ4luEvBbeKSAKgwTZGmj
oOTIL44m0cONBkeG35Q1jXdKScrlEhXWz+v4Zj4a6icEsOW3vTT9RjVh9dBFVvI/wDsj0wq6
JqTJJ51AFBPgqx+TNx1KfF8z4IhsvtfHAy9xtxAwC2xycrifkyy3l/PAVoa2F06KQ5TKGC03
mTU5FTrBz+B4MJ1d/aP7SdZui+uiAnuqd3KjdxDcWrDVIItHpXYpdQnqsBof0T6xrbX4bDSY
m4JPaf28PeAQLNNRMWPHDrAKb1asHhsKPuGiSMQLrEOJsbdwyNfE7/MILNxcE+A1U6L347X8
VnpW1fjNF2clUqx9ebP+le+C9I6eVaP6+8/KQtZBI+3AxABUg/DzqarRZc3M/pijvCYt5V2O
cCEr1FBqwt6XMHMViTUe+V9MsP98YpdPXPIdGcahf0B7s429OTIGc91DF2vZqHor7lxNxd7p
3RMEG2kRNMy6/E67vKtkmgqknX8C+hEJuhraVUMfN6O3Sma3Kp48zJHWZvXYLKFw93JM7CdD
b5BFhGMsqNCJ1kF2ZxYsTk+tYXAOaEUVK9t+tWAqq3/r1FoMeQqf7eYOaiUWqQ1hU9K64bwM
2PZGG3C+v713YXZhXr0LawpGNyZxxn4Di+bONp1D9EYNqTRXLcmMRx+I5b8fsYxH/99opX31
n0cqaaiW2FU8sQGN+0Cofi+h+rMJjXojdLoc9KI28Ho/o5tC3gq82ppWKpeXCak4H1zYlw38
l7k1WFUvb8XQq6G50Vcb8M2nYmHYAli/LrWmYBvFW2/2XWEkjbcU6cxqq0W0vMRuaoDzWTNn
lqtUBCrsouttoqWdfKfdXLuj5V31170eaPUMawyunqZZbf/MH7ziyuYsnhZjlFcbVBQX/jvw
bRsc8Tt5uVJdAy6/vDI6w7CBr1n3pYucGCzOgXgXJXJrbllFmypha18cgPYqA3yQN4qfDZg+
r++2C7X668WO4gj+POnjXVWuVUw3IBCOcn8y9GmIQM5jbmetuF8xYP8V616wRuzHx4r+awmJ
xIqtpxl1xML4jOUobSRt8J1FYcNihUOC0onWsdK5v1MI5peGL6aJVjFmUBbdVcv0aIydtvlc
R/H4ErRld8UGVp5chl3haKk+tPm18SIghymvqYQQI/Kr5mAy7HKBjfqparJDgTDlkyQqimt4
vXQq1/Ud1pZvu9HiITd5Z4zJf7LrI618dF/HCHRORwGnmYziQby4NY0aLN8zlAYNM/IiR2qi
+PzwvWhxHUVTFyzXMSHA5SUoXdDaPCzhfMQRxvPIjg1Aputh8MNa3OcjdiJu+MxHH8WZtjgj
8qk184maZ2sAhMEVQnDNKnoxuJzbpks0FMcokt2ScUpU6LKCA65cEDOn910YgaVQBOSaiSWL
SxsNKzGuJlpSlonGYJYJsXESFdwvKqSDZDnkcEt+ioPkO9xcRXquMBhEu+NYXkrE/m2edCBu
VoONu6uHfAdnPBI4DYm8Roh1w2W7cVw9D4RG3I8S6f1agApC4dePoq2zbWuK769Yabtvutgd
KAf697rni+f1GjURdh4E179az7j5lAtn1REuBkL/fOZRX/Opr03FT+K19E/xSUvOCeodAX39
a57yVBA4HSC2na4sbpk2xOiHYuHteMGv1vXCWp+hgDXaHnrLfSxsl7U0NZE4/laG6xXzWhmf
63uIVlhPKuG+s8lkrblklalkhZFkpYHk3YdeYRW5iQbWgmEBs+ydh57/saSelOUx8xE5ipFB
nuIMDRWkPKwYzWyECt8h510Cm5l4Ef5xno+JaJZ+I/TX/FafU2rV5OebJq5dw9oLuR/WzsCF
tG3sctf8YcqAmFpIWZehnvP04+GFmhgiLgsjARPt0lQlW2XlXHm3dHAEfygT6nBi4FQmNpp1
+a6WjoH96joONNFrNj0NS8ZgbN1Cx6vkXZ6Yuc8FqdeKxroTNqpRQbsLnsqtV/ifl9bT3CDs
FjL5cjZPk3QccDVzvqBHYbiB7F0I79RTIlWRDJiqKJi8SmD+sE0KGYBMsiLY080i6tY4ssuj
Mc8QLUQ70SqwnkaPQ1S01VQ8YZeuLsN8pV987Utte6/StD62gWC+oOkiJAW2NX/g8AXlEl45
+0j+d+aMdiuqTS6brS0+XqghMYVFXZxhTVifF8KMp/PPLLo+RpbGUqLgC+VlLKBMgxYpbFKa
vEZZyS/iuT4OirOo2M2cwcm/t1ujKBd2NdN8IqMvcp5PpYJThT3lMUjUz51Gp3x/odAb54Ov
gdNbDSc3F2scFtooBKpwAFxi0WEQczfOLpePa9fcZre67B656ii6upvzO1dfA843FRSeMc1L
ryoeq8OQK8ENf1MlzhlVONTSdCTZl03zpG9y0GzQ8pnOLa8v5NpbBaoV1FmGj6ZDvW7zeP0s
JAvEaFyVb+B5Op1sBaUoLGC5LhYPGEVo6UyoRoBatdu7F8Wa/tX2+NxIzgmSbUW0eEdjfAUo
sMtFWcHw95JrS15GuSxRtwESuouiX2PkL440kBdTZDXegyQaVk4NbXiQCNVN80QQgYavKza4
x2LlTtFmcNPALBrirKqCVnmr1y8hvxRafr+CWxUWHovR0kKwi2M6gQ/36f9d1US26bv+3S5i
khUwdqvRe8sf7LEYnArpwpx6ePUK2XpYIBHdVDDi30bGcJEDppUZk1uVYFgKrEo59LZqrFTZ
T+7E5pqDZPMbnbHMPs3PoFbw7z41FtL5QlhK3qy1rlRIbk4+HnxsbVAmfbvCGMU5h8XEUt+K
9jFPqR6fbe5pAZMJRvaeKJkYVpVHy9w9y+DQW7ikFJ5eqES02wmkfkkFwffBxBcXBcC4sh0s
q7hLHBwo1GougjEuEVGZB1eFiSjnvIimnj2J06XZEhOPPSXLPvPSmNHfUbizsriPdhXCmbhH
o7xA5NvE9Rb7m1STcXeUpwm7s61OILRM6G6325X2wcbzaQ1mwShE3SBabccVOZl6pLWuXC45
+iAzNi/CK8LLJKV9n7MBEGnRMz/nz+Syh35jUyTY03eAyB2ntSuO1NYKzK4+7HaL8FR52Tfc
ndIO1YmhVRvmoR3KBMdhEv8WBfk06mCcpP0wyWWtc2NS72G2E7wO5zH6LkjVCtGui7JsSUnx
gExhZbR8oCwcOUuLr5nVybg+7QelFKmz0gXvjaH5f73L0ols62NUeUCXakLGH4T5QGkPWJff
+tiLDa7X+xXQs2WfMCI4Nc0at2yK29ZTtP96s2HC5Jum25/mvm9PsLW0nOC57xxx7ldeaPyU
d/m7Gwj98LMJeHY/xCNcj0fuCqM3LrpWt0Hw9q1ZmBfO2MFp5RsUtFYvqcN2+2CxoPXTF+3C
TaYqrtaT9Yqdj6pwJa9blpXWeonCGpUKAOVGvUUsSW3FAFfTt7LuqV/X3F7MOPOreeAV7JOK
juFwiM7ch41NyjGaUoyoeGgfjObxFT/TjxpHJ/SFJho8SgdXpojhASqUaMXA2dF3cYCbOge9
mb12Ka4BrlOySIfh7Vfu1/7R/nb7oNc3NweX8XAYTQ8bt1HWODqIzSgPevFRcJDF4ym3jNdi
lnv37j/5z78//mLn7u7J8bf3H3/xf+7tNHpHDnzPDM4rZtjUHDmpGdg4GBAbiZhuHf0yFXmo
rjDhxmUJG6ge6AH2SifSIdXd8ugno+VhY+XJbshd+/PR4Mu9PVftTq7eSHXHn5+cPv1PLgx5
kCtAcciWvt4RD8LKp8bK38NSmwaZ9BXFBWUjLugXyb01P2aLORd3e2Pr771ttzE/Aq4XWlmb
NnqfsRC1ki3YRVoC97ViGo2Nt4keoP2LR0eiIvNVOhaEbZ5MXZoAULdx9A39u087ym/oHTWC
T5PFg/r3fTqmX1fDxYDP0hzMenhrYEnFH9mtPvGl3GbJpu7nK7tG26iI2Ahw977Ur+piq3Rl
Dnr5p9YMoDkzmyqn66KpS+7w8MicDaEqvmHGp9BZUqpk3fgxM+qAE8scgH1zsjQSsNa27xlu
hsvJjAPS2t65wfeidV9GQL/74/llDIlPODL7KTSLFv3N9/1zXrIXMYEuS8MCd9EtxrB77+Ti
RKiTkk3jWeeXKb3Gow4I7crVZFfu08xToOZn2WfNAvlodlxRGlN1UN9ZVYuH54tmG2ae3vQ8
zoO6idliSHRCWRn/W1Wssn7wXIq9NLa6MpL5GuonWPnNy6ejobOAzxd0PzZgNqjlfmxhGDSZ
blKAvbGmAPuRq3Fla6uXq7BvdACqlr96+9zRqFtuOzrvJGtZMm+A4o70hvjfqFQny0l/Wq3N
f8ePFHechaTHbmfLPsespdPuzeVikvxR79jd2fmivv7nvfv37t1H/c/P7+998fnuzh79fG/n
3t0P9T//ik+lh3Hr4G+Pf3h09s9nJwHwIHj248Mnp4+Cxnav99PdR73e47PHwc/fnRFnovuD
M/CLmC1ESa938lR4RLXwyXi1CwD65/bCe7o7XAxJftk64LfWCrGoQS+Pi7CDvhAqoJN0GnLJ
lcOG2AJJykZZxCnKMB42eMxn8fBWrNgOZiPo+RDwzu3o12X8+rDxSB7ePiMZSqZmwXExdYzj
QTC4BKFeHMZZuv3ll/f/Y3u3AFIG9e3J05Pnx2c/PC9A+j79LU6SsHevu/NFcE5yctD6eXf3
QXD6IHgST5c3wV53p3v38yD+/MvP28H502jB0R4X/BJ5yyJeJCyz8f+3RB0IvKrvg4xLvGez
cNod3AvejOjl21n8W7Qf0An9hIjlrDu4a67j6f0gXoRJPKCfhvHr7mAveANI23RtPN0PBgjC
mtOPl7vdwW4O4N7OF588CPiC2Or3g36aDN9uqXgokqJsXEHpozeJneOwMfA6Clzu2qu7jSMm
WwRg1yhm9JRZiGoARfW0Pzf7Q4+QXhjTbAZxFETT4AX9H8a9E9qedBL/SuL5dnBM+HmbRcGn
4WT2IDhZLIcRlMginB+nMR8mEpOfxP05fK7Bw/nyJiLhK2Ot01jASJMl1IKxNZzCrXEWDS6n
8SBMgscRCo2z5JAD/1M6T4bXKBV6Ss/NuQBotI3KmRHCeFroGtBmZdW94o6nvHpr1E9I5f51
mTqfAqnOx31ifaSYQn8uzotlUWYT8LJnbLM0NXhn4eAKWkafTlzIBtYJ6QVJdO0C+BAjQ1LC
ySSUGq7mkdk8fR2jlFa2nLEUAGYdGuGaRMAO3qBAnroKviEi01B4mJ5kl1bEejzbUX+mE0P8
Xop9wokDU2EXa69w3PJYPLnbOHqGxgkaRETjxNBeIeUk7eN/qGUL2Tg1QzZ7QmsetFhanie3
wfPTpydnbWNnHiXRDXs+FmmaiGsOhVC5Fx0UKRqcgrEyN5s00yVqlhLeSelYuJy4SWaIkqPH
GeHU6yhJZ55VOTbmPW3bAMltG/VTlxNoLK/Sfic4JRgDBAvDVq2FizEtt8BJOB0vaVuygAjn
pbFfRzeziEg03TlGAUdGUQIz917a9U0kHmqtOpB3NsTKR/NoGC+yElKepWYdsF0dgzPXoSAm
1C1eUNrSwWVKx1tK505MyBWChsKMq8Aeh3N68if2cJOAffXqIVeyDCa0RjAu02umiyWh8C3h
+ICLVtvSuhyULCIszjGpSai7KoWQUTkXY7lO51cYx7fzaEyabxRPO8Hf6QQoiL/T3kd06Rua
KSxiT5bToWAuB+UaXTOiP7GL117jQluodQhnTZYGk+Xgkj0ajIJ0YRRds5La/f3bc7l3dDpd
MOIAqWjVvQ05AF+xcO41jtA7hFGUSOo4nhK1xB3EoAgMP4FDZiK7c3fKSeHo4ll6TYhGgE8e
nwY9sWJPNbJvTEfoOrztBqdYCTgViXYTLSHeJOWvzTnreMdLQl8QESF1KBNSH6Jgupz0UbKY
NJgJ3DCIgjYFf9Ua4pyWwCDrA5KheCeByP5VxMPliyQXTMfQBh+9+Ada6IRsx6cjRfiSBYyP
8yt1WixnAdirUEiuysq4xpbXBp2EE5yBx6efTvvZ7AF9/z7EhRnR5EZXiRpR/G8iIbSGCH1/
+v0JLaxQjEiq4JnV5b2UkGsMJVV6PSWc4cYv1gXNQMCVuvJ2FD42R4IJsFFYMy31zHDMBpDu
Ow5R/FYDF4bRiH0/fPh+QPTfco4SsFJAmXBimsKVGy8zXd0MTI9DIIj77rPlF9W8OaoFbADT
hVkY5FnKN9McM5rDOB4I4tPRXyynNJaEZD88PwlvkXpCJ0TXSb3vYGiWDnYdN6WVxbZYTBKv
37ZsoWDvtn0QcxhGdBjmUgXdEHpUSEY8PZCAyTBY0756v+imcI7NgWE/UMThIxxmCxz8V0sN
z2D/ZJNDBLiI5IPtNp8Cy02ZKCkvEz6Y3U4X4Q3v/ihWqoHGMWKf2CfxcXEE86YxVKkxc4GC
7PqTmCjdDyp2yo9sSKh4iO0n9jq/Hz/xs/K+GweyG/xTao8H2SUs/IUQpNyDGvvlPUsMQWKg
xWDlr7/dF61tLtajG5K9vaMiVLYbfEcrOo9GJE0gKqPDhCCcexX1B/N4tjC814LG1B4FCQl9
IdfRP352yrxHxDPi49vEPodC64iS/y2HWscLGfQkZauPyh+ymXqKgG5s5np8+s3xozPdyhul
HRobVJAa6Hi9iCEm0swyLAOxNTqMwThNh7Dkh9tm+IRfglrEFBeMm67A9n7wM7FguCxEnKKX
BC0eLuBsk1zP9I475Zqq/KkX0i1iYzZIZ1E7f6JOQghNmC2OHdgU8297PEgFpAXtzoTI4ycd
u6uyq2w/usEiZ5GpYU5itVilQua+OJ60oIsU+pAwaAImUw6HryFKE1CtXI9K8d8/wdIg2imF
xwPPW5LPA9FuArHgUjofQlxKNWCIG0kK2w2ORYwI54obnORGWNEHp2Pz3lyLmlujn4iceC5K
Mh85hb9GUqfbtR7QXgynSrx5YG7cxLcWRpZblEmY8lxANMjAcE4tLqDbB9Y7v3envLD0M4/v
THSB7Ren31rZUhE21JKRXJ9/2cfx6SvW6okCr8FIEZVAOw0yeWWMzzmhqEn0cDwhRsY8Upae
eSRIw6+ELYQqjtCQ0k1iH71zIpv6MErG8XIi7UKQ20IgdNFgBFrIEWcsZP2y64k3ynTdApAU
I0roShEoiRekjZudL4lAP8xNGCcdn5A40+TW7PQYXiGSS5dGDCTOlpJAQvKp4BW0oeTWEuET
WM1l7q2/Q1EKHhHOXbWFFM9uo9zvgyuVOvV3BpNbwJYTVtuWbNsa73pPTnBuC6dVTVH0Oxg4
wPmZ6Rh5WriNoL55nzeMaVb1EzskC5c09auCtWi3GuUMpX000tLl3aPjQDrYzaFt0s7clfuO
RXK/jKxWGGf2ALOKJY9xR9N+Op+ToDoUUQ0LxzB48YifMDOCWBqECXNmg23QEIG9pCibxBY9
Q4beiVw4JeHlMh2mNyyYElZxaw5ikKSGjZZQg6fsaxhDA+Fzfg0JGjglQZr9aISkkuBFShcv
hQsQqqXXU2P64xYshUPkCZW6qbotupEix0WZMAuTKISxLC6Rv6rEyqCFCTzlfkAi9xOhjwc0
qTjhJiCsmxi5hZV/r9GEHHaA9OmQr84czOb0r0SA6ENa07Qi3uPOnavrUjAFRwu9fNldziC2
tugO97wWGeSgDu85znCBW44B5Ku/2+ogEpyFzM5C+CtiDVHr3pYwdJBYtPOHT8wgsrFI3hBI
oGi9ZI5zYuI0TTWStlas8X9tmSAXuknSIf2MHHqJ+2FrLXjaiXlUpfnzGcpY3oKl1ZPsF6Kj
Mr7HmVOd9m3gK12FqKsaWp+40pVhibbxjQrtg3g+YN5q208K7wU22foEwuVNaUki8bTWc5Zm
0PeF9IRn3AuqC7MaQ88MDpoRSdwVg5lHRm0amrhsORcuHN55rCcR9EoleOLNWoRjj4TpQvtX
eGX9C/AbFmmkIFqe8CnKGGn4MroNGrwYDYxqQljzWkPbwuUiBfcfsP7W4sMYZ8ZIR/SF1eFX
4BLor/VVO0cJ7IRVUxFqmMDKmzBpiEfwCHqExY/qlW5/XAGhSG0IX7AbpvE8aalLyDpF/mUk
B6PpMSFZJpZwQCwhqguEw24xSAmCc2q64ATvGLjpBgRFHNX19GSYTh4x52e6JZ3Ed9re/Rob
xjdzOzT6ceXxYUMCmEnTkN6O0V+CKGaRAM2PJCQ9YEFLWw6FmbxBKC/pM4h37ehhyZ0WCZwc
RmGirbsUpe1R5C2W1cLRdeguVgoxoQEFhB3uE+e55QjX6yC8Dm89MfTa2BZEzLoOaceWM5VI
CcmC0xGm10Qg51LDu4bptAk+KM2ehlKvQFAYAnAEoToKrzLPdMA8dcyCHAvhNsI2FGrEo+fB
MxxpE6CkwdRgCINcT6Uc8utbpiKTuVDgfREn8Qp9MGYTrzks9IOKq1ONZL8F/WLcwmBZ1s73
t/LVANJZbg0qIUeqY6MyMBxYdfc3QGKalkW6A4t6JWyuDDI0XMI+wuGtgs/RIX7Kp2tW5iUq
oEIN3RLjNaW/VpZ202IwFq4bmabuaDKpkhN/eJu8kag8svPlcXc/ggHoZs7v50n7c8Yz+VHi
SlUHkdJ0Cu85l3dw7lB0sZpQsF3qOnV1JwSdmYtxIstcFCTeMN2qCplZR+nWy+ckgKH8Ic/1
CHc1vZCB8Abb9G0WBelUoMki87XMJqJx38YcVzHZif3oMnwdp0vWjSBVh/3UeV+U6Id09Oam
1ZsxwCkD8BvE4btqVLYBJMvBpqSFMiXDsU241Wz1cfIsUKYl+K1ExXQ5thJmqa0t36BmEugO
G5b4yl14A27s49sZnLf71jLmHmKvbqOHe/Bjry9vMA9reTR7+8zBNrdIlF/pcn9evtZzpj6R
NrQ9IH6Djp4bt8TP2zePCAFQ6yPLz65Xeq7nmxpXI7h2DyTFZggE1FIhMclVtRukR5djy7Yk
3mymMWaj9pYN1HNh+oUQPROe57dlNteMrL560OwqjHGSSo3qjLJnERVD6Kjw497nsjf5IIXj
MVgnewic/gqEtY5Rp79aqzob+00+i5qC4pEIEnzZMCNOP1TzkvYsXGbiNDOWc5/LqvoLHi+s
GRaoZaZniB9/6g7cP02nWPR7xJC2oYimM3jWdTE8tV/1y2799pabyMnDJgHAnvXVQf8/Pn/S
8YL0XIQeBDeFlGmIoo5OvrXrBUHXZ/bw/MKTC/V5yURYiTk/MckUCdm8Xug160tWuBg6edBJ
FDhnYpIceUOBGdJ+E+8EVHcm5qEsg/PXYXFFQzQpveFYhBTP+pi/vdBO0GKQZ6M8K+pTcG5c
GswcRvP4tbGgWJaka6aPqdEJb+dKemohdynITr5vOwnPDoF5mLII8JAV1EO6R66V0DkniUe7
sPsTBoslDsYEtn59m1scdod0LN9xGq9otcowc+InC8vcGjZeFKCprd22hi3LqU78NjWw1PKC
c+vQw8sUz2zZJUNuCUUEE2cOE2U73Ujyi6wDUiLGfXQ7cOWHI04M6R/lqZ913kqwq/osRFuo
HuI80iAUF/ghzYwhpXAnWYOAzmifc+xpgSNjaU77rznookVrPcG8oFYQhpl+SLb+lcFYjY9w
fXl5kvlpwWI2T2nomJMYRGR7bw0mKoU2IFRc8YrfmBgXxQnPwCrmOFLhYf0gygxlxxJ27PgV
xKalVy7LxNMb6owoGU8mytn2OYAhEorNKeMmCpz79naDJxHs5+M06LONIA0grdGW8CoKZt+E
zB+YVJD05zZytWAl9rQGi07FvqqamULy1aFJNJZLo9RecIIX9/SulNG6HDrYK9zqamHh2zpp
bZTuFwU2hbJKajNPOcGNH9pAeuP7akQ4QK2S4jzYlaIcPVeSytx71ot0Vc/3cmvpltjLCuGL
2OOVtPV0BAwUJ25UzM9lzgzUsmjVqSfmqmObwqB5nlLMCvRT88Dkuesv5oTukk5Gse9t8ZPV
OZQ/PZYUSjGfvPHTI82fEqH+5u0aWfJpeo3VYE6PA43QhTXCrxlq61xGf1EUg7NNxGC/OMrK
ET6L5hkydWFQPLVS3q9LeEONl8IaSIwNSI0eYudgMLG1wEJBFGnARMQZoQE+kLxhaB6J2zX0
TDocs6U8bO5EcKcbsiM4L0eDJBJ+eV6goNUPh1+1LTnzhaocIzbCiFWPnSvKd1xZyfZ0Yb0n
IcfbgOXzDCGJSf5zngNCzWYpjaTNSchp3wOaUdRRl5bHLkJ+OywVy3ki2AeXuir9hlevQCBr
LWrlpNbcSamzGOkTXEMjnzpbyIWlsQW2w6C9iphgxLwVyqluOQYi1cd47pLkweKama3MVIaD
w7uJh2K8ZCZt9w2wCotFiIOtShLPxHy68OQkjTpEjMEgTdRDHylQ3yLhy1IGLXxh10Z/6Ww5
YpMN2VPPEepusJYclVQK0qOYyeBNZ3uQ7KyDw07Poq9PVsFUliuuhLpnVvNxbIkBYIgsb0/U
0fQvWTxniTtvgkk3LyTJR/YSdIn+WEN7XK6gEUHMee1gwZM0lF24jvpYAsyb1sPsiWq6AFHy
MxuiizoBKyluWR9lOHpk/homIuu3rwRHF584SxFhjDlSBmTYgtyFlSdtcM2Cs5qScgEbUThN
+QpbVNZHwVVmmkQOs02Q9hhRrrhXYgYtBb3WjO95JI43VQpWaylciNaJ79eXqRb4yQnyqpn8
xIrYJAqnQjmumQ8xhiFrl3M5nS4iFlEjQIqyjRKiHNElocISucOckXU7d8zmyyn7wEy4Gnw9
UiIKmL1QBzmcMuwsvZaYFtoFYqpDVJ3VaDroK4Y0zDkOICDKSWK75wTiAXMlMesu8YIuM9Oa
w6yIRyweSojzlMMvhykOjHPF4jgYgF/5sTPCbhGY6HitITv5qA6NNLDBcKFVZE1xZw7ACE0N
7HSqgSoP/UAVrswCrOUIdj/oFCvsJzQwkLwxwShgjhUaRj1LluyC8fy70mCB5+Ds5wjsK3qY
zLGxJgBzWpzCKZVTXAynCuTe6h/DouanPkjOwzxivGjdRou2yawA9krIEJsftHi2BGqYB0yl
ptWknUe5SOe9Hm3IgA4lSWF5pxJkq/Ovce4Oe36lbL6Uc2YgzGwYSzT7LbsRgIQpF0YVu4Vk
TUhL77kIdayP6uNWvdUQR/hBkPewmC9RBgeRfhIzj3OaXbOSzLFfUG1tSexohBrrEefhQFJ8
DWOEKVu17Tz7g+WcbQnAAQRz6+PyNt6EB9vtQFeh1+N1uFuY8MNoEJqzbHDdoLn4u+MjRPyQ
FBQNOWMI2Os8nApmmnqjVissCHJDZJR4PhQvAg0BCpc9hw1BSIViKx0h/lnEbDpqNOuJ0CR4
htl5ixWwBFHsXi4HgpYqXqiv37lciXLN57cEd0IIwt53G3TYVVOIhvkrmL4SOETI8ws50r4c
0uqlN1nftjJqrMA8HhrDm5lLHyvMBcZi4xVSGHZOLiY9YMKnEF6lfZbI5jZ2WOIYLy1ZRaPV
KT9nrES6/OlgsNQqUSMJkrd4wiYv9SFbIBK1YsM0JViK8LkuuQZXfpgiY+0SR1LJtqeJtADr
ii236gJjmka4iOAzqXyiolmZ8I5TTnm4TdUkqfZ+KWmu0eSO4qj0GUJDz6QOAqYArS9Jx7T5
8oSk4BhSt0JnVwpy2LhpaMZdSyhI/7Bx2wj+FXw9aK/xirItVjhtdAMSz9EoLYkPVipcqMCF
twZN/NtkBFRhx5MgmmFTtpmQMiQpv3nTlOA7iccAvno3D5oclsFgePj2aDT5q8ISZPAf7Bfe
ctt0ITiX944eccgK/WEZpy2ZQHMzeqXQds8XHDMTFOLthyQZHa3tRRnV+4rzbmIR4tt5HWKt
Qqn65Fpdshx9kPvFrGa5BjHWUi5v5DnnhBeJ1dJKYpagW4eBMT6BiK0SaUlED8ckhreuXr2A
xn716lsIHe23eR75pgmJ3LvvDfsG9gP++ra9ZuTHQ46YtB6a1Gp+bDiBh4fL992u8XKsDJU4
MaUQTUWN6uCHeBScuD1DXY1uOPQDCbzfduW3yr5h/qu8+IeWLEnrPLpo2+VsnXvwL9qBa6rX
wrp2xNPSXt1H7tjMj0t9YHLybCmu4zgfq3FspljoqvQPgneMKQKUunrysBTeP8pF9f5RBbC6
dDVecc7gsTxucbbqH7OzPMcMy6uaQz6+9jZYo2SZGArlvJxVkJgYppzAuoLO93LyIVP8W0Px
v+6vofBs6VLOZnOZZFAbyNkI91QZmGMfacnqx3mSb0HxwPakwJputQixmzKRJgoOB3dwQUj8
BW0WfW/RrhHzwLdzIucXOke62JdHCIVtsZk1lnHIr06Zs3IqAltDTi/T0gcs1RGVSKLC8sjZ
w9skC1m3y7FJJ5812ZYyQGTntRFvHOcY6A4XAlEHLCWUDGi+2jiPYSDKSCr3PU/E0p5JgA9v
keNxoiWwEJXEk5hTNSKOJec4duKsz3bv3lXHtEY5fPcsOLl3H3r01CRruVoKbijfm/K7M+/N
zAU40wjWZi7kjUTDUM1zSK8mdirowwU/4Thkdc05HCFHMP/g1ipsPwSgMWIjERZGShlXvZC4
PqtjuFxUTxfPWRG7FgW0J3c6Uk46s+WhbXeo0Mpvv1mh1usZZBRNJHCIApsiB+ep7daTH5Ln
g7UTyiKSsGn+JCCGNiCrvKZ5D2NV1mdIpxA91TRfCJICJ+CJUpAkNqoAlmVlXO1Asty17RFL
z5/vfGKbZaUL0hu4mJGYyfl5ml3YhyJM6kQW3HW36yt1fzONMYO7ZWlLqEN30wW3ieKy1SAt
UcjKB1IaFtu0b0qe+AZP6zFPis2CNBiYvSUvJGMMYUlDqs9K+Nu97s7OjhfNaiRuuyHF7CzW
+zMTes8GL04codGlM5pg/FsotrDrMIZzWDOXZ0tOe1R7zzV3vHkEjXiuCnlfk9oNkRm6FDwr
Zes+GRIjYj9neqWSQXDaRLHb0HWWqj59AmUq5XLN2p1CsZTsRFVKOGWLZ9cNvrdoQDeINQdu
pknxhHfAPlCml2tIEHqF/ThBm7VYiWt+PZ+kKScRhqZO+1BVIu7NhglNpI1ddhmicFqLrQwI
4tGyE9FydvlpFA5oqx5M4mzC1UMCrlaZs4u9eHK2KqUMLp6O1C1ORy6fTG1oiF/oS9YVUbpo
2PYcXC+WkwnnoJmbxYmf8WUQB6XvWnOuWKFj38Z8Ka3hhHJmKRygjOPBiTz8tFePQhQunBqN
zJgxkmtukx+i5OuGlsxzNQ9n5NL8C1FwFc1ouq+jKQwhdFLZFquWfowEVcjFKmtrhT+NFsbw
mjOqONsi5Gi1m3EaR006NbvxNKDGduHrc0JrUzsZDQkcJ64YO5UkXRYC3GZH/4QKkHLtAzZT
ZJysa8Or7LZoCtp+gBpMLjO4q1ySm4vCGYpy3swu5Wz0pRRFnJkGb5Z6IwJGOJ2JrKeT2ZpH
Y06rcWc609YHtOwoLzEJb/tRGxTt9joUk6KrASDKwyRkR2/ml2KwhQBC3+CCTUVJOOQCS3az
cBFTeYEtLgUzkDmJQlHyh/WbmB3RiEdccqvA11GoHSb3xajUX44zLgEwInxZaJ6lMbSYMq8H
XNvp6H9QtbcPnw+fD58Pnw+fD58Pnw+fD58Pnw+fD58Pnw+fD5//jZ//B4xYgzwAQAEA
--------------6CDEB2A441690ACFA4000AE5--