[srm-cvs] CVS Update: - doc update

From: <d.rethans[@]jdimedia.nl>
Date: Thu Apr 18 2002 - 15:03:55 CEST

Date: Thu Apr 18 15:03:54 CEST 2002
User: Derick Rethans
Directory: srmdoc/user

Log Message:
 [5.00]
 - doc update
 
Modified files:
           srmdoc/Makefile.in (version: 1.6)
           srmdoc/global.ent (version: 1.4)
           srmdoc/manual.xml (version: 1.13)
           srmdoc/admin/compiling.xml (version: 1.5)
           srmdoc/admin/installation.xml (version: 1.8)
           srmdoc/dbxml/dbpoolx.mod (version: 1.3)
           srmdoc/user/classes.xml (version: 1.8)
           srmdoc/user/mod_standard.xml (version: 1.3)
Added files:
           srmdoc/article.dsl (new version: 1.1)
           srmdoc/articles/php-almanac-2002.xml (new version: 1.1)
           srmdoc/docs/interview-derick.pdf (new version: 1.1)
           srmdoc/docs/interview-srm.pdf (new version: 1.1)
           srmdoc/figures/srm-protocol.png (new version: 1.1)
           srmdoc/user/mod_sapi.xml (new version: 1.1)

[FILE: /srmdoc/article.dsl]

<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
<!ENTITY docbook.dsl SYSTEM "/usr/share/sgml/docbook/dsssl-stylesheets-1.59//html/docbook.dsl" CDATA DSSSL>
<!ENTITY html-common.dsl SYSTEM "./html-common.dsl">
<!ENTITY common.dsl SYSTEM "common.dsl">
<!ENTITY version.dsl SYSTEM "./version.dsl">
]>

<!--

  $Id: cvstemp,v 1.1 2002/04/18 13:03:49 derick Exp $

  HTML-specific stylesheet customization for use by the online manual.

-->

<style-sheet>
<style-specification id="docbook-php-website" use="docbook">
<style-specification-body>

(declare-flow-object-class processing-instruction
  "UNREGISTERED::James Clark//Flow Object Class::processing-instruction")

(define %html-ext% ".php")
(define %html-manifest% "PHPWEB.manifest")
(define %output-dir% "html/articles")

;; XXX hackish workaround. I'm not sure what side effects setting
;; the element number to 0 would have?
(define (generate-anchor #!optional (nd (current-node)))
  (string-append "AEN" (number->string (or (all-element-number nd) 0))))

(define (phpweb-quote str)
  (string-replace str "'" "\\'"))

(define (phpweb-header #!optional (nd (current-node)))
    (php-code
     (string-append
      newline
      "include('include/header.inc');" newline
      "include('include/footer.inc');" newline
      (phpweb-header-navigation nd) newline
      "page_header ('SRM - Article', '');" newline
)))

(define (phpweb-footer #!optional (nd (current-node)))
  (php-code
   (string-append
; "manualFooter('" (phpweb-quote (phpweb-node-title nd)) "','" (phpweb-quote (html-base-filename nd)) "');" newline
     "footer (''); " newline
)))

(define (phpweb-node-title #!optional (nd (current-node)) (title-elem "title"))
  (let* ((preferred-title-node
          (cond ((equal? (gi nd) "refentry")
                 (node-list-first
                  (select-elements
                   (children
                    (select-elements (children nd) "refnamediv"))
                   "refname")))
                (else
                 (node-list-first
                  (select-elements (children nd) title-elem)))))
         (title-node
          (if (node-list-empty? preferred-title-node)
              (select-elements (children nd) "title") ;; fallback
              preferred-title-node)))
    (data title-node)))
               
(define (phpweb-header-nav-array nd)
  (let ((href (href-to nd))
        (title (phpweb-quote (phpweb-node-title nd "titleabbrev"))))
    (string-append
     "array('" href "', '" title "')")))
   
(define (phpweb-node-list-map func ndl)
  (let* ((node (node-list-first ndl))
         (rest (node-list-rest ndl))
         (item (func node)))
    (if (node-list-empty? rest)
        (list item)
        (append (list item) (phpweb-node-list-map func rest)))))

(define (phpweb-header-navigation nd)
  (let ((prev (prev-chunk-element nd))
        (next (next-chunk-element nd))
        (up (parent nd))
        (home (sgml-root-element))
        (toc-nodes (siblings (chunk-parent nd))))
    (string-append

     "$Navigation = array(" newline
     " 'home' => " (phpweb-header-nav-array home) "," newline
     " 'prev' => " (phpweb-header-nav-array prev) "," newline
     " 'next' => " (phpweb-header-nav-array next) "," newline
     " 'up' => " (phpweb-header-nav-array up) "," newline
     " 'toc' => array(" newline
     (join
      (phpweb-node-list-map (lambda (nnl)
                              (string-append
                       " "
               (phpweb-header-nav-array nnl)))
                            toc-nodes)
      (string-append "," newline))
     ")); "
     )))
    
 
(define (html-document title-sosofo body-sosofo)
  (let ((doc-sosofo
         (if (or (chunk?) (node-list=? (current-node) (sgml-root-element)))
             (make sequence
                   (phpweb-header (current-node))
                   body-sosofo
                   (phpweb-footer (current-node)))
             body-sosofo)))
    (if (chunk?)
        (make entity
              system-id: (html-entity-file (html-file))
              doc-sosofo)
        doc-sosofo)))

(element programlisting
        (make processing-instruction
                data: (string-append "php highlight_string ('" (string-replace (data (current-node)) "'" "\\'") "'); ?"))
)

(define ($section-separator$)
  (let* (;; There are several situations in which we don't want a
         ;; separator here:
         ;; 1. This document is being chunked:
         (chunks (not nochunks))
         ;; 2. This node is the root element of the document:
         (isroot (node-list=? (current-node) (sgml-root-element)))
         ;; 3. This node is the first section in the root element
         ;; and no other content (except the *info elements and
         ;; the title) precedes it. This means that the
         ;; titlepage-separator was the last thing we put out.
         ;; No one expects two separators in a row, or the Spanish
         ;; inquisition.
         (s1ofrt (node-list=? (parent (current-node)) (sgml-root-element)))
         (precnd (ipreced (current-node)))
         (infond (info-element (parent (current-node))))
         (isfirst (or (equal? (gi precnd) (normalize "title"))
                      (node-list=? precnd infond))))
        (if (or chunks isroot isfirst)
        (empty-sosofo)
        (literal "")
   )))

(element acronym
  (make element gi: "ACRONYM"
    attributes: (list
             (list "TITLE" (normalize (attribute-string (normalize "title")))))
    (process-children)))

(define ($section-body$)
  (make element gi: "DIV"
    attributes: (list (list "CLASS" (gi)))
    ($section-title$)
    (process-children)
    ($section-separator$)))

(define
        (article-titlepage-separator side)
        (make empty-element
                gi: "IMG"
                attributes: (list
                        (list "BORDER" "0")
                        (list "SRC" "/images/black.gif")
                        (list "WIDTH" "100%")
                        (list "HEIGHT" "1")
                )
        )
)

(mode article-titlepage-recto-mode
  (element revhistory
    (make element gi: "DIV"
      attributes: (list (list "CLASS" (gi)))
      (make element gi: "TABLE"
        attributes: (list
                 (list "WIDTH" ($table-width$))
                 (list "CELLSPACING" "0")
                 (list "BORDER" "0"))
        (make sequence
          (make element gi: "TR"
            (make element gi: "TH"
                  attributes: '(("ALIGN" "LEFT")
                        ("VALIGN" "TOP")
                        ("COLSPAN" "3"))
                  (make element gi: "B"
                    (literal (gentext-element-name
                          (gi (current-node)))))))
          (process-children)))))

  (element (revhistory revision)
    (let ((revnumber (select-elements (descendants (current-node))
                                      (normalize "revnumber")))
          (revdate (select-elements (descendants (current-node))
                                      (normalize "date")))
          (revauthor (select-elements (descendants (current-node))
                                      (normalize "authorinitials")))
          (revremark (select-elements (descendants (current-node))
                                      (normalize "revremark"))))
      (make sequence
      (make element gi: "TR"
        (make element gi: "TD"
              attributes: (list
                           (list "ALIGN" "LEFT"))
              (if (not (node-list-empty? revnumber))
                  (make sequence
                    (literal (gentext-element-name-space
                              (gi (current-node))))
                    (process-node-list revnumber))
                  (empty-sosofo)))
        (make element gi: "TD"
              attributes: (list
                           (list "ALIGN" "LEFT"))
              (if (not (node-list-empty? revdate))
                  (process-node-list revdate)
                  (empty-sosofo)))
            (make element gi: "TD"
                  attributes: (list
                               (list "ALIGN" "LEFT")
                               (list "WIDTH" "70%")
                                        )
                  (if (not (node-list-empty? revremark))
                      (process-node-list revremark)
                      (empty-sosofo)))))))
)

&html-common.dsl;
&common.dsl;
&version.dsl;

</style-specification-body>
</style-specification>
<external-specification id="docbook" document="docbook.dsl">
</style-sheet>

<!--
Local Variables:
mode: scheme
End:
-->

[FILE: /srmdoc/Makefile.in]

--- srmdoc/Makefile.in:1.5 Sun Feb 10 18:21:40 2002 GMT
+++ srmdoc/Makefile.in Thu Apr 18 11:03:49 2002 GMT
@@ -8,10 +8,13 @@
 
 HTML_STYLESHEET=html.dsl
 PHPWEB_STYLESHEET=phpweb.dsl
+ARTICLE_STYLESHEET=article.dsl
 HOWTO_STYLESHEET=howto.dsl
 PRINT_STYLESHEET=print.dsl
 QUICKREF_STYLESHEET=quickref.dsl
 KDEVELOP_TOC_STYLESHEET=kdevelop_toc.dsl
+ARTICLES_HTML=html/articles/php-almanac-2002.php
+ARTICLES=articles/php-almanac-2002.xml
 
 HTML_DEPS=$(HTML_STYLESHEET) common.dsl
 PHPWEB_DEPS=$(PHPWEB_STYLESHEET) common.dsl
@@ -37,6 +40,7 @@
 
 html/index.html: $(HTML_DEPS)
         @test -d html || mkdir html
+ @test -d html/articles || mkdir html/articles
         $(JADE) $(CATALOG) -d $(HTML_STYLESHEET) -V use-output-dir -t sgml $(srcdir)/phpdocxml.dcl manual.xml
 
 html/index.php: $(PHPWEB_DEPS)
@@ -44,6 +48,18 @@
         @test -d html/figures || mkdir html/figures
         cp -R figures/*png html/figures/
         -$(JADE) $(CATALOG) -d $(PHPWEB_STYLESHEET) -V use-output-dir -t sgml $(srcdir)/phpdocxml.dcl manual.xml
+
+articles: article
+
+article: $(ARTICLES)
+ @test -d html || mkdir html
+ @test -d html/articles || mkdir html/articles
+ @test -d html/figures || mkdir html/figures
+ cp -R figures/*png html/figures/
+ for i in $(ARTICLES); do \
+ $(JADE) $(CATALOG) -d $(ARTICLE_STYLESHEET) -V nochunks -V use-output-dir -t sgml $(srcdir)/phpdocxml.dcl $$i; \
+ mv html/articles/index.php `echo "html/$$i" | sed -e 's/\.xml/\.php/'`; \
+ done
 
 # test all possible errors
 test:

[FILE: /srmdoc/global.ent]

--- srmdoc/global.ent:1.3 Sun Nov 19 15:53:36 2000 GMT
+++ srmdoc/global.ent Thu Apr 18 11:03:49 2002 GMT
@@ -1,15 +1,16 @@
-<!--
- $Id: cvstemp,v 1.3 2000/11/19 16:53:36 james Exp $
- -->
+<!-- $Id: cvstemp,v 1.4 2002/04/18 13:03:49 derick Exp $ -->
 
-<!ENTITY email.james 'james@vulcan-logic.net'>
-<!ENTITY email.mathieu 'mathieu@vulcan-logic.net'>
-<!ENTITY email.derick 'derick@vulcan-logic.net'>
+<!ENTITY srm.small '<acronym title="SRM: Site Resource Manager">SRM</acronym>'>
+<!ENTITY srm.full 'SRM: Script Running Machine'>
 
+<!ENTITY php '<acronym title="PHP: PHP Hypertext Proprocessor">PHP</acronym>'>
+<!ENTITY http '<acronym title="HyperText Transfer Protocol">HTTP</acronym>'>
 
-<!ENTITY link.james '<ulink url="mailto:&email.james;">James Moore</ulink>'>
-<!ENTITY link.mathieu '<ulink url="mailto:&email.mathieu;">Mathieu Kooiman</ulink>'>
-<!ENTITY link.derick '<ulink url="mailto:&email.derick;">Derick Rethans</ulink>'>
+<!ENTITY banana '<acronym title="Bananas are remote objects living in the SRM daemon.">Banana</acronym>'>
+<!ENTITY bananas '<acronym title="Bananas are remote objects living in the SRM daemon.">Bananas</acronym>'>
 
-<!ENTITY url.vlsrm 'http://www.vl-srm.com'>
-<!ENTITY url.vulcan-logic 'http://www.vulcan-logic.net'>
\ No newline at end of file
+<!-- keep this comment at the end of the file
+vim600: syn=dtd fen fdm=syntax fdl=4 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->

[FILE: /srmdoc/manual.xml]

--- srmdoc/manual.xml:1.12 Tue Mar 05 20:31:22 2002 GMT
+++ srmdoc/manual.xml Thu Apr 18 11:03:49 2002 GMT
@@ -2,12 +2,17 @@
 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
           "./dbxml/docbookx.dtd" [
   <!ENTITY % srmdoc.defs SYSTEM "./global.ent">
+
+ %srmdoc.defs;
+
   <!ENTITY srmdoc.user-intro SYSTEM "./user/intro.xml">
   <!ENTITY srmdoc.user-features SYSTEM "./user/features.xml">
   <!ENTITY srmdoc.user-client SYSTEM "./user/client.xml">
   <!ENTITY srmdoc.user-using-banana SYSTEM "./user/using-banana.xml">
   <!ENTITY srmdoc.user-faq SYSTEM "./user/faq.xml">
   <!ENTITY srmdoc.user-support SYSTEM "./user/support.xml">
+ <!ENTITY srmdoc.user-mod-standard SYSTEM "./user/mod_standard.xml">
+ <!ENTITY srmdoc.user-mod-sapi SYSTEM "./user/mod_sapi.xml">
   <!ENTITY srmdoc.user-classes SYSTEM "./user/classes.xml">
    
   <!ENTITY srmdoc.admin-intro SYSTEM "./admin/intro.xml">
@@ -20,7 +25,6 @@
   <!ENTITY srmdoc.api-argument-handling SYSTEM "./api/argument-handling.xml">
 
   <!ENTITY srmdoc.design-basic SYSTEM "./design/basic-design.xml">
- %srmdoc.defs;
 ]>
 <book id="srm" lang="en">
  <title>SRM Documentation</title>
@@ -33,6 +37,12 @@
   &srmdoc.user-using-banana;
   &srmdoc.user-faq;
   &srmdoc.user-support;
+ </part>
+
+ <part id="srmdoc-reference">
+ <title>Function reference</title>
+ &srmdoc.user-mod-standard;
+ &srmdoc.user-mod-sapi;
   &srmdoc.user-classes;
  </part>
 

[FILE: /srmdoc/admin/compiling.xml]

--- srmdoc/admin/compiling.xml:1.4 Thu Mar 07 16:54:08 2002 GMT
+++ srmdoc/admin/compiling.xml Thu Apr 18 11:03:50 2002 GMT
@@ -240,8 +240,7 @@
          specific options. At the moment the <link
          linkend="user.module.http">http</link> module is experimental and is
          not available in the release. A CVS version of SRM is required to
- test the http module. This makes it possible to authenticate a
- session with a password file.
+ test the http module.
         </para>
        </listitem>
       </varlistentry>
@@ -257,8 +256,7 @@
          stored as application level variables. At this moment, the <link
          linkend="user.module.mhttp">mhttp</link> module is experimental and
          is not available in the release. A CVS version of SRM is required to
- test the http module. This makes it possible to authenticate a
- session with a password file.
+ test the http module.
         </para>
        </listitem>
       </varlistentry>

[FILE: /srmdoc/admin/installation.xml]

--- srmdoc/admin/installation.xml:1.7 Thu Mar 07 16:54:08 2002 GMT
+++ srmdoc/admin/installation.xml Thu Apr 18 11:03:50 2002 GMT
@@ -164,7 +164,7 @@
   <section>
    <title>SysV based UNIX</title>
    <para>
- Why in the hell would you want to be running this style UNIX anyways?
+ This is not yet written.
    </para>
   </section>
 

[FILE: /srmdoc/articles/php-almanac-2002.xml]

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
          "../dbxml/docbookx.dtd" [

  <!ENTITY % srmdoc.defs SYSTEM "../global.ent">
  %srmdoc.defs;
]>
<!-- $Revision: 1.85 $ -->
<article>
 <articleinfo>
  <author>
   <firstname>Derick</firstname>
   <surname>Rethans</surname>
  </author>
  <authorinitials>dr</authorinitials>
  <title>SRM: Script Running Magic Overview</title>
  <titleabbrev>SRM Overview</titleabbrev>
  <revhistory>
   <revision>
    <revnumber>1.0</revnumber>
    <date>21 Mar 2002</date>
    <authorinitials>Derick Rethans</authorinitials>
    <revremark>In progress</revremark>
   </revision>
  </revhistory>
 </articleinfo>

 <section id="intro">
  <title>Introduction</title>
  <para>
   This article takes you on a tour to all functions that &srm.full; has to
   offer. In this section a history of the project is outlined and after that
   the different features are introduced.
  </para>

  <section id="intro.history">
   <title>History</title>
   <para>
    &srm.small; was first conceived in the autumn of 2000. It is designed to
    solve some of the problems often encountered with &php; and other web
    scripting languages that result from the statelessness of the &http;
    protocol. Among the first ideas where implementing a &php; script which
    should run 'in a loop' and handle all events. The job of this &php; script
    was managing persistent resources to databases and other resources.
   </para>
  </section>
 </section>

 <section id="overview">
  <title>Overview</title>
  <para>
   &srm.small; has a few key features. These will be described shortly in this
   section. After this, every feature will be discussed in more detail in it's
   own section.
  </para>

  <section id="overview.session">
   <title>&srm.small; as session handler</title>
   <para>
    The first feature of &srm.small; is a module that can be used as a session
    handler in &php; It works just like the 'files', 'mm' or 'pgsql' session
    handlers that are standard available, or the 'msession' session handler.
    The advantage of using an advanced, daemon based, approach for handling
    session data that session data can be used in clustered environments far
    more easier. The 'msession' module was specially written for this, but
    does not have the advantage that &srm.small; can offer; using session data
    in <link linkend="overview.remote-objs">remote objects</link> just like it
    would have been available to a normal script.
   </para>
  </section>

  <section id="overview.applevel-vars">
   <title>Application level variables</title>
   <para>
    Application level variables are variables stored in the &srm.small;
    daemon, persistent across requests, scripts and even webservers. This
    means that you can refer to this application data in in every script, from
    everywhere. You can define namespaces for these application level
    variables as you see fit, so that it is possible to clearly seperate
    application level variables per application.
   </para>
  </section>

  <section id="overview.remote-funcs">
   <title>Calling remote functions in &srm.small;</title>

   <para>
    &srm.small; can also make use of remote functions. Remote functions are
    called from a client side script, but executed in the &srm.small; daemon.
    There are two types of remote functions:
    <variablelist>
     <varlistentry>
      <term>Functions in SRM modules</term>
      <listitem>
       <para>
        The remote function is defined in a module, written in C. For example
        from the standard module: <function>get_function_list</function> or
        <function>get_application_keys</function>. The module <acronym
        title="Application Programming Interface">API</acronym> is quite easy
        (easier than &php; modules), and it should therefore not be a problem
        to add other modules. One of the included modules is the 'auth' module,
        which makes it possible to authenticate users with <acronym
        title="Pluggable Authentication Modules">PAM</acronym>, password files,
        or for example a Challenge-Response protocol (this last one is
        finished, but it should be merged into the auth module).
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>Functions in a PHP function library</term>
      <listitem>
       <para>
        &php; function libraries are loaded at startup of the daemon. The &php;
        scripts that are part of this library get compiled and executed.
        Because the compiled scripts are not destroyed after that, it is
        possible to call them from a client side &php; script again, without
        having to parse/compile them.
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
   </para>
  </section>

  <section id="overview.remote-objs">
   <title>Remote objects</title>
   <para>
    Remote objects are &php; scripts, running permanently in the &srm.small;
    Daemon. We call these remote objects SRMApps, or &bananas;. You can
    instatiate them just like a normal object.
   </para>
  </section>
 </section>

 <section id="communication">
  <title>Communication</title>
  <para>
   Because SRM is a stand-alone daemon accessible by a communications endpoint
   (a TCP/IP port or a Unix domain socket) we needed to define some sort of
   protocol to communicate with the daemon from clients. The first protocol is
   the <link linkend="communication.standard">standard</link> protocol. This
   protocol is the first supportest and oldest one.
  </para>
  <para>
   While developing the <link linkend="communication.standard">standard</link>
   protocol, we noticed that it had a great deal of similarities with an
   <link linkend="communication.xmlrpc">XML-RPC based protocol</link>.
   Although an XML based communication gives more overhead than the standard
   protocol, we still decided to implement it to make easier access from a lot
   of languages possible without having to write a lot of client interfaces to
   &srm.small; for every different programming language out there.
  </para>
  <para>
   The next two sections describe the different protocols that &srm.small;
   supports.
  </para>

  <section id="communication.standard">
   <title>Standard Protocol</title>
   <para>
    The standard protocol was the first implemented one. The protocol consists
    of a handshake in which protocol options are determined. Options for the
    protocal are the version of the protocol, whether <acronym
    title="Secure Socket Layer">SSL</acronym> is used or not. Also the session
    ID is generated in this stage. After this handshake data packets can be
    send over the established communication channel. Packets are structures of
    SRM values, the native datatype within &srm.small;. SRM values are quite
    analogous to the zval type that Zend uses for internal variable
    representatations.
   </para>
   <para>
    <figure>
     <title>Serialized data</title>
     <graphic fileref="../figures/srm-protocol.png"/>
    </figure>
   </para>
   <para>
    To transmit a complex datastructure &srm.small;
    serializes the structure into a bytestream. Above you find the data
    portion of a function call to <function>srm_function_exists</function>
    with as parameter <parameter>srm_module_list</parameter>.
    This data packet is send after the header which contains the type of the
    packet, the version and the session ID.
   </para>
   <para>
    A pro for using this protocol is the very low overhead; a con is the
    difficult integration into other languages such as Perl.
   </para>
  </section>
  <section id="communication.xmlrpc">
   <title>XML RPC Interface</title>
   <para>
    Because we also wanted to have an interface which is usable from almost
    every programming language, we developed an XML-RPC based protocol too.
    This protocol encapsulates both the header and data portion of a request
    in an XML string. The XML string in the next example shows a XML-RPC call
    to a function in &srm.small;. Because the session ID is very important, we
    took the first parameter in the XML-RPC call for this.
   </para>
   <para>
    <example>
     <title>XML reprensentatation of a function call</title>
     <para>
      <programlisting role="php">
<![CDATA[<?xml version="1.0"?>
<methodCall>
  <methodName>srm_module_info</methodName>
  <params>
    <param>
      <value>--session-key--</value>
    </param>
    <param>
      <value>auth</value>
    </param>
  </params>
</methodCall>]]>
      </programlisting>
     </para>
    </example>
   </para>
   <para>
    After the request has been succesfully executed, a response is returned.
    This may look like this:
   </para>
   <para>
    <example>
     <title>XML reprensentatation of a result</title>
     <para>
      <programlisting role="php">
<![CDATA[<?xml version="1.0"?>
<methodResponse>
  <params>
    <param>
      <array>
        <data>
          <value>--session-key--</value>
          <value>
            <array>
              <data>
                <value>standard</value>
                <value>0.6.0</value>
                <value>Vulcan Logic Group</value>
                <value></value>
              </data>
            </array>
          </value>
        </data>
      </array>
    </param>
  </params>
</methodResponse>]]>
      </programlisting>
     </para>
    </example>
   </para>
   <para>
    By using the XML-RPC interface, you can use &srm.small; as a Web Services
    provider and use it from everywhere.
   </para>
  </section>
 </section>

 <section id="session">
  <title>Session Management</title>
  <para>
   The need for sessions came from the statelesness of the HTTP protocol;
   after every request to the webserver the server lost any link with the
   user. By using sessions, this link could be maintained and scripts could
   track variables belonging to a user. Often used session variables are
   usernames or user ids. &php; 4 has an extension for supporting sessions.
   Sessions are variables traced by the script, and stored serverside. A user
   is identified with a session my means of a session ID, which is normally
   stored in a cookie, or appended by every URL in the script. The variables
   are stored on the server with the session ID as key. If you use the "files"
   handler of the &php; 4 session module, you will notice lots of files in
   your /tmp directory containing session data.
  </para>
  <para>
   While the standard &php; 4 session handler using session files is adequate
   for most applications, it also has some problems. One of those problems is
   that file access isn't really fast on most systems. And if there is a high
   load on the system, a lot of session files are generated. In order to speed
   up things, &php; also has an "mm" session handler, which stores the session
   data in shared memory. But as shared memory has the same problem as files
   regarding availablity from one machine only (not counting NFS), it doesn't
   really work for clustered webservers.
  </para>

  <section id="session.clustering">
   <title>Clustering</title>
   <para>
    This problem was the first reason to build &srm.small;. With &srm.small;
    it is possible to use a special session handler to &php;, the
    "srm" session handler. With this handler all session data is not stored on
    the webserver itself, but in the &srm.small; daemon. Because the daemon
    can be accesed by TCP/IP, any webserver which serves the request can
    access the same session data, and thus there is no problem if request A of
    a session is handled by webserver 1, and request B by webserver 2.
   </para>
   <para>
    Although this was the first reason to develop and build &srm.small;, it's
    not the most interesting feature. In combination with the <link
    linkend="bananas.remote-objs">Bananas</link> it's a very powerful way to
    have persistent objects coupled with specific sessions. If you only need
    to have session accesible from multiple webservers, you should also take a
    look at <ulink url="http://MSESSION">msession</ulink> which specifially
    addresses this issue, and is totally optimized for this single feature.
   </para>
  </section>
 </section>

 <section id="appvars">
  <title>Application level variables</title>
  <para>
   In addition to the session handler for &php;, &srm.small; also has the
   concept of application variables. This was also one of the first functions
   for which &srm.small; was build. Application level variables are a lot like
   session variables, there is one important difference though. While session
   variables are per user session, application level variables are per
   application. This means that they are accesible from every user session.
  </para>
  
  <section id="appvars.using">
   <title>Using an application level variable</title>
   <para>
    As example we use an application level variable to dynamically change a
    cache timeout value. Suppose we have a system in which generated pages are
    cached to disk. Although these pages are cached, the data from which they
    are generated changes quite a lot. To lower the load on the system, the
    pages are cached, but in the most ideal way the use of the cache should be
    as little as possible. Therefore the implementers wanted a way to change
    the cache timeout value based on the load on the system.
   </para>
   <para>
    Of course this can be done with a cronjob setting a value in a database,
    or a cronjob writing an include file, but both options only highen the
    load on the system or are not very practicle. Therefore the builders of
    this application developed a solution in which the timeout value of the
    cache is represented by an application level variable stored in the
    &srm.small; daemon. This value is modified by a cronjob and read by the
    scripts ir order to make a decision to either regenerate the page, or
    load it from disk. In the listings below you'll find the (pseudo) code on
    how to solve this with &srm.small;.
   </para>
   <para>
    <example>
     <title>Cronjob to set the application level variable</title>
     <para>
      <programlisting role="php">
<![CDATA[#!/usr/local/bin/php
<?php
    $load = `uptime| sed 's/.*ge:\ //'| sed 's/,.*//'`;
    $timeout = 60 / ($load + 0.01);
    if ($timeout > 600) {
        $timeout = 600;
    }
    $srm = new SRM ('/tmp/srm.socket', 7777);
    $srm->globals['cache']['timeout'] = $timeout;
?>]]>
      </programlisting>
     </para>
    </example>
   </para>
   <para>
    <example>
     <title>Using the application level variable from the script</title>
     <para>
      <programlisting role="php">
<![CDATA[<?php
    $srm = new SRM ('/tmp/srm.socket', 7777);
    $timeout = $srm->globals['cache']['timeout'];

    if (get_cache_object_time('dyn_data') + $timeout > date()) {
        /* Generate new page */
    } else {
        /* Use old page */
    }
?>]]>
      </programlisting>
     </para>
    </example>
   </para>
  </section>

  <section id="appvars.namespaces">
   <title>Namespaces</title>
   <para>
    To overcome problems with multiple applications having it's own
    appliaction level variables &srm.small; supports namespaces. Every
    application should use it's own keyword which identifies it's namespace.
    &srm.small; does not enforce the use of namespaces, it's the task of the
    programmer to make use of them. There is one special namespace, the
    'global' namespace, this can be used to share variables between
    applications. The example below shows how an namespace is used with
    application level variables.
   </para>
   <para>
    <example>
     <title>Namespaces and Application Variables</title>
     <programlisting role="php">
<![CDATA[
<?php
    $srm = new SRM('/tmp/srm.socket');

    /* Add 1 to the nr_of_users variable of the 'Counter' application */
    $srm->Counter['nr_of_users'] += 1;

    /* Set the timeout value for the FileCache application to twice the
     * timeout of the global timeout value */
    $srm->FileCache['cache']['timeout'] = $srm->globals['cache']['timeout'];
?>
]]>
     </programlisting>
    </example>
   </para>
  </section>
 </section>

 <section id="remote-funcs">
  <title>Remote functions in SRM</title>
  <para>
   
  </para>

  <section id="remote-funcs.module-provided">
   <title>Module provided functions</title>
   <para>
   </para>
  </section>

  <section id="remote-funcs.library">
   <title>Functionlibrary</title>
   <para>
   </para>
  </section>

  <section id="remote-funcs.cached">
   <title>Cached functions (pre-compiled)</title>
   <para>
   </para>
  </section>
 </section>

 <section id="bananas">
  <title>&bananas;</title>

  <section id="bananas.remote-objs">
   <title>Remote objects</title>
   <para>
   </para>
  </section>

  <section id="bananas.adt">
   <title>ADT</title>
   <para>
   </para>
  </section>

  <section id="bananas.timers">
   <title>Timed events</title>
   <para>
   </para>
  </section>

  <section id="bananas.interaction">
   <title>Interaction between &bananas;</title>
   <para>
   </para>
  </section>
 </section>
</article>
<!-- keep this comment at the end of the file
vim600: syn=xml fen fdm=syntax fdl=4 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

[FILE: /srmdoc/dbxml/dbpoolx.mod]

--- srmdoc/dbxml/dbpoolx.mod:1.2 Mon Feb 04 19:59:40 2002 GMT
+++ srmdoc/dbxml/dbpoolx.mod Thu Apr 18 11:03:51 2002 GMT
@@ -7,7 +7,7 @@
      Corporation, Norman Walsh and the Organization for the Advancement
      of Structured Information Standards (OASIS).
 
- $Id: cvstemp,v 1.2 2002/02/04 20:59:40 derick Exp $
+ $Id: cvstemp,v 1.3 2002/04/18 13:03:51 derick Exp $
 
      Permission to use, copy, modify and distribute the DocBook XML DTD
      and its accompanying documentation for any purpose and without fee
@@ -6818,6 +6818,7 @@
 <!ENTITY % acronym.attlist "INCLUDE">
 <![%acronym.attlist;[
 <!ATTLIST acronym
+ title CDATA #IMPLIED
                 %common.attrib;
                 %acronym.role.attrib;
                 %local.acronym.attrib;

[FILE: /srmdoc/docs/interview-derick.pdf]

%PDF-1.3
2 0 obj
<< /Length 1 0 R /Filter /FlateDecode >>
stream
xZێ6}Wm:@~K&&0ȋ[3[t=*J"# ð=>,YSEYZY:Yk7V3皅_/?x=do/Cٌz~?I޼EwV k_ᛷbiӺ'Otw4^~ӧ{i_НnڷùZpX-Uno?߽U{6oDčVUD{ {WU7g]-k< (s1 iB6Iiqx9jqfUT{=OSNu) 8q.<+Tc傫6o~{e5.mPM0'B[䈻U-U8b5g:n5I p)!ú*eymㄏ7߶KiYcmp*p닯V\zH0ORF4Lue5+#r&yǩ+Epgo`8O%*4*8g8װ`=s]ռuWvSE ͊qpxF'6)rnWdy ۩3F$yos~#=Vq k3Ե"CMOە i|EJ;(iA6ꆩ4 ϰvjS
b=0WezZ7'ܑJ?a݊dht:r<W^DdkT#S2`u!݅$YsM!U<(4l&RK2+=a}!!Š lkhQ.D+= EǁDP-Δ(FɆRP%P5&Z>r}tHU~ݧ$S{[('C4u`~w!Dotɣ8?#a{LcTsYbAC/80<ehP%#W@M\9oD=ONiKչ!sM`ZX93oS
P uKi/O̠
*IaԢhJIA:Vu/)
 6Ҫo+Z Q]UQ(@NƑ t$)l(4>S/lQqed!^O_~LK2q t$@l}YFq-  IZ?60H3חVI**Qk~ tᕃ9^n'&.boQS?)I@0"+%]1`/n3Int
NўAqN+zCH(-qt@v8HbvtĭX2JC? I_m[ |fD ^Qː<|+NZTVcl֘2R-?6e8Ke8hf4@9;
].$9d{8h#OSGxT1UE'PW354qBZBu $ic_F>Jz_ 0C{잩vP(B#B^cu`~}ܱߏǮ$q,+g! 8L"3"Y.{Uթm5'-:|dKE,3=تet":pfREPKM.|0r&+z&C8XQ 'QC ޏ5WU\hIWUgT ϊ~ߝ>u'b
Xͬb0Tl` 8e:_/ScN q_D3VW(Xd +zn 8bA=Lu=Dٟ"#XRkl)|KL,W'Sh#hQ'pI#$"S"1.DshOш ɩ$i|kف:
esOQqXk^LuMuE _zV;nH!4v!Qڶ=R #UDAH:ӟ0sqBA#\mg7kP/۲bݱa "zStL"m$4K5%Aӹ;<Y "H`ʏ31r8K@b XɾRCNL0r-(xbx']Hx:2_SJ ȥ}yYu)m;queLZ}Gc@Q:D@x{ "5;rq}T( E\N*#h39
:Ǟ FP^KHR/!1{|tvtacoO'#uhhnoojzԿ ~BIe]yOe+۸vS΅e$We
b*O핬t--4Û Kac}Z :+ Pߴ"Cŋz^o<U@e3l72DOޒW1 k?Ҟ^p2'[ѣ.Q mE 5
-e3՗h)5lG #x>-"H8Ļ(O*$!%j;N$-HgJtig\TX +\vn:'*Z]Dz ϩ< ,x>p 0Ll""Jl/i;l=w tHZ̍ omg ݛqx\OuFapigr? /Mk2{9@s?/ۻ=g^q 8KQn]x?scOЗR=vˊ=N_\ofpk yMʯy|/]PZ"pZj_6KlDD1"-=(%q;W
8iN%rζ>&9YyEAF4yLo rM鯅Jü`Ew7d L1ҫw43\//KfFG)Dl T#n)^zSfj( %3B*گZ?/* >Jn'UC s%p5 Z洗"ndGOw3|UDͮG0W/^EE_o23( VK(LC'APX/2#L)|th)`&LO> ~X؝"^XF:;< v2d&W-j~$ҝW_"IK\Rd s8j .4>=a<V]Ճ@:e)#\GRvwwK|+}Jזs H]ClN S!"ˎp u(W BB1fkj3_0 |k1 rMLp#,0)"[Q8\V2 + ÷ "oM? YNN>{#·zUu:ɏ]k6EEߐA<>BBCB, ΩUm~1FAHA',L,ȑ,Q%*".ͥPM'/ ;񉼟z*A/{]G^gןP1oqPQ>ԿֿӐ
endstream
endobj
1 0 obj
3961
endobj
4 0 obj
<< /Type /Page /Parent 5 0 R /Resources 6 0 R /Contents 2 0 R /MediaBox
[ 0 0 612 792 ] >>
endobj
6 0 obj
<< /ProcSet [ /PDF /Text ] /Font << /F1.0 7 0 R /F2.0 8 0 R >> /ColorSpace
<< /Cs1 3 0 R >> >>
endobj
10 0 obj
<< /Length 9 0 R /Filter /FlateDecode >>
stream
x[ے6}W2MÄ/;cm̬uo8fC/j㺙dI=YmǾ>0z;m3m?F |\l^@_㿲U0~޶1&X{fM[/W?F)HfM_"TV <.pFFli>+L#d\`0/a-3sx>&lY2nLV}\4&g~r fi]uSiI;li_0J62]kڌ0DPAz Hŭc7>r˸Pmw׹6(Z>,8KnNX[o\ke+Hu ,Ulm8_Uampuޔ[,Z٨8j\k4ge~xJllo:l]A5&;?0 G—
x| 6'D M~> ێXŹced_K7h |~1Fn!g7h#87OD0,/zá)ϰɰW0z[X-B̉XznC<SfjH2QDݱg# qf<#eKyZXzZV'S$VYAC9pUs:NTgLR'U,/&T)X63{ /^·:đy4Lu RDJP4 7ݳ;v>l?Hb] B8 ;Ctgo1k
;O~D&Fs+Sxg܏|"T D=ܹFEvFK;53k\qk-u8Mޕh`K\" gTIZh rvrbL<j9t"h:5#93-\܁dS<AGZ8 j (`q~7F|3؏oI8.ڶU7%F{?5) eXڕ4cDDUqͅĀ$ךgkhBoR]#XY"bR] [C 1Ifjǧy*DV},GBtq>Mf˜9dD2WʄNSyr:\~”/C7wYfd
Ev_ټކ5y}Ъ kF@f}WޯK<B-r[ Hy\ +a=\Xց
}uȺ;4zNe{@S]ae5N&FTj@n'7ePf-\[Ǿ#|]7BXk ڗJ R;;{:*J><GñyU(~f|ho6"i֐+#Q;;/PvP
e[GBՒc7
tҮUҠc_,G hOaY;G6]Y@ B--jY2eρ.zjU1 %s?shVJN^qoBV+
(emG<\ [vx=ђR-Y nn'kJ=P\{n#$/Ti?~`Sm|bee v :Qg#q tJD1+KnN5NV'U뭎F
R69|c҈MI4" ޞ Fzu2ۘmJ4e2_ ͔Vv&[}r֮s-x"]"?D*o1ML ; !mmiDpBkVs)b四C 0 } ]/ɠLhŗvsEkW?GvDm)0Nbgx+|;b%ɃLC`8R^-女 $.m.~EwTBr@v+76Y*uhRy{Ot4/aiOsuK&oVQ;-tl)yi(IDvk2u(F{ZZϥC^Ai#TC/k6m}('U{j2f3 /Y^36æ󖨄!w?#SE 4Vb }$R9_-^X kAgD8ȳhsT0ED1*A<S7-"ɒ9 L(Jr${Jp@llYb:݅@yD^O޵xvM=T!֯g;_Mw?>7=MmGϧ~zUCWKz X!~7zλ?/u"5\sܶU l%7wDSu~j^Z`tV6k0*,֔7h x-:J >7ς+kp4`MJ{.| NqM]Ciz
5=pL7Z\8 :5F23{%ˬGr$.ü:Pwh"1
%oU<jyN]ШϾeDƿ}(YӻMӮ#. -T "7vDl+lԍDʩvվ晪
!e5J=œ#6jJNf%*pp!*A2_'Ч[FҚv{STzKU˽~wQ?! CC-b
̤eB!64љ DPNwSz2h9FLۙ@+P5]}PҸĵ̘]iƟ@wC7 ;P@#e?o5[gπ
%[w:^7mjg
g5<>_Fnшh k1j#*^1M,f #zp"䨥"|*"?e?Սepfe lzg"|ULGcөuQsuˉ掾|{]fJ)|vUw Ah󐁣=JOQ
f= "ٌZwc;ۡ"c pnܾg@Pb|55$Wk5~R)dCLPyzL
nK[uUp,b-t!ϘP)ͫE_r3fmV8ȧ~)_c:/d
^2v_< JB<Jҽw\BRc)zZ휱K0
RC2f?'@>mB psADPcEB6· (
C\ոz\ 6>? PĄy /RS-Tho]7]qֶ1EAÙo&O
mjVlh$"Ub>έa%Dmj1).O1sR|%YgJW.xOk#2Qi PWyY
LМ1zLF լΡ2(UPFغr<N_R$Zj]?#d|\bHiָ{o2@(X%`vcu-9젅qFD?L On$@k0A7
< KJ0VXf}:4|S$H^ y.׳)2d+s+}>8s^>7Y hHRE{F > 8#(?QO Tx],NEEPô=O?Ո/9ן%W /A-R0{BYj(Ve2ۂBeyO4.j2qc׿eoCA枣1˫cV~tcH!g$CR-*XKv=W2^+m|dwUQ-|W LPBoeHB#hl?i $KlHk2SJ:n7J-ֶ#RÎ8a',8VE靖M;Qq|kXƄ >]^/"$eb/VQmp['~hҽ݂:6ljG
̆<L /Wր1Ex>ֿԿ?Z
endstream
endobj
9 0 obj
4440
endobj
11 0 obj
<< /Type /Page /Parent 5 0 R /Resources 12 0 R /Contents 10 0 R /MediaBox
[ 0 0 612 792 ] >>
endobj
12 0 obj
<< /ProcSet [ /PDF /Text ] /Font << /F1.0 7 0 R /F2.0 8 0 R >> /ColorSpace
<< /Cs1 3 0 R >> >>
endobj
14 0 obj
<< /Length 13 0 R /Filter /FlateDecode >>
stream
x\˒F+k*BƠU8${&"gkM,A"$AY@=Jh&z!u*Q|J͗+6wFm9mmvM.?6aeS
,fwܼ;S6j# |<iNG7V7\mۧcڼ|=_ ,o/SWrV
ݾ=}.o kLҺ=b 91m)3[sеޫ']|-zL)]s!SEid-ӆ^n_JrMSKQplTKo뾿8sVᘪ\:ZM0DU~{L E~uB9avߖ7׌Gc-BMbCk=>5X8V&B
)\8)epjuI%QX0FHc&.c5@¢-qh ҹ*@Jg6ր(Ғ5"yl/^pQV_D'pSǣݾ۽F$gi0NP规,ڹjǮ U7 eNO+"foVA݌5)Wp+/jXS [3, FA.JHybc!FAcw^XbBC@8n2cw}V
ӕ ؏8<zb`fG1\(m xFU+'e5f# ;_7q<~@yj7esw?}ӻ.ap)~j}w>ЧU- rd A*OwH8 FI"f@pl_5"eC SBnוM}A,gU@?5uV<
+˜v~ [ Ac ݩg}CV@ TÀ;R@f²p&ƪDиu |Ku3y% ~lkJ`K&ӵO ؈`x @ȧK%/XR2ზztTyttpn .IR/U,-AеQ+j`qqKRZ:I/2Xa8x0Koz\@3m;,K2ʛs17bl
n@ϰlL\5#9mSiiO<NZf)QH"2sdo2 5B]|c\ye%ԁ!JOnՂL
x4C>eo,h|j|=ltc &ezͷb,{,BWmeSk4(w:#g 8w߆۸OӃ2]+!Y..[f  ޿%  V"<)g^zV3 ;qkn,S9l
R?2~A_nw/S<)4xբXJCQBi]PeB
r@#fߍeEqO? b!ԥ,wDM/,َ7-n"4-%ص]'|h& `lڐω U'6aYeUUzaiB%>xwg?vкv4Sxv!i@HB3Qo@2aT۰ѶiPj4UU њPzZMmTB|I<ɤ19YAbLȧ7S!O@2JƲjK<
.%8cy\ѳR5ik)6CP1/ctjgMtjHBې&?TYirlFļ?q-df2u/sp)e ϋ~GGݡe8dF^XFYl$oA~| o+ f;{Z"<3ai@ȝ&Z37QdS!tdy:w7D^tKdc- _ws*,]ag!adgC6-7V(A΁К 賄6{a@<,oj=m7 /=L$,S]0]3`tU tK5UH=Ő`!gBRa5hWZuhPPK(NAq̫S흰^ $rFy\e(\I*aJNC)q8o;WI1$CiJ>ZFm9Ts@yE9l<YĜÈ!0ILQ5"rE 8l&Aih}ھ"d!Xj0X#Y_ d[RΎ?( KS;VW,sfBRf 3Z!<5@U߳$TkNY>v rmӛe;ti9Hcxm׎=4sZikGEsUz$aW5IRg{Y<
AXcd7cǠᢊj.5DZi!moİ2aZEq'ڤUqqPtl{eBeRvRLi0+*8ިŁL~ăaEױfV|xO*~$ǽN^Y
NX(y{]"PT/&Z)\Wx+EV.>fҲe-WGPf]pne(>eugm,>oh>?_,r^ BldܓHK^a4`D߬@=@m Bmbq<t%Mԃ+M HJc
Ro.mn݋28|zm_ly3ѼhΔ!C0Ljwn=1$Q|1p4ֻs;DVyw>/FBT"
Sd-: QEKkhqĶ٫v'rYixYtAi "t3}'"6Iu\Q"˗ E7Y#h8l$gpmLQ^Bp9l.22 *?LPb8ΈH#+N7qLvR1FT]jXiԔ:u*AUe=(o5sذ0)KBQ@dvT˱oL(H<Ib2m D޼tI& +c\35ÄrFk636w9 'mFWN*/X҂yN፡F6=* kuB$_= mݕB9pPa$

$"2 t\f["8]z+^ K䴟{bڄaCr8JtmriZCBaںZ36!S!`סϛ{@Pl>HO|W6 Q ~!Һ;"ۈ!.;qO +ZpkmHG`IC OhTrA -Q)H$jbXeT'1LUĄOqlEt8sqGmKŜcP`2Nb!WP
>hӜĩtU84ns^4[Lb/7j9u`WI1z q.<>mBB&,ǯlǕWLeJ:v=PŔF[= dqMN]Ÿ]MT Ta /W
*ġH֥Buyf\EA"SEĮӀl\HyU#v(J6Vv2dr6Ј?; N&eؽtĈk\R]KxIg4SٮNI?zOo.~c%?+Gv<wYpOC4"DNy<%ؖ421y~`aTkQSt Fe15"}@G
&Yo`lB vܘrA%KPta9AEJϙ78wD4S0g$KE/OHrjĿS?{HY;~N=T?䘛p_N#
ͯ_
endstream
endobj
13 0 obj
4967
endobj
15 0 obj
<< /Type /Page /Parent 5 0 R /Resources 16 0 R /Contents 14 0 R /MediaBox
[ 0 0 612 792 ] >>
endobj
16 0 obj
<< /ProcSet [ /PDF /Text ] /Font << /F1.0 7 0 R /F2.0 8 0 R >> /ColorSpace
<< /Cs1 3 0 R >> >>
endobj
18 0 obj
<< /Length 17 0 R /Filter /FlateDecode >>
stream
xZM6WaE|䒲M%qVvrHmIS7Fz}3sŸy}7_lf_ V]폢a5ի4?~uCuVЬa $~qTcF ,^kL[8"f8C ̘dq>΅E#ڸո_ Fe?(,qO;4N׳7VƦ_ݼ.mY&#/9cΨjC̱Fe~(MΫӹf$vԦO_qs #tա揯#Qepi"ql{FUpL#Ӻ< A#+ MF;ēC?>l Xt#D4xO(c/{G<y'⨱Fhg G aF#eD~3> Ouk9BNI1@>[3 2wDFP1~<n7|2-qJFh쾛~c>c4B  3hѴiG=E /[ۚt[/咖gL6-O} 7כŲh}8l58Sey]f3%xk;[n>/^]QAS5=K\xIzv[ ""OkQ͢V:[38@4܂VoRb״iWTRF׫ڹPJ4.?P'`7/\4Ҹ%H֊Ӓ<[N2tt > µjI_F+P%m*Ȱ`k?%bAyt݆`|,_@'q2 9?f\uDgWYJdxpy!
sf[㯳^Իbn;|_3 &ԇ3~Pƻ`f1
:϶ȹ&}wC8XXke"@$"
!<ʮ8GH2@7/K]h&A rDx1d#M)SN 3E?Bmf*DcR_OeqmiDDY`mYlJX,~rqδ-ԓ\(d$ J62YZu1 8BS@\y/TDIuu\3ߒ/ 4h| C~=Q{$]cNEV`P3@L W`T`<v8|Ov7: 96$y0vaq hF^8tG7mPu,'+Ă"y4Lǽ6ԐY+'DWDqUݮCWn-(&ǹ{dO+ mtEc-7ggB$rŤs@ ,?K/J+ne͗߼h8Ze8/- ћQ>EIeWPc5atLJZ ÑIϓ<9<Kt)I@؅4 YY.9 He@*aJ=%` \R+V7BRS)Qbd&X= @@@d{|j#M脼-g-b FNarF.%԰NV0m8WejwDR4YGze 8(Vǻ2իx{"j#rb_lO}IEUe;"KW x6M u
?^N&#AONxr"8j6BTu35A pXә+¡N0r`hlv>?P.&SYgT$^Ps'tm4MSF(虱x;&9nJv`7e%[D20Z'ZעO C"L4a. { @3ֵ 8T]$#qf4nt`E
nf9LLd0!cP?m/߬"wϥ:JJ×d'Z/.F{3 ^^qW9jħȌ3X6n~
]kB>Jh9_*|ZkADVy= kC@-30esu904>zzE'qzjBA/w,Y2t{C?^/㱾5S""t~?$qKڿ@ܒ \c;n?2Ӝya1%y~ !k#4b,bDepvWr78ƷvVlPd:KB"uB0 o.?PN
qJDj)R-1Ҍ趙g%BI@Rr CPSI6MdóC%rߎDh3c#^̯# ~2Rz
hh7!i~u:3RL>F#K6 l&{!\\_o.) 3aDˌ Kgɓ`kw_o9I.ױk ɸ -V9ں9]佡im!%"yE|Du& Uu
Dw`,ļײy̌\˦,EB4 0,Ra=M$Z{4;U˃j8NY킚M8Hiau-Wv"V`qoF pՓt"qFcn)f9.3AHBY*Ntz%q*ì2c^6Ğ6A;|G̹с(l:jPq8rA?0Ζs]z1蝸K %1Rf$"'$NnCmh]P S/0"@uQiC;^A͗~icO6
endstream
endobj
17 0 obj
3396
endobj
19 0 obj
<< /Type /Page /Parent 5 0 R /Resources 20 0 R /Contents 18 0 R /MediaBox
[ 0 0 612 792 ] >>
endobj
20 0 obj
<< /ProcSet [ /PDF /Text ] /Font << /F2.0 8 0 R /F1.0 7 0 R >> /ColorSpace
<< /Cs1 3 0 R >> >>
endobj
22 0 obj
<< /Length 21 0 R /Filter /FlateDecode >>
stream
x[MFWfjC\&dɳ3l)]$ԍH`QUd%;%=d}d˗Y׿}mW;d}CSv|Ql_jEc't-?7ocß~O}Ӹ?qz3v~<ߺiC;ԧOyS}2"c)XHKc7u\Vf Z/ۋi.ҬQ?a6UЊ7\ˈ(,hmyqxvrR`"i0oNF`/mB7Μqf7ll֞q_ PUdmokTŽuzܵ3Ƶ5mt6+aaV)$@x}aCqtZgVNKX1睑 oM}b^ƻ0X7!p0`Ю6zb+"族?~( 8&KC*89q<C9/id6a(B7&Pprv+-i,x5[l-] Q ~ُSykW /MLG[_JW{8~'6DTx<ZfEf :N@dFnĉa RHo=2ҵ);]6qV,Lu q
Q}Wn;La kx8'4:V4(
}N _nwq21sZ | D>y
vXg#8h"W4 3iz|UD}g"2i)oyz ֡@Yn7gʉYV+ZڅwCX2ãۯoGc4Gcq<Ajqjڨ#a&¦iRUUATRp x6 rRE|80mN>M2ܼj?3_cX> _8҂iT H2$ DsiO.hkSL%Ԓmi)#%E WUĆc HsBfpF=ʟ4XR̢bI
;^h:dN q|처93U D.ZX|׏sP1ZMHle,h=+wڦaieqC<a*r˹Ƌ|QIJ Ayc8# S76VZ+)΄˄sǾ/u&_ khKh f,!cv bM]Ch#f^W9`+izwʸ7(C <B)BpB!K wA$t1Wa|n
m'$(Y<}#Y0V-dh&׃Ѻ`$g|]1*d{RT"Ɗke`,$ rȆo(dBυpfUʌnCvY`^^G#PB37?t I ƶ
gf|n~(WCI"ϟ20 ٗ!HZFqQʞQճd=.
jhSZMT(;L6+`2$"$zlЖ}Akw]I,Hِoj v_i\jT'!MIp^E~^eC^=g,N"jj 2b %Z҄>D8_#L~&JojtVdyax!< ;_("Y8@z SDoFa 'V
dXqЎ+X86X)/p$Ҷq0O#ca;DVXSWP~g6]αjAT8R+,/{?2vyP9<<<d!X*jg:/6E7ɹeV(ȕ.JwxȄ _6%ͩ81N3@Ql@tki>Xx9GhZb%.wԨa!(V幾(S WfN7zTϗdx}w]J}՞6G ^O^s'_fCeaju!q] T
[vކrgص.ynl×MWAnL 7b_aoF_Jcgܣ[8W@(/ι٢.g;7*![VGMWĠ*3:~"E`M"Y{-d>xۣ0C? ]uC* L u*Ҵ<j3WU+lP?mO6x$B2V܀;EL-`"s -M\iɒKpMع`p
Yw
U40+RVS1:9*!NP`˶4 X
;d9C3L !a;aX6
ؙP;
p1~mHrי[*52Gi0%K]RC?  6B3B1ʚz6fi>-jl@Bf{ ^,G}1צm B'ȴБwFU84(u{&ktcb+Ζ}w|$ =1o\U«,\KGC%Tɵ:UbEV@ѪjgY@gPh1TW:
]&ȷ+`j6d{VU>;|kL⏠DPrj6AI[ 0+]ɀZ ^lѤ5`'9g{.2Yqhg|/~kV\P@.a7>*Ù'JÇa׏?R5]^%DX;os$#sGPE ^_>}C(Up9JSCy<~'pz@k[EAc]1U_k
',!El2]$';,S;î;okW=g rO!o?OTd㫈^㙥@67 @ZaK--9%KU#yl6b™Z7<努3kfל2kByԜX W9@AGY9 5cMw20dc 8+⭛*04e'H? x,@ s@.i:`
T-e
xބ|WyyyS>vc=Ϛط;vyݚ2&tP= ٗ\?8٠d;dux|8.m=ـ4$,%E W ۰&ZM0|a&,][i)g|O>gn[ڧFƶ{NkᨂU2eQe ^ O#"Hlg;e2JZ\
Ńّ/Q P~rn^2 ,LQD &7D:Z_&+ǎOtfiwk!!1bHH:> 12 n7DכUDHDe>M+NsIL.>@޷+9>Ͽ=! (e#݅^8(=B.f_??K%\8L+b3pK|;DEզ+o&*k%YE_X"eF+Ypz2ڡGrJa"KyI'iB)ʐ:KzKǟ)/gR{[rMiwƬ2
Ǯ?<aO Pӗi*
endstream
endobj
21 0 obj
4491
endobj
23 0 obj
<< /Type /Page /Parent 5 0 R /Resources 24 0 R /Contents 22 0 R /MediaBox
[ 0 0 612 792 ] >>
endobj
24 0 obj
<< /ProcSet [ /PDF /Text ] /Font << /F1.0 7 0 R /F2.0 8 0 R >> /ColorSpace
<< /Cs1 3 0 R >> >>
endobj
26 0 obj
<< /Length 25 0 R /Filter /FlateDecode >>
stream
x[[6~ׯЛ;W+ɼ/gpp L+:-Hv:{ HXU{s{JcE,f(Om˿Y3n?xu o?cO ~*%xE59W~XUXn4ʏ動db2V٠XwoB2+RF
4\SkD+9ۮ%_:Y)Nr<q>[Eno5-seE8ͯm \(S2.rR,菙X<w}yC Do a ЋE4^}[U„f +>uIbNTKt taҖBT,`{jnMsTUpt ɵą>nZW*xnNTNOki[[<;w}ǦAK
\ xDӞ~RiQIjYvL}e^xzM)dNLTS39P3I{eBvU2@U-u`7K']0̺TNs<m3uC?$=\t 8<5f+(a+VuŦُCDP&%2 nfbB)]Am; +TcRVW2|桽??=\s-p]%;7y}X 7zb
RAԴFʜVԂY/9y]SNkpg2`qb<m\<U-0Nak`Nq#Bغ]A`. *!}j+ UFZ(D Ǯ$!мp<p1+[PSrqQWM,p(r„8w(oݫ cyzj"$WRCe9 @(v#4ikAݩWfJl.õXҹ,nsb?qf
cKthBИ jMi]{.tP"+E/x g1]?O'Pc.PY9@Dyl!*>tvnNyRXoݴ#" 2l񹟚?@5{^uO=;AyId^ऌp(Y71hU ϯ<rqZ"<df,V=M)b_p%[Jsa
\L5 x@ʿ4ZbEwۧa vfԞ|X'+7ep(Ȼ@O D/ J`șȄyfquS$T͊uŦɉRTb8o%r%E`r|#>VЩm<1 zϧ[Z-np>p\*wz1ZD(/L5TQNd\jb@Xl1*k[]_˫Ms3W@sy$6sj8Za G&WL3``W!QyrJwӴo, KT~<\eHf{)wrMrWk{m3OFض8w0ZUi~ kUĬ㾿1˅U~$x=| $X/]o|:cp2tLI"6"pUeX:G"^93*5
ȬACdAiqd:SUx0 yPd̂DQD:uNJ$RDtyGDdaX[z+8VP""XY9lrِsmz t-H]CV6Q|Nd#5Ş~ۆʅ[$4?훍 )!T<rV݋ Ǻ5=:1ϔOnSOVcC.>\)ifW(=u-ݷM\:c,E@8 ewyAFZ@:CG9IrAs=>_^s/11o*WZV69?۽h`tcfƫF
~aA.˖u v /_y0~;Q3Rhs%T(oS #o
0z ZAy#l {+:pQ&WPAZ!YtnGºJY1- ۍNT:2Ԝ>379X@vYD9Cux$|f" HH3/$CII+G0.1?v"~􂰮p(olhze9<ȹh
؈ f$Rj ECAeޝUp'4Ѕ1VԻ |h 2H0f.qP5_)asH"aV1B|ϲvX÷n7m\B/"˰.Ƅr>f@

@f ;'<ˑ5Wӓ-
irpjo=1Hlw2i{`H/Sv[**JJ⸗57޼{Ioͩ$Өo^}xY#ߖ>:.2)xقs-_h,y{py,9 >gV96)NE$NW.b|MLG}F,lWl4PN@“
[r 9X"`ɜOP+*XrdV2G5,DM9]? eS%'[E?^q7DG|P=F>bxE838޹*Ԏ FyI%e^[[-_$)Mjy B:vM$$z (.1 ? uLT<Z+_]1W)? 8?<cue:@01NB Ծ n+t9H9WZmm
5^: pZA!]7+QpuxLugN6Cq A
 S Yl#?$p.n
Yx#7Ԣwvfg ߅|cwp\3*}RK?7mz"je#=;ԟ,^b0YJ9|;|N`Ed%.
fwD&؍|bǂs7?Y/0l[P8~d/o)Et>vlX7?c‡C0o{(x=}uv~.)H&Q I_ѫDЩ¬.慲dR23r>p_Ȱj?T2B%76DϛΗa40l|.W0Ö䄤aӮ46;LN"Wo
ҀN,H[߮ӓ+mV2BylM>#U?xx>oc~8e񳩎I"9{79E=<fG+h<[3BL=Y)h@ަ|.]ۏS3
endstream
endobj
25 0 obj
4334
endobj
27 0 obj
<< /Type /Page /Parent 5 0 R /Resources 28 0 R /Contents 26 0 R /MediaBox
[ 0 0 612 792 ] >>
endobj
28 0 obj
<< /ProcSet [ /PDF /Text ] /Font << /F1.0 7 0 R /F2.0 8 0 R >> /ColorSpace
<< /Cs1 3 0 R >> >>
endobj
30 0 obj
<< /Length 29 0 R /Filter /FlateDecode >>
stream
xZKFWfKyjS6_8gX"d/G78G |2Ϋ]uZl˯EK>/0w$g?f3c]i'[[sS*'˻#p\(/EyPnzomu(_w4-6ܟ|?f.̊b>Ig涺-PFDTuOXsJ3V8upg>º6$ypL$o?RjyMBwn?E$Ofh8v8Zڶ{.v^A0TOs \tYyW}fMm_}d(;6ǪXZr׆p2¾9}Cm/G( >7O_Sh'P.Y|=X1 J͔aߴ #x[fufHpYPv /$t' IN+8(Ƃ]N%ca.DH{Z8 6q M=!r -Ћغ:29 $[+%r̳)r-I+Vx9+H|'Bh9lk
sX@e29қ -Uc‘+uu_XRG _839 fW8CUIXkuGz̐V0lMKG{cu98
-'],l%("h(dDDpe1(_Ld6١+ ]G䏌
a 2]ja4,3{V><4P!3G_E҃LwjKlJa&ۮ:n# (%8TH&nx]\1 q2?<l`J;%D2DR<砥jd4R=9B5̾sԮջz M†8Ls
j*{*ׄ*R$Რ0&L/Q&J ͎# M@- hi맜VP5bybPW\!|eH5z *$uSxxHDPn7~Bqz3QA,qTMOŅC^GD PC$ feiW.o@zH4cifÅ'N@/{_nRb>VH\
4 rl/B
4d
::Q\nS:,xQ{y>@rl#0Bj U3:+2,9W55wYr湻 qe(PGbTmYHἽmcVqv|z\/- C6{/9)٧"
h!-V%ULEJ(_rDH-f b(ey؃H&/
Qܕ5()OFt4JbUdX={xz3@r :NF d_PR*
bצlcNR&4%q("k|pfe)W_-oWy-%&QD(5mKƱ }&rFych;vlڇ^[ƓƃE@~$I?; +4R ˛xC71>;I3,33SȢ W͡3y<;?5!Q1Tׯ(ĔMƎR3vC]=^ZlVl +˲R>+\=}|2 [*I}1ёHy1 #٤bW(m
ssKH@<*fqm;!8v4Vi%d"T t'at,S(* 9!-993P+
e'#AO2cK}ƃ02u& ڀ3Wa)E:AǪ13Z`<L.eK
p~K`<*4D. /hkg]H @}FuXn3r ^.;eQ) 4]xmRJ< 0 sӺkV&F$PJU%b R9'SM5rAanն*O,U=3ZaJN".lPiqN\)0?Z){2CTEhADXSvcO 0@YZI3EqXBzS8Q*wh#S(~"c^d~!v;TP12CyXxK]7:fծ83?o(B{qH Z{e1ZQBzauj19皺ś=rƶ{8Lֺ\ݡV{\\)Яb &n9 pGfn%*<oReg`AlzK*lֿ./DÍvSwY(hoHHRNj[AС4g}¬l 4ve :/RGJ77&J>AW{RdKdwܞOCY5>r!vqC5 (z 73|M_>vݎ>%?~:4T\d7CmHV39qb"n@tޫ9J3Kw:.'ϸH3wz_hjʍ-sw$Z3n", |K~xڣVvG\Iar5V0wM2bn:b2?Bl* V7sxNڦN&h"BF5( m}G~/
R}:pT-)uHA_Hԍ:)
]`咚`6mFj
{9Zb3xQWK4zyn-z1y<D`}aUS0^bĉKT#&@tf}ruU"xiᙈ4\@Ob>ZE'{NN%kTfLdhu}:fQ` :+?EXl_l ],,$JHs :^c\aq=
j98^nƺZ(WΓp|_:=m
endstream
endobj
29 0 obj
3579
endobj
31 0 obj
<< /Type /Page /Parent 32 0 R /Resources 33 0 R /Contents 30 0 R /MediaBox
[ 0 0 612 792 ] >>
endobj
33 0 obj
<< /ProcSet [ /PDF /Text ] /Font << /F1.0 7 0 R /F2.0 8 0 R >> /ColorSpace
<< /Cs1 3 0 R >> >>
endobj
35 0 obj
<< /Length 34 0 R /Filter /FlateDecode >>
stream
xYr8+ʆ~d3L3Uq=M6 [%RMRqsޡ/EWEwXO=$U?ÑfC!5._A$⚡
#QtXCwN3SGWv2bB=
a,FDm7fm%Nc0aM$Y>Q A]C 8zc5n\aai"KFHuuC†%kvB*0$/*;jC Xc|ms#Ba",JWoU:^-^Gg̡'Dp-%€wM̙fd i/'J_o>~xX<PLV@+!#"(Da–,WX􎓣OVa!D@ZE$MEs,CVhHS0 ^Spo f.K$`|ΈMF!$P)-j%~qyv@nhtBBB̖Db:t9GX<cOR'(88sdaeI"B4$ܸ4z׸=[0&}v{]]@8Ou=Y?/uL1DSV* ǚX4|_ϐh׋|KАG;Vr"R}.48\T3j
SjL$
]Sy|02 Ii
DMd)H2Wl$|-X71o:u>eh1 W0Lhywԫ,a LQW/k'%8(
'@W0JCQ8ߌiR, kOCJRnM('Dk?OYrXd>e4f} d:
ȓBJiJ*[zA][Uh9*9Ԡ(!ء`FB4'ZmܐB zqp_W/fuLDcd~dد0tj >)-
koCv_:EPdvB$p Ctw>C J&a]ܔhI>S߻qLzh1,t~WXW~ϠG-ECV7YY!F~ȃAON$Zz:4u|4yDtho휶*9azpCUQ -ل+7vOǾZ-#,4r럳NG'н7F1!9&*E)4# +TL342t@azݡ9pC(Hfp}ل߃Cn[Ti+d:Ֆe:m[^R@wO^n.&j:i`ߙY.0,|d:XVLp  tr4/~ZZ\;KhۺnXaKƺs*N,67]T/ bBA+UQ
arA[vYc DW)ozZ!Y6hKRK_1ZHfn^ -T%u&;b3OW)Jv!}̨E'5,P?4=z X
AP;ج/ixLCSYTBx5t|h Ѱ*gTRM'7;88KK7մ0X0D8-w/m_{Nbʆ*$5$48kS3mrC/"汇0$CKT1JY {9>$|wX))v{)\ڨip^uq D>t-|F+Dn`Nȉt3WW///rwuWFa߅`酖@‹Ah޵ :`?N ֓/DbqSnm"U~*D5lQMcpm<ӳÄn@2իX~_~z.J@x`dGM1~b>z+u5c @>Vo~8,! LϗrJUFd挏?0i?ӝv%\A~=? mD @Wn7O1|ܺ;HϷ 8kG
endstream
endobj
34 0 obj
2317
endobj
36 0 obj
<< /Type /Page /Parent 32 0 R /Resources 37 0 R /Contents 35 0 R /MediaBox
[ 0 0 612 792 ] >>
endobj
37 0 obj
<< /ProcSet [ /PDF /Text ] /Font << /F1.0 7 0 R /F2.0 8 0 R >> /ColorSpace
<< /Cs1 3 0 R >> >>
endobj
39 0 obj
<< /Length 40 0 R /Length1 38 0 R /Filter /FlateDecode >>
stream
x} `U=^ToN!QDQZY]Q@ D\Ϲ՝tP{ェZn{|
0`EpާDccP{q)w_W0V yȓ0V81~q矑-)g0~@wՄ)y󬛻KVN< ^|L!55Ιf0VjƏjь=d5#]G}jι`z{^41/Pgg^^>{cU[{ZsNO?1<gy̹7d߹cϏT08ǫ2 vM}tc)獟q1SΛ<ESb$;|a%oK6Qާ>4/>˼O }FOX#~jşOug+c&Dt)xr</݊eC2#X8Yp>\7|o|Q(zJqW;+Or2ZI&ݒ=='%/Hޙ\ GAς
(^###G%=c|(T Ņ%(zȮx[!d9 zP8FA ӱϷCosO+׊;PQn>GddR+|o><.碟CmڶRvy&9omm?%;]K[WZokui-n;aQog=I\QGM=f}4sM[ec[m`-na |p6?w~WuM=[Mw]gfÏCQYy_^xr?]沧MSv%cKٽ.ଞol VwO[d3l 6٫%2gl+{b76{j]&3Yv6;&l
;.d?is6].bl& p}Şߔ6``OJ7zA~5Ps01'mcP8 @= GO DZO:JG&{6;8G'VZ.?4ċb.$3ra\sѪjzW5p-\vv[;B `,a KVbأ1fX8#H[}4'_bq8s1Y4U1^-.Tq8CĔM *⤎c2̇@vXYE]sX%X.c R7`lVzb֋c%lv;c嬂U`vbF1l,lyIhg9-Phu^y&Yl+Y-UGAײGn`7O-` "l VvUw-G_\C?}M7f /Wz7#f*A/r -"[uWTU*|p<B8ų찄[Z>+Ӗ9pX8&pLH0CF`
F E0R\zOK@>7tX
c XF"Wa=~P Ez1~܄Q,GA1Y3dS-Ț`BFtoo L0q^Z!b -,KXn -aЊ@KpnβJd d =Kg+Cń,1[WJQ+UfZ\#׉ F1_, MA,bE,'qK-^\Ah+xLY xJ<-kZxN</։&,֋ F|+&.ߋ?NK ~n*Om
USYO|AC9\*׸ nr;<R%<<yx51{xQt=y/ٖ -|?ލ'ywދWyߟ䥼72~y^<G|̇Cȶ,_"- Et!h0<cgXqxixZxa4A3 _ct|w o?^ ]?`ѡ I
Wo_Mx ކ ށw=x6`;|;S >/K2d %k,_g %G Kd/6&6wfJ'V&7_śmx_| >!1-V~w=|_+}~Og?˟u7|_/W5:G[mow{}oGco'|?_/y S|?NM6t/w Dr{BBbBr}B.n؏0J,L(2}/s{elK4
e=a fo
H8
/;X1>JP+L@[TtaemGp^nbbwvm:rwO"Jbdv#nhj"m_mvmaЪWcunbO`.Gߛ}fjߌ\o.gzV>mn}ڙJ_q2e\ ]l0=m[.ù&mix:[/dmm{4}han̷ }a ۂ7h}rԵx| *߉gWH{
eik3G]PC}t`/Fa={<`3 [{b}EJܿAe}.=K۷WqϢ}
{$w%?/7ωE# }e*G Ԙ;pLANqq[x4%,rtc+YrdVq[^vl~rpR£ƎkuˆB#Ƽ#

yC:jlr\s</ȎAmWN`d~#;aDc7=r/mm>!5J6FdW voT6BoiرNUV9&w&Jqܘ9~I Y?aD ޮ[VZ6~^5e% 9 >d+93(0n0'5/PHx$qduګ1,-}Fm`.<15Kmիv߸qcO(bW2Q4]>܅7$iuܐkANՌC
1sڂa*i x[83I?k~Dڢx7ll#H_H;rTDjdO,l.wh- Sǎ{]'/T15v etd̠# <5}ˆ4±Qރ;gRo g$ɻ
JڌdgTJY"0Y=#Ͷ|y!C)LS?vu&G]?esOorFgL &rihHf

O0CcGGw>Ĝ"a #gHst|r1h'6Bߧb#>Vߏ~'Ti m Y9;\9~B's6Pa8ٿ\qkCUhTzj !y*Aj I$
FuU#NQbѿ?eDeBESݗS;\N'SU[ bo| A#`#h9}]_]fgw(tHCgIvK9p{OzmOu 3dQy\uw,P5@nKKz`ؒCDzwPyY_ Zq_ = {hheBο{Wp7w){)"z_ߊ;c9ed+ax}`7μdK/]]a6{f\c z (EJGWܧwDx֏\nU~75A>I]8gݨR,WJK /۲jj6e@Kj'9ኘFMϘq{|AWa~WtnR]N Q0#{
M o#ofUv~9Hޯ>wRκnu?vuLl)S_s00St0+I^^b|?`?8s.✛]0q U8>#!jt1~<Src ]\?'uKƵN3]CyopҪ}>Pހg
q8
Q\/Pn2K"_O%׭=tܰj^s>1l5]k0g0ـTT7&7HNR.!U-kKU gW!%E
bΆ1cvkk9k
gzQL`FzVK`]7;)?<63#c(;nعs'ILE= 6<'Ya D$7(g/Ldsc ݛx_lZ}Հ*Gɟ%_o~pn{OfvvjػI8B}qz052 sko1xDGx*3|HKyT\K~`<˧/zhEB+Kd)7]? [["xNQ=ٽ۽_ma(Ɇո#B%\8\(UMb6y:e{&\V ҿa?O~!_Q A/w|(^a~wS98ƫ8D FH \&jC !U !  q(-kތв.?m<[pȭoͨKj 2=_yQ[^$V wξ^=cZ^hܥN{2V=@Z)ʪ;{0u98LXxn=>
.*l ũn|^r= 4]CJ0?|Bs"9彴J\?/ȇaPI$7[B$ O@b@QMO _N>_E2tPAF
Ja޼ ݿ-x Lp*{s
x!+q|׿B;mg6zTVrߎP?@t?? ʰɨF,&P_P7\58g`aTy#enҲ24Z˪ـr|UUCe8qYFRBeho~\\(}n5o$caǧC[b= c%h/P׮ <Ӳ.S6#VOnmgCG7,%Y,a[ZbN]wx p_߽M]TEY-KYie ]`b=n ! ΀g~h(ZΒPb#b`XlDOTh*<5]etCiY'o*t:F/0T(rtfՀ&EYʂX$dJ\s;/ͯu'7\9Vm/p߆zYwOXvHƵ-h O5ԜhN3kMe:@:ə,IihQ5tN0Lp:čZc! ލj"x'>!NY2RTjB$(. O&IH~IWczV,hğ[z`w?V_N;Nh V!C zE+6YXޱ(<ɡ. au jc;b^fs6ͮ9L`Pt@ɵvmwО{:laA8w#el0l=.1za؉D[66BnG^DB&(1;ٽDW)8L w"j?w'p),HΆނldad]37LƋGyV4߹;Z?KrtוyҍW>Gns:9-]5a+!
:yѷ1XmQ0Eđ~ AdA/F
3\rF.#0ѡ%4E#zN<Pu.U!#yv0t)awu(CiT5Ft}IB*G8';(My
zdPV=uWoZbo| 9x͛\v8i
% ѝPJo^1Pݣ&3}RQ.U;7?1ZA6M_83>M j01ͪՖ8\݁VEU!vnPA]Ż".z2tR'_|z2lvSj܊|sQt&L̟LةCM`z`S@$L=_Q'0(4䆜e9a٫ &[ 3_W{T`9݄Fƒݽ٩4Er$+N$!we'P#fV<bs)2SE H!╊e" KL} E^YIHz0/4TMAYe!t(bPL&Su|.R0gTNqY&ZKᬫ5LDW*
SBQ ""ď~k~حni^/Cͮ3T"IM6p .^My?48 T%)st5"ĂA#{^GE9_f""[3Ne*T$T3dp&K0'vV[(J zI,/ xM#)B$%O:}A|Ku/Vc/W2p'=li׊W<49R̮i{-ގTCM!L a7&Pf11>t/ƅHnt+n0`H?M<GL(?c҂F jL_Ѩl|Caz,,#w;{T` 5<q63O9е&q7wgCgFS$=)Lgj=]L8m=kw昩·`MgOԛ$auѽ"#"5E8eQ|9Lи<b/סV_ׅpf^ӧm>EnIb\x=Px YQrX_3"
~HN5ط7>n8'IK 9.<u YyVfU u~~o;ob5n磾e|d֌,)^#imjOYRhIKw?LvTj?&JUtcDii5hVf $mΒ1vgkR Cpba0a`Z<~>ҼMsB D7; 춁@7<󎱌aǐ-윙=L2i^A
0fN̾H)Lf>r_*S7p;;qwB`g^zcFS`jФ7OKmR
.P uUc.ү}Ug ۆ S 1Lל4L5@.O+l@i+儗ac~oCܖ'Owkz1O|jB=iҵkj.OMoʄ:Ӛ 0 s2,>5Ä&L!,(չ, &nQ}VT!¬z* D0cgI:c* I L(К&>O^7GUk8%8^ي.SZagȧ.oF]ԻZ)u;u$N&;KaOmQ0,;j Ųc6h*Ǡb@f\Ӎ825X/ /U!,di"N\#0\RuX@;l((TZ7%;<2t[Ǐ ]1M!YoIW@b.-
Qูe[uOE?V*򇟎L~N 1tא GO #ZP2Ulʇs5u6p6
42BZU/&b?b_=rk*emOWa<#L|MniQӐS+k5mb<<?cYd {\p{v߼Ep=Ž]잺~CQme8;[qV)h"GT h/kGFȋcdarɍ2A9ZM>+(/s0=|km'=OR7<w/_:<ҒIZ
5wU.#Lt
c([l8c3Ig)Rɼ)!I*/W-mw*mƭvmF#p7MłF !poq)!i <,6.>%HGa?TW ClkiDMEt
G2m(e1Ϸ HmՏyoL͉p^fR"bӕLL*!< *aRhɴŒڷ.r]uj+ O=rkVb;Eqmо
K+rrA% .,Q1k^k<+L
+]{Q&gw5 Ϗ;
bD ="zw0uE~vUDmfwHbE'}̪Y=(hkY2QTC7Qi܏w\p O/ٵg>?kk']nba.=iGrm FuyIjLWST2GY
K}&ѓq$-}#hŤ
DXyֿ+_]-YǷGS#llj@Rb^>`@EH 2udBDm>3h,襨^xHuHY(!JhDyG>K_ O/kvk;WZ_9|cjZ"lMjk**7e(OPT
5&(+E+[*ZnPz$^j &cwVn,p?7Exbu $$ho3uO°[OCVGY~-JwrB@0gkzTtKYm˧eï>4t6K@2[ZBj`࠵#D
  |LFmfb"7&"%2ˑ*?ҠznϪ*=H=?2ꉌVht r;u'kd冟f*E\<Rủ,cffjHKW
ڴ1Cp~k1媦_o%4#. uLTfQUUyuSV{[dfZ (pn1lֹ7Z?1c2EPYh(cJS)tVvaX)t*!f8n,x A.[oOZ[vJNh%=2UuM]|ENU
kC54xY)R9Z5:cVTs,P-[s'ʜK&P+'#w)fOd& $xr1]nZ"*sԾKЎK1iET9iT6;/K( ]d-
A}
^ EV+}0#=[[~0n%w;5sszޫK =8JJfDV8H]GrF|p)6EC,
eSU P
@J,7֜ >9 Yhaʎ^QQC]Gna'\3l|ՠFeJ^ s3S7q)9I<Xxs(מ<XT_`K}ZEmǻܿ-`WGȳ&~blңVi ߉Y,0Es\s@Ŝ9̞s<;hϷu ě^(S-IӴ^+Ī5w@wƥlXԢ
!^wʠK YÂߌC+1yjC M'Uh@j02q@Bg%v Dh)̀"/PscDu)CgL:Uq~NjOȡ;4˦{*ܼZv p~oCj?~՝F/>Q#&RL p>8pR`|@`EphP FUBH C<\ERa㝔Ho$n2EQY8 V@o~i#X_H㭅U0 U{;x J
`<JR~eu|3~es;błpE-V_ְ`7iNvA+W/|/ޭ hu(]P08Jڣ` ]$F$Mz(YBs#%ȇ¼(R;ت=V*-/f-n:$9xGhAeL}'9~ g/܆~c] .y]%wq0>bRA]&2WC{t(M**诗&հBVvlIJp< d QvoMi67SEnM5@*ܝ7"TU*oV3ٽLPn9;#nvvœ\MMd DdF.5LjLe:
JUAQdKέ6WW%DLPRYuTbPIfR 5/û]Jv+<読OZ Tf,ZܟղJ[18 1:"uUN\yBZe[ )4` 3rT \sSl^. E1l#݆hOs⾖zf'IKQ-Jۭ6ty7-\Ҷm]swZ{O+iB!6qcgm,ߋ/;r?| F4:!
q_'^wjo!4Tua=1iZz2
1sD*<CULVygC~gk{j\4vᾶ*7a\:"M%#L B i"(y 7huvpBH3pO6ю>Oiڗ @ҤϽP}v#6(](#of$ML!ӌL_l)_Ҥ&&$4!V^ȇKP3Hc#{*D+˜aIMaY*ge"+%l_A'/#WWҟ_Ȧᝓ1zxW^_ _ahM+!x^ңeyC)N,Nؚ<naf 5Sa~pr|/o-#Ӻ@ 5y.9eoo
0.3W0-k͛= Or_w|K?&L;;'ګ~Iw Ģ^N:}ڞ9m#LZ흹]}GkPV9'Vab\gTà6 &fk }fhil3WҪfTߛPQ{tTe%L-%竈գ{5Aw4E6-h-?qD>aթja YqxP{=| Kܐ9WKEB:AlM,s z A:^ᵈ'>z{KY$|]<tm4NSj\L]p"` R,ة4XzD%ټ_k/ =MPǮvOT8Vڇ ֥0Wu޴&j;u^ >6-MSݶ Qlp? r?\7ee^摪Uި=*Y? =
~uomݍ#_%O'J`mJfϤίQTҸ5膢p۲ghZ\(0z^YoW r
7n
C6&MdLa`6[ZFL BTB=q.gEډAvv o,u'Bn,}]p;
Ng{U11OHTƙ*%(qhȵp @XHUj4as.+Tޟ&a8]۞t›>1{j,PbH-YitO{ *'Zr/TWD+ߴ6ӘSWUErMѿs Y Z v>=B9) TaEMOѴ}CcooO3BP'ާt{׮žx1}͚k#ٟ(ˆSNVPDCbYbcbGBz9#p94քe& Xgb1;L8fYL4ymSMVl@ &*y=F4 {$ud "d{d˔pC`]C.]}}~R\s~nԕyug_qN-apwk'C&g;?uq>xoK*yÇɿGx~rC)\kJu:B,Wspo͵͉_9F3 auT!4\8=*Tj r]W LuU<QgmkOrt:B]n<KM7EwNg`ˆi+ B#"!~MH7 1U Vx4oYӜ! lTFe[Zu1PԬ5C(Ӎz4CP
OxB:]>YH( Ru):INt4&d_W3#B([jnPO͗SkRBvX(~$=܋ߦ0U _Q.1`[&E1L[Y
<ݶ Sϲ>ol52605TTiZZd!:q7jF랋&WO2-PPt2ixLkfq5Mb,~ѳ&׾ȿŐA*T<#P#IY*
=t!Q6axbEj(4Xd%
]z-hx4-2k otRЍ-l*%?r=fK
r8l|C?̢ɭ&Fe;)Y3r f9q{bꪉ$Q7
i]*A B1i4Yn8nh솉!& ~CZ&MBA"pk8]抍@*-#BBo QJZ4vT4s#Exnx 흠o25E^JC 1J!Iei7rn% 0Ö៞(8VlӐJ)qpoK.HFd$ jYi t)mP$$
<ݏ3NxaG3$"GMO;" soض'0Jk:zf;~ ughY$
ÕFKϷ/M:I
O+>A%M ˆJctA?.j,M)ׂTֆce F2e6niB)a4^W~ *櫓N)nAMd C\ džA.~):|(/
Kv"1L#$o븋g& 2- DTAązݗ&#tPD'!yM@վ&B@XL70$;#egw=%JҧPLHVtsz vDc)$<I8hPmPFT24!|xldLE<eФst[ pRE=.6F1%j.&0S2y\2 U-l T<#eY A[4,;f$
==~ ['ffdgm랋&Wу#GJGYh5CrɊ 9{֢䉆BOL ů
P&1eD%
{N6A>u⥚)E7aG/z{X%>mQO~=AUԫ0kl`A# u/N勚
%d/K EMnؾ.Q.85H l2Q~wAH'2;zQ&^C BWd2}6~*1Ak^Q|rhA/Bp^`(K`Ƙ }'K ~<T= {bLWrrXl1%r8HAA&YC6-euy~!=Ӧ6"!)JL]rEp4Vd>=#
gD%NuKP(9/-O,hh-4N؇ N :()>pX۫{ŀtL0qDI=n=ys9z4#vA~|,H>Z3KW|,~8h(MB Jxܒ"Y-a4 A90uo=/ "A7bf fY6^gU#*(K`D:J4U%NbO·,3J3wL&cO'Y6\K'r~ʹ(lA/#>9vϒJA{FdVL GD+D 7䔶 1vFc= DöEDQB)HR]4ɺC>ϦtoB2dХYϏ72I3 _#KĻ>-!Z<v#RL=$!;I\&Q[Fc1ҥp5dRRp?'8({.ҚNYI2@RIfWnvW.Y>߾t0k}t@
AP4( uTT|(e!eDULpJJ\žJW^ q:D|zBS31Ƨ>^/A^AcJ%Κ"Ua1)AՁpt%M0lD,1+
#%C1w1lrb]&5k p/ô&'G A1td2f]^ Kʘ$i԰@~=@8RY^]q%e3T
H4(bIjevفJ,~S1,wū{ v§ljHHT
        =OP~BHA֨Мuq&}` Pl|l;D"4LQiQ!:8&WKJ=%\iYmJf5auW.

= j$Aԝj
t1t?D1Rl[ZZ aW^hT S1n8TRZPlgaR2⠙v6wAˣфs^-m|(DE &Q{dW>":bVU$|#˳u& "MjX,%u :"/+5$:va"Fr.lYZ)b-FA( iJ:$&7DwJ6Q663(2&'[AGG"A2E\r4 #CP$<QҚM(BF}h] A#1EDtD*qʬA
LǡTҲf0 jwW.Y}a&@L*PJjRjAPբP)/BxFpRkA>z%h*aT`H7P6+OH8⓴E" )̐2\+#"+DNN!?Ф83EUYtq<2Jttn"e Zľ$˄dP;nb)b8rj͇,;a&>'Dx_͑Cv}>>M`|:}JBHi0
MqDJ2^HYA8H[(<G[NddtH:
opD z;Sa@a(~I:<=
yQ-m>H {dr 9 *v;ږ/7"^vf%u#O~I$T
Ǒf{q~ f`4ڽ=RRAJW"!aMZ%
{(.@IJNe /5$`^0D/^~_ &BL^*Cβ%b,4gM]c5>v(qyNB]@d1*= ~"OhmzBӝ׈XCM"II(z,,bDcGOprj͏oA>:EHhkEl;T)~h/!E$$NHAA!o'.r~ 2#iJ~J EJң M8h9TDgQXDhI8h2C!Y|ҥ Fvx@G $Oآ yhF&'0"Nf?ݐ?G$ҝnA /3+az3~Ir4EEv8L%5њYbBBYC::A4Q =(-z,45M#]Pk4 ;Kuk:]mz-ދЫW^_И&hkQ#JBP.#%plػ:k
ȚNy(&cqJLv>nߕrde w\%]&SB= jq;va~BR_"ԝp}v ^m9EC}'y-#Æ6b.ZܞC.=cPrȧ?"ۧSZPҶ8F G<M
`ATo@AvL[B=i>#E+B*;v0u:U-
DcodQ6Fc%7Z[Шߧa hF' ;Ns8!nuiCe-]Ցd"oi; R zu" ˌAPHA&pkjU)G/&zXKBC4to
9v%z q:R39Cm1bfva
[z'1BzPУ[mt{WCA+_vfZ gdus"ϔ@?/FöD6K˨QF
ћ^nVW`lr-VR?TAbtf>,~ jAWdgIn77Bc&biÈA/Q <=P1|,JS2=p21\">@!v(#x';
'j50i=׻~OHQ-aM00r&4~v2I#-GU 8O$5d(Lv0dCzG(tk_AU GBFaP-B(d1hҕ`%*Z"j%a <%d^: /e0+q<Na:U*/5kXWxPS[.]֔a;>Z(ZZǕ;6\vܡ ="F2AGj'g_p8m3`)`[QmAnBقh?젻_
3N2V1@Q[#-A1s{]H7% Gsh,AqCWOKMB[c$qO,ńQ. ЌG*k*o vIN 1g>,wbXamD`jv#7tTC` aOZ&iM;hdRvHP` aY#1}B6 zyQ z?E`$ӯq;g}zFr#m1m^ʽkN!ay 1 : a_'yEv( 0b* ,hl-( 2h־wXlGbШÊР%h]GP 9ZɐHv0"+;H$A1T Q]Xu<UPȉ#GMa2X<Ab8NdpC? SMYdl C^bWtMF َrE;H/Ы2Pu$X#`0Aξj m3c[z7;FԄ^'rO[ &!Tf-XyK 9 gKN;aFS`6|%5{<(H}+@ Mv0Q;$~*3}(G &$=FAǛtAz!!Du b;\鋶{!zވA,a"!AbgbX4SIbӎa=2փD`tA -h:cD<DĴQ9*QD250hֲ  <`0
IA{r j#6o@t _ CR =mNQ\;
TUYvvpjK׀xM*4KBC
DPODvPA, 1O(3H!=*T@pAvмH^$V]thv%X<'WZp&J
+LRK& :oᔛe; =M5[zv)1? %H]R˶=>7L HnaD%/]Q$bnMw:NTy|zS>feMlʚz+ёӏ!FFYv` I2 6aZE`8zc!>6@֕~i*  "GvIht8~h"bU(|cH_ U@X^?yUzFrѪ(x sVv2`ɨ`ZJIa=Į֝J@_
6vaA_< `JDQx$e/$d1!mtk_{mD_ T%QD
 %`

cZJU Ю1b#\?NFH/tH m]n5#!maz
4ڨ&>߰a#FP[%RI/5$1GW^ #*O|h4@-RD#cD{ݢto
9],l;jhvEKJv^SPM5=Z@8Fj̠ xQIP@X&-H=1zx| {@ e؝- 2KZ \lVn]vI SJ#WEHt0Mozp A'=;syݰC +z$d 6+o;{ -^gAc‘TvFL&OFK#ԗ 1Pa^vT#;IPCikBx!I$`YcI}~PX" q'U'jz`Xa@Vb>+ZD^/(ن KhÚQ/2{0I'lr=Πsl`8'% $)h v<uk?^ZPO \(9Is0zP*d-BX7C8PH<Fg8%;7*'Nv0ˊt'i^4~##8 <UF#F䀪 VAvvHd`<G p59GV?638R-i-$M ! }f xzBG7XF}Qa1e}$sWyn$5L HnUţQ&0 rw::LKgimxp׃-Z[*bĜv0b'h;1g5cbphƈWI^o<' [O$Ń@F!ǿ<j0PK/Q,΁`d2ǫA~4O(DxΚ*^ON) ׇmHԔ֣S~ ` ]h^3`?AXw[+%_WZ"!E쌣H—L$aA lcqd,D8An (]kn*兠*̯` s쩩Fbbº!
` IѰ~T]$Rtz5
ZdYBtަ\߈z0Tciѱ"jO*Jփ~ȑcP[$V*/5O)}ȀꄣCXl}U0VELʐ;ERXLWM)E;5_#CKFKp+AjXvA8F%Rh!!g_jjltۈ)իv^M3[y1( TE D̡YT7AҠ)&'GvpL>̣*m)_oǬlHك5k-VR`<x%ft4n>,=O\;}}/ +a^:6=}ޯ\V .mVQë[s~u le<<p^BGԁ' I0|π,Ki_e~q\~b_G{fbZc3/\{gp Q@3a*3Շʩ[gV!,XNPbb1 ۤn6iш zG9'ؕ;6a,މ-v2\Po 7ٮ/9e@, xaP2.`Ӏ:VٳaAC1wnـv<H%0{5MpY=t 17$P>A K˹իzC+O;;Kw5OzKַ"lqGyv@9PWX:{S-,LwXGE <w?qa)w~>⎲Q)֮.cp; Рד%8t=rk[zC|tBv,q#F1oKclea<P_|'c}4i !
o>_V?MLc`MlΡo݄p_u;>SW.0&+v*}_hSޯ=FA7"0lg۪O=y ?;A/f;<wq/fyi;j_&}ؠ6}c!3{gC=FQ