proto/0000755000176200001440000000000012065416540011420 5ustar liggesusersproto/MD50000644000176200001440000000442012065416540011730 0ustar liggesusers46aaf69a91703493b666f212a04f2d8d *COPYING f1b835a71d977b89a230f0e4f99dd90d *COPYRIGHTS cb34824dbd8ef8d6dd5d2f4bdc3fcd1a *DESCRIPTION 09754c9bb5e1c4827329a9e0ba97b396 *NAMESPACE 42c1cfc8132441d8265761c8043556ff *R/graph.proto.R c1123ff65baf22a8a7ff44e5d6801a00 *R/proto.R 6037abe3a5b93273e226787815fef835 *README.debian 54b1b6fd87c468388e490fec90867b1c *demo/00Index ceeaf4410099f287e2270fc78818cecf *demo/proto-vignette.R 753a9fadec704a3bbbdf33acb55b74cc *demo/proto.R 389be8e7c57d3814674707a35c692459 *inst/FAQ 5955a48859befe932beb3b7785404f21 *inst/NEWS 6cfcfccaa048fc8ee56ea2643b8db12e *inst/README 24576b9372c63525afb6e103f7380a7c *inst/THANKS 7ecc08fce7089dad44f647b8bfb1434a *inst/WISHLIST bca490c5de076ff9b93c69255f317f4a *inst/doc/proto.Rnw 7b2b24726d56bbc93494e400bf7d030f *inst/doc/proto.pdf 4273f3c74b47222ea69a1b08438a821f *inst/doc/protoref.Rnw 1b706daf7d2b28e24331627a8a68a53c *inst/doc/protoref.pdf a78c61ae7a81202d3a8ac767c0b57a42 *man/graph.proto.Rd e1efd10e8444a7473c04328576a7a5ea *man/proto-package.Rd 00d697562783af865d8c4558aef8852c *man/proto.Rd 681237a1b1290f1e6fc93667591a7865 *vignettes/README 954ced282c02125db098edbb5bf7d147 *vignettes/Z.cls ec6063dd71e4a60916a310e810b72686 *vignettes/cloning3.dot d64eff73ca94aa8d8e23eb2bfa69fd86 *vignettes/cloning3.pdf 186a0c34001100a81c27bf519c81edb2 *vignettes/proto-dot.pdf bfce81e7eaa5cf3d01dae6f9964aeab5 *vignettes/proto-dot.tex 3fbe78134c2dd817cb585b9218574c61 *vignettes/proto-raw 2ee13f271faa022648600c5f3736cb83 *vignettes/proto-raw.tex e8904de6669701e6c252964f8ef7ad0b *vignettes/proto-smoothing03.pdf 1320f930222ba5b29e84f9321891b280 *vignettes/proto-smoothing03.tex ef781a3c343efd0e19283aea096a4e55 *vignettes/proto-smoothing04.pdf fdc0cf82a3583a4debfebcf2f66531c3 *vignettes/proto-smoothing04.tex 5819b82ae7b1fac31abac5014ad8cafb *vignettes/proto-smoothing06.pdf 3b65082f7e4b40eda30d384124125fde *vignettes/proto-smoothing06.tex b1e193bbfee964291660ff1cdd26c284 *vignettes/proto-smoothing10.pdf 383ef6322b693e859795cecaa29390c4 *vignettes/proto-smoothing10.tex bca490c5de076ff9b93c69255f317f4a *vignettes/proto.Rnw 7ad5d41f758d4792ef9c3a4bcfbe32da *vignettes/proto.bib 1cc3d874f03f7073b3935825054775bf *vignettes/proto.tex a3ca93bf6e5afe69e729381c44c14a4c *vignettes/protoref-raw.tex 4273f3c74b47222ea69a1b08438a821f *vignettes/protoref.Rnw proto/vignettes/0000755000176200001440000000000012065354710013430 5ustar liggesusersproto/vignettes/Z.cls0000744000176200001440000001263512065354671014362 0ustar liggesusers\def\fileversion{1.0} \def\filename{Z} \def\filedate{2004/10/08} %% %% Package `Z' to use with LaTeX2e for Z reports %% Copyright (C) 2004 Achim Zeileis %% \NeedsTeXFormat{LaTeX2e} \ProvidesClass{Z}[\filedate\space\fileversion\space Z class by Achim Zeileis] %% options \LoadClass[10pt,a4paper,twoside]{article} %% required packages \RequirePackage{graphicx,a4wide,color,hyperref,ae,fancyvrb,thumbpdf} \RequirePackage[T1]{fontenc} \usepackage[authoryear,round,longnamesfirst]{natbib} \bibpunct{(}{)}{;}{a}{}{,} \bibliographystyle{jss} %% paragraphs \setlength{\parskip}{0.7ex plus0.1ex minus0.1ex} \setlength{\parindent}{0em} %% commands \let\code=\texttt \let\proglang=\textsf \newcommand{\pkg}[1]{{\normalfont\fontseries{b}\selectfont #1}} \newcommand{\email}[1]{\href{mailto:#1}{\normalfont\texttt{#1}}} \newcommand{\E}{\mathsf{E}} \newcommand{\VAR}{\mathsf{VAR}} \newcommand{\COV}{\mathsf{COV}} \newcommand{\Prob}{\mathsf{P}} %% for all publications \newcommand{\Plaintitle}[1]{\def\@Plaintitle{#1}} \newcommand{\Shorttitle}[1]{\def\@Shorttitle{#1}} \newcommand{\Plainauthor}[1]{\def\@Plainauthor{#1}} \newcommand{\Keywords}[1]{\def\@Keywords{#1}} \newcommand{\Plainkeywords}[1]{\def\@Plainkeywords{#1}} \newcommand{\Abstract}[1]{\def\@Abstract{#1}} %% defaults \author{Firstname Lastname\\Affiliation} \title{Title} \Abstract{---!!!---an abstract is required---!!!---} \Plainauthor{\@author} \Plaintitle{\@title} \Shorttitle{\@title} \Keywords{---!!!---at least one keyword is required---!!!---} \Plainkeywords{\@Keywords} %% Sweave(-like) \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontshape=sl} \DefineVerbatimEnvironment{Soutput}{Verbatim}{} \DefineVerbatimEnvironment{Scode}{Verbatim}{fontshape=sl} \newenvironment{Schunk}{}{} \setkeys{Gin}{width=0.8\textwidth} %% new \maketitle \def\maketitle{ \begingroup \def\thefootnote{\fnsymbol{footnote}} \def\@makefnmark{\hbox to 0pt{$^{\@thefnmark}$\hss}} \long\def\@makefntext##1{\parindent 1em\noindent \hbox to1.8em{\hss $\m@th ^{\@thefnmark}$}##1} \@maketitle \@thanks \endgroup \setcounter{footnote}{0} \thispagestyle{empty} \markboth{\centerline{\@Shorttitle}}{\centerline{\@Plainauthor}} \pagestyle{myheadings} \let\maketitle\relax \let\@maketitle\relax \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax } \def\@maketitle{\vbox{\hsize\textwidth \linewidth\hsize {\centering {\LARGE\bf \@title\par} \def\And{\end{tabular}\hfil\linebreak[0]\hfil \begin{tabular}[t]{c}\large\bf\rule{\z@}{24pt}\ignorespaces}% \begin{tabular}[t]{c}\large\bf\rule{\z@}{24pt}\@author\end{tabular}% \vskip 0.3in minus 0.1in \hrule \begin{abstract} \@Abstract \end{abstract}} \textit{Keywords}:~\@Keywords. \vskip 0.1in minus 0.05in \hrule \vskip 0.2in minus 0.1in }} %% sections, subsections, and subsubsections \newlength{\preXLskip} \newlength{\preLskip} \newlength{\preMskip} \newlength{\preSskip} \newlength{\postMskip} \newlength{\postSskip} \setlength{\preXLskip}{1.8\baselineskip plus 0.5ex minus 0ex} \setlength{\preLskip}{1.5\baselineskip plus 0.3ex minus 0ex} \setlength{\preMskip}{1\baselineskip plus 0.2ex minus 0ex} \setlength{\preSskip}{.8\baselineskip plus 0.2ex minus 0ex} \setlength{\postMskip}{.5\baselineskip plus 0ex minus 0.1ex} \setlength{\postSskip}{.3\baselineskip plus 0ex minus 0.1ex} \newcommand{\jsssec}[2][default]{\vskip \preXLskip% \pdfbookmark[1]{#1}{Section.\thesection.#1}% \refstepcounter{section}% \centerline{\textbf{\Large \thesection. #2}} \nopagebreak \vskip \postMskip \nopagebreak} \newcommand{\jsssecnn}[1]{\vskip \preXLskip% \centerline{\textbf{\Large #1}} \nopagebreak \vskip \postMskip \nopagebreak} \newcommand{\jsssubsec}[2][default]{\vskip \preMskip% \pdfbookmark[2]{#1}{Subsection.\thesubsection.#1}% \refstepcounter{subsection}% \textbf{\large \thesubsection. #2} \nopagebreak \vskip \postSskip \nopagebreak} \newcommand{\jsssubsecnn}[1]{\vskip \preMskip% \textbf{\large #1} \nopagebreak \vskip \postSskip \nopagebreak} \newcommand{\jsssubsubsec}[2][default]{\vskip \preSskip% \pdfbookmark[3]{#1}{Subsubsection.\thesubsubsection.#1}% \refstepcounter{subsubsection}% {\large \textit{#2}} \nopagebreak \vskip \postSskip \nopagebreak} \newcommand{\jsssubsubsecnn}[1]{\vskip \preSskip% {\textit{\large #1}} \nopagebreak \vskip \postSskip \nopagebreak} \newcommand{\jsssimplesec}[2][default]{\vskip \preLskip% %% \pdfbookmark[1]{#1}{Section.\thesection.#1}% \refstepcounter{section}% \textbf{\large #1} \nopagebreak \vskip \postSskip \nopagebreak} \newcommand{\jsssimplesecnn}[1]{\vskip \preLskip% \textbf{\large #1} \nopagebreak \vskip \postSskip \nopagebreak} \renewcommand{\section}{\secdef \jsssec \jsssecnn} \renewcommand{\subsection}{\secdef \jsssubsec \jsssubsecnn} \renewcommand{\subsubsection}{\secdef \jsssubsubsec \jsssubsubsecnn} %% colors \definecolor{Red}{rgb}{0.7,0,0} \definecolor{Blue}{rgb}{0,0,0.8} \hypersetup{% hyperindex = {true}, colorlinks = {true}, linktocpage = {true}, plainpages = {false}, linkcolor = {Blue}, citecolor = {Blue}, urlcolor = {Red}, pdfstartview = {Fit}, pdfpagemode = {UseOutlines}, pdfview = {XYZ null null null} } \AtBeginDocument{ \hypersetup{% pdfauthor = {\@Plainauthor}, pdftitle = {\@Plaintitle}, pdfkeywords = {\@Plainkeywords} } } \AtBeginDocument{\maketitle} proto/vignettes/README0000744000176200001440000000013412065354671014315 0ustar liggesusersTo build the vignette: * vignette building is now straightforward using R CMD build proto/vignettes/protoref.Rnw0000744000176200001440000000111412065354671015764 0ustar liggesusers\SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{protoref: proto Reference Card} %\VignetteDepends{} %\VignetteKeywords{object oriented, prototype programming, S3, R} %\VignettePackage{proto} \documentclass[a4]{article} \usepackage{Rd} %\newlength{\refcardwidth} %\setlength{\refcardwidth}{20cm} % \usepackage{c:/PROGRA~1/R/RW2010~1/share/texmf/Sweave} \begin{document} \pagestyle{empty} %\begin{landscape} \centerline{\Large \bf \pkg{proto} reference card} \vspace{0.8cm} \begin{small} \input{protoref-raw} \end{small} %\end{landscape} \end{document} proto/vignettes/protoref-raw.tex0000744000176200001440000000660312065354671016615 0ustar liggesusers\begin{tabular}{rp{10.5cm}} \multicolumn{2}{l}{\textbf{Creation}} \\ \code{proto} & \code{proto(., expr, envir, ... )} embeds the components specified in \code{expr} and/or \code{...} into the \code{proto} object or environment specified by \code{envir}. A new object is created if \code{envir} is omitted. The parent of the object is set to \code{.} . The parent object, \code{.}, defaults to the parent of \code{envir} or the current environment if \code{envir} is missing. \code{expr} and \code{\dots} default to empty specifications. The returned object will contain \code{.that} and \code{.super} variables referring to the object itself and the parent of the object, respectively. \\[0.5cm] \multicolumn{2}{l}{\textbf{Coercion}} \\ \code{as.proto} & If \code{x} is a \code{proto} object or environment then \code{x} is returned as a \code{proto} object with the values of \code{.that} and \code{.super} inserted in the case of an environment or refreshed in the case of a proto object. If \code{x} is a list then additional arguments are available: \code{as.proto(x, envir, parent, FUN, all.names, ...)}. Each component of \code{x} is copied into \code{envir}. \code{envir} may be an \code{environment} or \code{proto} object. If it is missing a new \code{proto} object is created. If \code{all.names = FALSE} then only list components whose names do not begin with a dot are copied. If \code{FUN} is specified then, in addition, only list components \code{v} for which \code{FUN(v)} is \code{TRUE} are copied. If \code{parent} is specified then the resulting \code{proto} object will have that parent. Otherwise, it will have the parent of \code{envir} if \code{envir} was specified. If neither are specified the parent defaults to the current environment. \\[0.5cm] \multicolumn{2}{l}{\textbf{Standard methods}} \\ \code{\$} & \code{obj\$x} searches \code{proto} object \code{obj} for \code{x}. If the name \code{x} does not begin with two dots then ancestors are searched if the name is not found in \code{obj}. If \code{x} is a variable or if \code{obj} is \code{.super} or \code{.that} then \code{x} is returned. Otherwise, the call \code{obj\$x(...)} is equivalent to the call \code{get("x", obj)(obj, ...)}. If it is desired to return a method as a value rather than in the context of a call then use \code{get("x", obj)} (or \code{obj[["x"]]} \code{x} is known to be directly in \code{obj}) rather than \code{\$} syntax.\\ \code{\$<-} & \code{obj\$x <- value} sets \code{x} in \code{proto} object \code{obj} to \code{value} creating \code{x} if not present. If \code{obj} is \code{.super} then a side effect is to set the parent of \code{obj} to \code{value}.\\ \code{is.proto(x)} & returns \code{TRUE} if \code{x} is a \code{proto} object and othewise returns \code{FALSE}.\\[0.5cm] \multicolumn{2}{l}{\textbf{Utilities}} \\ \code{graph.proto} & \code{graph.proto(e, g, child.to.parent)} adds a graph in the sense of the \code{graph} package representing an ancestor tree among all \code{proto} objects in \code{environment} or \code{proto} object \code{e} to graph \code{g}. \code{e} defaults to the current environment and \code{g} defaults to an empty graph. \code{child.to.parent} is a logical variable specifying the direction of arrows. By default they are displayed from children to parents. \\[0.5cm] \end{tabular} proto/vignettes/proto.tex0000744000176200001440000000111512065354674015325 0ustar liggesusers% To build the vignette: % 1. run Sweave("proto-raw") to create proto-raw.tex % 2. build as usual using Rcmd build proto % % To build vignette manually: % 1. Sweave("proto-raw") to create proto-raw.tex % 2. Sweave("proto.Rnw") % 3. pdflatex proto.tex % % To build manually using sweave.bat using batchfiles on Windows: % 1. sweave proto-raw --tex % 2. sweave proto %\VignetteIndexEntry{proto: An R Package for Prototype Programming} %\VignetteDepends{} %\VignetteKeywords{object oriented, prototype programming, S3, R} %\VignettePackage{proto} \input{proto-raw} proto/vignettes/proto.Rnw0000744000176200001440000000115412065354671015273 0ustar liggesusers% To build the vignette: % 1. run Sweave("proto-raw") to create proto-raw.tex % 2. build as usual using Rcmd build proto % % To build vignette manually: % 1. Sweave("proto-raw") to create proto-raw.tex % 2. Sweave("proto.Rnw") % 3. pdflatex proto.tex % % To build manually using sweave.bat using batchfiles on Windows: % 1. sweave proto-raw --tex % 2. sweave proto \SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{proto: An R Package for Prototype Programming} %\VignetteDepends{} %\VignetteKeywords{object oriented, prototype programming, S3, R} %\VignettePackage{proto} \input{proto-raw} proto/vignettes/proto.bib0000744000176200001440000002513412065354671015265 0ustar liggesusers\Sort{ Mode{on} Collation{mixed} SortTypeOrder{name} NameOrder{ascending} } @MANUAL{Agesen1992, author = {Ole Agesen and Lars Bak and Craig Chambers and Bay-Wei Chang and Urs H{\"o}lzle and John Maloney and Randall B. Smith and David Ungar}, year = 1992, title = {The \proglang{SELF} Programmer's Reference Manual}, note = {Version 2.0}, publisher = {Technical report, Sun Microsystems, Inc.}, address = {2550 Garcia Avenue, Mountain View, CA 94043, USA} } @UNPUBLISHED{Aldrich2004, author = {Jonathan Aldrich}, title = {Selective Open Recursion: A Solution to the Fragile Base Class Problem}, year = {2004}, pages = {1--12}, note = {submitted, \mbox{http://www-2.cs.cmu.edu/\~{}aldrich/papers/selective-open-recursion.pdf}} } @BOOK{Becker1988, AUTHOR = {Richard A. Becker and John M. Chambers and Allan R. Wilks}, TITLE = {The New \proglang{S} Language}, PUBLISHER = {Chapman \& Hall}, YEAR = 1988, ADDRESS = {London}, ABSTRACT = {This book is often called the ``\emph{Blue Book}'', and introduced what is now known as \proglang{S} version 2.} } @INPROCEEDINGS{Bengtsson2003, author = {Henrik Bengtsson}, editor = {Kurt Hornik and Friedrich Leisch and Achim Zeileis}, month = {March}, year = 2003, title = {The \pkg{R.oo} Package -- Object-Oriented Programming with References Using Standard \proglang{R} Code}, booktitle = {Proceedings of the 3rd International Workshop on Distributed Statistical Computing}, address = {Vienna, Austria}, language = {english}, day = {20-22}, url = {http://www.maths.lth.se/help/R/} } @ARTICLE{Chambers+Lang:2001a, author = {John M. Chambers and Duncan Temple Lang}, month = {September}, year = 2001, title = {Object-Oriented Programming in \proglang{R}}, journal = {R News}, volume = 1, number = 3, pages = {17--19}, note = {http://cran.R-project.org/doc/Rnews/} } @BOOK{Chambers1998, author = {John M. Chambers}, year = 1998, title = {Programming with Data: A Guide to the \proglang{S} Language}, publisher = {Springer-Verlag}, address = {New York}, isbn = 0387985034 } @INPROCEEDINGS{dony-malenfant-cointe1992, author = {Christophe Dony and Jacques Malenfant and Pierre Cointe}, month = oct, year = 1992, title = {Prototype-Based Languages: From a New Taxonomy to Constructive Proposals and Their Validation}, booktitle = {Proceedings of {OOPSLA'92}}, volume = {27(17)}, pages = {201--215}, publisher = {{ACM} Sigplan Notices}, address = {Vancouver, Canada}, kind = {MISA}, lang = {english}, visibility = {private} } @INCOLLECTION{Dony1999, author = {Dony, Christophe and Malenfant, Jacques and Bardou, Daniel}, editor = {Noble, James and Taivalsaari, Antero and Moore, Ivan}, year = 1999, title = {Classifying Prototype-Based Programming Languages}, booktitle = {Prototype-Based Programming: Concepts, Languages and Applications}, chapter = 2, pages = {17--45}, publisher = {Springer-Verlag}, address = {Singapore}, language = {english} } @UNPUBLISHED{Ducasse2004, author = {St{\'e}phane Ducasse}, year = 2003, title = {A closer look at prototype-based languages}, note = {\mbox{http://www.iam.unibe.ch/\~{}scg/Teaching/IOOM/PPT/PrototypesAdvanced.pdf}} } @ARTICLE{Ganser+North:1999, author = {Edmend R. Ganser and Stephen C. North}, month = {September}, year = {2000}, title = {An Open Graph Visualization System with Applications to Software Engineering}, journal = {Software--Practice and Experience}, volume = 30, number = 11, pages = {1203-1233}, url = {http://www.graphviz.org} } @MISC{Gentleman2002, author = {Robert Gentleman}, year = 2002, title = {\proglang{S4} Classes in 15 Pages More or Less}, url = {http://www.bioconductor.org/develPage/guidelines/programming/S4Objects.pdf} } @ARTICLE{Gentleman+Ihaka2000, author = {Robert Gentleman and Ross Ihaka}, year = 2000, title = {Lexical Scope and Statistical Computing}, journal = {Journal of Computational and Graphical Statistics}, volume = 9, number = 3, pages = {491--508}, url = {"http://www.amstat.org/publications/jcgs/index.cfm/?fuseaction=Ihaka2000"} } @ARTICLE{Ihaka1996, author = {Ross Ihaka and Robert Gentleman}, year = 1996, title = {\proglang{R}: A Language for Data Analysis and Graphics}, journal = {Journal of Computational and Graphical Statistics}, volume = 5, number = 3, pages = {299--314}, language = {english} } @UNPUBLISHED{Kates2004, author = {Louis Kates and Thomas Petzoldt}, year = 2004, title = {Prototype-Based Programming in Statistical Computation}, url = {http://r-proto.googlecode.com/files/prototype_approaches.pdf} } @INPROCEEDINGS{Lieberman1986, author = {H. Lieberman}, editor = {Norman Meyrowitz}, year = 1986, title = {Using Prototypical Objects to Implement Shared Behavior in Object-Oriented Systems}, booktitle = {Proceedings of the Conference on Object-Oriented Programming Systems, Languages, and Applications ({OOPSLA})}, journal = {SIGPLAN Notices}, volume = {21(11)}, pages = {214--223}, publisher = {ACM Press}, address = {New York, NY}, url = {http://citeseer.ist.psu.edu/lieberman86using.html} } @BOOK{Noble1999, author = {James Noble and Antero Taivalsaari and Ivan Moore}, year = 1999, title = {Prototype-Programming}, publisher = {Springer-Verlag Singapore Pte. Ltd.} } @TECHREPORT{Oehlert+Bingham1998, author = {Gary W. Oehlert and Christopher Bingham}, year = 1998, title = {MacAnova User's Guide}, address = {Minnesota, St. Paul}, institution = {School of Statistics, University of Minnesota}, number = {617}, url = {http://www.stat.umn.edu/macanova} } @ARTICLE{Parnas1972, author = {D. L. Parnas}, title = {On the Criteria to be Used in Decomposing Systems into Modules}, journal = {Communications of the ACM}, volume = 15, number = 12, pages = {1053--1058}, month = {December}, year = {1972}, abstract = {classic article on modularity}, note = {http://www.acm.org/classics/may96/} } @MANUAL{Rcore2004, author = {{\proglang{R} Development Core Team}}, year = 2004, title = {R: A Language and Environment for Statistical Computing}, address = {Vienna, Austria}, organization = {\proglang{R} Foundation for Statistical Computing}, note = {{ISBN} 3-900051-00-3, http://www.R-project.org} } @MANUAL{Scheme1975, author = {Gerald Jay Sussman and Guy Lewis Steele Jr.}, year = 1975, title = {\proglang{Scheme}: an interpreter for extended lambda calculus}, note = {{MIT} Artificial Intelligence Memo 349, December 1975} } @MANUAL{Scheme1978, author = {Guy Lewis {Steele Jr.} and Gerald Jay Sussman}, year = 1978, title = {The Revised Report on Scheme, a Dialect of Lisp}, note = {{MIT} Artificial Intelligence Memo 452, January 1978} } @MANUAL{Scheme1988, author = {Richard Kelsey and William Clinger and Jonathan Rees}, year = 1988, title = {Revised(5) Report on the Algorithmic Language Scheme}, journal = {Higher-Order and Symbolic Computation}, volume = 11, note = {http://swissnet.ai.mit.edu/\~{}jaffer/Scheme}, issue = 1 } @BOOK{Shalit1996, author = {Andrew Shalit}, year = 1996, title = {The \proglang{Dylan} Reference Manual: The Definitive Guide to the New Object-Oriented Dynamic Language}, pages = {1--469}, url = {http://www.gwydiondylan.org/drm/drm\_1.htm}, publisher = {Addison Wesley}, abstract = {published 1996 or 1997??} } @PHDTHESIS{Taivalsaari1993, author = {Taivalsaari, A.}, month = {November}, year = 1993, title = {A Critical Review of Inheritance and Reusability in Object-Oriented in Object-Oriented Programming.}, note = {{ISBN} 951-34-0161-8}, school = {University if Jyv\"askyl\"a, Finland}, language = {english} } @ARTICLE{Taivalsaari1996, author = {Antero Taivalsaari}, month = {September}, year = 1996, title = {On the notion of inheritance}, journal = {ACM Computing Surveys}, volume = 28, number = 3, url = {http://www.csee.umbc.edu/331/resources/papers/Inheritance.pdf} } @ARTICLE{Taivalsaari1996a, author = {Antero Taivalsaari}, month = {September}, year = 1996, title = {Classes vs. Prototypes Some Philosophical and Historical Observations}, journal = {Journal of Object-Oriented Programming}, volume = 10, number = 7, pages = {44--50}, url = {http://www.csee.umbc.edu/331/resources/papers/Inheritance.pdf} } @BOOK{Tierney1990, author = {Luke Tierney}, year = 1990, title = {\proglang{LISP-STAT}: An Object-Oriented Environment for Statistical Computing and Dynamic Graphics}, publisher = {Wiley, New York, NY} } @TECHREPORT{Tierney1995, author = {Luke Tierney}, year = 1995, title = {Recent Developments and Future Directions in \proglang{Lisp-Stat}}, number = 608, address = {Minnesota, St. Paul}, institution = {School of Statistics, University of Minnesota}, url = {http://www.stat.umn.edu/PAPERS/tr608.html} } @MANUAL{Venables2004, author = {Venables, W. N. and Smith, D. M. and {the R Development Core Team}}, year = 2004, title = {An Introduction to \proglang{R}: A Programming Environment for Data Analysis and Graphics}, abstract = {2004-04-12}, note = {{ISBN} 3-900051-05-4, {http://www.R-project.org}}, language = {english} } @Article{Rnews:Petzoldt:2003, author = {Thomas Petzoldt}, title = {\proglang{R} as a Simulation Platform in Ecological Modelling}, journal = {\proglang{R} News}, year = 2003, volume = 3, number = 3, pages = {8--16}, month = {December}, url = {http://CRAN.R-project.org/doc/Rnews/} } @Manual{Rcore2005, title = {\proglang{R}: A language and environment for statistical computing}, author = {{\proglang{R} Development Core Team}}, organization = {\proglang{R} Foundation for Statistical Computing}, address = {Vienna, Austria}, year = {2005}, note = {{ISBN} 3-900051-07-0}, url = {http://www.R-project.org}, } @Article{Rnews:Chambers+Lang:2001a, author = {John M. Chambers and Duncan Temple Lang}, title = {Object-Oriented Programming in \proglang{R}}, journal = {\proglang{R} News}, year = 2001, volume = 1, number = 3, pages = {17--19}, month = {September}, url = {http://CRAN.R-project.org/doc/Rnews/} } proto/vignettes/proto-smoothing10.tex0000744000176200001440000000016612065354671017475 0ustar liggesusers\begin{Schunk} \begin{Sinput} > par(mfrow = c(1, 2)) > oos$splot() > oos.res$splot() \end{Sinput} \end{Schunk} proto/vignettes/proto-smoothing10.pdf0000744000176200001440000006677512065354671017470 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 396 /Filter /FlateDecode /N 9 /First 53 >> stream x[O@/-cH01nMwk;R 1if~gTC +!IBKAԍ&rH׻6.QymM> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 12 0 obj << /Length 24567 /Filter /FlateDecode >> stream xͮum%8> av&˃.J4\,wU Թ? cq~~߾ǿ}L^m}}o?~Ͽ͟__÷}Ϗ/Q>~~ߪY1ݿ,UQ}?~O?BUZ5_I}B{I{ik)v.ivY$msUb{6/ɕ}ͯ#|o(bCb݋TI{ ܻ);ixriwzwh5I۽ޚv% xv{&ŧzk>({;\޻*d~ ڒ_ہWl'CsLwW}u<ŦG{]4wGw Gn^۵yH]K {)e}^Wl*zW pWAec~+y;4vxMyay4hϊYҔn;Hަw )vm>x~'ޡ#(Uz֢pYͽCg:7ln qKQ<>Z$-H5x܀Vvsp&{K; {bMG{r͕,^1Ǫ\m|+0Kbfڽϵh8~!ڕÐLWNZMym|o%vXk*c)DW{5|G E)帮6[võr!XՆwLў͇24m{Wmw.ޡHc [6&6f>y3MxQr{;㵥xEP3awshYXwX*]{;{K e%~=>yLYmU`kO;<`3v2}I?4K@hw{#"ߢO48;cs%͓Mc~M;4Nzvʹ#+;E{pWAjw|vo[ʹ)Anina\Pe5#Nv;(; `RjokJj[OwS ^m[¯]x\XwYWޡ{^F찥>;XZwh4z;R{X M{2DW{1Y\}po%u<=ci5kr}OLv!ʽڃgʎj/K󱫽Os;4)}q߮v5ZMޡiءI=cԴXR2|SfA9;o"T{: ٙC[&ÔW{j<^DbIkwh>Dq+W5އޡj#; T{2)>;TͷxۻڛY9vsFﰥվ˽Ӽm,wP;= U9R<-ڒo1xY\m)V|j2ίveu)>Z0Z{ks%}g\XǮGVΉ{4 WJ^^jޡi_mEY-RPM,x Pj;tmUz>  ޡl)[s;<ȵڣ)wCZ;J;}(Նw%4 C[ޝaIAz ImA{!{rzҵ́ z&SUr46ÐҊWH"PBr*ڠsЎm9hܫ 2* Lr%<ʔ[ ODB})i_]#ah_(]+5(hC[t Cxpjp*{c\9EϠ 9>SKܯ\api?-ؒ>f$XmIAڦS(Rj_[1e܌cubpo|)MIg)GE@!gKY83,r @\_[_tHphDJ=ΩT}p҄6x& oPҮ`HJq '|.vХtk_pRXW8CO0+YI"} K_rg{kx%r k(;&uzFKwhqڧA\.{唞;ᘔrN7:2iB;ih5S D:ޚvwa DMvﰤLk eevg]N]ZT ý1WG #U#-; x" \zP`zYEH{;t <|Lw>&C"`vͧk/X54}f#m?]z??|/(zGtH_;T1[#kq`.w EҶA;sv4k=G'>{ܵ8Zkה6zdeU }u-;4+$J Y <󨠔ux3VAwyoe~_b䊘$UH0gڋ#;Hsů]&Bz>HUy\@&J;8A|YWOIZTPʚFz HNқw?q0]!)+%IfߵEL ŵ7Ӛc4 $Ym!kpصAh5f=LEEzQ;\ɽߏ CIxIg^]tqD5]+0ԝ3Gd`*Z{yXϦ\Nv~Z;Aûym616(]ݒ2w GpFoaZֶ"_ 7D* ;]uƦ ;kt;@9]}2ZG'RbwX(y! SsZVk$jehr'rhL*͸Jw]P Z5rL u]q='7;jæ]q6,o2_)UtVRV]$K Z0qu M"h'yNwѴ3],-C蝺$]$7ZHBF;qW̲1[Z)UIv$ )s݅ Z:ߛ~.ϬWJ'~*pI3n]l]4Q7I4$⍜ܐe$QG0 vi4OxTZG''_-p`R֨+ EþRH|խsK3] -, LԼhB+A!{R蛆\;<z]/1#lnSF:hui_010t] 5#ᱰ #گvLX)dSOiL!Ga{'- LFiyڎCHZ>t=$Żv})Fl89@P8Qہkj6滶ZNSও>ye\'*s/#o _ze[v)o7݅UA>+}hEKĴ҄m5hݍp)V6bkpyER'qRMU_FZR?܀k<2Ҍ3Q.D"zжB؅ O+}2S'Fwudr.jqՉj%Q.Lu#P樥CdOVRU#ڠf)ض]:HH=Bκ.i+ p"OU7uڠm.OtZ^Za=I].[:.A{Ȑb}.Da="eUn⪻(&fBژ$SҲFw!^uDCλiA$Ju*w?zVHs&۽W}pq=VY.ZB%"yUDUp[pBdɥx~bfFJigZH{;WHi~Ճ%E;+t՝RI ڛ]qW5)JMNg!FhaWJS hgW;ɨ$AF 3;צ8d}EW9J EH32_ ~^j/ВJ Oa2Sh#n]cR#;T%hI#*abc_R*n"j\ᬒAy}'b5 }}\mV,X+x+:Ia,v'T5u;I8R^ѧkA׉ڨj_pZdZ`<,iLڝiɣ_?]pJfpZj-7ۺ7LbYai\Wą[Ul_,9LM=PvV_jwW7Y^nܢe\HҴd^9 ̑k؟mhQoMWAgq*}r-4x^;F='sT#f\,oޡkGJټ6=ۣ=<ڌ<ވ7zvҁR5kk9I c@wBDU-|Ľ͚ #6{H+|)vH SSWۙXџDֵDN'14Uh- BJoP׻Imn@"}Z"6\`+7r&^4Wir7tjqƆ8S %d4ն@JV|eXiT ("UDjVK_m#δ ~*V_u#)"^t[kNp՝J~ma['$F<1ʍt8lSL-a2bMvW ǂ%OYMn %=7߶,z-8Uwg!Cv-$ n+tx]\u4媃Ĵm`/?~۷o?~Ç)o /z~~*z7􏍭" "ş>~ϔh篾ym/Wty~<ŗ'\;ŗ__y0o _T`_sg0R<_? m_5P/肬((wmT>_Qf6S>JgR>=@比>EHy~\zlNwRQ>S|/n{1֯^8ЖۯA>〗LJ V Wصc71we!ƿezދm/}}_ǿvߏW׏=- 0˝RV'j|}d !'GƌwUQ}r\a*Nё}WOhJƮa;~ů^'E_K\C)\|͹Yd؃OxP_* ?Hd,Zr"˳ӿRѻ'++,p16 SMvD5 τu2Ǖm&!YbtcT<6kf] Ž"^A\qs2_=qiI 1^?x7"ky*QxԍTƠ9Ȟic=@!0lϯ`3.Rp}cy:%_/Wk.c💯_7\OXqScN|XynOQR ܈!_sG Nzb!cI=wv:_sJQ?\b'uzO<`S":Dv&_^|X,~K-6j1S_16;bx/~oq_'bQV;"V)C>_b)~f~ x%Fc\/جPdx>x}o ~(㉑!AZ[_V!4hz{bkaT΃^I`\!NĜ\%c_3 BwN+rPC{S]44Lrx*V믣w"qpbQС@*}3XeV nX_{+LRƉ~YcRxc4&yw<#.8`Y)"I~tFy! c1) Z(3b/i1#d"^39zes[<dj=!_\qoͯ!%wr]3|8u86B5CHE|p;Dix}w91%'~uWAx(8,K_\,!:b| 7S1'X%aHRC\CI̠dtWS~b bs-v *K: aXQ:GF ؊KmÒ 4N?Fόw~{ H>XY-'ׯ`=5H|Q!Wzf|e_~*җ. ~aB%"qF3D˜ʼnZC\,!nTZ >?MHjvá14ű|?Bܸr ' +l[GOxuDM5(&|ǷܟotG;D#@>-y-׏r0;xE _?F;V2wU[!NZW#xQgWN?0`+1a+H0 AWD0yTY̺[-q'l|Ng*0aOR$-@I_cÂ^%Hb0ccߺHc!NxBz{nbezoJ@,M蝁!l?Ғ?bWM2r(__5RXbǙglQd1?Jņ{7W 6(͵Elm KovŊ^Y:H͖NY \}AUj'0,r5 " (tWaRRA dܲRØ"kwH.-+{w9Kܹ(P Qk4 Ng(.{b6npݘ\wb(753> 5EHysSv{ )[=fI3֕QGHܹlXyF{GF}4]fkGO;6ן 81[=,G'%. -{XDn8MxdJM緳د@HTW7G@7'Bh!ȧ|^|Za>-e|/}ڎkrAO[~ }3ވi#ާͼ?mmA^xiFڇ朐a83ix"=ПC{v֐a z6j"ZIAP|2>2$ ՌW&q@bOxn TOI(Pxk =Sw'@uG&oTe<`hTM" LBjƫ:c7 33 >'0 zhKt7'rNbj&='Aya>#GxPmOjIPm1_&BF> 5g>$H8RD \g=Jړ8$Pe䧞2|?B%IP9u;$^7&CesrNy|ܜ)#_7c6Tf ![E2ʃj '-Ykݸ?6\:ϕwJd\=gsN~+'/G0 {UBfD]|#r5X& kG&()x {D U?w @+u[jlz M&(}&⸉'Wډ'ȗl'X6D#\ٻpxLnf>3D3D:EIlx}$`mh;خw>7F^>.'w{Ԅ+z!\3.I+wGG؞=?jwvT#Cn{?atv yAV_}HL[)ڃ3)T}YIqU]Ҕ0)O|_,#U(6BTV{_U^2jGD莓]ZXh5m"Ҭ\+et, =XP4ɪӀ=+} 'y `Y[" lUIs5'K$zcE{3^Tmc9 O~uXڍ}zhlWϓ0ZNԞ|J״'?Dz*.G"vYpUҪ,bҶWGi ;I3vg2It؇ʪڸQ@=] Nu[vnvVgjڃT#]؍ЧWY[ulUe}'GyhWe+!C-hmmKhBQ.{BԴ{X`1וD}Q1fY_{&\Cއ鲮,#YLO6WU[+&g (n  gh =!eQ$Q\3v&!eݙ8rWA2}C d;zME|CX!5Oj*]kY8ZCNk{UYqk1B»{ 4eL%tm e?#luY?0 aCpT4dתG⪦\;\ X^*8FPdX򓵣H]lUˋ 3JޕIG.Brȕ6H_mAN28-F"(&- ֱ-䰫-3KH$Q_{c_(qn|kI$-R%7 k zAq;H&td?&dƵ׌L&r4ThR1Lȵ٥wV *' tkobԤlo)3m(mGHY yzRV-]uk6'giJ2]$MK{%<4BQv**:P=y2dM-K99upĵQߔ2*WT+l&Uu' ` FH^B Ey<=UmUBv*,l@;O$#,(c&M2Ej4.Jakwt n\y08Je>$E;{Ei&eK6SZ#)𒢆 Je0ڮZtr@mA!)0 -Okc֖-¶2LI`>XvAV(wU޺א"J2aJn6`WAaRdAbQtmU+$6XrNz T+,6dA%%$q=ɤ|۠K^LRb,DK+3쮹׭M};ε9EL@Y)ed*u\:2(Eb9Eb\{hb%!j$ǰY_DAG v'9.&J[ލ}vUߤúmK0a5)>d!ؔr+>T3kڋ'>XBJZw^?C V$;d)Ov;8^YrePJc;%%J(A -+ΔRB$Us DX/82au$B,W>zl,Vke] ;)j(Bُ2*)=4SCS {]464YXw9bMZ<ˋr&7V=wikGajd?mocux/b΀aI. \~myh'X *}Jgn-diѼkRSY1e &eGi!H#Aڛ١4P=o$f{F+kѤStp5۔ ᚔj1V^TCX]"0Fp2 jra -&H,RQv0cWƵ}g[_P @ 3 Ӱ)k&ҾL \L&#XG3i豈FڭA+זÊ}ܵc8ZRGUPTʋv3=Rf~'+һf@cSέ헍TڃU`k]{RwH 5򏽀mŵ+b:EXߤ(:;RG)`SE,#f!x)'G~}&ӏZT$Q΢6*5`JqOgܽË2G&<$`U{p6\vo]_Zر1֮ 0lNgk{E ۻvRWNu 0D mڵծ *M&i~& ` 2~T1܉C*_*D]C*}&zcܱ(}stK9I_lhni2jжW{y'~T:HԢs\W2s90gufړ{8)B]3|?jJ0 rkJjp ^|Jr\ݹߏU^LS6 Z%xL*k"P坴C;.M;^?]ZWkX~j/`0ciU>,#WQ_ᏼvVjA']mUAV:?ZVqth5=fZ56T')5IQ%B0n+U*0wpk2WhrͰQo8A"Iϫ}}k%Ꮒ8H h@(l`ZW{gKəBO ) DʼnvNRJRW{pQ\ g,E躮_M*01: G/ tS$M9~ruH#ú!Q_MbFվM9[AʕM|[crƘi1[0(~@yWe.(Ɗf%2ޅ8j_`[r\N\j~XsW= lSi<ʭk(t SZvC^.%ٯrЀ)Үt ZjcQ_Qmc`fwǐ8S7zUWMhMոs7 ] vPz(}VF`w*jTFvcd16ϔ Wy4^Fq^ew M\m#PXZ;;JJZE<{0bXZ2HSվ;eP ǐaW 5ړC&$$2L2)[}L"șXG$`&!!d 5Ð/ r^$0.w Yq ++[bH'W{U9.`$H}@#t8~WaK.jO>/VW{W8nD &l0%6Xr|ë$I.iy,h:"t2OryHC0-|rv#*] Yj!1Ͳ`(жD`UFȨ˴H)t ]*a;(\^ƂE jOj/`/ U~tb+z Z{I2#' &&,AWĀ *M6tD@m% w5x\=9\ÐjOCվ4֗pD+WSډz}I4Rn{)6tT,Og7d4mtpT)$ӎ:aϠ1XPuے<^eөJ%T1e܊(3cL {=d0-Z$S?E>3ٿAW0(sCK_mѺ:q %FN,zxY 8I~ѝW* _o0M9;\O_Zj/}Dv4Rރ(+IE$?GiLZ UBTӢŲbM&#x:\Jj{РL:[Kahq^K*wWۋv,?<$"V%0նYviDdE!Z)\\F%JL>1c/1~2Q#8Tgd>S7Së^H{?VJZwPpW۽ƍnaf_m/Rd>ZC$RDn5$ȫK/B^>&mca@1li1 Q+b F\M{PCY k$״1%Tʹ>ʶ7"y P:\CЀW7o~ۏ_~ߊdž_|[U\￵>\'ğ>~!.t۟~md1?N—msOaQ T_Qn*(;ɳ( ?m~h#)p|Q|w/?/-B~Ͽ>׿}盾xz1jhA.{D]?Oon:ySu~ӧ=}> 7B:DRWLܩ5O_wo׋x{G=~u^u;)وt9@eQȆP#ŋ<ƻ<9 9Y\(UBYֻjgh3#=rC8=#.ϸ~ 9rڣlU,9%G}'w9aG>A`qB{<;^#=9$G3ȟ|)=RN{̐w{)=()W{{})=R^ck} {_c/ɻg=[_GDEoSi=䰇G͐\=f!֐;<<-=(,3[Vț%] Ǫ ʕׯ52"!8!.G=i!x;5Prأ<rأ@㐁}ƻ<xGk!.W>]=NiaυU{w#~9ښi;k=bs=JI{rݯ=bG)!:pCu#F{-B{,>OK{rc͐[ X5*!o^ZaC{L޿= -Ǭ!=f yB{rc~#1zy\C{t 9Wa[~=z 9Kamva6C{rأՐ'_za {Լ^t橼zjԐB{r(#8*-G)!G);!G^VƳx_ {t#z,$!=y}c~l yc>K4#d)/>o^?I{Ւ| ^󩖴S-iB{ 9yn{p~CUkڣא_0|B~[!=9A0G]!=8߮y}η+O^=jW6^=YӋB~!^r9̉>Y8cre{?4.w6#"ʋ9!~ 9ᭆl+N@eOzVȰG Q'_xv^y5dc  +7u=?SD9a@!=_9AM|^+ϸ~ 9Asϩy}#B!=蟮y}++=<K{Gx[#=-1"=/TK{3Z޲קk%A缇|^WnOa>B{hau;?!~i/\1~O#}2cM^woZȇoy?+|C_i;WW{puܯ~aGn+Gm}=?`w?\9~\W+=~_9ʑOڃ\M9\=>uK{p}rcW{^cgd)>ӕGW{cFșY!=N^^;fbԴ=標^z+yE e<9G|1O>n׵ԏ|]Kr8/ 9u_3џ3{0}=`:#xs13" {0^#xk< 9̦\c=/ /i+8ol;o/[B 9c=>| 9c=N/e?\N{R|#=Jirڃr^G 9푿￯O=wO=zz3 q>?v>G/x@:η8烟|~/~՟?i/~qO=rc9r#~%?տ?E<|S_?E?׃৸^xO ?/x2 /O?BNT 9d?S%Oz;#^৸^?||S\烟/?xb=)O1X~zSWփb<?h=)փ~b=)׃~d= {0[~ Tƃ=Z-jiV9/kf TOOkf?ތY^oys^/;ߵk=8ZJ{~f^~ϻ3|i?;g=F^?#^k=b>?< 9:iI{|;O.Q1,Ϟ| 91;GGK{p3B{|'?vșZ!g~jrZ<{G=%>rFȑ5v}u5_Oep~*%nO"BqrpK ;SO݁TgwOE;S݁|Tw2?"7H{Oe{i{=v2Gڃj=_;Sy>gڃĞi='v^ݞi{=v|i#= G=j^?A{jcoOM{п=5Azjc_OM{пO'k~~D| {?UߞO'S5:~=_Oj~=_Ojx}3g=ww9aG޿<3ȭ>|rڣh!.=zfϳ3>jȫ { 3~w߇=zzN{>'aGN{m_\?r#ma{g~Ys|y/h%Jڃx?U#`|a%?U#=b_XI{0x3ް`|a5skaza[#yc=c*li;Zڃ?zOq?TͿ7z=)!W 2>S{SO8?ld[Qw6-OWrf?0ޱco[r?o36w{[O>f| #[O~{23[>fendstream endobj 13 0 obj << /Type /XRef /Length 38 /Filter /FlateDecode /DecodeParms << /Columns 4 /Predictor 12 >> /W [ 1 2 1 ] /Info 2 0 R /Root 3 0 R /Size 14 /ID [<86abbd54343072bb81c8efa7fde4cc26><86abbd54343072bb81c8efa7fde4cc26>] >> stream xcb&F~ c$wPG#iR endstream endobj startxref 27848 %%EOF proto/vignettes/proto-smoothing06.tex0000744000176200001440000000031012065354671017471 0ustar liggesusers\begin{Schunk} \begin{Sinput} > oo$splot <- function(., ...) { + .$smooth(...) + .$plot() + } > par(mfrow = c(1, 2)) > oo$splot(bass = 2) > oo.res$splot() \end{Sinput} \end{Schunk} proto/vignettes/proto-smoothing06.pdf0000744000176200001440000002055512065354671017457 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 396 /Filter /FlateDecode /N 9 /First 53 >> stream x[O@/-cH01nMwk;R 1if~gTC +!IBKAԍ&rH׻6.QymM> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 12 0 obj << /Length 4969 /Filter /FlateDecode >> stream x\KGb"CKR ',P""ߧ9^[Na?*sk;Gg(Gg)GLߟ~77_ǟ}_|ۧpz?){O~hy둎ri ?-L ;{/+w:M؟gNG6.g3r]֍,ո%ϔ9{dY<+6h1lL[+Mq'd׹iğijh>r&Ys3cLD\gn1YLOC>C8z=gH|šP]xfr{҈21ÊgfRRZa>h$"n2Y';؎KKdsv%1eD^ UF;|:*^ ޷pM`opn1OWS>7a2K_Ϟ"MĂ <ثGmL_*$x {D@Gs}Ll[<)gt >q PMۨ,fX +By(?.Cm2m LHj)Myc2#h2VMؤs3k2>H<=Xl#ئ4d`xK |6q]RQA9xwD.1V5Xa:j r|]jq=ւPڕT0.[W 5ݼ%2B u m]NQ0]\XVYڈo .edժ9E:x籨@Og@?[swE><ml½It'W"[/_|0y񯿿m}~-o/ISk^b:}NI8"u:+T)0q3,"gf÷"k0=a˛Jx1MYmU 24(T"LFK!GZvىXRT$'yKF9w<5Q%ˁ\DdۖC&@m7 (mCHo7sPH b,+9A@%"H}a1ҏ$iB$Ц` &I { yv ͐hDb \SFd=eȀWɛ`d$dc.MP 5`T3QQH*,psjMfGN A$h[;,\*5@ɶ'R&|vb}{9c#۟9H'Ss,63 :3"0Ml]nD9$p:SMT7;&VQAO&jTȡۇ7h %&u h0ަʵW r}ImfBQoLJ]ݙl~?LH~Luѐ7NGphƧ1ÀF< . 0mZ?dUep}`" UxPnhf f~?i_3cm!9|Cs]%Of6l. n+pLZӆ@WeBM;\%(ECFvPvhF`!xUZ_41x ]hnF,4]\ gP'x-{(q@UUn52)o%B!SYx>G@LJD%_= IrmXA3誒`sCM" tFCe?-ѡx-\UK_ㆼE<9q OGF/7𢡊SCc'AN˅W\:rA 3/}sA)z ܜJ0X4 ;;f9sQo}=R0۠ 33П 3N_ 7z*6XT?8*Mkd Wb%*{tp9}i[K Cjr}i*%]NB:u,5"M77Nt20#]=2o 9Rp5.|-U)s<#t!cJ׸'B% cH"Cf7p{!3+h{Y[;5~kUHI2P2ǟYgX䱨H*ݐDz SǓ OplhׅCN|{EC]]܅I5__gwFp}7g300 k9pEKYq ǸoTp|4?aƝ=vā*/#q\M]n;ii^&y{d>cLSĘ0u%(μk܉x;:]㷋c{'Fxt,X*BNn9]ir f88ia]DSUi=Ph١Uhj^wo^*_z%vx{Fވ%׹r%YwAƲޡFw/%h6OB&ߨڵ=XBQtߞlnO\>5$x|IbumBs ;Č* \A(QQvg=)EYo]tWTsuM\>r[ϱ^9>ESvk}#!;[m}JgWy;uXE_AcίDqG|߾_^9pv7>~4uff_?! ql ͎XXTv. C&\U:8VךIW%:Sv勇XN ةpeE%͒T/:JI~z; :Pɖ)0S^4kzQhʪ?QJ>R-PEBu:fpSU`6Zhn `1b3g8hjIIGDEYY^4>U' ?Ws#]Ui^SU]njqD Eǎv0e{1N%=OB A-(,(߳CǶMCa,zD ; qZ\?ԏmzT7?Hs|p.rRʗpչ'Z'fP!MI(!zPw8h /|>8\IdNK< &H}5{Wu~,gً.7=Kp?j go5-zݯU@4׬T5[XdҦ!=)`q^HKiO[ޚUA$`l4n.#iY"N\`Lj7ݥƛOKWSCdZ'u 㪆eɏo} & x9^?ŅkrmmȾ.N4MeCaM@<~DH'#/zJ>ʟ%<7'c ʟz?O O!'R&ꪉkqٟT9k?՝싅O&wDendstream endobj 13 0 obj << /Type /XRef /Length 38 /Filter /FlateDecode /DecodeParms << /Columns 4 /Predictor 12 >> /W [ 1 2 1 ] /Info 2 0 R /Root 3 0 R /Size 14 /ID [<86abbd54343072bb81c8efa7fde4cc26><86abbd54343072bb81c8efa7fde4cc26>] >> stream xcb&F~ c$wP&iw endstream endobj startxref 8249 %%EOF proto/vignettes/proto-smoothing04.tex0000744000176200001440000000031112065354671017470 0ustar liggesusers\begin{Schunk} \begin{Sinput} > oo.res <- oo$proto(pch = "-", x = oo$residuals()$y, ylab = "Residuals deg K") > par(mfrow = c(1, 1)) > oo.res$smooth() > oo.res$plot() \end{Sinput} \end{Schunk} proto/vignettes/proto-smoothing04.pdf0000744000176200001440000001420412065354671017447 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 367 /Filter /FlateDecode /N 8 /First 46 >> stream xuN0<Kc;IIQP%H*&K*o:ih/'Y B"X@ "00p a,6< Df:`^ttŝ`H$EIȆgaٔ 7)Ĉ#?|S~e 74m7r2HS!9J'f+8O^AaTrfN4c"jtG9:d6[.,On;ߌ~2+AeTёaYOȂ&LZ,.W;]Ǎ7К.(g|}OK]R=Jk.퐐(tc/g^zѩB^.ƋțOr<@_8endstream endobj 10 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 11 0 obj << /Length 2717 /Filter /FlateDecode >> stream x[M_1G1H(H[ ``Xaa׀TU۷+q5Cn:oo}>]>mmnn>l3{m^|͟~|ҞRz_/_0O[x_>w+5sWo^ow/ܿ1xT,l{[k}k/}-C)k>?r7*8cU2^{tz{KL[9=]Λj(Zv>o$ks+Ey~pNgʩQʩQ0yiq˜X9~zc*]1`+NEiEFkÌG30`&p,!SGMznCR"$XEh\`H==dYRۥA %h5`errK3/ q~E "߮‘6Gk{P@dj-k3#\k+ؙR$1 \WjI>JV0гq)b`Ãdisd"H#q :esDjX9|}"*ZhSYSf'"}Q$`"[p=ԄvM$ps2X{ I߶$1VnS~>YjD#>ok$kǵi g^c 9TUxȧ"+cZu`MyV;7%%% hshb("Њ 6 X uqK aI|{1WZz$Zmsd@=0Őʮ_w+2y"SẸ̄?cJfyyXWVbH5=XR",:֨f$#2&EޜEvK``M|a{TX-Tk(H KDhSI]  05155<E "cm)EcXbx @K*R^"u^& H1a#eplϼaKbB²XaW(9w8ok%gYm$KX?4o4zV@nPJLr-'5U1aK<8"Q9AyZsW.4ڄ%@`0/,(/&??z1ZU`_<51{){LJx{n6\o_|]:]_LL`4brjt^Np[_=Ty=5\=UV9C|?{7vʊZ]z$Ay_M&ΏG(<Ȏֳ?Yp7uᬎ?/~_ཟo_a^۫=~qYUs׎D?o~~!/$_tKIĩ[әFͷA448@1y8YOUlA\(C.t׭bjaRxKIqt;$(.4Mkx-I~cFw(/N#{e/2PW.UrWv3a8dKR6uXMrU S'M(OD-F(O>*Y󕦎mJc*$FX]V{rQgϫgaU5?*;Y7 ~J Lv%yCQrWi:XA q:e}inއNTUin:$un 7{e\?t:a!ݻlYBvͬɅH? T}?Knsjst!w> ׯ$_pK4MY(Q%7b <%,cҽxoq&ǜՎٟ/U(|E}%W/=宺VRߙ?ޥ+eS\AܹQ_˒S IiB lGi=u\#4dO!1jc#-{|pq>wK?xnGݻ 9Sܾ YJˆ~Tҡ\9P6`A̮c4<{R,C ~ ͚rH98)ao4j?z駱Hٸ1o!ےkWLu-Ir4V _5*zf)OZ<{go|*.nF{ry~rzO5$w7] {~4?^\?*evɚ'?޳O?oػ9>ػӜ\~]=YdҏRkj&} Cendstream endobj 12 0 obj << /Type /XRef /Length 38 /Filter /FlateDecode /DecodeParms << /Columns 4 /Predictor 12 >> /W [ 1 2 1 ] /Info 2 0 R /Root 3 0 R /Size 13 /ID [<86abbd54343072bb81c8efa7fde4cc26><86abbd54343072bb81c8efa7fde4cc26>] >> stream xcb&F~ c$@g|b endstream endobj startxref 5968 %%EOF proto/vignettes/proto-smoothing03.tex0000744000176200001440000000024412065354671017474 0ustar liggesusers\begin{Schunk} \begin{Sinput} > par(mfrow = c(1, 2)) > oo$pch <- 20 > oo$smooth() > oo$plot() > plot(oo$residuals(), type = "l") \end{Sinput} \end{Schunk} proto/vignettes/proto-smoothing03.pdf0000744000176200001440000001624712065354671017457 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 397 /Filter /FlateDecode /N 9 /First 53 >> stream x[O@/-CH 01nMwk;R 1if~gT@ '!IAKCԋ&rCH߿MKT^[*I$r y<˃YR`?UA +.; y9x|QKkڢ9,I] 9*vv*2{;x8AN`)0i8 HrU !n9yi<vh3KA8tz wk_Pl"%=YuӉrͲGP%m%:[_#hCl؋6S#՛ 20 N}jSE3^bdh?>VO@/-L (wĢendstream endobj 11 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 12 0 obj << /Length 3746 /Filter /FlateDecode >> stream x[K^GϯK{KwW?R$GbdlDb$Osل.V?N=&_㇣3cYK?G9?>yQz_&s#ׅM=>z~<~?>WHVl~gRy=eهsG9O,vL.yĵWd jG:5nl3˙_X켜mCg O;nlV:f-r&{%rn֙bcQV5Ek>idDd\ X5^9 .;p:s*!۲ ϑ# zf6ND;y3Nl %%qyPkۧEg-\^$|FָáK.drHV$`SWh&9:ǙM1Q\3tqne:+Һ [,? H;x5%rvV$sMv}3 W+gw[ 7ăH`DBY}֠iBZ4n`gRޔ7g, ~ㇿ@f,Jr1h I+1/ ]\C&[;[Ϲ s.ҸEEYX=-6/ ? E=QB%}U ) >+ +ߊbqX/l2ԮnhbLԈVD;mXE.A ېCbL"LBJAЁ.F Ԏ : ' !P],bZbu>;k 40|S8$fxjq{nP:40![ך 5|5!ηCېrv.&+nd'!IM%D^C^TN1\׍dBY^r:0 f!r>XT)TΝ+(c KuGRay3+H"D(Cဳ֍22_!s!7T5xq>J#lC5+."sٺX=.tnz}|uxgXT'(j޸Eލ{474.n~oί}^$LGC}¿)}`!%HȈܑó 6szmg8SVn!VFEF~ on>fo{?y?Ceڐ9".{}8ǃM̥2A^$+ګ')E^`bzZح+L4^<~ݟg?o/S6OB>s/z|v7c~]u܈8qʫ;( Av'w9文;pHrʗ$ܠ栳rDH\t?ŋ\AM5ÑQ~`+ }>ph|yǔB ՚dw'݀.7YrK>(WPU% AAt".G"I{Pq64eFE+?OE) V=EKqHA߮UCzEӱ饇ć]Vt!!ѣn@ M.;[6bЍOuS)D/Ko-!=1t7M$X""_뤋]2t@/]|U8d_CS:,u=ܜ>S CcT1Hy9ֳ*qݻKf1ãwk_Q_W{k͕˰ܮ*Iː0t(6TS. w %_fM/GNmIWW! z&ۘЛ2cw%)w|z1˦J!m ۰}mKH_(w<s0Y׸q0D7b>mpo~1Lb瘚t=(M1ޝDЙ֦[j+VLTDc(,#y ۦbPw,~5P1F_X{-9Fa5T;~}P-eqPd 勽S2*nj:-k҈)h|+aӨZ)ҤNK|s"%3M-xC񜡔U~{bЄ|UP=TW=Cd]PP%SڙeCivPQt <=*Mͭ\m>E CR>]%@U2ܣ 襺CbxqJ*c~|N3rHʾmW͢ ʶH*}tŮ_ 9g7T{[M۝=׃~y7~˄}q{4D/`V%n!Eލ;Fs4.nɊ~`_h=G Oܒ~@}^bJik9M>%կCeIgJ?CQ3sd8tqoKeendstream endobj 13 0 obj << /Type /XRef /Length 38 /Filter /FlateDecode /DecodeParms << /Columns 4 /Predictor 12 >> /W [ 1 2 1 ] /Info 2 0 R /Root 3 0 R /Size 14 /ID [<86abbd54343072bb81c8efa7fde4cc26><86abbd54343072bb81c8efa7fde4cc26>] >> stream xcb&F~ c$WPkj endstream endobj startxref 7027 %%EOF proto/vignettes/proto-raw.tex0000744000176200001440000014640712065354671016127 0ustar liggesusers %\VignetteIndexEntry{proto: An R Package for Prototype Programming} %\VignetteDepends{} %\VignetteKeywords{object oriented, prototype programming, S3, R} %\VignettePackage{proto} \documentclass{Z} \DeclareGraphicsExtensions{.pdf, .eps, .png} %% need no \usepackage{Sweave} \newlength{\half} \setlength{\half}{70mm} \author{Louis Kates\\GKX Associates Inc. \And Thomas Petzoldt\\Technische Universit\"at Dresden} \Plainauthor{Louis Kates, Thomas Petzoldt} \title{\pkg{proto}: An \proglang{R} Package for Prototype Programming} %% \Shorttitle{\pkg{proto}: An \proglang{R} Package for Prototype Programming} \Plaintitle{proto: An R Package for Prototype Programming} \Keywords{prototype programming, delegation, inheritance, clone, object orientated, \proglang{S3}, \proglang{R}} \Plainkeywords{object oriented, prototype programming, S3, R} \Abstract{ \pkg{proto} is an \proglang{R} package which facilitates a style of programming known as prototype programming. Prototype programming is a type of object oriented programming in which there are no classes. \pkg{proto} is simple yet retains the object oriented features of delegation (the prototype counterpart to inheritance) and object oriented dispatch. \code{proto} can be used to organize the concrete data and procedures in statistical studies and other applications without the necessity of defining classes while still providing convenient access to an object oriented style of programming. Furthermore, it can be used in a class-based style as well so that incremental design can begin with defining the concrete objects and later transition to abstract classes, once the general case is understood, without having to change to object-oriented frameworks. The key goals of the package are to integrate into \proglang{R} while providing nothing more than a thin layer on top of it. } \hyphenation{ma-ni-pu-lating} \begin{document} \section{Introduction} \label{sec:intro} \subsection[Object Oriented Programming in R]{Object Oriented Programming in \proglang{R}} \label{sec:oo} The \proglang{R} system for statistical computing \citep[\url{http://www.R-project.org/}]{Rcore2005} ships with two systems for object oriented programming referred to as \proglang{S3} and \proglang{S4}. With the increased interest in object oriented programming within \proglang{R} over the last years additional object oriented programming packages emerged. These include the \pkg{R.oo} package \citep{Bengtsson2003} and the \pkg{OOP} package \citep[\url{http://www.omegahat.org/OOP/}]{Rnews:Chambers+Lang:2001a}. The common thread among these packages is that they use classes as the basis of inheritance. When a message is sent to an object the class of the object is examined and that class determines the specific function to be executed. In contrast, in prototype programming there are no classes yet it retains much of the power of class-based programming. In the fact, \pkg{proto} is so simple that there are only two significant new routine name, \code{proto}, and \code{clone2}. The other routines are just the expected support routines such as \code{as.proto} to coerce objects to proto objects, \code{\$} to access and set proto object components and \code{is.proto} to check whether an object is a proto object. In addition, \code{graph.proto} will generate a graphical ancestor tree showing the parent-child relationships among generated \code{proto} objects. The aim of the package is to provide a lightweight layer for prototype programming in \proglang{R} written only in \proglang{R} leveraging the existing facilities of the language rather than adding its own. \subsection{History} \label{sec:history} The concept of prototype programming \citep{Lieberman1986, Taivalsaari1996a, Noble1999} has developed over a number of years with the \proglang{Self} language \citep{Agesen1992} being the key evolved programming language to demonstrate the concept. In statistics, the \proglang{Lisp}-based \proglang{LispStat} programming language \citep{Tierney1990} was the first and possibly only statistical system to feature prototype programming. Despite having been developed over 20 years ago, and some attempts to enter the mainstream (e.g. \proglang{Newtonscript} on the Newton computer, which is no longer available, and \proglang{Javascript} where it is available but whose domain of application largely precludes use of prototype programming) prototype programming is not well known due to lack of language support in popular programming languages such as \proglang{C} and \proglang{Java}. It tends to be the domain of research languages or \proglang{Lisp}. Thus the availability of a popular language, \proglang{R} \footnote{Some indications of the popularity of R are the high volume mailing lists, international development team, the existence of over 1000 addon packages, conferences and numerous books and papers devoted to R.}, that does provide the key infrastructure could be important for developers. This work grew out of the need to organize multiple scenarios of model simulations in ecological modelling \citep{Rnews:Petzoldt:2003} and was subsequently generalized to the present package. A number of iterations of the code, some motivated by the ever increasing feature set in \proglang{R}, resulted in a series of utilities and ultimately successive versions of an \proglang{R} package developed over a period of several years. An initial version used \proglang{R} lists as the basis of the package. Subsequently the package was changed to use \proglang{R} environments. The first version to use environments stored the receiver object variable in a proxy parent environment which was created on-the-fly at each method call. The present version of the \pkg{proto} package passes the receiver object through the argument list, while hiding this from the caller. It defines the \code{proto} class as a subclass of the \code{environment} class so that functionality built into \proglang{R} for the environment class is automatically inherited by the \code{proto} class. \subsection{Overview} \label{sec:overview} It is assumed that the reader has some general familiarity with object oriented programming concepts and with \proglang{R}. The paper will proceed primarily by example focusing on illustrating the package \code{proto} through such demonstration. The remainder of the paper is organized as follows: Section~\ref{sec:proto-class} explains how \code{"proto"} objects are created and illustrates the corresponding methods for setting and getting components. It further discusses how object oriented delegation (the prototype programming analogue of inheritance) is handled and finally discusses the internals of the package. This section uses small examples chosen for their simplicity in illustrating the concepts. In Section~\ref{sec:examples} we provide additional examples of prototype programming in action. Four examples are shown. The first involves smoothing of data. Secondly we demonstrate the calculation of correlation confidence intervals using classical (Fisher Transform) and modern (bootstrapping) methods. Thirdly we demonstrate the development of a binary tree as would be required for a dendrogram. Fourthly, we use the solution of linear equations to illustrate program evolution from object-based to class-based, all within the \pkg{proto} framework. Section~\ref{sec:summary} gives a few summarizing remarks. Finally, an appendix provides a reference card that summarizes the functionality contained in \pkg{proto} in terms of its constituent commands. %% \pagebreak[4] \section[The class "proto" and its methods]{The class \code{"proto"} and its methods} \label{sec:proto-class} \subsection[Creation of "proto" objects]{Creation of \code{"proto"} objects} \label{sec:proto} In this section we shall show, by example, the creation of two prototype objects and related operations. The simple idea is that each \code{"proto"} object is a set of components: functions (methods) and variables, which are tightly related in some way. A prototype object is an environment holding the variables and methods of the object. \footnote{In particular this implies that \code{"proto"} objects have single inheritance, follow ordinary environment scoping rules and have mutable state as environments do.} A prototype object is created using the constructor function \code{proto} (see Appendix~\ref{sec:ref} at the end of this paper or \pkg{proto} package help for complete syntax of commands). \begin{Scode} addProto <- proto( x = rnorm(5), add = function(.) sum(.$x) ) \end{Scode} In this simple example, the \code{proto} function defines two components: a variable \code{x} and a method \code{add}. The variable \code{x} is a vector of 5 numbers and the method sums those numbers. The \code{proto} object \code{addProto} contains the variable and the method. Thus the \code{addProto} \code{proto} object can be used to compute the sum of the values stored in it. As shown with the \code{add} method in this example, formal argument lists of methods must always have a first argument of dot (i.e. \code{.}) which signifies the object on which the method is operating. The dot refers to the current object in the same way that a dot refers to the current directory in UNIX. Within the method one must refer to other variables and methods in the object by prefacing each with \code{.\$}. For example, in the above we write \code{sum(.\$x)}. Finally, note that the data and the method are very closely related. Such close coupling is important in order to create an easily maintained system. To illustrate the usage of \code{proto}, we first load the package and set the random seed to make the examples in this paper exactly reproducible. \begin{Schunk} \begin{Sinput} > library(proto) > set.seed(123) \end{Sinput} \end{Schunk} Then, we create the \code{proto} object from above and call its \code{add} method. \begin{Schunk} \begin{Sinput} > addProto <- proto(x = rnorm(5), add = function(.) sum(.$x)) > addProto$add() \end{Sinput} \begin{Soutput} [1] 0.9678513 \end{Soutput} \end{Schunk} We also create another object, \code{addProto2} with a different \code{x} vector and invoke its \code{add} method too. \begin{Schunk} \begin{Sinput} > addProto2 <- addProto$proto(x = 1:5) > addProto2$add() \end{Sinput} \begin{Soutput} [1] 15 \end{Soutput} \end{Schunk} In the examples above, we created a prototype object \code{addProto} and then called its \code{add} method as just explained. The notation \code{addProto\$add} tells the system to look for the \code{add} method in the \code{addProto} object. In the expression \code{addProto\$add}, the \code{proto} object to the left of the dollar sign, \code{addProto} here, is referred to as the \emph{receiver} object. This expression also has a second purpose which is to pass the receiver object implicitly as the first argument of \code{add}. Note that we called \code{add} as if it had zero arguments but, in fact, it has one argument because the receiver is automatically and implicitly supplied as the first argument. In general, the notation \code{object\$method(arguments)} is used to invoke the indicated method of the receiver object using the object as the implicit first argument along with the indicated arguments as the subsequent arguments. As with the \code{addProto} example, the receiver object not only determines where to find the method but also is implicitly passed to the method through the first argument. The motivation for this notation is to relieve the user of specifying the receiver object twice: once to locate the method in the object and a second time to pass the object itself to the method. The \code{\$} is overloaded by the \code{proto} class to automatically do both with one reference to the receiver object. Even though, as with the \code{addProto} example, the first argument is not listed in the call it still must be listed among the formal arguments in the definition of the method. It is conventional to use a dot \code{.} as the first formal argument in the method/function definition. That is, we call \code{add} using \code{addProto\$add()} displaying zero arguments but we define \code{add} in \code{addProto} displaying one argument \code{add <- function(.)}, the dot. In this example, we also created a second object, \code{addProto2}, which has the first object, \code{addProto} as its parent. Any reference to a component in the second object that is unsuccessful will cause search to continue in the parent. Thus the call \code{addProto2\$add()} looks for \code{add} in \code{addProto2} and not finding it there searches its parent, \code{addProto}, where it is, indeed, found. \code{add} is invoked with the receiver object, \code{addProto2}, as the value of dot. The call \code{addProto2\$add()} actually causes the \code{add} in \code{addProto} to run but it still uses the \code{x} from \code{addProto2} since dot (\code{.}) is \code{addProto2} here and \code{add} references \code{.\$x}. Note that the reference to \code{.\$x} in the \code{add} found in \code{addProto} does not refer to the \code{x} in \code{addProto} itself. The \code{x} in \code{addProto2} has overridden the \code{x} in its parent. This point is important so the reader should take care to absorb this point. This simple example already shows the key elements of the system and how \emph{delegation} (the prototype programming term for inheritance) works without classes. We can add new components or replace components in an object and invoke various methods like this: \begin{Schunk} \begin{Sinput} > addProto2$y <- seq(2, 10, 2) > addProto2$x <- 1:10 > addProto2$add3 <- function(., z) sum(.$x) + sum(.$y) + sum(z) > addProto2$add() \end{Sinput} \begin{Soutput} [1] 55 \end{Soutput} \begin{Sinput} > addProto2$add3(c(2, 3, 5)) \end{Sinput} \begin{Soutput} [1] 95 \end{Soutput} \begin{Sinput} > addProto2$y \end{Sinput} \begin{Soutput} [1] 2 4 6 8 10 \end{Soutput} \end{Schunk} In this example, we insert variable \code{y} into the object \code{addProto2} with a value of \code{seq(2,10,2)}, reset variable \code{x} to a new value and insert a new method, \code{add3}. Then we invoke our two methods and display \code{y}. Again, note that in the case of \code{protoAdd2\$add} the \code{add} method is not present in \code{protoAdd2} and so search continues to the parent \code{addProto} where it is found. \subsection{Internals} \label{sec:internals} So far, we have used simple examples to illustrate the basic manipulation of objects: construction, getting and setting components and method invocation. We now discuss the internals of the package and how it relates to \proglang{R} constructs. \code{proto} is actually an \proglang{S3} class which is a subclass of the \code{environment} class. Every \code{proto} object is an environment and its class is \code{c("proto", "environment")}. The \code{\$} accessor is similar to the same accessor in environments except it will use the \proglang{R} \code{get} function to search up parent links if it cannot otherwise find the object (unlike environments). When accessing a method, \code{\$} automatically supplies the first argument to the method unless the object is \code{.that} or \code{.super}. \code{.that} is a special variable which \code{proto} adds to every \code{proto} object denoting the object itself. \code{.super} is also added to every proto object and is the parent of \code{.that}. \code{.that} and \code{.super} are normally used within methods of an object to refer to other components of the same or parent object, respectively, as opposed to the receiver (\code{.}). For example, suppose we want \code{add} in \code{addProto2} to add the elements of \code{x} together and the elements of \code{y} together and then add these two sums. We could redefine add like this: \begin{Schunk} \begin{Sinput} > addProto2$add <- function(.) .super$add(.) + sum(.$y) \end{Sinput} \end{Schunk} making use of the \code{add} already defined in the parent. One exception should be noted here. When one uses \code{.super}, as above, or \code{.that} to specify a method then the receiver object must be explicitly specified in argument one (since in those cases the receiver is possibly different than \code{.super} or \code{.that} so the system cannot automatically supply it to the call.) Setting a value is similar to the corresponding operation for environments except that any function, i.e method, which is inserted has its environment set to the environment of the object into which it is being inserted. This is necessary so that such methods can reference \code{.that} and \code{.super} using lexical scoping. In closing this section a few points should be re-emphasized and expanded upon. A \code{proto} object is an environment whose parent object is the parent environment of the \code{proto} object. The methods in the \code{proto} objects are ordinary functions that have the containing object as their environment. The \proglang{R} \code{with} function can be used with environments and therefore can be used with \code{proto} objects since \code{proto} objects are environments too. Thus \code{with(addProto, x)} refers to the variable \code{x} in \code{proto} object \code{addProto} and \code{with(addProto, add)} refers to the method \code{add} in the same way. \code{with(addProto, add)(addProto)} can be used to call \code{add}. These constructs all follow from their corresponding use in environments from which they are inherited. Because the \code{with} expressions are somewhat verbose, two common cases can be shortened using the \code{\$} operator. \code{addProto\$x} can be used to refer to variable \code{x} in \code{proto} object \code{addProto} and has the same meaning as \code{with(addProto, x)}. In particular like \code{with} but unlike the the behavior of the \code{\$} operator on environments, when used with \code{proto} objects, \code{\$} will search not only the object itself but also its ancestors. Similarly \code{addProto\$add()} can be used to call method \code{add} in \code{addProto} also searching through ancestors if not found in \code{addProto}. Note that \code{addProto\$add} returns an object of class \code{c("instantiatedProtoMethod", "function")} which is derived from \code{add} such that the first argument, the \code{proto} object, is already inserted. Note that there is a \code{print} method for class \code{"instantiatedProtoMethod"} so printing such objects will display the underlying function but returning such objects is not the same as returning the function without slot one inserted. Thus, if one wants exactly the original \code{add} as a value one should use \code{with(addProto, add)} or \code{addProto\$with(add)}. Within a method, if a variable is referred to without qualification simply as \code{x}, say, then its meaning is unchanged from how it is otherwise used in \proglang{R} and follows the same scope rules as any variable to resolve its name. If it is desired that the variable have object scope, i.e. looked up in the receiver object and its ancestors, then \code{.\$x} or similar \code{with} notation, i.e. \code{with(., x)}, should be used. Similarly \code{.\$f(x)} calls method \code{f} automatically inserting the receiver object into argument one and using \code{x} for argument two. It looks for \code{f} first in the receiver object and then its ancestors. \subsection{Traits} \label{sec:traits} Let us look at the definition of a child object once again. In the code below, \code{addProto} is the previously defined parent object and the expression \code{addProto\$proto(x = 1:5)} defines a child object of \code{addProto} and assigns it to variable \code{addProto2a}. \begin{Schunk} \begin{Sinput} > addProto2a <- addProto$proto(x = 1:5) > addProto2a$add() \end{Sinput} \begin{Soutput} [1] 15 \end{Soutput} \end{Schunk} That is, \code{proto} can be used to create a new child of an existing object by writing the parent object on the left of the \code{\$} and \code{proto} on its right. Any contents to be added to the new child are listed in arguments of \code{proto} as shown. For example, first let us create a class-like structure. In the following \code{Add} is an object that behaves very much like a class with an \code{add} method and a method \code{new} which constructs new objects. In the line creating object \code{add1} the expression \code{Add\$new(x = 1:5)} invokes the \code{new} constructor of the receiver object \code{Add}. The method \code{new} has an argument of \code{x = 1:5} which defines an \code{x} variable in the \code{add1} object being instantiated. We similarly create another object \code{add2}. \begin{Schunk} \begin{Sinput} > Add <- proto(add = function(.) sum(.$x), new = function(., x) .$proto(x = x)) > add1 <- Add$new(x = 1:5) > add1$add() \end{Sinput} \begin{Soutput} [1] 15 \end{Soutput} \begin{Sinput} > add2 <- Add$new(x = 1:10) > add2$add() \end{Sinput} \begin{Soutput} [1] 55 \end{Soutput} \end{Schunk} An object which contains only methods and variables that are intended to be shared by all its children (as opposed to an object whose purpose is to have its own methods and variables) is known as a \emph{trait} \citep{Agesen1992}. It is similar to a class in class-based object oriented programming. Note that the objects \code{add1} and \code{add2} have the trait \code{Add} as their parent. We could implement subclass-like and superclass-like objects by simply defining similar trait objects to be the parent or child of \code{Add}. For example, suppose we want a class which calculates the sum of the logarithms of the data. We could define: \begin{Schunk} \begin{Sinput} > Logadd <- Add$proto(logadd = function(.) log(.$add())) > logadd1 <- Logadd$new(1:5) > logadd1$logadd() \end{Sinput} \begin{Soutput} [1] 2.70805 \end{Soutput} \end{Schunk} Here the capitalized objects are traits. \code{Logadd} is a trait. It is a child of \code{Add} which is also a trait. \code{logadd1} is an ordinary object, not a trait. One possible design is to create a tree of traits and other objects in which the leaves are ordinary objects and the remaining nodes are traits. This would closely correspond to class-based object oriented programming. Note that the delegation of methods from one trait to another as in \code{new} which is inherited by \code{Logadd} from \code{Add} is nothing more than the same mechanism by which traits delegate methods to objects since, of course, traits are just objects no different from any other object other than by the conventions we impose on them. This unification of subclassing and instantiation beautifully shows the simplification that prototype programming represents. \subsection{Utilities} \label{sec:utilities} The fact that method calls automatically insert the first argument can be used to good effect in leveraging existing \proglang{R} functions while allowing an object-oriented syntax. For example, \code{ls()} can be used to list the components of \code{proto} objects: \begin{Schunk} \begin{Sinput} > addProto$ls() \end{Sinput} \begin{Soutput} [1] "add" "x" \end{Soutput} \end{Schunk} Functions like: \begin{Schunk} \begin{Sinput} > addProto$str() > addProto$print() > addProto$as.list() > addProto2a$parent.env() \end{Sinput} \end{Schunk} show additional information about the elements. \code{eapply} can be used to explore more properties such as the the length of each component of an object: \begin{Schunk} \begin{Sinput} > addProto$eapply(length) \end{Sinput} \end{Schunk} Another example of some interest in any object oriented system which allows multiple references to one single object is that object identity can be tested using the respective base function: \begin{Schunk} \begin{Sinput} > addProto$identical(addProto2) \end{Sinput} \begin{Soutput} [1] FALSE \end{Soutput} \end{Schunk} \code{proto} does contain a special purpose \code{str.proto} function but in the main it is important to notice here, that \code{proto} has no code that is specific to \code{ls} or any of the other ordinary \proglang{R} functions listed. We are simply making use of the fact that \code{obj\$fun(...)} is transformed into \code{get("fun", obj)(obj, ...)} by the proto \code{\$} operator. For example, in the case of \code{addProto\$ls()} the system looks for \code{ls} in object \code{addProto}. It cannot find it there so it looks to its parent, which is the global environment. It does not find it there so it searches the remainder of the search path, i.e. the path shown by running the \proglang{R} command \code{search()}, and finally finds it in the base package, invoking it with an argument of \code{addProto}. Since all \code{proto} objects are also environments \code{ls(addProto)} interprets \code{addProto} as an environment and runs the \code{ls} command with it. In the \code{ls} example there were no arguments other than \code{addProto}, and even that one was implicit, but if there were additional arguments then they would be passed as shown in the \code{eapply} and \code{identical} examples above. \subsection{Plotting} \label{sec:plot} The \code{graph.proto} function can be used to create graphs that can be rendered by the \code{Rgraphviz} package creating visual representations of ancestor trees (figure \ref{fig:proto-dot}). That package provides an interface to the \proglang{GraphViz} \code{dot} program \citep{Ganser+North:1999}. \code{graph.proto} takes three arguments, all of which are usually omitted. The first argument is a \code{proto} object (or an environment) out of which all contained \code{proto} objects and their parents (but not higher order ancestors) are graphed. If it is omitted, the current environment is assumed. The second argument is a graph (in the sense of the \code{graph} package) to which the nodes and edges are added. If it is omitted an empty graph is assumed. The last argument is a logical variable that specifies the orientation of arrows. If omitted arrows are drawn from children to their parents. \input{proto-dot} \begin{figure}[htbp] \begin{center} \includegraphics{proto-dot} \caption{\label{fig:proto-dot} Ancestor tree generated using graph.proto. Edges point from child to parent.} \end{center} \end{figure} \pagebreak[4] \section{Examples} \label{sec:examples} \subsection{Smoothing} \label{sec:smooth} In the following we create a \code{proto} object named \code{oo} containing a vector of data \code{x} (generated from a simulated autoregressive model) and time points \code{tt}, an intermediate result \code{x.smooth}, some plotting parameters \code{xlab}, \code{ylab}, \code{pch}, \code{col} and three methods \code{smooth}, \code{plot} and \code{residuals} which smooth the data, plot the data and calculate residuals, respectively. We also define \code{..x.smooth} which holds intermediate results. Names beginning with two dots prevent them from being delegated to children. If we override \code{x} in a child we would not want an out-of-sync \code{x.smooth}. Note that the components of an object can be specified using a code block in place of the argument notation we used previously in the \code{proto} command. \begin{Schunk} \begin{Sinput} > oo <- proto(expr = { + x <- rnorm(251, 0, 0.15) + x <- filter(x, c(1.2, -0.05, -0.18), method = "recursive") + x <- unclass(x[-seq(100)]) * 2 + 20 + tt <- seq(12200, length = length(x)) + ..x.smooth <- NA + xlab <- "Time (days)" + ylab <- "Temp (deg C)" + pch <- "." + col <- rep("black", 2) + smooth <- function(., ...) { + .$..x.smooth <- supsmu(.$tt, .$x, ...)$y + } + plot <- function(.) with(., { + graphics::plot(tt, x, pch = pch, xlab = xlab, ylab = ylab, + col = col[1]) + if (!is.na(..x.smooth[1])) + lines(tt, ..x.smooth, col = col[2]) + }) + residuals <- function(.) with(., { + data.frame(t = tt, y = x - ..x.smooth) + }) + }) \end{Sinput} \end{Schunk} Having defined our \code{proto} object we can inspect it, as shown below, using \code{print} which is automatically invoked if the name of the object, \code{oo}, is entered on a line by itself. In this case, there is no proto print method so we inherit the environment print method which displays the environment hash code. Although it produces too much output to show here, we could have displayed a list of the entire contents of the object \code{oo} via \code{oo\$as.list(all.names = TRUE)}. We can get a list of the names of the components of the object using \code{oo\$ls(all.names = TRUE)} and will look at the contents of one component, \code{oo\$pch}. \begin{Schunk} \begin{Sinput} > oo \end{Sinput} \begin{Soutput} attr(,"class") [1] "proto" "environment" \end{Soutput} \begin{Sinput} > oo$ls(all.names = TRUE) \end{Sinput} \begin{Soutput} [1] "..x.smooth" ".super" ".that" "col" "pch" [6] "plot" "residuals" "smooth" "tt" "x" [11] "xlab" "ylab" \end{Soutput} \begin{Sinput} > oo$pch \end{Sinput} \begin{Soutput} [1] "." \end{Soutput} \end{Schunk} Let us illustrate a variety of manipulations. We will set up the output to plot 2 plots per screen using \code{mfrow}. We change the plotting symbol, smooth the data, invoke the \code{plot} method to display a plot of the data and the smooth and then plot the residuals in the second plot (figure \ref{fig:proto-smooting03}). \input{proto-smoothing03} \begin{figure}[h!] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing03} \end{center} \caption{Data and smooth from \code{oo\$plot()} (left) and plot of \code{oo\$residuals()} (right).} \label{fig:proto-smooting03} \end{figure} Now let us illustrate the creation of a child object and delegation. We create a new child object of \code{oo} called \code{oo.res}. We will override the \code{x} value in its parent by setting \code{x} in the child to the value of the residuals in the parent. We will also override the \code{pch} and \code{ylab} plotting parameters. We will return to 1 plot per screen and run \code{plot} using the \code{oo.res} object as the receiver invoking the \code{smooth} and \code{plot} methods (which are delegated from the parent \code{oo}) with the data in the child (figure \ref{fig:smoothing04}). \input{proto-smoothing04} % \begin{figure}[tp] \begin{figure}[h!] \begin{center} \includegraphics[width=\half]{proto-smoothing04} \end{center} \caption{Output of \code{oo.res\$plot()}. \code{oo.res\$x} contains the residuals from \code{oo}.} \label{fig:smoothing04} \end{figure} Now we make use of delegation to change the parent and child in a consistent way with respect to certain plot characteristics. We have been using a numeric time axis. Let us interpret these numbers as the number of days since the Epoch, January 1, 1970, and let us also change the plot colors. \begin{Schunk} \begin{Sinput} > oo$tt <- oo$tt + as.Date("1970-01-01") > oo$xlab <- format(oo.res$tt[1], "%Y") > oo$col <- c("blue", "red") \end{Sinput} \end{Schunk} We can introduce a new method, \code{splot}, into the parent \code{oo} and have it automatically inherited by its children. In this example it smooths and then plots and we use it with both \code{oo} and \code{oo.res} (figure \ref{fig:smoothing06}). \input{proto-smoothing06} \begin{figure}[tbp] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing06} \caption{Plotting options and \code{splot} function applied to both parent (left) and child (right) object} \label{fig:smoothing06} \end{center} \end{figure} Numerous possibilities exist to make use of the mechanisms shown, so one may create different child objects, apply different smoothing parameters, overwrite the smoothing function with a lowess smoother and finally compare fits and residuals. Now lets change the data and repeat the analysis. Rather than overwrite the data we will preserve it in \code{oo} and create a child \code{oos} to hold an analysis with sinusoidal data. \begin{Schunk} \begin{Sinput} > oos <- oo$proto(expr = { + tt <- seq(0, 4 * pi, length = 1000) + x <- sin(tt) + rnorm(tt, 0, 0.2) + }) > oos$splot() \end{Sinput} \end{Schunk} Lets perform the residual analysis with \code{oos}. We will make a deep copy of \code{oo.res}, i.e. duplicate its contents and not merely delegate it, by copying \code{oo.res} to a list from which we create the duplicate, or cloned, \code{proto} object (figure \ref{fig:smoothing10} and \ref{fig:cloning}): \begin{Schunk} \begin{Sinput} > oos.res <- as.proto(oo.res$as.list(), parent = oos) > oos.res$x <- oos$residuals()$y > oos.res$splot() \end{Sinput} \end{Schunk} \begin{figure}[tbp] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing10} \caption{Smoothing of sinusoidal data (left) and of their residuals (right)}\label{fig:smoothing10} \end{center} \end{figure} \begin{figure}[h!] \begin{center} \includegraphics[width=50mm]{cloning3.pdf} \caption{Cloning (dashed line) and delegation (solid line). Edges point from child to parent.}\label{fig:cloning} \end{center} \end{figure} We have delegated variables and methods and overridden both. Thus, even with such a simple analysis, object orientation and delegation came into play. The reader can plainly see that smoothing and residual analysis were not crucial to the example and this example could be replaced with any statistical analysis including likelihood or other estimation techniques, time series, survival analysis, stochastic processes and so on. The key aspect is just that we are performing one-of analyses and do not want to set up an elaborate class infrastructure but just want to directly create objects to organize our calculations while relying on delegation and dispatch to eliminate redundancy. \subsection{Correlation, Fisher's Transform and Bootstrapping} \label{sec:corr} The common approach to confidence intervals for the correlation coefficient is to assume normality of the underlying data and then use Fisher's transform to transform the correlation coefficient to an approximately normal random variable. Fisher showed that with the above normality assumption, transforming the correlation coefficient using the hyperbolic arc tangent function yields a random variable approximately distributed with an $\frac{N(p, 1)}{\sqrt(n-3)}$ distribution. The transformed random variable can be used to create normal distribution confidence intervals and the procedure can be back transformed to get confidence intervals for the original correlation coefficient. A more recent approach to confidence intervals for the correlation coefficient is to use bootstrapping. This does not require the assumption of normality of the underlying distribution and requires no special purpose theory devoted solely to the correlation coefficient, Let us calculate the 95\% confidence intervals using Fisher's transform first. We use \code{GNP} and \code{Unemployed} from the Longley data set. First we retrieve the data set and extract the required columns into \code{x}. Then we set \code{n} to the number of cases and \code{pp} to the percentiles of interest. Finally we calculate the sample correlation and create a function to calculate the confidence interval using Fisher's Transform. This function not only returns the confidence interval but also stores it in \code{CI} in the receiver object. \begin{Schunk} \begin{Sinput} > longley.ci <- proto(expr = { + data(longley) + x <- longley[, c("GNP", "Unemployed")] + n <- nrow(x) + pp <- c(0.025, 0.975) + corx <- cor(x)[1, 2] + ci <- function(.) (.$CI <- tanh(atanh(.$corx) + qnorm(.$pp)/sqrt(.$n - + 3))) + }) \end{Sinput} \end{Schunk} Now let us repeat this analysis using the bootstrapping approach. We derive a new object \code{longley.ci.boot} as child of \code{longley.ci}, setting the number of replications, \code{N}, and defining the procedure, \code{ci} which does the actual bootstrap calculation. \begin{Schunk} \begin{Sinput} > longley.ci.boot <- longley.ci$proto({ + N <- 1000 + ci <- function(.) { + corx <- function(idx) cor(.$x[idx, ])[1, 2] + samp <- replicate(.$N, corx(sample(.$n, replace = TRUE))) + (.$CI <- quantile(samp, .$pp)) + } + }) \end{Sinput} \end{Schunk} In the example code below the first line runs the Fisher Transform procedure and the second runs the bootstrap procedure. Just to check that we have performed sufficient bootstrap iterations we rerun it in the third line, creating a delegated object on-the-fly running its \code{ci} method and then immediately throwing the object away. The fact that 4,000 replications give roughly the same result as 1,000 replications satisfies us that we have used a sufficient number of replications. \begin{Schunk} \begin{Sinput} > longley.ci$ci() \end{Sinput} \begin{Soutput} [1] 0.1549766 0.8464304 \end{Soutput} \begin{Sinput} > longley.ci.boot$ci() \end{Sinput} \begin{Soutput} 2.5% 97.5% 0.2299395 0.8211854 \end{Soutput} \begin{Sinput} > longley.ci.boot$proto(N = 4000)$ci() \end{Sinput} \begin{Soutput} 2.5% 97.5% 0.2480999 0.8259276 \end{Soutput} \end{Schunk} We now have the results stored in two objects nicely organized for the future. Note, again, that despite the simplicity of the example we have used the features of object oriented programming, coupling the data and methods that go together, while relying on delegation and dispatch to avoid duplication. \subsection{Dendrograms} \label{sec:tree} In \cite{Gentleman2002} there is an \proglang{S4} example of creating a binary tree for use as a dendrogram. Here we directly define a binary tree with no setup at all. To keep it short we will create a binary tree of only two nodes having a root whose left branch points to a leaf. The leaf inherits the \code{value} and \code{incr} components from the root. The attractive feature is that the leaf be defined as a child of the parent using \code{proto} before the parent is even finished being defined. Compared to the cited \proglang{S4} example where it was necessary to create an extra class to introduce the required level of indirection there is no need to take any similar action. \code{tree} is the root node of the tree. It has four components. A method \code{incr} which increments the \code{value} component, a \code{..Name}, the \code{value} component itself and the left branch \code{..left}. \code{..left} is itself a proto object which is a child of \code{tree}. The leaf inherits the \code{value} component from its parent, the root. As mentioned, at the time we define \code{..left} we have not even finished defining \code{tree} yet we are able to implicitly reference the yet to be defined parent. \begin{Schunk} \begin{Sinput} > tree <- proto(expr = { + incr <- function(., val) .$value <- .$value + val + ..Name <- "root" + value <- 3 + ..left <- proto(expr = { + ..Name = "leaf" + }) + }) \end{Sinput} \end{Schunk} Although this is a simple structure we could have embedded additional children into \code{root} and \code{leaf} and so on recursively making the tree or dendrogram arbitrarily complex. Let us do some computation with this structure. We display the \code{value} fields in the two nodes, increment the value field in the root and then display the two nodes again to show .that the leaf changed too. \begin{Schunk} \begin{Sinput} > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 3 leaf: 3 \end{Soutput} \begin{Sinput} > tree$incr(1) > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 4 leaf: 4 \end{Soutput} \end{Schunk} If we increment \code{value} in \code{leaf} directly (see the example below where we increment it by 10) then it receives its own copy of \code{value} so from that point on \code{leaf} no longer inherits \code{value} from \code{root}. Thus incrementing the root by 5 no longer increments the \code{value} field in the leaf. \begin{Schunk} \begin{Sinput} > tree$..left$incr(10) > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 4 leaf: 14 \end{Soutput} \begin{Sinput} > tree$incr(5) > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 9 leaf: 14 \end{Soutput} \end{Schunk} \subsection{From Prototypes to Classes} \label{sec:increment} In many cases we will use \pkg{proto} for a design that uses prototypes during the full development cycle. In other cases we may use it in an incremental way starting with prototypes but ultimately transitioning to classes. As shown in Section~\ref{sec:traits} the \pkg{proto} package is powerful enough to handle class-based as well as class-free programming. Here we illustrate this process of incremental design starting with concrete objects and then over time classifing them into classes, evolving a class-based program. \pkg{proto} provides a smooth transition path since it can handle both the class-free and the class-based phases -- there is no need to switch object systems part way through. In this example, we define an object which holds a linear equation, \code{eq}, represented as a character string in terms of the unknown variable \code{x} and a \code{print} and a \code{solve} method. We execute the \code{print} method to solve it. We also create child object \code{lineq2} which overrides \code{eq} and execute its \code{print} method. \begin{Schunk} \begin{Sinput} > lineq <- proto(eq = "6*x + 12 - 10*x/4 = 2*x", solve = function(.) { + e <- eval(parse(text = paste(sub("=", "-(", .$eq), ")")), + list(x = 0+1i)) + -Re(e)/Im(e) + }, print = function(.) cat("Equation:", .$eq, "Solution:", .$solve(), + "\n")) > lineq$print() \end{Sinput} \begin{Soutput} Equation: 6*x + 12 - 10*x/4 = 2*x Solution: -8 \end{Soutput} \begin{Sinput} > lineq2 <- lineq$proto(eq = "2*x = 7*x-12+x") > lineq2$print() \end{Sinput} \begin{Soutput} Equation: 2*x = 7*x-12+x Solution: 2 \end{Soutput} \end{Schunk} We could continue with enhancements but at this point we decide that we have a general case and so wish to abstract \code{lineq} into a class. Thus we define a trait, \code{Lineq}, which is just \code{lineq} minus \code{eq} plus a constructor \code{new}. The key difference between \code{new} and the usual \code{proto} function is that with \code{new} the initialization of \code{eq} is mandatory. Having completed this definition we instantiate an object of class/trait \code{Lineq} and execute it. \begin{Schunk} \begin{Sinput} > Lineq <- lineq > rm(eq, envir = Lineq) > Lineq$new <- function(., eq) proto(., eq = eq) > lineq3 <- Lineq$new("3*x=6") > lineq3$print() \end{Sinput} \begin{Soutput} Equation: 3*x=6 Solution: 2 \end{Soutput} \end{Schunk} Note how we have transitioned from a prototype style of programming to a class-based style of programming all the while staying within the \pkg{proto} framework. \section{Summary} \label{sec:summary} \subsection{Benefits} \label{sec:benefits} The key benefit of the \pkg{proto} package is to provide access to a style of programming that has not been conveniently accessible within \proglang{R} or any other mainstream language today. \pkg{proto} can be used in two key ways: class-free object oriented programming and class-based object oriented programming. A key application for \pkg{proto} in class-free programming is to wrap the code and data for each run of a particular statistical study into an object for purposes of organization and reproducibility. It provides such organization directly and without the need and overhead of class definitions yet still provides the inheritance and dispatch advantages of object oriented programming. We provide examples of this style of programming in Section~\ref{sec:smooth} and Section~\ref{sec:corr}. A third example in Section~\ref{sec:tree} illustrates a beneficial use of \pkg{proto} with recursive data structures. Another situation where prototype programming is of interest is in the initial development stages of a program. In this case, the design may not be fully clear so it is more convenient to create concrete objects individually rather than premature abstractions through classes. The \code{graph.proto} function can be used to generate visual representations of the object tree suggesting classifications of objects so that as the program evolves the general case becomes clearer and in a bottom up fashion the objects are incrementally abstracted into classes. In this case, \pkg{proto} provides a smooth transition path since it not only supports class-free programming but, as explained in the Section~\ref{sec:traits}, is sufficiently powerful to support class-based programming, as well. \subsection{Conclusion} \label{sec:conclusion} The package \pkg{proto} provides an \proglang{S3} subclass of the \code{environment} class for constructing and manipulating object oriented systems without classes. It can also emulate classes even though classes are not a primitive structure. Its key design goals are to provide as simple and as thin a layer as practically possible while giving the user convenient access to this alternate object oriented paradigm. This paper describes, by example, how prototype programming can be carried out in \proglang{R} using \pkg{proto} and illustrates such usage. Delegation, cloning traits and general manipulation and incremental development are all reviewed by example. \section*{Computational details} \label{sec:compute} The results in this paper were obtained using \proglang{R} 2.1.0 with the package \pkg{proto} 0.3--2. \proglang{R} itself and the \pkg{proto} package are available from CRAN at \url{http://CRAN.R-project.org/}. The GraphViz software is available from \url{http://www.graphviz.org}. \phantomsection \addcontentsline{toc}{section}{References} \bibliography{proto} %\input{proto.bbl} \newpage\mbox{} \begin{appendix} \section{Frequently Asked Questions} \label{sec:faq} \begin{enumerate} \item{What scope do unqualified object references within methods use? A \pkg{proto} object is an environment and that environment is the environment of the methods in it (by default). That is, unqualified object references within a \pkg{proto} method look first in the method itself and secondly in the \pkg{proto} object containing the method. This is referred to as object scope as opposed to lexical scope or dynamic scope. It allows simple situations, where delegation is not used, to use unqualified names. Thus simple situations remain simple. \citep{Kates2004} discusses the fragile base class problem which relates to this question. Also note that if a \pkg{proto} object is created via the \code{proto} function using an argument of \code{funEnvir = FALSE} then the environment of the function/method will not be set as just described (but rather it will retain its original environment) so the above does not apply. This can be used for instances when non-default processing is desirable.} \item{Why does \code{obj\$meth} not return the method, \code{meth}? Conceptually \code{obj\$meth} returns \code{meth} but with \code{obj} already inserted into its first argument. This is termed an instantiated \pkg{proto} method and is of \proglang{S3} class \code{"instantiatedProtoMethod"}. In contrast, the method itself (i.e. the uninstantited method) would not have the first argument already inserted. To return the method itself use \code{with(obj, meth}. The main advantage of a design that makes the distinction between instantiated and uninstantiated methods is that uninstantiated methods are never changed so debugging can be more readily carried out (as discussed in the next question and answer). } \item{How does one debug a method? \pkg{proto} does not dynamically redefine methods. This has the advantage that the ordinary \proglang{R} \code{debug} and \code{undebug} commands can be used. When using these be sure that to use them with the uninstantiated method itself and not the instantiated method derived from it. That is, use: \begin{verbatim} with(obj, debug(meth)) \end{verbatim} and not \begin{verbatim} debug(obj$meth) # wrong \end{verbatim} } \item{Is multiple inheritance supported? No. \pkg{proto} is just a thin layer on top of \proglang{R} environments and \proglang{R} environments provide single inheritance only. \citep{Kates2004} discusses some ways of handling situations which would otherwise require multiple inheritance.} \item{Does \pkg{proto} support lazy evaluation? Since \code{proto} methods are just \proglang{R} functions they do support lazy evaluation; however, the \code{proto} function itself does evaluate its arguments. To get the effect of lazy evaluation when using the \code{proto} function replace any properties with a function. If the caller is the parent of the \code{proto} object then its particularly simple. Note how we got the equivalent of lazy evaluation in the second example where f is a function: \begin{verbatim} # eager evaluation x <- 0 p <- proto(f = x, g = function(.) $x) x <- 1 p$f # 0 # versus making f a function # simulates lazy evaluation x <- 0 p <- proto(f = function(.) x, g = function(.) .$x) x <- 1 p$f() # 1 \end{verbatim} If we cannot guarantee that the proto object has the caller as its parent then ensure that the environment of the function has not been reset. If no method needs to reference \code{.that} or \code{.super} then we can arrange for that using \code{funEnvir=FALSE} as seen here in the second example: \begin{verbatim} # does not work as intended x <- 0 p <- proto(x = 99) q <- p$proto(f = function(.) x, g = function(.) .$x) x <- 1 q$f() # 99 # does work x <- 0 p <- proto(x = 99) q <- p$proto(f = function(.) x, g = function(.) .$x, funEnvir = FALSE) x <- 1 q$f() # 1 \end{verbatim} If we wish only to not reset the function used to simulate lazy evaluation then we can do it using either of the two equivalent alternatives below. \code{g} is an ordinary method whose environment is reset to \code{q} whereas \code{f} is a function whose environment is not reset and serves to provide lazy evaluation for \code{x} found in the caller. \begin{verbatim} x <- 0 p <- proto(x = 99) # g will use q's y in children of q even if those children # override y q <- p$proto(y = 25, g = function(.) .that$y + .$x) q[["f"]] <- function(.) x x <- 1 q$f() # 1 # equivalent alternative x <- 0 p <- proto(x = 99) q <- proto(f = function(.) x, funEnvir = FALSE, envir = p$proto(y = 25, g = function(.) .that$y + .$x)) x <- 1 q$f() # 1 \end{verbatim} } \end{enumerate} \newpage{} \section{Reference Card} \label{sec:ref} \input{protoref-raw} \end{appendix} \end{document} proto/vignettes/proto-raw0000744000176200001440000014465612065354671015334 0ustar liggesusers\SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{proto: An R Package for Prototype Programming} %\VignetteDepends{} %\VignetteKeywords{object oriented, prototype programming, S3, R} %\VignettePackage{proto} \documentclass{Z} \DeclareGraphicsExtensions{.pdf, .eps, .png} %% need no \usepackage{Sweave} \newlength{\half} \setlength{\half}{70mm} \author{Louis Kates\\GKX Associates Inc. \And Thomas Petzoldt\\Technische Universit\"at Dresden} \Plainauthor{Louis Kates, Thomas Petzoldt} \title{\pkg{proto}: An \proglang{R} Package for Prototype Programming} %% \Shorttitle{\pkg{proto}: An \proglang{R} Package for Prototype Programming} \Plaintitle{proto: An R Package for Prototype Programming} \Keywords{prototype programming, delegation, inheritance, clone, object orientated, \proglang{S3}, \proglang{R}} \Plainkeywords{object oriented, prototype programming, S3, R} \Abstract{ \pkg{proto} is an \proglang{R} package which facilitates a style of programming known as prototype programming. Prototype programming is a type of object oriented programming in which there are no classes. \pkg{proto} is simple yet retains the object oriented features of delegation (the prototype counterpart to inheritance) and object oriented dispatch. \code{proto} can be used to organize the concrete data and procedures in statistical studies and other applications without the necessity of defining classes while still providing convenient access to an object oriented style of programming. Furthermore, it can be used in a class-based style as well so that incremental design can begin with defining the concrete objects and later transition to abstract classes, once the general case is understood, without having to change to object-oriented frameworks. The key goals of the package are to integrate into \proglang{R} while providing nothing more than a thin layer on top of it. } \hyphenation{ma-ni-pu-lating} \begin{document} <>= rm(list=ls()) library(proto) @ \section{Introduction} \label{sec:intro} \subsection[Object Oriented Programming in R]{Object Oriented Programming in \proglang{R}} \label{sec:oo} The \proglang{R} system for statistical computing \citep[\url{http://www.R-project.org/}]{Rcore2005} ships with two systems for object oriented programming referred to as \proglang{S3} and \proglang{S4}. With the increased interest in object oriented programming within \proglang{R} over the last years additional object oriented programming packages emerged. These include the \pkg{R.oo} package \citep{Bengtsson2003} and the \pkg{OOP} package \citep[\url{http://www.omegahat.org/OOP/}]{Rnews:Chambers+Lang:2001a}. The common thread among these packages is that they use classes as the basis of inheritance. When a message is sent to an object the class of the object is examined and that class determines the specific function to be executed. In contrast, in prototype programming there are no classes yet it retains much of the power of class-based programming. In the fact, \pkg{proto} is so simple that there are only two significant new routine name, \code{proto}, and \code{clone2}. The other routines are just the expected support routines such as \code{as.proto} to coerce objects to proto objects, \code{\$} to access and set proto object components and \code{is.proto} to check whether an object is a proto object. In addition, \code{graph.proto} will generate a graphical ancestor tree showing the parent-child relationships among generated \code{proto} objects. The aim of the package is to provide a lightweight layer for prototype programming in \proglang{R} written only in \proglang{R} leveraging the existing facilities of the language rather than adding its own. \subsection{History} \label{sec:history} The concept of prototype programming \citep{Lieberman1986, Taivalsaari1996a, Noble1999} has developed over a number of years with the \proglang{Self} language \citep{Agesen1992} being the key evolved programming language to demonstrate the concept. In statistics, the \proglang{Lisp}-based \proglang{LispStat} programming language \citep{Tierney1990} was the first and possibly only statistical system to feature prototype programming. Despite having been developed over 20 years ago, and some attempts to enter the mainstream (e.g. \proglang{Newtonscript} on the Newton computer, which is no longer available, and \proglang{Javascript} where it is available but whose domain of application largely precludes use of prototype programming) prototype programming is not well known due to lack of language support in popular programming languages such as \proglang{C} and \proglang{Java}. It tends to be the domain of research languages or \proglang{Lisp}. Thus the availability of a popular language, \proglang{R} \footnote{Some indications of the popularity of R are the high volume mailing lists, international development team, the existence of over 1000 addon packages, conferences and numerous books and papers devoted to R.}, that does provide the key infrastructure could be important for developers. This work grew out of the need to organize multiple scenarios of model simulations in ecological modelling \citep{Rnews:Petzoldt:2003} and was subsequently generalized to the present package. A number of iterations of the code, some motivated by the ever increasing feature set in \proglang{R}, resulted in a series of utilities and ultimately successive versions of an \proglang{R} package developed over a period of several years. An initial version used \proglang{R} lists as the basis of the package. Subsequently the package was changed to use \proglang{R} environments. The first version to use environments stored the receiver object variable in a proxy parent environment which was created on-the-fly at each method call. The present version of the \pkg{proto} package passes the receiver object through the argument list, while hiding this from the caller. It defines the \code{proto} class as a subclass of the \code{environment} class so that functionality built into \proglang{R} for the environment class is automatically inherited by the \code{proto} class. \subsection{Overview} \label{sec:overview} It is assumed that the reader has some general familiarity with object oriented programming concepts and with \proglang{R}. The paper will proceed primarily by example focusing on illustrating the package \code{proto} through such demonstration. The remainder of the paper is organized as follows: Section~\ref{sec:proto-class} explains how \code{"proto"} objects are created and illustrates the corresponding methods for setting and getting components. It further discusses how object oriented delegation (the prototype programming analogue of inheritance) is handled and finally discusses the internals of the package. This section uses small examples chosen for their simplicity in illustrating the concepts. In Section~\ref{sec:examples} we provide additional examples of prototype programming in action. Four examples are shown. The first involves smoothing of data. Secondly we demonstrate the calculation of correlation confidence intervals using classical (Fisher Transform) and modern (bootstrapping) methods. Thirdly we demonstrate the development of a binary tree as would be required for a dendrogram. Fourthly, we use the solution of linear equations to illustrate program evolution from object-based to class-based, all within the \pkg{proto} framework. Section~\ref{sec:summary} gives a few summarizing remarks. Finally, an appendix provides a reference card that summarizes the functionality contained in \pkg{proto} in terms of its constituent commands. %% \pagebreak[4] \section[The class "proto" and its methods]{The class \code{"proto"} and its methods} \label{sec:proto-class} \subsection[Creation of "proto" objects]{Creation of \code{"proto"} objects} \label{sec:proto} In this section we shall show, by example, the creation of two prototype objects and related operations. The simple idea is that each \code{"proto"} object is a set of components: functions (methods) and variables, which are tightly related in some way. A prototype object is an environment holding the variables and methods of the object. \footnote{In particular this implies that \code{"proto"} objects have single inheritance, follow ordinary environment scoping rules and have mutable state as environments do.} A prototype object is created using the constructor function \code{proto} (see Appendix~\ref{sec:ref} at the end of this paper or \pkg{proto} package help for complete syntax of commands). \begin{Scode} addProto <- proto( x = rnorm(5), add = function(.) sum(.$x) ) \end{Scode} In this simple example, the \code{proto} function defines two components: a variable \code{x} and a method \code{add}. The variable \code{x} is a vector of 5 numbers and the method sums those numbers. The \code{proto} object \code{addProto} contains the variable and the method. Thus the \code{addProto} \code{proto} object can be used to compute the sum of the values stored in it. As shown with the \code{add} method in this example, formal argument lists of methods must always have a first argument of dot (i.e. \code{.}) which signifies the object on which the method is operating. The dot refers to the current object in the same way that a dot refers to the current directory in UNIX. Within the method one must refer to other variables and methods in the object by prefacing each with \code{.\$}. For example, in the above we write \code{sum(.\$x)}. Finally, note that the data and the method are very closely related. Such close coupling is important in order to create an easily maintained system. To illustrate the usage of \code{proto}, we first load the package and set the random seed to make the examples in this paper exactly reproducible. <>= library(proto) set.seed(123) @ Then, we create the \code{proto} object from above and call its \code{add} method. <>= addProto <- proto( x = rnorm(5), add = function(.) sum(.$x) ) addProto$add() @ We also create another object, \code{addProto2} with a different \code{x} vector and invoke its \code{add} method too. <>= addProto2 <- addProto$proto( x = 1:5 ) addProto2$add() @ In the examples above, we created a prototype object \code{addProto} and then called its \code{add} method as just explained. The notation \code{addProto\$add} tells the system to look for the \code{add} method in the \code{addProto} object. In the expression \code{addProto\$add}, the \code{proto} object to the left of the dollar sign, \code{addProto} here, is referred to as the \emph{receiver} object. This expression also has a second purpose which is to pass the receiver object implicitly as the first argument of \code{add}. Note that we called \code{add} as if it had zero arguments but, in fact, it has one argument because the receiver is automatically and implicitly supplied as the first argument. In general, the notation \code{object\$method(arguments)} is used to invoke the indicated method of the receiver object using the object as the implicit first argument along with the indicated arguments as the subsequent arguments. As with the \code{addProto} example, the receiver object not only determines where to find the method but also is implicitly passed to the method through the first argument. The motivation for this notation is to relieve the user of specifying the receiver object twice: once to locate the method in the object and a second time to pass the object itself to the method. The \code{\$} is overloaded by the \code{proto} class to automatically do both with one reference to the receiver object. Even though, as with the \code{addProto} example, the first argument is not listed in the call it still must be listed among the formal arguments in the definition of the method. It is conventional to use a dot \code{.} as the first formal argument in the method/function definition. That is, we call \code{add} using \code{addProto\$add()} displaying zero arguments but we define \code{add} in \code{addProto} displaying one argument \code{add <- function(.)}, the dot. In this example, we also created a second object, \code{addProto2}, which has the first object, \code{addProto} as its parent. Any reference to a component in the second object that is unsuccessful will cause search to continue in the parent. Thus the call \code{addProto2\$add()} looks for \code{add} in \code{addProto2} and not finding it there searches its parent, \code{addProto}, where it is, indeed, found. \code{add} is invoked with the receiver object, \code{addProto2}, as the value of dot. The call \code{addProto2\$add()} actually causes the \code{add} in \code{addProto} to run but it still uses the \code{x} from \code{addProto2} since dot (\code{.}) is \code{addProto2} here and \code{add} references \code{.\$x}. Note that the reference to \code{.\$x} in the \code{add} found in \code{addProto} does not refer to the \code{x} in \code{addProto} itself. The \code{x} in \code{addProto2} has overridden the \code{x} in its parent. This point is important so the reader should take care to absorb this point. This simple example already shows the key elements of the system and how \emph{delegation} (the prototype programming term for inheritance) works without classes. We can add new components or replace components in an object and invoke various methods like this: <>= addProto2$y <- seq(2,10,2) addProto2$x <- 1:10 addProto2$add3 <- function(., z) sum(.$x) + sum(.$y) + sum(z) addProto2$add() addProto2$add3(c(2,3,5)) addProto2$y @ In this example, we insert variable \code{y} into the object \code{addProto2} with a value of \code{seq(2,10,2)}, reset variable \code{x} to a new value and insert a new method, \code{add3}. Then we invoke our two methods and display \code{y}. Again, note that in the case of \code{protoAdd2\$add} the \code{add} method is not present in \code{protoAdd2} and so search continues to the parent \code{addProto} where it is found. \subsection{Internals} \label{sec:internals} So far, we have used simple examples to illustrate the basic manipulation of objects: construction, getting and setting components and method invocation. We now discuss the internals of the package and how it relates to \proglang{R} constructs. \code{proto} is actually an \proglang{S3} class which is a subclass of the \code{environment} class. Every \code{proto} object is an environment and its class is \code{c("proto", "environment")}. The \code{\$} accessor is similar to the same accessor in environments except it will use the \proglang{R} \code{get} function to search up parent links if it cannot otherwise find the object (unlike environments). When accessing a method, \code{\$} automatically supplies the first argument to the method unless the object is \code{.that} or \code{.super}. \code{.that} is a special variable which \code{proto} adds to every \code{proto} object denoting the object itself. \code{.super} is also added to every proto object and is the parent of \code{.that}. \code{.that} and \code{.super} are normally used within methods of an object to refer to other components of the same or parent object, respectively, as opposed to the receiver (\code{.}). For example, suppose we want \code{add} in \code{addProto2} to add the elements of \code{x} together and the elements of \code{y} together and then add these two sums. We could redefine add like this: <>= addProto2$add <- function(.) .super$add(.) + sum(.$y) @ making use of the \code{add} already defined in the parent. One exception should be noted here. When one uses \code{.super}, as above, or \code{.that} to specify a method then the receiver object must be explicitly specified in argument one (since in those cases the receiver is possibly different than \code{.super} or \code{.that} so the system cannot automatically supply it to the call.) Setting a value is similar to the corresponding operation for environments except that any function, i.e method, which is inserted has its environment set to the environment of the object into which it is being inserted. This is necessary so that such methods can reference \code{.that} and \code{.super} using lexical scoping. In closing this section a few points should be re-emphasized and expanded upon. A \code{proto} object is an environment whose parent object is the parent environment of the \code{proto} object. The methods in the \code{proto} objects are ordinary functions that have the containing object as their environment. The \proglang{R} \code{with} function can be used with environments and therefore can be used with \code{proto} objects since \code{proto} objects are environments too. Thus \code{with(addProto, x)} refers to the variable \code{x} in \code{proto} object \code{addProto} and \code{with(addProto, add)} refers to the method \code{add} in the same way. \code{with(addProto, add)(addProto)} can be used to call \code{add}. These constructs all follow from their corresponding use in environments from which they are inherited. Because the \code{with} expressions are somewhat verbose, two common cases can be shortened using the \code{\$} operator. \code{addProto\$x} can be used to refer to variable \code{x} in \code{proto} object \code{addProto} and has the same meaning as \code{with(addProto, x)}. In particular like \code{with} but unlike the the behavior of the \code{\$} operator on environments, when used with \code{proto} objects, \code{\$} will search not only the object itself but also its ancestors. Similarly \code{addProto\$add()} can be used to call method \code{add} in \code{addProto} also searching through ancestors if not found in \code{addProto}. Note that \code{addProto\$add} returns an object of class \code{c("instantiatedProtoMethod", "function")} which is derived from \code{add} such that the first argument, the \code{proto} object, is already inserted. Note that there is a \code{print} method for class \code{"instantiatedProtoMethod"} so printing such objects will display the underlying function but returning such objects is not the same as returning the function without slot one inserted. Thus, if one wants exactly the original \code{add} as a value one should use \code{with(addProto, add)} or \code{addProto\$with(add)}. Within a method, if a variable is referred to without qualification simply as \code{x}, say, then its meaning is unchanged from how it is otherwise used in \proglang{R} and follows the same scope rules as any variable to resolve its name. If it is desired that the variable have object scope, i.e. looked up in the receiver object and its ancestors, then \code{.\$x} or similar \code{with} notation, i.e. \code{with(., x)}, should be used. Similarly \code{.\$f(x)} calls method \code{f} automatically inserting the receiver object into argument one and using \code{x} for argument two. It looks for \code{f} first in the receiver object and then its ancestors. \subsection{Traits} \label{sec:traits} Let us look at the definition of a child object once again. In the code below, \code{addProto} is the previously defined parent object and the expression \code{addProto\$proto(x = 1:5)} defines a child object of \code{addProto} and assigns it to variable \code{addProto2a}. <>= addProto2a <- addProto$proto(x = 1:5) addProto2a$add() @ That is, \code{proto} can be used to create a new child of an existing object by writing the parent object on the left of the \code{\$} and \code{proto} on its right. Any contents to be added to the new child are listed in arguments of \code{proto} as shown. For example, first let us create a class-like structure. In the following \code{Add} is an object that behaves very much like a class with an \code{add} method and a method \code{new} which constructs new objects. In the line creating object \code{add1} the expression \code{Add\$new(x = 1:5)} invokes the \code{new} constructor of the receiver object \code{Add}. The method \code{new} has an argument of \code{x = 1:5} which defines an \code{x} variable in the \code{add1} object being instantiated. We similarly create another object \code{add2}. <>= Add <- proto( add = function(.) sum(.$x), new = function(., x) .$proto(x=x) ) add1 <- Add$new(x = 1:5) add1$add() add2 <- Add$new(x = 1:10) add2$add() @ An object which contains only methods and variables that are intended to be shared by all its children (as opposed to an object whose purpose is to have its own methods and variables) is known as a \emph{trait} \citep{Agesen1992}. It is similar to a class in class-based object oriented programming. Note that the objects \code{add1} and \code{add2} have the trait \code{Add} as their parent. We could implement subclass-like and superclass-like objects by simply defining similar trait objects to be the parent or child of \code{Add}. For example, suppose we want a class which calculates the sum of the logarithms of the data. We could define: <>= Logadd <- Add$proto( logadd = function(.) log( .$add() ) ) logadd1 <- Logadd$new(1:5) logadd1$logadd() @ Here the capitalized objects are traits. \code{Logadd} is a trait. It is a child of \code{Add} which is also a trait. \code{logadd1} is an ordinary object, not a trait. One possible design is to create a tree of traits and other objects in which the leaves are ordinary objects and the remaining nodes are traits. This would closely correspond to class-based object oriented programming. Note that the delegation of methods from one trait to another as in \code{new} which is inherited by \code{Logadd} from \code{Add} is nothing more than the same mechanism by which traits delegate methods to objects since, of course, traits are just objects no different from any other object other than by the conventions we impose on them. This unification of subclassing and instantiation beautifully shows the simplification that prototype programming represents. \subsection{Utilities} \label{sec:utilities} The fact that method calls automatically insert the first argument can be used to good effect in leveraging existing \proglang{R} functions while allowing an object-oriented syntax. For example, \code{ls()} can be used to list the components of \code{proto} objects: <>= addProto$ls() @ Functions like: <>= addProto$str() addProto$print() addProto$as.list() addProto2a$parent.env() @ show additional information about the elements. \code{eapply} can be used to explore more properties such as the the length of each component of an object: <>= addProto$eapply(length) # show length of each component @ Another example of some interest in any object oriented system which allows multiple references to one single object is that object identity can be tested using the respective base function: <>= addProto$identical(addProto2) @ \code{proto} does contain a special purpose \code{str.proto} function but in the main it is important to notice here, that \code{proto} has no code that is specific to \code{ls} or any of the other ordinary \proglang{R} functions listed. We are simply making use of the fact that \code{obj\$fun(...)} is transformed into \code{get("fun", obj)(obj, ...)} by the proto \code{\$} operator. For example, in the case of \code{addProto\$ls()} the system looks for \code{ls} in object \code{addProto}. It cannot find it there so it looks to its parent, which is the global environment. It does not find it there so it searches the remainder of the search path, i.e. the path shown by running the \proglang{R} command \code{search()}, and finally finds it in the base package, invoking it with an argument of \code{addProto}. Since all \code{proto} objects are also environments \code{ls(addProto)} interprets \code{addProto} as an environment and runs the \code{ls} command with it. In the \code{ls} example there were no arguments other than \code{addProto}, and even that one was implicit, but if there were additional arguments then they would be passed as shown in the \code{eapply} and \code{identical} examples above. \subsection{Plotting} \label{sec:plot} The \code{graph.proto} function can be used to create graphs that can be rendered by the \code{Rgraphviz} package creating visual representations of ancestor trees (figure \ref{fig:proto-dot}). That package provides an interface to the \proglang{GraphViz} \code{dot} program \citep{Ganser+North:1999}. \code{graph.proto} takes three arguments, all of which are usually omitted. The first argument is a \code{proto} object (or an environment) out of which all contained \code{proto} objects and their parents (but not higher order ancestors) are graphed. If it is omitted, the current environment is assumed. The second argument is a graph (in the sense of the \code{graph} package) to which the nodes and edges are added. If it is omitted an empty graph is assumed. The last argument is a logical variable that specifies the orientation of arrows. If omitted arrows are drawn from children to their parents. <>= library(Rgraphviz) g <- graph.proto() plot(g) @ \input{proto-dot} \begin{figure}[htbp] \begin{center} \includegraphics{proto-dot} \caption{\label{fig:proto-dot} Ancestor tree generated using graph.proto. Edges point from child to parent.} \end{center} \end{figure} \pagebreak[4] \section{Examples} \label{sec:examples} \subsection{Smoothing} \label{sec:smooth} In the following we create a \code{proto} object named \code{oo} containing a vector of data \code{x} (generated from a simulated autoregressive model) and time points \code{tt}, an intermediate result \code{x.smooth}, some plotting parameters \code{xlab}, \code{ylab}, \code{pch}, \code{col} and three methods \code{smooth}, \code{plot} and \code{residuals} which smooth the data, plot the data and calculate residuals, respectively. We also define \code{..x.smooth} which holds intermediate results. Names beginning with two dots prevent them from being delegated to children. If we override \code{x} in a child we would not want an out-of-sync \code{x.smooth}. Note that the components of an object can be specified using a code block in place of the argument notation we used previously in the \code{proto} command. <>= oo <- proto(expr = { x <- rnorm(251, 0, 0.15) x <- filter(x, c(1.2, -0.05, -0.18), method = "recursive") x <- unclass(x[-seq(100)]) * 2 + 20 tt <- seq(12200, length = length(x)) ..x.smooth <- NA xlab <- "Time (days)" ylab <- "Temp (deg C)" pch <- "." col <- rep("black",2) smooth <- function(., ...) { .$..x.smooth <- supsmu(.$tt, .$x, ...)$y } plot <- function(.) with(., { graphics::plot(tt, x, pch = pch, xlab = xlab, ylab = ylab, col = col[1]) if (!is.na(..x.smooth[1])) lines(tt, ..x.smooth, col=col[2]) }) residuals <- function(.) with(., { data.frame(t = tt, y = x - ..x.smooth) }) }) @ Having defined our \code{proto} object we can inspect it, as shown below, using \code{print} which is automatically invoked if the name of the object, \code{oo}, is entered on a line by itself. In this case, there is no proto print method so we inherit the environment print method which displays the environment hash code. Although it produces too much output to show here, we could have displayed a list of the entire contents of the object \code{oo} via \code{oo\$as.list(all.names = TRUE)}. We can get a list of the names of the components of the object using \code{oo\$ls(all.names = TRUE)} and will look at the contents of one component, \code{oo\$pch}. <>= ## inspect the object oo oo$ls(all.names = TRUE) oo$pch @ Let us illustrate a variety of manipulations. We will set up the output to plot 2 plots per screen using \code{mfrow}. We change the plotting symbol, smooth the data, invoke the \code{plot} method to display a plot of the data and the smooth and then plot the residuals in the second plot (figure \ref{fig:proto-smooting03}). <>= ## call plot method par(mfrow=c(1,2)) # oo$plot() ## set a slot oo$pch <- 20 ## smooth curve and plot oo$smooth() oo$plot() ## plot and analyse residuals, stored in the object plot(oo$residuals(), type="l") # hist(oo$residuals()$y) # acf(oo$residuals()$y) @ \input{proto-smoothing03} \begin{figure}[h!] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing03} \end{center} \caption{Data and smooth from \code{oo\$plot()} (left) and plot of \code{oo\$residuals()} (right).} \label{fig:proto-smooting03} \end{figure} Now let us illustrate the creation of a child object and delegation. We create a new child object of \code{oo} called \code{oo.res}. We will override the \code{x} value in its parent by setting \code{x} in the child to the value of the residuals in the parent. We will also override the \code{pch} and \code{ylab} plotting parameters. We will return to 1 plot per screen and run \code{plot} using the \code{oo.res} object as the receiver invoking the \code{smooth} and \code{plot} methods (which are delegated from the parent \code{oo}) with the data in the child (figure \ref{fig:smoothing04}). <>= ## derive a new object and change local settings oo.res <- oo$proto( pch = "-", x = oo$residuals()$y, ylab = "Residuals deg K" ) par(mfrow=c(1,1)) oo.res$smooth() oo.res$plot() @ \input{proto-smoothing04} % \begin{figure}[tp] \begin{figure}[h!] \begin{center} \includegraphics[width=\half]{proto-smoothing04} \end{center} \caption{Output of \code{oo.res\$plot()}. \code{oo.res\$x} contains the residuals from \code{oo}.} \label{fig:smoothing04} \end{figure} Now we make use of delegation to change the parent and child in a consistent way with respect to certain plot characteristics. We have been using a numeric time axis. Let us interpret these numbers as the number of days since the Epoch, January 1, 1970, and let us also change the plot colors. <>= ## change date format of the parent oo$tt <- oo$tt + as.Date("1970-01-01") oo$xlab <- format(oo.res$tt[1], "%Y") ## change colors oo$col <- c("blue", "red") @ We can introduce a new method, \code{splot}, into the parent \code{oo} and have it automatically inherited by its children. In this example it smooths and then plots and we use it with both \code{oo} and \code{oo.res} (figure \ref{fig:smoothing06}). <>= ## introduce a new function to the parent oo$splot <- function(., ...) { .$smooth(...) .$plot() } ## the new function is now available to all children of oo par(mfrow=c(1,2)) oo$splot(bass=2) oo.res$splot() @ \input{proto-smoothing06} \begin{figure}[tbp] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing06} \caption{Plotting options and \code{splot} function applied to both parent (left) and child (right) object} \label{fig:smoothing06} \end{center} \end{figure} Numerous possibilities exist to make use of the mechanisms shown, so one may create different child objects, apply different smoothing parameters, overwrite the smoothing function with a lowess smoother and finally compare fits and residuals. Now lets change the data and repeat the analysis. Rather than overwrite the data we will preserve it in \code{oo} and create a child \code{oos} to hold an analysis with sinusoidal data. <>= ## and at last we change the data and repeat the analysis oos <- oo$proto( expr = { tt <- seq(0,4*pi, length=1000) x <- sin(tt) + rnorm(tt, 0, .2) }) oos$splot() #plot(oos$residuals()) @ Lets perform the residual analysis with \code{oos}. We will make a deep copy of \code{oo.res}, i.e. duplicate its contents and not merely delegate it, by copying \code{oo.res} to a list from which we create the duplicate, or cloned, \code{proto} object (figure \ref{fig:smoothing10} and \ref{fig:cloning}): <>= oos.res <- as.proto( oo.res$as.list(), parent = oos ) oos.res$x <- oos$residuals()$y oos.res$splot() @ <>= par(mfrow=c(1,2)) oos$splot() oos.res$splot() @ \begin{figure}[tbp] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing10} \caption{Smoothing of sinusoidal data (left) and of their residuals (right)}\label{fig:smoothing10} \end{center} \end{figure} \begin{figure}[h!] \begin{center} \includegraphics[width=50mm]{cloning3.pdf} \caption{Cloning (dashed line) and delegation (solid line). Edges point from child to parent.}\label{fig:cloning} \end{center} \end{figure} We have delegated variables and methods and overridden both. Thus, even with such a simple analysis, object orientation and delegation came into play. The reader can plainly see that smoothing and residual analysis were not crucial to the example and this example could be replaced with any statistical analysis including likelihood or other estimation techniques, time series, survival analysis, stochastic processes and so on. The key aspect is just that we are performing one-of analyses and do not want to set up an elaborate class infrastructure but just want to directly create objects to organize our calculations while relying on delegation and dispatch to eliminate redundancy. \subsection{Correlation, Fisher's Transform and Bootstrapping} \label{sec:corr} The common approach to confidence intervals for the correlation coefficient is to assume normality of the underlying data and then use Fisher's transform to transform the correlation coefficient to an approximately normal random variable. Fisher showed that with the above normality assumption, transforming the correlation coefficient using the hyperbolic arc tangent function yields a random variable approximately distributed with an $\frac{N(p, 1)}{\sqrt(n-3)}$ distribution. The transformed random variable can be used to create normal distribution confidence intervals and the procedure can be back transformed to get confidence intervals for the original correlation coefficient. A more recent approach to confidence intervals for the correlation coefficient is to use bootstrapping. This does not require the assumption of normality of the underlying distribution and requires no special purpose theory devoted solely to the correlation coefficient, Let us calculate the 95\% confidence intervals using Fisher's transform first. We use \code{GNP} and \code{Unemployed} from the Longley data set. First we retrieve the data set and extract the required columns into \code{x}. Then we set \code{n} to the number of cases and \code{pp} to the percentiles of interest. Finally we calculate the sample correlation and create a function to calculate the confidence interval using Fisher's Transform. This function not only returns the confidence interval but also stores it in \code{CI} in the receiver object. <>= longley.ci <- proto( expr = { data(longley) x <- longley[,c("GNP", "Unemployed")] n <- nrow(x) pp <- c(.025, .975) corx <- cor(x)[1,2] ci <- function(.) (.$CI <- tanh( atanh(.$corx) + qnorm(.$pp)/sqrt(.$n-3) )) }) @ Now let us repeat this analysis using the bootstrapping approach. We derive a new object \code{longley.ci.boot} as child of \code{longley.ci}, setting the number of replications, \code{N}, and defining the procedure, \code{ci} which does the actual bootstrap calculation. <>= longley.ci.boot <- longley.ci$proto({ N <- 1000 ci <- function(.) { corx <- function(idx) cor(.$x[idx,])[1,2] samp <- replicate(.$N, corx(sample(.$n, replace = TRUE))) (.$CI <- quantile(samp, .$pp)) } }) @ In the example code below the first line runs the Fisher Transform procedure and the second runs the bootstrap procedure. Just to check that we have performed sufficient bootstrap iterations we rerun it in the third line, creating a delegated object on-the-fly running its \code{ci} method and then immediately throwing the object away. The fact that 4,000 replications give roughly the same result as 1,000 replications satisfies us that we have used a sufficient number of replications. <>= longley.ci$ci() longley.ci.boot$ci() longley.ci.boot$proto(N=4000)$ci() @ We now have the results stored in two objects nicely organized for the future. Note, again, that despite the simplicity of the example we have used the features of object oriented programming, coupling the data and methods that go together, while relying on delegation and dispatch to avoid duplication. \subsection{Dendrograms} \label{sec:tree} In \cite{Gentleman2002} there is an \proglang{S4} example of creating a binary tree for use as a dendrogram. Here we directly define a binary tree with no setup at all. To keep it short we will create a binary tree of only two nodes having a root whose left branch points to a leaf. The leaf inherits the \code{value} and \code{incr} components from the root. The attractive feature is that the leaf be defined as a child of the parent using \code{proto} before the parent is even finished being defined. Compared to the cited \proglang{S4} example where it was necessary to create an extra class to introduce the required level of indirection there is no need to take any similar action. \code{tree} is the root node of the tree. It has four components. A method \code{incr} which increments the \code{value} component, a \code{..Name}, the \code{value} component itself and the left branch \code{..left}. \code{..left} is itself a proto object which is a child of \code{tree}. The leaf inherits the \code{value} component from its parent, the root. As mentioned, at the time we define \code{..left} we have not even finished defining \code{tree} yet we are able to implicitly reference the yet to be defined parent. <>= # do not need left <- right <- NULL anymore in leaf # also eliminated right <- NULL in parent tree <- proto(expr = { incr <- function(., val) .$value <- .$value + val ..Name <- "root" value <- 3 ..left <- proto( expr = { ..Name = "leaf" }) }) @ Although this is a simple structure we could have embedded additional children into \code{root} and \code{leaf} and so on recursively making the tree or dendrogram arbitrarily complex. Let us do some computation with this structure. We display the \code{value} fields in the two nodes, increment the value field in the root and then display the two nodes again to show .that the leaf changed too. <>= cat("root:", tree$value, "leaf:", tree$..left$value, "\n") # incrementing root increments leaf too tree$incr(1) cat("root:", tree$value, "leaf:", tree$..left$value, "\n") @ If we increment \code{value} in \code{leaf} directly (see the example below where we increment it by 10) then it receives its own copy of \code{value} so from that point on \code{leaf} no longer inherits \code{value} from \code{root}. Thus incrementing the root by 5 no longer increments the \code{value} field in the leaf. <>= # incrementing leaf gives it its own value field # so now incrementing root does not increment leaf tree$..left$incr(10) cat("root:", tree$value, "leaf:", tree$..left$value, "\n") tree$incr(5) cat("root:", tree$value, "leaf:", tree$..left$value, "\n") @ \subsection{From Prototypes to Classes} \label{sec:increment} In many cases we will use \pkg{proto} for a design that uses prototypes during the full development cycle. In other cases we may use it in an incremental way starting with prototypes but ultimately transitioning to classes. As shown in Section~\ref{sec:traits} the \pkg{proto} package is powerful enough to handle class-based as well as class-free programming. Here we illustrate this process of incremental design starting with concrete objects and then over time classifing them into classes, evolving a class-based program. \pkg{proto} provides a smooth transition path since it can handle both the class-free and the class-based phases -- there is no need to switch object systems part way through. In this example, we define an object which holds a linear equation, \code{eq}, represented as a character string in terms of the unknown variable \code{x} and a \code{print} and a \code{solve} method. We execute the \code{print} method to solve it. We also create child object \code{lineq2} which overrides \code{eq} and execute its \code{print} method. <>= lineq <- proto(eq = "6*x + 12 - 10*x/4 = 2*x", solve = function(.) { e <- eval(parse(text=paste(sub("=", "-(", .$eq), ")")), list(x = 1i)) -Re(e)/Im(e) }, print = function(.) cat("Equation:", .$eq, "Solution:", .$solve(), "\n") ) lineq$print() lineq2 <- lineq$proto(eq = "2*x = 7*x-12+x") lineq2$print() @ We could continue with enhancements but at this point we decide that we have a general case and so wish to abstract \code{lineq} into a class. Thus we define a trait, \code{Lineq}, which is just \code{lineq} minus \code{eq} plus a constructor \code{new}. The key difference between \code{new} and the usual \code{proto} function is that with \code{new} the initialization of \code{eq} is mandatory. Having completed this definition we instantiate an object of class/trait \code{Lineq} and execute it. <>= Lineq <- lineq rm(eq, envir = Lineq) Lineq$new <- function(., eq) proto(., eq = eq) lineq3 <- Lineq$new("3*x=6") lineq3$print() @ Note how we have transitioned from a prototype style of programming to a class-based style of programming all the while staying within the \pkg{proto} framework. \section{Summary} \label{sec:summary} \subsection{Benefits} \label{sec:benefits} The key benefit of the \pkg{proto} package is to provide access to a style of programming that has not been conveniently accessible within \proglang{R} or any other mainstream language today. \pkg{proto} can be used in two key ways: class-free object oriented programming and class-based object oriented programming. A key application for \pkg{proto} in class-free programming is to wrap the code and data for each run of a particular statistical study into an object for purposes of organization and reproducibility. It provides such organization directly and without the need and overhead of class definitions yet still provides the inheritance and dispatch advantages of object oriented programming. We provide examples of this style of programming in Section~\ref{sec:smooth} and Section~\ref{sec:corr}. A third example in Section~\ref{sec:tree} illustrates a beneficial use of \pkg{proto} with recursive data structures. Another situation where prototype programming is of interest is in the initial development stages of a program. In this case, the design may not be fully clear so it is more convenient to create concrete objects individually rather than premature abstractions through classes. The \code{graph.proto} function can be used to generate visual representations of the object tree suggesting classifications of objects so that as the program evolves the general case becomes clearer and in a bottom up fashion the objects are incrementally abstracted into classes. In this case, \pkg{proto} provides a smooth transition path since it not only supports class-free programming but, as explained in the Section~\ref{sec:traits}, is sufficiently powerful to support class-based programming, as well. \subsection{Conclusion} \label{sec:conclusion} The package \pkg{proto} provides an \proglang{S3} subclass of the \code{environment} class for constructing and manipulating object oriented systems without classes. It can also emulate classes even though classes are not a primitive structure. Its key design goals are to provide as simple and as thin a layer as practically possible while giving the user convenient access to this alternate object oriented paradigm. This paper describes, by example, how prototype programming can be carried out in \proglang{R} using \pkg{proto} and illustrates such usage. Delegation, cloning traits and general manipulation and incremental development are all reviewed by example. \section*{Computational details} \label{sec:compute} The results in this paper were obtained using \proglang{R} 2.1.0 with the package \pkg{proto} 0.3--2. \proglang{R} itself and the \pkg{proto} package are available from CRAN at \url{http://CRAN.R-project.org/}. The GraphViz software is available from \url{http://www.graphviz.org}. \phantomsection \addcontentsline{toc}{section}{References} \bibliography{proto} %\input{proto.bbl} \newpage\mbox{} \begin{appendix} \section{Frequently Asked Questions} \label{sec:faq} \begin{enumerate} \item{What scope do unqualified object references within methods use? A \pkg{proto} object is an environment and that environment is the environment of the methods in it (by default). That is, unqualified object references within a \pkg{proto} method look first in the method itself and secondly in the \pkg{proto} object containing the method. This is referred to as object scope as opposed to lexical scope or dynamic scope. It allows simple situations, where delegation is not used, to use unqualified names. Thus simple situations remain simple. \citep{Kates2004} discusses the fragile base class problem which relates to this question. Also note that if a \pkg{proto} object is created via the \code{proto} function using an argument of \code{funEnvir = FALSE} then the environment of the function/method will not be set as just described (but rather it will retain its original environment) so the above does not apply. This can be used for instances when non-default processing is desirable.} \item{Why does \code{obj\$meth} not return the method, \code{meth}? Conceptually \code{obj\$meth} returns \code{meth} but with \code{obj} already inserted into its first argument. This is termed an instantiated \pkg{proto} method and is of \proglang{S3} class \code{"instantiatedProtoMethod"}. In contrast, the method itself (i.e. the uninstantited method) would not have the first argument already inserted. To return the method itself use \code{with(obj, meth}. The main advantage of a design that makes the distinction between instantiated and uninstantiated methods is that uninstantiated methods are never changed so debugging can be more readily carried out (as discussed in the next question and answer). } \item{How does one debug a method? \pkg{proto} does not dynamically redefine methods. This has the advantage that the ordinary \proglang{R} \code{debug} and \code{undebug} commands can be used. When using these be sure that to use them with the uninstantiated method itself and not the instantiated method derived from it. That is, use: \begin{verbatim} with(obj, debug(meth)) \end{verbatim} and not \begin{verbatim} debug(obj$meth) # wrong \end{verbatim} } \item{Is multiple inheritance supported? No. \pkg{proto} is just a thin layer on top of \proglang{R} environments and \proglang{R} environments provide single inheritance only. \citep{Kates2004} discusses some ways of handling situations which would otherwise require multiple inheritance.} \item{Does \pkg{proto} support lazy evaluation? Since \code{proto} methods are just \proglang{R} functions they do support lazy evaluation; however, the \code{proto} function itself does evaluate its arguments. To get the effect of lazy evaluation when using the \code{proto} function replace any properties with a function. If the caller is the parent of the \code{proto} object then its particularly simple. Note how we got the equivalent of lazy evaluation in the second example where f is a function: \begin{verbatim} # eager evaluation x <- 0 p <- proto(f = x, g = function(.) $x) x <- 1 p$f # 0 # versus making f a function # simulates lazy evaluation x <- 0 p <- proto(f = function(.) x, g = function(.) .$x) x <- 1 p$f() # 1 \end{verbatim} If we cannot guarantee that the proto object has the caller as its parent then ensure that the environment of the function has not been reset. If no method needs to reference \code{.that} or \code{.super} then we can arrange for that using \code{funEnvir=FALSE} as seen here in the second example: \begin{verbatim} # does not work as intended x <- 0 p <- proto(x = 99) q <- p$proto(f = function(.) x, g = function(.) .$x) x <- 1 q$f() # 99 # does work x <- 0 p <- proto(x = 99) q <- p$proto(f = function(.) x, g = function(.) .$x, funEnvir = FALSE) x <- 1 q$f() # 1 \end{verbatim} If we wish only to not reset the function used to simulate lazy evaluation then we can do it using either of the two equivalent alternatives below. \code{g} is an ordinary method whose environment is reset to \code{q} whereas \code{f} is a function whose environment is not reset and serves to provide lazy evaluation for \code{x} found in the caller. \begin{verbatim} x <- 0 p <- proto(x = 99) # g will use q's y in children of q even if those children # override y q <- p$proto(y = 25, g = function(.) .that$y + .$x) q[["f"]] <- function(.) x x <- 1 q$f() # 1 # equivalent alternative x <- 0 p <- proto(x = 99) q <- proto(f = function(.) x, funEnvir = FALSE, envir = p$proto(y = 25, g = function(.) .that$y + .$x)) x <- 1 q$f() # 1 \end{verbatim} } \end{enumerate} \newpage{} \section{Reference Card} \label{sec:ref} \input{protoref-raw} \end{appendix} \end{document} proto/vignettes/proto-dot.tex0000744000176200001440000000016312065354671016110 0ustar liggesusers\begin{Schunk} \begin{Sinput} > library(Rgraphviz) > g <- graph.proto() > plot(g) \end{Sinput} \end{Schunk} proto/vignettes/proto-dot.pdf0000744000176200001440000001202212065354671016056 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 368 /Filter /FlateDecode /N 8 /First 46 >> stream xuAO@9…n CH hڀamܤwig^`1D' BCІ0hf5JΤCdwq" b:< L 5}M0M F<1)WjyR7$isGKiIsDrNVf+Rh'UZR0X*97'1z5 'o:NTev]<)I Xj|3ZҐ.Qb <[Mt.-Yjgc.khMSs|}O ]R=Jk.LvHHB4tc/g^zVT!DqE-lOr<@_endstream endobj 10 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 11 0 obj << /Length 1578 /Filter /FlateDecode >> stream xWKU7 _%,ygYEBmUX TMgJF@~~<. vroQr TJ?po_޼|@%py {zp" >'b]Sr˶ͥSo\Z2ZaL;+BȾvռz-X4jwtszvkF_ΏP麷uHO.񯻇zn?^ܮhX=.,6xlA0;O.d^U bٷgp?I[Gv@ +\;BGi KjeL[ԷhJӲچ.NͷJmg۾e‚jH]넹%%teYMq웁r!XW[~+Zi5g۾eC='艸b MjKC+Sڠ+fko7(eP =DOk3zR|51'WJJ ?6;ԫBl~iҪczUA3mW1}eS\ݓ7pk1H{/j D[N@F瓱ٺpw~ f3'1("JCԈDi(+XCKVo.4wX#`AH{;9f-)BgDDx!j$W>1 /5 UX#^}c]',JWj@E>"O!wG}ri %f$T,/5PSߐkr !;$rV(1ˁ_~,C(Rwd~N\aȣiiGAcq\=Ȅɔv)O@P1(0W:QA.؆;nEPPR JܣĽiAcqϒ>\9p+J6#68orN&C._;9+2-2uUv3,ɸi,Bí3W>R~} dz%|wL-|ť]1\Dz p;Q[H M]Y,"|k@rD u|G8 9pt#fKDinN/1ʭev*.s $[3>#-I ,ںOJ@27c0i /dޯYK1 w1; )lQx#a0?CN{endstream endobj 12 0 obj << /Type /XRef /Length 38 /Filter /FlateDecode /DecodeParms << /Columns 4 /Predictor 12 >> /W [ 1 2 1 ] /Info 2 0 R /Root 3 0 R /Size 13 /ID [<86abbd54343072bb81c8efa7fde4cc26><86abbd54343072bb81c8efa7fde4cc26>] >> stream xcb&F~ c$@g|a endstream endobj startxref 4830 %%EOF proto/vignettes/cloning3.pdf0000744000176200001440000000275212065354671015654 0ustar liggesusers%PDF-1.2 %쏢 5 0 obj <> stream xTn1,B gx [A)H!q+"9 ;o쓏|g{rD/ >Dhegr_ :o>^Ha*=d%TrʁCjt8S54X܌/~Oq*}x-GwnΈ@%mvdy޶Tl; r-?]ݚoǽv"GT `Z)Q D͖<k)CjG E[3؁1\NE MoeI/h^wkѓU,1hhIѲ'Ky z( /TqH^Aendstream endobj 6 0 obj 586 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 /CropBox [36 36 169 217] >> endobj 1 0 obj <> endobj 8 0 obj <> endobj 7 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000915 00000 n 0000001058 00000 n 0000000831 00000 n 0000000690 00000 n 0000000015 00000 n 0000000671 00000 n 0000000992 00000 n 0000000963 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 1258 %%EOF proto/vignettes/cloning3.dot0000744000176200001440000000021412065354671015660 0ustar liggesusersdigraph G { graph [rankdir = BT]; "oo.res" -> "oo" ; "oos" -> "oo" ; "oos.res" -> "oos" ; "oos.res" -> "oo.res" [style=dashed] ; } proto/README.debian0000744000176200001440000000030712065354671013530 0ustar liggesusersThe optional graphics features of proto require an installed version of Rgraphviz. To pass R CMD CHECK, the following Debian packages are required: graphviz_dev libglib1.2-dev 2005-09-27proto/R/0000755000176200001440000000000012065354671011627 5ustar liggesusersproto/R/proto.R0000744000176200001440000000640112065354671013117 0ustar liggesusersproto <- function (. = parent.env(envir), expr = {}, envir = new.env(parent = parent.frame()), ..., funEnvir = envir) { parent.env(envir) <- . as.proto.environment(envir) # must do this before eval(...) # moved eval after for so that ... always done first # eval(substitute(eval(quote({ expr }))), envir) dots <- list(...); names <- names(dots) for (i in seq(length = length(dots))) { assign(names[i], dots[[i]], envir = envir) if (!identical(funEnvir, FALSE) && is.function(dots[[i]])) environment(envir[[names[i]]]) <- funEnvir } eval(substitute(eval(quote({ expr }))), envir) if (length(dots)) as.proto.environment(envir) else envir } as.proto <- function(x, ...) UseMethod("as.proto") as.proto.environment <- function(x, ...) { assign(".that", x, envir = x) assign(".super", parent.env(x), envir = x) structure(x, class = c("proto", "environment")) } as.proto.proto <- function(x, ...) x as.proto.list <- function(x, envir, parent, all.names = FALSE, ..., funEnvir = envir, SELECT = function(x) TRUE) { if (missing(envir)) { if (missing(parent)) parent <- parent.frame() envir <- if (is.proto(parent)) parent$proto(...) else proto(parent, ...) } for(s in names(x)) if (SELECT(x[[s]])) { assign(s, x[[s]], envir = envir) if (is.function(x[[s]]) && !identical(funEnvir, FALSE)) environment(envir[[s]]) <- funEnvir } if (!missing(parent)) parent.env(envir) <- parent as.proto.environment(envir) # force refresh of .that and .super } "$<-.proto" <- function(this,s,value) { if (s == ".super") parent.env(this) <- value if (is.function(value)) environment(value) <- this this[[as.character(substitute(s))]] <- value this } is.proto <- function(x) inherits(x, "proto") isnot.function <- function(x) ! is.function(x) "$.proto" <- function (this, x, args) { inh <- substr(x, 1, 2) != ".." p <- parent.frame() res <- get(x, envir = this, inherits = inh) is.function <- is.function(res) is.that <- match(deparse(substitute(this)), c(".that", ".super"), nomatch = 0) if (is.function && !is.that) { res <- function(...) get(x, envir = this, inherits = inh)(this, ...) class(res) <- c("instantiatedProtoMethod", "function") attr(res, "this") <- this if (!missing(args)) res <- do.call(res, args, envir = p) } res } # modified from Tom Short's original print.instantiatedProtoMethod <- function(x, ...) { # cat("proto method call: ") # print(unclass(x)) cat("proto method (instantiated with ", name.proto(attr(x, "this")), "): ", sep = "") print(eval(body(x)[[1]], envir = environment(x))) } # modified from Tom Short's original str.proto <- function(object, max.level = 1, nest.lev = 0, indent.str = paste(rep.int(" ", max(0, nest.lev + 1)), collapse = ".."), ...) { cat("proto", name.proto(object), "\n") Lines <- capture.output(str(as.list(object), max.level = max.level, nest.lev = nest.lev, ...))[-1] for(s in Lines) cat(s, "\n") if (is.proto(parent.env(object))) { cat(indent.str, "parent: ", sep = "") str(parent.env(object), nest.lev = nest.lev + 1, ...) } } proto/R/graph.proto.R0000744000176200001440000000354712065354671014227 0ustar liggesusers name.proto <- function(., envir = parent.frame()) { stopifnot(is.environment(.) || (is.character(.) && is.environment(get(., envir)))) if (is.environment(.)) { if (exists("..Name", ., inherits = FALSE)) .$..Name else { L <- unlist(eapply(envir, identical, .)) if (any(L)) names(L[L])[1] else gsub("^.* |>$", "", capture.output(print.default(.))[[1]]) } } else { e <- get(., envir) if (exists("..Name", e, inherits = FALSE)) e$..Name else . } } graph.proto <- function(e, g = new("graphNEL", edgemode = "directed"), child.to.parent = TRUE) { if (missing(e)) e <- if (exists(".that")) get(".that") else parent.frame() if ( suppressWarnings(! require(graph) || ! require(Rgraphviz)) ) stop("Error: packages graph and Rgraphviz must be available for loading") # add node if its not already in g addNode. <- function(x, g) if (x %in% nodes(g)) g else addNode(x, g) # add edge between nodes adding nodes too if not already in g addEdge. <- function(x, y, g) { g <- addNode.(x,g); g <- addNode.(y, g) addEdge(x, y, g, 1) } nn <- unlist(eapply(e, is.proto)) for(x in names(nn[nn])) g <- if (child.to.parent) addEdge.(name.proto(x,e), name.proto(get(x,e)$parent.env(), e), g) else addEdge.(name.proto(get(x,e)$parent.env(), e), name.proto(x, e), g) g } ### test # a <- proto() # b <- a$proto() # g <- graph.proto() # plot(g) # g <- graph.proto(child.to.parent = FALSE) # change arrow heads # plot(g) # g <- graph.proto(new("graphNEL")) # undirected # plot(g) # g <- graph.proto() # attrs <- list(node = list(fillcolor = "lightgreen"), # edge = list(color = "cyan"), # graph = list(rankdir = "BT")) # plot(graph.proto(), attrs) # specify plot attributes proto/NAMESPACE0000744000176200001440000000002312065354671012641 0ustar liggesusersexportPattern(".") proto/man/0000755000176200001440000000000012065354671012201 5ustar liggesusersproto/man/proto.Rd0000744000176200001440000002554312065354671013645 0ustar liggesusers\name{proto} \alias{proto} \alias{as.proto} \alias{as.proto.environment} \alias{as.proto.list} \alias{as.proto.proto} \alias{isnot.function} \alias{is.proto} \alias{$.proto} \alias{$<-.proto} \alias{with.proto} \alias{str.proto} \alias{.} \alias{this} \alias{.that} \alias{that} \alias{.super} \alias{super} \alias{print.instantiatedProtoMethod} \title{Prototype object-based programming} \description{ \code{proto} creates or modifies objects of the proto object oriented system. } \usage{ proto(. = parent.env(envir), expr = {}, envir = new.env(parent = parent.frame()), ..., funEnvir ) \method{as.proto}{list}(x, envir, parent, all.names = FALSE, ..., funEnvir = envir, SELECT = function(x) TRUE) isnot.function(x) } \arguments{ \item{.}{the parent object of the new object. May be a proto object or an environment.} \item{expr}{a series of statements enclosed in braces that define the variables and methods of the object. Empty braces, the default, may be used if there are no variables or methods to add at this time.} \item{envir}{an existing prototype object or environment into which the variables and methods defined in \code{expr} are placed. If omitted a new object is created.} \item{funEnvir}{the environment of methods passed via \dots are automatically set to this environment. Normally this argument is omitted, defaulting to \code{envir}; however, one can specify \code{FALSE} to cause their environment to not be set or one can specify some other environment or proto object to which their environment is to be set.} \item{x}{a list.} \item{parent}{a prototype object or environment which is to be used as the parent of the object. If \code{envir} is specified then its parent is coerced to \code{parent}.} \item{\dots}{for \code{proto} these are components to be embedded in the new object. For \code{as.proto.list} these are arguments to pass to \code{proto} in the case that a new object is created.} \item{SELECT}{a function which given an object returns \code{TRUE} or \code{FALSE} such that only those for which \code{SELECT} returns \code{TRUE} are kept in the returned \code{proto} object.} \item{all.names}{only names not starting with a dot are copied unless all.names is TRUE.} } \details{ The \code{proto} class is defined to be a subclass of the R \code{environment} class. In particular this implies that \code{proto} objects have single inheritance and mutable state as all environments do. \code{proto} creates or modifies objects of this class. It inserts all variables and functions in \code{expr} and then in \code{\dots} into \code{envir} setting the parent to \code{.}. The environment of all functions inserted into the environment are set to that environment. All such functions should have the receiver object as their first argument. Conventionally this is \code{.} (i.e. a dot). Also \code{.that} and \code{.super} variables are added to the environment. These point to the object itself and its parent. Note that \code{proto} can be used as a method and overridden like any other method. This allows objects to have object-specific versions of \code{proto}. \code{as.proto} is a generic with methods for environments, proto objects and lists. \code{as.proto.list} copies inserts a copy of each component, \code{el}, of the list \code{x} into the the environment or proto object \code{envir} for which \code{FUN(el)} is \code{TRUE}. Also, components whose name begins with a dot, \code{.}, are not copied unless \code{all.names} is \code{TRUE} (and \code{FUN(el)} is \code{TRUE}). The result is a proto object whose parent is \code{parent}. If \code{envir} is omitted a new object is created through a call to \code{proto} with \code{parent} and \code{\dots} as arguments. If \code{parent} is also omitted then the current environment is used. Note that if \code{parent} is a proto object with its own \code{proto} method then this call to \code{proto} will be overridden by that method. The utility function \code{isnot.function} is provided for use with \code{as.proto.list} to facilitate the copying of variables only. \code{$} can be used to access or set variables and methods in an object. When \code{$} is used for getting variables and methods, calls of the form \code{obj$v} search for v in \code{obj} and if not found search upwards through the ancestors of \code{obj} until found unless the name \code{v} begins with two dots \code{..}. In that case no upward search is done. If \code{meth} is a function then \code{obj$meth} is an object of class \code{c("instantiatedProtoMethod", "function")} which is a \code{proto} method with the first, i.e. proto slot, already filled in. It is normally used in the context of a call to a method, e.g. \code{obj$meth(x,y)}. There also exists \code{print.instantiatedProtoMethod} for printing such objects. Note that an instantiated proto method is not the same as a proto method. The first has its first slot filled in whereas the second does not. If it is desired to actually return the method as a value not in the context of a call then use the form \code{obj$with(meth)} or \code{obj[[meth]]} which are similar to \code{with(obj, meth)} except that the variation using \code{with} will search through ancestors while \code{[[} will not search through ancestors). The difference between \code{obj$meth} and \code{obj$with(meth)} is that in the first case \code{obj} implicitly provides the first argument to the call so that \code{obj$meth(x,y)} and \code{obj$with(meth)(obj,x,y)} are equivalent while in the case of \code{obj$with(meth)} the first argument is not automatically inserted. \code{$.proto} also has a three argument form. If the third argument is present then it should be a list specifying the arguments at which the instantiated method is to be evaluated. The forms \code{.that$meth} and \code{.super$meth} are special and should only be used within methods. \code{.that} refers to the object in which the current method is located and \code{.super} refers to the parent of \code{.that}. In both cases the receiver object must be specified as the first argument --- the receiver is not automatically inserted as with other usages of \code{$}. \code{$} can be used to set variables and methods in an object. No ancestors are searched for the set form of \code{$}. If the variable is the special variable \code{.super} then not only is the variable set but the object's parent is set to \code{.super}. A \code{with} method is available for \code{proto} objects. \code{is.proto(p)} returns TRUE if p is a prototype object. \code{str.proto} is provided for inspecting \code{proto} objects. } \value{ \code{proto} and \code{as.proto} all return proto objects. \code{isnot.function} returns a logical value. } \note{ proto methods can be used with environments but some care must be taken. These can be avoided by always using proto objects in these cases. This note discusses the pitfalls of using environments for those cases where such interfacing is needed. Note that if \code{e} is an environment then \code{e$x} will only search for \code{x} in \code{e} and no further whereas if \code{e} were a proto object its ancestors will be searched as well. For example, if the parent of a \code{proto} object is an \code{environment} but not itself a \code{proto} object then \code{.super$x} references in the methods of that object will only look as far as the parent. Also note that the form \code{e$meth(...)} when used with an environment will not automatically insert \code{e} as the first argument and so environments can only be used with methods by using the more verbose \code{e$meth(e, ...)}. Even then it is not exactly equivalent since \code{meth} will only be looked up in \code{e} but not its ancestors. To get precise equivalence write the even more verbose \code{with(e, meth)(e, ...)}. If the user has a proto object \code{obj} which is a child of the global environment and whose methods use \code{.super} then \code{.super} will refer to an environment, not a proto object (unless the global environment is coerced to a proto object) and therefore be faced with the search situation discussed above. One solution is to create an empty root object between the global environment and \code{obj} like this \code{Root <- obj$.super <- proto(.GlobalEnv)} where \code{Root} is the root object. Now \code{.super} references will reference \code{Root}, which is a proto object so search will occur as expected. \code{proto} does not provide such a root object automatically but the user can create one easily as shown, if desired. Although not recommended, it possible to coerce the global environment to a proto object by issuing the command \code{as.proto(.GlobalEnv)}. This will effectively make the global environment a proto root object but has the potential to break other software, although the authors have not actually found any software that it breaks. } \seealso{\code{\link{as.list}}, \code{\link{names}}, \code{\link{environment}}} \examples{ oo <- proto(expr = {x = c(10, 20, 15, 19, 17) location <- function(.) mean(.$x) # 1st arg is object rms <- function(.) sqrt(mean((.$x - .$location())^2)) bias <- function(., b) .$x <- .$x + b }) debug(oo$with(rms)) # cannot use oo$rms to pass method as a value undebug(oo$with(rms)) # cannot use oo$rms to pass method as a value oo2 <- oo$proto( location = function(.) median(.$x) ) oo2$rms() # note that first argument is omitted. oo2$ls() # list components of oo2 oo2$as.list() # contents of oo2 as a list oo2 # oo2 itself oo2$parent.env() # same oo2$parent.env()$as.list() # contents of parent of oo2 oo2$print() oo2$ls() oo2$str() oo3 <- oo2 oo2$identical(oo3) oo2$identical(oo) # start off with Root to avoid problem cited in Note Root <- proto() oop <- Root$proto(a = 1, incr = function(.) .$a <- .$a+1) ooc <- oop$proto(a = 3) # ooc is child of oop but with a=3 ooc$incr() ooc$a # 4 # same but proto overridden to force a to be specified oop$proto <- function(., a) { .super$proto(., a=a) } \dontrun{ ooc2 <- oop$proto() # Error. Argument "a" is missing, with no default. } ooc2 <- oop$proto(a = 10) ooc2$incr() ooc2$a # 11 # use of with to eliminate having to write .$a o2 <- proto(a = 1, incr = function(.) with(., a <- a+1)) o2c <- as.proto(o2$as.list()) # o2c is a clone of o2 o2d <- o2$proto() # o2d is a child of o2 o2$a <- 2 o2c$a # a not changed by assignment in line above o2d$a # a is changed since a not found in o2d so found in o2 p <- proto(a = 0, incr = function(., x) .$a <- .$a + x) pc <- p$proto(a = 100) sapply(list(p, pc), "$.proto", "incr", list(x = 7)) } \keyword{programming} proto/man/proto-package.Rd0000744000176200001440000000404312065354671015226 0ustar liggesusers\name{proto-package} \alias{proto-package} \docType{package} \title{ Object-Oriented Programming with the Prototype Model } \description{ Object-oriented programming with the prototype model. \code{"proto"} facilitates object-oriented programming using an approach that emphasizes objects rather than classes (although it is powerful enough to readily represent classes too). } \details{ \code{"proto"} allows one to write object-oriented programs using the prototype model. It is a simple system that uses objects rather than classes yet is powerful enough to readily encompass classes too. The following are sources of information on \code{"proto"}: \tabular{ll}{ Home page\tab \code{u <- "http://r-proto.googlecode.com"; browseURL(u)}\cr Overview\tab \code{README <- system.file("README", package = "proto"); file.show(README)}\cr Invoking a demo file\tab \code{demo("proto")}\cr Referance Card\tab \code{vignette("protoref")}\cr Tutorial \tab \code{vignette("proto")}\cr Prototype OO concepts document\tab \code{u <- "http://r-proto.googlecode.com/files/prototype_approaches.pdf"; browseURL(u)}\cr News\tab \code{RShowDoc("NEWS", package = "proto")}\cr Wish List\tab \code{RShowDoc("WISHLIST", package = "proto")}\cr Thanks\tab \code{RShowDoc("THANKS", package = "proto")}\cr License\tab \code{RShowDoc("COPYING", package = "proto")}\cr Citation\tab \code{citation(package = "proto")}\cr This File\tab \code{package?proto}\cr Help file\tab \code{?proto}\cr graph.proto Help File\tab \code{?graph.proto}\cr } } \note{See \code{?graph.proto} for the solution to a common Linux installation problem with \code{Rgraphviz} that \code{proto} depends on.} \keyword{programming} \examples{ cat("parent\n") oop <- proto(x = 10, view = function(.) paste("this is a:", .$x)) oop$ls() oop$view() cat("override view in parent\n") ooc1 <- oop$proto(view = function(.) paste("this is a: ***", .$x, "***")) ooc1$view() cat("override x in parent\n") ooc2 <- oop$proto(x = 20) ooc2$view() \dontrun{ g <- graph.proto() plot(g) } } proto/man/graph.proto.Rd0000744000176200001440000000441512065354671014740 0ustar liggesusers\name{graph.proto} \alias{graph.proto} \alias{name.proto} \title{ Create a graph of proto objects } \description{ Creates a graph of the parent/child relationships among a set of proto objects. } \usage{ graph.proto(e, g = new("graphNEL", edgemode = "directed"), child.to.parent = TRUE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{e}{ A proto object or an environment whose proto objects will be graphed. } \item{g}{ A graph to add the edges and nodes to. Defaults to an empty graph. } \item{child.to.parent}{ If TRUE then arrows are drawn from child to parent; otherwise, from parent to child. } } \details{ This function is used to create a graph in the sense of the \code{"graph"} package out of the parent child relationships of proto objects. All \code{"proto"} objects in \code{"e"} and their immediate parents are placed in the graph. The objects are labelled using their \code{"..Name"} component. If there is no \code{"..Name"} component then their variable name in \code{"e"} is used. In the case of a parent that is not in \code{"e"}, an internally generated name will be used if the parent has no \code{"..Name"} component. If two \code{"proto"} objects to be graphed have the same name the result is undefined. } \value{ Produces an object of class \code{"graph"} that can subsequently be plotted. } \note{ \code{graph.proto} makes use of the \code{Rgraphviz} package in the \code{BioConductor} repository and so \code{Rgraphviz} must be installed and loaded. On Linux one gotcha is that you may need to add the \code{graphviz} shared library, e.g. to add the directory containing the \code{.so} files, to your linker path via: \code{export LD_LIBRARY_PATH=/path/to/graphviz/libs}. } \examples{ \dontrun{ a <- proto() b <- a$proto() g <- graph.proto() plot(g) g <- graph.proto(child.to.parent = FALSE) # change arrow heads plot(g) g <- graph.proto(g = new("graphNEL")) # undirected plot(g) g <- graph.proto() attrs <- list(node = list(fillcolor = "lightgreen"), edge = list(color = "cyan"), graph = list(rankdir = "BT")) plot(graph.proto(), attrs = attrs) # specify plot attributes } } \keyword{programming} proto/inst/0000755000176200001440000000000012065354710012375 5ustar liggesusersproto/inst/WISHLIST0000744000176200001440000000037712065354671013604 0ustar liggesusers WISHLIST o have str.proto check for cyclically defined proto objects ? o str.proto should give hash (in addition to name) when there is a name. Currently it gives name only or hash only (if there is no name). o eliminate .that and .super proto/inst/THANKS0000744000176200001440000000060412065354671013317 0ustar liggesusers Thanks to Tom Short (tshort@eprisolutions.com) for contributing code for print.instantiatedProtoMethod and str.proto. Thanks to John Verzani for helpful conversations regarding lazy evaluation. Thanks to Luke Tierney for helpful conversations regarding lazy evaluation and promises in R and fixes for R 2.13. Thanks to Matthias Burger for providing full argument patch. proto/inst/README0000744000176200001440000000623612065354671013273 0ustar liggesusers Proto is an R package that facilitates prototype programming, a type of object-oriented programming that does not use classes as an atomic concept (but is powerful enough to encompass them). The package has been in development for over a year and on CRAN since the beginning of 2005. The package is lightweight providing a thin layer on top of R environments. Unlike other packages which grow over time proto has become smaller over time as it was successively polished to reduce it to its essentials. Despite its small size prototype-based systems can be more powerful than more complex class-based systems. EASE OF USE The proto package is easy to use because: 1. few names. There is only one new function name to learn among the core functions. The 'proto' function constructs new proto objects. Remaining core functions include various as.proto methods, assignment and retrieval via $ and is.proto. 2. documentation. A 15 page report, a reference card, a demo and help files are provided. 3. consistency. Proto objects form an subclass of the environment class. They are and work like environments. One can leverage everything one knows about environments to use proto. The package is highly consistent with R and works the way R works. 4. concise implementation. The source code, excluding dot.proto, is about one page of code making it possible to rapidly understand it in its entirety not only from the documentation but also by reading its source. (This should not be necessary but its there for those who wish.) 5. tested. The package has been independently tested by multiple people and has no known bugs. (If you find any please let the developers know!) 6. visualization. It includes a graphical support function, graph.proto, which produces inheritance graphs of projects that can be rendered using the Rgraphviz plot function, allowing one to visualize projects. EXAMPLE The proto package is used like this: library(proto) # new object with variable a and method addtwice oo <- proto(a = 1, addtwice = function(., x) .$a <- .$a + 2*x) oo$addtwice(3) # add twice 3 to 1 oo$ls() # "a" "addtwice" oo$a # 7 # create child object overriding a ooc <- oo$proto(a = 10) ooc$addtwice(1) # inherit addtwice from parent oo ooc$ls() # "a" ooc$a # 12 - addtwice from oo used "a" in ooc! DOCUMENTATION More information is available via: install.packages("proto") # needs R 2.1.0 or later library(proto) demo(proto) # a self running demo vignette("proto") # 15 page report vignette("protoref") # reference card ?proto # constructs proto objects ?dot.proto # visualize a proto project # other information file.show(system.file("NEWS", package = "proto")) file.show(system.file("README", package = "proto")) # this file file.show(system.file("WISHLIST", package = "proto")) proto is available on CRAN now for R 2.1.0 and later. Comments are welcome. Louis Kates Thomas Petzoldt September 9, 2005 (updated) May 12, 2005 proto/inst/NEWS0000744000176200001440000000621612065354671013110 0ustar liggesusers VERSION 0.3-10 o added NAMESPACE file o removed junk files VERSION 0.3-9.2 o fixed bug in print.instantiatedProtoMethod VERSION 0.3-9.1 o minor change to pass R CMD CHECK o removed one file that was not relevant to this version of proto VERSION 0.3-9 o minor changes to satisfy subtitute/eval changes in R 2.13.0 (thanks to Luke Tierney) o x could previously not be the name of a proto object. Now fixed. o proto print methods could break str.proto. Now fixed. VERSION 0.3-8 o minor changes to satisfy R 2.6.0 VERSION 0.3-7 o FAQ added as Appendix A of vignette o str.proto added (modified code of Tom Short) o the class of p$fun is now "instantiatedProtoMethod" and print.instantiatedProtoMethod provided (modified code of Tom Short) o "$.proto" now has a third argument which, if present, is a list of arguments at which to evaluate the instantiated method. Intended for use within sapply/lapply/etc. See examples in ?proto . o modified DESCRIPTION to point to new home page VERSION 0.3-6 o order of arguments in proto and as.proto.list changed to address a bug VERSION 0.3-5 o new arg funEnvir= on proto and as.proto.list [experimental] o new arg SELECT= on as.proto [experimental] VERSION 0.3-4 o new function graph.proto using Rgraphviz replaces dot.proto o updated vignettes o added proto-package.Rd (viewable via package?proto) VERSION 0.3-3 o updated NEWS, README, WISHLIST and moved to to inst directory VERSION 0.3-2 o bug fix (recursion bug) o documentation improvements (vignette, .Rd files, README) VERSION 0.3-1 o .Rd file improvements VERSION 0.3-0 o that/super changed to .that/.super. o .Name changed to ..Name in dot.proto o improvements to .Rd files and vignette VERSION 0.2-6 o demo index file fixed and demo renamed and enhanced o proto.bib updated o consistent use of obj$with(meth) in examples and demo where method not used in the context of a call VERSION 0.2-5 o vignette and reference card now pass R CMD check/build/install o CHANGES renamed to NEWS VERSION 0.2-4 o added control argument to dot.proto VERSION 0.2-3 o added reference card o modified demo, .Rd files and vignette to correspond to new interface o changed argument list for proto and eliminated delegate o created as.proto.list and eliminated copy.proto o fixed bug in proto. Parent was not always set correctly. o added ... argument to copy.proto o added the isnot.function support function for use with copy.proto o cleaned up $.proto code for handling .. names. o the on-the-fly wrapper function generated by obj$meth now has the current environment as its environment. o proto no longer coerces its parent to a proto object. See note at end of proto.Rd. o added .. name processing and updated .Rd file o dot.proto now accepts names with dots in them o added delegate and copy.proto commands and updated .Rd file VERSION 0.2-2 o added .. name processing and updated .Rd file o dot.proto now accepts names with dots in them o added delegate and copy.proto commands and updated .Rd file proto/inst/FAQ0000744000176200001440000000342712065354671012744 0ustar liggesusers proto Package FAQ 1. What scope do unqualified object references within methods use? A proto object is an environment and the defined methods in a proto object have that environment as their parent. Thus unqualified object references within a proto method look first in the method itself and secondly in the proto object in which they are defined. This is referred to as object scope as opposed to lexical scope or dynamic scope. It allows simple situations where delegation is not used to use unqualified names. Thus simple situations remain simple. Also read http://hhbio.wasser.tu-dresden.de/projects/proto/prototype_approaches.pdf about the fragile base class problem for additional information that relates to this question. 2. Why does obj$meth not return the method, meth? obj$meth(x, y) needs to call meth(obj, x, y) so obj$meth needs to return meth with its first argument, obj, already inserted. Since calling a method is the most common operation that operation was made the simplest. To get the method itself use with(obj, meth) 3. How does one debug a method? proto will not dynamically redefine methods. This has the advantage that debug can be used. Be sure you are referring to the method itself and not a call to the method: with(obj, debug(meth)) and not debug(obj$meth) # wrong! 4. Is multiple inheritance supported? No. proto is just a thin layer on top of R environments and R environments provide single inheritance only. Note that: http://hhbio.wasser.tu-dresden.de/projects/proto/prototype_approaches.pdf discusses some ways of handling situations which would otherwise require multiple inheritance. 5. How does one document proto methods. One can use an R .Rd file together with \alias entries. proto/inst/doc/0000755000176200001440000000000012065354710013142 5ustar liggesusersproto/inst/doc/protoref.Rnw0000744000176200001440000000111412065354710015470 0ustar liggesusers\SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{protoref: proto Reference Card} %\VignetteDepends{} %\VignetteKeywords{object oriented, prototype programming, S3, R} %\VignettePackage{proto} \documentclass[a4]{article} \usepackage{Rd} %\newlength{\refcardwidth} %\setlength{\refcardwidth}{20cm} % \usepackage{c:/PROGRA~1/R/RW2010~1/share/texmf/Sweave} \begin{document} \pagestyle{empty} %\begin{landscape} \centerline{\Large \bf \pkg{proto} reference card} \vspace{0.8cm} \begin{small} \input{protoref-raw} \end{small} %\end{landscape} \end{document} proto/inst/doc/protoref.pdf0000744000176200001440000017364512065354710015516 0ustar liggesusers%PDF-1.4 % 3 0 obj << /Length 2996 /Filter /FlateDecode >> stream xڭZKoϯ0{h\Ma76 9A-5v$ylTK-KMQd_ͻ~JSW7WJ;\Z >7nz Be"ZSf*)yVum!5`L usV~}{2nJjT^ZM5Lr/'VLD|ʆ\3j)ϻ9q~sC] hFL}2Zkx^4g宥, i@ϾwG"9:6?@mPX5|:;HvreUi ZK"MZH jv?uIꖆҳpmJ l)q6,煒#1Z$Acz0i"d Gg /-f|7ك)xD+LgO a&AztԼV# ɔ׻z`|jSnDuI: fVp?ʄPAwp| Bgjhh1(/|-%Q=Sډbh@ 8~XHc}BxL/x z|o=-$+^c LJ΄cK 5Í&-=eڦX3J917@ hM[p.ྚh(Dӌ SjJ3~KtX/{vxަgC遹XHZpOrH IP씟to8~* Nș\xH }:M.[O33l&r?stzs0~c R'$F #37 yi0Nb0I趱;^$@ 2#MƺVwg:TM1 *Gm &03ِ㇅]ZFBAJ^(OʘRA&l ]!sA;XCy'ܤEK9p@ #7]?UMLO nԘ+ߒj?( |@Kw f'yeXݲTVՋzS AK`zK!M8N+ti$Mns_ʛři2.堔_R-ςuwի~S5ᫎ޽ :CqՕQcg" C>*4^'\4;İQںD 4$66(('3e:4piuF #,PrBW R 74-Eq=?RBrz(-WD7QψxBڏqJZi`s!BO3c+ `x.3DEsaLJ"a [>{>p$UcQREʚ)C9B(c _ϚsAmӆI1+XbP~:psB+[$Rj Cr*:H{$C]i4~}Tuq茕F*ԕxOE3yWx.(*+4W\:q ;bX>';Y)=6ux_c3Qz2e_?}?&8;z鴙x~!B ] ӭ!V#I,Ƈ>eE`3K*? f-eױjMża4QpR|~ 0ٔl&spӄfrP˥B 2f $]زUb '*JCΤQ RRw~lt`&ybضB;.m7R3VruUK(!OT P{:Kt1 ΉlڅgmfE%X-n8C ӧ F61Ty1ͅ+Z?=E #ܼ)B ptw5@@-AJyKE?V`ӼU#~zU[,AozPew;Tǽhς ?zT^Pv@&5 -ܖJP?hG<6C.rX|c {#ѓ22e?CYh O.\1^3J> endobj 1 0 obj << /Font << /F17 4 0 R /F16 5 0 R /F24 6 0 R /F33 7 0 R /F18 8 0 R /F34 9 0 R >> /ProcSet [ /PDF /Text ] >> endobj 12 0 obj [524.9] endobj 13 0 obj [599.5 571 571 856.5 856.5 285.5 314 513.9 513.9 513.9 513.9 513.9 770.7 456.8 513.9 742.3 799.4 513.9 927.8 1042 799.4 285.5 285.5 513.9 856.5 513.9 856.5 799.4 285.5 399.7 399.7 513.9 799.4 285.5 342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4 542.4] endobj 14 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 15 0 obj [854.6 906.6 776.5 743.7 929.9 924.4 446.3 610.8 925.8 710.8 1121.6 924.4 888.9 808 888.9 886.7 657.4 823.1 908.6 892.9 1221.6 892.9 892.9 723.1 328.7 617.6 328.7 591.7 328.7 328.7 575.2 657.4 525.9 657.4 543 361.6 591.7 657.4 328.7 361.6 624.5 328.7 986.1 657.4 591.7 657.4 624.5 488.1 466.8 460.2] endobj 16 0 obj [546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5] endobj 17 0 obj [500 555.6 527.8 427.8 394.4 390.3] endobj 18 0 obj << /Length1 1429 /Length2 6390 /Length3 0 /Length 7350 /Filter /FlateDecode >> stream xڍv4lQԮUĈW)B$DlZ{ԨM=ZTZ)fkSO}?NIk_] >BbA@I"@!b8&0(8(a̵NB!HK$@(# - PxZ N̡rA1e>p B-r] AQP8 \Ҏ]vx1=;  xqL`wKxA0H;p] v!rˁn п BQ.#`mUM7Ar QOv9 \b_eĸOAG:#Q^H?=ig !SWr"@10s~\ `p{;=`~iD P G;f|=|4`^v($+mQ?~_Hˋ]_7ZOsQiH\V Q\M} (z?/eߨ z \Gqz-PˁoWc_BM^_wW{t_ {p$LA@ٮ |_O vM,~(A!>׃D~y&6@P\Qh_]3DKG(Db~hF_o\w!aP T*ԩ&ZыePfc8o qFF2+x}A1u(?|XK6I:Aod0MPцLDw W/qZ58#zG:tr~@V*\/h&az/L>:%~ oKݶmV^ASUa7(R ەgsr/8qG0TN6]B_ʫm$KO8_]dizloPTg@o9pWplh;/ݳ|$&=9 o%q:gUn԰ TU #(/̾D{IB>¹[_Oh!/BJr=S2(v9;#mO/u>_r1(y1Dh@u,QaFũp/iq'7 | 2 `a]FM9 , gsE0i41x+XFa+54G2}grKXR /)/ILmPDkxdDNf粭; (7%= Z6;Gp>&g 0Lhkݝ$HXO(mgHLпIґ:3.|)Mnxo+ @ې6>YN>Cix\GQ鎭Br沛pYwl9'EtOkznE#Fﻃ,;S2ߓy7,dhku=Vp=BZQ>}L$lgW*?8r='8EhXt<}V#FrM(a9ש.Y,}8{joؾY`ӯTQoUZх6ǟx3m|McW_?`I{;+qI/Ib;9d͏{+ȏGǜHV=C23cF30] GLf{d O8ۿ6z `mi8ʙpt;'ӫKYjDn Z_(agC,mo:z۝u;l>(>&S@FS75J89s<;qi Ov=IT's'F+ΥvkI}GZs*W֙kPlھ/=,AVIpʦRY#2ep:=d; $Hޣ+.W]8u;1Dp_ިu+I/3/ sJ6Ru:KAe8V-&f7<‹o[ eh]7BүI]wbW tzM+ӨӼaG2,^E<_٤-)͌ň<܌c|BZ|*\E,c/Mq,@3ʓ[v_>6ŖʙƯ:pb\[ćvqGxx#ٔ⛾ȱ#<HhvH\t4e99|ӫgc?m' n1X-Qe]HSޥ$RYy< tWQ#/4uFoGH6َZTdK=pu{M#moHȴpRJKquVFM  c^]WSKLE"pX%343mК;;! |5֪9;ށp0"?v=Oʷ~3ק39dCwFoʅlD5r*W}lAaWS6g6_ZF]:eMWg_LEMw$ځȃzWd+,?oוJگg!Ux]+#`O'~6ޒp>I'/_];ųpDE 9u` ~P+mm)_YOfpwh Nk ?3KMT'](I WA+u "l;b?`l>H1T bxȑaluwOi>j[7!@]~M>7hG d5,L̚gKdV Di/?RʙlD&̜Vӳ9qtRw{[l`C/׍*6*w}ޙ꣡NU]I{}ywXXgӳOc$ k2b.gz1N>8ěI]n첨9!٘SJ dVK-J((C;oN t|b{&J\z3#^F{DԾ &gyD\Ҫ.aY/Ld`fl4-C؟JPc$^mb D*zRJb qvo>UP-gUXlm[J 'rH ({nTc,;C4b(l觎ɷ 9/)¦?Z}#H*圏9:bW揿O:kV$,ʻō=(y@tGE a2Ag<ħ`:)1W"p{tMAr cin:QMuD EvN_>]%&z+F]jL;8; 8g+`>2'g@" W3Lw7EdmS \ AXz/=~ln/TؔMBŠzE P \f^5t@̭ <5gГ3A ;LDll; L'2=g=/!<^嗩a& W1t(CzG Aj/HlB"BV[]/bz'xծԁk*{J[u +dVZKMڶ&8LN,/W=1rz^0&M0vx_FJJz^ $t6b r]EWZ6Pߦ9aH?6Jp˲:6>-VY&VLzU|M0Pw i5?gp !ÅڬDv9z6 ҟܗ)x,SazIAk1R1AV~ӏ[. ^6e"N5C|¿'I;>:<}ӗ~rTQ)m&p:씠'K(\ͩR 6u]6 2x4n@'5u\9,yOl 7)-7 36:XwggbKuE9ٚ"^*"C["#WWE"M1p{bw vg98^|ON AM8>[ol%d)q?ܦsA2}҇XL\EJBLc:V~x72z"[?9gqŇ.\oQd4*q1e֚*a>Z{,<+KYy5jͼt֓-CDQe!]4b\Pb(f07ʛ涒kN&|l-BSQ6 L(Q3޼iR/PHD{xD 4^~g4&P5 .@-1[k?IyϖGqQKݧѴ|^Yvu͚p?ז\PoOSfOuJ Ύ(ڗ6aXJS.7GLp=cϘrqhr^i>t>P"ӽ#ײIOQ/AB:ԑ\MǓ#k~ypiTMJqfy~J)*u}bY-6L.uYD+[n#n_i6 :yUj]%OqsϩtT֡XVz\,טGQT7Lxئ!u/⻢sġV>x0;S& vOa Pﬦ$v_z@| R~p*/B3ʚpYd&c>M=ק8ߙM_2FZ{nQC@2vMG[+ Ös:'鰺+ `jwyge(E+-ްs <'QkvCuIR=;8oq8V}tj##-$ԟb\ ]IX{ Xg.|WK˃xEeǂb #c}hwӺ[<"ńvza/ʅ})N$IgNXK{W Ͳ%0vi0q-LᣄwI VB=OgWAhPX٦K{CFxjma>FM^68Sg1#οL thǯVw+Xhz z~{ԙӜ>Siݫ<Bu7z[W&x{.hFܟږ0 A&324ᡴQۅX@Qj0#|~7&]K2#t%֍Z (. +_;>Z$5R fz::G{jBeSGSP3IFvUQHew՗.?4J7+ nߏ\?GwQ%j69s_pt8N*T}L;P]^fb }JLu[ddi02czv6sY2 x~ۻTd}kR\?pXޱ6'T.JkƲS hdX`|Ŵ6g6`e0^'0PNcls-{ze0n^g0L6K[6LU.*{$J NY0Q!eAg #~9 >LҏQa[`Vy2u+4ѪvPCn66&inH[rly:];fRҒ>? )NsT<ܚhb c,y8'=^XK  7Oq˿:?6t+56Ec5IdCrP E!?k J+ &EpKZd81.g\njoy?ZB߅hhd۔I׉rO83d?cb,o3͈CI߯44T(7+`oN~oV6JJBxmRi{ DDR!KzRXgڞ~mj zX9Ϟ_eJl%Ev=A Wty<8y A:?WM ǵu{]5_GqߌnO*zupa_0w(Y2Rvj>=~x2&T5yvxhH9wo|Y,Elޝ'2e7HH휪eA%)cm;>&K}6nф;␮3b]ާde"|aQ1-K"}FvڏiyJq)Z5pZ|;"OT uz$B~f5&8 endstream endobj 19 0 obj << /Type /FontDescriptor /FontName /OYILJF+CMB10 /Flags 4 /FontBBox [-62 -250 1011 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 108 /XHeight 444 /CharSet (/o/p/r/t) /FontFile 18 0 R >> endobj 20 0 obj << /Length1 1480 /Length2 6900 /Length3 0 /Length 7882 /Filter /FlateDecode >> stream xڍtTTm6t- 0C54 H ]RH"]" Y{_;ag60W jH'4@YWBH ((" ((ntg7ܟٿ A`0 #0 #! M>w~)@7 F<=<.89fUD ExzOo:#>,r"^PM?17.|POA~o8! 8 z*7w;YTE_',&P ?| nmPIܐ (_7*%~@֯y0@ SSD65/ ߊ!BsHLۈo}G`_7OCz M|:UL"]XS:Qg nnJ2l{j4ތ?;F;ZXxDa#=,]=K ;uҏCQOLC&shXp<x}I&ON?e^3i=D0rY8|SG-% # 8GVL@W0FzVhsl PR*6j+!||ö+*ד/PΞ;\EpmEöH'8k]+< ݒ~4:{iul`Gd a^ȑ9[K kg9L'㷴^nme7o-ϸ{EBJNZۃYX=R'* CF, Rb8 GjK&|T*AkFj<%( e'w k PTL2ʦ|c@pіQL!\ g͔tN m*I-#},>!q2]\AL`ԃ3Iov;8.͔%PzmX^Gd~nU:p6Dz NwRpH Up$O󹺠aOpٌ;10);9Axj%g7ȓpDZ%Lxhvii+l1M*wܷSԳ)"xG'qR$f7G0PU%ߎ{,vG%W ,1]qX]*ŏě>?z}Q΂/1J{.]&5DlZ6oBY9aB9=zRI\ {5s.< Cj$Nt.jf-_)\NO5C҅ ?|} AOr GxqDmɆO\+jV$0enalMh$+nc>sƦ_[2rMY=DR,ds}Z.D ɟ8ڷkU"jH ]%Q~gcpe#@h~Nsh1N{61 ;liٴrϬ/ȚVb0;cQOq? h5bDcA} 6՘JvZG,! %)oc-%x`jT /t;|ra;8c^Kf_AB}3-yk !DU>`Q'@,{;(sCp oqL7v/k!O=kh'vwyl_Z)ϵ/޻j֜G~iݹRӔ;(&0!( y;R"RfO~؀ĂTDr6ْi)DfL|Rn^`tTeBT2-4=OZ殱ᓖ,XZL,:umΛ*h 7&gB[41.$G3S2'М,to=MQhvaHs\3u2m.%Q0xsmX~"ޮXbpߞUex,:tZgV/L"tu7YcX_nEgz5ř8P5q.@(5« Ë¥rYK X#:껉4veFyX]J&7z]LmX$O1I:2dfY ZUisfJ]-ڦQB59ܿ㌷9 0֏?3S U)o IǢS-]8Q*4̘M@tJșlGW$RC+mАGgxVŶc 3ڧzK$mJqfV7鎐_SY4F+'Ir e#JŦZU\u{͌}㇯BW\r '1؝ jv*Cuy]#{`|, @tJRE'lzyW׏X,-~W[]{QЙXlAM 9k/J溔mHn͵7M=5km]h.Ĕ}ظ/{b#MdvHx$s$L P]#|1]&b 򨜟|&vh*٥jrfMP݄=_8K6RMbkF{=U*w~=,^sцU?kO<ʾr8% ~׮#e[-F>g`|PMҁ0p1#O7hcqHs'(/ҁQޮm7f7v>˜΄x{r[8#cl;D?.6W+ռOL3b[9LD: ɔ &)X=uvQ~GҴ{Qg>BAK:xbr}d޺S2̋ e{fyTw|锷/XJ1fz gڡF^cgy + {k%']*LЕHĕ]"󯳴IKۼ+Pb.֓Ѣ|9(p kߕ*[cՄF ZofJQPH>fZ#3!TGı˃ -г( <9ཞ,e!&LP.09gQf?ܾ-˔C2n+Hqw 2 I"@ `g坚a;hm>Ymuy^/+*O0݅ټ"WwzՁ tQGS`Goa0$77ȿDPwAB0d^{2uSJv| nxR*J=\%Tb$Sφ($V%LtKZ'}w`|ShBL|J J@yDlSf3PX9uR2i`̃է.j|/6 9]-$ ARqUf`a2~6zj>]w-$w6>F8ׯ5=Rc/-Kn촡Γettf¬4(K]D>Z%p\5mAƣőOv*'g;T$1ԧH'ȉa5E~ !V9_ dZ'Z=62cQ1V͝möܱZOX9ltd2yş\vM]COtę߲^t[~ʗp뤺6W x1Wx'k_Fk!^ݮ?( hD1Eh'yRF=9 |5&c{ԲM|etMzK"GELm/;k+~6;z8XsYǤua0~GH9δ JKI­ckkB2,6N G js5 RLE6:coύ[3E-:{ŞMe#?^d?^]"CNUyFK8̎[Oa紟b}Rݟ:NFo,h7OʖO̺<$ nFf;˧0vc9/ʓD|n;> .7LF:1RN=8Odo:!ȟݗP&'ǖ%ÛX7&bH/j0$nߩ#Xͣgw=HoN0QDp hi=/>e|Er/Jbɋ }._& G!(:qѥ3%x1G\&UW0+WCe V-aJ3fgܚM-&Fym}9x;VujDZg.]>U2qeyԢ8[P;6aU,9Iq) ar/~GST;ǩsy-53zV{]#ʣ<Ω.;>ƣ <ݧur\éMGǝHWߦ`7֔?A"N;Q4楤ɇ9T6;9N ;N3U e[J50)TVbQPyus,|6ORmaҁenт.v|_O*7h&k3g?\KDՀb բwP߁߻iEmR6\ Y-is "Ej @x#$"! ƒf=wJ53Œ@R'!jD٩|ZgYn#-ͦ,aٰ&Oe_9S7}>&ikm:4Vqƀ_ 5$ /47}jW“! e+.f4,[v?VDZ=JT`B9%[ȸ~H<,(KEZ~ $= +[j`a`ŪO1 t>oO6uc~0Lo Zd*e,'O(wz/R%+,S9`Q7hK]5ͧu%2:܉aeFQ[<9R{QѪ ȂCЗyJ[^ͫDM-?Ny ߝSk>6&FKzdo 5] 6S#SѧRbҘ$@fklߖ{HFy-Uz(^gIc+?LbT$}VB壪6.nDȘ TDo<& endstream endobj 21 0 obj << /Type /FontDescriptor /FontName /RPYHCD+CMBX12 /Flags 4 /FontBBox [-53 -251 1139 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 109 /XHeight 444 /CharSet (/a/c/d/e/f/n/r) /FontFile 20 0 R >> endobj 22 0 obj << /Length1 1604 /Length2 8459 /Length3 0 /Length 9495 /Filter /FlateDecode >> stream xڍT5L-%5 (!H7JJw(HH HZfgswzju-vI+XueHJ 89y8891\!?` *i8`>ĩ %7/% +Ȁ%A/ sغ>l#ɒ%$${9@ A W[Î @ fiv0rtmĘvM  P9PƁAжsîv uyXU/?U`tEddi stA6k;BNӕ Z A\`A ;!A9I A\,vN..v_h, 9:.'c[> Ge0ϟjeKPjV3 `OK[/zm/'o'/?'Ar\n`?;0Vv 3P|'>?< 'w}2 :z('% ع8\\B|<?Pk@ Km0졗Zߘy~/_,ɹA L7gC+>*a8c`)Cj;v.rv`+u;WK?:~ya<| @(a AUχ~#AP"A !o@A./ > f 3_/ |`v] J~CB¿-0l4 qQ+Ie Tfv%x6Z2sMUd˛Lgn}ZB5گ}o5c,N LISkKl:9 "v+: b\x{}=Ec_|=Z'8d>"k+;c#Oٳ{*xV h"59Jmngt I(G|vR|Jc^G[S7u“y먻DG&GHIlNؠ E[/P2}eV;O*H(H܈_S,_v06hb2|7ISVd:F|S/ 2qҊ?r4P3jP6h1|EH@ q1׷4FЩZ/@gKZ;dzOQM`K|w)×C[r.fAn3Ȏ2zF-H"*4]R>_ϥնyOC"9LXrU(T_Bx c)3wKG'v(!]!r)n1 : Q;sCZSW՞kMRŊzOpig}TE~=y^2/MמtkYzR1-By]Q<{\!9}xyHXj_?B8j~ tw? |wA#U(&Ǔ;+Ty`[rmeM"Jd|xkKD'D7{x,}XoRR(yM@HyNBơ싖zClf$mcNpEb,wC > zqe#tV᧍Acdt/OГ@۰Cbd$J:AOV=SbVSƩt |Kr.mG)ZNS[|89Y,K!5#ؒzM38kE/=SHIqȼd9tBiaΙO f»v 6(W6OY0i"Uz*wygbÊ+uI1 1uq_z\xT{(U:WSS& CeEq ?V0S4'*}o^bv+>Bfi[QRfwP>N*)ɩ.AB<:734fE-b 붂.tСыDtX nNgK&F.Jo?e$ꙵk̥V/&JBMv_Z",/J b{:Rr+n; e~vhrbW2 RH!UN8T;gB*?:eV F4kC\z\ Ŏe;h5ejPeUy =mc0c8|oUNz+yx*3ӥODz@ )v@Tg.'[M[%g6 ZN+x;3"tTp#G_R\p[j1vJé u&&7 3Ҍ3Gd=KWREb: "ڟDuzƶHZ <)`6}pB׹&|SόK"eH&IsRA ]c42o[6G--Aa&$L+tdvբ`B5,R}JMt5wmoĄͣR M6ӟsMho.Qꧭ??u|cO&oa2#[.ڿAĴ9B@qY8`w-@HM9߬1Fކئ.)p:0h9H ":>|\# 0o0ZQu}D)b5ڹxFĶX*gt7`vA6T۠ A>7@N' Ľ!찣'@'9g.hu4ٝ %x+_'t޲wV{N18nۋM'/$I5yR䧨UA:p)\v.d>X;z" w@% /26ؘBe4dpĶQDͫʶᚻ]c.9ObU&v"Ss_8/iD#C`ƬgN=ĎS6K%3By]f)qvkV}e5uHhRŴtˋ>yLA+L2;31-IF ^>L.>ޓ@6da9L9\&eƈۢl zyih|PSmjV\ճ8mH%k.yf6MգDO?G mqMW='# xUi=~L% z')L|e1b뮑l]m8eTm謂Hy-nVGpiZM0HynQllά?J 7`Q\HB[~=gV_-[boӓnxtԠ_))]~}V:Y.-x)9G7?B \I:*5z2]j]w.UvKckjA hJP+~'e}Ueo6,gZ<|ȌFٚG-Y»>_MRk H3~q͖:iJ dIi;ޤCh-y~c,to}ᦾ1o`Y*^嵷=5#վQɊc+89g#<_Yl-mtP~<|#T4{sӮ0o=e2nkD@+ ƭh`OA|@ Mal0O|ڪwD\&iyhYLv}U,q(GW0M%gEJasTQUc'Bu aYTJ\*R7#D#N^#}PA[#:3A_fdQM0EpGH?1^&0:moFV:9w*tO@aMALߤɎl;7#s I&ܗYܖ֞A?P qq$t8PcQ7.Slm˙ ]{zz+KX9Eo8YG\wc;]eeX@l5`8:/I9sjCLhi]"|p&xN7*Nt̼u<Q~H'xͺklz{,W,^%:3(TO}R$[Sb~ ̵t)@>-z]oEr%yC>|, =Oy]j"xv-Sғ HQ9j Y=L 1 U~?.Uëp6el~?׳&]18(5DCX55QzW[,$?f])Qcq{]`Di6ݼoWkݚ#2o.^lsEPFmK&ԉ1ݭ2{=%s+Zp8KCT:ԙ0zJ7y߂}r5oPgPp*#p1Dʧ,D}@?L_ך|0S fC+-5ïobŕeIs༻D!Pqm|pv5~rcEQ}wъ<|?@ jdklDz̯֔Ho;T}< = uL6ӽ7{<\^?Ѳ6AL/Ui԰*JgM^IӇ,%~X읂MR77)o.[Һ!^nui<ь[ߗmc#&z8.3i_P*UT'FέT2*rvsPdJF/hDNe{PgS\x ]k/c/^K%V ?|w.*} xӫOŹW6}2#S9WNȨ0L3#Dr'd0-p:'|y::$$}H0Odw;wyƹL|*Vzh SX%-S}R V|¾(I*N:!xl+&+]CՔl[aP~^1eXLiv0,+]l&+A ҹ2-ILl,glJV& )ZܑRW\%즐RVe8)vǐ3/6*ITwk|-~<%`OB7d:;i,r3ĤP0\$rp sQ z[,{j??ɵnG0a~Bj+] "~HYs %3Tqܒp!z.h`oV>J^q^i4,}EE8tkU)rXPu~h؀.b_9ˮ%Æ ~f{'tg&B8nQl9f\9M^ _g;pӭuN$?o)Z')HEFU˦E=DY9mdl/Â]:4>28py AFjmrΟD/5g4D%TyD$v"6ON A 5p] 7g&G#+>$<&?gd>nC4$ųsRZJDLY:j|1Nv6 f[Fn$priqlKS^'an k #j˾džzҜp)ݴ%~g>߁SkÀ"VOwvOɥo Gg;L_~~y͞gҋWb*3cABV|utĝN~b8:OHS"~r1Uk4Xێs{ʄ3i M9fc%&z׷Dug(rM\5C{tNho;Rn&9i'P$AۧfzxRH+ =، r9ge?6ZR %_(HCh>5]9$׍ifY_lH(!brZ`E1uHEqT/ڤMvy^wYw^+ݨFңwXtL~7BTլ׳[.@r&w"e\ѝߙoozV,o?R㿤5_CaBwGr+KΧn]Wr tF*\ }b>!(X5EXpfi[~ 2[DwY~Ɂ%aRUGݮE)acVco>űJ6-oDݪf3[<@' j+#@Ed~Tsne\*c߀bK"`NE'o)o&4黣pßeeF ̓>0閨eҨ '^@!VsR`tuo9T.-F $fWw,9M:wb(^g.I+N{8(=Cdzy6tiuhshDBی9}DƆMq zPt-ɱ+—>ę'n6T>JFw &xe}./ۗtMr(i{А}BHPoSZnG ,/vȔ^dvu&)uT[?vu6`r%?#zjLl=/Za'@$@QYvlڥU=yoBȏ,2"G lmׇ*+1 Ӓa1JBF; &LS2_w[m("hDRh PzP_$0ϓ~ۜ2Nd7$7^LrGsv,4')6x*$YX[/%pSY\Ȉv?^W Eoxn`~&p:[gcpZf^uţzJ ={kIbBqi=Z [UH /w݈C9?A hߞ',FT;4.xLk&4* ؤ}?i endstream endobj 23 0 obj << /Type /FontDescriptor /FontName /MDHUWP+CMBX9 /Flags 4 /FontBBox [-58 -250 1195 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 117 /XHeight 444 /CharSet (/C/S/U/a/c/d/e/h/i/l/m/n/o/r/s/t) /FontFile 22 0 R >> endobj 24 0 obj << /Length1 1986 /Length2 14034 /Length3 0 /Length 15250 /Filter /FlateDecode >> stream xڍP] ݂;ww -<wws~_^QYc="'VT63J:330D唹LL LL, gkXxruΖ#3r~wHXY<̜J-Rׯx<8sڙev={H:8K7Kìj*SGڸ7S^"8^%+?[ RVQYҫA}ߙs?0jK1 I "0kYDV;n{,Sտf9jV5yYs NI`[n<}xy;fr0Xe*6_оIѸUxG,C>76r,=S)(1q &Qp!?eL=8n;@;Rj}רssb%E_ o%Rݸ< -E['Iq"/+󐌡\r@"QZ9w\2c§`+aDV_jɝbn# }IS.*,o׮~Lj_Bw=oGdLI~kgN 26 ި4扼X~W Ԗ+5T6\Y77~J)tT! ?-XF)ƫgѷ.!- )pa⛂SYn4,ffit'y6,say/9 \a(E|TtpNYy|SMKt?ݫr#Ir7B333/9 :wɞ4W6g~k=ں"eBiőT_2pnI[KW1+D(`zѲwƶ|7xxCQ).ư=|orz&lxBӭ42&7nr/5Jy@MO79F+1NNsWd#2lқ"E7>1M>%^8~x"'Lҥ#F3L0"m@K-DXrM Z- _BKfD*zVԤ|UxLz=\HstC/F_*"%׆@"bڙ9mkMP/yu@bWЂ 1{9/31 np;/cB_3@#)8勆c!n$zzH}֌v=(OJK7z,“<0? x^/\CC·c^J6-0!sȴPNT~I΃TaV1J7D gPl~eȍmUJ? Ǟj߾)/J^I1CQIާÊ4?&բ*_ŒLX=Z)aGA5S&kzLa?,>[aZ +5z= 8>00e~Uo`^g; vJ^nO $f:&deUyCl@9L.}(~]!@J(yO) 5QdZ92Gq1&fh i1 ='Z\o94AYцo^scg@6BU턍.(CnIח󍔟G<+M`СsSռ/%+oIl\H3m< I2Ox<6Ct;4w3q_i Tѫ-u0IF&n *MziT͝PGc`cbttx[6*5/q"M"#w8)E'x?R]9JJAl` (FaN2XͽR s2vmw'8? "Z,R6yw{u|fRPGAUǖsz`Xm=:\-lq5oCeҦ{ҌAj0TXǞqY{pju7E·c{@؎uMKh7f g!c_ s Ϻ+lbTwUvWB]R!dbXg2tq2 9"jީ;Efp4Z#I10h%Ay [[ J{2kvI3[M+@Ԑ;5e &ބogɂ̵ؔ^mNvڛȠ vIo/n{\!_"$j|c#~ ܔO` pxBvǡouC^1>v\ ~([*!2J ETƤ5sKT/iq%<:C}r-Qۜ/&Ldk ifC)CƏ'9)zܙ@JSYm:/h@)APn,BhI{j:U b |e")2sPr-O&m^h+%ScR٫ȒQtI%;{J$tyh}]?7;ZOyS"MCMea*4M?MI<3}]*q ˷ Z>b=* 'vѨ' /.`/sQsE3s ɟ 9ш)FTmY+S*\{ GZЮ(6pbn{Q̏;W"7{l2ZQCa@sF<O+Y ~yE֓VՂ(=f$:㪽N~Mx-V;__W.}ܝD#gP>g[dD@Cd;@:Rj3`;K(>I 00WՌVY].ǜ~iLs^ox9Z2+`uUsQtG.."6U_r\X7ܿ T+mx@./|h̒1cp3oU- wqP(Ņ$myK1$sG@:03q:K#ԆJkN&dOkɂp!Ͷ]m?~ \~b'0cv23Ȕ9Y trV(h ) lڕ6E8Xiן0fϙPg&agMUW6FXlwu,t BȴG0ujȪF5] BݦFow]=ɰ5([0 qc^*ھ E8X &[Lsf\| FLGA-*l 2'ldL2NvN1̅KjUO,AЯ){s#@E[J6C[#F>*7Lg@ @G1Yo!jƱE[UU닫= ɟK;DK.Uf>|[@0[XEά2y¤'LJy{7ғrn+X.Ջ,fQ>1Uޭba0ۇ/@GVvМ8 =CP=[OYJU¶0_XGIT ߤߚd>uP*OX桔)`広y@5׼PrClkq/r0fhѣDo>|GKm09j r.:jHW%i>&bJIvBcƹb|)dS8M΀qlJ~$9F H2~N7ձy;̈́|,>SݔD OsBcuސ&o,΄ ^!#Zch)’r7A">op&|"l[ߌJAjZlPF-1hWD P [@|uǓk #Bt0'MI8%9Z_I! i_f(.xoq\NƷlu?6V,%^yҤ!8C D:mQ;:y`]Q=>Edt1'up8$(5vf ďU!kI%:|\AҟCX]UiC1D}ږ'Ogp Ŀy <.nE3kOϟ % 1 gQ˰,0d:eOKתGT gu$ iW db4M8!xW Kz,)H$ӧ2{! D Գ D@| -A 5 ÔN 1+s$$>;KyUƆn*Ѝ푄"ֈV}Ԙ-[)gҁ["b[ ]Z> w@ʧgv~ 4q-vp?V pγ8f4`byCI~_ I:6F& "6E5XĞ\ӈWUA ?AHJtJ/2֫ x.Re߳wbFJc4X8zwFvi񰻪K\0& "HN(]-5wXl_a&9]x L ̾<wna mrl:EB]zJ"d˂N%v!koCnT7I#sk& MpU5BH*![{ç;~sOճy`jY/60 @uS#/l>N:yH8yXxlMy"?G4L[\2wu~Ӱ7J%$WӏE6!9jg2Oڃy7klL.W &KaY[%b]0mDZbui>$5hݩC. ($M[>Ԯ@+}*g{󋈂:EAIw Oex%˵LuJ]i<ѽ,iL>M.'6^jF25_i. 5`fE@YD+Sw֮69BЎ웙Ϲsu'ς_ m~9tm!TDOxº2y_fF5>Bc"ԭ hY²#cj`~pyn)%%WXa~hz|# YRU<$ cQQ$MxgH!ΘgM>Q 1W8r hU@"]HJ0ǝ9+KSo{X6mV?*y1=,6#kXfoBM^ k#Ba&Ms@#3 \gvt^6|\UH:"iGWdjR%r ㄴ?1bW?8=ܛ$L͈:0IiIsNc 5O8vGӬ&xp81Je(2z+@:sZ nߔN޳zZTo~tnVccӖ u*Q$*  MetJmb۝ZLUF~l)!kR Xh;"X]rݎǿN5[%Za|?ƁǷog#0߲ G>'XyJQs$нa~&Dk81MF<ҋWHepېKyCihHHjRl[^9lyrB,\h ~8Ks.bEC $mIcv>g5;gĒD(U^h ̴9v d0k3VJ6 YcM LwEY">vRGJ4d#Ftk1Yi\H%b#c*#arDg 5d\S\E{sKXFOϬ-oDB i[yfH$ի*_gct%_dC"U)e]L8w-YS:mwPcYoq\ᗿl3-Y:7io ]6@J:ʩәtYUrF$qIA{,WsuGep ;&>kQ(]ګC 8 F+26hS{`8`J ⢘rbORoV/O*HOhi2Z,I XAg\A U=&ُcU}wQ/`lc itxMZs ^L0:QNޛG1AZJ+/b1o=u``{vُ*UL9g_+ߥx_7icWkщɵŻS4QXCrq~97Fdih*njDԛkKjXIf,c>Vސu'o!*`Ou~. 7+c. x 82庳PqvJO{:lOG-+~܏bTaDFG!1~}B4uJ|oB7 ޜ|ኋo;L[o1g5Lsobƾ>H@DC"KM%һ[ӏ: gfx(W(ňxFG _zt7A@ ߢ,'1aB~ͬVwyq"v#׬7 \/GNKUdm-,i3Xٓ1IV, }aٞݲu _꣗ DiEGh, %cu2Kc:)5+`)c3Ci_Y=&"hn#pzKMW€br`!!UN V͚%5KU}ZaV8y q8h[qs|ѫҍиDxevȝ`Kn|z\&{qH׼o7Sb]kTxFShM,Eo~|Nw*?/l}7A^QI'li-jR0Q2H2m*`@V{j?W!JmYWMz M Q0֒"x]T*ٝJĮԗQEweHSF)RYqد>8{ |6wUNS1"H~ |ͱA{e %V2ARщfcJJrLS,4q%Kg;Ә9T-AmJnʌ 0|r(5n:L M!殲\m!hH7",kC\&k,nV%La @Hn YNWX /2nĭ BP NDk,㕵*{> endobj 26 0 obj << /Length1 1997 /Length2 11269 /Length3 0 /Length 12493 /Filter /FlateDecode >> stream xڍP-kpkpw 2`Cp  v7X- fYa qf ?L`eqrWeK?>))'/? 7?#Owi!NZ  jNI1'%yo` $O t;xdw(l)T`P=_ ;W -$6^ + 0q%?>ضY^7U3B,:n>~ .n>>l=@^5\1P~>C$ * C$ xڿ/C7{p#oC@K{쩶ckq$_[6`laaBlma /ݿ Lov~X1o?~ߐ /n;/b`ΰ_}⅕ [<߽Isqw, fuW\0 *ab=~CnX^^KwWXy?hy,1f,EBjCn%)<ٶGŦҙ|\oQS>e^I v.o2^Z~9hGhIl7KКnŘ':Vt YGMՎn=b3|} FgW]_H'~eIױA-ϐҢ@(јOp/sǞX0x} ׸yRIFGfHJx?2#D2SZ*67*82(fc?+08ԙ&<[c²o =)g@iahi=C,MOHobG]*EWLINeƘ'+ ='-xf) jfٹp%DO{[^jN{SKkyF>s?{8YCFISYuHW'hWLģ/IȺq\}QsFlnXq[kT|)8rta]ʈʌ~oԶZ/uQZ},\9N-Xx_6}Jf`p#J(h2II~C$cнmpV`gsW(} `P%SHGFS6i?2. 47d).`p &mP nO$2e]䉿"-4g,yR+{#o H*)ux" >}/\ɲ0+}!UxH3U$ۡ]c 7DG/1ig-#҃g>ӽS7ȃNc/d?XWd"zjd.ƺ,)%|q SPwH7b;~^zQb*avbd#Qh}d7_PƖ ~- ܖ\DH8(Էe0 ƫWY8CX҇WӰ42A}#;/t> _"W} {KQ6,[HCD8yst|NzKyycJ2E ƻ?J jgu}mӃF'LOvf#g,տ\6$⌧T5BV3ޤr/7?93JQb|q .^~1#d]ASZdz(aف|K-4_frYN[FWӚlDtnRאNp{5ϼR .eKgHy;.*";N:V!C WmZh_r+SqqVgUXunODa'\U' ul(8Ȕ.b51Ń|FR)jQS(Ȅ]o w^ȶ3;ol38Z6xH2 V%1v7y1xpl@mNlLgRPA}z쫎䢜MviD&}.vwClz0p=cB>fX*#4@>Los;41gS+vh$~;'e.- Ȁ̇3Y@Ar`YnJRPf{aevp[%wxҖ中ͼucy\P9iNAn> lzA\5-$-1 LBBtGn$ʆ? <@KЁ=ץ<+F5LsFr>iDgJ&^Eo]yXu7\3 <]okK%&_CZF_泝 D::YY /-4[MLO&8h86͹e+ю_n r.cͽ T(| H$qC#'5ٞo1DWL}yu\ /hqVp*&nC\~ۮvċ]Ê-Zz/m4ڪAgDF(ѻ`oW^]^iS(8COmџI\ [ܩ W#,Mo}}c|ӴB-E6پDX!|[b e^">*ȔSȶS5fS6 pc_hg7 ϫx}H1-(lT}%Dvށ-h:6;蝅FoFii I 2׾Ւ aMM+1nқuyIҽJ\A* ,kѐ)/{,?.«Hلз|bM8k:'̈́oEՎ`hL](󆓝ȸ2y9]cF/ `b?/z>$1"So,즮Bh9 |2U;[{o&ǁE6&Oۯ ZN^V2+pGB=71Zt Lz#?ǧdWB^rĄ J`#!{6yS]E.YNԹ)ayBor0kqef- ֐@ZnsU8_6س7?A#qfzD.{C胇ٜo<}&;A׉)*uv)LeN?{NwD{E}T\o8#{)=!6" >U(Ƿ æaQ\541ΓWy.0B Z+?Rqx%1C;_W?֏|ՍjEܕsCU~ʀY- Dfwj&Ce΄o\ {*2Dɢ52wk2MY&2U*bHؗ]ǸEkr!6fCDȐ;O-m){[Mo+˝0y?-b@?qKyYje(Xm`utn4URVNwC=Ro/b)/}߁&u'y]L;EіA#ntOunӰ,gD-RF/K*؅<#9s[^͚G%F#j߭lI}EH ͬ䍘S Jqf `=$,Ȕ=`0of֡FN(/N,mF7*f1iW/P{E׃BХ&:z͸fy}?8=S0x]0t6~-WWO9y<„ޢ2<S;thM7jB-iIDn4%y{GH<ۦ҇4qW! (K:V|U1i{|PXM6{aPY|(W6V"ݡ 3rlLoϦw9*c d De4ҡ_ NY7-ch)z38,lV˽K=L"HxANd&z Gk+~$/5[ݥXߟ̤L\Mo7z8q:RNo:e`FCds!ϯ\ڶeZs9 IPde8B7%$'3[0f+'p{v֐K=9YBh#GnN;ܙꢆsY:5 S`_{5MWhqtrᤍ%A\iRSO I*h:4QדñdEhgJ#`"aiC20AO⣉PvRnMSJհݒ9]A%\l'&tU=d{H[:G~C76dڍa̡%ϘɈ4P3}q\#egmlF2x ()~,a_Q"]g~[Cшm3 =Su<];"Z^2VKd홑UW7*Q>#- ,A1jI,.`cSMhD GU.r o2>>EܵV [Yx㮑Єպ+6"H92Lt(D;r{f+.X*y.rX֊BX1YRO1k3ڷihUtx6N'z?H-urX m$1F=ef@ȷ_ Ao2P1O8uX _jup8KslsW0n:[H2[48{Txhe?Mqȑ?82ҳBZN!0-( F}\&xr9Yq29G7zܪ&6wBW[R Tzbi[ &@!\ѱN]QJUBN^ӱ9͘;ffEnd {={O;w`0s.'#̮u/_"y,ZЭ ¯NbsxWN?hD!H,-\Ed;KGŰH":%/{DT~N[zh ~|!MFJ+ecHoXl51y,U΍>,õ00zWTl,a)gM ϳِ}=CgPPJX珕 2xhm$/AENNMR9'^ erS<7֖)A&*dt/];ƁU[~vPb߰v?Uek,uLLT4]Ei}Hk\繺޼F/DX;URI)N)TE9./ʿT4I:Og6sSjqJ$֡ (Dz|&{tbIsQJ[9h|Źm]LI4&@7}˚PO*w"t~ܵhw>$ 2mMx3c D4rӰ<7@y9tRlKCHÈ)UsP~q={&<=tp~@Db(ZRY*-JOe{*b"W@@P͊g; jzl5-k}:Zxr),;g(mqcuQy=U 4B,ΩjGELPq?vxgw kH %]{ɼ_;]5\ζ7DgXJ4%"T'an* $Hg`;IZLc\bL}CAs|ǓB1my+%@7ņ&-1ί'_%ZA}1T43Y"&Tډ=#>n@Cwx!=Hd vw ;Cێ@:R|QB6-Ui_8qw-tHAB#{kt$4T mŖgsϛn/'Y+| \:fbD>!~5rk&r1<$~IJ}Ho DZjm<ƥ.]}/e7V*۰X.Ҏr!~>N#s؈=Ml֚az[M% ztnO. WGhy8c8#3Ocjxxu?u^P2- B-ا] {䭒vlGT['>7$2c 4ᮍP&m7r*-xD'/de96` fNʧ5UhUMs/`1 G[髤g?>\Oљ}'^q'u'h{=ACum7gEA6"]obFe4Dn \Y3 d0N2[ު-3o*=MfM/2=|?8]כ69ѶLj?Q|c?.x轨L8J^H6/泬Z}wkfLE;OX#yp)tuA{gK|WGQn2oI%ZF8/D"ZgxJA12wgE+3['*5H u?'n"|=bk?zA〡Ƴ~팴zٍx lI70Qsa+.ςFZ-P=wvn#MnP|)@}kqn ҽM:v؁mkM s6~HB|UA%{(A]؉},G^y{LZDyz/&oO -'n/2L+ӣxp6f:Z! ?LQP1'} {28gPuow4斲TQlEpN)!M#:ndrQFn]Caϧn5NAxFVLIxgrsO|U;Se,Y^M -` $ އ([Ԩz"h!l?;oȧOUqI4Z*ʎ@#q)fFYkϩLh,me8M[vLM}#_jy2a bi{fjȑ?hr eMIGwm^l6> %[8tpx< R3&A8^u[@֫~Cv՗;#(2!*$bRMQnatCϿY5J '.RtY0B_3 qp0:1vJ·!I'=SHa.8ܯ$P+ȻiGF86DG`A1ҋ*߻G#Kz TwKXvLԛՙ$c~EʾS#Kױ~Wsن1;+j.C,'P34@3|17P>ZmYDw~4˯WC^on<^aC'oOP8x`C6_hr&CTpJR@O} "Wi:0[S[Ƚ=;y~ܳ-} e&[cxKxfOd![KQC`s<+MO4Iv7_,?BDѥp~%ͮw8>D=P~^.q?0qk'7ÕL&=S,qa_|.(Ű 2Ӝt {br!T]Wp( C$gkFͯ#9.[ROS̭|\c[xgtΗ4@4#zhisB͕ ϷAy<[`SK&+:<~HnDf]y[RxCt2aɡ klyU,Y0RkL=s]>i~}|S[pBIߗxGxRBښ7Ƭ-\EnE#-!l-e@20,|422\45f20"T] &H& 4ż>\1͐{ )MtcmSx i Ga pHΈOnݦs1CAv'VXGH7NМ^h yVb%)v?w_C~u4 F[Mw7ǡ:]@Ze}N}ĉr<{?ٓ5?NxՎC zYM^NG{CE (uUaKW)U5|)Ml<;䏃2e)r,i6FH1@蜺=*e]ň}|x4 bPFITlgg<=?"\,ldmuAP431 ?+S%AN s-hQ#)w0/9?&H"%_ f狤âu +`)exB+:j~\U٬] DMdrŜ2|VĝsB6 `s̱٠=toxu9ބB\Ƿ˯; ٧kSm y)8]> 0[aqR_(΢_OacΦYޚ6oUɤ 7ò-|y9>{_plq$ȑO@Z!W?CՓK^u lex>}UE d[a=pg,aOr&~ڇ=_][43A D(#Ou/{YȅKMjYYՊ-5[%-2B6#ȝ~V5iShrf=;:o;YIՃ$i8SkC?/o^k ޜ|/ w.ݝ[H)5m$r]/@ @Vl2"y{lEI ٚ\O&7O 7^ܲ2a _^/~pˉn)'w'у7YH uQ]퍷|="Uh?Q,e5-Wv*؄Fƃ 6^W Tjo&Ղ}9E"1?EeTPg.ճuqH=֖QJ96/kH;*㓆9{t;SnV*pN8uJlsfM2 H^IC/l08T'=ŤF[M-˂3,+@-Yi*b$҆ƘEmphe5~z)Y&V <Gx: endstream endobj 27 0 obj << /Type /FontDescriptor /FontName /UBSXME+CMTT9 /Flags 4 /FontBBox [-6 -233 542 698] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 74 /XHeight 431 /CharSet (/A/E/F/L/N/R/S/T/U/a/b/bracketleft/bracketright/c/comma/d/e/equal/g/h/hyphen/i/j/l/less/m/n/o/p/parenleft/parenright/period/quotedbl/r/s/t/u/v/x) /FontFile 26 0 R >> endobj 28 0 obj << /Length1 725 /Length2 1135 /Length3 0 /Length 1704 /Filter /FlateDecode >> stream xmR{8yTK~h0fД fFFH3/f}y*S)P@+-Pj|v좭UVtbFȌ^u}繟Ep^\D#IT6HDt4 $aB"Ep @08B+T `BpWDLN#!b0sw9L`&@@0 ,`! kb@2!IM2DaNX8J{;< "kGpUdž8>-g#`6 fXtD4  IH8 a+&>ߡ=/: sH^n\\-7nZ8[=?5w˷#~auϸUS偲7qqz:}j.ծЇ;JmV^Y9g-5esی#MՖ]:g]vo!# endstream endobj 29 0 obj << /Type /FontDescriptor /FontName /JTQHZR+SFTT0900 /Flags 4 /FontBBox [-210 -359 1376 844] /Ascent 0 /CapHeight 0 /Descent 0 /ItalicAngle 0 /StemV 50 /XHeight 430 /CharSet (/dollar) /FontFile 28 0 R >> endobj 11 0 obj << /Type /Encoding /Differences [36/dollar] >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OYILJF+CMB10 /FontDescriptor 19 0 R /FirstChar 111 /LastChar 116 /Widths 17 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RPYHCD+CMBX12 /FontDescriptor 21 0 R /FirstChar 97 /LastChar 114 /Widths 16 0 R >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MDHUWP+CMBX9 /FontDescriptor 23 0 R /FirstChar 67 /LastChar 116 /Widths 15 0 R >> endobj 8 0 obj << /Type /Font /Subtype /Type1 /BaseFont /CEDUPW+CMR9 /FontDescriptor 25 0 R /FirstChar 11 /LastChar 121 /Widths 13 0 R >> endobj 7 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UBSXME+CMTT9 /FontDescriptor 27 0 R /FirstChar 34 /LastChar 120 /Widths 14 0 R >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JTQHZR+SFTT0900 /FontDescriptor 29 0 R /FirstChar 36 /LastChar 36 /Widths 12 0 R /Encoding 11 0 R >> endobj 10 0 obj << /Type /Pages /Count 1 /Kids [2 0 R] >> endobj 30 0 obj << /Type /Catalog /Pages 10 0 R >> endobj 31 0 obj << /Producer (MiKTeX pdfTeX-1.40.10) /Creator (TeX) /CreationDate (D:20121222110319-05'00') /ModDate (D:20121222110319-05'00') /Trapped /False /PTEX.Fullbanner (This is MiKTeX-pdfTeX 2.8.3563 (1.40.10)) >> endobj xref 0 32 0000000000 65535 f 0000003202 00000 n 0000003090 00000 n 0000000015 00000 n 0000061415 00000 n 0000061555 00000 n 0000061695 00000 n 0000061972 00000 n 0000061834 00000 n 0000062111 00000 n 0000062269 00000 n 0000061352 00000 n 0000003325 00000 n 0000003349 00000 n 0000004001 00000 n 0000004367 00000 n 0000004683 00000 n 0000004797 00000 n 0000004849 00000 n 0000012318 00000 n 0000012542 00000 n 0000020543 00000 n 0000020774 00000 n 0000030388 00000 n 0000030636 00000 n 0000046006 00000 n 0000046341 00000 n 0000058954 00000 n 0000059311 00000 n 0000061133 00000 n 0000062327 00000 n 0000062378 00000 n trailer << /Size 32 /Root 30 0 R /Info 31 0 R /ID [<9B6B9E3C0874A596429C85A23C6CB5DC> <9B6B9E3C0874A596429C85A23C6CB5DC>] >> startxref 62600 %%EOF proto/inst/doc/proto.Rnw0000744000176200001440000000115412065354710014777 0ustar liggesusers% To build the vignette: % 1. run Sweave("proto-raw") to create proto-raw.tex % 2. build as usual using Rcmd build proto % % To build vignette manually: % 1. Sweave("proto-raw") to create proto-raw.tex % 2. Sweave("proto.Rnw") % 3. pdflatex proto.tex % % To build manually using sweave.bat using batchfiles on Windows: % 1. sweave proto-raw --tex % 2. sweave proto \SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{proto: An R Package for Prototype Programming} %\VignetteDepends{} %\VignetteKeywords{object oriented, prototype programming, S3, R} %\VignettePackage{proto} \input{proto-raw} proto/inst/doc/proto.pdf0000644000176200001440000132701412065416540015010 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4539 /Filter /FlateDecode /N 96 /First 782 >> stream x\[s~?Bojݺ_]* dȄp='i;c;̯?ߒvcg9IJZ-ZZR-gIa3Yby\ L(gLȄvTEn2)Y& ǤhLZIщ3n GdJH|+$K͔rd2\b0SVc מ)p| LKoWJ25:)M5tn VYf 3gF @@2Hx*圀3+@Jkìr@Y :tցYo3, Pɜ"Gg4:9sւHǜg.8C! yIH*8ɼ ߚa@ORB :7ZGd*ЖP@o""ׁ36Iv)@B JZ> fdCFDv`4L0  T`a[ ,"<"*da†(7X D [xZQT@_ɘ/܂C&06tL-!%җL_ HpD$H"Ryx)R߳rN!( C: :` 5x- #z# Wq}5:ɩeE*'؝*OQ%97wY?G5:rVGHXGN&h&J"W f -_\O"%)UQYD!6d_8d{MI;SqxrT E=:+@X Xsչ`8@] &q=,D-T+lROZ&k:y|g9Sh Ci&r.Sh kuV+x@‘Meq}gb:ZR'i~ / o"0Ձ, tLlߍ.PkyA+!xtS;Zk`q 3lx5FWH1p;O$(w3%xPOFI=R}(͈"rĔutr> \p7 V -wC6+!7ˑ>|n{ǒhwXVí>xjkp#R/H]Րȷ9x /^#7{rهUD:('Z9mL]2q3ĔE ĝjyL9kg뭝g_SI$2jD_{yL: $dv{r#ٻwG89|` syVJMBξbź=~%m^.|5,x{HM& mE_Hzur;J ze-ALE~ӊnhnG<|}K FF( v>Fss aI?4:_*&6K_ן ^rDQr zoLav XM1F>$<&5n!Zic+7ZчhEªw2UdCk"LOaӒaʮ`$ֿ VdBd>!9BHh P9 '+QQIZ J1MpڥErZzDgZTX`)TarOh/ [,B!G %,o,qCDE20ȹmNW'VRvG (C,U%M z*I61ѹ(JzgͥIU蘇\O+ RZʐyI#R`pXOJkmKEdJ]}CKL\X= Vkoc ϳ2ua*9L-)e32!=4N=T e8IEYʄ+ 3OGduͬKGH&\VUFzd#lw*ULync{RQx~0Ҥ)OwI^%fL}RD1t Hw99R?C񡯕d> % qҊA.aH=cB{Ŋ)K"ioF{Ԣʦ*˻ikVmϋ"]mDxR4S*PM:N:ʣ苾I[}kjYdCQ?[0]ٔDׁ˘DySkJ[5.4wǜS  54IBi*81Jn-$s~q$tKhۧϋ1NY/uG BS:bAkK׉W)(4Uyy it\ȡ^r"ws&׽a LoR/Dқb4e{1b9G+w -Rֱ(%i%ktDg-% z.mr}w9XRڐ\ē4!%Eb)XǫḾ_7MA$ilHr6B2 ?s#G FqS}oĝYӻ|T'#.{#ڸS>/ò./jԯOQ9JzNG ;蝍Y~v\E{CwQuMz xPį|ɇU*˝A-{r? ~Q/^y\'蕧eU~(?;jը<+~kLh]A$8.'|TUS]^$kIV Y5}d2l5 Zuh}|* U|S--iU2Xjx?`/pN#>ҨO TKzΪ1J;=Ӌ4quOAk4^QԮԡ2v/պYJ|I`q5#d'K"bnҨsE^ݔW)aR^ݭ+o/ gZ˨W6ie&P-mlŠuP[:$DscLVâLW cwmA ђDlI"<B:1Gqc{ǣI}'֒Pc5iQO7=FUoPVO8߳Qv' x9O'n _ /lG#Tuq=^6߁G_E_YI`0gI,$U]@$БʡPp b.A2dk\9:jJo?q9%lZ;Edck T7neũ41R/ ˉeӍl#kɔ-uFQ8?/?n ޯū)P/!u F- bayޯ*5QLVBzmpw}/=8#_Up0z~~|i]:F|*08&߿xw'^Lz#~gлICw˄hM9_ژoGr $u˧R6H4fB:Ҭȯ˙[ #Ksu*bO#{O"͠0/>? lF)Us;rNU559ٯcs;:/zc6}[CD<@v_r!WJ{LEx ԟ3j4>KDwPnO/dy>wlY=Ûӟ娞(jgEx{~b .obj08 h9:k]~ dQh:wqӫ7ӫ;1eQ{m !.f\а$v  tendstream endobj 98 0 obj << /Filter /FlateDecode /Length 4166 >> stream xڥ[I붕޿_E/T<ј8W3kr8YI,l QJykHPpqqq'|@va`/~օeX-Z_]Í]O{A&LÍu mM5- *-#f ɧ7_v~Y:{X~:Dž@(Z]H〿9nh!+i J[ R4h+W kyx"يI/5!NQ.uT-rڷ'T#_|cooRo{>=EF yIUEV3%BIo/)͇~, Ï5 ·ZDm'jHCh`)k`]G}aC,} |Ɖ\HEִΔL"^im^oWMFub9;5rF$"T6y)8Or Nz2KG- v{'dwSvG*?4y:ra$XZIת6dxmٲf9|S% qu&}'c0*~Y ї / Ox#>+-o\[ qXHP, "o$;vH `̕3c Ou/<#?ν#-t\nj\8-aUwzGz+9}/ҧ;#)Q^sâ/Bӎ?[-')iY|6L^I(qŢ{rK-*Jy7QE(߈Kr"Q9 ،# *R:NT|L 4m&/$ZX6nqBYҸLRfaQ8(e*aŨpՊv:=7T?UJc4fBYNAL9ҦtB PpEM<$!rÎi'tzް!pxA}9q44x#ڳp@ DSM(Ԍ8cQPvha@I\:g27x<ȷ͸n7'.{TOɳ#7,sh?8Xn?XK;-; 1rl%DrQ?U:ur7CŒ6t,O]fҖj PvPy캞u Xsδ# IbY+y/M#@+`h5QkYJkڼIgxkŬ'ev?Tg*(&ܓ;yoԉL>Fdl77$ݸa8;Udc$8F¶Qh^H4EUU /y[PcGu,S>,CuXmؤUU`"99eGweɬ5vl|; 8bz>K@t:ߔnء:a }! )Nj ;#nz;0@YQ*y4H-m{ꑕah\4(B*z_Ҙ#S'Z،ꃋJX̢ދ 0,l(|[Ee<f9Ɩ,3Yr8 ْIB3IftHQO9]NR]Ǖ ־`Q.!% {M9뵳AzMQ'j$ ▴ 6PK. hD-鏜Nۊ᭣^I˂_,WahKUEډ+9;~!WCtD>&ƻ!oҖ1hdT'>2LT3VTon6vف/Ɖ(߄ 4AgSfZf_타ob`m _3`_w` iۦBԍ/Qx]JavmY_T5;U{{?&tGxo!/n!lIGy,kk.~`ՓjAgu by$F9qx76Eܙtd8;Tm/(]~>M9tf,;Qn0 26 (hE5 {eh>n’Z!>f_鸅x`ڒS%ϣQK|#?Xh>K8ۄ2UpSpN.Dxs852 s}9EǛ|#0RoyMW<lT#Mw%u.!N W'0xإ ?Ny*UsEpmNcmV:Ô'`XmOm02Ua9!FX[BofsT1"b=con??Ependstream endobj 99 0 obj << /Type /ObjStm /Length 2839 /Filter /FlateDecode /N 96 /First 839 >> stream xZks6/O 3Nvvi$${.@9DYڤ1 q.pB0M@7ͤq7L:zL!c(=SVigG@L]1jYI9, 8EE 4+Уԫک5TGTxv뤆`$r[?7js\4yOh/ P 3tJ0A`Hr*(F!1H6 ْ+[Y)G,YA >94@YH0sr0 {`!XGDm ET(@t8w1ӆ,tlIdK`vD8ҁ@IzPCޣ@H`ά 6"SQkFȴ1 0L3g."Ɯ(`ޓ˹d ¡&=&x,8,{~c eo/c${y;wɓm8)y3pco0؆8+*/绁s$"C@;Ԛ@ ۨ]NM٨F<* Ib F0C!yŴv,9ǵԾD*攄&nLפ}rL!M\I5#Bp!BD|YX, ~(gF?qHE =8!-R}%AOMS|;|~'#rs\뺟V>{컟"N~ǧ/l:&֦vۡ8:`6;򝵒{shl8mCcDOX}Vmhiq;SId*sM6p1 m`m5WҗZF4alO|ckÍC+ՄvJNScMY$ cIFJ۰|r^m~C= o{K'=m9D ;pr2}3AwsXs+CxݱKzP۩uC4tB_CZEp f7Ri[CbyBJ^v}x4gnȎ!\v-^!{/ˋ8?/#b;H)}LOʶm6ƪԾ)Qt{ =NO3:>yіaw,lX0 ߡ!MdΤ 51McRJJ=3V5Fq$U@cN5Aaykd n$KC52(j;M9Q,XѓDp쭘=r$ItM_/=q5rQ$Kr8`po'dj7BщJ}[cf}!Wt#b B6"yFCR8 4fα DzJR !8ܾQ'Ѧ.BI:)ǛHWAhMe]} ՋB߾dM}Rm3;jU>aLG'BE)!E츸F/leYγ&kYLu5͋+$+RMEU(_yu~X+?S=3{mYemcMv;w^/EvevYeWuv}ws].*=#glMvCw^^vԐl"QfyO&Yj$WJT{Ns+X[wE2>˘Ba,_z_r~YeHlz#ƻYNW{hP6㙩i:Bh1ݘ/k/Emo{tZwU?X,neEцK ~+|֔ނ;l(/؏eKMQ(}a5mz$cg%;m˾i Fn,H#}ݻM"V4?E j}{/I,՗Vj֤<)ט:'eu^㢹H}R.uT^7^5bQ-Xd'd}q+Up je*Jڜow(HRfYca#m~\7M9fU{]6nYS,˺YĸuvMqs7@ω !Zy'U&@]כ$f 5X<]HnFI*p4,}Z./I! TV*'I9N4fMtܲf4u{eQ,/WAa2tHDݛx?<+}yՕl˥s"#ּe(Pܘy?-kzCWu]?F ~(oЋ$?Jϋl@iŮY+D2iOgHy*1N?inJC@7,˿X0Ez ,%ցoz~=)CΊfoQ4lp$Bav/ۦy/@G * 1*2QEQlJ5<7U21U+v%LqÚCı4EX5J?l]٦L#O}Mtwd?ԄA 47?βKin4j~H"ĘAEahT|-ϫ +zG{mĊ*sS:endstream endobj 196 0 obj << /Filter /FlateDecode /Length 4557 >> stream xڕے۶_ɓvb ׾NM}J\I$*{ @rx۹_jJWZI]biU2/嫏/k0&[:X@fw7c".)Q??ḽ0db< ZuRf~ln\zȋuo6ιx60ź #wRAR)dj㲤*0M& Oyx<\o~-EDxna^%e s6YZBܒ?>i4_o3v[{{m7/h=Oc"%<)"-}f- '|=AKж+k{;';wŠ Z؈xh; 6!IW쮗Cm^8~6̔>p Xt2pih;) +ҔX @DGS.(C*tҥ鶴 eιҝJi=.+ƞv/YƞZ=ޡoe‹s5l ~9qCW${^gIrxyΞDf;p976F>\j 6R8~{Fƫ2 @= btRlKE,!".i\: CYTTiy?WGчqu9VH1_ !yƑh Vٹtۘ3ΛmUMjiYZJl?6C`cJv` (yU/ W9awX8iMKqas9MKx⿪6ވx_a;#5:=sVKH|&ey҅'NG3ޮW#PO"kpؤ˯-?tVX璜 #;W秮ҏ$nBr֪0)W=tJb2!.[$8']ݖC-DL>>Z,@1]bLuQիux15J[ PQNZIUO$,d|}`@*y!'sATy5 <3_Vt60gUenͪǾ1(tE5$=]6OMr!yV[ %/Q9BGbӐ dK|W5#/Uu6ɲ$Tu,ɀbq ]d%HeVM=BAs@Q y /0Iთ$cdC3vO'Q+F\\^LÏ}ݲ ZP^T!撺8s dv"gR0LUO9Ch_wQҬO*q"j1ΉX`j -j')ځXA9,P@}'+2?ȤI]zMaVI$bcx_3"j9s~le5dY3#dFZyJ\TYPucoA燇B^F::&J,?+-X]{)I(?HA@؀9HOcLWSEᥤVKԡtTƥf^EVU Rn9iNo٤|`{M1ݝ4܅muP#G_//ćcOCe#$Xow=-8unS# p>$^J"]Z.'հoڈ$}Ӌ}@ϯc2^eBfYC1SdٰXX@3yCc ݅|)؍l>knH fN8*MP>:RHw҅0]@-n!2,/>H֋[ڨfFdR5'3nj2bOXmIs >9BƕhQ)iMf۾u]{FG TE~PutPR?ZѰ 7e.Qq@yq\ytRRLuN*. -ZBbzGX)t% y/=Wv_*!u$}wl1U1}lZ2Jy%èb`OiGV21ZwԭM|I]N[z^z@ؓ l#UYGΡ8,q# ;yܔj fU_ӇYR7:̍0۰iд7\g3oc ybl> qapң$HwpXM4ĦeŕS#)iyU2uJLe#2;/%R3WR4J iU/4 aƻ"ƳZ{ ~QVQq`#FJ[;,@;xے-c!ac^NO$.2 N5c.",&pݿ>ߚnl&EOs.,O}b'UK%·DĘ+$_Aə-^7N "F^Q]E 'E5#rIEֻy'V#:"]%4TFsQm/Tͬ䒼4,m("d$F~|y٧zoe7Bgs >ѪMK&E]IT8v6N;F~Q^otz<|PYN^J:J{xau|4 qPE*K"°1[pw/]tGjLPg@U2#^cV9M)UU,/V_FRP?w 1L} vPTM#;9n=j~g)?e%=Wp{]Osnud݅!ʥ6h3Pj%q]~Ŀ`ϲ_IVdRB֎L&&M٦ ŎAtc}endstream endobj 197 0 obj << /Filter /FlateDecode /Length 3891 >> stream x[[o~ϯC@II6@ dE.R Ƀ<#۳ϸq_s#EIwݗ>EGG(._x./Ԧ0R֖r?Oz/5@=k ƭ:B;9]r7o}:sk bBf.y]^\Ry-*w)Ș˫՟x^\T_t{Cի_20[yn2Vݩ}Gc?J3vWRn?a3ez,? Kpk:p~Zl26 7g|=qy#Fnv?^u}XgW4+"=`WփveUڣ 3kj2&| *L=o6oC{KqmU[~VLHg UwL:rAl}`U>< =G{#;Xd#lQWH.hB|;vA![X3iYJ[>^l5{`Ki}dKǯ \Щ)0?~%C݈hv\] eChK,5ƨU-:VuimM+ -r'[$bEzB6E#bzO/!2K"Qc@Z{bmPI7Orogl=`+9POȜ3B7*)˨dc?,vg@a(w `P~F8W9H`^Є ;"gCo1ձ=r~92Kx{zH|K2j9khK3;KUr0f'q{omwrw{km*:% ~KA 8 ܲ<< 'w^:؈02^C?dgtC7 Vﰞ/qw,-G.=c"EP!e~PhN~ɼz&~c f\ˀ⿿?? $eLdaI=ڇqQ)Ddy8U?}6{~&k6c .?޶H%b-THLsWaRTؽJ\LUT]gyKӴQt#Rsu˰Vb]]HxWi:w-֯TMe#UaJʻ$  聯tp7sE|>Wʙ(uDZ!so<Ըl "[ѸpM"ۏß5F&:gk2KRYT^GlՑ^7%lFk尗>VP^2WSDlJ"0>L !ο>a~I_Gnb#&ې&/F'˟[.dXQc'}t^,*z,# ݏCE^\Tp#iZ.~,jGImP=+m;d`ދX=/C}HPޒq/UXIAC!xF[`eE(|Lnf<Rñ#B}(T 74w]S4}ġq+qj[Azɜ>I40:r1Ip${$> ēpd#Gk1ѦBBEǬ+PK6qOIgKa{6ӌëu'b҅`@sbW >K@j (PNs‘J=>(N]"6-Y g+9au֫ ܔjH .{u0 3/oTdú}{8m|>ⷳ^3>`P |@ T(S;U6yᠴmx>Zo5k2J NyKi$ K!?I޿=Ml{.1.?sg| (Y *VF`|fʋ0J:ϒ;I\5ל7N[o;TcC)6TPù1n 1IsíAlmEYӁۇı0|$.`DKVFݔb rFĴdžD)bRR˔\&;Z;P{T^`BՔ#فLlJ>pFYFLm<{byg$jLsׄqeQ^swҵrMujjǧ+l t́ȷTo2:.c;Y,lc`w+"Lxcᵪ+wz<{->gt%h?AȤU&}̽{͖ %XJ{{EW=-\/0Ӹqܸ9[ 7}L 1{ T{ a 8ashV}At_<* @ N7 0i4P?O&['Vj ҥҫoFz w1EW-?G~ȡNU;8]Hl'/È̸vJ^5aiGV9\fbgk7#ٲ1(eHG#*uԣb,˙!^9g0޶%UI\2?cx~{8#zendstream endobj 198 0 obj << /Filter /FlateDecode /Length 3770 >> stream xڭn>_a @#q^HA C2H0I$ʳ(G{Omjyyfګ]_^OEz7}}ѺV]|X_\|~06N5hå#y7Fy_^YkGٛHW7a? kq/VM[}tn7WƘ!9pG ߏS._mn-7iN+Ҷ2Vu-3򰤭]kkb]+y7Lhx~!qDoHmNF6s] _D cgj}oysp3T,5'%~!:|?a*A 'N F'_؞ w0,VFa6+ɴyo啳չS:~!)W=jS C7𜫆{xLo:>dW4tWƻ#?q]}^׀ vGWO@6S:;wp%YP]߼@3XdRZr3ete=kl-B o4RY 4Z9ׇmի|vC|WX@ ZXm^p%9߶FvTUXʷZCށ͕iLOM5؀mȘMDWF} hUh 2 5%=b8r_Imm= 7r}3mmx=i[+S_l2sk`̓U.0wfCQ(ﴓ1qN{qo3ae5!yY;nܱz":}!&~ 3}" p=8.*d/< FJh=qtG0'92#S[07nvR nbҖӓ8G\c'pkn%l6[r@pޏm3ZWZzs%LY0E OK/b NmidRt0D>Lc& {W$VF3?]vמs.֮q2fǓ֞YKwJ\qg#?yRl> t۰F&'""Ga"< {+|-^Cz_ v&o̫Í'h^qs4W :6Yx|9DZ|8sۍP2{++*!K@GXF-?r/ ;g6͑}~α)NN.B*IMx"2K诔70V^].'g_1@w'FۊABC6Q:lepT0i'I,B?"h25\KyEtǶGп/nl$?ϲFM FU:ӯz\A(d-|@z;p~ЎܑۨyD'm;83wƑA3žGD?ڻMdCۮV-9S[-ٽ " .j p_ZNܲeqILxcڔARF$^n-cG̃!w0DGw1;#lF gM{x YGsIEݒ>LHaMY^hs>wqDLA-\S*s] Rq1}u+:8wOZ=`Ȳ2#ʕ,Z(2ֈ@fu,v@aV e7+T8(4%dHVD~RUYv88IX/J\O0PuۂG򰒻HZu(DŽ\3Qaʒ(3?P:u=bLF! Hw\#=P]o }]9ʖc_+܋םw⑂[I qj`\}=۠b18–ߒN95F%~jEی/Wv[Xc30 XL~j dl_8hBȉ5d@ ˹Gn;Ѥ4 e=/=?b-֍M??hC8Sƫ&MY8T軕;]6yEXKᯏ(!pEҭ}ß&'PCi {ǘi'ݩɩųJI:(!VR^ ؈mS'3[\YЂSЃH6Ga5\?t`ߪ:1Ҧ"]U~$܃mc܇PoRx]t8H괞{P%n1mSR766vU?Y;ƅeŤu4W?tA m̳B˂[!K6]@I.(uϝY+˚ЧPe @.d'ðv)BPp}=o>gЍ\  x?`zW * y7Y~+Xl.y)1dl[7t?eJ>Wm!͗O=Q*~*!s͒ɩ:$_SvD(H>^u Pp}oUgwo!50mBI׷S6or:k pC HIA8{O3}6j$pqqF(ClW:ނ?Ɓu$,@ @F Ry`#Opmp\lw.>|9?'+y0$80a% %CL"Sn084V+ҍ^'x+D_R2[|d≦祼]G%DYL12m,<a~endstream endobj 199 0 obj << /Filter /FlateDecode /Length 4451 >> stream xڽ\IoHׯ0 uA͆ƴ>t)K-yDٿ~ ɐ,gW!`0=f{u^w7?y{7Jc MoWVzm^;#َ?r<ikV[F?o7?uT!4{XMwjmZtg<ʨow֭__ 8.v  6X}8& Ԇ~;ٱ n0ĥAKzyGp[2H5|NǼV60T Ouwݦ~#HV$j:5!=iۃyt=[nD,Zs: vc;(vgn,Pg&釪"1Cww>ߗ)=h ,{"Ե[ejֵbʿ-HFӆL^衖"G,S#Ev-6)>gpu EMKe em}p\pmNlj=u‹+][ D9۲YUkNn-Ly,?G߰0nk%ɖK''囅ސOv:2}~7 N1l곴9O)&*@5ޫy=-KsnHGk)5AO\&B{<\{?Ĺv7@/mPc!.FY>L^=3{l5i_y$Mv2`xM wg=妅Iñ󁫢K ';Pla letd@@7Va+ ِI"vѠWc;!NQg) $L8"hs#5 b-X}2`RUc5N8.%]ޒXJ;ѵHVN R{:+^cF[uk̔,)Cd&16` 1c î4,3:/ìJEuW/á6yYEa&RR1cA'v»ze8?ht|TPx"d[sVD+0R@PA,nN='s>+ ~颔}e5AXR /18{ɨxKbzvJ 6=oV=k9x urS;j-A?dH^M-Xc}pVtQ%Mj1-ITA$D@ H1 >aꎬ(a]s,Ot"o;uk ؅".AܙK& K- Lfɉ 8uY G#x:Z٭u|~3) u| >>$&uikcbTPXNI< '_f^{*BƝxT]Hv7vR f1'O"{{RU0G"j;3y9ŧD/d3n&N[hj7.7qO  4FӎbD!Zyj>ppoPĖ_EsQZ$! 3ЈO[jj.M#9fǘ+@٩:Z{qNzU6>f \j.=v@"MI'#ZdksR7CN{etEq? :} hɨL(cuy=NG!+ N˔M‡MD 'Ƥi İr~8..8Qs)[ wRņ7aBÝ>[|WKőLjc ҳW܋?VNtܑC zpA79/,afH)26]Z5qHY[bzw^8"`ê#OJƪӠ6K4 n6TfxCMb[/\6ŰC~Qڕ.Oc9WBߋ77@N7BN5(!"!⇂'ag`AtnW'kZCv<]cnlG6C"dv#1!Tp!tkTIic+q<4&]GwQxf\WMGouÁ<+RA7SO#Y}' '}g H7!Q5T2uANUHUGyG^H)xFJFwEE[i;F3RH}%b3YlׇL‰R/0+RLtWNsCصq h.#,ֶ랝 9;A=:%iLld(j 7 6!D{qw  gJp=~xˠEQ9᳥)5Sz!p;H6J>-PJKrj`|U-^W. 45i82j]sGxh۞dlW3? c`; Eݙ>\N5,lIMrL4ZZ]} qӔyNrnV vlS"+LYR>J/YfU<*ҌġGFS~o)@dVS8|sZ>ɷ_yEuhH 1nȟ1Kwz`&)1m6 }&dX.K<̒*j"BDѕÞ/:O1~6r4ٟU`!ᲀgR2Jeâe VuXNFW#:LrOuzjذ9B7.%#H"?TO3TI!I:V?V}I xYHbX7Wӌ 7>2"-%W+C29Fc =\원GR_lxK.c!=g|MAD/He Mʷ~%`\z֓Ys GS^YOY2ָK6LiJ9]0}&AWkV@͆B5ǍtJð(}59NWv1@s<0q2/͝30$&aG?Pq3~sz_&LUQU *Y "wendstream endobj 200 0 obj << /Filter /FlateDecode /Length 2587 >> stream xڭYݏ۸߿8܃ QR8a{֖݃Jlɰ}%ћXx-p>~3CG*Zx7UY2Z:DwAo'C"yK738N,QzIe2R(6?{xam?"8>uTzI$أ$~`zgA=#8\|pH}ʹQUZ6I9K)8G'P{hu3^'z'~|~|~t_Lq"OD e͕ K_؝pdefjУ ŋ6iT'< <6٢q pkh֪<>_Z##zf];~BtANՃ,huS]HĘ4GxK0ܒg#N 19>Jֈ;b ج=ѻ^vq1N5BHi Ox =21bp,u}̈́ [aBY)j'&M $馇n;YZXb[UEaE읭j1"5#4xVuƯGL ;=9v': cF6dqV\js>Rl$ӄWЇuVϽx> ˺YRV5R)*dܺx㑖cN6c||]T/*bIHFYfޯT6-ܞ"0+c%]gpœ?يF}oV^S)nx̏s",&QNV!4*^TGRjoԉ&}td; N$32x\T}uy[}/P-Xl Rꢈ}-S~ͩ!KApA7"Ήqڶ$۴CGd#^z3o;L{\]YS .;FTZϓSgSHc+>Flj\N< )@V;*\;6=WGR.Eendstream endobj 201 0 obj << /Type /ObjStm /Length 3184 /Filter /FlateDecode /N 96 /First 870 >> stream x[[s~=aqx2%؎+)$ӡȵ-pv_`I)RkX_p*`Jh&m0-tg.,hK8)Ii0BbE05,`[IǤdH=ɨG gRAVfRPSP5Ƣ?T0iUjZAV3fZ lЁz,,tZho Ё:zi3"b$|1he4z 3P8lqOhL Md&bV[YɬDY-+ͬ!a4Zf=kIxg6F$_Lphw9Clq9KT8Ŝ'f. 0/2O)7\`>[kA>X4hX?XhI2Cò(RA,bEhȢI1@Z~I1Y蝰T OZy"P= >XA|RBáX)-iI tO؋nQ37I%c/Yvɲd}Dzr''eE6/Yvβ[)KRa)1rz]wM1ˮRp4*k@{b3;uQN:u^05x"E /oځ 74)&*AN=gθ_t+OL9?>>TyTo +K^Oy]t;,~-{&Dλ䜪" дDK(-9_!{1:UmIc~fٰM+bk|)},nG^x<< wP*${Csmg-BzI<maM`HNH,Mn^g76ඌ)-v 쉼\qe w4Co1޽!dս3xr+fLnEθ%]1_ |yle_Sl;8< 7GI9w58[.o'Q6=AlYj]ڕiyסqhkSy_..][#1j@lhbvO:[I7oߞ{ULߙN̓N1+zo: )\hWiйӷ?? i;ݣptMD_.6-A5Au+pӺO=*vV/*%> h}q5e>fR+i_i~:Fח\YV߰~YՍފ]&_ü:(&|ނr@UeڰZN˱쇢i|'\g]g'-"`Tko=am7)bӞ;*}Zuʳ-55Sc+v(=X 0IZ,@'zwEu.]pS*!Z>y:\S i6O5,FhZAt/SaRDnb4ڭ]f%L+|^13S=E2A ut`,,ӑveAU8x Ϋ5t$w[U`]#PGGG`p:F\)C?L< "Un,\[d#o'i(2HD y.M_^> YoڦsB5³}*Ua;>ۜ-Eͅf~6ζOߗv3ffb./ۣuڻV eaByY0&$ VøN%)˛A-{9c1hC]uhw~%ylHDŀ> s a^T5WS٠ȯ M+9ޯGDw+, MQEx7m>{%LR槥e:N7yNz0|ȟfgqj wv2|:&uZfƝq>Q?ug)9Q&"׏8VZ ][n mPm`9G?w_\꾠=sj=#GvcWKyس߃uZ챝[VZgKq{<tUXdꏪQ@vT F|I\[nйO,Gr ꪾ4Z4b-t{.<]\n{啧RjT+Tq+n)ŇŇw+J}$Dl|t3xi<8fFZTk7RN b-C]'$Á8oac&1T'>7C b!A0$@:DdJm*$7M9Ok">LhY+G`g=Ts V`&S)G_P*YD:BbiުnG eǝ뼸&^Ev]f?e2"dlY9ʳIVeuV'yOJB^Ӳ=tn`:j:v@F6T&Hߟbk LAOs$?;{8®M:LXܨ/l-esZC^$]bǛ%gd!KV\%k~"UDLCW2Y{=YNvht$.474i0oD Jɂ$IB}sCy$JEu )cendstream endobj 298 0 obj << /Filter /FlateDecode /Length 2748 >> stream xڭnF_!,@n^b,n0-ђ2(8קn6Y 类Z͗2(2K"1il]i&]ܯovҘ$/|o+YmG5 ߚ'^nϗTY"$7J0[,mbKc"-6ElGF8565~pF4RUE"G=.SWD n 5<9kg=>oe oʓsǣ{e؍"G$ʪv@q Nt6p>:Q+3|#yX9"_hj23"|&&I:B]m '*v\K5#2#|ͯ-|~7N>;''*jT\i T%:3t3HxLY 鰦#jMmqNpcL8+Kw*xXO\p@ڰǂ]FX܉>tGtL4i>Yov+s:{}5k[fH8 $J8~xP 53y /њh 7yY%)4vz6!v25#6ˏ '%Ex [gE*0QX|ţjC|(oۓ 'UQa-t+Q!d#ɼ;wi ǂ}ѣ^ÚKp9k&j WL͌hELॉ@*WXP?DK8!1Odm@KPүPW4zBENd Jb<ypCr]Ngn }iq%Ric[&}Tg)\osr5G4D rJru#q 3' 4*G_&)8/RH@Uԅ-Oc][||IЍ],>6=|j J2|ClHbD&kI0p]8FDe)o!A|9q3xg<F'Hl2,"ڠ2/1`rgԈWZ\I\ͻ,8;_p_)QJ]d*1r%\<&D-aD⫾GQXnΓ4cuFi-I>Ns>?yN(ɪRDINON؛]=W11/% K8ʲ J%o(.(О,Q6O`Б۳'dg-?Xۿ|c)U*(o Q!GwJ}Πf۸Z<8Zgd@l+|/6mϱ8*wAK ~"[^f ^ՑGHQҒ(PjG5KK~yѡq kj6#q, 8hedC.z#pn>oE] wCЊh3aZ`5K J++_Y&:^C"!Jk7LzAǩgޱ)g+[u=20, !1™Dt=*|T[tF1=n>Qx룞.kG$~Z/rON2ljďoӀ{{t%GC羆4f@?aҍ5䘔J/8 6 oo~aendstream endobj 299 0 obj << /Filter /FlateDecode /Length1 1490 /Length2 7176 /Length3 0 /Length 8168 >> stream xڍvTZ6]R4P ݂t  "RJ7"% 7{_֬5syaaᒱBZBW.7P . @>n E icч:䜡`;Í@ޅx)$e ^tK<;ߐ_i?Knw؝W B' !qU\-n ߧ.:$v-+Hxo7`~j~=ڄuk8o[3.-ύ~=z#j*K0f'%%!Zkܻ.ҋ4 (`ɶLBɈENrI4qr:N9|Kˁŗm72]^6*f*cJ:G޲SESB{f>}yOB9K"_- ׇ ?N<#rJfUlcU4TC΂[qmg9@45m2^4|3u+F>V:U` W&^O"B\̛7%u+x$zB}lp|I6\jH穣-JO1[0"j>$hNΝs;瞜Xv-25f|aӄb oI(4[߬n|:JȈXǠahn^]ﲙlzBT^s74T,8H"`уn N|{D< `<GPiۦhvfd?;DD4sS{?_!4YKx=`Q RO2a?NŎX#'7iX_H\ϧIԖ,5:d9.3sy#; iXܵ&˧a3.tDhVߡ'ඇr᱆z۞Ј7Ū3nzf}tIJ 1UQǒ62Yg:~UtjZmN MK :ORRNN^4xu`[I>nq\8|d"ȧ ދS3Vy} Z@UbdE֢TZm㗏eN?lIӉ͕_zקXIk9$.U\٨]bpZ@KL0#ߠ8ƑR 1}ڽ4P=ܕ;J%XL'g4< ܍d/|chrL4Qn ֢u(.4$Oɾo]ok|R⡊ސ4%55[pVVcwDZqe 4fܑ"Z jP/cAsbĸ8b( wPFo:(V/2GIvcv zkƃ뽸r?٧f0K9G8*_~?d:n\\$%BvgMB7{ftlM%=Mw3  wO^63~!ɟbtOU=US?K6`GgrIV!^&,OF~mqH˧.5~1/b!&,;9/<ړTh7OL5ooCT NM>t/b$%4qE 6ch:6qbM<8%by 𠆢36V,J//RnfaX  8oS!:;Qf ,%r }OmAH۰oT~AWܞ\quI?cOipɟ{ѿ<H]Y/+ _JNj9;f؛MaVL~K7cܞƲ0 |!O|c~}8c4iLP撑u;Q+˖{< Y1z,ptF KK,Ώg\~8p ?VSr5-YOyѳ"zx\4s}Xf=1""k\8 ytTSͥd穜}f6c\:mFPX+w\׆򂱀G(EF >v 0-y=;mãJ<%N0O}/47\L絓|2\ @0 VAwէo&JKi sE6u>7Y@z8dtT#\5V)cɎ OO, $gf:pRP}P9+*Ȣeǿy) x..!|$xfqzގzRsy3IT8ϱ\OʹgYG  \llLo>ފ+$vQIrR^Qo3L)? po`'(4P(MG Gs`xj@N0D t1w'FA{37g:*`kym%W2ӝ=3Q8* {"%VtUz|/~jnH}Kf3bCEN#< julkYi'/ J1u\%')ʷϥ|\EfG.S Sd=>5ݹuϥ|O0G^Mb _Cj#-op6iRCE|/ZT&o0u+n#{df dz 77: 1ɭ'&I>>yW\x2*ap]3+v,JBB9F4Z{4Ltufzct4;o F^jSɹv\ɽ^J"'Mr='FǒL0߀ΟB~e:fzeScEOż3a x?34J~Ht&-h]+Mqg`mxuf8fp8#tSiKg&:ܦTeBŽ NyONy^}:bX鯢ZÏ^`B=Z=vDLRX+IN޲2'*ܛm[;ҔCh)^s|S7Փb_(6:t32ې?C("|G#=I·R+#XS Eٟ{d{H-/5ni: )a}q9Qd/ʍ'oS-3A s=OaѦih,_c - 4&Qԩ)ٻc_Zdtc5g|3|1ZaﮩPnj7Mi7St >F'xD#2=9쇩AHCd/^Ds1KO &$UONzQ}8r*=O#&BßY0ڎ콺A!{ qH/>ڞbOQX:AoKY4shijj7 .GE=k{ FR?Ub5WLlHn?",͹<%<3qj_q9)M_VhcG_äžbhsSe@<rd)߳? #Ԣj١׎徖zdKё2|4{nh.m;tC'|)ZSbA®/'&WA5tV )7u$bkVdYnEEe˽4mwɆَEԅOF)Н9} VIJ*ćr<ذ[iNJP|.G&g~n'1CKB]MmWbW=6}UG>3%p|5+$O|1!e7B])y^q̥:n`qJȞ-ˡ@Z ?h/ts \;`:WΙ$5)\9qT\yEc%_sݵ}|SuӦ4([IcWؐ*9`*b2[|S@ZY$KW爿$~v J3qhJ%_!F-/StպUO98ReֳwƳ4|k YR<^ų`9`iAހ *.hF ڬ9.[|bͥT{?PKyjv`ОՄ>5RW~>? 0it2RVJƸ1 dzPJϸx9"o8iA.M'7_l? '#Z=]{u% e7#md7ė J+=_KC GrRfvĨi`Ӈr*hZ >_!<1g | }c5:QgӃ_ǰrGpH n~R42kՠk$H&,/~cL %B:t7ޮZ죷0J, 9r9_6 z)#&:'B-SMJRTN&4j텭WI1P-n/ m5 -d8~֡h,yKVGid%}MN ]8ߗ`$h/+#YՂߨ ?1ӥ*~l G͂3~;z z)eͨ @ѽxQ[tȬE ulxYStUsĄ)6/m:3FQtk{tWdڦt)(&h.R"q߷nŪ~tq!cZeL2:@4m A ƫm_7p;vfɀO mn%h"3-P~ϨR6DRt83I+1 ;YշUw2kK` G|) Q`]˒L䀟Q%m?'#4osUUF%+G> #mn$6N9Ϙkoz;>%@%{dB %Afo;V0}O`{)/h#W蒅l6 ~bT\Ȥ1KB?"JDz\$ vzƅ~w'֨;0_Hl Ι_$` gf4/lG]B!gh_PQN|smc~\( t9_P2Y3̒"/(Řslj>V^O [aͰ~/4wv u礂WDTfZG(] DݸǑ-{A=bJ56)(-+hg,Re#gG{)M.3Z~u=66r o]H~ŃW>LE-AF10akWB%PѨҺݟTer>M xqYRB}}ccrz rT҄3d&c}'~ݒ:lpHĻIjk~-|up,g ]S$f(1*:y8X>֐K,o:Wb7r͒@D( x)M&[{_zаz$_"Dk3woK*m\|K[)Z8t\hy䩸 1طkFB tnx<Z<]obZTda5RkqS*S^,OLbs%0^gmފj+|Ubu?ŒnE֊(O,3Cc3;ՕaOFU+(wFV neϚ^8קJQW-t&ҹ[?GAwQ81xmM&תD*gdȨ1v$[W*Kp.@x w᫒l 'er"9Iy)n u}tOri3h?}yҦxmj0\Ꮃ=B֧Gendstream endobj 300 0 obj << /Filter /FlateDecode /Length1 2179 /Length2 15168 /Length3 0 /Length 16458 >> stream xڍPKӆ N ׅ,K %{8J9Eput==9*H֙ */`bbe`bbA 'Wpǎ@rtG#n:d\̬ffN&& yb@W <@@.jghaf^?ܜt/ۀ-y9潢1jglrT|῿y ;炝1oempC0,jz.O`n8 ' S -z~iMPn{~1WkCX?'ǧW~ul!vp퇤{]Xž~,K }zn@yQ<6 3= څ;,ZL<-I4k&KZS766-4a ֢WqaLhd)B@ Ё'_(Ah)th6jV'6Zvg+Ar+gdw +S%/}_ oa:&/r,sP}_b1q#vBp>\LNJeܨi MG͉xa O3? TY DOCZlty~xS<6\B\tPs ^2)MǤYB>GV$g ˃rVṔ_nx&KfLDLzOKNH黅ɣTMHΙ3X?'u3M]w0`r,V4;bS+bd&#m 4i[ܙ7ЦvzAx' Z@1{SO|R})bgGB>Cn;jj9~!9=JsE>MDs4+w;RnXA{<ðmD1[K1\RiEp,ˮ̥Ձz|as*OYB6A.֘x^֒v:1]𗚸@i]PP__{Hw8L8rHPK PI?|Oc+Q!yF(!0$2S42@R:)ϙ2O S$uQ*~N+qzǞl Xx\NMBtbU=sers|\ .1ˉ}lAQG3]tXգ8\V'Ч0m¶pq;A."T,) cTWgy]1vJk<ݺ͊qhśៈM ~UIU@/|JjL݃cKh'A`B?X}A/WK ō,EnL;9C{MD3cMRMvغd8׶6a HLf:8/>Е\@j#.T!˄}/w]qh:L8]LYgҜf:vk2a}eOk1<-z|aλf%AQߺA6Tqƀ'1 BǪOt XnV /@gr±deC62'1/~%L}14 % m%TjjZE{M0g_{N6y[J3D7s.?GV q$2Hl6O!?=U??}o (HC7$ؘ'L(ۛtқ2D\s N:(JV脧Ih fZSI+AB4!ë e:&]k^I!pZnY")S\:k.f88lYBVa_{ ŜM7 PlGph%bǿ^>&Z7C$Tv8"(A1Ǘ4#MAf1ƣ̸l#;̃F] k̦6ԕS[O_nIᗊC 簋b߸ً h e4SQai' gl,"An" *.;ՐA,5~,Yz!|j;կ6-yfͩ/C msV-oXrK,(kۛ*z*z[_Vԕ JYG5@+f,:t }"c׳K B -u.[Qgӗ5r ܗ( 4 grצsEy`cvcqUm_zX*lLJǘOɘ`n~C v+znqB!B*!8`0ʄ\%=$^?¤1{VI5pʴXn!}ؙlf(uUN7yE*1'Qe /XΦJ J+Nre2Ek/vGߖI2&>̡dX&DP9)ejӧ*-%-6 ґ2}Ke?P!ߴMƗif:5FWR[@ʥH 1½>-BZ;!~[rm 4T<٫ 5K+CYbVCѺY.&-xgvөV sDO,iI+_wHO9~ýlW6Jު|&@>C w1C= -@EX%UZu7my`~s%Dҹ!dYj4Azϥ7DYl`sz6{`ˊ f`[!duL49pC`FCݛssM‡<۲mztC,5mྭpTGGYhiBP$;ʴ鱲OH7Ҏcq$[ktm[R]ө,>%]ʇ3ƕ^KÌi,T}f~|Dv o܍ZĂ/^LrS1'TP[8vp6 F>}sX2XsjtJ kp֋[7A'_`ߦ pـ^1ŪL;.sԚ>-Uj$1Uפ0[R<~ڜ3Zar'W |uqs/ڐ׶1וa&ׂ")+xr(Gxi"5MIYU%V3f,:_S+<6cR(=zX|čc>tS)RP֕/0EAZEmt&_t8SN斺[p{$uPg>}0/FB=2AL&#\,y+xH+JC\퓍%/[(ܤsكo>V)Фd 9򚦞gQU|^ϡx!=^B׳qHry;GQA >LONҗ8a|Z mGxC}s.5o'γ!G[uOv*^*cqM>%Vv W798=VLnZ;ƳF:BP7#e[_wYҤVPv~3.m־PӈgIZfX2tXM6hYɂZg􎘨l$2?`0x|cdGW x܌ܯۏ1_{?3$t }lgv>DrC`_7$WޔSk. |b7[:WPgT۱~Sz}5ˁV&*8u8]9 99= Z: M^_kHp&&ۣ#Hx4"Ub~UM!p\^O!d}13Y\6ky)X/<,Nu p/~̿Ff/(T?@{O]p@ծ V(qÈ;&YCDM,i˘N%/Ŵ5Swz#_Bx4,6ȺC${s]8-B,kl˹Dmկv_Ɓ39O$MYy$|Šw2J_QG=|28q ټd*!;C>J 4AֺK 7:{`!lt줭}p{xźdjL$Ӓ?᭵۲8~f$3&i5jC$dnU5/]$v$I'U2S MΘqF!S;7YK3 t#7QӼ`5R! .̚r O x%,Y"LM20s?0Dh&4*+-b2 R=ub p(*ݛ؀uBקEcCrǂv)KEBϦ-fRӼ֣NPx$UI}n&_-̘Iʼ ~9(;z6 }zr*ExDAbR؂*5m1D_kIQ\+:_ aק'hqN PeHR{Sǭ񲡫>7K[N3f)pT3S}B,D #a1?fWUFY23׬/cOTa'b$|8q<RU,̮?K.~D8qg o9 :# Rhz|*1->pkb))qus/7m'~12S&qHZ(\@&a! nv)%;d`BV$E=>|Ym}ReYI}'g5a ϿdlcG>%[4~+VɬD0fX[_^PMgUEIeJLZT'd`Iukւ+Tu A˵ WIHVv)z T9l`)~ S )~J~BvXM(դ"O\y1w?K))ʏ뺑QX9!շYVUL&Wc.a|]Ģ?F6qBzetŕǐ J  uȲۿV|}DCÿ~j4\LXԍ-/G" Blv`*;;WH^AxB^BA@a-X1R2 z%2f(@R.pYn8b/ lTs@$s] ܄x:x6fX[06xpMҊ4Ş{/d \ vd𘧚Oy^R.D5\l0ٱ@"?Cg8P*wqŘDCW)X&qgJ?jd !lL 7ʢҍgW1%#V4+tO :r0gEegz~h PŸxQȳ w YT7._yg],<2(194ͱr%bCjx7fAk Qkҩ-jzx%kX$d(rϭ-?L uǖr60+`5]r*HMs $oͲ9u45DgVѐϠr5*$"SDd]GsF(l>x %(q??N۲('VnxyAG!HMP}ymf*X`V3(i]qQ GtGO3%!1FX}fh#Љ9+eSIPBIƁW+秏\_PQZӺ`WHW yw)wLMܴ{=>iqUf L?Aī+ܤ$©4CIYeOp%>mo(j(H? %Z7m$0l%aN~?dU ⾒+fv |Y'<}nL'|(,c V\pe)i, u)}~RK%~ J'Cf`#|)e$F %v/~Q*J.+HTk @ېf $P5֎|oU}c~Pp:x|8MXr9Ÿ60eAtc3[ߌwa_\, :U d0iO{?NXVJX Ihp 5T׸o)*… xjf #~m2F[q+$0M!r kzVFGo?/1i|Rdd]Ɏ jzlL?y+LcW԰Im];)uhזpjv>pakf]rb>n6IaWkbpU-P(tw'_~>u"e RÓ}BKO,Q!K!lpatcF_]Qδ sc3Yu0tpxj{Yk#E|OA>X{sXgY %VhAAc&Y2 +"wtVɭ4`%2ia,0[e|q ݽXK.^VceQm_s"C KqG[;h.7%C2UVVo᎖">y;}+3")N$.Jh5PH9JAe[dp\uxNWfͬm$nN=vNg<Xg&kJHl$^wΫ7E9cLۀ|.ja(+%o((ST$ ƏG.i#tΥDr5V!> E ԭ n>'eo)GQyU>L 8{L{S`&Fy $h\r '$+iޱc,Η4M`$%BuV{=e*J78*|9|t-Sb#}`pםY,u#_qKE`iA @ A<!~Kg^M}cO@FBY€bZ\i?X#v퇙WGbF6uSdjxZ{0MF69<wAQyq$[Aj7Q%8-E2 9P>"@m d5ڃq>pWXN?­H8wkK勤lVlWR3m:fR//'~)Z{fT?G%cf^|λ"x"֚U8ܡ8\ſT}wV 1OĢ=;Sw(NZjUoU§I<6SYBKO\>>ڶ1 'Kmf}Ӟh߾yiyD2=xMuq)W[=cOSa{:iE@燯-<^I|$&|*z+M 猌a, 9dDh\T`dQ~1.1DTHXTq^3~vuOf捤>[C쒇.S2$FqFhBxKWHu $NpKJ5{,ϸ**IKӕLBrTuM< Q:VCJTpɢEՇ-8~ 5y) OjƃBa4w!!~vlܰ35/3~^:a)6f߸ hj-2Rx0BDwS!mu<%S5ӓB+74ŷ!W) (i!] lOyhRzL2ߪE˹8uuL+Ѻ:x 4/J sMTdɣ6Ӣqd."FB[jHa8NK|UW; nSO5ib+Ķw!⿘I^@C⤥ky_Bm[鏤eg6ajtT%II]:|ۅ:}P1۾u DVކuɕ8krO;,`J{e2 ڶ"ET}xOsQQ7Ķ qEEuv+=]oIn} ݧ.Htdy05z;/5s@6ޫ9*FMWֶ5 >x;^;^ѼJV"eul!Hqcg XjYݨ>VɌ;E)E9Yt*uZCQ1D$ Rp-mqlLblp_ U$sf4鲶:GlEV7]MQa|KA/ WS*W0ґhcI3PS!7v_OުQrNE<}ak^ OV ev@qρ0XĂ΋5L ɂ6 ~ 8\e_46 S$[߈enqdD=TCbs7@2eWɄiYe}M 32Kg*cBA+:Epbi-2-%uuT|>}<3\ɵCehP5rhb1MC:f 7nW~ AFzyY'¾io7 $zfӼeF|ƕ2U0u=H)_w̨V#w;i/Nj"F`A?zr 9p SN̯j4aVܧ\U).rXQVzɝ:.uRd_#sX δ_%ln6> 8FPc2Lav]#ʩ9=cz0\wPǖ߂V[,?ohO#vk& WWtlW*|^ A@ 4 e{M2Rv @] .$=Pt80D1]P1٧ш~^RzTZ913 wl$죽`^C˂6aGtBwG˜Oj}_!c4+H*@'i6iqGL-'d|:@B%J#{KJܫrC%tv-AuG_D?yQ_(j~.d}~+{.|;XOBzZ)%MtGV {sC-NZ䞐gdy|X0eN6Qoj$ʐ]lө]I!?XK6/K%n:MJ|t`pF!C]!]|I}z(_FKM!/ס0<8O\M~?>͇;;A6Wp R, TW7$KN.U&a'?Ct="* .Fd_1XFcA85Pg_~j>NPa; 3|Ļ(a_Lߴ0ҾH<" LlO‘V6+; p?L _.:+jX,W Q#_TBH te3d y|qrAMNѯ'Xy+e@aNo]2ذpDhM+#_Yh3I$/k]g\[!'H9Rm /cY_0Rt0:c83կ#r!U}i6cxx9w6^ٝVYn-Ӡ I],HECl ֌W͊CF GhG:*iPK~?m}@4kՀ+墈d̈́q44nT#ێA=Gjܿ:O?@߄b@tUCQnPGQI#=sY$Z~1{{vkM$@A5W+HUBo&CcLz ].BZxBc?l2NZцΪO`:akw(. ZSθdbgތ 1:t|jL!8p[Rb⌨vdd8]={eqDVwEW\&wK_1>ڀbm -UQc(Yy(ݚRleztQ|_50Ut6گ0TaiRTe429fܽ:d- oeuy9ͥb I/I4qE1e \tTd n^2C[m;hW2y-PDBCBΰqceq۽j m;?BڣewzAb/c[{A7n10:H%i endstream endobj 301 0 obj << /Filter /FlateDecode /Length1 2655 /Length2 23287 /Length3 0 /Length 24778 >> stream xڌP Ӎt%%4Kw -Hw HwwwIYose㺟gUՙL fv6~;v6' 55o1/ g ,4vN;?;/??I7ks @D-lmiW=wdځ3̬ A'h9򳲺ع88[ 3ܭAVw@a_ Q4]%Ww8`jot*@+ˀ Y޿Ylbf`hbimo TY@ &oC[)MbjpnbmEaS7pڃ\~'i 4ݓ_`no`amon sWGVM{k'WM"?2K  :fVkx:Q;vtpXZ[]L܀+o"$vv` G,Z lgs 2wc~Y%uof.6377x_|7X"[8xxߴ7@q???.x;oAҮMm=m+|Jj@&]= 3q?[:X~ ?:}?P\G7s0}x<ggO$Ps?;.p{ g X ^*Xx2UA\V?\EעkQע pv?]gٵ pv?]]A`??g_ ֙9؂i o`59ͭ@#x?q}C/',@p ohW09C?9 l;: l`S xVV@,򳁛 /_ z]?o齅&>?Wn_Ƙu4 ~ Q~5|~^@`)e.7]ǧXZ5Z`tpz%.d'b&E?U!L\`A=_>˩Vfkwq$~}xphߍMy{Jp ސO;]Td"nfM)O4cѴ5F:ܙ$i z| % ~n rGCMi}QPH].k{nrd|hb۶Ҡ mOC>jM.*"iU]n&}v<0 #N [xXPPJXȈ:e)@$TbP}-Z.dЩ I&)y8ē=!f_N%`ۺz6)|nIF? ƯBz(P }H-ZؔwXR!5/boѪY`zj%G!Ae4޼pq<5HZG33DW?HYSHs'ź_ST: ~FF0k$eg+AH{l=;kX:_ Y<@5]dX7h8V?ꭇ  ɕhNb U'Y:YPeĔ'>싟)YAK. ~ѭ\K׳oO8}flk$JJٺlñnJFXS1^㿣zn+Լ~k"CUa?ë́ Kj$L2CSR{^чxmCĴ-/kji,,Y0m-*]]5e"DLV8^/jT k{$OǗE`gćDW܋(cF[oB[l'욪ۄ>rvRhX%~Sǀ+eÈjZZm#SoP1TXT֭޾-% >j-d .J! }k߮cKgkY#st2zil&ef`ބKoIxIyL{ĊY^1eyenʒJ2|Tr/4bD&N.Bh/t*^pZ#Z/L"fvI -Ddh\Ve8ss'1@@B|+b^4rRrF^GwLM+RU#8F)2tb(Xo]Y\O(Ι&Zr<R]0f0٥=N?,_=<1&2) )?;]@$v3[, ǾIWRTf.Jy[brtWȜ)D@:8(嫈"HB󗊮ȄJ5^2h">zXT )P<=8j҅{6'0SLprݪEAoU;/j+'L]'5Yd'^ r,Bޥ>êu_ ;V3}ߡP)9 iZdYV>dE$Pl{^pcnd\QZrol5㻴c}^]'o[<1Jan/QiHM㫗)4(zaH=5Q4uukJF~ =oMSը}&J .IWFZ}2b..2](R^zeoMWpO L 4s!{16ז[vRc9ۉ$cw]]A3 t>wH6EF 3C`k8>#eóG^7u tQM5b0NQtlBBiK{2ؓh1YLaT+U3,/68ë빰nH|3vH)Ka Hw;҈~Pid)nlIA(+kRk&Aw\98>OuK2X⿸v6d (SFN̸9x[ş]XO#,~z1 WmIqm '{GgȃM`YEo]O6x`u]N=;qێ#oF9sJ0kKgX1hD%6 侫IG4e۳j:Tpk{h 6D] y{rt_ˁ]*O[ 1eXfET"FB,pbI({~,U7! 'v9$,ؐy__x-N@#_c#zQ-XMh ΒTLi ,t,8'"m@{N{3S\dav:c'q*{)pJc\>EigH-T=i pPmQ[RC߽4j!R||qO> )0S2M@oV(UtL.$0,gH~ jz3QѪLy'Oӄ+S:3.@MlS: *6AGt/8()k䱜%8>[];sբmMJ5◯8zmitF-93QuYWضS=[L b-2+J1rO϶-)F,3|sؔ 1Ok)GCE[2){J.d:ښϾO7M=mFe"Ud_GbȌ"jG/7r.S"Q--JXr ? }q!XŤ.;M,ね6de,3Dc1ܸ͒1-Iq mγz NSjc<83QGȁVG*3OӷP*ߺz.S9_\%"Y9u3r#^1| <~T ʡߵ旽iW Y2Hk8 W0o\xgPjwB{m_Plj¯9ZiÖOe %ޚ]  ~(ٍ6ߎvD}Kux 77EzV[eAjWn#tG4k4z9:קJpGIa_G8]2K>+*^HC3{2 7pG0rNgb%bAk֮]+ݗ'Ύ'1uH$ocIB@(GeqL-&e-Vc|Ů{| != &:T *PDN0rt)m6܊erf>VT^Xc]qьߟ+Gz z3;.mDƮwP>0d8u_/fyN<b FWFOKew=6!%BڵT4 uoP1?bǷmL>m>%&͞j[R䟘M{oO'hu%])y+.e"-nC} >1$>(Q6e\jk_ r@^(Dl󚸲<1َsΙHy\i*z`hy0*2>wq'ECmFɕmaB81}_U}\TKI/Łwg_.;Et~%XfL@o=?2b-HnwwS0/\%F އ=YB%\ۗGa, hnE\NQݡqU'D_ktO$b_\KFqqB`=kSS]7 UT/ZiWd)H%={_i^T؆^Px[-\u.oo~%)?EwX9bOc@l`*5?!IW6bMfr4^#DhBhd4NwI TYiWTL5Sʦ2+2a2S%&|<<\ g.ïpmg? l3rǥЙiJhK# j~]N'?>S~EWV#XAj= ˢYZ*ve{u fP{wg&p=&)q _շȺ`^]7mH 󠓗 nX: a!2hg,%$5;^xG۰O9DTuNT ˻u1)@"^օ%ke >/ j' Z\1c^AMo{!_u+!UO65 GBw**ʊSN!#K Ĕ(nmpwo+9 )(˩f44JW7: xPZ DIYAZY6+mt!ߚ(OEE,ksw~Z?3{aھ„| ؏ʞEv?'_XqD,_z %d[#.v\DL!;`a&بjθ &n>fU$HvhUq1"SUuYDY9D%}[|+Iw+W7)aE'W#՚/<=DŽM7C~kL 򞱜p.:+~x%u'i١eUDLxҵk@=4SXA|easd {Ba['4.Yexev1@7 ?89/3۝ Pt?xrHG0H?ϡ` d$#)k Sdg͠',< VR՜{KgЎ֐:nxz7'/!aTub QÏXy _pǦzx5FEL62v6 6w?)*{~va^#+Y.J!fnY9klz_Td sq&Ai1]S¾ fNj[!K([)}NG?ݡmUfB>l&,T eR|Htb!x>A;.1sf CpA m ڑMF$=?$?10ծ+yb"IшV1fB34R~E3MbmmHh^0 w`/ɬ*|mt.+嫦 ^nx :C2t"@A%juB(CPag,D)ɩT{O/?i}WϒRqt m+1w1Bj&oȾȀ FpURc{_yLG?/3v.O*08ELz9[:` 8K}pxޙW/5Ӿ٭rHb-5[AߝE-|_Y j u?TMq-9L#F ɭk3Y/O.W'>QTݫyVYɨ>-<<5ȥėϼRNLwUBc˷na9v-6˜F+vzOVN7JH[ZE"{ bD;6jUF#1Z\ xo|:ACQu!6p9i)bO!> }C03Ts$bE$@43ΗO\ɒZ׃p 5N\SnG…ͪ(m,Xr[K/ApX$/,@,+"d.DӼNbh/RG7g;Yg+QE]\/ jn pWEoJQ ĜY4U}q6a.pi$PY>V/}دPu r]x |3 )m9V1]R}(9`{j.f#ZPw2Gbe !b1Q2qwkh\?yO n-ة08%I:\e.l)(!p!b 71`ڡ[c:9mP s${6Cu*7Y|RI,FUWqxlKc^ B/BG++^4r:u flc)βE˧OhFRH\PYB;LsS󛤞4X@qtwÉ 7Fj8~ײG==sl 3赱[˷셍8KQLp3}j{F/:\9*dHɁp65B FAc+3nԗmGZ͡YI}]aq180Aʲh3?Gu2d:q.w$JˉڙMwuXmWA&B.{mDla9>v! ΚzޭCh&)P`0ܞM-F W80-n99(X*P|l??[$.7Q55ÒMXpp Dy}wga m%EU8ҍg̹l\B{_Q\Mx!ZkOqK\!áPdl PЄי/ʍ5 +y[S2RR]ۮL$ć!F{0lۚO͋_I+6GlZ$3^!N?@|كI65-9jc 7u$/v\SR>9v#Yk"7ͪЏz0hhUp3}J<!njA06d-|͟wq/)vg^|[!rƵlLMA^c (lQ]aؒ/OqYhX(j\!kz-Uc{hYLPQ7>qzހ}HġI-XxSK~Ӳ,u0jR`>a=6)'f|I2vfȱaKE5$C{/ˊuix$gu4ނm~ ʻ*̔wg<1Cv'cd-3 7:[9D"J&] lbi~LzB1~@ڕ$w%wk)syzO궡^?z\>M'U^Cs hR3$6ET)^ !/ͅ^BhN̐aN=i<ҊC&qN:e>s}}1#4UWŰ/tv`+>ƋJF P}#NU/IoZ߁ky6ϔT2ݧҦ&(2g=j`CjFv&z`cD 陟֗J*4!%V9բ)?[:dEf\5CĮӻyc&^ׅŹ$.#xڳbLq,N{ :eZõ+7]ci{؝C *q t6n͹dN40p45!ɛkl\%21.<IJԎ| yGN_ ;' ZQTon7{9}皏꾻}03qu>fbI5 Np>!w`㌵ ^s[T406΄&^po9mhѓ1YzU"/]*2t9zTULixozG+-w΍ro2N". 8WC(L>3;"ڂm/I#yGV[A^S~VIߩgl!N)a.ZGnC"_#EG0ZCyBX*Py,ˉ?bQP4.Z3!M9n@dzB1=n#b-d~{&TH8~^kb -[΍^UVQ PVߨf yyކo3xk}z%1Dg(Wn}pf(J_s3tj@h5YRȽXe> _,%rMF_?5TK.Cw mve)~KF)5lʋZWd .+eyvk-'ͯ lJr::񗍱E `1wRRײ*xfa[akF&N DUit,M|a`ٲi΢\$ۡkW,5a54LwUOU)yjl(q+}ҋ?NpԝՋ4as͋p%@7DPed}T&\GȱvPŸ\PBE ܹܵє *FKɏ' ߞ%[آIcylJ~Ԁ,s?[hLn2$\@dI)1Z_^nR3Nܔft4J5Dmec^N;.*XބWZUMOGo:QB}M?}9*SCmV aK{NBn_߫Р7KbS:k>zh^Ei~2,3c?r@aBHz Vt_8J>HLtIn1Qz! ;LҧU7ֲ'p@(hOj4#7mV~3砠vS^E,js0Ra J$rAATYdD^tk6SPY9NCܠ"=>r`}xe^rW)'dphg.ԅSS/$I3wzGYJz6E Lύ"إmJOa5j_᏿/ZQ'1hMܵuv<3 hɑ[JZ| 3enB" 'p Pxbeg~JTHʢ,wFh~u}M,2`A t2E3L7ǔAId;FUXt&=n*S Gk>nÑ%5a֣: e*g5kTy v쉙N|KiI!J>C9BO7-hBy3T [um˱oOYR$BO;p@q&#Rv6X({1a Ml=Ӫ>qY #Do껅\\nD>XGBVtMf!# UAHs*blGE-Ak-9{y-$tc<wS8ZBF.&$բbWh*գWQ0jnmv]|@J[l+WAۑ/ 5੬l&{Ĵ*hQ8qfx&c DÍXr[5ԃ9`L,=dx9Y3s]FԻ$VD7ONK(H9Kv:I5PG×] 2uw| ԀFB QSeڠ؂O9DE{:ˣxƣ5iO|#ꀭޯ̼=t[K–C3S`1^uqm\`X&uDv5>ƾ45H{E /ǒTuHv݅M5"9o _D0V"2 !N펺o䑒wzhzA#x ;]7Ck2|G7E\^b8O}t?fӿT+5j_%}Fk&"8/7[K iDęn&ף!$0f`>c(i|t(Nӣ} Ef,VVi۹QC[1$uCb <4܇ixcm=A1U>;GMlO!+ZVVܺ'8sXw@҃)q4W_?Ic"iR%/7S'L>obEVVRa,yT-zіIXTHkr|71U>1Axo9d||brЂb1歑b޲W\ѣIJܣ_jWЉVsPۧ][70^r'z=Rb$+[sV,(;Y Zƾ[K;3σfLPOi*w'Q+@~E<-Mz$SHε)ʱpU5\8:zN+`VJX)^&BUn+q5q ~%d(P.sG^-7IcD)`nJ:P,efrg$ck=r ƀmz;y8/E}o5gL8ljj>YBE[BxE7^[F}XjKbZ!V>C!KM!3ƽǔ5kE-^ eQR[cBGD{iC.ZI1^Z cq_#%6[C_sk0 b6Zs͗ҹ]IZOpQ 8*ֵԲiu%?gKGa /4 +CrM۫nkk׍GpAHBvB_pH7۟ZŠ!/+!@Taj}fl9:g РAd{xwIFc2~Qڃky2?a-nmgd;z[fI1{'מsԪs_Iȉ }wPoÜ=T0+K1^M`1}BG1x K#Dc<^>W7b\.GeYT!#k5vA󗜁$!sYt6Mf(Ml[*l@qVGJ{v.3mփXcφ_qZe2zR*%Q"1%ڣV9 Y6aN&m}5?dAj-R[~ZbB7׵j\3Tqi4OtnHS⩕ 8se7ڢR(9BV&j!ķ9KB@]}>WOo . ;7ETMqEmG^MKwV׶k%ݛ.^kUfΌ8z6Mu.P}CJ4)"t!Sdț1 <]]ϨExX~%F oL![I7}FڵHAaf[:Y#ʪg?1_꩸iG[0g hU~\qĉ搻Shb=^Wɞcl*\;$Wd[|Xp[2.*Z/ڸ= b]NT?!1gHq GU8v%Z=$#t{K}iZ{8EXV e]" ɸj J|7jX#fY-Ƅ? C"꓁11E<72vZ}(K$vz "wD6S$KG稾GA㍴Eaɑ6,d9?]\w!:?! 6>Q+eqz*.C QqnlwGWmFǴ`> JLYM":=VC zs(;Cy,i$}R7 ' Aْ>^q{epݕ| QNJN2.Bd?T(񂽈;)!nxK PtbACD.cGaa8=!P%! ކᛲ44RF369~R\k->f[tU!m[ 0 \/N$dB&tE?TrGHi!lafΌ/U(EMbf]jp`6@qK/֑N/T b`̱IA+H^- 8 cL釺뿤<))M{S%.))A%Oκhqc^ċqW,  >lUӃRnj2`30a=ˍP0/ż1bH'qLEX p.4^?^M0fDލ]{ty乖jwt8Upz7 $ӉC[Cj+Tf< }@`$*a7qZ)|?ٗ{)1,6ʕx_b>UKƠ!n#s?M芐 NAٽv% {oJ%! ˁ[EfkD9Ӧ} E80vhl4+p9K.#bXL4tNgBӱg> T55pXVcf' R'nc,~ZC*KYqi+8`8Y`fVk#l/Qd[ m|D"dҧX9CdCZm=WGyE"GͭIpӳqj2 L3,VSَXY|l:3wBc}wq%U1y}zY0c|ZV > `RpWeFJ!#I횋H|%9e]-w{ 73u͌¶߉N"•Na(cf%Ӿ$;Z[U5iJUI%:24>{xz7w UE4>Hwk`7DSM#Q~@U!ڰ{afƼ|{!Lm#f G_cP25R4M7e\!Hxd$Eq} 5s^>n},eaCpM 4ܠHP% E ޿fE#Q5[]zT"PW> P@z,AuyjFW䥚6ғSYḜloT-lڛHwrJ GN)3A":8_$}Km0“ZB "`%iOYmK?R8 $|9>'v]S7!@\Ʋ. }s;H ۫FZƷ>|Vgǥ/k~K!C^7,4ب)DTQ57xhXhfkWm8+7]SO^ J>7gʍL'`wLDmy9ЈK˩gC=f`?؉z5e8{q~5/.Έ4D};-b*-^m)Q܃'f]"n.86hM,lɏxºuJt(ԮN]k>gC* 2GTG2;)pMc|5~}bI#/%AOe8/no_2FK 5\ VJpⳭt0TqJB]qCn kC[b6 WQ .Dx޺G& E׫PG/7= y;m+Uh B} +\딼~v4mN$Ikb=% }\ { ^Q;FtO 4ۨuѼ#%Y'9nKfpend6bU؝huR^g !ct2.5A2?[G mf%~?tt]* >A 5o ߮ڊc 8t;|YӲtD{cg=Mg.O ĒϨHRY0U#X㮾}C^Ds n9V'^CCϝɢ1}!9=Ē/w:W."<|͢ Ȥ7=cX##ESDwTMbCVW 3l_$(>`t] 9`5r.t=2B;Wo`i0w0UPu%3ډxWxvqM :"PՅ8S%iY1דR{>Aُ>S" 5 E~2o,%!Y~sD(ʰW\0L ׈yn5YsSD0&O5f&jo`mjLoWy$0l# Xug! k>,s ZC!]ߣ%SlvJ+r\*ٓb.u<ߕ50)3*A5n`T6f FN4Kլ\wR->dg?`mRQWfww0g;,eFg.G^DF]6npJZ* Q3;j뎩ܮPMIJ F⯶rM 7&fgI]a~3 ʗ\RjvQ6qK\C`0a~Bh` gzAΩ8[Eelk H7ƹʱ;* `{!⢬&%1LWV* J)HiȖPj/Ku;)lfQ*)P0jO,\7h䭚UXZY5S`˷/Mmhܹz ~,%j:M8[U9T)͌UxOۊ։.bi4+{12J.6-aO{R3Dah>^d{hw@>cݎÝ+%4q[ˊt'PX)cBlؔrpf6Vʙ͗Z$2*!ݘ TW=!Wf ;>A$TBZҩkZ*:Ye`uO. b> F* 7 aqBPd8۝mlL/·E= !:I SQ;Ȳ3~qb44Pg3p(7K$CVoa +K݁J>ݔ直h{%Qƕ6uSY?`f,I ]u}k̐`^(nS32'9.`R)|I:}]qOz?Q^ ίlw~rE2TAqDY lNLvY%H05w}AWp7*1{|mU+x8H%G7%1ϻn*bm@354XV ݑV*$AV ۡyeA܋Y /cKY^fE [~pƞB$Zk57mUh%`8 ! Z׾Vt01茜Q:m*.]O~7}j5dɗqXN[p)Ѹ"Aڽ N -ؒ&"m>[Γ ! @{yJP $Xf7S^w ZX9u̖Fe'Y-;4F3a36IG@H%5j)96{™fC7%z$^ƌkpF7+k`VieC:P69*;ע.i?B7Ӷ|GDGX%:5yawpVyChgK4m:0OGV/|\bݩŔډI"4 WO`SP3YO6؋ !))NUdޟU\UXeV1zR"gpi6"["CRwhx {y>6;s(rh1Zut$Femi[vnJo(e>:Y{%֪ߟJ#' B@wv-+0t{.n-#y7,X2VW%@43fqe7u舺2Cx'py^檖dՔ^v;p_ǎa);m_'l[Q6Af4үmktgJ՘yGa 69\EG;e Do(l?OHPaߠU]F+9Zb.JeǕE =wJշ߾Y=8m. vֵj?q d m(=3|b+9TN5# -#i~[jKsաV4CjT=\Bt9NHk]ooZ" hT0ο܂/Iƶ*7N#tz"*T_g_! eMb֭rbAu7"W/^h!"-G!5&o۴ ;1/o[A8MdjSJL>=8ִtot)xISc(hbO_F"uǸ~<0ºbohVɉ;FQOo܎Յt}&?ERw8< XAHNs=^ d>&I:utwĿL&zj/g=fべO!l%N>ɧ|}&<퉎~>e GkUn3aŶX|:қimrUr'0dٔUޝLKk'2(NyS_ZߍUW m؛pt){/#W3#s͕cqpMeu l&w冧pǽI+fBz JnPdigpAş5[<CY#e,4S A`Z8Dr 'kz|gtUuD<-t!eg(t.EW]X`4ڛz_P㧚 ;xn/)x}^ IT͟8CDѸ&@ؿ`4+k$k~XZmCEӢJVL_Nҫ)Wv '@H0i!}B}_`]p56IhtbDQ,ƌSPj܅9v;= -$є0Qi\쐲.Xu+e w h#!.N"o}N6-Ć3Vt? xk j\7ZՐ4zˀA@/RB_4H|~86J(X|Lͺ^@_'8rnm1 <);4nU8A=$jΦ8+}.:n)EtRKZ\zZNG 1G ([uNыS3l kH#7=%*S 'M*cj.˿,քD"E4# 나:mp?eu*0:+K7tX<ӿLFJOdC(_+uK%/Np?3# L0d}ttnb۬O8AMP3r83n a/ӄ'5BM),lqLan]K p}Ct0#ǟ Ȑ/xB\)F]93p7[ڬsIOs2Dq[["Q6Vdm")3ͤUxL]x˰<_+Kd Vʷ*.:hyVkFf3שBBQkA=˪z9Bzf(|mzS&0~kvk;L|fQ5 1eT_ H3ׄbCXKd0ġkHBヾFjz:TL{P{Ks#D5M`ƨ-yi2='LX= nVfmR},wyi6T bP ُV te B=x4G0B%G$aYL~^A`PB$hdtjFǬ5vTy1 GTWyV= x# L;C>Ϗ\Mwk*B8/9M'~nl@o m,[xϲendstream endobj 302 0 obj << /Filter /FlateDecode /Length1 1395 /Length2 6096 /Length3 0 /Length 7041 >> stream xڍWT컧SQa] JL`1`t4 !tJJ7H! !q_9O?=9+9 p_H$ P5@" 0hEB O(&*֩h7]8 K IH@aH/G8B :tZpēwE@*\!)) %7jtHg=` BJ%DK <'yn> 0xB/=70" # jy`]`wpÁNgDP`= œPW@_]GB0_`WO8: ԕ `4?y#HOO/Ҡ/Y wsDS" [=V sp]hVs b HBR @P΂C~~h@#C /H7["8@;FOv<X~}>Y{M,Lyۤ GA~a1@HHJ >;[k蟌0G8@ s]GV 1=KM!e?h{r2+ b/$z#t轀9%օ8@Ӫ7C %B=ա(i:+1{B=3~!?l]wA?%I6AЫj0{ï/zhI /^N708@ 8D)*D?VetAB^z~_M@P{iLģ>k#r5s^9a+Jq(3_o4Gpil4hvgh[.~+P-`$A!ՙ T}wPz6eiUhG`]=+.ɏIʼfd^bU) aNv 'CZt3WCSo? np!6?Js1 bSkůKq+aI=XZAi~hOJTLdYGp{e}aKMT)/&z(X81{ѕO5ygwq|%1t< ҈=ոI{׈6F2QYT^k-*$WpO CP&ɸ>J򨞄l`sAYq 7q&%bs+UBA4nB^ atSV; ߨ,mQ7RV97Ou1[Uk9Kvɕtޏ5 %'&4,E߫r/N'+:o= L_ёc6nU%{c5q>^6]_Y65%ZyP,l#l~,m[-.ôioD d>pGgܚzڠ{AAStKl>Ny7OFIqxAx^4޷VM˳ڭ^l?gU>]\Ti=&F4J`;.Ya)_IP2L?`%N֯!)c奅y@/bV~^ώ,v[tFYYY>UNVLkV} 󦳓OάI>`n{~:9΃%]zm8儊][?̀9r iPS,Z/EtEHO*bT@{grW"{|wҰXyU{:JZ^K}[[Hڣ >}$"*\"׭1ƞN3̔^B5BIڣV9;̗%QI&[4K?rNpmcMJ<0DEKJ,ԍ=SZi ϺwgS0%KGC?祵_:/h%I\ eN'p:*sL M/{BEdO=Oosޛj{ā7f櫕(+=V*uo ͡2 ņ6\g%cݴL.C/mu>Ч`֟7V[gKe;X21a^;2_=pRL^ebQ* |m|J6KCWw笌\`f\%]En>xЖS>>Sus'xKVZVR'ԚM]5xK~Dt. VŊH#"NZϺ9*56,C6v= O:պ~zTۏyϴ_DIZj?5g #5+1 Z,Υ;ϓ9B A( !ƨU0I;Ytn6mu aeL #͆~&z٪߽{dʥ݃po&C5ܽ oxfbه"(L(n ]mh"#GE&5&ksMsForIqھ$-t2˾^V%'g]ؤVRr9F7o'x;lK}pgįdW~jɨD`;YZRpLGIS?w8$o{GZ[e41 CG2¤g}o+՛}2됻  nc򌬃l=5$ԉ&bZ,]X4' S=>U?a6~x:>_eM٘ YofxM\:tRUOVͭcȱ|Ch{9}pVx$}ӃzVD0ΉoRZ87.;fO=kJvjcRysJT@0h8,7:NFQ>e^wO<߅GFȴgU4Q?8)jΕm e'dTFv  h0S0ƫzMBմ=wcՌj ^7a,x}6TU4زsbon=== 6>(p%ew  euc\2έ®Boͨf_[v9Щ~${r^c΍npWCG{]zS<]asv^Ԗ&,SXVGIub2$sejV۰]X3 bWqci!Rܚ,_l?pmu5P%%e>fgxr ΥVTau2,Ѵlé<3QQCpE 0puZP+9?i>q"tmRk]U}# aǥ#c{ٛX/J&ǫ|(=KuN%jr=VqTn!D:$2hʕG@Sk2 (߶8ΜR-8|!K)F]l ksgsGUD",BW4/Lg I oh.rt\^ !ar& 0 \8FM4_y+B߾pkӘ(=1KXrL['D5F%i *usQfr@X+\y^$6"ׅ=G&Vol8fŃGXz6~[44aOvfxOy8 ^[Ow? s>K~UG9F98{dj*DR]Uޅ_ IP 0V4ke xgV8_5ei,$g`T8Lrc%٪=]Ivo)d D'p*m$dΣ$6۵b{^&W*8kmH+J*a>e - ΄G ? {p_vyI˿u%eQ΅X|3G}U^"1HQ|i&74}{H9>Ru.C+,MEp;߀$F JD*7I͟ m͹[ tc,;ҥH4]>2H^JO0aNRWwWhyRj쨨I;iֲrB%jPQ i^AF| g7C զ%wQZ~8U^S&6c8Sx2&2,`>G9K2"k G2&x Ԏ1ܟ8ef4(y1mYZwY"YAgof\-楶aU._C @֣x- fQR775͆RTn HV@#8:嘨@fwI #PdX3E.JT\;>ˁ 83rE0Jgj?˝UzFQ[ gm[_. MU ] }&Omղ6fz]zoÓ&e]l쨵~(rzі dˏeRfJ=[xZ#Í{ FS2{ΕE-9!oIW ȑ\[lo/'eNj$&:͛\3&H_(endstream endobj 303 0 obj << /Filter /FlateDecode /Length1 1458 /Length2 6516 /Length3 0 /Length 7495 >> stream xڍvT6%1VZF)0`1r4J"4R{sx빯900RtD;(D, T5`qA DJJRw8P B(.GNA݁h W ^ C"^r|@?h{Hob lvA@Q޸# ;h8qu5@0? H(*r:!@}5a?FE9r{qP_(s]8hx {#1JdU20ހ_ 0ܭ~ Ca(G_}<@(\S/sc`0XR {0Я&F/W0tQ# b|m0 @ɎN{!w8A_lprDq\o1))X!I8%qgF jQJi ޿ƅ8Á, ,w=j>Deǩ]4n.Pj3ĺpG򿭚(n2QDh\һ#Pp73e x:ǍҿTEЎfND\pāXn8u  \G/꧘{~` DNP_^ ¸x Ǖ U' # 8LMawJOhePvg:GO (vVJO&y ܒ]wطeմVIw֘*9=hi43$n,ݠ~qGő>jR4(C)Gb=Կcqq~DD"72q)b-MaT3Al=x40ykf%_Y5nMKυG\B)Cfn[ sof$\v_,M˺(NW~ nJB;L6у-Tl+0Jn'T/~Xa9& < %^ףu p큊aEʪMVnY< o?l}+M^T9"+|O (%c? }Xv'{D~>AJt˘j%|ƩZtJ8KW]WRk3۸NL$k[*'E69n[ʮ$p%7iy]JOΟΨ:div/1+mRD7.OɾߥT/z6Q= 9;| s&a LbfY%nY1z-ǾL;RA.vT[ޫ:H"qܯ1sgטRlm&'O~/ +csi0ևIp`XɌk0SV Ys:F"^x¼h=xQχo`+ê6-&z<^v~:'o3[RviCn>Ip˚}՟ĵ)WD?uo%EX^-"eeժ׀Ωz.R=0G15ͯe5uO [sgVU☪oIzo`fɘTr'|l.eQ[{9 ̈&M&h~?yMCkf_+S*\%͠vоBXmGk3whxK2hA0ٔuY9WƭƳOZbu=F [WZQ rwR媵ƊFF3vԇ6HTq5~N;ַw}BvVJ +IVԣ 2nF[e"21 CA[GC٪r.: b<S<c0gSQZ޻f9iŘj[k,C 0:M4\<d?`2&`п2@ģSlªA@PEك`xN!#e$df@H,MH&[a*SAV$%C_P_U1Xڜ.j}$^9Wr3w VwXdžw8Gu>:ޘX]i$WPrŝF•it ؅uXĬ@(ln># *."@ou90(0xxƍ%cXODX>LBv+"ZY҂o1'_ PDP˷sX-DO8B6D&s dx~K&0<u5= Y?"w];Ù6ꩮxQ*@:kT`M2yHثCңl٠<75άsz='[ 6o$E^F=Kү^o*Lϙ5}/-~IQMmnMuڷ\8byk.5=F/%P:Et6Z2ufd<Ȧ?.bLkX%'5GI?.N9K5U?*P.}'^5'X$Ny̒l>%̱=kptQaiĕ;*COa/&B}^ 1Bzm%u.yk>ieR_!#_1AG|/ lJO:Y钙#ڤB;$ 8Bcrz01^>@/S@$f!@&Mqdm2jyj+,D&, "}—GqL͇FN4o( TKir$$,VyS<>;gP1rO 6>zfL&Ha.IO?%];6Ihހ8`e"Av }0VCq5ggY]ȣ;j7'J:oa~]VxmE*H@i'hB}(vHQ'cpK.P;ߒ!e`I~a&ŷn7y=z¥dωHnM(;XH/bQ7ݺ+ ts#R&oxB9؇]Z2 gX*+D b]/vO {ww- @چfd|KKٓZՈ2nOD}ێDbӷXC8o"~L65ܜ3ȂUx7mN֫A\fgr3 oZ腓!z.$_r,&<;+ʠRlo(n1 RwUG4Uz=(o<B`3%$ǟL-nӜN , |LKaN!Pw79`+u m':SԹkb @"TEo phW^Yqϡ-RQبZwJM Ipε%ɯ'(MQ?[tfOt?S'>;Bdq5^J(oq{{ΣCe媁2+Xh_\=$D6Hq5TxnKEaJCO*Qt/שi ]LG\Ɋ4S5u" ' \_.ז#`햯뗐J%ytbd#akf*V@C*90((n[B nzH$8\af9 GgNRIBԦ_3 )3+j]#)uN5q-orleboFY|iMO AigK넷WW7 =P "let0cczV;J˦}'925wDÒsRyZ-.(.u[wMRRM 'NKB*cXoҷF-q10I݋\@>Lܒ7vf]eU@/jhZ?7#%#W?-5OIT|ώN]3K&9g?xiDdo}tZ00L6}R1o OTl_@t YƣRnQskP)Os%^z'_ "Q%GD e3 mZƀH-&Ѩ>o~cCKF%DJ]N@҄fADˀd<y\V {ɞ~ۮ\>~2bԂW/:%cTb)9k"iK{/L2{{53 uQ3?!XE9ҚK1+5-_iwW|U !>^w_q&.JEӹW3ME<$~f\ {Àckd]$9::Пew옾r ᢒYJLϋsտ81z el[N"2%TxoݞW£G\("5`"B<$pJRɃD=fd(},?my8khVO^T JK9_N֩e0hƽ~E3lHꄲ8Vf2Go9gFn,G%(dN6\5MO~ucR٭wЪKz)t%u`>#m&)VDm$^(K+{U-)eEߓoR'ZKđ.*b{ާ&jėgS#W4}kNzio|+7)V{aE!l7ÐvM9o>.0e%jF8*Q` 4Wm+7jw;\aBk}@[QtS&+&e-{L&+ -ߔjC5W'Л\1ya_ ΢`)Nq[L?D΁cH{U<w-;5x2+6xbVH(`1W#]o'?f-sw:uQ4}G?CN1g }j"v# mROM4@^~fB;sܙz3dx)<>%mD-Seq C)lȁo9*$drJ}֏D}|bw7/-6 ]N!HPT>{g=P?{fԏm jGgendstream endobj 304 0 obj << /Filter /FlateDecode /Length1 1832 /Length2 11679 /Length3 0 /Length 12820 >> stream xڍP ܂3C 0ww N܂8꽚*fջw $* B6@qkGFf^27Bh BhC/b4p|8X,,lN^.^ff+33 my c#@@!bcf25s|#ڈE;@ h2283XTl@@G AіŅʁ3 =hP:흁ƀX.jrXxXN@{{n,@h/c}5F_@;XXM& K @A\Ց``mͻoq!%{}dB¼_/~ {1V kkM@&`dˤf sJ]`ffa@W#3V-~akc 0y/2!x88N@/?XX #G!dOw1_ W}m-1L*Zt_+ `abp7OK @OD)kϿJx7.3+_>NkRh @nֿOFټ5k 'r4x !kS^"A 4V9kӃ kgtfd8wo}7_; 07pCxo;x/101Z8#O.6_7+IS/0L ;;z`ӚÙ9L? 'N*mߟ?,mQ}^?bygj|g|p3u3ugw3u3uʻ;_g:_̿}t~@W_ym@} $ŞF Dz}#2l"MUƷ ;đ^Ե1[_-JmO_cg~LcN '`P|TlȶsFVŸwp(]ZSگ\:W4OcC @G~2{7}X:$C{5ag*C7.96!- a% 쎉-Cj=y{+=J)^j\&HLV8"8̋5 W+Cz8Л%W-kәN^d /Gtzn)g0~-Ѳ/0WOkޥĩX|ԮL#O oWC*RTmyK>0]F X͕BE5;}4fSz"h(I8;n4t|;V`>KftSGqS^I`Dj%vo"N+/Zob@x-qK^/*]MXh$B9{b ΥLӡIO QcXٸWb@0/Rߌv;Lv} ǯX&bWTȯH%}XufXC .TP -78F5α<5cXJ/! LsgU?dZ>UtF|ڀ,?H%CR0f2y@do2^=JC%X8rh:]kb9-~;y|kuXI $Uyb]3 ]n# |ӻP; d%q%A-PgJm$ 73eCuNyG6M#䔳/,6ToΟxXGr*aۀ`yVvA9SarNhQʱ 5"bJ{(ůh!3njk5=\؋ёְ欱Kwdj`}VQF#N0ʥˁa VԶINڷ(kRVbly>#=uƶ!TqwJͭ$Sش=E)Xs_)%'gMRK]{.Id.fܴY]Ǽ⡽3 3hsAxe.N/l4N̕੹>v;.=5G^~}Nde/>0u( >&WH"t7mc\8uQl-CCYmuN--zI,Ov|#~%"ǃQ9~-SdrDq6MIC+$.X!f|pHIG jSW0%HIGO-"8gy3)w@c^8)01[SlD~랕CB;fj;U/0B30rrQ6e]e[;CgF}Y9@f)k"Jb̒"]Ӣ C/Z̚H+cWA{kgWU| 6杸zXt#Ua Hdtp8waQǎlRxQ_P`pocR$`~ Z./!mNgÛ:xtnէUZsv#֔]`}6=Pp6JAƀD>۪̃e=rHlꅳ^\?:iiO_|/LAJ) Q猛o ˌ&wȑe ͚$v r(Tg/9+,C׭# R*yPoz\{lb0Pzg2w #isq[|4 [pf?֖Bl>Z}"pVC€P=­>AgK~gxRSj)KtJpJgbySſˢQ? )9oB35Pp}lzh#9#\\ k!)8jC{;-;\'/eC`8\5JBXA Z~JԞXӽ_1 6WYq&Uc")?) 4P)K4!?#.DZ5WE9r"n7=N;|L:F * R1OH&4$lx!H_dw\UՊFȓnTB%M_T dJ;V"ԣN'?QCv q[-[ճO3\fۮJ*$-#/o爣8W/?u3\eԗ4X(B>Zm=a6bQKB'S n!IgWO61Q[aՁNPU6X>[^O܏{^ sQ: n(V&+'iXحEDl a/45vo!qH%sk1[3?=NJTIݘ;nczZHi1VJV6B;|*i{Od,7S,ɼ3tKSX{>l?KJnFKǁݥ9gt&*㧘c4w p~&Pqps&YuGX,Zçb1 DX:=ԪcfA9׾,n5t['~s a8tpd swӫ]ܞ.[]GJBM֐E%-RI_`Őcm|3ߚ|ytwTa>ue7o&ɷl"}F}U-ĎXq3'Ĺb. <Mtevܘ|j&Y|R=ssnӵ'r~.x!y" C?Tc6Nbʜ>A=iRRtUbI0q+!![ B̧IQb{&ҽ?hzA#ԙ* ۴p}[v3LШMqlKуi]Ћ1ՙ*>^\tqOȏ~Spܻ?-J.Ipzч2ꏲ%"Y4.D5Oi[}pz~x\(ʭ٣㕉?z-n %oZ'1ٺOq6Wp:;]q} 3dϥCt&k܎EG$js-FV}qLuiĻa@c.ojVCz̩7 zetb  $vSa%<9GpPFv-Pl% / FfGQU4݀#5'C3փxv;"ճ[bVN=zjk>y-LąAIIңâov AJ)k-i]Ra3w:hȄW=ZHg8O(\Nf0%ru*gC}D .ZRJ0rHJKh}}4|Ar8}YwY**pbyȲ6/!3Yਲ਼*i<ᙩpDtCֈ7agŐY}Ogih0mIE’YhEFҊ73c0 !5:; H?oiݡׯa {ZYɤ#M=;:Q?U$şzWSQٔE3z *!RVOu/+$1ױ8{^jC4 }dL*}G-׹J/*gN24)ph!Zr3s+ f"bccf<'6RE#[9yO./|([H!Dխ3^?ڏ=hob7*p!vsn KFZ1 ^C̭F;tGD,&}sF"Vќ63GT^D[c&$6|̂ ]nYe c)瘽֠k6yRVtjRɞ<;ot3߸VzƨΑMF,+T |8I\6sZ]_q81tI޴+a*XK) WaLa4`³+>EoBgS0Qp ߬*HUFm±+Hk55pqgצ6 K)8Q/z9Y"zWO]j_tx߀c{?Sw,>^zQeonO9tyΚDX!*O`9ߓR)e*+uرH|JIBWC OXDQ[O[W,w?aOˈʛfWp2QrֱlTϽNlhJT*TdQQG]Mm GtC=iF5K'Qo< "o37ƛV=qD _1lK^yCXѼl쏂F/ َBZ3ɔ ~ז6fna!:K O+>}=yfh*A pq+D >Z,=t+E@^w5|A0,UȤ?9Aq]8+5K**Ok.%.Hr{CEޛyq> dbSZ\!V}EObݐn,)x "MK'D[jǺ4=43K Md+Ig\IBK`L^0D[p+C`}\)U.HSm o9N@ɓEs~<7]ܲgxQTє (Cu 3A{?Lǻ%wi Nn7)ύ/z<[J 7/T/܏ʠrDLܫ/<f[N9_LLzh,!W]߹&naz80Z?wRS9=:|V!-:=KU[Vߡv )8@HV,|[A^q?g*  #N|)n,;"CUt7+8Dc^oPzW4> f7J;v4HެSqbE$e %xQݲ $Z}+>諆{5˧XW^l,l90zB]guy#JM=rCD|RU-L)÷>@WbԌĩ8m9I9Q1T3{}/ȱ:{כ@֜w_^I'cS4mU5R֑D9) "Ell]6nBlӡ, j\r*xW"G~]=@8.ZvlBR&[NJ?C"BAbZNmWEw{:'"S!|sCˈ ?_Q:~NXdnst ozk%$Qn;_{jnW1% QՏw)l(VSԅofWPմˣc?>3b6?84,g?mo{eEYߣ6f>m You $E[3URBC"ʉap&q}e%Re!Y$,gR5=-H$2>ioPӅ }f &6fvlLf岌gBP']u#1=D֠6X H펀OI!߈?Pxv_+_ቖ]λFs ;zfwȌDF& \ho[ 8nc /"KQCe>Nډ j_6Ahrk ~KovEKQISBoLP{))F}xPƣd]P줏Yp..X_?9:g*H|=ePhR:>./9^*u0p `YRYo7}xcÒh|JҲ^*UH =H \BpKެ8ɇ}]Ux$vs9:@zf' hyp9 &JEU8AQL)7sSlb3>n \ub201G LYAbhZ"%A(Tψa _uȔHRiqkaF˹ |.}d(bcbZD«@OIRal;ҺLbd1> gEqpud4r6>jN3n]tDhPrsBu-gɼG|"ip*y #2ٲ^`a+ZR:c+dnLa~e I{/ҰK(H&vZ;WyI^${&AsI7V 'S1e~SafBV/1Oޏ8;jGF~9}9!fp8mQ ] 4i'(\Z}"қف Q(XV>k0=*zʚ*g.@Б u9)s 6 jMjqخj(ϐ_n&hΛvܵe`ƴ& E27j&R=dI4ZL|!5!6XAZe޺ekrxogKQ5.%r/?։Ǭd]ž=mL0}q/.\!B{D.)X8.%7^+.{p_J>wG4gU_kWӫw7ܼomQ[LkC% ^W:9F,m9V`M?t>s6Π0yPe4vgcFl`؇%Թm BL$݂gLrQW}ШF!X+ŻNю;㡡mEy;\צ2b&nbͻQbs$ fTZo5>AJdv%q_dYB~dKi!,l=艙OY̦JI)!$&]lAVPwk^aR/GL"d " 6h+ĺI qʬgl٬?W)wˆoT|^%x|M: R/x #.-C[>ޫ sM@^bLIq2(e!#E0RǛ!w9E}/w{nb5 ǒ^Dh~G:q#ƾ晏>"鬮 Lpqa̘E - 3?KH[EǾ/m*yVvEt\Lу|-b @82lu]9 1I$mCS:)Sf2HFYDDRC)븤V:NMg7Rǣdq9wkY?﩯}]@IZW]@+y#*P97IVm'^I(3?wեQTqƤi*d<o*d/z2GRܓ[2PM/#sZb|P#VW;7Uz A$ xB6dF`Y/R(ؼF=T p yn2UEwEUQv S @[Ru"AoIȑqJze;ap4y!vi_e1W#ҥnB Nf֎Ei/R݇Q-H"4TxAhc  ZMG 1^ g+"yB |zL>ȫRrD%UDɔMq=Pv*$2O{F&UZK>ɥ['rq}$mpe)y7/h'Q<9>MhH sy50$)(42>Ҟʽ110&/Kc$y| 1=aun_W}ˁSO^~7~h6 oڻh?1 endstream endobj 305 0 obj << /Filter /FlateDecode /Length1 1787 /Length2 11466 /Length3 0 /Length 12587 >> stream xڍP. wBRݝV,@ k"ŭPS\sL=˟wN>j u&1s)PlabcfH(+XY9YYّ5@[?rdj-3l"4*r.67??++C?@dPdȁ`'%?Z3:1;hڽd43@@@YXܘM윙Nt7 t:P(ƌL а9P[@L- hbotd*+epll @:L=@ -, q0L04ulML_ , - 0ya7?g3'ędG?¼hqF>I=Xn=d7=(+͋_%bee@w3+?hx8T!~vX,/?^&@2d-AF-/wY_Ə ?O/fhI(i3M?Jqq; `cc }! 7E?/hXLE| .}!ݿ0g1 XAvob| g| f|7RݿeX/e/e8_:_:_|)_7O_5sqrz\—k@w,L Ⱥ.Fčig" Q{[uO5@B r^n:{s>њwz$?BC8#g]N=c{sKjnWSt?vf \u[iu@ť 3@ˁ .^%^+65!Bt$}z;fb#4h#A*P8mXx0E-EGpOkM]J [v{B4[y"6^~~ONbgt#weD+m2207`WC(sa3"0Axq-SO63!wqGy?rRLd^Uч?%h$u |~!x?BXM2fuQУ 7 v?Mq ;=15)ICha;^n]!{-q)FB%m_wȷs 4cyBsqfMe8T@`".%?ǢŚJLP*a,h=t :Wnp&YSp)C/S8?̪p+<Ĵ܁ja%8h_+GYNoJOjx6kOqa'6ir+#iQrwO}p6$z@z@9W|%N ?CmMӨmWl5+(ؙ lgǓ[ n%7~ZOL4~u|6D'(hrџ {`$'%6#{+ƷNV&&wN9~T1g1Mzj7U'k^|~[SMnR+d=VVAL)>cC_01O;up9a%?W61i$@Չ2PPVU~*I}+Gh#w__fYݣT%Te=Kh̶B₩?dWi~0z1=l}2"`X: 7^:I%lUnp6nU|" vTG:,;u*ݟf6\ wX.TP шEjFbnoΦ8lc칫y(JxTbE~ F)QP1 ߮GּyaR_u4Y2^% m<'P"'b91]Ug#6>IKYt5äÂ}@m\^-oFmܗdUu#/ʊ/1s20kn:Vm5`εhe Ҷz%LQ";}t( IMV!~npzjjʵ_&X9nbNt)eoinN J[ڶ S *=݁$vN>myh=FVi"4Ky/KcFsՓ'_LI :=k=֫, ^~Z!*'UvǬ]$G@J$RܷC9\.J8Cd0)%?(O4wϓO"#"z˹:zFnx"[.ܥl,-jG_[>:JMq)è C\ck@z #5ghPx;p{ -L2M+!Cx9i- *g"FHRS*fpG]B\/C݂`>e1NveJVS&ٞ60"5$LjVF $s4U} E}5wF<%&}QDʘ`..kѪM*Cf[>N4||!: @@4o:-^ Rfeсs@Ag*o=i׻86-.w ~V׺4T"(\h#Jj צPS{Ȳ\Q;TԕK'{tIEt6{*U|^OL/2fe;NVx9{yRyF0[Y磴= ku ]|.!{>U^`Ŝcׁ]DqOYBɢ5ucP72R\7k8T Tqod.o&hY5Ə aLwbqkIACws|?{Ģ蔨TLjXTb-Xp^ &M d]x݇xsmvw& oljOI҃ؔΉX+r~dx 6VAH^hs}_u],;4y7Eoϡ;U^Ë؇tOJDsRsZisp|헳]0 {v+Do:A+ׂ~#ɡE,GQ4`{,_+d+7V w{e}w(кϴɵ2!@Ur|/Pxpڪ'/n;,G w7,H0L8!*n4!U|w\7> !-3Q1|^ |Ԫ7sb-Q!!Uáw? %y"sɋe}.E4Il?o#ӪRcE +Y|sL90>2flB┩H;S˱Pz*DYLTG¤#i0Hx/v,8vc(\0fmͫFRzQKQ;{Hd 1/FxWkyoسޡdƀ(C)1k<_r^s@m:-j^tEUx2/KhU Њq6oX![(RnqL9m`)tzVLnމ="gZ/V'@HF_cP};nDZҐ<ԕҼg]g%XBTQZ{ʌU\K\Szy"n¼u}7"H:;U(9 g)D Qd_|;:\1pT&춇l~槃RZD{$8cc^iZU`A 켖CSd'*J<)1b[( (5+{'PzIw-"<>Q=՚,Ʒ0b~zpAR,?(~=:M0YhvV˭hˊljd7PE1ǾIp5Ġ)#ް&Hb(u+JH\ڪ]ɣ'?3ˉKWЙMVgƼ,ɦ =S "X5 2r}z>72AG&[MtKty'te/;긢P `tBmc@#0~ 41}ZTd)VYӯfNFm} BO'pytw\"@)WKIVTSx~~5կJ.g!&oOBD(DeL*D_2 :dxEehzOz r-J'[e؏w3_ 6מ<&u.6j^KR]T} EeZz)Hl0tiўW<Ӕi07C?t^CZTpFG`3\%y| DN 5#K%᭥P֥j[( ǖ(!r! Lb{{kJiU59Ix= <ݪfB(s;R eFSU\*fqe6k)G ZBQF gînaSzKf)S}zKץM6_ uqT|d\1n ^ѿJT<+C&;V53TuٗAÃꧪnD>EWMR7?!mAdp(rHG-56.gШ} VA5 (W+~Tb(baQy_[A@ѼHDjn\1Dɪ,euY1{~jM>@&Yw`s\A,##wn#PdþJ-+fOuwۤ'^Dz=|y"luCT񠲊7}&20H;lDGj,>M4kUr̬"7ܥDF&?^$q~u".bלؽ-/'@g4X _80Zfs}D(]hV0 :_"Z66[Z`BuWe4iK!bB4ᢸy؜Ł0>e nWhx3.^>SnР1GbnBu5 uG5a'tVS|hAS}ۄŊX}XCf=4\Xh~,v#|BX7mJ"BL[՞r0ҥ=8,+qbaS7|~llޕ4=ޕ NR0c$Ac˩q]ÍO-ҝP)FA:bF᪻%e:n&WMVaՓ:mkn鯥SVZRn{MG^l G|n}v 6y5shyA$3䩛J]2/Q(\Yv| Oq\[>5f`Vٕchfaz)@6 (FSOaӬZa%fw!2Jϐ1}qOoLq}xcJ-Gz糠U4v<ϠJd*"<_|˷/*K)Ƙ?4*5{/[ۊۅM_&ǭi:c*m|NUD ,*j'tzmaS u O\sz]9pWfje}:cxqǩWEG X/2n vD}.w,֒= RXO]NU7V97+h>s2燐y;o)oiZ3;\M2pIH>T n($Z+J`25tۯb:En2 \X'.8V۟Gty9!c_1 n|r&k'0]5D/@=;w{j>7<պ~Ο9`0?|9zAo*ڟFPq##߄Y#RS{V5l + '; 1 ~6v3,.CψzopUush zk!=9O:)% &_}'%5,iԻoVd< ,mKn8o>@/ב\qjm`XbXO]`ϩpAݚ`n6NӬ}2#FWKb-ZyslBGx#3N'W(uxn^:i;OEu Fb0UR~E#*FP;gz~isٮv׽g֒Ey0HԶkԒ²>߆riLjށK232>V-`7ZLy5Ԁ$&'`8Vd]IL?uU7z_Je;2*4ADsaF*if{(#˲)Z>H MϑDǐA]tvQPlaIHsKlۂ.r7sMjnH_E%C&K}7smT87iZUZ<">X!_NNߓzg+d??,bYi7S@M,q;ڃMr&8ZtBz*xHyQoXːfǏ$U!gO;uLQqɀzrRԯ]FOfgx+s.ff a9.ޅm/ey_Y!R?.FǎAOIW*/@gtIDI;z81߅즤խǰ5WKĉTLeɯ m۪I,&b(UgK- F AJ-g5dҎXvϵڐ+g.[c'mL1{yqܭAbQR˼z>LʄAdM V[ =pz#F ӏlMخb]oRh/R]J2Q,D#xu ١ q =;Mboܘ -ē K(7챴m Ay=9 :0"iq7:cpt׭e)Fم33 ޞA]!dվ_n+Eud #Y " 2,6kW'Zx*xȿSm~go) ᩵hAaG4++[`}Z\@_T_+ 28,t8Q4lzTvRJ$&ZQTl9 i2ΗF-ZwJ&`HAHѡ(3ھjuɨZ[8\!>)${ڵށkaŮK*ka*y)oN]i.G(_S dT6gY>r/L/ط(|4upyܙ3؟˯2yO5i6vѥR?"#HM;2_[@vcmAepGGMcwsThKE`m.)[v@PuX.BR'dټ+26Hkp -ouq(1\>.\胷–$IPuM}u Uzou:y_딧K08Y<6 #_?4y*hN &Nlsln2o6mt\au**ޒcaP(f x[깠}ߧ_:*L9WR쭟r*.5]D1vn[or2s1t6`ԯXUG$[Ո-*YC/NN3, ]+GQt͊&g$Na0I\⁓nT^Da 10(tӤT˓Tª&ʿ7r s/!a 9Zx/:rA1݅ź?fzKã'`w^U49qMg*(iE#ҌfǠ=ϋ%]EgiO ait*mebl2QۘdN+pn;EegvdX> stream xڌeT\Cp .;nKp!58{vr~QcP5ך{@A ljo sa`adʩȪ0Y)(T-]l5@'gK{;?8N@#LDHX,,\VffxbFn9FB?&4.mN&Fv9# -ȣ @?&?X8213:3; -],@gWy#[1ST-,Q؛9 tHve!S #˿s/Cv621u03Y ..#;ӿF6FnF6F $F3_Y2eThq;SQ{[[3_Y:M@dvv޿_:0Y:́.fffnPc_NT=+YvwRZA_Fn@+O"x hni:H 4 B_7F3*k*j{7+3 K*Y'? JٙxTf׃=h[l{>Y7& WF6$rUT ?-4tZ)#вۙTo;@l,퀊Ζ]@6_hMA3i_v&m"+'4joʚ=r / rrL7I70XL#6o)qd#M73I7b0)F *;h~#ֿѿdRKgPƿbldblcl񯔅h4sC?@+?@A8@ۀN`2jjoccQ?N9;_+@acdPA~[1,0O o' _KP:*Hf*9Ak-~A#6ȖhЃ a;aQRps=L,o_@NTοe*^9hjl$,QS)(3,~ \,4@6\AtcY@= @P~tq&N28]z@{Za|w ~N7WbvF>y/)b:ra1\<"x yQO]2%DzJ^TiQٿ'|>8tT'(zp@Ã+\AOf{UPxtw#6B=FU'€\GxZ_xƻYYtuGQ\_L##wRj%I,J(9 Lц. [3s<)VXyFdזSܻ7= }FwZC.hg@zh'HYC#B3)CL?q UF;TK&3nz?{+=&YhzN7M Wᾶ' M-Vu <ԴݯrrvmVv/[g@5IZ%< ɢ.Kfp$&ey%wǍF2,bȋIJ8$&Fh $cUJݴF`b&*O>{<y"0ќ7"Ң&3增 vS Ƃ K;R˳"1}«MKIOT9&+Jse~|(u2u0#Co,ՆG5^Ӝ{~aҁ-}w kot.iUOR8,n)Ӝ^ eu18na@QSz]~aFˇCiߊ~zCW 3 " J HWȧdF˸R f/o_;_{9J>E;;3uڎYD!;Ϛ{Fq]ШCO{J/hp\LIcvprr5}^gxy`˚qw&2u[(DV{}h*ł{m i(UA8C@ͬ(j(A+tH\PMԓ?J;, ~A).  ٱ. *v4ajY.`Vj{FnF9C2; 0-<&D>E7øGEtuIF"7UM)ł Esb嗲5 i Fu(G_ē4[ly?<^a^yD >|M}٢ӻc֡:XcvF;q")כ酖&:jb%AL4Z'DxO͂Na\2n Zw,J&~9lPrN5"EloȻ{I)Z)瞲Aʄ_sdցjjmNXS %$?]e^҄^ՙy;XU'ФHg:W9-2aMnX=0+bሟ6㸕A(n37,aH <] 0  xvE87`Dd#1yU-i^}%\ "g&\| ~>-}ˬc (M{W-bom}oP,xQH\.+:b~Pf1w j[[k&2g Z'Zdcꉧ$g?UUg]͘:5؟E-px_k\4i3HNȆTC mڲk'TiN$saӣWXoٳAo8vQrKNXS],Wz )玹Z7Bu3q1.^~mRdPULE\ ^}A\P/&_P*am3'ylFx 쭊y ]ZpX\44t5핕0N6g++;Z4yCRИG~Q&ZY(QAZDDVb`gY3 }(dz=RrnIFF*ku- !h#|͆x-"WL:7%/q/]wg'CiHRJi7Oc\ |L._jNqWvT\MWvD?IlXlhHL=7Rö&Vwjhǽ;IaqCIf KrYˁB;c6% { olleGQS)[x[cdDINȡzzEQq#( }]G*㊢ԯ7k'Ѥa? -;}٭P0zw]ۚM8g)?r~M% Bp̢ BZ`9>+[D:A)U,AE{Dg7XݵޗoĚq50r$jך=Qc؀bJmF-T8QŸyGhԅk$@}Q:]훫LD4iz -LHD?jMFZX{$Qx ^f}_ƪy;YD|j-w`%ou}Mwwo,%}b~d[!PSAepk@aoIWIݛ0#ns}K`_ם_;_'7g۞agh |wU+5~g?y齦Fx[$POxI?CHA)ly'(=I1 k~&lL#"KŠ˳AFGB2wp@I@ u{WnݱHh`F),݊OlHW Yк",#e,nI!A? аDvBxOuEWI-9^cݧ*cgojt;\Qnن5rOo`TOrh|uJZ/֧--I%lAٸ_[VuZ_Ўp,&/`ެ#9& |'M!'NULOѾ^*A6j6ZvuXs\s1Fif5f8Xp't^4(-"!QkĢBu*SH]y+h ۠跞 +kO'x1ڝ.׮[ )[\-'kZ0>otVsFj7% :È* 6-t߿g\k]O]2yf`e5ݺ.uOߤaqMXfxQ6xmzﱐs]Ӗp a_X#7ː!˨qbP3G~)Nmfk\Cf.[NG}:mzAYNcwE4dxy fx -Qqw=?V!Jg\?l;V b7!W) yj^8^+}{~L(P7ksm^I:4MȋVF\ 魡!q^x.'sW҈ϹD'Q:C$:|;7[ka׌ 'Gj9.#./Զ̏w RZePP{dkWC_jhq3-No*|P#ZtnPE{+)[+~+ls [Y4HdT6n _@T3G a EHȷ&ҺȂ#xsZυR-X'd*P$?K;G.dm`*9m!,_3Z''BARmV)XPx lJqHc^'*򲥘';A#,oIKT^%s8a _2a(3zT`s866}.3P3$'Ixv3? wKP.[SWVj$:fC!Cla9Xou[|UoO2<4}Gˇ^D;`.Svނ_jpe[F#sIēDH8DŽz&Ǎ<["|y@+!%RRc)OVeʅw4T]swɏRuK (j6)$sqX8{G^߸sXR#R!҈e^tI⸜\ 5_\b%϶cҘǏML-ۓ~e@=Ob:ۺqf}=D,TX]fA3dtn*r)o~1KO#:{ wx](?BW6YAؚ*EU%*a}RIBHuw6~DMވpon<_Vָ(Y8G n:.+ *lT3tcDvr5ypӼPqp"cb ~%5 $u)LiX#UwKLd= I+a1TINlO]IãG*E=_W cHVWZTKF5hrGmKUut53H<оS(8Y)R58RVbovv.+W:0}S~Y֦ҝڦ柱ढQl+{Gc (Qap}*r,` =̙8)K8QB `⾘do}Se=EBT鎕>;nnZLfwX5&X [9jlk9iY3U^n!J`ex-^,[,Ob pEV56kǻL#bP],xy <\&;!a=QאUv# .q͍!*T.~C|"z_|5 )";l6t/J \plYy\ׅypkMGxe^)>X?W`".,2e!ˎLju}!SRJa&^UR sJm/I1%V~ tC,bgq8̅-gIɳj.mfrs?wg@N(/.ρk櫹*Py6PVd5/(̺}~!^W5(t1)FZưQPlьF. gErBo}eNRlm1c|iM$/o]ϽALOD[ɷolYW/#mr3u,PM}K_5$0<\xDeC&?y:{&!ԥWub)0H.0#eLrԇTzwh`t_lΧ8ҳH֦d! #nGjWnɿ6H,@Ac֧ugw_ ZџWT/E93 \cص`w{eΆgWZҍU䥛y%i+}EUڿ5iQ9Uȕ3VRʠmUhUHW2kzfhf`ǘu"?1BSe_1 r x_[Blg E@W,fkHbQ8ZۇUf}4|+B{ a;R&||RxdF!zc-T>AUJJ0Je_B]{+"I[BePM1o0$h־3LпL/ 6 ԙ%V7;U Cmb]40y~;Wo9c/?b琨R7C@cځqkByvƁ ܍q\r]2"JS?)Z4*U`7Hl,򾌌Ku;:*_GɌܚCc@p߽EЦpُY 5벴,.ߜۙJa+ z:'Og[*X#x<.暢;ޥ' })[ ) .qjٳM=yOA]B?_QIk3}XcQޥu9о4p!ǎ@zݛp<4-G/AT˲C"}>uC' 燖QBDђ'u񻟩ҁ<JsKomYUq rIȑr=t372+FywY(DMZKdz-G$^>NE\] F$-mrBY~{&NFS61_BA5 ePGP;RLBQ avreV1!~5~$ƥySx)?_gpoUթTŅ~=70ᛐ\V;tTr52?,#f9 zȪm[3 >1` g|j.6PЬnPo~Ħ61U2|uZsMwk,SN*㾣rU1$U2z+u|)@HG Ex|Os -B3Ȝ^raU=G6 HtfbRXR58hCFЕ>Xf*Z^9fHr_#W4^ON ahN8]%:8TqFmulB|asفc¢9GzLׇ](ꆄe~3=Jjয_*&ɈPrEׇߜ$=HfN۷llc|]lt|-DYzq7f0\u)[Kqx+j2vbs'^f=^IS0yuХFA!RųS/_MLOfe~K7Dk}-+=<^pc 0gEUYXob!*|';ճ?QVj { H~ 獛0jm9(C>#wP+Pr V (҃NlT8*i+UP+?}Il˝ip=0IB7W5MZ![>ӀmE-iÈU-LmlƤ~4?&au2?O~b7Ay8fBQ8XvVsUD['RC]aYd+WJNkīsLq(3ODS8p<g!ekNFFg<( o_s"{( yp+!pXւӕTSϺ4m̈́A<^r$yv;@_\=5LC8O1u[O?2a2tI Ln^jqRptY\8 JH&epAbd2tg JA:D-Н$Aš8T~_rGu9-eW܌]RԤC5&q3* 8 ,=AWmI\8ɵʚL|Ddvs~?P!8~1-c M5 q4G/ 'mz.8!MH{X-:b*v_g Y;__L(fy_]6+<SB3vt*p8Z~pˉL-{]+rH`};f~huƔOoW|-Qo}L8(u<܀Qw(yu͡2E7\{[I쓜DkGG\,N{'y .朗n8kX#.ۥu[?U y-ao@#!ܱCEsȧGaoISW xs5[Yd4亹 b3dݟ ΅'bnH5+̫ fdoO?P1l 3f:9TZg|BXEєѡH& !k?'?dw!8?⾘jb<]#I5Q|CvGn^|6>X$L}*ZaW%wE+VLkRO렒z:N}Ή01\ +Zf@cmr dIQٲKk,%ygvi>_`jtDžvF~ ᭣<'Q'_9iC0/(93W7UlOKRGNrsR_vM:l+ .% Mڮ uEJ$Pf->]!9COssfI^>Yg1{4v =6s]8O/zqj0m9UM;gjƕex6 <5Ʀ,& 酹/[{ٻz$m@CQ ύ1z"o  &.VyrlImutù1淐!e?mmt(gzQ^0>4l!iͳ$P)sv>;U;eP{;q- `#.Ww0BW7"0 `=`k.7_3YsvS3[{\uҺK63dnœėw6*@H]#R q[;+$Ab:TStohgeΖQ {yҸ~1s!uO[M~˓"5?YϙRl!+Jq%'9eBֵ vނߨ={ ̯~:J%TcB b7WK,X#R+I ~SCB2z vo˙CLrq|Ưm5qF#n0 e%dfU.UMiNCc G7yx({(|ze+@h9km]W豥U5턎&F+C"(~>пbpޗc OuDӃ`Kv:]kk gј*9ggN:+@?YCb̾_N]L.|{SS*b.,a5 {TUͱ(OC"uw_^wƙ)e΂Ѓ 2J~.n@тf;)xsCd*8[j$K]C8((w -ooKTksȺV@0J! /}0319Iq?Q&]hL9~ǩ{xF8'wcF'tQ6)1DM cDQ+zm N/%b&oƘfB }5lL-暈[ׯ!ZBf[-Kp.8#W(ʁ!܊f}V=N50ç|z:1+"[9:իs:GC( B #[IZ] *<;Sܱ֘n֐˗$سqP:MQ(|&5JMIa FO暹cMj68B@u9GpX2"΋x-`:.6V#w]kʼrՃwngk/_CwC=[-YWӟ 0Ίiqi&jD$#;u o/YdD=o57( PTi9Xrt'UZa#|ʧ_~ٳw5rV,v0HUB:e=~dZ,KqΌl^Te yz5 W50u)S@d4\=فidm8F}z[Ə`+9g5?y#(=zo)V("Őm- F3߯(I4|amCe)) iU}T6)8I^}>Rɵ0B !'uYg?WgxY;(:Q6Gefzk桔+SKF$ q^ *'YgW> o];,#(Zl=, YvOe9ں519S[,,-1cl'a9EVf ?R{TȐM_W?ݱ1mkvc;z^IN l-0|uˀ*%1@ܕ z#Ԝ0/xzP ?;:JVyo!5Ʋ,2L[$ћY1aPL:!Z]5͐va&cr@ ~%'e\OLvWs.lX1Wy!w)T9c̅(&բp'%L#{38{6(@20kO%2i+|;3@.Vgj5B~ŋ|.Lglr*?^Zy8r -؏P( io,zAFfml4oQCǂ98  pzsrMyq'm :O ln$Hv8Xp(~Y6Z+kVad{P, QϡѢ ϬKa߻00Hф̅HÀNI(D}t=i~_SJ\1 /JD[}"Sy2Rp2gT(ߪ Oge@%e @l|IIܢ4o2;Vݷ`UC~`z^#w⍔ wĐۮ kǵ_uMMVoF다vkN\iڢNJ>:* ljZlbtZ{,g=T/&1HヒZFņRI^WVy3.JH{, g[?f3U7;?*ȠJ|wK7]>^pO^ʖ7_sXJC"C5'K5,H狳7te>4@שKzեg#ɇ%yhHqou%7ݮH6U*gJ"j`Z!1Rdq3؅!.Xݠ6:46pNVxB$(sѬu/^]>,b 6.\*6졲С0^6ωcGL:ˑqLK6̌%*ߙDaŪꊫgp1P>}иyoP}u6?& K.ڙ՚r`J-H;]2Y 혤IGe;\5CЃ̽aHvj`=ʾD2:~Io4AELd/S@])-Ff%i&#NECI%)6o+T P "M.kh-ynh8/1ئwElMUM`Qr&R{+e0OB<|_XPK_{#Ʋ\KJ3jH9h*!OΆUql =WpO׊ϓ}Cb7E&`a uT=AUcC=!xc3&qN9pMoeRo h^i,Qd\C{> n-ƞGm {V]s)i}=5~ fԯ=WFl#8=S.T֠8Ó[`4 ngݝavuуND!j}E9:,o64:x-ˑ1h|\i{f γ%gKeeήG2N0lB~1&n["zCuk+BϮs|`~JB̈́Hv 1[3Q=@59;?Pi`ޗб >;}=[3֙hpiS3R`o# L|y[97GRx/x*8X7u||6kQٷVGBQ;VJHqs,=Cŷ|.H!hyv沝#'I+!Zeoc?況y܇m"JVn}ykz ;q6aP#?>;/RNy)c?BM!݂j8Gp]{R{hQ!hA$kA0;)?#qsu@c%;nqGsjٻ) ND|gVp^xR'.o,ǻETRSV#)R|P'+.Do-I+JYk^o'l7|ʶs{zRąQ "wG DLMK3nc~vsд|MY fXPo(V qUK71tBSZ<%3I}dEGv8ej-.a /Ƥ(8RuwÇ3)ϙՠcIs g.BzLꑤhU乾aeNFҁeKC |;J0L㹟w+ЭF J$nLPRha}Z ބ |>β'gT6;(#~J%VzDZN ]4a1΃NQI~,;_#Wi͍/on=x\oէfyBwI.ܻ,4_ҩ_L2O7Юl_=l| ]? ]İ߶PA!Eshe(\S0tȤF ⯃&iDU ,Ow 'PL7V#bw]A]_n^6X& &۩ ҨOŋ*$=]è \[UȾuP(Ǥf T(UoIZ.>hhsu-79 OTKrbe toS/E"5cu;τChJ;m @ՌsLHs&ΞbkM妥u Gf>[2`Q ܨƑBn?hb`m9R1t2J5o L챉z^zRa _r=%%#7y-P?)EW<& zR}g8~F,;.a"^R'ּEY4pkʮٍFla"Gn5\2A;f0P#&\8_'-a9 J::Kw్uԷ{XK' KܹoVJ%Xlq!6P-T7.m)Y/|8'xQ$Zdͤ po1 'x,I{AST&soml{aQ58Uc^WybI/S/n;,((pk?Lx5}RP46})I[eR&@5l'HkbS%Ny"`^&*!޹0~byGrqA?xy]_hA G)*Ѧm$׵e Hz UnX#3?PGPgoa(`?N#LRxVv9=pi`.?/LGF?/׀D!:/YFO& 6IoW)e1YۀU͛U_ID)b/9Yxl Qʡa晤Q9j4i (`/[\;F]-jQaw_NFO:`SxzorڹCaJfoo2;6S0"ir}1xRe mT0A4C閿Kٚ)#kUSȈD㑎VDe 4aBT$& NHt7T-At[fF+Os ~`|(=1a$/F4^zHtKt*Ë6& N29/D ل $*Lo̙PF- dBroZέvrŀUk} Ծ@tҕ877|JwܘV^Fendstream endobj 307 0 obj << /Filter /FlateDecode /Length1 1763 /Length2 8680 /Length3 0 /Length 9781 >> stream xڍP6t K7HwK ,RR !HwH*%- tw/ͼ<3<>3KO.iA`\@a6ph/ 0_r4z]$/ iW0( UN%w_K@pBB]2 @uKC]!6<},\BBl`W% ق3ZPKL00''эj#lZ`7 2@ =-6 rKۣPw;apqpO_ NAPGg7` qT8`^06! A@K$5Gst88 8r x̲NVPGG W}2W{s\{'_de3(ͣ @33`H?|@`o b Xm NhDwxz2y0+?[))/'忕RRP/;? ogq d `05̀fP>3?\;oENV$[Gr8xi8P>.gU0H:8}79JccxXuع=.ح*N7%q@ o4q| {NPأ N_H )p** AHpjtFB@ !߈q9Q|_l / /_1q=Fv|dH0[W zL/oNZ>^sw*DZU^WIyo #/G|1Lتg}J9W/#D= >S AR4h.w >fϹfVB$&K}=C*hRAao9:gHg]uU"!;\0D > L[,oy)+C /};ll"K$K;v+ JǖRe뗍 e<|^/ <׏x]RT'aɐowy M|}: Sp5/Z_|wA`y0*;‹n`s/QmB fMϐ lcOjU|I,Z>]Ѱvt2TU_"[|Qy߽/ƜI%] c>${[X͋l̷8{=ѲdoC_}5|(Lo,剥Ҹgb]z@H@q9،lrLa,N}g/氭S ֬V&Yfhǔ)QPTC3,G5]mڡ2{φ_{m|2[tR=.*WT!Nv=KU0Cx_/jQ *SY 2/r ; )Ұ^zJ\u|?%G|@.̭)"pɏ_kcM2'!npca8HBEXYޥuy7ΠiIfYvY,qlyTw`:Wh*#gc|2 m\abd}<ȫAǤI9u$z٪K'gN7ض:쑋e ]G0-dgE5Wݞ?(lTT\ w+)ikƷ]o ޖc~kʣEsQ_q[03"l|ƨU ar=3CfJA~];eHGw?¬.شKZ:>'A I #뜋0H9/Փ%Xu"0t8=qmD mjʖ VQHj}XBw&]g4kI=MD82BF2Ѭ?%0jMM;#9rh2呿3"?UuGƱ{.hOߩB*^Qel#;}4jt[0C% QXWsM#*d@Ӈ\q'ڲfycyx2Qs?qﴰn'Xw)8jޕ_Ny3)Bw߸_L }_H:+; ~h*^x!H=LGÈ>P.յG`(E~`!wsݽ|E#G%+c'1HG[1qnd2~Tp&jYb @g=sveuF;ٸk,]"?=/+ =}Ư&NڐplnC.xQw¥~_%#N!SbOCM&Mc5F,ш,dl`c>YRqFl~5)8?ŷDJ"W]DobZOJsM3[\q1՚m։(ɡ勄\\p٠R,Tݶ- l}[δ`)4vM)>E=30)BhmӅƻLYa +Q?# Ή1J}J0"l۞׽8Gd65m^BxXU=q$ b6:`9YΝ-qݒ^ZYܺK.Ȩ\DϴjeO"M|Dᘴ)hviBk6NʓO}y?(+VDPqNO%qAx+wv=xhb 1MQW$4 m-"#7&%pHQZJCEv[y5=< 0|{m^M@` @jױ9!8fwEzn szs5ܔÐߘ!Pn`2E4Z,m]c, o|evùyMӋ 'u[)2HyQ`n.rgWiQ_xPVVbNMa*S_h\}k)״ }P삚$*'Z¶T5igA!_/Y&ҺIe7Qyt!x_J`gbXTQw|T'vR >ڈ{#!\\ރS hVf[J,E?LDkag7ٟ$98>бߌ@=$h_\3"QQ8PL@,xCrq+̙ 1P&PtٝA=g( @r].SF,Lqn] |#WNzH>3bDljb-S>Wqۻ1`!ΐ5EMOgܠ$."ܩhI&Ʊ6Ja.92DN3 h/Y+Ց,OMIu%̉ɚA)-B H}$y3nh>-^o |h4К K2Ib(^TL1w;=ab&QLLۍqy _'JZ@aΨL[Lr-Gh^9ACb=tYGF-ۼ"Gd^JYM"[R\'n 4JnirCzKRQxE59.ɾyֵ+pzճ}޽S[S2Yx ?ߝwG 5Pńs+.8N1/y)I,MOJft͟:Rs&TTDܗrFT{#``$jA>]ukt}`P_#FΈ8HZ^N/=g(\: ;ʓbn;w]>\чѾx)BmR{RkRSϰȥP@pمrn~_|wyZc 7ז׷8!; JYA7kF~<.k},Hd]lzeYk"بbWΕQȡ&l_mnܲ>6-vˈ oC忁;F0m3I!m )Kz $Chot HKҟ[y]F_BSW. u]yv~yi T2,.ZJ{t3&}+rFrkiOIF%e4t,i~JH urd9Fo5C>>JbyHV#KhĬ,~>LEk|Qp)`Vs,dQdzn%5Vnq_FHc赌&+V;ΆTRHpb9|;E龁3;R$4ajׁ$i#z<2Zҭy!JWpM;Xi{7flH(O (&z2 5X՚%KX*{%!>➣dʯИz3+ݝV%wn<"ڮL3b ttiݚV.3檒x%zfZ4 DFcSڥs1'~5\61C%?8?Wq-ޱw>fUzzee̋~O閝H1dJJq5Iz|Pl6mB>򦙥> xok?os2+N_P'3JrîAELy7{F޳+tNl9{O-^"$HlfDO%~T:M|^@p %-J-n kJÅQQZQS]i7 8d2#U՟:a.#́:So/T+sjgze ̴ŝCa1fֿ3T--H[RRqxG#";gCwް GizxGJqQ枝H`&ȁ.f$}ri\DikD<*1԰C@U938FȗZ|O[f-,WŰ;yv7ɖ|3y]K[B*@+)=5Zu+Z&?7kPbK)dHgJxrǀ1l=HKnt;-!uchi~hvȦ*8LjT~?<Ŕ,'1ԭtKaO]nͷovT `69\,- W8S`LFρWj-( 1 T9mu#=,jZE9e &%kъ9tW" _^L|K`s "kw9vk@،x0}~F v#po(+'pߋء±A Re.l?w:P3:K CcYH\whr1s4YFI lشoJOh|?)kM..st2'VJE}}jiYM#Yp8RAhV=Y_mcgd52eY|C"ѾiZ j0:ߧ|i&*'+i0bz]>Lj2@%,8C_g30.F7We ik,ſ<~9pInj;`EUaru 51#2v2Pt%: 5#<ģܸH ƽُ#? #_nMgȠ'$qZVf(gw&aQ+"wKbp $'#GY-\} R9ouWE N*Z3X#2L9ge9% յuҮs, -MT*%VCy98\E"NiTOy 9(Di=AԨ5"9saW5VH8_-G!$PEN ]EdV1V[R ~*"*bez`H=F;ذ~:dʞ+>5'D{͚vAC_3&p9%vpJ'%aȱ 吸m2F*eobc|~.LcI7` hԆ$$85Mk+:xr lڷ=锄!n<@^ܦ{s?g wtHG&nI^40xtɺ?ͥll9Ց+gO Ji7n|ݳbm/y?EtRe )abWMf8F>~" h_=:E2 yWʙO[n/A>q+endstream endobj 308 0 obj << /Filter /FlateDecode /Length1 1534 /Length2 6911 /Length3 0 /Length 7924 >> stream xڍwX>CI 0EjHc6bt#"RH*tHtKt;}]Ϲ9<<ؘ rV(K8D $  @66]wvAAQpC"a@UW{P@TR@L @QΒ@E TE!.63)# s;#`P$P;`* @ =Cvwww:mph[ Ԁ:`"\@Phw31#`p &iwb!*pxPOtFJ@`(G(Z#@Mc>EZ"B]Pxa~ i t9#.|._"JG]֧p0>EܑCk+WG~=$' cc" Hw=`Jz:;~1*|Q@k/x@@+?FZmH?1f_L1MfB{C}`#UM4핗Gyy%Ā" HL (&"w/ZPğ*HkPK۟p]Ai80`7 , 2a'Ԯh̀0coV[!\۫bEiiv^?0n@l西Sk\L_>b̉v1JH PO0H-V+!QhL#hr:WQ /Hȯ7a:$W1L _#aLu[OG[%/e0Wgg@c(T]YR9:wޕ~iCAf!XHZZx]lfפ!tm|{S Æ2z{$e+ AQ2߹K!M؇m"Oͥ)%7uе]+"Qϖ^'jI7bKH?t͐3D A*Iu+ d]dmy[*?ܰx7";GiA}g2Ej{_Y[NWQ :-IhXT߽6x㋕7ZZ菎pO0q@y/防gTwnXyiiJ;/HDd!S^A'6H3zߔܺvSSYȑ.׺Ty,L)9?њ;omϝS+BRU6PTg~lnf4?NB. h]෍>G)2HKHX4GN,G-՗{d|7ظȴ[לдT$w.irN!޶~n@@WEI"z4wF1p\@%-FRP >w]Ⱥ=*#[-l7j[nY֯q|( 7JєB4^WR޵tŬ[,l+gN)8$5_6e)?I I'C_"Xq2w  pCAkXiI{jVKk4udj~kۺgN-[?$ $c&]yBSHH/ ޷p%&GRݛ"䞎 @I7j?P,|{p_zP>g.y(g^R}it EB? FFyn:Kf bz`[~:[ qzz˞LP;һ3OY]cJ*dhMOEJ(*hrO̷w:N=]7\ʇRJmͥ^ȶ3']'B0U *|\Q'pyljԠ]9Nܖ˼,_;?>?Bݕp_Xl|:}d|;ҵWN^eDVF=i}xX>UmuyKW}0>VNI#fU6\aM} =̠inMUJElZ1rdC %L$8j8;vq7Ҩˡ2A"S^!v =|lpG/*"#}VJ6]o(-wfSb]^>H_ie̔dNDvDo11+ßb v"_sa>I zO\VY@!p -HRbYH|EwQ"fy؉<&>$D{60|Mo;V \w~⫆"9ɴce`UXX 19~=ܹ!E4KٵaR9c a炃9 %ѦɦL]_}O9Lr-O'NKwEұ)-IЧ3v t?ɏחd Z16;p;`)9?q 6}$śQ"}5HH7;r8_njlp:cՈQbN O `|`p{_Ff "n\CDvz*>bN+L9O&Ӛl5ljXHY)L?nr[}KJtll!Ԑk@r`ϕ'=g0 /JLsNхEpG&- X)u}Ylwƾݷî={_ֶ?J(dXk4PhoNpe0%rI n`U69COQoWs[3@ᇤw!PTbUɬ- BP7GH:O%/ qZ< p<\̓7]DM v-:w/X ?>a?D4Fq|ڜIPH<;%GT0=t?`#gSiNt!ZxMiA U9P |v҅!/wO#4xH75)TU-@j vA{:_uywቢlO$d%,f5"{YfS,gٶ?Hq?|$g \ѧn =0 |w[bϖ&ZK6NJ|,yV 6=pPXԍcWYȮT)SE &)k6}_p:~Jϖ4JT^]1{jdA mրe _=a2:n'5 P`Zy0J|pw<77vz6X4&zVcLť]KCGqQ]J7 垍%K-gn>kꦄ.gg<(3tuz2վOw.C_d&#wZ¢茭p.9߂3~f {J46)y'&`x ,q7jbNNN'Xh [Y\)Zav}>1*\gX*!o{u`e`dexC^.J-"&=O‰|!ugGr'-DNRɉ7y2juUtBW>I a6 G>yO AΞQL[.n]㑑ƅ}1ݶʹɮctg&3mrnGcRLWedy2I[f,Y$p7&}wM">Ok-lM+Do8qј?6RE.v]eVyAc(=:U<(@-r?(YȠP( ):2!cPWqHTUܚ}\2V`PGf,a*g,sMU"_JXLR@\3*"KMt67bƬ•s…f.( D?Wv>H*޲E'6HT^:}ԖŽ@`C`$H8!Ўe"bz[ omF4y%XdGaW1ýԉ7{?tC GSGXwN9K >H Kʮj,XgqT&W­U87Go [X!^LD_kH4v!Dm9t_+h̾E'#&w:n8cFLvז7 {OۻbK' u?F%pQUϋ|{UTNEߗ";%_u'4Kzbv#"23*@Ĕc8U,zp!SI(uY|h?}I%(Kᔏ^%o\OS\iOzE[HsylC7A$Q|T}6Z1K)-3\\ -rfGqheT)>5g),4޳5XYޙ`=߯j*f]hTܴ 1j(f+!?aW1}@NrB{ɉqtg %@;YwǷ4֔$8b XU65 W T Pڥɶ澁AȐ+U)_M8.JG[܀XjTXKPrI{]r*{Y PaQUu` o[9 dmA \?Ѽ 7 +ifKޛ^E'˿C+|s$'\^D#VϝhWdǓn7/f_fwmf(3[Sx>?uNBIפ8!: )j!.ֹ`ՠق"WӓFOBDWdNZ2 vNi {=Mho׸hendstream endobj 309 0 obj << /Filter /FlateDecode /Length1 2021 /Length2 15301 /Length3 0 /Length 16533 >> stream xڍPҀ \&$kdy^V E## #3/@TNŮ@A rG@wXCCh.3t|W|vX8yYxL0~0#ݰIݚ{6m|nv|w|o.6vn[t#,~lwage~ +뼯/p3bQsW&1k[&6ކgJ/Rm+$㱃/m6k3FAkzCI~23XߌHQِ D?U̶K;\ J>rl/ӃR>\ ~?ē1Pv|FGm0"DƗ!;y)u%l(5 ٗ )|^$Ոj[C9|)Q5ϝDC@w^bw`5c&lTCbLJHFʕ˔1HD}4Sᎏr؏(د kUj=(R$(ODdcfq P:EG\)kWY|pNV#!Xuɺ\U/ϐKs`V.}_Cu %k~/NV*œyYy#*!p v}^DE?Gnkgr@5\ɕԘ?2~y[޼,`9Dlo.$b/V.0] Eۤv֭򋔎cٓ1A4`QK "eG; 8ZkL8$D(YdEOo^M0B0gy ؈Рpޠ^7) kQX ~J|atyXZnJWᦨeˡi>JlX2i []:z9YV"~ Dx#(8Yl [ΊAeRl_dQk xWdCn/⇁[I-Zqi#fJfI+&;^l2H" h1঎2f-y/Ws13~{]7EvfK#%~Z+v+*Xyt( v XNA+Cp?lgSk}WqeDUY|y򉈠ܚ#N*7N09zYDa2>PK$ա& IpWw'k InIFs'ãĸ"G (r1X?uRtĤ]#J/iS"r?L4 ջES~[ >R 7POu 1b~0dbuKޑF1 WK<Ӥ1l$g8RxccjI|'%{2dw;1۸y B-O-O*Q<-=bjJWSRYuᷬff,uzE}7y&nESy28aswF hOacly99Ee1$&0϶tޛgC4|RB7?M2ͲAE*Zf-w_; 7?+Q0m 0F6UIWr:A EhOcA]lFQC^qo*\5}تv*JHRkƠLJu@:_" j&_~"uunWcnԎ3"b}9oeRȊf;o;tdԢZq!_x?7VUJsllUUǗ&#Į)k ?K#lQ| 2;]ՀNPZ7Ш;0F x Y3z+7E񙃒8A[cCNWquSs%Ykۦlpp]Kt#LĪ&\SpKqfCB,cS ##":4VSS4%@.h(RLY`*}DR=Z ¼0-BSV\ZJ #Vbm]ϴPėvjT=Bv5.-a 29sOw7SYd`/4Zݿ?GLvDAʯ`!IȪ ux$X]*۳n??WbP#e4|pzScqD?@1TD:Qpw&fzO!W|O%ǻP-OpE"yoj`DY]GHgESa{">LKoѳCyk+ªA|.%wE3G;858c)9r[^GMt%It&*G87q'Z>H؏Xj]֝Co#Bq1KHSwJ%LxԱACTų4*聵{b:h&[0Nu$FT.~tbmilM 5ﶲ.h3AKUR'3 7ej[ ǦʧـFۦ# ;yrlDU㺼A!hP3rU{XTOA* ࠣ h5x,I +ȩRفӷ KE ?zb[akz7ny1a>W MCVGhH'GE@ WHFuh6`Kr0=ĺyvF 27xȢU(j )R>ta`'CFÕ *|v<ƃd%ɸ)&FI#h}  ň1K;|T@KicM+}bg| vU5.TۘH08l/5EA/ h PA[VND1YŁp/d9L+144zPۢt,Ǿb3vjvK>MeHIOiS@lq$P]/iܺDY8ՇHig*i jWf)"[F^>SQsT0 /IU`Zz~u$w,ͯQ4)M_e4_ ޮ!>ebkuΎrV`[ǴWb|#]AOg! }ɻz ],V~ۘ9|s)c=<6Ո:H7F۶oP_.4~u*@= ^g!"xԩbQ[B 1 ThS4vE72L~C#k$nc46O\1!o{QC;܋)@i' aYO,֔F+OYgu~q,Yю:m5ТZJmíf<>,۟tKaqsLƥqI=9$MUD y\殥.BSwbWR~dFrC7~+7Qc9a8 zTXğAZU=! H'ӳP`d\~W)+0TGE䅪r hrw߮cV$Yp͘ȌIDCm %z[퀾K=ck@axγ[CY+Х BSj uHn^faWm6xbӑsw겏Z:< 2;b"eEb{y{VEZE`j+Fɺ^Z/TӬݔ!Z3P[387m3AI};BP[n5d}uĆȱjK[W%+k>AeB~Z9i:nPdA=xZ!l=r|[؎ZT%N+߇C >*Qg8n㌴lLHLpcظ\[F뉴3&[2u%+Rpb ;4cR&]XEZd3A + "yo0,WuL,3ck=ҏ*|aNʮ=HZ=9vQ (O:2" noy){m@',\r Y?D·EuIM:Mv+aR.p zr]Lhl}(\e~XPNL8t|by.u5X|5Y6==XzDDL"ya"(˪bn8"k,zbX]z|K[ζv ˣ}Jo1o񿷙| Wɯח|v.4ȑ/-}P:q:UQK7ُ1ޠߪ{̍CA)T~ "keI5#J'lr-jkGb(Jy;e:=/^$cz7ͭUýb?s,^cZ AǨ uL?EH_f7J)I&a_"2SxJ!]$X|eŶ䌁6:_<*+&#abXMø^z5*9Z, /}[K_4M U0{q*^KT̯.Kwզ!Rz2,5SMuZG1 |Jo!+DRo 9F\5~*}=#[яմ"l,Ro|(dAdDm&8MQmm71rN|HiEܾTQ6Tzu<8 ̘{bJir?Hr(zAEcd-\QM0!Ty^)ze5ʏ"-helXON LV5hr#۱@l 䙖DCEO =L"6e?]!3d_I~I>>\ܑxx<45LXE4%K E`aZf$zHJLFe_ɝ |sVEݑ*A}(M1z.io9!1]EPٝ}]t^""L$ȅ%wɐEDg[׃BStq">v1XjdfXli=f- ]GcZ( /9ES:~%E=F9N!)0(=}OceG{8]Vy Q+>hNpo~+H]X[ЃFJM2m a?cT.(,;ր8UcJ-rpQAV;,h3Keuv;+B|M!׏ ℭqƟ?s-RwSj.{i%E]{21Ɇ>߭8uQPY^G|E^lzQD: y~.[ӆ/#|u9:v]iMJR{śH?@6d#8F*S e7 U) &33`޿>76 ېUF<" оcSG4j8,'k-ahsKV1&NO9패PJC ()ژT s7HITv/{jxkۖKtǗp,߼CƸ+Iv@x'A̲n鶨֝|b>mG u3eI$D^O2\ zP JԬ|I.A2FQ%=^Wm[%CX QV¡PL\/xX-c~Ji.ϐ5޹}oe~c_4A?"9WųӀ{!(:'O}qxle2r  |6T-3 bm#~hr<U(zVNʣ96Ern7?+ޤ mu1+GA~/ޯrDh hF bITU h͟jh?eaS -;+np4u* ׽줲Q>7}3`k/*vVWLD($7N喸`ąM*h˪8{G!pqנqD&;g5s'q蘹9d_R'Q>/= dAAjI<Ȑ{=f_!V镐Sݺ4Br`C̢̠Dqk+L5Cʺ6Ռ$ JQ FmGuvdh~7U(mo4 f[uͱgɿ7-WI.</'CW@J9y, :b ׂ͔V֐_'ޗ^ªi"Cܓ${du_5ˠr.H;*Hnvz2w}B`sRBk>'TQxICmV89Ɠ1(Ro{eN$ ۣb 2)-l d@֢͏]4vVkn1]os<(w\9AܘBI|€?CKn{ᰓM~6 & uu0w,oh)|U9ɺMRBb$J6ƐH*ƻuXF\ (kS@6cTQ~TÌғp}ؙ r~zbg+qP*}ܿ3{Uߛ0nEd:wR&~{yRwo0ĢGr%2L%;%ovo%kt2M(He sYhid^FzpoSgH/>Ѫwf'z[ru?#4<%B~+T|\M#:QhX+ `Yժ4oϥ^S2ukO B3ݱh4s`_hLmaY]'.gu!a(x`C/u/bw++z\o1QY Q#bj:ZpoZ 22D An2(Þ-pwe[;;yFic O1]$جgX3Da=&T©(Ϗ_-o@QbTl|"Ik=ALÞE+)ɰ 1^Aq4&ǏtcOl_*|cs 4Ȅ$v?׺/"k.Ij19Orx27~ǁFC-fG(qZrlZȟV#$ +UOsaAM;),ˌ|lL^e[jF|W)8 To#@p"03K[11󷒌+т*B^l0>*B:X{}B-]D Ѐ NQs-zȻUaG]cnDXo"tDe &E7޳O-6oNί`hs6)q^mCAq>a5 ~f֚ Q)Kݴӝ[>YY.v\\DsU&$K4ٺ ZT 5PeT r e12 ^ @cjl_" {RhõEz!{"s^u!do Q[KQ4MgdGbP&\3n$66l[rK]3SV;ğAM{xqwFN-.`?j S7OA/-%yԼ ޶:hi궃򓼝1WܩQ 0Z}lLxU(\#TP#](szQj8^k 4-$j>䯃(xZ6K<>OteBqMؐ _cC&/ y.?-1''bwD~aZ@6rz@NxH-y/b_bMHL$:@&KtIgF+_[]i͍;M% N皻<STX&C}"#s -kz>ϕ_S>fx6n-ڙu +lh T;o K/2.V_j U:|mT~dm+)</|+܅_Ὲ_$Zq%u/>Qu\lo8!.W\k\hW0,Ktä+rm^$5v5qbD PJ7C"|{CJpZ4  i3) ͼ= Eb>Av$kB_S;ʒnSD2mK$/Q6iL%X%!Lf)#K(9v0}2h~slxBG>#oT ȪlN)@ǒJNNEDyK-#OxXK!' {2E#ڂp-hXq3GC`o|LSaV##HI!vOTlr,}s6s^%r6VBnRj0ZTx0Df8~1w#{ᡂޚj 3\lQ\mp++WokUk!e"7a"Ib-bX2.g _HF* 'x*,6Z?j63#Hd  mt~=1 D WmЪܙNZh3f Vivࣄ. dpt`kS”5dw!^i:782b1i س"=n .y_ޔSpc+ d~*he] ORt***yyrD@R9z Eh;P0ood|+ZR@O'T/ T7I!+TLB*u5I11rDSH#V_ -nmTJo*:eOOS67uרN?vQT !Kx oXKY~GR[m|_M1/$>uHb{{D:vh+ոھG'vzPYL)MU O ޛ#ȴ ط0D W FX'%ПKjW TG,l}hF8e,F>u0$rهTP(`l_4rY^SxlZc%b/A5<.2-K:T|EVHUH88}|9HY=pTƜ5x C:MbȈŋT(\L1V>S N~(/7{pH4*}k xԋ\I^ؘØOo8'z7t9!& x2̤ cQ<DzGc7yCLieEiZlv ړm%еҊb0;oB_u~gsYˋ?sxMr-DɂwǶ&2Տ$/QkawJ4kSWp+OI@`ax&"ddlϞ&1Euph*^2%g9ٹИ8[!eLf*P()ٝ[R-xEOGRA~&## A?RWHҡɿ>|8D!=( "hnMiټU6@єX5ֱB0v"rmIװ;/111ƕ|+1qٷe04b \}YRICsA(cTsL YXf!$ҽ[//ohmm8'*{p#f4wE  \du ]27ԋdsrY4 k|ʬJisĖOf<yޒ*Fbd R*mltY!ŵHd׆&Acs.e\`s XZ?zK#tu-xGZRG1VT~\) b=~M`qS[G3ySR#Qk1_;. ~8+Vk$Tn%@>Cga79Cj Ѯ2]xؔi(8Dtf2e\VRZgYɈk|=}234AIS~ńE0[ي_fxL<L_vɢhqntQC,[r(F//C"7Gzhf VJ >b}0HZ?fA;7%15;(H< Vendstream endobj 310 0 obj << /Filter /FlateDecode /Length1 2551 /Length2 17786 /Length3 0 /Length 19275 >> stream xڌP # 4ww www n N@p$@p}=sNrztSSj0Ỳ`Wfv6&;ZjZ;a! 4u$M]!J`#+`c!Y i(@$j 3LA%SWk=ģ@lz+ J r]@ _)MƂD дGt0u ;9r xh)T1VY_D M@VK"0u 9on 35)@ZL ` \̝A.,. rdRf) =$A@sHݽXi`aWnZ '7?6o:֬9rdK Y!|\L݁Wg7ϟEH + hr@-!wy ` fvmwY%I_8`psxy~oo)svMgiA f qC~^X_F$fg??zS{?ivslTuVZV!bVv" Z\ͭnr]@7fv6-Nq4oQQlqpLM a8]!G`gZ `K `R"^6o`8rU7p*F|VA_qX#߈ ArC ,.v\l@0 9!Oo9L H"n9}r%_erB d3u7)?Ny;A6Hn@µoF7 $vߙ@*kh t"!!շB;bHzH)Ce7qfocGHk;h'SD!>!o4r:!o<@  X~@vZ'?u1#쐤s4byA;¬?&RW n .`? io!Bz!=3~3ws4'r9#-/ClB>~#`ޛz;GN >.Xhݕ I{|XGZٽN3xC'b$̚ONANn|hط2&Bx+0hES,P¹2"0`y_]aM'0"por-xUkrR^aM/Fo]egژ$.`(f/3AۏaxDh!-SV:`?xh峿JJ{ô6"6jS>_oMVUO羧*nhH)ř-ԣ W\ufP+ZXL)l=>K1=ճGv#](PHm*7~i mJ|M(ϬtzDVH ZvcҘXQb9y &R; Ǐ; F7Y%븟\}b?:X?Ml(ӡg zD!dvN,MYBǵ-?r;\ۼ0)9klBDR3G gqO@=J+-$t)á&c)|`C*@:qŃ{reZ-2L%zw8V_<(P&> i~I5{?*Da*L2y9,xMgim ׇ'W m)bD3.J;&"Lq?B _l,(r/+et+yJк_l)_ ~{^>NFA 1٧}1e8BO*Gb픰N#>N DwX qs|$n} _ŵŀ7ۙ W燯|):$N?~7iIH&] Afm>ҧ X4US71 ] ĻS踎MOuh;r .~pnq߫/U8/Sſ"i&td}_湝7ے|ZGmDRLCGCD\V ȷq4Syn7-§ZG-UP08am3Sљ:CU/ګ(np/+\Q^2t}A}=5ch`wɾ$bk]wE@=b3a)Qx?d/GiZ7ٽ^z>2p4C^y=8e7'shUe̾AC#n9xBljT(1Oh.ޞ6K5hO$uŲ#[k:a}x#Ȏ'4"M9eV6֋FҼuf.Ϲsϴn:A{F'HŁd]6?\^lwDMj[$?D-KI~"K5oۋyՒ=m\MFNmaYsɜPW$IoT(J9姬PŧA4Rp|ÏJZ7٧\i_W7Aaz& Fz1NJ 9=ޫB^AZ3izEyFn9S<~*GR,f 8# ~5sQƑ74mVCbuziq}uBgdGEæx-TBtBM.Vks\(&ҽm _qX/3&E*2Y8>TRI͇ >`f2U_QLj~MT#NpMZei*yd\.4MW}/Lr]121;D4F*MJ2w* C-RWZoXfxv|T>4!ra%G- #p M轤xp)DաLkMC6MI2||li/ߟϚuQW$MM?q-%-YtU&q4wdsq$-[ߪ`^\&>gGf~S<0ʖHX xs5 ]vv;NTws.c0rS~w,M  i nO@4}*}x^4%nּU^in;FdzE4۟;KʽU+4,씿3ö n m]}[XÍF7BsZ9DW"N6Hc's -bXó3΅۝<43ί}y~Q ];?UY 45y*ln}OmKl%K[lOp>fn3j~^yKw%.%Rpܐ&~'v]1 I?tLz ⼦1%E.ςP@=4lv q%xKoq] K*=.33T?Sh. \ CkhypwM&FA$  tVrN0%?O:x%4AT;sA c"@>=)*ZJ)eBO4LϱvУ,(0+ipw$ I6}JOJƹ`)şɨB@Tc@FD M!{v/+6~&J25j Qq9y eas9zo 3'Ԭ3xG^-1 k0 |gR><0IҦ3<%CcؚC.Rړ,MbBI5!Qʃüs);Gnu%LL9fgdPaod~xSh1gDŽf,]qUVs0Sm}_y`.Jɖ[<^%)k b 돿]Oxkd8SF~uvlzWpeVG2#l8"莯D3΂jN'H((=wudeNG|(, ݊J7?̺KL} YrZ!6b+ ޅ.'R̳* }hEܢ7#ТHT w6$Eu|JRHc!ms?+LK=PbMQn꧆1?VPlH˳83t%VC_oNZ_W_n Tr@RNlTs i=f8G0s4rM㧸S@P-O`br*xc^:*!,ӛն 0{Iԑ5( gu l-cT^G3ڧ#T/Ek;lW≭: CY*A'lG q{:4B깧Rnx##-3f1IEo6:$ 9c|+poaJ>)4z(B1a5PA7z)MYgߑ0-׆c̶|1xo.MRjg[AfIq-xZ{?@&Y9;Z/G92޳P%uG(|X>9 h 9z\.gTΌYOa!4Q:j;I5VׁAK&Z(Y{>X1?+]%!JEh-}Ս3@,d [GD>CqKǨ@qO?T`+, ЊΛFo~}AFbO?cG;{l_fg'8é|."{j҄Iڟ>P@(Myc03';L<1Wtba=++*3Y!>G*Ae:h_J,/ W@G`[28iq:wҜ=R;֖ 8 :r6\iƁey渺FKMG=ik} "bqYSeh8.I{];TC/0詎&m%>.@#ǃG!h7DPLCEJ *k5#᫯srd±q:-ia1`A._ށRlr>|H^~i Nz~=!F\ia,,צM0gT=j GoEo=ԭ\^ɤgMсR^52DԁSy#=2(]lG$k!N"@"v+ig.TjC{54B C" =Fl_ |C}; }皰*k xe7i߷b/m8jcv֫+uZvXy53\?7u tĸoY υ5 Yb-`+Kt1$LIͭ\FY߾Sٿ&Z0؍SZl;}r\%8'jo&FYÙd"T:~a4p!ti54?-,K`55aGP 2ۦ vW|l -_sp Kj|C4bm%=0:8g!ӏ\U| (Ǣ("2 S9f{c[q^fFڼen5EkK׷+ 3)R>O FQ@Rgi5{ ,N=\^6S/}/\ 9϶r@^~_# ߷Ѹu{JF yYzeEVl Uv$`0,ʢDQ'4}E j;x;]1r'u0pfyRwE9 =픺"q˿0+KbXVze!`6JVyS8纻<-u3w`Nrk̇^;DeyJ˺c2 (4($}Be*Z5>ΞRNH]BDsk>nB%q̩i |%w/):@&̠teHjvb> I/9"V@mU%/n#0KDZuyc4O0΃,"J>0mc/ ↩'ֹtklJ^o9&R\*ற=xܭ] jzGR+r' OsJ8i'PkIy-j}bi/I1[79l^S^ѩ~1T#8 fӹ SG]ւX?#)O b}{c҄GJyWyNpJw\ȯ]1L38ύqyCvzWfh^GZG.Af,*DI8 I8 GV2"W|=蟽b<竢e2`E܊R2TF'Ő9ޯ Oj ktR>KM%iW> |wCk*x])jRo@9)/Ws+$<#-2ŧi=8 vS"z)B*uZ\OFJzk{Sy.TJhaRECMz1t@TD& 1GWu-{6o,o8)+J-J=f "jOCOQAm6x3")BN0,"`ֵ?fG|zUcQaDžZo頊DȂ4ps@vrAO8|UxF׍lNeykb;{gb%Ws#]M+#w6UDUi=_}`eVQpl7`lw+&#~1K31_$t`zZVާz;Yb OQVQ_BEި".b;#,dރ_tNe5[`UnP+]JQI9S/(ݿFlhsB((CEeaԣ&'On>'!b83n;6N_Y[3N82 bxt PTBxb*N{qI-CyĈZF`"bOE +h"zlt'dx%;)wHCX"z$Wʵn^pW-0CY:R"[W8{eUIob&p@+kltkתdk‹ zF*h!қn8akSk~v,ےCƩYm!i> sLX?L2/ eJ8˂b&ֱ*;t~@6_KGn EABtb3bzU%9Ų(g%镡F5877nbIJkc}Gu^.-bzl'qsb7x&7>^ܐ_'`~GW'#P]P8gN;*5?rw8 M/Ew*ӠҰ>ӎ?$vk($޸2<8%)qw*O_>1z i/?V$;gnxV\5vRG߻9W*4V+(dS=C@v,h{) %Du^4R< Dhck@}dgb,x(;zӽp9MD5YӔ4ҷjo8ABz:r*\_+ 9e72GV;U|g_'Zo1ESLo3 gAF,fP|Ibb܅[ {VĚ]R ź|_Qù2!є3SL,SKy~+֡Oh|[ y\6w(LgWjg%.ݐWmثzcFS hݡa.Kz쪔Nw*J_\5m>:FR_ǘ$4sq83b c?Dc?+`HS#]U"! |ߤQO{2 لΡP̵vd  /ؠ!<7D+rry=H,(|WW2a\Edmh#uI76I*羄xmڪ6֢:QbR=dR/;ֳ+쁀R&P|C`0:}uS;Gf/9sEx>:O.ѹ#~mn ->+7g髖"a ˨=a)M rnIxuy+:ObIo&}28 x<*4zY'E(:N5c+wa0(͉<߽t{$}6Z@ .$ nXen7k&ꮺLr/d ?pvՂP8:DU1ɶ÷iZˎ:RZ>hMnh>Q_LgJ[5e8X*>bȑ˒ Qnfÿ g꒧n_@lR֐hF ܩ0-gbn`8v1Tg|ϠUQHL"7GGkbs_y{%ɦjxQH?cJ,S'l#u Oq1-m%wLs6Z0{ԅGV_eJ:@LmMfv׀_pYYfIy܁efpU I f}; nnDžf].\/$0% MO2`(J6 KEr1bl2T{Qd7[WݹJiqn|sÔ_r xd"!U2t.G-1uU}C NӉ"&0w ]r̢FZAjSŸ_nkQ=E{8µ3z]OUh="_=`543Z V[ewQzҠ>0MM[5򇅸iIspWvمm|)+]^ߘC-#Gn#2 nB=XFW*說z~2Ѹ%@NOJ[˛w NUaYUz*o=LAi s7 Z7@sn+q!0L@hf4&!F`ST}ƒaxn3|q4ZIʗVEull[3uK-qLyfLiQyVm \:pZE)yQAC)x jPhzFL!qOa,u26`r1L`m2tb<})rVl0֛X B!~wQS6y=/)DunDEMtJ3?UdS)_*ZaEHD2 6/".=pO^ij+>|T(k]I1D5lÈ8f e̬9cg/xe>uϊ'7\/ *o#}0{> {{[df/$C *35KEoR>66Y+XʱF{4$d8N}`"%T[N)Oh^ k؀<`~ԟzg}wiqM_"2^Vhf)J &^*ɝp{ƽޚ!Ey9 7邐bžlzwj5ԑ4*Q9^}dszF<)]ak#CMWJۢ6նe51"ro8kEyq{$ Í$ycTc t`Cv+1[ȷ0ՠV4r⫡m|K{gYMNer7ӋJ0&rBu%^MN0$5[鱗n>МݧUͥ3ѧ]#QG93ȓIxmw(Vt/u;Ej>D&%)M(Z闄U cl,DP"[".x"Ha|NU{Gί=7/*RԩsI{D^{.C#Vɴ!~I0L.p]"Bw4ꠏf"$VZX (O YQ3&oCeUtxaTDnL+,syТ Ӛ׏nN`NJd͸%E GRb]i׻%D@G49S<9.:bzN ԑˬ,CM_Et6X-͍ uy.zpo蹏4Nz2r>~J1Ǯ/~K^|}"o5aAi.':h?N.;oꄛ~mf.MLt,[ 3KWWp0Lޤw^&ǥy͛yޖ-w[cyInpߞ *[ueVXC*4Fo-)اlGhZi܍qA22Tcoh2*UF&twW%l.t\ol(Jw*ws2zi;lb7:Л'.,XɉB̭mAĽ6@iwF&i.ܺd [|M&srP&Y0x#?>g)>}Z y"ͮ#}Vy;Uo |vQR\FIm`":V*U.+gVzQ[2s K6ѵAIYD&?ȔJnt7|pp(vYsS ^Ui"Ʌ\gOs׹E(yvd wCF4|<"S(q/tگXi,RL/ шw `uudaa22,]CGkFﱿz1LiW<.1Cy;}%~DF@﫾S[OQt|Dfs]t]: #C ?sHV m5LLEhݏU^ P3~[jժp#ҞΠ,/O V,k.=kNNql*s7#9z礷PPDzK<ՠzX(S|nnYB`z~gİOk'Ɍ1P 2-(g*҃h%0M|};U,Vvc5h1@}#cuqT4<=k'TIU3PSM:~]NվK=@tfx1"jTxEַF{)ZcCчVhWɇۖP偄usIZ.goHE41ԁ%HZIUY.߰v[\}{OU[FKzգ ңj%]^aI(IzyH;=]ۍrLh }c٤-ܹs h9dѽ>ag'm ow0ü~yͰ ![@&pSϗ>u7q0z5/@܈ӘFb ݤdb:sfC*3B1z|*XEBlmZɐOW3/u%HҿK]^ q^TS8hA5 " }w5hQ̄}v;11Up>0;l\| KcҼhIqЏrX'4 c1\at}H6x+aijiH!>+e5P0عpPN2qDN8cQzi ;emwz6~^W4Rm<±?MMA8.ڦCdjFډb[qǣׄWoj\0- Xk7U4w-/ cвn9&ZSm_H#M] 4% iuIlY6 B^4#黉rcЎ ɞοN ƢYR@g o?3M5wWqGf^wPp1{S>Mi)֥FRg!Y%!Hl55ƹK]L3US9q/831XW]!֞kڱkn޲ ؕ6n6xZ z2:2 +KtǼqۨs[fhj\Θ}2\*̉ w3UC9 UyM:=O,z1`e3. o(A@jsӕA2 ,i{d-XPͪڼe_BJgT7Cb 6BGwJqHw ΢H#Uf躇<+}}cvkg9kD^B"w_gJYUU4M[[4-PL኱[X%-D% +NC'12p\g2l4LB_ ' fI'F =0:Wl}U}s8>0G҅󄋹 A泰)N2xe-Imؖ; |GL8W(E}Ă [ނ}.F0U-l+#SQ:X/1?zk4~a .6ڠwV`iVQYJ6^`, ">U['׈af^(%)Fa)^UM~/L|Eo0:k5!1L:JI8 䚠TbD>66!#Hn\{mDMt̷jQF*V>(ꅴ/$$Q:R4ZX@jI"(>5;…a9 $q3HU=j\@5#RSQd>21Ƌnoq0Z/EUXY@hD462®>s,.5Zn[jc{,R g8w4Vy`.mP) Ǎs^樕se:a*&v"5Y;&;uvJ\,y,^IS[L;ZU}#S5FXJ涋Π0f?Dj"a*7l@:B_ y+ZQR`CWS6q b1=0^FW871 HOy(ːiBGRPn`/|O% ۈ?#]{9;J:~[b7zZ+vV/FUSz8힨uE~\p \A:\%2 PIB͹ 0]IFna^.jD؋TLڀUVE qQ=3 S@r[ m6nN>񀍹?iTn-T.ACGhYX)p$8@f>B*ů:R!sٻ'{cNi(*nnendstream endobj 311 0 obj << /Filter /FlateDecode /Length1 1457 /Length2 1882 /Length3 0 /Length 2810 >> stream xڍT 8T{O2q}T Yb6YFk0TBe̜\1s)J)EJ{T֊*EIҤk3y3}߻{t\3/d"1H.* Md2c|hO] E0X~Bl ٱ1"I@1[ɀJ&&رa.p!'D][T*1+ fn4@#kP a?ЧcDH$Dv  7H !.Q+ف85"Aâ/5(|!"EP`·}!ˏȲ׷¸(bJG&dנ Œ)jR3)WǼlx|6z/𳛠< 1?vXj7{MAW`,)_V|X\ ?@:,pA@~ ąŁ?G16! ď a=q]a?karEE{)dO1|87E_X7ǎLreG55lJ 0 \(dLڀDDP O8CٕRpPoܤૉ$F1{ߙf?L Ҏ{B@P!<rEu\ddsKOp=*yzUC+'8-5d竧[hٵ'*: ɶ~+ggY:frÔ=N^?"T׫6+m#/z5߻3%|Uzwo9ؗ~녙zwX'l2<}ey\A SEcAڼLmf9#>eq;u`9ӹcѩ "%cU6<*".oJs+7fohԣ,փCE>ź4MO`*pU-5Flr61/(y;G5WvVzp|*_ܫxMM7_c&ZmwoPɹ>^TaHȗ¤7$1ϮJWϻj̸)e懲;`^eDgUZfv=[2oeִXmc>@遻m!S_vcXQ§5Y=Ha*G)kRoǙslv-/mA>R$\.ztlSS&۪UDFér:{/^v3ILw_B͊F_,VɅN=ۮ:|] fݥK@f" FT+A'>mU0b#C\l='N77}>څ>#lkk548%o,Ԩ? TdL<`7iʍ}w:{5mT^o0a-%?"~RnvjdCDYGOVkSvsdyGʋ5H bA.N|@WCH:]"]{d( gv=gZooPVg|[S:/r 5?;o~؛ॗQXԸ2M'}fL^:=.9f׻zxYшafT+zbƋ\|x.}PΨ?&9=s3-LKKMɧ]endstream endobj 312 0 obj << /Filter /FlateDecode /Length1 1449 /Length2 1862 /Length3 0 /Length 2782 >> stream xڍT 8T1n=xihBQH{f6ٛ=SHCI)JH)P*=(D[wz}~}{Z뷶l#"n8F2h pdF &%Șb KP,F`1H* 3aX@`Bg .. /XcbGƊѰp<+0%UEpDDȃ] #pӣiHBa %"A2FoX2Q _8*D4,F<Ry8e{ő6 PXH!S$<.X .$ $ E?J!Ko[QHQV'HM_ƀ@@#/o8& W̗s(/1''<ę)ӌ X,`am /g /FZcc8e@^g1Q-1oT2 ?bAW 1-PuƓ*CV|$QZqmbDi7Ŏ3M;uʞ,Ip{,O~Lsmv7c`5rm&rQ4i[)evyTWXeæta<ْn#j*zhjӭ&)'V9T:8h>͞#ph|LgokuQ3?׌y`sz \0J<ވ+T~ u|jBRC)-}?BєYv K {743KnRkpŹ>8 >e2MƧ]fNY-<RMٵje}Kw{9?J-nfʂ2ww뾱9ibExf>J!<[R-T]FrwS1z3X|U^V7x>CnVUf}h/89t2[>W|~PYR 4>}Ґ>mՋςSڔjz ҉G)DgM;rcۇׯzZ:}::~M`$("JwQœǗuH Zgڪ1q8]Q{M㊧\o^{£OY$-5Yx:}^sPu:XぽF [F'5ME]RNF5jy'PtWl\hoՆ-91WM~ܔTu<)4ΙKn,qz<4Kkvm oDe2ѓlM HɄ8򂐼μ):g;uoP}6Y`t)gkKη_(!f"0Zx@38\4c2bQ>鮎8r6Dtx{ :"z׳f*^.<"[{u664_}\gTo.)es!{ywdSȓkG%sr'6w%qUN:\q -6f10G]ciT7փ W4.<_BM=[Ƨ$]MK 7J[?28B^G^_aytAt֞'ֳ9lmw}qQ/w..Ns'RsNa2.5PyAxVisM袔ȒFCY1DT]pq ͉2*/mug_g>(gTP<+ĥ1oI#c,e]N˾ϓqo hSRs2FYۣC.Y#=ϴ55'A)7uW7d^\k7_Q2M)w>[UʨU'‡+)kX]q5JYRv..tHw7W sendstream endobj 313 0 obj << /Type /ObjStm /Length 1690 /Filter /FlateDecode /N 94 /First 826 >> stream xX[o6~߯ z.E6]aE5胛(6$kC],ʔ>$;߹&%W,ek4>q-񵌛 ߌ I_ǤrR 2)G_ŴjfRa[d;L#\O9J!HFR1HF$4I 2% NS @2$5+ { @XY[,pQ@l%R  dG҂RC2az44BA$5\7ڡʨ0Sْ.",9 gF9Cpp$kSRjamJog)i VX"#hXGNC j(4)(I+֢G{#ɇQI2jFϥuNP=,,燑aC =2A#CΆ S"M1?b ,;C 42j`T#*U4b(ŝ{v=o%iˮ}+vv~*K~Sag~װ$;{YTu OZSOtbO/߻\W9V[߿.MծHW82ܿ;d/ `*?T}`ŎID03ENhٞZ)3DS8*xp~Gn( \|̫E w_sKߛ&OsvY5{PMwhj͛>d8}2gc)ϾuaO2km;-q@֞W:>1r: -%(eNB^֛924q8*ʾFZ:y0 mێ2M)"%'I8tTTr){ u@wժzɏۇM>W*<P*8t t@'h$j["z2 XЍ*yYUƗeQշ5C~껲-90Z?<̓IUd-_M%zY"ynp` KQB2yY[:׬)9"#0Go .OKM&WvJ.41TJ3f^Xitowu"nU.ߚMpDKMx(XLEk;u븶f#'ң0{bqyE?b-Yc~lػ1ਰr)4ry5O3{Vp˚%^6>g秼%Q|]Α]qgemqvvˢAТqO4.ia#r'<|Jg"9JN#O kiAiF&ą4<&5)j@ƔӄAamDrЬc   e&7Ĉ^B< 3c$DЪ^FbVgƘd05TY>lI{x3q&})v8-޲ybW@m;?ʿa";Sx1w){wpC$[\t$GoZ[X`eLxxq4!Z(5kEp MSOEXg"d;.t ; ~Qr`7cQ(X7À-Ck:"endstream endobj 408 0 obj << /Filter /FlateDecode /Length 1392 >> stream xXIs6Wh̔X4I[93q'mniD-DZm ҮnD,o{fُ˫d꿝󠮖 \q`JԔ\ ]C+Y.;bJR@/x6rT kίU8ގ޹endstream endobj 409 0 obj << /Filter /FlateDecode /Length 245 >> stream xm=K1ZLd|lFN-[D &`1!;2&pMwUa@\P ol+V\yLy_`_ʳY+!e2_3Ϭ *(pi-$3&;sOXRBu;> stream xڭ[Kﯘr` EM9v%)g|r|Jq#iwvxQ$t7_47毯7YV(&10+[ohu?+w~Ͻo,;>~Cô  rl~+.w̶NH75AZ>.woNިL;.X ]R/fܫFdo D{Y5z[xlm>_Q I`E '-|>4#;FO-hT|vww~V8k]C<:XҔfz1n/C|ܐF\`ղw63VEW(-1uɴqYwIaQdiI&k;uy*tQlO&Cůdg  O}FI8nO sAǾ.>&D0YGS4M,}'AA]pů(ؒ DM[{깕\^1^05bv!m>{/ZtsSFcmpw ;>xvyiu]$b?ۙ*w-]<2iy>5d8^d^@jDFCR/pDĶX0a$rfח;0V[+ KxWH/ZnmEz!XpҲVc+֚ '80u01Ɣ"s';Β341tQ&`B|q *a- HO`_OO);R;COzb`8ke7MneT񃟽>B6EǏJbBw^GZInK0n㭳Ƨ*Άqqf9:-UA7w-D ww9.!EOAW*x$ڢs8ho; jXeƂB,km0 4/u՝`J0#W&_}tH~ J(Πq-EHa8FbrU9F(X M~r0WgJy&8D9<ёm&:wqC&u9?a^0mAz Eޠ+$sݲߧ;Y < 6LtR6 vwSoty Dw?ƀa8Fr'5ҋ$-0-1@wKMRK&D7 ]jfR]ngVy҉Ej,k#V(*L^uKPNoLClτZΣc {hs k,`6+t_*B ?fKxSAJcHR{߰$,0n.uO b:f&JQ]5?O./kY ®x$LJmpT<՟="T"QLJ='r0]j9 0ӗg̱~JT(I 2 QR D?n=&xdž'%ɺs.а6ĪW!uyD,d^AO!ig)4)?ss^צ:-]@8 W\cڇ Yw(#em\:Mhg?hLCC. .B wPLלS% "sW=TCx/+7"'X5sOIy9 W T3ݪ we~vr5+9v8he]wzfvEïKe;[X4׬R9o9hT~qTR2 8Rj؟OVwYraDr_ŕ(:ݺU<;Wt;]v&ѝpCMs$ O6@<@͏R!:#ɣmqcj*rzpCRPxȠe =uwIl?xf1\Q)1< m#>Ay:WL ͯ 9x>ۅ#Tp6]Mi\!Z6F_*T8L28A7*ִ^'%`:`w K1@QL/1#mrAJ=k5-~IRsIGdIVjK^ܣl9l *nƭ{QZESJ3$>FH;iw)}]kKGg#\7ava|f[J/+'|?H,1+endstream endobj 411 0 obj << /Filter /FlateDecode /Length1 1470 /Length2 6897 /Length3 0 /Length 7877 >> stream xڍw4\]6тDFeFE] 3 w;E'z zD I>}5g_w^gؘx H+2 (h@ ^M )&`{E0P@Ah"mD>882D`w PC".l H'/_K5'OLL;@YM5CZà^ !i$zxx]x([iNn uܡ/-#fl};r=p5pC@(zs܀?s;ܟ޿HG'0 Pce ^WOWne `w0 B>9, IsruuQ βtt"\]~OZO`C@l~9 0g7&h?2[+@Wx}/'o%/1 `&@/;r߈Y0?b]|` B{en/w}J54`N^  ||bBaN_K?'* :yp-8NwB{ @B ky~W@npo5o;^[=Hp (#֩!D2 цZAC@._W /zܬ׉ RUP4{K%5k` E.< | znltE6Hz rDV 1o'] BnBS 1PO5 Z"M۳j9:/Rl_ S9y|PmnDx/92-N^&YXS8g/%Q /cT jye7|:> rjPcqv%#?U+Q%NxU:kcT<Ŗk9MsוC}OI7Lj/vb }LO{/tҲҚ0` MVSR]d`1(F va,}a=ͷA kaq:lirjE'~='piI]'$]U(Cj^t@"NT_+N/z&"UҽqK03g`ey錙ZWo:-$?aΖg.'e4c#f݀AmC9aV'lՃdK Utuv璱B9>|+E110F2OjH$+ƒqaI=;PB2 !fjS=*NiB8zMĢ_J>fa30'q<>w[ChTRWHv{7U1:/Nxy;waBca"sG("Uj RSE^:R,OHMz$RyE/o ]z"'aeE VRT^I'i`}} -vep>P#ElDX ~I %n"S(]u:FfDr=P"աUm˙#ҍi:wo RR&r4"YgM&DnIf :hYW+9)5>ɪ L )S[qU=E bw"eH( (=/';ɏ2@Y=0\d[P+zN#BvBS#7l?[$]V(8LeT>O%HN j0yAA>Ƙ-j}aK1' KuOB"~eV`Yt㰨q>.II=!K,wbgt4rWX810& E*%,IL>q2%nL|dBhHءzgGB4Ҳ~ȘiVUVfHLSud:}lNM($J5mC8@1]mGĽhШc6@i_SR~̆}8܂caN^_DsAS_8uI| TmR_r$HTj8= Crqd |SFhTh80dyeHħHJ@i\9-.dqizOHFS`Ӗ:'S1'f-7r{gͲ::_vܰBDnE9y` súz~\#]F4=* O)(z{iGal#ܹp 惡إ"(Gl2AoMz8CdWx ҂շ8v&q"7p,G--wF!c6b, Iݺeΐ0(Y702t_E [Q}7NQ?,,'UC W2I9I=/LcOCukTLT{!P>[y-~D9|u"-njb&Ż58!_ں6hjȱӞ*|aAqL<7C9ֿCܢ1JDs.YW2%V;IbuԹvDh6n1W6#۞4Y4|}]USJ{Ev& ݚ(SMn|֡伆8 d?&BHʶaT~Ɠ\)ұpq02])kMۛ, 3 (B+eR3R'~}н~i;g;UՎP>7`ر l5* fR\SGO;{BklFӖ=@h(@qՄؽC_M] ̲Yh Q/]O@~ʙ%So6b LBqⲧግyB2#Wx a@;lȚJR Kϰר 귳$5"H Y)8fGA936 ۫ƃ\E !Tx4Ni(?^yVk2t`#MF;%'շli>oϞW'R+Ut\MjTxy˷6vKסoP%&sA7]}2:ZI$ -es ^Fɼv?WVs2W:HGHfu^d.@f[=*_R.Q#S[`=\B$y|SȕYde4pz}PPaUb !Vw"y+J B*TְXз+ś*;,ᾤvNV q߬oJ\ ק\I2#}zT{QOh{F|նɠ/t5^L z$*{\+1(Lkzڴq\2ə3-k0g|hﱴMG| 8:ޛZv({Y/((ĸaeR5\{|;Lm:>(]ץ֖A?ͷJ&v$,;GzOɄ//B{=&؏ K"_XH>,JrV8_BrixF&%Ȟ_c04D_.!io6eYvRYiN^Z ZA] dĻL.ϒ;q| 7omg0!=$ڂ{΋Z8S{C_ӻM%TieϾϽ,= &Ukir[wfgUR#w,CI@f2VCU,2UppN.$?o8<#8'h{^p"90zISZ :إsja?4rUk4.笺vnmt1W/LSdز֧aã` z[QE~ - oi3}vA&t*7 g-\K7JKxphN^ymZR[wZ(M߇l(w&שLx@̀Iյ\䢄&Saњ۬e]enP`bR= ZݼJoFʆYzW)Z4d(z*ѐ"xb!M̩ 8Z$ՓWܪo\JS"}87˪`vO^ܣ$RAv% !"y}뜖=(zzbReR{V5[xdoV-)X9+. 6Zh AwŜRǒ!=fRb[r /t ǺT`S{ߚjt7c&rR7:Q9ԋ&`|?V'cWy^m`jHާEP_㋴Qֿ/V[x!, &uf ]lTm"=c>edHohT?/r(.{y(?S:lWrOe j>n"ۣt~N:Zf\ΆB3:!nx˘N^瘮FNQv+6伐EӞmjA7e3]9$q{3٢&VB ]&TH!vf.iW$X|Ft eNݬ&֟Tiud%P x~ݸug.y n%^i/YF˾LNĢ+|D; 0|C'jR$VNy .rx.; éQEY%j._(T[* G+^60B&Q uT s0efT:l W1ܾ~U_YK'xdq<h g2[S=)3^Sdc0wn ¹7m#ҁnRQ${)YEYb,`yn76$te *(F"'^ت> stream xڍPZ Sܡ;ww-N ݊w)NqJqw+V;\yLe{=KvȔELv`gFV&>*/ JlJs;čY+;C;G>+ =Ao1r3:LcgKۍ65;SBX:;131:19Z2@ΖUh.@71&D*%_b5;sg7cG M`2\f@G5y=/c0]+@ Ʀv``$噜ݝ` m]A6&o'n Q7;'SG/y+LvvB+?q#l63=ś:WdK=d|Ar2v]>^*!@O71_ wX6[fv`n.߄sx18Y,\F/p[l wn,DxEvE9hO,,o_o3WHK5x[6.o`k+@.W+l"` $ r)M-5@[xl0ۮZ=%No[|[Rljgαqr=8^oit{L`;7=#_f0K%!ۘrA<f/1/ff@V3`6@h<-^,dso36r$;S)$9ux/!Up.j?iA=$n;H'N& sqۯvoV+x>zK)zq;hHpy:pNjX7dCMN?ߏC3(I(ꏼ WBi3Ŧ50`Fc{&+\^\[V}Cw=oFȇwt3'~(<Vm}ٕ ҕ -5R5Z]0Kʤ:j0F_[si|CZMHKB >|9$X/)}P+ Wit'U6,SQoyϜ׏<(eBt.Ńtpn֕YE|m :t/Ër3yr'R#3+?M+J :wў"W>g~s"U5Bi呆T/p4x7MAAXAe 42DpwƶI}7yx@P廃0S4]ieko0yТoaa9嬑wB`\̄w'Jh=yEӼD٨SF](FAK.Ʀx:VE:[c]QǓn@Ѭ?W?N#I,c)' )Z\& V^Vwʞ<;_L[mw/ǣPS\_Vwv-4Ռs`+~DWW9hͷ'94Ҭ4T":eUp}.*q=55vhW+„Mo))74J f|n"1oDLʹ_ec]}?>YxezgsAd[IfHTn2ukϩBᔒHyg|\' I{2/Y\]9Mzp)AUJnK!ӀIJt;yFMXŏ? "z* )0%r7$Q@/Im _d iU t'{LX/7<@Za~~zT0—a7Ɩ2rCqF4'vB^iK $f9$fcWyAn8 '*^lԽ"Jݢ|- 3:Syh/4W qKI뽓ݯ>2e2ᖀY KF`vLI; د,:Q!q(mm6V(*76YZu#;d!8ʰbK=(k^򬕷~0 0 -ȑ59,CoPUB@~>q@jw(FkU:{_87N&Ԏ^ct69ڂvtCx(_)>I|!V*8$T9{86.~$KuWљ+F^X\ƚd{ec:jP%ĵљ0tR!/ iQf՝I۹{h!^\{%Bt.0tڑztFoռV Tl [zCf SC` T]t !U'= o\;&Fk{ǸXG8ǿ5z%;7`uM@&PkT"=k/qhS2V9:_?Q[B=QbpSZNϑ~p/NQ-7GӑItB%` D$ kȐHyjdb}F**.ɲmhF!>0fJTU'H Ĉ7=e .TodAH|J&ma'Ut@JܯyWN vcOt۝xw>|U8u! kbfiCuJ.^({g?C+NjĬ%^ם(?V]M>% x\{*'ʐ#腕jqHuI̪[»4jp>-Qqܐ+FVήaB^1˖JH/BQT;ܒr~i^Lyl{d5 "žPE_ D꣕F|$;)PxܚBRZov{XЂY%#U%u-}PYbqa@•SOY>%!ᲇU*)NsԺ=HH=n1V=]!1~0E*cK^ 閟w=dA r7P?^P#:N5R.5T*)T-[_6݁kAN_żtxiDD!Dm1,$"lyRDŽ&b畃JL] 뾺~/bKq F/匁,;;U1FwQ HX-AQzTOQ0&6zkZ?[2ew\ibTWJ6~}Qx<ԐyPeKs9BYb{CkkЂY긱IJu~nЍ9weAF v ;GCݝ0̮Ԯc3'VP`C5@wE^ gXrP}DĂcCLȈJQuE&}pYӢצv UC!?nlX8Fvd{#\1 ^Y}p@x(]ydgֺa0(%OMZYFKQ_N:Ff@OJDxԄ"O'X2C:]TǶ.rO,eYZ} XGH:prU LF1.f|FYjNni8lzH,8hdJɹlURϕ.4X;!E8ZD`yGdtAd`g:FGO&(kqg)J=w%We0`ym/Qa}+% P;%gZ$lyX]mb/;V_uSKR.:ѓ,]}]I<+cm1:I+>%Izr=ր:q" DaMndhԣphj_fcA.BSKppxWCtiAsItb}τr3U2Dw jWU='?;HYMDTLj`*a 'uvvI,NYr(6޲*b!/WI.xS&i]EqB=RK<|oR3=AΩ&NiAz@zY5蟢'z:?Z*G&%Ɲő3z^j*8r!Q-wd7:b2b@qL@4; ڿX@̍{m5jȗ}(T6Kv"y鯹 fz/4z]Zl}.7fwɟ6؂u?=P }!vwpoȗu0<]>iׅG?+т "{~yjr:̑"c˳ [3@y'튯J4p2}SżNfw@jEy'^~jDIdDM禝@iC$BW&_ƅZ"bW N|cגe6KλyKG?h~*4|wmN݈:X_q3pIm[+EˈSX+W;vAM/r@R-K.,,G;byF_;)L\5#.wHy <8E~_83jM6˱e|`Q*L(+][I|_8ɻ8`DLkBaFH{M4t 9$BG0rk7*BGA[lTl(jC q&q"h14]A|q82B;#n#RC2)#jw&F i_t3j}nƿ2ܻنsrh/EDR՗ mBN .Cw8'mr\u/ød_Ű-2SҦHP6r)7pL:sk3Έx}tMZ9Rhȱgf4)91R,1:4}j21Oh n/7'ܒmzV"G=?-i +|;KJAY=8hUt)}R$($>5\qð S6g6tj,(bHd}C1_R!}~=8d.R6gB0{B!E JiѾ6̭5 EUt*B A@Y=ۙxRliؽlˡ+"/ooNԘxg,4!=[kd+uλCM, ՛Ba 䑨yz"Brv~PVޜ8cGlC1(3 . HC:}8 _&{>!Y=m&Lbe.zΪ¸Y}(ͺ&zbDGSH>BAZ0_ɛAH355OlU ˊ|3/~x|:1Js*'^R3CSP81Vr.0g"m-U[쳯_f%D_T1dYm~ .uyL/>wI3.xw*򉣜oVV5ZVGQPcٌ?sV.d/Ee{kπ4 YwH̕mhE:gk]')z&lCʟax&I`6=?{$N[UI+ k7Bn'b|i[q*O}_9MFaJ+g:QVst\8?G?RiTEܴb+@X*b[Qg&7݈ Xx "fB8B{ W_Y_CWg,(W4>"WW3RWb2VI6/! w({)c.H8#̺J!1*bbɭEQ>Plems?:>R Ɋ4/`-WJ4صCwZBI7ɼ+1tb'Jr,ȸ8J͇F l"s:3WJ4{j vND[.9&ܨS DqةMi`(傈/I7-fܼ 0ض/ri'E  -QںH0NKH}^o? HG&^q*WM :Ċj9"PNFz -(HIeBRN7ZKV IWnLiiQiHgO`z٤hO?Eo6t(s;D._Pi绁n"DF{v[=Q#xBFd@E~m%^g7_P _NQoV@C906;,r~ij%֥7rIE6J7FMr.*0hcaO#%/:S~:IӦ5vXSN% |ܴw_oI|6ޛ,%.I-:dGcW½[6!3* $!L [?dYўJ|6`JO ԕ(v[BmЇAVTdO (HqBmJ0q|/(XK3`uC;>yf̉}\ß7e5J*13{˝.N8)+$܃5an} Ȧĕ?o #9)2s{dGTzv t>׍m8^llIsӮ#ݷT{$.ڬ $ۂ84./;aU#L;}j2|i!aKKc:tICl; 77~4w q~v֓_DX^n#?F|i/_wLmR@Loj X*`<1c %!Os$ s8/xL蹞g).$K[K;S/` `{,1".hhH+JɶVkX&*0`5ej4_ڄk<ɯ{^L#͇9ԴK%->gUɹL4A)hȺʻ$Xi ;?`>#?rl:'e%N96 < )B y=t}1lx$]ؕcUϑ@":`9w]p (R4wU}}. 4@?i)Gt7Y<2PN`憅NW"ljqGPd᯶i+s-{@J1VBB蹿}XIF@u+!fZ"&᧩~wFFܣӠ8Ȅrlܶ3\(V3Y(i`T9MyA'ӕsFNU##O\һ֘$p'[ Ce*@fș˨yxa~bx>39=MAǒ#;$ }q hϏ‡ؚl'g-`RW,qIihQԱR_=Rbtߛvxߧ&K*l/)JTtQxJ_+aPh7nVn(^aʭ{#Ħ4`dv? A$VsFs"Y}w][7 + 2^eԠ#W=g5Ku?|~CI:0 -fL#ԜzJ Lt; :\|9F=L~ +=c1=.[}nbt]f h`<ZP4I1VFpS(Bעϲ.)bUm"ĝzrjLU/|VܷL'vefy"OJբмuZ"t̻ dC>T:XPPWF>J_);E!_nhѽWS3I~i&O!`Dzvu8٭&+cX<>։ VIDE40vI+n6A?`zSQѰ3, S'u뤾WHTr9(!%Ur7<W PAQI곩^*^Ҷ󁒾ænFXq~!!| 䠞.wjbU"*}s26KSˋ9a޼;q .2}7EړM94GA-iL5B5 ȱΨGL+^ۍC +?gxOiC t!ֵendstream endobj 413 0 obj << /Filter /FlateDecode /Length1 1385 /Length2 5960 /Length3 0 /Length 6895 >> stream xڍVTn]RESBuweX:ABTBR@B%Ii)鐺k|w{7=˩o$C߇Q(HP12@ QHAIyMn4J] ֦`q:hp %XFA ٿhW9@⁀:m4 FʫvvEcezXVVFW8wE@!(@;a+B!H E1J! o8ˉyzzBDѮv7O0]=0'a@L0Gm1W85 P8 ᎂ]lqHSs~? BN7e"p@OM[ (O C< $>@M` uE8cDȟ~vYSF;9Q7ҟSA¡ض{# sE`?IܝLPwD@ 58w^P{鍽῜f,_g3`%G±?n8quwǿO`0C@1}EOvn+ aw ~~~® Bz5_153UuS㫿SRB{"ei47/ğˁɨE9`?k!G2+袱 Y ) W?_RsG"~@z`W+BKYC;WCe75@_SG"Pp}@ }ag%UQP4ĥ+ě;zI c {Zm@L`C,=Js1ß&bkؚCI?C^6U(z,5E%wDJaƟk?RrQ1O m{m Nv+m=i}? άwOrlf|HZwͭwX]k*Nw4]6-=ӔA<Iw1SH+Ӝu+;FIEpƺ[xy˸nGWIuL95 , NrfIv5_MYEV v͔a+k,2>f[Ъx BiUwu~sʏ|cl;2ḻ!'G2%#t뗗&vO0k $Kܫǟ|ypw$%HT_fVTnnքd6G*狙<7)Fր w{4  ̈Nk*s[Ui 0 i4PvzjeeZzrn>{ag#{F  Ϋ*gCTq:ZѪ*ۖ4Vu ~#•엸Yto^to^)8l@6(r`pv hm*D?2lcFamNX fsҿ@Bl BO}Ĭc~VgXq*ĬD6Bۀ s#Ũ`K`*}G}wutd)_$S& c()JgٵQ^v v5?Y{8;ɪ49@lzKq*M*8d4Mp=_DMb4rUq—7x݊tfdk׏H 'BJW]MqMX'%ȅNc|WfJhc-rK|/ 9;}$9 7|2mYREnm n1T|'E w}u>$AnQ[yG|\\a<ܒ$JNPW ocn kdd.8f$Gy.Agd bf HNh:f`J}aY/jN֩|Zv79.{Ak;X9"BȑEwڛ>2u͑ʱ8yL`ߎʟ5jsgȶhD8s:O=W!|YeҺICz6¬A9nr|MΣCc Qu-d۞#RWX8n}McHaVO+w5\T{7vimTABҭN+85ΣAt<O1z.\% ΟnnJJJ/o-k4u6L`TZV/~D BÃ2YCZ C˞!^GF^=^ (s)Ʒf$[j '? yq>7b1{^ Of;&Bp Gp St^=`1)Y<^^E>D{2f_ae=DK8GG/x's:YIPUԜjPUwɾN>b8 =;3q?kV͓b,{_w?lݯ~Z!BLCJz@(e`grOG9 ē.un 6o?lʓR¤Z#y_F@uT$7/v)$ю<]m": kF%d!t}w2رR]OJ2zhI&OjDepss'gΉۍ̦D'M{rY:K)aĒsdIx$>] ˣG \1jB+">BuJ&;nLhWR?j".NID5#$Y-))Hf٢_a^68H|>TH,* \ nՁ.) ˢ=\m w-zp,׏2oG1>IE,w }Vg zTiZ1}ZkVejauUףQƗ5'<ß=^'NX=a3•_t}Xc|II~:Swjj  a\THGPRS굱qzRRl>yɂbYR/` 9쇁E8fӔGY6(Q@*A[n,e1>vum:N"*zq)5h*c `cqzp| abYHf/(6JRge\}Gꓓ-_|1曉U0U-ӲJ ,5O 卞fhӪnV}m"f *ԭ\\r@##.w@/G;EK6~4zB-YE熱ޘa/؅dZ L'oMyQt+b^r>E5_(?nbLkլ ~瘩-H_wcO>-o \6iΤioMmiF'i_=5=wt=눨ѽtooK 4s˵-si<0a lǶfoC#)=V@ kػڶ3NzQ"wn.Hp x%865NT0I');Bp_g2Hd7gYuyhhU> IDS}_̈́㳅rof&$v;訝5-S]zq:^%an(]M\ SAVƛ;Ď|-xk*Xj ^Ѐ֦vLvn;=7B7^/l}d6h|,u>OE dM-̠vSY'}*=L<NޝGuO~}y1gajJ= b@_:ǞX~8Y$ayF_endstream endobj 414 0 obj << /Filter /FlateDecode /Length1 1407 /Length2 5961 /Length3 0 /Length 6901 >> stream xڍTuXԕ^ڥiee%AEQFRRRE[ǹ}{f{f!=Bbx| 0 @66#8`3(`0ʦ\AQHE$ P BK p{6PQ>h_@N(,..;(Cá$Pq\UB@C+*qqCex^pC{쁿hu .؀FNp?\( ^p( ~䁴WZ@]W3W"8w0 EB>p#uU0 i A!8bw}yPE^'Cw(qs#~H{E q ^uއ?Dp/*HL]Oԕ  @ 1yC1qvxc]Q@+*0ux€`0`p$Wf-@ý%A~Y]= {: ښۭbyE@^a w۪yȨt@qտxʇ :9%HzbiW N*o_>b6smԕV 5!n}ȕV䑎[ wW{$#H@Rj^]+q2Ba ubWryp ? ^:Ѐ_S2F_jutL5U^R۩x o`:Gl 24_LvUu܎~.b:eVYsd{6~y){2NZg$݉ErSޱӐԏ}"ꅊFXNSKՋL & 0op,Ć,F[F褳hJ5*zg;[4<cȕ%W䓜K&~ɘ`] ^fSePz])LqWuiaUheJ(9S*=h+qaDkxN-bԿʝ < 9" 3Ӎs,[G-~V!MFJw 4 +,ƏFdͭ}0SƔ=epz4O~UWfmm!KG>alG!BPC;g 9G76ăg:~'O^#ᒌwU[ߦ?r.|zT9tM֔?JZ<.$Eeȋ3dʳ\BeVrMM#4Ajֺ-5Gy^sK5<顊>+"pӏ8p&*N0mvӛ=vT -=w b7;CoGR?b&+_EzN T79JEtx0M,{:O@X EB ~U/[T,η1βo¹Ꮾoї^ks7M;{VJ6ni둣xZ&` AMiTr7qkm%}$̼)pAX \/%+c#2(!JlZy2 J%ylwlaP$D"ƑaU/ѯ2qkZC,V:脍L!!w=mO͊G`2T n謔' b:Ĥq !zJj$iEZ&T x~ /C>5?UR3G6Oo}kxSb5O^x!\ I\͉;sWI4oľ ("8(BGN86 VoQi*CHަãZn ןv$>mP؝xy=zM*]7v9/.}%5bK!u@`pADC 9bPع s{?.qdi{FX Ho* iCË(]y~n:kXgvL:Z_d *nFtΐK/;QR R:N v!6 ~1WY0fP"3eZ{ J iX JqFtӔ12dx"!o>ݶԴsY8I3ݰ*nlw}r7dҁc 4>~؉|^ 84? 2̘4OonVoX :>L)`Į_{;yѹ.F#6r LJ^N62b{$5/:ƞi]TP! Ԩ|sL2DNnWd 3LKۮtϚNL{Xk1cs;1=$~ʵ DF}+Us."Fn^jqӰ㾏#&(桎4qlڒzlͥNlY,3sCAEF]6w#h]<QG$WM6gE1 Ӹ `˛|T=d"v\rܺ_!3zalKd^R z'{Ӓ]m;} ?C5FK^bSsz:{(dTG&s?Id-_)/e/PF=vB$J(Wrﮦ%i]8£}2 3RgIߝc(xKH~KF]M\̝$ Wt54H_EүW%'8#R|3O/|IlLøL?P6ݶua1z\j`}%7"iknx"~2t}3Q!Ҩu]5#/Jd_plt ޷ Ԟ2Jߤẗ!KN"DĊrXYޛi:jXsXٷhwSks6pt/ݷĥc_ Sd|>3<?nm̃픢ܵBِD5֪a|e <tM[3xp"x3igFdXPMګb;šuՀu-Ӎ'6į (CX͇U10 '״;༲~HBƱDr" ի~RF 0\Qr_ӥze{=SvjX&i ),qY )|Q':Uk4݃+2gh;/,[Ef$+0gno~Xh8JȮW鳌x@/\: @-KHn<,?)7]:?>iO'5e5 %O o.a4gsmimjjčQ #G4wcKǞal(7g- ZqelWa'I)\RKm:t/3Ma4FߵKUb+(y-華xR: 3."Lr;7څNY }IK5Πh;Ojf| NYE}ӆd;lG2<>=-P֌@i$J Ʌ@ĉDu'||i[ES:7򬭙8?] E.w|)ǕT}Ml,WV꣢ɡlѼ.|܊=1˵E5UypbVƒ뚣j ۺ,3'[ ; bȩ4dsz(NMnCb_UM4e#{|tc?g6?v>٤NbLi3} &OA]5Lz%&rKfN,pOHUힺ2Kr_Be&Aw߹1?ez)m8˾"wCQKmfCW˚nfٵo^RQvw*\owCr\15 2RB*8 nK1wͳ|}cܾppޏ mL媁(h@rFy~ŌN'*]-A>Sdk"pڼ1p3^+UAj6]`jR!Xs&fȪJtǐs#>8𱣜uSOoG!)‡jO'4l 7Hnñ+~!A"qs&4|'"-t㳬Z-@Bb Sn\a|Ak+vUJWGYnfV7&V]|>;0I} /Lmשu5TxkJxRY?'xjdRx݃VB9хj1Zd[DxHZ suՁR5Lhnݤ>RRc?޾ .rUJ W'3*lΗQҵD9s8歼N:eP[1'NgkZY%&g]gL7[o?7Ӻ_ԥM-n#Tk{|D6W5.]%W3]_ZXe=bR+"K⌣nڃc5*:F4]ɕɳY3~3lIx֌L-T{e_U{cmzΜj]٥e%><.^>|i{ZfT컆k;ryr /|ݍKyZd3^D<_&2< ZᠳnmwƟJi⤒z3GrK.s~I ͡󼺪AK3`K-ígznël\eɂJu931 Mz5oٵWDDmx.K@fWpR֩diKB>x/ $]MbZ+q Gg[ɼm&qNjڴΟњ+F*Pny(;gb6 iD˷Lnql<:ѰN"!vjlJp{NsĀQvWI"Á涧N짞75*+I#,|ucg|~lz4d]*C>tm`lUlSpfFݏ_O5ʇLԟ]> stream xڍtT6CJ" !] 0 1!!! )]" ]H#%%sk}ߚy}퇉^]CaCܜ`@ZE[[y9`6 i1@]`O SW{0Xo Y,N)u1I#=a6țc~Y‚I3T H͉{@ a"=Q⑘ ( qpD8[?faaH@uvZ_8AL / q7{r :7Zʀ#X/;nnN ;bapp=apk f9Hvػ n!n=s '@nb sDpQUe(՟ jqs\MpV0/\0'Wȍ o5 `!^n@=,l~tv0A9"PrA+Z nnf̡08oP;<C߿ތoe{{\z2*l1WLJ 8^^|Y_۫i zp+ Q<0,?OPE( <`YSU7$jo;w C`7BvE, f5 Յ*PKG各[a.r0: ia[.ᦺ= UG~}in0b7faw5qfy,akx3??YOKo]\p&aX!A}O./rrSB6фjVMۿPya!l[tV!Iα6(>ƴzAR|*~knEɓkjІxK+X͑FCy_%u~}`Y)UX=̽S]Wl5r%QgFoƙ'(p4x%BD.OeY8Ѧm9R&\<Sl#h3fh.'L^պˁa,J gVb+WnTIYի[;nÌ2l=Dخj2YU)A $9B]h`ez睷O\0;fD[[خB~,V>6Jcݳ YWWؓ%rDŽNg$ %ipA4+b>#z*F~ 7cnP:>!sF4͑1s#<h1qeF^u;=J m4aUzch\(ʙLuo WenSY暢oxlNPXPmNt}wκӺ[W*5ZXL=WzYHY&rlhg֝'W2Pza{\ FTac[<'2Yon5A};lMkGK55H4,f嵎ƻ5Q*2M8\7ƩDxi+0Ulބ@QV|u0gQ=,I!IN[J.Q5M=5<âbFQhXˁ)ԳVz c\RU LɱkaAcwe@3RhE".[4)<6Ťk>\n o FY8qDxY{-|ĥ0U\ԍ>1vz'CdcL!SGtsE/cfTDx$[FiLV%ivp^D:}(!*a/Z៥2Ho0>.i<.RL0齫ieDt*lgDqUӧ!#=4Xȣ%2ZM:C3' _6!" .DV<=b9e&K9YwE$'  M),IB1jeVy9zpw}ID0؏c=f]KU2?ͧ>P#6&}R!]$*_d֏޻$YS9O, \Jy=^|GG}}=-k;u)3ǽTRMUl%M#Q@Ld̝j CޣhcbGx2t2䏚2Y9.1{),I6#x?ʬtN,=} 9єw˼9j:*x!E4#듛s}׌ޙ橂+oNg7Van|e܊C~3iY̸`fJDC7 _۰sw{(0@n U ؠU`;7:>7{'tm?U$3j^VE?'#:_k *"zw=񙷨+|]h1zz(+nChOy˦ܘs޺>m~QÇ 9iӎ]*֦?8M:Ie|'3J9q8Tly/c$t&eyh(5dTg-bĹ*X1ǵ&ZMpJU;GJ.W]hacf}ҷ-튎bɢ. ZHW/pR'f:Z4UvbWE7;3 ozXZ;Qhs#':f=CRAbCG4;ôV"LTw'7}W")sčce2w_W\-`׽6i/kWƦZKi%>iSڻ餴"lrG.ZôW.6IQ<CgΫ}A0eƋ/#Jnߒ%{Aff5іQJ{ ѝ!{'Ck nXT = RlxGʖm,t3!ZPê^P^JgWNUK0&A4ԓׄbIN܌uO ([ܓhIqw aꝜ6TA6 bjq6vmq0L\9ZdD#~2RtnРn|ѲNSI>U׷ݬI`ğ ^%'󹡨ۥF%cM^qBY_* tGT?LfR9NDfQ|f6@ ˲+Nz|E$HJͭu*h>}DN焑];['bHZmJ')pI Cp57 4&F0ø#7>㽉eFvPE 3 L[ Ra ZԴ&mupH5MYw+HHN:6P&J!q9h{Vgӳ)!ZȹfCٹu&C-7*N0hgI?Z Go'I1|iHK[`ٺ,i>KsYV:,-l"l&i KL?&)>T ՘:Awjn*s0^36CpY=F Â<-K,$ޡ{nC 1)\z\;$]hJK-]&}EBPP>g dJڐ%3A!+M if%W񧵩޷0` arzփzL X}W֤Xfh+GsMac(b2}`p\}~nNAk{OΔ#bp_ ߋcsq(FTGQ;x.rS*mאE`5H(|FP*K*׃a{w=_r4ͅ܎ $P Ǵ.'o8 i#MlhXkNho, ϵ|CCbe51НaHJ!:lHj/em;p^ HͶrY<@X2K^R H2yg =% `j 2Q6Ύ;> q(-E/PμhI~h}3l2K}ߙ7[hҮ{e+{p!JӇ%R{Ȳf7I~jfjYeFiJG\շR_V VbkiuēV5b!·ĆZu8JU& NԹ &CSdY[1.ְ#Zon8ah4"ʏB!zi5ЈkF0% T=&Io5S W6ץ'F- j|jVrIIRvv] 1[iAvـ P0IxZ 2@1F㆐@HjBOP@kO.oUNDBCy k3zG+([HjiY䳓b<޴Cd;Bo8` m[\ꘉ)6ұZ{ٜ=׌ëCRX5y_8;8oW/n#"3>COew` 0Pu\)BRNcvHT?J|I?Ny:3^j*2w>8dJ95|~}Y;>w8}4 L"g,"w3s+/IKZxyA;_W PK5<.קtMj ˱@Ÿۭj Eq}I]Z]Rjs|/uw> /ExtGState << >> /Font << /F2 209 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1578 >> stream xWKU7 _%,ygYEBmUX TMgJF@~~<. vroQr TJ?po_޼|@%py {zp" >'b]Sr˶ͥSo\Z2ZaL;+BȾvռz-X4jwtszvkF_ΏP麷uHO.񯻇zn?^ܮhX=.,6xlA0;O.d^U bٷgp?I[Gv@ +\;BGi KjeL[ԷhJӲچ.NͷJmg۾e‚jH]넹%%teYMq웁r!XW[~+Zi5g۾eC='艸b MjKC+Sڠ+fko7(eP =DOk3zR|51'WJJ ?6;ԫBl~iҪczUA3mW1}eS\ݓ7pk1H{/j D[N@F瓱ٺpw~ f3'1("JCԈDi(+XCKVo.4wX#`AH{;9f-)BgDDx!j$W>1 /5 UX#^}c]',JWj@E>"O!wG}ri %f$T,/5PSߐkr !;$rV(1ˁ_~,C(Rwd~N\aȣiiGAcq\=Ȅɔv)O@P1(0W:QA.؆;nEPPR JܣĽiAcqϒ>\9p+J6#68orN&C._;9+2-2uUv3,ɸi,Bí3W>R~} dz%|wL-|ť]1\Dz p;Q[H M]Y,"|k@rD u|G8 9pt#fKDinN/1ʭev*.s $[3>#-I ,ںOJ@27c0i /dޯYK1 w1; )lQx#a0?CN{endstream endobj 417 0 obj << /Filter /FlateDecode /Length 1799 >> stream xڭXK6WAr1H@n=$9xeٛĶdQw^%[Ivba"3<9\#4rYU<\EP͢e*.o.~̺ѥJ fn}e|HZ[i')+;t)Ub_2^ϳ<^ybWd㗈 ;~ۛyqsB/޾ngZ ӑMUZUˌ&쏙VEimA$1-2D?_$ ؟yh0OF. 635ZQIـ"G/nqz1M _7H 5K;F2 Z㦷}\@&gW1߹e2r򵨲Ygp1 rS+l,mO2㋏4`bTe$1ynrp1o[Ow!~PiA|{#)IAOP'&׳xfRa4U,GI=!@! ^.~^я;J)sq6OK0VPgvhH "D<ۮQ4=LM:I+[dIbۈB^tݝ<`vSn*MyȅM aԙ\jz'^O,U1r5[*J`.< Ug2ΜjqfSJ;bż1{޶!'-Kc@@h6㹥ivD C }¼877!%r2LڃF9(%T6nTqPlbǡBBvN N ǐ?zq-G?z@,.p@.)jFD{b$۟NH(JfpÃa7 i'WLw>0ֈq#'T(7ɳ}β^$2n3aM|8hNKsCG'iqDC$-|ɁdדeP9h!Ȭ/ KS2c K=nc]p2$&Cf;+s'U-<5l[$?RAsҫ6KxO[z>jI3X<9 ri'v>tL*ph/8-Ƶ(|Gu8-藲6P|F;k]5\q; W)qK=f4RR+_rݜlV }Q}.`Hp~w71|8.gșs/.gJ5-endstream endobj 418 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 419 0 obj << /Filter /FlateDecode /Length 2505 >> stream x]~ȃ]D*-KElчKv׍-|{ۢÙ!EJǢ=8Dpgi/w?dzQ2SqT$^i.$]ܯ㭌62IT;vW1_oU0enu(\dY!x3e?اkUX&Z9v2YF{nNhek.iCC{ϊ)09Ncx J@9#ZΥLSGe==<'G}{FLߌg=[!W܆ד^'ohqbGx$ۀ֓焈Ͷ|9f򺖈1sαLbYÿ_a̕l"_њ)-P-|D:2|-&K\yszBWR ?VƁ~*G 9RKmpm#扇Bu{fT; QĥG.z:<;WUCk"IE B:2Lw/ @[nw$vsazCc5%tŗ5Ù:Zf0-QRQ42lD&jD L8 k9Z~U>j7|> E^yg"ϝ4E.c@w k56\#~?" hӳUp̖ZџbޑF}0D"\()C>$~ I=5GJRfYB 3˸Oku Cdb,rgӦ瀒5dHPFg2O_b <c\=ag=IE,1p^[9' !qm4;Z AjZ+NGH@"㖭0= EɅQ;*dhZ V,]nzh-@ T,/}"4@6Ts2$D'8 Dl%f^*kS(_۹0<结RL|A|-SsJCڨ(:i1D | *~t  DZ37>xf"laE2UÆ[bv0_i eP'" EFHjroPDyZU`_ oE,s k/y==TּM#ϯj0h<7̐gϟ*J2 IaIA1*q-7cϿiLhH ^\[y܄[:{&@ XXrSԉ--a^R:Ѭܑ3aMw0|Q^.3Gg`x#z1rqħuvFj6 ~^7nN׉?bpKJ2CO>m8>PM$LS04*&5̸j6|L*W7i6>:BMDsұ9KR=(PD7.6?fB]t>~x_f̯CM"5iI81]N_âx墺8B,-;)}ЮV#f8"HD.]`i,-<[ɸR[, ,$5#Q.d+!KP +Մ}fj6òHP:퐩l,pG^7A[>OGhj?Q,WNß{TGvqS\/$`j~%ʡ.WzqRa2i`9NjNL|DH0מn\`[>2ǝ57̄|C':ڐb6 >Wr^ceeW!kMkX \ԠM'?inBdd^ZiL4s;OXm!TuTb]Dˋ$80O PkQHl&fpvTSBQyJI!Ҽz &@aěl>P9zi :'bJ`Dv-}5avF9-L; \b,D2Ib`wEeM&RDI@.!@M[J`lVB9YBq`Ft(kF4"„^Tr^lvׅg X( {&jHh.J"SbN;'Ӱp!?uZV"O[z0ICKJǝ &9K_,7:76LS&JuV)!R[@ k4̯Va22~hca%g;\.ө{5 rD#C]6猢XL6B&"eF:ˎ(y'rbPwlȯ87 D?j_Ґg*k0_!>wX=Hendstream endobj 420 0 obj << /BBox [ 0 0 432 216 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (C:/Users/Louis/AppData/Local/Temp/RtmpmqYmjP/Rbuild17844b3ef5c/proto/vignettes/proto-smoothing03.pdf) /PTEX.InfoDict 218 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 219 0 R >> /ExtGState << >> /Font << /F1 220 0 R /F2 221 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 3746 >> stream x[K^GϯK{KwW?R$GbdlDb$Osل.V?N=&_㇣3cYK?G9?>yQz_&s#ׅM=>z~<~?>WHVl~gRy=eهsG9O,vL.yĵWd jG:5nl3˙_X켜mCg O;nlV:f-r&{%rn֙bcQV5Ek>idDd\ X5^9 .;p:s*!۲ ϑ# zf6ND;y3Nl %%qyPkۧEg-\^$|FָáK.drHV$`SWh&9:ǙM1Q\3tqne:+Һ [,? H;x5%rvV$sMv}3 W+gw[ 7ăH`DBY}֠iBZ4n`gRޔ7g, ~ㇿ@f,Jr1h I+1/ ]\C&[;[Ϲ s.ҸEEYX=-6/ ? E=QB%}U ) >+ +ߊbqX/l2ԮnhbLԈVD;mXE.A ېCbL"LBJAЁ.F Ԏ : ' !P],bZbu>;k 40|S8$fxjq{nP:40![ך 5|5!ηCېrv.&+nd'!IM%D^C^TN1\׍dBY^r:0 f!r>XT)TΝ+(c KuGRay3+H"D(Cဳ֍22_!s!7T5xq>J#lC5+."sٺX=.tnz}|uxgXT'(j޸Eލ{474.n~oί}^$LGC}¿)}`!%HȈܑó 6szmg8SVn!VFEF~ on>fo{?y?Ceڐ9".{}8ǃM̥2A^$+ګ')E^`bzZح+L4^<~ݟg?o/S6OB>s/z|v7c~]u܈8qʫ;( Av'w9文;pHrʗ$ܠ栳rDH\t?ŋ\AM5ÑQ~`+ }>ph|yǔB ՚dw'݀.7YrK>(WPU% AAt".G"I{Pq64eFE+?OE) V=EKqHA߮UCzEӱ饇ć]Vt!!ѣn@ M.;[6bЍOuS)D/Ko-!=1t7M$X""_뤋]2t@/]|U8d_CS:,u=ܜ>S CcT1Hy9ֳ*qݻKf1ãwk_Q_W{k͕˰ܮ*Iː0t(6TS. w %_fM/GNmIWW! z&ۘЛ2cw%)w|z1˦J!m ۰}mKH_(w<s0Y׸q0D7b>mpo~1Lb瘚t=(M1ޝDЙ֦[j+VLTDc(,#y ۦbPw,~5P1F_X{-9Fa5T;~}P-eqPd 勽S2*nj:-k҈)h|+aӨZ)ҤNK|s"%3M-xC񜡔U~{bЄ|UP=TW=Cd]PP%SڙeCivPQt <=*Mͭ\m>E CR>]%@U2ܣ 襺CbxqJ*c~|N3rHʾmW͢ ʶH*}tŮ_ 9g7T{[M۝=׃~y7~˄}q{4D/`V%n!Eލ;Fs4.nɊ~`_h=G Oܒ~@}^bJik9M>%կCeIgJ?CQ3sd8tqoKeendstream endobj 421 0 obj << /BBox [ 0 0 432 360 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (C:/Users/Louis/AppData/Local/Temp/RtmpmqYmjP/Rbuild17844b3ef5c/proto/vignettes/proto-smoothing04.pdf) /PTEX.InfoDict 223 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 224 0 R >> /ExtGState << >> /Font << /F2 225 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 2717 >> stream x[M_1G1H(H[ ``Xaa׀TU۷+q5Cn:oo}>]>mmnn>l3{m^|͟~|ҞRz_/_0O[x_>w+5sWo^ow/ܿ1xT,l{[k}k/}-C)k>?r7*8cU2^{tz{KL[9=]Λj(Zv>o$ks+Ey~pNgʩQʩQ0yiq˜X9~zc*]1`+NEiEFkÌG30`&p,!SGMznCR"$XEh\`H==dYRۥA %h5`errK3/ q~E "߮‘6Gk{P@dj-k3#\k+ؙR$1 \WjI>JV0гq)b`Ãdisd"H#q :esDjX9|}"*ZhSYSf'"}Q$`"[p=ԄvM$ps2X{ I߶$1VnS~>YjD#>ok$kǵi g^c 9TUxȧ"+cZu`MyV;7%%% hshb("Њ 6 X uqK aI|{1WZz$Zmsd@=0Őʮ_w+2y"SẸ̄?cJfyyXWVbH5=XR",:֨f$#2&EޜEvK``M|a{TX-Tk(H KDhSI]  05155<E "cm)EcXbx @K*R^"u^& H1a#eplϼaKbB²XaW(9w8ok%gYm$KX?4o4zV@nPJLr-'5U1aK<8"Q9AyZsW.4ڄ%@`0/,(/&??z1ZU`_<51{){LJx{n6\o_|]:]_LL`4brjt^Np[_=Ty=5\=UV9C|?{7vʊZ]z$Ay_M&ΏG(<Ȏֳ?Yp7uᬎ?/~_ཟo_a^۫=~qYUs׎D?o~~!/$_tKIĩ[әFͷA448@1y8YOUlA\(C.t׭bjaRxKIqt;$(.4Mkx-I~cFw(/N#{e/2PW.UrWv3a8dKR6uXMrU S'M(OD-F(O>*Y󕦎mJc*$FX]V{rQgϫgaU5?*;Y7 ~J Lv%yCQrWi:XA q:e}inއNTUin:$un 7{e\?t:a!ݻlYBvͬɅH? T}?Knsjst!w> ׯ$_pK4MY(Q%7b <%,cҽxoq&ǜՎٟ/U(|E}%W/=宺VRߙ?ޥ+eS\AܹQ_˒S IiB lGi=u\#4dO!1jc#-{|pq>wK?xnGݻ 9Sܾ YJˆ~Tҡ\9P6`A̮c4<{R,C ~ ͚rH98)ao4j?z駱Hٸ1o!ےkWLu-Ir4V _5*zf)OZ<{go|*.nF{ry~rzO5$w7] {~4?^\?*evɚ'?޳O?oػ9>ػӜ\~]=YdҏRkj&} Cendstream endobj 422 0 obj << /Filter /FlateDecode /Length 1378 >> stream xڕWo6B(6@Fc0`CۡŰuEaHAQۨeg>.갔0d>=JGHGN~+"|n&:rS>ɢ26z$0(e xn&mel'&0iaN93p~Kqj_Yt$I|쐶n3˺^g'OuՑAe֨QUOh坷V4-M2qћOсegɃhUal/4eqD'VMEw<_L[$?׍Is>dKI`X;3̓aA]K2mavᨕk&nWzތvCF&>_s\:=K̴Fg%HbYm-\ɕf> ҏ$WhrV0lXFyeH~!n<x87uQ'\ʝ*XZ(S$/9~(=͔.cRHbd% jj岼@3 B\U-3EM\s+%oǽh#hȜsAhƁ'hi\%abޮ.[ŏԠK9cί8K@FGT{IHĿw%3p=T͠<|&0Dܰk#ϳM⹾~+NU{5A@㿦EJQKR bqǐZܸh=Ⳙ9bpj-bh\?y\5YNϥa@<qkR5bGss͆68k0^XSh{}BO@F0 T9Vw{T )ƺ^ٲ]z͕ixXHEY + {HCU^duT٤iMOVw`<Cy_S+񈎢pGΩę~]lE(h-@PlN,~/eU ӇL\ģn%]#y{B5Kk 0:ګ8.&WIO8^׻lHFr$LyZYs;^h nZtK{0|p^c6X:ugCvIGPendstream endobj 423 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 424 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 425 0 obj << /BBox [ 0 0 432 216 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (C:/Users/Louis/AppData/Local/Temp/RtmpmqYmjP/Rbuild17844b3ef5c/proto/vignettes/proto-smoothing06.pdf) /PTEX.InfoDict 231 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 232 0 R >> /ExtGState << >> /Font << /F1 233 0 R /F2 234 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 4969 >> stream x\KGb"CKR ',P""ߧ9^[Na?*sk;Gg(Gg)GLߟ~77_ǟ}_|ۧpz?){O~hy둎ri ?-L ;{/+w:M؟gNG6.g3r]֍,ո%ϔ9{dY<+6h1lL[+Mq'd׹iğijh>r&Ys3cLD\gn1YLOC>C8z=gH|šP]xfr{҈21ÊgfRRZa>h$"n2Y';؎KKdsv%1eD^ UF;|:*^ ޷pM`opn1OWS>7a2K_Ϟ"MĂ <ثGmL_*$x {D@Gs}Ll[<)gt >q PMۨ,fX +By(?.Cm2m LHj)Myc2#h2VMؤs3k2>H<=Xl#ئ4d`xK |6q]RQA9xwD.1V5Xa:j r|]jq=ւPڕT0.[W 5ݼ%2B u m]NQ0]\XVYڈo .edժ9E:x籨@Og@?[swE><ml½It'W"[/_|0y񯿿m}~-o/ISk^b:}NI8"u:+T)0q3,"gf÷"k0=a˛Jx1MYmU 24(T"LFK!GZvىXRT$'yKF9w<5Q%ˁ\DdۖC&@m7 (mCHo7sPH b,+9A@%"H}a1ҏ$iB$Ц` &I { yv ͐hDb \SFd=eȀWɛ`d$dc.MP 5`T3QQH*,psjMfGN A$h[;,\*5@ɶ'R&|vb}{9c#۟9H'Ss,63 :3"0Ml]nD9$p:SMT7;&VQAO&jTȡۇ7h %&u h0ަʵW r}ImfBQoLJ]ݙl~?LH~Luѐ7NGphƧ1ÀF< . 0mZ?dUep}`" UxPnhf f~?i_3cm!9|Cs]%Of6l. n+pLZӆ@WeBM;\%(ECFvPvhF`!xUZ_41x ]hnF,4]\ gP'x-{(q@UUn52)o%B!SYx>G@LJD%_= IrmXA3誒`sCM" tFCe?-ѡx-\UK_ㆼE<9q OGF/7𢡊SCc'AN˅W\:rA 3/}sA)z ܜJ0X4 ;;f9sQo}=R0۠ 33П 3N_ 7z*6XT?8*Mkd Wb%*{tp9}i[K Cjr}i*%]NB:u,5"M77Nt20#]=2o 9Rp5.|-U)s<#t!cJ׸'B% cH"Cf7p{!3+h{Y[;5~kUHI2P2ǟYgX䱨H*ݐDz SǓ OplhׅCN|{EC]]܅I5__gwFp}7g300 k9pEKYq ǸoTp|4?aƝ=vā*/#q\M]n;ii^&y{d>cLSĘ0u%(μk܉x;:]㷋c{'Fxt,X*BNn9]ir f88ia]DSUi=Ph١Uhj^wo^*_z%vx{Fވ%׹r%YwAƲޡFw/%h6OB&ߨڵ=XBQtߞlnO\>5$x|IbumBs ;Č* \A(QQvg=)EYo]tWTsuM\>r[ϱ^9>ESvk}#!;[m}JgWy;uXE_AcίDqG|߾_^9pv7>~4uff_?! ql ͎XXTv. C&\U:8VךIW%:Sv勇XN ةpeE%͒T/:JI~z; :Pɖ)0S^4kzQhʪ?QJ>R-PEBu:fpSU`6Zhn `1b3g8hjIIGDEYY^4>U' ?Ws#]Ui^SU]njqD Eǎv0e{1N%=OB A-(,(߳CǶMCa,zD ; qZ\?ԏmzT7?Hs|p.rRʗpչ'Z'fP!MI(!zPw8h /|>8\IdNK< &H}5{Wu~,gً.7=Kp?j go5-zݯU@4׬T5[XdҦ!=)`q^HKiO[ޚUA$`l4n.#iY"N\`Lj7ݥƛOKWSCdZ'u 㪆eɏo} & x9^?ŅkrmmȾ.N4MeCaM@<~DH'#/zJ>ʟ%<7'c ʟz?O O!'R&ꪉkqٟT9k?՝싅O&wDendstream endobj 426 0 obj << /Filter /FlateDecode /Length 1961 >> stream xڥnFh9܂uE!큖h(:d-}+9i'i[[лBwgHԻ8 zYExkK{X8a]Oս[xkR~[D_"nzeA 1QBQgg"ɽUs, "k*lXw%0\::E~7c̷/K&`oڽѶH9/k6R;2MMJP 5%.S`V׀t@٫A Z)[bx Oe-J:vH[I(*U(nF4]!m-);-xDbu ޻4 6 l >)|1QH"pKl'Ow-Ðc)n e ~D3ʤ#ptOJ*=sF\N "$0FD 8V.. ` 7]'pRkTՃ=n۴ hwj:N\$ Xx(!嫲&!nDG~KU}uM62q-EZ9Ac4"@_t CH<2ZI(pmdMƷ&%ޕÐMrOFȑBX؞,'!"}`eEoӦ!B ~qԾWکG J^)H4tm2;Ѵhb @Ndd KrERCŏ6KMbr*?7A'cxSrr A‹b(lfC^G[F,侖( ȷRi/2\}R| 9%o/O) hЇ-FF΀T|UOsʤa$i,v׊)hXi\>ne`4IZ-2!jkۚS(Cz>@09g6Ȣc09RḊEȭv`&UGٹ,TA%Ԁ̵Yktl T{qKbUtvP+g^1ʮ?C1,V\%w0\qAuIV6ו7VqI*[ ]ӹL )짚Di",z v+ˊ"s[Ib, 4/O"?H0[1sow3 d4ɦ':_P#HBׯS8MޥL={n>rY4H|NZ[vOpp)F] N}.df5Tf~^ ~`n񁾩4~yXw#D81ݚ^Kt 5䬉wB5@XwV֓ta&Y^tQf8-4_`vi/'_/=$x)ԠUM2F1Uc\B5Z* Xʩ&!Nq(O+2UB#)ЊNlU;tAKܳH!5q(hQJ#*wǙ ys@ 7xk@5Sӆ'PqgVa`:J5JtfmjӢy_Sxc|BZ|.RXp%)hǞJ@nd@'pP̤bxoG!줍{0}{> ^.nLv)h*&Dj!|endstream endobj 427 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 428 0 obj << /BBox [ 0 0 432 216 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (C:/Users/Louis/AppData/Local/Temp/RtmpmqYmjP/Rbuild17844b3ef5c/proto/vignettes/proto-smoothing10.pdf) /PTEX.InfoDict 241 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 242 0 R >> /ExtGState << >> /Font << /F1 243 0 R /F2 244 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 24567 >> stream xͮum%8> av&˃.J4\,wU Թ? cq~~߾ǿ}L^m}}o?~Ͽ͟__÷}Ϗ/Q>~~ߪY1ݿ,UQ}?~O?BUZ5_I}B{I{ik)v.ivY$msUb{6/ɕ}ͯ#|o(bCb݋TI{ ܻ);ixriwzwh5I۽ޚv% xv{&ŧzk>({;\޻*d~ ڒ_ہWl'CsLwW}u<ŦG{]4wGw Gn^۵yH]K {)e}^Wl*zW pWAec~+y;4vxMyay4hϊYҔn;Hަw )vm>x~'ޡ#(Uz֢pYͽCg:7ln qKQ<>Z$-H5x܀Vvsp&{K; {bMG{r͕,^1Ǫ\m|+0Kbfڽϵh8~!ڕÐLWNZMym|o%vXk*c)DW{5|G E)帮6[võr!XՆwLў͇24m{Wmw.ޡHc [6&6f>y3MxQr{;㵥xEP3awshYXwX*]{;{K e%~=>yLYmU`kO;<`3v2}I?4K@hw{#"ߢO48;cs%͓Mc~M;4Nzvʹ#+;E{pWAjw|vo[ʹ)Anina\Pe5#Nv;(; `RjokJj[OwS ^m[¯]x\XwYWޡ{^F찥>;XZwh4z;R{X M{2DW{1Y\}po%u<=ci5kr}OLv!ʽڃgʎj/K󱫽Os;4)}q߮v5ZMޡiءI=cԴXR2|SfA9;o"T{: ٙC[&ÔW{j<^DbIkwh>Dq+W5އޡj#; T{2)>;TͷxۻڛY9vsFﰥվ˽Ӽm,wP;= U9R<-ڒo1xY\m)V|j2ίveu)>Z0Z{ks%}g\XǮGVΉ{4 WJ^^jޡi_mEY-RPM,x Pj;tmUz>  ޡl)[s;<ȵڣ)wCZ;J;}(Նw%4 C[ޝaIAz ImA{!{rzҵ́ z&SUr46ÐҊWH"PBr*ڠsЎm9hܫ 2* Lr%<ʔ[ ODB})i_]#ah_(]+5(hC[t Cxpjp*{c\9EϠ 9>SKܯ\api?-ؒ>f$XmIAڦS(Rj_[1e܌cubpo|)MIg)GE@!gKY83,r @\_[_tHphDJ=ΩT}p҄6x& oPҮ`HJq '|.vХtk_pRXW8CO0+YI"} K_rg{kx%r k(;&uzFKwhqڧA\.{唞;ᘔrN7:2iB;ih5S D:ޚvwa DMvﰤLk eevg]N]ZT ý1WG #U#-; x" \zP`zYEH{;t <|Lw>&C"`vͧk/X54}f#m?]z??|/(zGtH_;T1[#kq`.w EҶA;sv4k=G'>{ܵ8Zkה6zdeU }u-;4+$J Y <󨠔ux3VAwyoe~_b䊘$UH0gڋ#;Hsů]&Bz>HUy\@&J;8A|YWOIZTPʚFz HNқw?q0]!)+%IfߵEL ŵ7Ӛc4 $Ym!kpصAh5f=LEEzQ;\ɽߏ CIxIg^]tqD5]+0ԝ3Gd`*Z{yXϦ\Nv~Z;Aûym616(]ݒ2w GpFoaZֶ"_ 7D* ;]uƦ ;kt;@9]}2ZG'RbwX(y! SsZVk$jehr'rhL*͸Jw]P Z5rL u]q='7;jæ]q6,o2_)UtVRV]$K Z0qu M"h'yNwѴ3],-C蝺$]$7ZHBF;qW̲1[Z)UIv$ )s݅ Z:ߛ~.ϬWJ'~*pI3n]l]4Q7I4$⍜ܐe$QG0 vi4OxTZG''_-p`R֨+ EþRH|խsK3] -, LԼhB+A!{R蛆\;<z]/1#lnSF:hui_010t] 5#ᱰ #گvLX)dSOiL!Ga{'- LFiyڎCHZ>t=$Żv})Fl89@P8Qہkj6滶ZNSও>ye\'*s/#o _ze[v)o7݅UA>+}hEKĴ҄m5hݍp)V6bkpyER'qRMU_FZR?܀k<2Ҍ3Q.D"zжB؅ O+}2S'Fwudr.jqՉj%Q.Lu#P樥CdOVRU#ڠf)ض]:HH=Bκ.i+ p"OU7uڠm.OtZ^Za=I].[:.A{Ȑb}.Da="eUn⪻(&fBژ$SҲFw!^uDCλiA$Ju*w?zVHs&۽W}pq=VY.ZB%"yUDUp[pBdɥx~bfFJigZH{;WHi~Ճ%E;+t՝RI ڛ]qW5)JMNg!FhaWJS hgW;ɨ$AF 3;צ8d}EW9J EH32_ ~^j/ВJ Oa2Sh#n]cR#;T%hI#*abc_R*n"j\ᬒAy}'b5 }}\mV,X+x+:Ia,v'T5u;I8R^ѧkA׉ڨj_pZdZ`<,iLڝiɣ_?]pJfpZj-7ۺ7LbYai\Wą[Ul_,9LM=PvV_jwW7Y^nܢe\HҴd^9 ̑k؟mhQoMWAgq*}r-4x^;F='sT#f\,oޡkGJټ6=ۣ=<ڌ<ވ7zvҁR5kk9I c@wBDU-|Ľ͚ #6{H+|)vH SSWۙXџDֵDN'14Uh- BJoP׻Imn@"}Z"6\`+7r&^4Wir7tjqƆ8S %d4ն@JV|eXiT ("UDjVK_m#δ ~*V_u#)"^t[kNp՝J~ma['$F<1ʍt8lSL-a2bMvW ǂ%OYMn %=7߶,z-8Uwg!Cv-$ n+tx]\u4媃Ĵm`/?~۷o?~Ç)o /z~~*z7􏍭" "ş>~ϔh篾ym/Wty~<ŗ'\;ŗ__y0o _T`_sg0R<_? m_5P/肬((wmT>_Qf6S>JgR>=@比>EHy~\zlNwRQ>S|/n{1֯^8ЖۯA>〗LJ V Wصc71we!ƿezދm/}}_ǿvߏW׏=- 0˝RV'j|}d !'GƌwUQ}r\a*Nё}WOhJƮa;~ů^'E_K\C)\|͹Yd؃OxP_* ?Hd,Zr"˳ӿRѻ'++,p16 SMvD5 τu2Ǖm&!YbtcT<6kf] Ž"^A\qs2_=qiI 1^?x7"ky*QxԍTƠ9Ȟic=@!0lϯ`3.Rp}cy:%_/Wk.c💯_7\OXqScN|XynOQR ܈!_sG Nzb!cI=wv:_sJQ?\b'uzO<`S":Dv&_^|X,~K-6j1S_16;bx/~oq_'bQV;"V)C>_b)~f~ x%Fc\/جPdx>x}o ~(㉑!AZ[_V!4hz{bkaT΃^I`\!NĜ\%c_3 BwN+rPC{S]44Lrx*V믣w"qpbQС@*}3XeV nX_{+LRƉ~YcRxc4&yw<#.8`Y)"I~tFy! c1) Z(3b/i1#d"^39zes[<dj=!_\qoͯ!%wr]3|8u86B5CHE|p;Dix}w91%'~uWAx(8,K_\,!:b| 7S1'X%aHRC\CI̠dtWS~b bs-v *K: aXQ:GF ؊KmÒ 4N?Fόw~{ H>XY-'ׯ`=5H|Q!Wzf|e_~*җ. ~aB%"qF3D˜ʼnZC\,!nTZ >?MHjvá14ű|?Bܸr ' +l[GOxuDM5(&|ǷܟotG;D#@>-y-׏r0;xE _?F;V2wU[!NZW#xQgWN?0`+1a+H0 AWD0yTY̺[-q'l|Ng*0aOR$-@I_cÂ^%Hb0ccߺHc!NxBz{nbezoJ@,M蝁!l?Ғ?bWM2r(__5RXbǙglQd1?Jņ{7W 6(͵Elm KovŊ^Y:H͖NY \}AUj'0,r5 " (tWaRRA dܲRØ"kwH.-+{w9Kܹ(P Qk4 Ng(.{b6npݘ\wb(753> 5EHysSv{ )[=fI3֕QGHܹlXyF{GF}4]fkGO;6ן 81[=,G'%. -{XDn8MxdJM緳د@HTW7G@7'Bh!ȧ|^|Za>-e|/}ڎkrAO[~ }3ވi#ާͼ?mmA^xiFڇ朐a83ix"=ПC{v֐a z6j"ZIAP|2>2$ ՌW&q@bOxn TOI(Pxk =Sw'@uG&oTe<`hTM" LBjƫ:c7 33 >'0 zhKt7'rNbj&='Aya>#GxPmOjIPm1_&BF> 5g>$H8RD \g=Jړ8$Pe䧞2|?B%IP9u;$^7&CesrNy|ܜ)#_7c6Tf ![E2ʃj '-Ykݸ?6\:ϕwJd\=gsN~+'/G0 {UBfD]|#r5X& kG&()x {D U?w @+u[jlz M&(}&⸉'Wډ'ȗl'X6D#\ٻpxLnf>3D3D:EIlx}$`mh;خw>7F^>.'w{Ԅ+z!\3.I+wGG؞=?jwvT#Cn{?atv yAV_}HL[)ڃ3)T}YIqU]Ҕ0)O|_,#U(6BTV{_U^2jGD莓]ZXh5m"Ҭ\+et, =XP4ɪӀ=+} 'y `Y[" lUIs5'K$zcE{3^Tmc9 O~uXڍ}zhlWϓ0ZNԞ|J״'?Dz*.G"vYpUҪ,bҶWGi ;I3vg2It؇ʪڸQ@=] Nu[vnvVgjڃT#]؍ЧWY[ulUe}'GyhWe+!C-hmmKhBQ.{BԴ{X`1וD}Q1fY_{&\Cއ鲮,#YLO6WU[+&g (n  gh =!eQ$Q\3v&!eݙ8rWA2}C d;zME|CX!5Oj*]kY8ZCNk{UYqk1B»{ 4eL%tm e?#luY?0 aCpT4dתG⪦\;\ X^*8FPdX򓵣H]lUˋ 3JޕIG.Brȕ6H_mAN28-F"(&- ֱ-䰫-3KH$Q_{c_(qn|kI$-R%7 k zAq;H&td?&dƵ׌L&r4ThR1Lȵ٥wV *' tkobԤlo)3m(mGHY yzRV-]uk6'giJ2]$MK{%<4BQv**:P=y2dM-K99upĵQߔ2*WT+l&Uu' ` FH^B Ey<=UmUBv*,l@;O$#,(c&M2Ej4.Jakwt n\y08Je>$E;{Ei&eK6SZ#)𒢆 Je0ڮZtr@mA!)0 -Okc֖-¶2LI`>XvAV(wU޺א"J2aJn6`WAaRdAbQtmU+$6XrNz T+,6dA%%$q=ɤ|۠K^LRb,DK+3쮹׭M};ε9EL@Y)ed*u\:2(Eb9Eb\{hb%!j$ǰY_DAG v'9.&J[ލ}vUߤúmK0a5)>d!ؔr+>T3kڋ'>XBJZw^?C V$;d)Ov;8^YrePJc;%%J(A -+ΔRB$Us DX/82au$B,W>zl,Vke] ;)j(Bُ2*)=4SCS {]464YXw9bMZ<ˋr&7V=wikGajd?mocux/b΀aI. \~myh'X *}Jgn-diѼkRSY1e &eGi!H#Aڛ١4P=o$f{F+kѤStp5۔ ᚔj1V^TCX]"0Fp2 jra -&H,RQv0cWƵ}g[_P @ 3 Ӱ)k&ҾL \L&#XG3i豈FڭA+זÊ}ܵc8ZRGUPTʋv3=Rf~'+һf@cSέ헍TڃU`k]{RwH 5򏽀mŵ+b:EXߤ(:;RG)`SE,#f!x)'G~}&ӏZT$Q΢6*5`JqOgܽË2G&<$`U{p6\vo]_Zر1֮ 0lNgk{E ۻvRWNu 0D mڵծ *M&i~& ` 2~T1܉C*_*D]C*}&zcܱ(}stK9I_lhni2jжW{y'~T:HԢs\W2s90gufړ{8)B]3|?jJ0 rkJjp ^|Jr\ݹߏU^LS6 Z%xL*k"P坴C;.M;^?]ZWkX~j/`0ciU>,#WQ_ᏼvVjA']mUAV:?ZVqth5=fZ56T')5IQ%B0n+U*0wpk2WhrͰQo8A"Iϫ}}k%Ꮒ8H h@(l`ZW{gKəBO ) DʼnvNRJRW{pQ\ g,E躮_M*01: G/ tS$M9~ruH#ú!Q_MbFվM9[AʕM|[crƘi1[0(~@yWe.(Ɗf%2ޅ8j_`[r\N\j~XsW= lSi<ʭk(t SZvC^.%ٯrЀ)Үt ZjcQ_Qmc`fwǐ8S7zUWMhMոs7 ] vPz(}VF`w*jTFvcd16ϔ Wy4^Fq^ew M\m#PXZ;;JJZE<{0bXZ2HSվ;eP ǐaW 5ړC&$$2L2)[}L"șXG$`&!!d 5Ð/ r^$0.w Yq ++[bH'W{U9.`$H}@#t8~WaK.jO>/VW{W8nD &l0%6Xr|ë$I.iy,h:"t2OryHC0-|rv#*] Yj!1Ͳ`(жD`UFȨ˴H)t ]*a;(\^ƂE jOj/`/ U~tb+z Z{I2#' &&,AWĀ *M6tD@m% w5x\=9\ÐjOCվ4֗pD+WSډz}I4Rn{)6tT,Og7d4mtpT)$ӎ:aϠ1XPuے<^eөJ%T1e܊(3cL {=d0-Z$S?E>3ٿAW0(sCK_mѺ:q %FN,zxY 8I~ѝW* _o0M9;\O_Zj/}Dv4Rރ(+IE$?GiLZ UBTӢŲbM&#x:\Jj{РL:[Kahq^K*wWۋv,?<$"V%0նYviDdE!Z)\\F%JL>1c/1~2Q#8Tgd>S7Së^H{?VJZwPpW۽ƍnaf_m/Rd>ZC$RDn5$ȫK/B^>&mca@1li1 Q+b F\M{PCY k$״1%Tʹ>ʶ7"y P:\CЀW7o~ۏ_~ߊdž_|[U\￵>\'ğ>~!.t۟~md1?N—msOaQ T_Qn*(;ɳ( ?m~h#)p|Q|w/?/-B~Ͽ>׿}盾xz1jhA.{D]?Oon:ySu~ӧ=}> 7B:DRWLܩ5O_wo׋x{G=~u^u;)وt9@eQȆP#ŋ<ƻ<9 9Y\(UBYֻjgh3#=rC8=#.ϸ~ 9rڣlU,9%G}'w9aG>A`qB{<;^#=9$G3ȟ|)=RN{̐w{)=()W{{})=R^ck} {_c/ɻg=[_GDEoSi=䰇G͐\=f!֐;<<-=(,3[Vț%] Ǫ ʕׯ52"!8!.G=i!x;5Prأ<rأ@㐁}ƻ<xGk!.W>]=NiaυU{w#~9ښi;k=bs=JI{rݯ=bG)!:pCu#F{-B{,>OK{rc͐[ X5*!o^ZaC{L޿= -Ǭ!=f yB{rc~#1zy\C{t 9Wa[~=z 9Kamva6C{rأՐ'_za {Լ^t橼zjԐB{r(#8*-G)!G);!G^VƳx_ {t#z,$!=y}c~l yc>K4#d)/>o^?I{Ւ| ^󩖴S-iB{ 9yn{p~CUkڣא_0|B~[!=9A0G]!=8߮y}η+O^=jW6^=YӋB~!^r9̉>Y8cre{?4.w6#"ʋ9!~ 9ᭆl+N@eOzVȰG Q'_xv^y5dc  +7u=?SD9a@!=_9AM|^+ϸ~ 9Asϩy}#B!=蟮y}++=<K{Gx[#=-1"=/TK{3Z޲קk%A缇|^WnOa>B{hau;?!~i/\1~O#}2cM^woZȇoy?+|C_i;WW{puܯ~aGn+Gm}=?`w?\9~\W+=~_9ʑOڃ\M9\=>uK{p}rcW{^cgd)>ӕGW{cFșY!=N^^;fbԴ=標^z+yE e<9G|1O>n׵ԏ|]Kr8/ 9u_3џ3{0}=`:#xs13" {0^#xk< 9̦\c=/ /i+8ol;o/[B 9c=>| 9c=N/e?\N{R|#=Jirڃr^G 9푿￯O=wO=zz3 q>?v>G/x@:η8烟|~/~՟?i/~qO=rc9r#~%?տ?E<|S_?E?׃৸^xO ?/x2 /O?BNT 9d?S%Oz;#^৸^?||S\烟/?xb=)O1X~zSWփb<?h=)փ~b=)׃~d= {0[~ Tƃ=Z-jiV9/kf TOOkf?ތY^oys^/;ߵk=8ZJ{~f^~ϻ3|i?;g=F^?#^k=b>?< 9:iI{|;O.Q1,Ϟ| 91;GGK{p3B{|'?vșZ!g~jrZ<{G=%>rFȑ5v}u5_Oep~*%nO"BqrpK ;SO݁TgwOE;S݁|Tw2?"7H{Oe{i{=v2Gڃj=_;Sy>gڃĞi='v^ݞi{=v|i#= G=j^?A{jcoOM{п=5Azjc_OM{пO'k~~D| {?UߞO'S5:~=_Oj~=_Ojx}3g=ww9aG޿<3ȭ>|rڣh!.=zfϳ3>jȫ { 3~w߇=zzN{>'aGN{m_\?r#ma{g~Ys|y/h%Jڃx?U#`|a%?U#=b_XI{0x3ް`|a5skaza[#yc=c*li;Zڃ?zOq?TͿ7z=)!W 2>S{SO8?ld[Qw6-OWrf?0ޱco[r?o36w{[O>f| #[O~{23[>fendstream endobj 429 0 obj << /BBox [ 36 36 169 217 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (C:/Users/Louis/AppData/Local/Temp/RtmpmqYmjP/Rbuild17844b3ef5c/proto/vignettes/cloning3.pdf) /PTEX.InfoDict 246 0 R /PTEX.PageNumber 1 /Resources << /Font << /R7 247 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 586 >> stream xTn1,B gx [A)H!q+"9 ;o쓏|g{rD/ >Dhegr_ :o>^Ha*=d%TrʁCjt8S54X܌/~Oq*}x-GwnΈ@%mvdy޶Tl; r-?]ݚoǽv"GT `Z)Q D͖<k)CjG E[3؁1\NE MoeI/h^wkѓU,1hhIѲ'Ky z( /TqH^Aendstream endobj 430 0 obj << /Filter /FlateDecode /Length 1469 >> stream xڍWrF+p Xf`INcCʉy}@pqH+קR\.S̛^_wttrvwG*RFuT(*cl{@8e 9MN{`p:[Rg"I\SM^?o*T$~n64.7|ᜋhIk?:6˦oPLK^n9C[ud0hMUVEVXK5mCG?f :@ x1|-he,JB{pٜ+W"qLf wXs\zΰ yU}^aq A (QRDvAŹDA=obߒNfs#)Q:YƐzK?,}1gAbr,Z^\*{Q9i7Sjz{[3AP:'j*l@8a/ڂP,ĊM{Mb.规5UZÀ 7;!J@nf;Zph 9,Od l+e U ?"`pr1$H#,=>rf|ҕIUL0|8}|P@.nQUA&jAƨKS:|yBe)xp!)e6e: Rưp(fNiE#up;QUˀ,eq7qV +jlu긖 /m"KstG|bE$,!m-:~3 C;ߣuI|O>l/EAk{ix6V~#/H8qnqB rɱ`OuhhXXbtT%/Z_;I$d5Ʈy2QP8t{N#Œi4LZ44N_YM#kՒ ;P[,f## ז 8Cn>g7"ViBD51= 0Q' D&4AmBSjl8fC7{#f#"an " T4%fR}(WX0Ny.v,H15Қ{P?d Qx#d7:J煆`DN F|ZS5|ox-$UI6| 7 |Txo?h;F .fIǂm>^"}kAPGG)$č*Z[6 K \J3Dac#nud0ѥzeފ:n^!Fqendstream endobj 431 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 432 0 obj << /Filter /FlateDecode /Length 2534 >> stream xڽYo}PlP p8@[A҅-ѲRn͢2s|5϶xݾzsml2J(M,hfHnLS5#+}Pʆ*W0xw"D1!$I[^BlU:[:*rް.RgnT#e""lxi"L*/ N=n+<[Zy; cU vW/TAg*Ef% [&ą*|j-5d:| Lh,;e{fZd'gzI<}[vj?B\<6ea(9JԊ+j~ r-8jB;lkf$AQ}ahC@%dm_ah1 ׄU4Mz'Bw%@>u j)r~n!dlB#fk?.;$y 9ǵYॼ~D<{L(T|=d(|f3#h uSr;uHk[bU/!~y"ImՆ; d11pbSD l^Qjd[V|5Qo+P6ZI;CS|mVU.P8u1iB( s`60NXN^@<ЖdI(4Wia"2|-컁-؍:67ˊ'Uy~3F(r𜮌WbG0!)D*&k4V| 88w>O0Ev[n%|D?:z6R"Rʕ8h$qm¬=RkUyO ߂-`6-7 f'ÐiR{giW]Rʦc8`'r/.+ÛιJ q {mʷQ$o~g,5RR"1<9+y"[*Bf0DvGO%c5N+Pa&RK ޕ44dأ)cuq剚"z\⥓{t|ae0 |Uc2oE obګ4$2^q| 3?JEͧ$fċj֏<ƙZcEo_D*M;6u¾>|%udA6Uλ~%6.~ml1L_qM)\+%곮*TW?/]|>+%RyfcQ)l"De.\$nz\y~XZb_M;e8WO[endstream endobj 433 0 obj << /Filter /FlateDecode /Length 2865 >> stream xَ}BX䁂W4ݼ8f0G$N$͎'A=uEr43f,F$fY67o5iSf=kYUTijS7;m t` JN~{.C\V?2dc"s?Nj G&aYElD9by92 $2P5huoտ[Ztq*!UM4@Ͳ䏤թGHmhg$NZx`zv˜¯?~x3iAP2GdbthQ"H|ʊ*>Y25"v<;󳕘\a7e乍ef̴2q0W๴^k nQO8ܞ$l ݴPpƒ+֚,kR*;2?;ɨ Fm6in)dLv2H̑iqkmO51; gr)L w`^#5Ln=|&;C';om~ +ٲ/pÐO  Ex%41VupF(D5L 3bUYދݭe?QAGQ mVp4JAWVMd* !,&9jvMV3@֘&+TxR*f뤥ValW&TICYyz^y\ߗڣϥ08d ڳXjfc*JLErҖgTSS3RpJѴڳՉ 1 Oλ_6}N`g#g[VGIJEաY.t MsY"4WzZ!mTgTrkC $OՂL"NROTjU7E@ >5x݅e'+S OPsO<*1W&yW[kV*y>`Þ͢)aXZ۩Z̠.3,UKPkR<{ dSِ9yQ?q{2UƅGJNˎ%LѶhomq%Tb CEFT{_G+(Tf"i1JRWbH2_ǥty| -?3u  \ŗ-s S5\Fn$(,o#;>p+MoZyt*vMkKw4 AF]eN2v 9=gNl1*~_qGH@_u6]4`{r,yzmܸhOV vTbjހ-CDpXs.BB.>۠evjOAqӐϾkrx+Z ѿeek> aKіQ + WlG:rhTuUvHw3;F{ _]cGwRAuZh3H7AHpx_D"CTqVŧs)+[wDR9`! OUϯcw0Zi't%nm{ڸ6|'lY\|ʘ*橌2 0NIi{6JQO(1Ӓ1fOɺR1q}tRo^9sUsEqEWؘ UŝJh%lQgvq3S˭-F' ;w8bg]F{Nӯ?/({Qi }|+_/uu>tWendstream endobj 434 0 obj << /Filter /FlateDecode /Length 2696 >> stream xڽko6{~vH$*n;4}\PږkٛrHK^'kJ"ysfx4ţ.y{quQ)LfTPJ4JGяMs'ѲOѿ{7]f]1cG_۫*Ee$I"fҮ'lMENƓT*c+mߔ~״+Ʋ0%op[3&2% C/ [P`#=fH l=gz <8n OFX2c8;sZ f-g#JXo`ue#R]YfGl4'UM*E8#5krrZxЁkT+)Yi'2Նpz~`6,jqvǖd!EK\wOԹ5M6;"|?,V Nz C wi5Հ*M̀낄Ky ab w|So (F;W03 "B+"zE\JƩ& g2 0_ӞЛ63QѨeZ, xr vf60nwq2Tʏ}9BN. ͫ!їhp<? Y/BYE .Vm17#cg\h+U牣&d *3QEh}\QG `6cUkWT^@`w@qa*e <UhC['SE- T$ռbѵs"YOnF)L ~mfpk7Sl :8YPdH38מi+`h{|9ijŸvPky>NڦyHcMCvkvC6"gYz8Y/йF2D3)[b׮MeS7'[onJK"  Yt2u[)Ok sQ7KQuV텊uTj*Zcyd*Bw5DR\BC\:uMU@{\@_d0|U&KZ¸&UlЃ3_`}MԻ>Ѣ[{zEq׻\2o-f*HQ*~oKLd~gQb3 ^jE"lY1F˞+]c 3,"`2vs 'R]RR.HZnҩSӻK^y=f^PxD?@{|O2u>T=FγfrsikS>:I ^sA28{tQ~zMڐOo&&OK)eRۛ54>FƢendstream endobj 435 0 obj << /Filter /FlateDecode /Length 4134 >> stream xڽ[[s6~ϯe!9n&igZe5nBrN;hv8N<{yNB''uvR2=b^6yDI0MToELMZhL$k͐f|d:-|*if]&'HE;ck\:-w.6n]j5-pg^Zk2Khj*y-9tK3,K^B]f*ǹ{K J+%\`XUn`~׋w-5{䤲,ڣ'Hif0ے'H't4F%OOP }yFVN Z 9gn k+X A|Ea-a֭_k: X9Pd_4 Zonbsf¤(W-1v\:nbmԎ3FdcQfrp Ԫ6rELaHLg91'9[tBԛJ[|{6HXdw3ɻѕ\7,go%;YK$?Hf+;x2g|p!%a9[oI끴חYp-q=nyaT&QLvE;9 b?$)ރwa gi&طjbi/x @SQgvIGdXFN9s5! w",b︁YBUѢVeG#vBIBJ1.ReGDl?9kG0Wa/PI1 ~+GsR s4WKw~^pm8+j24B 7% OJ]JjYDhS{`$Pi|4?v.#,۽`A/G@m>7q! rt b( m2"v6ݬz[@}OlC}#n3XֲvN?Q:ǬzL.Gje0"p*`$nĂ3XB}5Ƥ\$[M3TG;7nHFK9s hktrPJl+$VI;=,jEmlfeh,2]QBGA.->`bYC ޳b SRTpA1Џ[v[b-F$ \Eس7 1,H3!:bP9Mx>r PlwAPJo6 `:]x9.ŅjҬz"i]ɉXW>$E 'ؿOyB?Q/LP„{Hl7x7Eڳ{[,wY@CפmZS3YH6Ia+%FHCZ:0X"$wLz(lPX8b ]<evx|Of~ +8Wq8&nv" AFWeAqsAʘd%ne;81S֍ll%0_ގ_O:KuV$[I4xȆ|fI#<,TtW[n -a>~\^#6+' TFaUҢPOFQFFNGeSwu5ċT0SpYyW$cNGʚ ٙ]c;Ee{b˱NZR01Y*ı}q#J[{!/)L9i^rVB:oJ=hÇ.|n !NS~cDrY:'Sܭ R xIlZl%i ߣɜD,3^"ɯG `b $Y8i43aA_yA8~AAbQ7@<+gw|@:*0ǯ f>@l(PsLޘzO}q`sz-p˞0d _s%_Z9}"vNE*2G03~(+#,_Bl\xuQp{S*-w~)UrX,0\W.p2Pendstream endobj 436 0 obj << /Filter /FlateDecode /Length 2067 >> stream xڝXYo6~_aIVxH^i q[mQhvk[.28Wd|s1ë7WG 7TUb0+k^U6n%gvzZk_oYZ.' !ѿ ~o6?F?/㣼WEQ#tH* uRTyda14%3X(lrY2] ]5L]V&k똣"XҙV+X3 ^^I|‡ι@6q8GyӮ5Y|\VOg,lQHhۘ(]D;kq_P|.Pkmel#+Z\ RSzZ*{ju"Fr4Z3 ڥʺ7/ <uY9,=$P[h eu jXiD4KT1]dD8d]%=75&j$9 %E&pA3&9i(e./0>1^"=D*A@!ei~+7=M)\k9g\Ym7)YcUQB<8^(f> stream xڭZY~_r@UY\/RMM6W9TGh+cQOh<4#R[;h4}|`ڭ_媊\竛U4[4"UsS):ˀIbeZm]o2}m-OZ)j+gА'䄫,;~~Dy&6s|DEլ 6z"؋AEZRY NK2,&btTwv3LUuvP5|!" R gf@ `|{"|^(\\T*^6/LnoQ#]?b7n$}#/Xkb7wZV3#~(q9u) Ah8 VK,i٣5O#G6ʑr+x!yR ruʗb.nFu1 _PdޜGyk"$f9FdK $fA;75%Ň%(p+G~tϖ g'\HXc8PaƌVbn}vi qtQ.+(3YYɮx ?,_̓[#lH(].M$s0SZ݆>B=$%iI:ޘ'=AI" A#)T__u =ﵸ$1r=ā11D-m y0GoZї *'tT<gp7&j 0m'(Nqoj=\-`xr=ܿQWm"oLvP*\Vݢ(;*?w82CZCI>h{lIJa]h\xı'uds 8"6rr6ÐUOqVco\e\j}CB[H<Щ ^Jo|rASu1z~Iml>`N8ބb<.N^}h_:N)$/J|?ymMPټ&xcOcOt`2.}}[դ*c 2"WϠDtRqm<9o9/t6>ZL˜ta6A!M}נM,>=M?BA(ϏUHE>6)́J>[y+pg_kq{4a k6oaw^A`XEc+0 DCE׏vlGLY&َg ;,pd_c] X8dtV旉^/=R3C|CX`sԍڠCHT3< .gq ̚-?ZfL?0Ò?7>ypNZy6Nfbc+ +i%u'JЗU|֛!6 fUg^*ʼxe Z1x_бJS.޴n?L"%jۘq#ezAl Y".9Gw9BKYAUm RBa0+vO3_ L$9.\r~/*+kS QNc{FWkg([>q6-hŇ;-ݺ:.tU?-z}AJՈv_ə(6"œixH_>3POAwGRxcNht} ;ՠUe.\U|5KkCZJQ2*=hY:lSE4̍mbe7o egnendstream endobj 438 0 obj << /Filter /FlateDecode /Length1 1663 /Length2 10972 /Length3 0 /Length 12042 >> stream xڍT.wwKq( 8;Z܋S]/˖s>׺we{fy/:6+-U1psqrs32aNAP0E Yw,ž# #( .9*Q=#Ś#,,9@ԁ0{sDk@b = * trB$X`=@Ht':#@ KyAg}6pt]A.".Oc5 v؂@ j0/;b<N@gŸG jvA9`?rs]ld! ɁAu.O![ixr鹀<@rsEف`W܂BemG]oWПJ?9B\it_( sS`@v`xlw{LǏOffqqsiJk;+ed ^_WW~wRM ã- WW"o ׆4 gM_q[??/&<ԳE`'{ u/B@lW >oӿ*@6`_C.<;w4!Pt;g|@{ RRb>Fn3zy^Rן tMl!tT@%O$z7~f\Fp> =;>8?gȿ!39?s$? o<\0{wOr s{/}yf!֢u_nk)<9vħw >r.Z~Z:ywyKJj%5Q"^{r }~H CWjO#b | cfgW}_ȇjU)h(ws2gHaTlg^8߯ӨĿD?+5^獹Yv1R!^L2T!-)Z \ MQ' $u.OT `Nwwҷ01ԣ0(&VXdR=S$ۼEy|K*7L}-Nٞ pUTT{l JxjT'_^{Pk;!ԯl*ҋ%D9voٰx㱰#~Ȥ(hע]8lkė$x̮K";]2H!&1#xvuszc:N 2R+ [>"d3ޔe/Y/-H֞Ybb?Vc,dz~nԚ* 84".DzO`؉BHfi@mswbw+G~t,O=8Is8SD:S`^ G=;[Wş_տgk:^<KgoSux<QP&w==bԢlr<;cl g̫4Q)&W?p%HTuQZΛ0sYKnXϕ>8K1.!WMԑUG$EчڄA{~ 4ӧ3aGm"4f^SixR bZtRX_')²لaΠwᯎ fFH W/O[%s,{cPembsGolVF(C4HKAD’m~?kr[)O_A{Nkdԫʥ[֍^ʉ{ 5:IZ.e.mn\X2׬P~\߭XMly, ]{튃TWK5ڭi\yI;If`s+%?J<+EBC]̧8=4;JF!hz;{UL$N3l{D;mV;hL+L/\*{o-Go:U@+л*LٯT\ui6*Feށ86,k[}鈝L#fUB詷gҧWml;^W, ʟ5wO9=2MYVB-X5_*71"YOK1sWx.0bPDڰWO fkvU9~jlc!5ՂSyRm5&2 jߝ(34Ȁ1и@6TW &y&]Q!lD"ȴZ.~G ۵إAVh ;؇-|^ew6S&5K01} mlզt^Ng.%L1u4욞L$Nyo͆/ʌDK-ڽ;WtȻ-$_ NotLe7Q1 >wNV6XXr/:-IJO'ڦ\hȅa"MXRku%Opsxe+X_W)"ZRx1^C`ԟ1}z )s䖘LT4WC~ + [!Ooo?%\zbN#'s0NKs-8_zf$"{S"$h9d?#$ b̲D/hHz"a*<>Ós VHC<ؓd 6,S<:\PuzE1TAù. N5N]zFσ7~ $lRP%tmظ+\Uߦ;Z0tyϺݛejmc/Kb ?RyGrzN-g3+I_0U!s5LbGٹ!$'IJ^: H@aIIU6%ү%(–UBD8 rLjG,f8*ruvRDGE0ed,O`h;8aJXt ? qkBO=v;Le $#Ǜ1z0c&"\N,  *,'0F4jJxbeXs(폗aq>h$I=}v'4qiŋi84)TÝ=|hZT'!|^)!.+f'fr0i$fJ%}q[Qp,Zn0@K G&;bJܓMu5:^3ӵR l'=#yZWI`ow0?8b+; Au)AЄK# ܦ2O^UܹN.;;\E&8.WnFd/],(RCC»nO4"<.8_|nNҔ-Z)Ȃ]O>޳NY?ήTs Ʒ:W!S' p)[{>"dbx7WK w4h9 Ҭ}E5aEbKOn ywFd{-N_D:br$؍28 Ӳ{HZ ٙNt*ʸqS)?Tڵn}H=ZDzi/JH;T ˾O6#GԊ5} S 7 m2OR ~ rӗ\|lܪWzYT^:h+6 ffdI&b^桇li&!R1Լo6/$Nbuz]$!ޏ9SLk)W{ybb%⎒IcKOR~o?@ {US/] uJmu}kwh }Ϙ /,1vg ֣%|~TEcE{`Ym˯}[v3i2IOcCj<궱 Ep}gsI'7ܗ*:}܋8ҽe&;b;0k.PBx}FUbhʺeG,ϐt 3sfBO8l.T%QS6!uzT,Y4M6K t?t"9UʲB=ge1Oj?99O *xպ 7q\@&cEWA#X3&/Jv7i5n~̠s5wۡt-{SmuC_(aѫf㐘0aU^Za搽)*nBS/|RH[Kc4i)`k2J] H_w'5p<{e N\-NkΊjv4gԁsÓ>[m@(j|D},:O31>W#JLpGmiD<]iEqZRҿT$b4> Yu⯔|iW9rϿ \A 'qpQ0g0 qmmKJJ:-oʍތ`Mu,z%lq]¬1;$Cqp֧~_jEbm)#.mƬQ%w :E5rs6 ڕK钒@}]'oviuƼQa~/&|USo 0\lXVq2S6_CF-uTdc/B}˗TusIs^RmOQcb&%Qcؗ!&yv}ѿ &I/B:ܰkfjضޒ=/U4Јyݥ=duTS® S҈[b߈EDCTv6íȩ_)(*Ȝl( ?MxPa9w4SxD22D',I(4 :%l÷Q-.=+;ոQ *s? d+22JFyd,[Ɯ芒7+AQ MMBX8|ۙnWpL1/7ȽY.Ϻ{' M8DIfrr+(3Z&>OÅlzn 9pIA[ㄒ{-5Xh?)k h贍ϊ ږgkOS_JhH^D,{y z6aJ:!` }԰ˤX?+W"4Ej%ߡu #?#Y+#曷 %2{. "sA-ٲRP|y(2 "@7 oKW^ WD.V _!j58Qo9(˂E(KD[ߘ";i%N{rs+%-J‰Rs:HJ: 96ŎҒ}Q\YY~bb![({|uf3+Lipy8F*wd֦Tv[y3a4_m'i[3(KEG5w,kק3{N.yݷ)>^UWP-#OAoSu*l$.YGAh .Y&vq.^)˨ZBe'^%9.ߚ8w!CI 5ꄎW%X$M_G׵;pNv5eU ݱf%,yl>œ!GDwqb@*B0~~Mŷ$ه\@n(vbuMl<.\ Aky8ޕS켆/!|w)|@z"7 ;GU|`TjOJ^[R" Q#\ h26ܼ hi4|8yzMΜq>T贓|irUF~w292CO i5z bCNףּ5iX~i]%O6Zhe?ۄྻ[d9vېqFF2_ lMQ&P` Ek)HF- y->=/&"IQY{2UTШL2_/SGIQ ^ 5/agS|Ky5e!nlþ#z1<_>X^9lμ~I^uX̊rJ3c3\J)e2j] (zB÷Dizx+"g6-c1tZeTYX,T3"m*+{Ht*nx E\ܴf%9J5qQ-,ζgp1i% `e<%t/] ÊfS-A-EjEk p&>):.j &\:SO9'3D) Vaa=OH͓.yv[ԚDճ:GZG\}dzl 7iyz]5%㽎VfCear rm/Ķ#?g4^i:%gyJdrM2 %oBcpY* +BUo;N٦خ<]% 5֦L=7_ նq{ne^}Azfڱ;"(P KK֕37( |: 1ghU]n)szg}7:UgY |/ 뒃^-9 xgJnkɧlG1eJȖItc7\k`غ'dqќb՚eH0| |nFoD A1aa8b^|z:z~nVpL%ڠ-0y>N+2?ob麋͍b9LCw5UJWS"$.F2L*ۤ,]ŃfY'XrNE ,wH/5ɹrՑ~4Ys6.swo)Af-_Hl 0ndc7ȣFAiu7Qc8C [ h;'W9Z=YѺŚIrf88TC>|EwՏd h(fFi3 U䆩˶GF"Ǡɦ/l>(&: 3M g:.eA[=R65o1]!JO R Q޻ rt$b]'翠>gQz1U$FD3 C6zmYiU|S"ďS=u1v~j*mt ;Mseԙ4-=M _'Qşe|1ɨހ%stڑ] _K}_"N~NUDy$\!:Y' ? %ʏF1=A{ #3(y58}Gp)T5Yؓw%e|75E zP.ZcYG9OyT-g;ȣ ]$?,-\206p<+ƒ0sq [މUxp=UP5O͍n {JRKٰQ-# 5LhJ^*)ژ_ gD ѿ6zw,z_3hzlZ~.خi҈LA~l 9l&{=Js؉/q)XSz` w !.ghR'\ZqK0"gSe@ NAwKTC`GaA4%-SkdaIq\$1ڣlߺgsȑXE{,9VQ-]+Ч;>p_V.! R݌EC&&{}c?&u[n}İgHr3{j d^z3Uۊ74GZ>ψIJlڽ #P1٘Uq4gb8XĹN$N ^Q+}ڳƌϢL){iM5̌/I@F-)O(c;' lY- u יDY?T}DjՎH~ 95GjVtm}7bEQO`vז':άXVjx3Lj()Ϗz?9. NUtQLTʻC%*{:\rL ҒZ@e}M[:'EW:'5[4`lJ\ﱘZ{u,FXũPӺCy 9%u]  4d\ bv&5$@M+#'KЯj  4<hǓ1Z}J`~\۽ґM13xk'dz NLR%ܲ LXv%qpeg"qj:opAgn6!+ߨa쪠ׂ |J^;$^5i9@h)Iӕ0ţ ~pF:m@ ~OW@"\׍~;X>q Ҥ'⹪|EX}3S+[MdglˑLȴNCT{дv6ȡ} OJMNKZSi,by蘌KkOxLcSBtaQRUK9?{f0oĵtcKe-]{6#יcsmQ2Y%Sz NjLIRWjg7 >ELVp% w:l}T>T#p+i^0 EaCXPˢl$z3vJɠ.n1aIe&"oDv.0qc/Wo*j)]]hsy-u2;cl]9!w@J>҃"fgg/ZSbc?S^bڡl-$8Ǩ~?_l`[{Ƀ7KrvfǓ2<<秅/o5w{xsȅ*Uj.JR@g7rGg.9OѴ 2G NzԊCsCM<#F@w.q<)Lu;w/n׆ y͟(Ujm{N݋,f]T<6UR~}eP8C^5]%6:1JjcR,>jVIM%/ءȧEhDcYC;1U\MܺEwM@Jn\nNBvut`Βu| u0S?<9,B`|>9"Ym{J^=,Q$qMl.#ݞ4$>2*RFJ㵭J7I))!-GkHB? HVR9b+ybY}ɯ֪\LY2 Kbw_FlTs]R)Xދ<]!uдHzG?X{1IZD#2;sɵm"84ljB8nёdiP#9f9kil:Хz9P+cvZs11w2SOeHXNѡ("6Ij|0̭6iaQ7%q7ɄrFR(nٽ4m-|}05*̥J zf'v[bbgvNendstream endobj 439 0 obj << /Filter /FlateDecode /Length1 1454 /Length2 6683 /Length3 0 /Length 7670 >> stream xڍtT6"]2C ݠ 00 1C H R H4ߨ{soZw>iq@0E$44T 7ċQ@C+9CP< $`!Q tCP7@N^.p[_Vlr#nA4 ([#D+@iтUr8r#]l$8p-@ sqA4!?ȸ}[q ኮpC@a.=u 'YO'௻jWFpb #lp@KQ@_W$;@, 'et4ZPܮp_y~A߲*tt!P擇g/Zus1@`*]P0/ yZjr8!h0?5 qP.n0? P ` #Yw{L@h_=E D8x;~yt Ud8 WLV x@0X B˿Wk6п 0/Z%6?D  ? wo~Y0Wn(,4hq ;G0(*(Z24Ź ?~"Նl]p#`HW/ ZuV诊+zcBWQˆE9VH/5  ../|4!Ж-n.1.,$ m xwFs&/1\\sfzƿ_f?; n=ZK953C*Lef̩(:4eO_/Nyp+~9LI0EԈm$PХC.;RP^= /KML3ijHf urZÝU]Te1%K֪c//L#5=*/ /uF3ioW.^fo=T"Uf3`K([O5t܈p .̐\G'Ha3~{mQ1 %v }w[A=UZ sX84ọJ&>b=]GW&%Ϣm>WMG&l?ևRHSF^,J Y shh4 2&mmp`[u }Dxj\|gmsg/ D[Œ\'gDj%밼v噽;V\R`>ٝI/!UFd{mb{D+CG^Da_;uDY>쐉/uEK$u*Zgk\`X MxBe!ԗ` eF5CJLS/7z0ssriݦsʚ;$}fizH_(dXc< X>|sŻC"BY-a#w;nLVD^Tu{0;gjgZ5tmmefJmh|{|әZ(mun2!:J3(o#s'u0$ !L[! %8>3k cwyi&]\m x ~a{o}}#/qN-?DŽT 8wQL|Ignrgi*j>\7pSVCf=Ӻ}Y*TGmc6G=wgl\b*+7)?)5=b([WP\|T#v?C8%Wْ6ߙg= C&}Chr^$L ʆKbM 9}//Avf;Tv$hޚΤZ߭|A *HMn91̜p!*6b QW6)Btm.הETnbVLJU8MۜJپ4~c9&Xz}{ʶ{c"=@wAaB˓ N+a11:pR23 շwVicb&r9jn  1̓nӸto}Y ~Q{Ԫt|ZIZedY:pz~2 u!]Ʋ|!Aݦ6Nw4>׉6y]H1f>GSP:ЮR|{E͙2-F/-1X4w^ƬA)}9 Yz>%37һì 2o*Ykjqל+-h+=)I$<Hysg&jɎhpi.eg)шO&ڞM8Ǿ{ur TE s${G"úU2v>;%innܐ" 1#-8Qi Rz9[~nT92F~$Ow6-)jE1Hɇ#,{i]}ݖU;9bqh6[G?t1Kග=.QKl[#I'oF:OYFm0XF;UP=L~H*!9ړ@5׸qJыv9|;C9&8_QQx{sϼvc*mpf)f#WX n=yi`61 ._"4r ^YJ7)*FA#j F'0܉YDyX0 'V)' ɊA_~p[m=˳RrH~̓aߞbWN3JW{إDљXnoFtxϐ;%|N3ZX$VN<5;/I f\$i=V%~3QUe' / #Y/U5*4Ċ##\50&7c@;= I',wjOefsVÉ`]I"TO?H {-́_}c² u׫@qK"*ii_:iq낗?u}FϜ4+m}#S?f䲼3ca{MҺ}Eܮy|:#E ,zԧy[Ik@_Z3;B=bfjFCPfOrmԈ/1yesDz:~n\-O#ޠ Zy4ʧ y8Ç q@qhd 29:fV+'ҼϬψTl͘O&̊(8qma ZoQɭ=pWP8.>:oe aBf6oeo^;J;7;?y66y9[-5д-OLErFVdR f̍Ԑ~BB d rroG #OB:?|oK 9㉪to;@1l{&¹vY@A*ػ#ig}K\Znoaɤ+!}/V],kFqi[^7G3 fC+yl,*Ź`6G"Yd|".sە>.7)Ym1qbM kk  Ztz۵.qgmҎn0n?qzͯE:$;:/ ˜~NtN}[98h)[zkzv"SmHU$($iB\ ARf'cgpҝ'y?̜UHL1iku2Xԇ2_| {y~jK!dHw޴jBbJڡꗤ-8 ~+WWf0E~];wv7ԹOdrªP7P T R%ί{1bPvݟ X9^x2WdȔ}v^JZqw&?f0љ)MdLkn=Pfό1f(;,EoVݥ&]wṲ#D!c.;PtA!_z2 !W3d;tV?;ƍ(40y{CBknlﭝUPḍN@@°8s՞uqεC&NߩlBqp>SS_'l+ dК6 sZ>g}-c/'z[9Y7E\&B> stream xڍxTS6"wk{kI U&MHQt қ"={ߙgfgv62@!1B a @Ub@(1m'沀y( T=a` ֦`($@ @2 I  J Dyp(@_B\(?O [[/Pvy!`$@qc+B) aWQ |8`CAܰ4e]0d:AQq GUv%ag -q0N(O_D"``=o`K=0/ B p#֜f~l4W91|Х | zߚʡP06(yLqA1+ OCnEW譻{w@){3&^9s5; fEM#x™J{75=;*faN`MiFp'q0Gr/9H.}*< lz&z|^z7Rǜ*\5Pӡ̃1D~>sZw)A8ùC|v2H6]!5񙊄crR.@Emg5|[P>xխTv˛CgV$fmw:YT=_b^TI~NMٻJsbffz[87e*LQQ}.g}P%|X|T55Ouk7]Kr<%PjoKV =YWalO]^S['Vw1i]k޲vO`|5'}WqHSf#Qٔ(ަ6ܦ~B֩ Lzv*j*rbk!$j_Ha3Ha&u] 磖X Mmu,":30 Fb?XJSFu}~ekyY-L rqd euB+#C+5{֛խ(b$#.OWcK酥-Vl)ܓik[?Q⚸i9~) BJy"XQNc {,hv&U 7^LՄ=fR6/%S7͟}j(CwKW1MbR,˺We, ф[/z}JQO%['?^A0G左l &sj.ČdSJytùnTtN-es#;܊,l/L,{[`'!s#z4C#5"_'~ck2,P L[2Iy6<-b^xR?!M6K/hBi*ǘmK9EK[ "HS\doDh]?>>v Tsy"^>;t>-ģz췴Zk?|깒-M*$y'qn7CyJ3怔F(GKn$,|:h۞zf7q|dK)HO\oFrGDIZ]f7 T}_ 0(MN1!V?ʒP\,F.fUg%֍s<8+!  TʟxĒ 'vUz >NTpUpZgW 7,G»ٶ'ۊӂ$GDj DOhnRI;<}vcZ=%__cv#LkJeR]2reM"l>8k*rp>oeHmsn6x7ؑ~{nSճ,DFG%!(j9n==ÚLzdRcN!Ǎc(yܪ=wmO2]X,ϹFLm6AHHeAps;V7~Z1-,"*~ŧ {f`hj_cNn[%>cǭ~pdwazNt|y=%N("=5SF6'ԁ ޷$7B޽Kߛ>e=ĻԂeG6x|Д")D0?϶TL*.M pwbrfYB2L׉ْ3~_&GOŝH+}@ oCOz]yI1j[{425h9VX"8עպ*1 E>4ox '8t-D1k$=a@ֹ =.*-bOW?ОF +K:1&'̽j˾&YRH/A[r_fR+c~ϱiG(}Sj_ׂ6#ڙ_HzsjzwBϚqe'9Y\dhШ/E[ x7ǣpƾ2?R0&.2w:QںՌПʓbƴ;]*l'8 \**\';+sDpPAͷie:5F ua կ&!1jUO iP1vᙂtؗ!QOI U'R觓xw:Kp1 Ž-nڶQ|M?3摍LaYev <%UK@ѾglLT?w+ d!Mrx?wB=;qKh6\T +yj@<R)WW78xIpњWc^Q[9j5= 8Fk4Qgܶ(9v4@=vOp: #\WBj T>FyH= m8^: ] ՟ZSM/?&c(KC}+!EuU*RnĔZQ' h*泛Eo6>᝚ۮ?Oq*EUlg>FO&-QiYٳtW~y|\ ^(^xQ*$C{/|gx"Mًc^izFwW]:/ER48$̅k ['u"CS{_;K(ە >`) -V(_]J֛òϔmm ǩ_jz:RLzXK fT]҂}e^WzLi2X!~m1[KsLdqotҏg \oo mUSϑ E~~ ,Naݬ;lQ}E[JqfUii)Wnn7kG^j1dA!WRW3/U ]$%V#q m-nL\(UTݦcB[qayU OϬ%tr/f PPE,EImf/t(dݡ:Q4N*(νH/y/ghLތq# 3NAyPdg=PD1KUsvNU}77o9DV8Ѱa1i`z?!'Ȭp&zZux/t-/{TCD)-eWx">Oi+|nmBU87և-K9׹IpD*D6:x:Pcf!=rh>6gr_$=xNxAӼ0rV߶ F/LuX@|-M]k̏[/NkMT}$F&BoF\Ժ h b#.w `(j>PȀ"I&yщAPT.c˶W_'oB*/͍Q'~ڕߓJfj8=s+,^ֈMU|Bj F 7o0kLH'iR7cdȱ `rԳӻ"$۾{ۛx Jμ" *R;M7ʺov)wjZ'?2/HM30@4}emR=9pHXvSO5:n HwmjG5qWbmw3p6R!doyʑ`ܧv¿aX`%ym~|O( g}W?dL/]иm h\:)bPR8Ks5t<|KT͋ۧŅ6޴O- 4C@QH`sͬzfƮ'R/۴ݟi08L]-7\qnendstream endobj 441 0 obj << /Filter /FlateDecode /Length1 1393 /Length2 5904 /Length3 0 /Length 6854 >> stream xڍtTk.]  H"!ݍt C0t7RJI!! tw"(9kz}|EKGaU@Q< ^>1OMre&bӇ"]a EB(MBǩ#7GH@0k:/@"0[;߯'i'(` v" 0(_%8P(g1 Ãʋ@Jr>xPv+ ;A %b\u6(0 @a("]e53'XOC_xA)WB0d0prý`p[  TPEyp_`GW:9o(Hkhs a(W^W/_eS["p+ѯPz^?u#<>l`pk_ ݜO07_!h?6[( HXXPu@=!v__f4?g3 |\P ߎ@ 5 XAmapP?g0O { ߯F _ <>< !#!ď~]?o A8_e( A~x}!7Gn v9z - uZ5:^e-i-< A^>?vjCAU{8P-+_> 诊+za]PWAXR0D$2z7 G)4F? Ik| J7$@[P'B43< m^!>,ި;R>N ⸋u)`cS \G?},񫬚&ɊnQ٠Tc+BPLvܻWrbiXڨWB7 ?ZAQBk.N5T3# gGjgOYs xM8" B6dعF~ OMHy' B^s(gEdp'2&j JUKiO~AG/¯zi|ڝJlúCYݤO>~&cl>+%L\:[l&xGTJ 6% d_gh.l1T-KHZ0d`a8N0WqPDJ HNiġ})I+VEġ>&@K@JB{wx/rSf)>S3)05@?/SiwǒW:T!Gi$O?87|-B zNGe80+nUX NL%vw QC&{[6̘X1^nCA>} |y!%WV}WaR6cl/YJAkQM\]+^n1Ǎ+vTg|vI1x302'r\l]0?_"mR[snT菍) \ȠYγoswsa]C{,So3't8sĩzP ,`,^ʪ OoQI^wyԸ3t$]S*aLZhJXD.؊>׳s} zIϓS3c{"JGb 1 zBXܟGdMNP+X3+`d_.ђwN yp Yҩ6 ;/+C"}e#b-"E1[8JT>^֪^~](11}ԭ#@yjRlGv+?0^$l6"K}.)yb ݴ{%' ܑM_[!ief?`=90~o7*<;rc5[yP z*D^ #~ iIU*!|d2D0k}w+De!=_Q).Vn|[aq0NI,$kfNqJ@wJ;C>?9ݐAK7uֿ+MUkǤzo5_\҄WXuE\LfS]k5^nM;OO*Gn8bFjxfM1G3TwNyJnjZ{yB"V,Z7LbN-7=)S8~*Z72YT廇CmsLt$K)X̢R+?a ;.OSnGs[\#ˣ[Hqťv5 Vߘ"u1I]oP7CXO#wk}45^~>3d݈=S:!)58EbÖ"x-Ŏ_$ &-󍶒ZXƯ+&xE&wDWHycgB LL.Rk&i>~l߹FwfԆsś2_v[,>5bê_ޛk)I.@9*r 껖v嵝nQk!/B|uK"KxT>*DbglzcƢ. Ҭc$%*7۷l45wL2WlV} dhzel1iݳ0,U8U4JVʂJۥ陛gOqV|fSeiX}IeMqmϸPs"d$ f ] m!g?50K⊪oE,h(V´z@Y Ibi?bu,V%ܣ]x࣌ƹ׫gkWS⊴Jy*_UP[$\ff;, Tgܯ^gTF i9[c}f+d"tIYqiPzYz8mޢO&!npMԉ搘"?WdK #zAPIj *<:\ZOXZsuNA_便ba_g>$:Z;ՠ<1a_KRemٻ=k޳[S"'1|:& 51?g9c|/3%\FAnDY9ό`3HN{Eysw"Ay~3&;{Jr0bWIN=HaSOpSWm_2!&f.(5͐ǔ F2 1^RsvC8j54?Up*ոu ?ƪGX@oē|F;8do =rw%ffEKȏg9? 13Q8|L…-N5L+F^VqOso\A $A4AzGǚ#P`7oGeeu#:+?5vɼ`\ ș p\g4=}M%:{(V1p]J9»$ʃ|GBHCe|/#>I<e&sN$618G}kl` 犌,Ou*m"Zb@I\#^=mVs.S˲X W{0[^`g s2椁F ߤñ7m"^#3Rܤ #m ghg" Y l+V fRz%g3j,.[WRruI?n.>kd#}cYk J1$uHt#Yn:`B)JYl}UFdWK63Pvrk=r?Kر,o1r|UBoɣ!Tr_زٜԺw]:+7´abd1ϰZꋼ~nbF:zC=$eϰ Uq|l|ʨ`!X;ӭ3~'ݏlԼ4!~D<2ܡC i7/f:?4 s|ٱ?9*+ຆ*6%0{NTd_[O㷌lr v:MRmkFlfGKԷ/_D 1R#eֺĽjj#%'\7Z|,CnɞzXPќ+J@ w?2ö,eGq 94K'bpSI< Vi&Z<[Ƚ'q4B"9u,*S1xbt.XqHkk(h~L'zy|kخ UC&^fR8c%Rܞ+f,&A^ȯ"LQTz$6F:}qW;iϾk|21օr--RZNȏYs<%fU='970(GTvy Ǻx7 " YOVd'555_[#Й܎ ~Br|fѹLfï}rֲD5 ;Jo)sW#l"+ٴTJB_F'~7䒗‡ķzTS ?w߼(`4)l {knbu-,gZ2P:>4PZ=3Klj:مxR{%Tl+FiNn<-ZobdZd],9o>.xk36#RO" Bo$tR"i|*6EHJ%;% /pnO>WWFiD4Z]S9!T@3> 7fTcVkY\5Ã-{e-=?+:lS&Y(Pendstream endobj 442 0 obj << /Type /XRef /Length 274 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 97 0 R /Root 96 0 R /Size 443 /ID [<8901b37e2915bf4642ede5158f39cdf7>] >> stream xcb&F~0 $8J$ tohZ%OKzw@iIHk$ Z "RAih%Oc?Ai #A^ ɘd bˀkC ҸDɺj@B*t?0}_6>GI$Fb m(0ځH R DSfNrA$8!w'^ De!jDz?#ēHpƎ2S 6 "yRZ>6p~6g03 endstream endobj startxref 371685 %%EOF proto/DESCRIPTION0000744000176200001440000000076412065416540013136 0ustar liggesusersPackage: proto Version: 0.3-10 Date: 2012-12-21 Title: Prototype object-based programming Author: Louis Kates, Thomas Petzoldt Maintainer: Gabor Grothendieck Description: An object oriented system using object-based, also called prototype-based, rather than class-based object oriented ideas. Suggests: graph, Rgraphviz License: GPL-2 URL: http://r-proto.googlecode.com Packaged: 2012-12-22 16:03:20 UTC; Louis Repository: CRAN Date/Publication: 2012-12-22 21:51:44 proto/demo/0000755000176200001440000000000012065354671012352 5ustar liggesusersproto/demo/proto.R0000744000176200001440000000623212065354671013644 0ustar liggesusers######################################################################## ## DEMO: ecological model applications have common properties, ## that belong together: ## - equations ## - constant parameters ## - initial values of the state variables ## - time steps ## - an adequate solver, and ## - utility functions ######################################################################## # if (dev.cur() <= 1) get(getOption("device"))() opar <- par(ask = interactive() && (.Device %in% c("X11", "GTK", "gnome", "windows","quartz"))) if (require(odesolve)) { library(odesolve) library(proto) ## object creation from scratch (ex-nihilo) lv <- proto(expr = { equations <- function(t, x, p) { dx1.dt <- p["k1"] * x[1] - p["k2"] * x[1] * x[2] dx2.dt <- - p["k3"] * x[2] + p["k2"] * x[1] * x[2] list(c(dx1.dt, dx2.dt)) } # vectors of parameters, timesteps and initial values parms <- c(k1=0.2, k2=0.2, k3=0.2) times <- 1:100 init <- c(prey=0.5, predator=1) # two methods solve <- function(.) { # must use .$with(equations) instead of .$equations # as latter can only be used in a call equations <- .$with(equations) res <- as.data.frame(rk4(.$init, .$times, equations, .$parms)) } plot <- function(.) { res <- .$solve() graphics::plot(res$time, res$predator, col = "red", type = "b", pch = 20) graphics::plot(res$time, res$prey, col = "green", type = "b", pch = 20) } }) ## the created object is fully functional par(mfrow=c(2,1)) res <- lv$solve() plot(res) lv$plot() ## derive a child object with a different ODE solver lv.lsoda <- lv$proto( solve <- function(.) { equations <- .$with(equations) res <- lsoda(.$init, .$times, equations, .$parms) as.data.frame(res) } ) ## test this child object lv.lsoda$plot() ### derive two scenarios ## scenario 1 with initial values, that are in equilibrium sc1 <- lv.lsoda$proto(init <- c(prey=1, predator=1)) ## scenario 2, similar to scenario 1, but with different parameters sc2 <- sc1$proto(parms <- c(k1=0.3, k2=0.2, k3=0.2)) ## solve, plot, compare these scenarios par(mfrow=c(2,2)) sc1$plot() sc2$plot() ## and as a last example, we modify parameters of the parent lv$times <- seq(0, 100, 0.1) sc1$main <- "Scenario 1" sc2$main <- "Scenario 2" lv$plot <- function(.) { res <- .$solve() graphics::plot(res$time, res$predator, col = "red", type = "l", pch = 20, main=.$main) graphics::plot(res$time, res$prey, col = "green", type = "l", pch = 20, main=.$main) } par(mfrow=c(2,2)) sc1$plot() sc2$plot() ## fragile base object: the folowing would give an error # lv$plot() ## but it works if we add the required main title lv$main <- "Reference" lv$plot() ## show the object relationships g <- graph.proto() plot(g) ## Conclusion: ## - the responsibility is due to the user, but ## - prototypes allow oop without overhead } par(opar) proto/demo/proto-vignette.R0000744000176200001440000001156012065354671015467 0ustar liggesusers # code from proto vignette library(proto) addProto <- proto( x = rnorm(5), add = function(.) sum(.$x) ) addProto$add() addProto2 <- addProto$proto( x = 1:5 ) addProto2$add() addProto2$y <- seq(2,10,2) addProto2$x <- 1:10 addProto2$add3 <- function(., z) sum(.$x) + sum(.$y) + sum(z) addProto2$add() addProto2$add3(c(2,3,5)) addProto2$y # addProto2$add <- function(.) .super$add(.) + sum(.$y) addProto2$add <- function(.) parent.env(addProto2)$add(.) + sum(.$y) addProto2a <- addProto$proto(x = 1:5) addProto2a$add() Add <- proto( add = function(.) sum(.$x), new = function(., x) .$proto(x=x) ) add1 <- Add$new(x = 1:5) add1$add() add2 <- Add$new(x = 1:10) add2$add() Logadd <- Add$proto( logadd = function(.) log( .$add() ) ) logadd1 <- Logadd$new(1:5) logadd1$logadd() addProto$ls() addProto$str() addProto$print() addProto$as.list() addProto2a$parent.env() addProto$eapply(length) # show length of each component addProto$identical(addProto2) library(Rgraphviz) g <- graph.proto() plot(g) oo <- proto(expr = { x <- rnorm(251, 0, 0.15) x <- filter(x, c(1.2, -0.05, -0.18), method = "recursive") x <- unclass(x[-seq(100)]) * 2 + 20 tt <- seq(12200, length = length(x)) ..x.smooth <- NA xlab <- "Time (days)" ylab <- "Temp (deg C)" pch <- "." col <- rep("black",2) smooth <- function(., ...) { .$..x.smooth <- supsmu(.$tt, .$x, ...)$y } plot <- function(.) with(., { graphics::plot(tt, x, pch = pch, xlab = xlab, ylab = ylab, col = col[1]) if (!is.na(..x.smooth[1])) lines(tt, ..x.smooth, col=col[2]) }) residuals <- function(.) with(., { data.frame(t = tt, y = x - ..x.smooth) }) }) ## inspect the object oo oo$ls(all.names = TRUE) oo$pch par(mfrow=c(1,2)) # oo$plot() ## set a slot oo$pch <- 20 ## smooth curve and plot oo$smooth() oo$plot() ## plot and analyse residuals, stored in the object plot(oo$residuals(), type="l") # hist(oo$residuals()$y) # acf(oo$residuals()$y) oo.res <- oo$proto( pch = "-", x = oo$residuals()$y, ylab = "Residuals deg K" ) par(mfrow=c(1,1)) oo.res$smooth() oo.res$plot() ## change date format of the parent oo$tt <- oo$tt + as.Date("1970-01-01") oo$xlab <- format(oo.res$tt[1], "%Y") ## change colors oo$col <- c("blue", "red") oo$splot <- function(., ...) { .$smooth(...) .$plot() } ## the new function is now available to all children of oo par(mfrow=c(1,2)) oo$splot(bass=2) oo.res$splot() ## and at last we change the data and repeat the analysis oos <- oo$proto( expr = { tt <- seq(0,4*pi, length=1000) x <- sin(tt) + rnorm(tt, 0, .2) }) oos$splot() #plot(oos$residuals()) oos.res <- as.proto( oo.res$as.list(), parent = oos ) oos.res$x <- oos$residuals()$y oos.res$splot() par(mfrow=c(1,2)) oos$splot() oos.res$splot() longley.ci <- proto( expr = { data(longley) x <- longley[,c("GNP", "Unemployed")] n <- nrow(x) pp <- c(.025, .975) corx <- cor(x)[1,2] ci <- function(.) (.$CI <- tanh( atanh(.$corx) + qnorm(.$pp)/sqrt(.$n-3) )) }) longley.ci.boot <- longley.ci$proto({ N <- 1000 ci <- function(.) { corx <- function(idx) cor(.$x[idx,])[1,2] samp <- replicate(.$N, corx(sample(.$n, replace = TRUE))) (.$CI <- quantile(samp, .$pp)) } }) longley.ci$ci() longley.ci.boot$ci() longley.ci.boot$proto(N=4000)$ci() # do not need left <- right <- NULL anymore in leaf # also eliminated right <- NULL in parent tree <- proto(expr = { incr <- function(., val) .$value <- .$value + val ..Name <- "root" value <- 3 ..left <- proto( expr = { ..Name = "leaf" }) }) cat("root:", tree$value, "leaf:", tree$..left$value, "\n") # incrementing root increments leaf too tree$incr(1) cat("root:", tree$value, "leaf:", tree$..left$value, "\n") # incrementing leaf gives it its own value field # so now incrementing root does not increment leaf tree$..left$incr(10) cat("root:", tree$value, "leaf:", tree$..left$value, "\n") tree$incr(5) cat("root:", tree$value, "leaf:", tree$..left$value, "\n") lineq <- proto(eq = "6*x + 12 - 10*x/4 = 2*x", solve = function(.) { e <- eval(parse(text=paste(sub("=", "-(", .$eq), ")")), list(x = 1i)) -Re(e)/Im(e) }, print = function(.) cat("Equation:", .$eq, "Solution:", .$solve(), "\n") ) lineq$print() lineq2 <- lineq$proto(eq = "2*x = 7*x-12+x") lineq2$print() Lineq <- lineq rm(eq, envir = Lineq) Lineq$new <- function(., eq) proto(., eq = eq) lineq3 <- Lineq$new("3*x=6") lineq3$print() proto/demo/00Index0000744000176200001440000000016012065354671013502 0ustar liggesusersproto Using prototype objects with a differential equations analysis. proto-vignette code from proto vignette proto/COPYRIGHTS0000744000176200001440000000042012065354671013041 0ustar liggesusersCOPYRIGHT STATUS ---------------- This bulk of this code is Copyright (C) 2004 Louis Kates, Thomas Petzoldt All code is subject to the GNU General Public License, Version 2. See the file COPYING for the exact conditions under which you may redistribute it. proto/COPYING0000744000176200001440000004363412065354671012474 0ustar liggesusers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.