# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: ufleisch@users.sourceforge.net-20120704143258-\
#   bussv6x4ya19pbh2
# target_branch: file:///home/urs/projects/python-mode/src/components-\
#   python-mode/
# testament_sha1: 4370d5ae27fa13ee88b25ecbfc3e29e82612d123
# timestamp: 2012-07-04 16:52:25 +0200
# base_revision_id: andreas.roehler@online.de-20120703110357-\
#   hwls7y4mot50s8tc
# 
# Begin patch
=== added file 'completion/auto-complete-pycomplete.el'
--- completion/auto-complete-pycomplete.el	1970-01-01 00:00:00 +0000
+++ completion/auto-complete-pycomplete.el	2012-07-03 18:33:58 +0000
@@ -0,0 +1,37 @@
+;;; auto-complete-pycomplete.el --- an auto-complete source for pycomplete.el
+
+;; Copyright (C) 2012  Urs Fleisch
+
+;; Author: Urs Fleisch <ufleisch@users.sourceforge.net>
+;; Keywords: languages, processes, python, oop
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; The ac-source can be enabled solely using
+;; (setq ac-sources '(ac-source-pycomplete))
+;; or before the other sources using
+;; (add-to-list 'ac-sources 'ac-source-pycomplete).
+
+;;; Code:
+
+(require 'pycomplete)
+(require 'auto-complete)
+
+(ac-define-source pycomplete
+  '((candidates . py-complete-completions)))
+
+(provide 'auto-complete-pycomplete)
+;;; auto-complete-pycomplete.el ends here

=== added file 'completion/company-pycomplete.el'
--- completion/company-pycomplete.el	1970-01-01 00:00:00 +0000
+++ completion/company-pycomplete.el	2012-07-03 18:33:58 +0000
@@ -0,0 +1,55 @@
+;;; company-pycomplete.el --- a company-mode completion back-end for pycomplete.el
+
+;; Copyright (C) 2012  Urs Fleisch
+
+;; Author: Urs Fleisch <ufleisch@users.sourceforge.net>
+;; Keywords: languages, processes, python, oop
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; The backend can be enabled using
+;; (setq company-backends '((company-pycomplete)))
+
+;;; Code:
+
+(require 'pycomplete)
+(require 'company)
+
+(defun company-pycomplete--grab-symbol ()
+  ;; stolen from company-pysmell--grab-symbol
+  (let ((symbol (company-grab-symbol)))
+    (when symbol
+      (cons symbol
+            (save-excursion
+              (let ((pos (point)))
+                (goto-char (- (point) (length symbol)))
+                (while (eq (char-before) ?.)
+                  (goto-char (1- (point)))
+                  (skip-syntax-backward "w_"))
+                (- pos (point))))))))
+
+(defun company-pycomplete (command &optional arg &rest ignored)
+  "A `company-mode' completion back-end for pycomplete."
+  (interactive (list 'interactive))
+  (case command
+    ('interactive (company-begin-backend 'company-pycomplete))
+    ('prefix (and (derived-mode-p 'python-mode)
+                  (not (company-in-string-or-comment))
+                  (company-pycomplete--grab-symbol)))
+    ('candidates (py-complete-completions))))
+
+(provide 'company-pycomplete)
+;;; company-pycomplete.el ends here

=== modified file 'completion/pycomplete.el'
--- completion/pycomplete.el	2012-07-02 12:01:27 +0000
+++ completion/pycomplete.el	2012-07-04 14:32:58 +0000
@@ -78,4 +78,87 @@
              (display-completion-list completions))
            (message "Making completion list...%s" "done")))))
 
+(defun py-complete-completions ()
+  "get possible completions for current statement"
+  (pycomplete-get-all-completions
+   (py-symbol-near-point)
+   (py-find-global-imports)))
+
+(defun py-complete-python-dotexpr-begin nil
+  (re-search-backward "[^a-zA-Z_0-9\\.]")
+  (forward-char))
+
+(defun py-complete-python-dotexpr-end nil
+  (re-search-forward "[a-zA-Z_0-9\\.]*"))
+
+(put 'python-dotexpr 'beginning-op 'py-complete-python-dotexpr-begin)
+(put 'python-dotexpr 'end-op 'py-complete-python-dotexpr-end)
+
+(defun py-complete-show (string)
+  (display-message-or-buffer string "*PythonHelp*"))
+
+(defun py-complete-help (string)
+  "get help on a python expression"
+  (interactive "sHelp: ")
+  (let ((help-string
+         (pycomplete-pyhelp string (buffer-file-name) (py-find-global-imports))))
+    (if (and help-string (> (length help-string) 300))
+        (with-output-to-temp-buffer "*Python Help*"
+          (print help-string))
+      (py-complete-show help-string))))
+
+(defun py-complete-help-thing-at-point nil
+  (interactive)
+  (require 'thingatpt)
+  (let ((sym (thing-at-point 'python-dotexpr)))
+    (if sym
+        (py-complete-help sym))))
+
+(set 'py-complete-current-signature nil)
+
+(defun py-complete-signature (function)
+  "get signature of a python function or method"
+  (set 'py-complete-current-signature
+       (pycomplete-pysignature function (buffer-file-name))))
+
+(defun py-complete-signature-show nil
+  (require 'thingatpt)
+  (let ((sym (thing-at-point 'python-dotexpr)))
+    (if sym
+        (progn
+          (py-complete-show (py-complete-signature sym))))))
+
+(defun py-complete-signature-expr nil
+  (interactive)
+  (require 'thingatpt)
+  (let ((dotexpr (read-string "signature on: "
+                              (thing-at-point 'python-dotexpr))))
+    (if dotexpr
+        (py-complete-show
+         (py-complete-signature dotexpr)))))
+
+(defun py-complete-electric-lparen nil
+  "electricly insert '(', and try to get a signature for the stuff to the left"
+  (interactive)
+  (py-complete-signature-show)
+  (self-insert-command 1))
+
+(defun py-complete-electric-comma nil
+  "electricly insert ',', and redisplay latest signature"
+  (interactive)
+  (self-insert-command 1)
+  (if py-complete-current-signature
+      (py-complete-show (format "%s" py-complete-current-signature))))
+
+(defun py-complete-set-keymap ()
+  "Define key map with pycomplete functions."
+  (interactive)
+  (define-key python-mode-map "\M-\C-i" 'py-complete)
+  (define-key python-mode-map "\t" 'py-complete)
+  (define-key python-mode-map [f1] 'py-complete-help-thing-at-point)
+  (define-key python-mode-map "(" 'py-complete-electric-lparen)
+  (define-key python-mode-map "," 'py-complete-electric-comma)
+  (define-key python-mode-map [f2] 'py-complete-signature-expr)
+  (define-key python-mode-map [f3] 'py-complete-help))
+
 (provide 'pycomplete)

=== modified file 'completion/pycomplete.py'
--- completion/pycomplete.py	2012-07-02 12:01:27 +0000
+++ completion/pycomplete.py	2012-07-04 14:32:58 +0000
@@ -38,7 +38,13 @@
 # pdb.set_trace()
 
 import sys
-import os.path
+import types
+import inspect
+import StringIO
+import os
+
+_HELPOUT = StringIO.StringIO
+_STDOUT = sys.stdout
 
 try:
     x = set
@@ -47,20 +53,25 @@
 else:
     del x
 
+def _import_modules(imports, dglobals, dlocals):
+    """If given, execute import statements"""
+    if imports is not None:
+        for stmt in imports:
+            try:
+                exec stmt in dglobals, dlocals
+            except TypeError:
+                raise TypeError, 'invalid type: %s' % stmt
+            except Exception:
+                continue
+
 def get_all_completions(s, imports=None):
     """Return contextual completion of s (string of >= zero chars).
 
     If given, imports is a list of import statements to be executed first.
     """
     locald = {}
-    if imports is not None:
-        for stmt in imports:
-            try:
-                exec stmt in globals(), locald
-            except TypeError:
-                raise TypeError, "invalid type: %s" % stmt
-            except Exception:
-                continue
+
+    _import_modules(imports, globals(), locald)
 
     dots = s.split(".")
     if not s or len(dots) == 1:
@@ -118,6 +129,104 @@
 
         # return os.path.commonprefix([k[len(dots[-1]):] for k in completions])
 
+def pyhelp(s, fname=None, imports=None, debug=False):
+    """Return object description"""
+    if not s:
+        return ''
+    # changes to where the file is
+    if fname:
+        os.chdir(os.path.dirname(fname))
+    doc = ''
+    try:
+        doc = _gethelp(s, fname, imports)
+    except Exception, ex:
+        return '%s' % ex
+    return doc
+
+
+def pysignature(s, fname=None):
+    """Return info about function parameters"""
+
+    if not s:
+        return ''
+    # changes to where the file is
+    if fname:
+        os.chdir(os.path.dirname(fname))
+
+    obj = None
+    sig = ""
+
+    try:
+        obj = _load_symbol(s, globals(), locals())
+    except Exception, ex:
+        return '%s' % ex
+
+    if type(obj) in (types.ClassType, types.TypeType):
+        # Look for the highest __init__ in the class chain.
+        obj = _find_constructor(obj)
+    elif type(obj) == types.MethodType:
+        # bit of a hack for methods - turn it into a function
+        # but we drop the "self" param.
+        obj = obj.im_func
+
+    if type(obj) in [types.FunctionType, types.LambdaType]:
+        (args, varargs, varkw, defaults) = inspect.getargspec(obj)
+        sig = ('%s: %s' % (obj.__name__,
+                           inspect.formatargspec(args, varargs, varkw,
+                                                 defaults)))
+    doc = getattr(obj, '__doc__', '')
+    if doc and not sig:
+        doc = doc.lstrip()
+        pos = doc.find('\n')
+        if pos < 0 or pos > 70:
+            pos = 70
+        sig = doc[:pos]
+    return sig
+
+
+def _load_symbol(s, dglobals, dlocals):
+    sym = None
+    dots = s.split('.')
+    if not s or len(dots) == 1:
+        sym = eval(s, dglobals, dlocals)
+    else:
+        for i in range(1, len(dots)+1):
+            s = '.'.join(dots[:i])
+            if not s:
+                continue
+            try:
+                sym = eval(s, dglobals, dlocals)
+            except NameError:
+                try:
+                    sym = __import__(s, dglobals, dlocals, [])
+                    dglobals[s] = sym
+                except ImportError:
+                    pass
+            except AttributeError:
+                try:
+                    sym = __import__(s, dglobals, dlocals, [])
+                except ImportError:
+                    pass
+    return sym
+
+def _gethelp(s, fname=None, imports=None):
+    """Return string printed by `help` function"""
+    obj = None
+    try:
+        _import_modules(imports, globals(), locals())
+        obj = _load_symbol(s, globals(), locals())
+    except Exception, ex:
+        return '%s' % ex
+    if not obj:
+        obj = s
+    out = _HELPOUT()
+    try:
+        sys.stdout = out
+        help(obj)
+    finally:
+        sys.stdout = _STDOUT
+    return out.getvalue()
+
 if __name__ == "__main__":
     print "<empty> ->", pycomplete("")
     print "sys.get ->", pycomplete("sys.get")

=== modified file 'python-components-help.el'
--- python-components-help.el	2012-06-20 14:39:57 +0000
+++ python-components-help.el	2012-07-03 20:06:45 +0000
@@ -148,7 +148,9 @@
          (file (concat (expand-file-name temp py-temp-directory) ".py"))
          (cmd (py-find-imports)))
     (goto-char orig)
-    (setq cmd (concat "import pydoc\n"
+    (setq cmd (concat "import pydoc, sys\n"
+                      "sys.path.insert(0, '"
+                      (file-name-directory origfile) "')\n"
                       cmd))
     (setq cmd (concat cmd "pydoc.help('" sym "')\n"))
     (with-temp-buffer

# Begin bundle
IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWepa+M0AC8D/gH9VUJBb////
/+/ev/////BgFv0n17emWoKe++9vcLc0d3aOugyAW5tNb1k9jV7Lt1893Pbu3XRV1t3c5HXCpcWQ
Wt12Ve3e1o9toNNJJinoyR6TyhptQAGj0g9QeoNADQAABoGgSRCYRoTEpjUU2NE0ym/VTJ6nqeka
AB6gAAADRoJUwIqn+omoNPERoxGhoNDIBkAAAABoaZASEiTTRpMo2k1T8yGkpsp6noCAe1QNNqGJ
6j1NADQNAIpIyEYo00YmKelPRPJop+p4hM0CnqZB5TZQekNAA9NBIoIaIaNGhqaAaaptTCnlBo8o
eFP1Taj1NANMgB6nqHQltAExg2kkP2s+j29+//lXp62ZPJtmqRv0he8eYYMce4KNkZlfPhHzDoS2
JkkiUfTFgUW4IbkwKl8TG26IHIIWRgSiD1NUEUy8RGUSMRYbKDChaa6fBjlI0sdO+0dz/L8Z/u9I
6pxqSKND9UX/fN4stfNlpjxWeFKh5xEQwxPwN1oZpGsWkXChwI5CNqO9ZMMmLvakmtGAyAUOs/yR
AiZzrLGSC2PF9C0iO58HyBoMU0PF1Duxrdhh7WklZ97zzDgiNR7YHiBR34uddqklsRkAKBS4AAiA
AxoG9QajL258PmlllG0h3ESKK8ic+tFh4lGXDrRd627B4xhDEuxV4S94cY7zQaZFEHVYChXyVLyP
Zy7YEtOn/mctpqmk3LlCDA7eO+KJer2YNlkyphgxaTXPxGqzSVw3IPOHaDBtNg237q/9hx791a2r
KS1Gjo8aDGTImq5gGIZTUlW56XeILxfQxQ8YWHSj5uboHJNHG6pnfw1sow0oQsuLjiUnUtAyfIYn
RAYdZ9hWloAmfaLn1HioTLxVnuiS5k/gXnEV+JUwnQUIRPhP6ECR1PStahJjqmM/Z8PpPbhRqQ0+
K5ZHHRR2HA2VHXVQZFkjHdMd6qfyOEiV7oofGBYeWvrmYGOprErAW9x0ocdibAiMciJQ9akE95gQ
oMnr/1zRmd29a7lIq2uEMvmrHXS9wrgYUfN/ZkSXG8oBa2bHdi2B6vmiYbEtW3WJcM3J9pgQ8pVP
roiDis6ZFN40hfauWyIsaTniPNyZ1PKRzMhjvOU7dbY1ylbk7C79Iz65mQFPbOsEjHo1lbA5ljNK
ys2QM9wrBjYX2tqhxK42XQLSLzROrujse2lb0F4xju2zS0kagmCdiopxLOHvQgrFBbb0ucucE+2m
rOZE6YZ4BcIE3zHKX1zNQkRLMvzv5vgftG3i/iLT55NiSqsR09Womyi61cOPSMQMrNpkkTzvmiVo
uqF4ovv7d6llLosx264d81nrCoK3tjcdMn6VHG/Hjeto5BoUBgDGwaGvlglPjWZEYJYTypvuURBa
kb4h1MCXHZZh2V1t1QgJsGxsSJuu3jnVRWOX0c9TisfsupUHstk8+eQYwMe2X2wtgsFfCy7LDrKm
GpFjNOCqwS6652UJMMFfdpUIuaRb3RE/0RYA13rqM9bKP03WD3PazYmfO7ePb4CMGtfKLrzijS9f
kg51GNiOVbzWTfblK46cftPswvNC+/x0cvh0RmAeGWmjJnoeD+gy2m62JDFI42zz2XjLNN5mXol7
GbwGI1k36R1ePTct+J4EvWkLxpvV0Zm+5fycaGtOWtyBecELYTAQWeIRIEQ1PfgQDO7Nd5yW6RBv
2nyX8TQkGg3kmBQ3lWZ5DWLoPA/xBKrgi3r9fv4KN8LgPYdtxwMxVNWCBg0BgsGs7DYljSMkHalA
PvFpBMoY4SvN6nFHRUuN5L5TBLbbUglJagZMlBUut0dmEni9g1asGGZmTbGxsKwYiIxtsLWw9KDd
awzbQpHQydMSs1nZ8CPTbXVE+05tMu0+vo2PXMP2P5HfAoLIYjFi7stS7yyu+dYIPeWqCYq2AjwV
/rNaCRXInafsXEaD6zXVNakkkP4L3On1vV+eGwS5metobU4I2h1eI7ELUrClrbAd8yyQsIMiQoOU
YGxoWJ5khhJMegZXGHK9UpAWgUuDzgg1lAIuQsIdhmFkFolmQ1HUaTyBxEtivyFRggxi2MhOfw4J
JZGh7j+RwZLYg6JI5yMeSiiwxDgdAiDH1a5Rp8c68s89pqmKbsQMgu5cNTN9GGxLDsN8lx7wwzSD
kfHU0lcCsnQZiwzmgiEChaRMhmo+GRm1cjKOJnIyNbtanipIUkpjIERJ75kECKk5xSi8AJbEDOSb
m8TMaFkW6bdhlLUcE1fcurhDwBkXAwOM4zeepPKew8SDp05nQ3MYGsoRimOwiYKXDiClAdA/cBnA
p0wEoGiCZLsZgyScwMF3FQD5+hnrp6u3EsclKA/aanvnhUzuORI1QZjEjkVNjoMJfIZowg+dq7eg
5DNC54EErJS4jgEQOZMiBmRejFKOF0HbQtmU2RYfkY46kEEy5VLcgaECJuZjSUOZBtXkDoAnhVWM
yxhgst8UG2gRRI8yjBhaajURqN7NYt9pnUMaKtm06UXIL5CWoDVoQPEixUuMZlTcnE61115NNQuo
V7+hweLncma80YQaJklkeQSmIpuc9bbjkCPBtccRcilHTYyODziXxAXuNkPfwaPZlAIWAQ2aUTtM
1hweMsFJ2RgcyPGZhAkOdg0bMdCFzBHgBMlqRSoXMiRUmZlCBuvaYdmjVjpi6OJiRWMVQeyGLmDn
A0qeMGSDYKI4ODcmtUpmb7qFzczQcHKgxgSORwsjNtNcRnMjI4Nz6MjAoE0crjDmvIuYyS230S2G
LJec8JiZFjE4Ljm5gZmYCBcbT6BQ9UT0RIbYHFZFJm+kvO5eVsGR8cqTJEqmwLYNqQ7ni/GEKwZW
DPhQ7iNlSyT4II/WYHoXyJWBiBjGNcmIpSINyaCDBeCYoL2MQno3J8X4nFFpVNONc6lqbUcFAgEC
1NNjGWGUsRnzLzq0a3qagpKaiKj5LqFbNo157xwHyAhWT6z3n+j7yZ/0+R8jjreM3hpNA22/pPDY
e64+J6qCvNX9C7UfoPkdGkGUA7MIIOZJmdgv0n5y8vl1dMj0nauB8ToKUS/sbznL5IOtk1nEPqEy
wb0PFaztPqb4EudptIB/Vv2FxM0moiGC7ComZFA1ssF1FZqLhhEmLq4cPnrMnosHccJvjQzMH0QF
DYEj1l/qqLCGqNxOv1Ha30NLt2MtlS1OFv1ktEC4LEIMt6Q7d0EerXTN8hxxMIhUESAmV/H+NU0a
2jVRzfXWdsEQRA5Xz2rfDHsX545GRcg95mAgguNIz3nuPA8Ch4zilWdn1WHcHST0ns9oYHA3+1vs
g9JjwrS4UQbs4fBXR0BvOcwN5uXIj7zkN+peH3mY0y6Ns+AXUUCwIGAPXbcvptFOuKsG64KnUaYK
5QNZueSCmY+BIobQS5CR5WPFE1HOoEBCncqZkzA/FAwKC0qXLwbIzG1EUqFR1DsUYkfBR1iD9ZnO
IzHS/QF50uAUuX0xS60t4cTSYncQIGkNxyCw7jklUWILSxKZUM1mTa4iUzicJhaaTvSjYGWk5wJX
CDm3jnAkl4tWxyHIZJAXNiQ3buxAkFYxTbBCJaxogMyNRkbzIiMxImnuobxpGkNuswzGssMpsNZv
lD6U2kjRwEa5ghpNIn3I1Oc5VhuUBBfnXWuf4j0oKOBgmlhE6HhFF0uk/7uJGDZwZyh5grbbTENI
bQMaAYIvJkkSRBrQVno+smdAar9gWIIIMYpZq7gxlXimeVqkMH5yRMG98Wmi1YUR6uEO8+v3lzib
Euwoeg4JGBiHeZCMQWQ6/QeM2QjaNVkalzzQO4sKy8OjlgXXmB4UL13CaA4WbEQ3daTYleZobib0
8BJf/WHhQvOky4lma+CR1CwB5vMRLoh6M8rSjUGFUV5VeKb0M7iAd8CKZCekxL4T3NtE35bLwhSQ
FKrKi5EW1q0y6RI5R5KqWeKC3YUwvFEmtTAViUMo41LkK2HM6eqWpNZuogIGKbunaFVNmbxdmUUW
MRYmKpLQwmJBYpYJUbpV4kIUIGCFpEDABMEIaDM2EGEcsopRORImVQPFyslCuZWdozYcEtJr2ath
GSWs/AKamC2C8QGKeNCM4DwFUhd5blbnIi2mkv8eYkN+ph8hR6GJpTscwPQUn6zqciK1GD8B0OSW
F0TYPdAEqzEEMLiYtYd0aITUTvFh4EC3EPeMl5+HQfK0mMQ3Wr4ulTK/kHRVbD9pmH25R9Qu+wwE
UvGIatQPsiJjBSQs55Ypcr3vIEyoq56nKMIXDQOKjWyBC8ITuo3lZzEqpyRJDEO8VNEpmeLWiqFB
WDIQDQcqQIoCTkR+6KlaNo+4giKbbeIK1GB/rsY7SDZLcwUMCNJdSD/xzLuN/pUIHzsTGUhlC2Se
Hfgj7HqPF0kNh0npPAXkyo+ayPGfnOUIOn15UfNQ4EJB+A63l2nh9A1jy96Z6eESWQELSwegg9UD
EFBQrkttlVQcBPcEHAwLlmlIN8vR60vMyJoCEqkuiwIGkEGX3rPZWRNIagr1lCQbgN6ihYYlArHA
fm4h+ZedYSA7AIhB9kQZxKxFCJHzDQt9zVh8M6cCqubKgivd7CtSIHRiEYyAzAzaJoQSGWjGlWdh
bJdiSkw0IOCDbvyuiI84mHrAhOhWhXBE2njKiY8XLEL18dTOssUvTJzQSEODACvmQW84nZeKs3Lj
CD1oZvNSgv1Jo4MOMCd2cPOhMI5ixpvumZg7WRujhwda3mb5j/O2qoyTbfWYnabyu1bVdW2tjTTG
0k0MGgbBMCzPGo3LDRcw8iiadBoUaMiAo80BVp2DaQdjiJUYatft76GccuABiLnkbKFvViVa4DMs
Gcaw5wOhCv12owR6xJlhsDMeQG0yBvSxIIIxGpNcxOY5kvWZhF5T9sFZ6laUu3MRIaC4gaDWWa10
ghgVHKbhvcahvAByOQfWY1lfGMzVZOm8WSyMK6njFx7kMDWUAchJEtN/AXc1lO51vG4k85SvrUyE
wkZ0k5U+tDaY+QswahVltggrESu4C8NKLR69q86yVMh1ReQzA2iEzUwb7luaAn1IQIDkIYXzMCHi
PKrdbpDsNNmhjGtxVq0uqKkpuwKrlle5ZRewpOFVJEo0o0CbG0koOWNncNtmxA1zahBqx1JkQQya
bY2wyjHCCVBAKVlZoYkw0tULrBBZClEEF1RBNyAap2rYOsWiV5OS1CgGQCaQQyhINNpoXVBFDpA2
JGo0FAoJGzc2AfrFvfGLAvUdaYgYvdUmpxFxV9JtU5yEJTkwNgn2nKVL+rviaOZGd8qHMt5AKuhM
L4KDJIkMaGgTFGCjEqh8yD41rW48BVhW01+GhdedJDMMFI8dZoIhwbGPxjIMVWDoNFCKF5DcVHHu
IAgo0GsQmViIxFznOQKxFi5wVWHYRDifYXnmInSCROzsgVHVLHFFkvdMz3AZedrTCp2Ug3NEa4A/
IrKaoCIJEDsfqekH3HcfUBahgaAdCSBkMmoEGN8doVAu2WB6N0sI6faL2xZWxA8DwDDlazwnvoOh
dPjKB6TAvvsM1ly7gxtuSNttxNtjjgYE8TLEAsqXMUDH4N7yiW33mRI2FsUUDpLkltvqzTS1dGRU
OsdIT3lUFm2MTMNxhdhaQgy5TKSaDyg0EQvzQVBZj5LZyKNQJDFiaCjJJ2LEAsSDa5yCsl3RtLKS
cxznid7QhPIYJADlWfh3JzhufQqCyTQRVLxIGLXuQXslvIJLOPlV6UWECtCDSjoLS3kGS6C/VUDo
WEylyfFfit6IUxZiaaC8FEhiyNYFGthGrkAgZm3cenrbVh5jwZ/gYq3JKlijDUMIegxcWRhiv52p
EZpWTptXbZA7CNRJhGOwcglleyNgZWitBBmiprkG4ogPoVRc9GoiWJia5a42XZ/hjJLbdIRX7RuQ
Y3Y6ZONucjoa4nqgCCaLjESbKSD6CDI0LGCVH83nHiDHDvd3g6Lh3K1UgQAVws+YFZRUbXQCBkOB
pVFPsqQbA2oO1tQJjisUTBwhRCkGGMxw55Rw2AcKjHzG355haVQxUSDb3QqHpOrZsN5oNhUalAXn
NtcU0gGsrFq5C70a8YC1bkXZ6o1Baw5BZCpyI+WilOJkmRYkAERqIiFY5D4Lou5TFQmrMaRNe+Cs
bFhLlDj+RUqDUmkIMFLswN9yG5mhwldbiDUDg4GMRDNrEaFKzU5DqaFF4xAXJlPKjZKYszcvYc4Y
YgMoIZlB3TwQFUD18LSxMheu8QTshGjKBztzPI1UIgwEwXqT0Pklq5B9g5Gzdi+mpHGqaYpIJc67
HN8MJCGZcIHcFzcQ1pr55N4TLNNhtPvHWdFdhwcfjD8HsO+MOxgkESIJBB2HYlPKh8l0nCbzJ1HL
JE8sEzUZ12VCpwKtgzPUCEBgBM2jUBpwhOKOgzIJMOY4XAMyzXBrEuoMRi0qRaB6EGAXL3SFEsD1
KwdNbm8gxI+SGIWIPoegudje4l/nPYBWD2hCAfYGqw1m8o9K7TaSprRQqik6qSGq1BCBlbBQcZra
e56wqS2EyMOAFwCWkPGjfCugLH2hEBA4H8LCiQ9+CIUYgtO9nTrM+CzfyF3JFOFCQ6lr4zQ=
