doMC/0000755000176200001440000000000014177342440011102 5ustar liggesusersdoMC/NAMESPACE0000644000176200001440000000010114171057772012316 0ustar liggesusersexport(registerDoMC) import(foreach, iterators, parallel, utils) doMC/demo/0000755000176200001440000000000014171057772012033 5ustar liggesusersdoMC/demo/sincMC.R0000644000176200001440000000166414171057772013341 0ustar liggesuserslibrary(doMC) registerDoMC() # Define a function that creates an iterator that returns subvectors ivector <- function(x, chunks) { n <- length(x) i <- 1 nextEl <- function() { if (chunks <= 0 || n <= 0) stop('StopIteration') m <- ceiling(n / chunks) r <- seq(i, length=m) i <<- i + m n <<- n - m chunks <<- chunks - 1 x[r] } obj <- list(nextElem=nextEl) class(obj) <- c('abstractiter', 'iter') obj } # Define the coordinate grid and figure out how to split up the work x <- seq(-10, 10, by=0.1) nw <- getDoParWorkers() cat(sprintf('Running with %d worker(s)\n', nw)) # Compute the value of the sinc function at each point in the grid z <- foreach(y=ivector(x, nw), .combine=cbind) %dopar% { y <- rep(y, each=length(x)) r <- sqrt(x ^ 2 + y ^ 2) matrix(10 * sin(r) / r, length(x)) } # Plot the results as a perspective plot persp(x, x, z, ylab='y', theta=30, phi=30, expand=0.5, col="lightblue") doMC/demo/00Index0000644000176200001440000000006114171057772013162 0ustar liggesuserssincMC computation of the sinc function doMC/man/0000755000176200001440000000000014171057772011662 5ustar liggesusersdoMC/man/doMC-package.Rd0000644000176200001440000000247714171057772014376 0ustar liggesusers\name{doMC-package} \alias{doMC-package} \alias{doMC} \docType{package} \title{ The doMC Package } \description{ The doMC package provides a parallel backend for the foreach/\%dopar\% function using the multicore functionality of the parallel package. } \details{ Further information is available in the following help topics: \tabular{ll}{ \code{registerDoMC} \tab register doMC to be used by foreach/\%dopar\%\cr } To see a tutorial introduction to the doMC package, use \code{vignette("gettingstartedMC")}. To see a tutorial introduction to the foreach package, use \code{vignette("foreach")}. To see a demo of doMC computing the sinc function, use \code{demo(sincMC)}. Some examples (in addition to those in the help pages) are included in the ``examples'' directory of the doMC package. To list the files in the examples directory, use \code{list.files(system.file("examples", package="doMC"))}. To run the bootstrap example, use \code{source(system.file("examples", "bootMC.R", package="doMC"))}. This is a simple benchmark, executing both sequentally and in parallel. There are many more examples that come with the foreach package, which will work with the doMC package if it is registered as the parallel backend. For a complete list of functions with individual help pages, use \code{library(help="doMC")}. } \keyword{package} doMC/man/registerDoMC.Rd0000644000176200001440000000224014171057772014476 0ustar liggesusers\name{registerDoMC} \alias{registerDoMC} \title{registerDoMC} \description{ The \code{registerDoMC} function is used to register the multicore parallel backend with the \code{foreach} package. } \usage{ registerDoMC(cores=NULL, \dots) } \arguments{ \item{cores}{The number of cores to use for parallel execution. If not specified, the number of cores is set to the value of \code{options("cores")}, if specified, or to approximately half the number of cores detected by the \code{parallel} package.} \item{\dots}{Package options. Currently, only the \code{nocompile} option is supported. If \code{nocompile} is set to \code{TRUE}, compiler support is disabled.} } \details{ The \code{multicore} functionality, originally written by Simon Urbanek and subsumed in the \code{parallel} package in R 2.14.0, provides functions for parallel execution of R code on machines with multiple cores or processors, using the system \code{fork} call to spawn copies of the current process. The \code{multicore} functionality, and therefore \code{registerDoMC}, should not be used in a GUI environment, because multiple processes then share the same GUI. } \keyword{utilities} doMC/DESCRIPTION0000644000176200001440000000151014177342440012605 0ustar liggesusersPackage: doMC Type: Package Title: Foreach Parallel Adaptor for 'parallel' Version: 1.3.8 Authors@R: c(person("Folashade", "Daniel", role="cre", email="fdaniel@microsoft.com"), person("Revolution", "Analytics", role=c("aut", "cph")), person("Steve", "Weston", role="aut")) Description: Provides a parallel backend for the %dopar% function using the multicore functionality of the parallel package. Depends: R (>= 2.14.0), foreach(>= 1.2.0), iterators(>= 1.0.0), parallel Imports: utils Enhances: compiler, RUnit License: GPL-2 NeedsCompilation: no Packaged: 2022-01-16 18:26:44 UTC; folashade Author: Folashade Daniel [cre], Revolution Analytics [aut, cph], Steve Weston [aut] Maintainer: Folashade Daniel OS_type: unix Repository: CRAN Date/Publication: 2022-02-05 00:30:24 UTC doMC/build/0000755000176200001440000000000014171061544012176 5ustar liggesusersdoMC/build/vignette.rds0000644000176200001440000000034714171061544014541 0ustar liggesusersQ0,QHLx' x0$=xmhy$XHiB"blffg6:!tJÅ˂@hD6]Ƥ,xH"$żU0ÀBV 8#IwpMSc"^ [prc\f2 |S(#95EFK!RUZoahRF]ԡD/}TydoMC/tests/0000755000176200001440000000000014171057772012251 5ustar liggesusersdoMC/tests/doRUnit.R0000644000176200001440000000535114171057772013764 0ustar liggesusers## unit tests will not be done if RUnit is not available if(require("RUnit", quietly=TRUE)) { ## --- Setup --- pkg <- "doMC" # <-- Change to package name! if(Sys.getenv("RCMDCHECK") == "FALSE") { ## Path to unit tests for standalone running under Makefile (not R CMD check) ## PKG/tests/../inst/unitTests path <- file.path(getwd(), "..", "inst", "unitTests") } else { ## Path to unit tests for R CMD check ## PKG.Rcheck/tests/../PKG/unitTests path <- system.file(package=pkg, "unitTests") } cat("\nRunning unit tests\n") print(list(pkg=pkg, getwd=getwd(), pathToUnitTests=path)) library(package=pkg, character.only=TRUE) ################################################################ ## BEGIN PACKAGE SPECIFIC CONFIGURATION # ################################################################ registerDoMC(cores=2) ################################################################ ## END PACKAGE SPECIFIC CONFIGURATION # ################################################################ ## If desired, load the name space to allow testing of private functions ## if (is.element(pkg, loadedNamespaces())) ## attach(loadNamespace(pkg), name=paste("namespace", pkg, sep=":"), pos=3) ## ## or simply call PKG:::myPrivateFunction() in tests ## --- Testing --- ## Define tests testSuite <- defineTestSuite(name=paste(pkg, "unit testing"), dirs=path, testFileRegexp = "^options\\.R$") ## Run tests <- runTestSuite(testSuite) ## Default report name pathReport <- file.path(tempdir(), "report") ## Report to stdout and text files cat("------------------- UNIT TEST SUMMARY ---------------------\n\n") printTextProtocol(tests, showDetails=FALSE) printTextProtocol(tests, showDetails=FALSE, fileName=paste(pathReport, "Summary.txt", sep="")) printTextProtocol(tests, showDetails=TRUE, fileName=paste(pathReport, ".txt", sep="")) ## Report to HTML file printHTMLProtocol(tests, fileName=paste(pathReport, ".html", sep="")) # printHTMLProtocol(tests, fileName=file.path(dirname(dirname(getwd())),pkg,"gsDesign-RUnit-Test-Summary.html")) #paste(pathReport, ".html", sep="")) ## Return stop() to cause R CMD check stop in case of ## - failures i.e. FALSE to unit tests or ## - errors i.e. R errors tmp <- getErrors(tests) if(tmp$nFail > 0 | tmp$nErr > 0) { stop(paste("\n\nunit testing failed (#test failures: ", tmp$nFail, ", #R errors: ", tmp$nErr, ")\n\n", sep="")) } } else { warning("cannot run unit tests -- package RUnit is not available") } doMC/vignettes/0000755000176200001440000000000014171061544013107 5ustar liggesusersdoMC/vignettes/gettingstartedMC.Rnw0000644000176200001440000002571114171057772017065 0ustar liggesusers% \VignetteIndexEntry{Getting Started with doMC and foreach} % \VignetteDepends{doMC} % \VignetteDepends{foreach} % \VignettePackage{doMC} \documentclass[12pt]{article} \usepackage{amsmath} \usepackage[pdftex]{graphicx} \usepackage{color} \usepackage{xspace} \usepackage{url} \usepackage{fancyvrb} \usepackage{fancyhdr} \usepackage[ colorlinks=true, linkcolor=blue, citecolor=blue, urlcolor=blue] {hyperref} \usepackage{lscape} \usepackage{Sweave} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % define new colors for use \definecolor{darkgreen}{rgb}{0,0.6,0} \definecolor{darkred}{rgb}{0.6,0.0,0} \definecolor{lightbrown}{rgb}{1,0.9,0.8} \definecolor{brown}{rgb}{0.6,0.3,0.3} \definecolor{darkblue}{rgb}{0,0,0.8} \definecolor{darkmagenta}{rgb}{0.5,0,0.5} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\bld}[1]{\mbox{\boldmath $#1$}} \newcommand{\shell}[1]{\mbox{$#1$}} \renewcommand{\vec}[1]{\mbox{\bf {#1}}} \newcommand{\ReallySmallSpacing}{\renewcommand{\baselinestretch}{.6}\Large\normalsize} \newcommand{\SmallSpacing}{\renewcommand{\baselinestretch}{1.1}\Large\normalsize} \newcommand{\halfs}{\frac{1}{2}} \setlength{\oddsidemargin}{-.25 truein} \setlength{\evensidemargin}{0truein} \setlength{\topmargin}{-0.2truein} \setlength{\textwidth}{7 truein} \setlength{\textheight}{8.5 truein} \setlength{\parindent}{0.20truein} \setlength{\parskip}{0.10truein} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagestyle{fancy} \lhead{} \chead{Getting Started with doMC and foreach} \rhead{} \lfoot{} \cfoot{} \rfoot{\thepage} \renewcommand{\headrulewidth}{1pt} \renewcommand{\footrulewidth}{1pt} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \title{Getting Started with doMC and foreach} \author{Steve Weston} \begin{document} \maketitle \thispagestyle{empty} \section{Introduction} The \texttt{doMC} package is a ``parallel backend'' for the \texttt{foreach} package. It provides a mechanism needed to execute \texttt{foreach} loops in parallel. The \texttt{foreach} package must be used in conjunction with a package such as \texttt{doMC} in order to execute code in parallel. The user must register a parallel backend to use, otherwise \texttt{foreach} will execute tasks sequentially, even when the \%dopar\% operator is used.\footnote{\texttt{foreach} will issue a warning that it is running sequentially if no parallel backend has been registered. It will only issue this warning once, however.} The \texttt{doMC} package acts as an interface between \texttt{foreach} and the \texttt{multicore} functionality of the \texttt{parallel} package, originally written by Simon Urbanek and incorporated into \texttt{parallel} for R 2.14.0. The \texttt{multicore} functionality currently only works with operating systems that support the \texttt{fork} system call (which means that Windows isn't supported). Also, \texttt{multicore} only runs tasks on a single computer, not a cluster of computers. That means that it is pointless to use \texttt{doMC} and \texttt{multicore} on a machine with only one processor with a single core. To get a speed improvement, it must run on a machine with multiple processors, multiple cores, or both. \section{A word of caution} Because the \texttt{multicore} functionality starts its workers using \texttt{fork} without doing a subsequent \texttt{exec}, it has some limitations. Some operations cannot be performed properly by forked processes. For example, connection objects very likely won't work. In some cases, this could cause an object to become corrupted, and the R session to crash. In addition, it usually isn't safe to run \texttt{doMC} and \texttt{multicore} from a GUI environment. \section{Registering the \texttt{doMC} parallel backend} To register \texttt{doMC} to be used with \texttt{foreach}, you must call the \texttt{registerDoMC} function. This function takes only one argument, named ``cores''. This specifies the number of worker processes that it will use to execute tasks, which will normally be equal to the total number of cores on the machine. You don't need to specify a value for it, however. By default, the \texttt{multicore} package will use the value of the ``cores'' option, as specified with the standard ``options'' function. If that isn't set, then \texttt{multicore} will try to detect the number of cores, and use approximately half that many workers. Remember: unless \texttt{registerDoMC} is called, \texttt{foreach} will {\em not} run in parallel. Simply loading the \texttt{doMC} package is not enough. \section{An example \texttt{doMC} session} Before we go any further, let's load \texttt{doMC}, register it, and use it with \texttt{foreach}: <>= library(doMC) registerDoMC(2) foreach(i=1:3) %dopar% sqrt(i) @ \begin{quote} Note well that this is {\em not} a practical use of \texttt{doMC}. This is my ``Hello, world'' program for parallel computing. It tests that everything is installed and set up properly, but don't expect it to run faster than a sequential \texttt{for} loop, because it won't! \texttt{sqrt} executes far too quickly to be worth executing in parallel, even with a large number of iterations. With small tasks, the overhead of scheduling the task and returning the result can be greater than the time to execute the task itself, resulting in poor performance. In addition, this example doesn't make use of the vector capabilities of \texttt{sqrt}, which it must to get decent performance. This is just a test and a pedagogical example, {\em not} a benchmark. \end{quote} But returning to the point of this example, you can see that it is very simple to load \texttt{doMC} with all of its dependencies (\texttt{foreach}, \texttt{iterators}, \texttt{multicore}, etc), and to register it. For the rest of the R session, whenever you execute \texttt{foreach} with \texttt{\%dopar\%}, the tasks will be executed using \texttt{doMC} and \texttt{multicore}. Note that you can register a different parallel backend later, or deregister \texttt{doMC} by registering the sequential backend by calling the \texttt{registerDoSEQ} function. \section{A more serious example} Now that we've gotten our feet wet, let's do something a bit less trivial. One good example is bootstrapping. Let's see how long it takes to run 10,000 bootstrap iterations in parallel on \Sexpr{getDoParWorkers()} cores: <>= x <- iris[which(iris[,5] != "setosa"), c(1,5)] trials <- 10000 ptime <- system.time({ r <- foreach(icount(trials), .combine=cbind) %dopar% { ind <- sample(100, 100, replace=TRUE) result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit)) coefficients(result1) } })[3] ptime @ Using \texttt{doMC} and \texttt{multicore} we were able to perform 10,000 bootstrap iterations in \Sexpr{ptime} seconds on \Sexpr{getDoParWorkers()} cores. By changing the \texttt{\%dopar\%} to \texttt{\%do\%}, we can run the same code sequentially to determine the performance improvement: <>= stime <- system.time({ r <- foreach(icount(trials), .combine=cbind) %do% { ind <- sample(100, 100, replace=TRUE) result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit)) coefficients(result1) } })[3] stime @ The sequential version ran in \Sexpr{stime} seconds, which means the speed up is about \Sexpr{round(stime / ptime, digits=1)} on \Sexpr{getDoParWorkers()} workers.\footnote{If you build this vignette yourself, you can see how well this problem runs on your hardware. None of the times are hardcoded in this document. You can also run the same example which is in the examples directory of the \texttt{doMC} distribution.} Ideally, the speed up would be \Sexpr{getDoParWorkers()}, but no multicore CPUs are ideal, and neither are the operating systems and software that run on them. At any rate, this is a more realistic example that is worth executing in parallel. I'm not going to explain what it's doing or how it works here. I just want to give you something more substantial than the \texttt{sqrt} example in case you want to run some benchmarks yourself. You can also run this example on a cluster by simply registering a different parallel backend that supports clusters in order to take advantage of more processors. \section{Getting information about the parallel backend} To find out how many workers \texttt{foreach} is going to use, you can use the \texttt{getDoParWorkers} function: <>= getDoParWorkers() @ This is a useful sanity check that you're actually running in parallel. If you haven't registered a parallel backend, or if your machine only has one core, \texttt{getDoParWorkers} will return one. In either case, don't expect a speed improvement. \texttt{foreach} is clever, but it isn't magic. The \texttt{getDoParWorkers} function is also useful when you want the number of tasks to be equal to the number of workers. You may want to pass this value to an iterator constructor, for example. You can also get the name and version of the currently registered backend: <>= getDoParName() getDoParVersion() @ This is mostly useful for documentation purposes, or for checking that you have the most recent version of \texttt{doMC}. \section{Specifying multicore options} The \texttt{doMC} package allows you to specify various options when running \texttt{foreach} that are supported by the underlying \texttt{mclapply} function: ``preschedule'', ``set.seed'', ``silent'', and ``cores''. You can learn about these options from the \texttt{mclapply} man page. They are set using the \texttt{foreach} \texttt{.options.multicore} argument. Here's an example of how to do that: <>= mcoptions <- list(preschedule=FALSE, set.seed=FALSE) foreach(i=1:3, .options.multicore=mcoptions) %dopar% sqrt(i) @ The ``cores'' options allows you to temporarily override the number of workers to use for a single \texttt{foreach} operation. This is more convenient than having to re-register \texttt{doMC}. Although if no value of ``cores'' was specified when \texttt{doMC} was registered, you can also change this value dynamically using the \texttt{options} function: \begin{verbatim} > registerDoMC() > getDoParWorkers() [1] 3 > options(cores=2) > getDoParWorkers() [1] 2 > options(cores=3) > getDoParWorkers() [1] 3 \end{verbatim} If you did specify the number of cores when registering \texttt{doMC}, the ``cores'' option is ignored: <>= registerDoMC(2) options(cores=4) getDoParWorkers() @ As you can see, there are a number of options for controlling the number of workers to use with \texttt{multicore}, but the default behaviour usually does what you want. \section{Conclusion} The \texttt{doMC} and \texttt{multicore} packages provide a nice, efficient parallel programming platform for multiprocessor/multicore computers running operating systems such as Linux and Mac OS X. It is very easy to install, and very easy to use. In short order, an average R programmer can start executing parallel programs, without any previous experience in parallel computing. \end{document} doMC/NEWS0000644000176200001440000000435714171061370011604 0ustar liggesusers NEWS/ChangeLog for doMC ------------------------- 1.3.8 o 2022-01-16 Maintainer change (Folashade Daniel; fdaniel@microsoft.com). 1.3.7 o 2020-10-12 Maintainer change (Michelle Wallig; Michelle.Wallig@microsoft.com). 1.3.6 2019-07-27 o Maintainer change (Hong Ooi; hongooi@microsoft.com). 1.3.5 2017-12-08 o Change test report path for compliance with CRAN policies. 1.3.3 2014-02-25 o Modified so that vignette uses no more than two workers. 1.3.2 2013-11-18 o Modified to check for errors early to avoid calling combine function when errors occur. 1.3.1 2013-10-28 o Added iterators, parallel, and utils to NAMESPACE imports. o Removed restriction to Unix, since parallel exists on Windows. (However, as with parallel's multicore functionality, only one core is supported on Windows.) 1.3.0 2013-02-19 o Changed dependency on multicore package to parallel. 1.2.5 2012-04-11 o Moved vignettes to new preferred location. 1.2.4 2012-02-24 o Modified default cores computation to use parallel package tools from R 2.14.0 and later if possible. o Modified doRUnit.R to use two cores when run during R CMD check. 1.2.3 2011-08-15 o Added support for package options via registerDoMC o Added package option "nocompile" to disable compiler support 1.2.2 2011-05-16 o Added support for the compiler package in R 2.13.0 o Enhanced unit tests to enable running them under R CMD check. 1.2.1 2010-01-25 o Changed license to GPL-2 o Error handling for the doMC backend should now be correct. If .errorhandling is set to anything other than 'stop', it should return an array containing the results of all iterations which did not cause errors. (From a bug report by Brian Peterson) 1.2.0 2009-10-05 o added support for all of the mclapply options via the foreach .options.multicore argument o added a "Getting Started" vignette. o added examples directory 1.1.1 2009-06-29 o added cores option to registerDoMC o fixed bug that caused getDoParWorkers to report incorrect value 1.1.0 2009-06-26 o initial public release doMC/R/0000755000176200001440000000000014171057772011310 5ustar liggesusersdoMC/R/doMC.R0000644000176200001440000001472414171057772012265 0ustar liggesusers# # Copyright (c) 2008-2010, Revolution Analytics # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License (version 2) as # published by the Free Software Foundation. # # 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. # # A copy of the GNU General Public License is available at # http://www.r-project.org/Licenses/ # .options <- new.env(parent=emptyenv()) # this explicitly registers a multicore parallel backend registerDoMC <- function(cores=NULL, ...) { opts <- list(...) optnames <- names(opts) if (is.null(optnames)) optnames <- rep('', length(opts)) # filter out unnamed arguments with a warning unnamed <- ! nzchar(optnames) if (any(unnamed)) { warning('ignoring doMC package option(s) specified with unnamed argument') opts <- opts[!unnamed] optnames <- optnames[!unnamed] } # filter out unrecognized options with a warning recog <- optnames %in% c('nocompile') if (any(!recog)) { warning(sprintf('ignoring unrecognized doMC package option(s): %s', paste(optnames[!recog], collapse=', ')), call.=FALSE) opts <- opts[recog] optnames <- optnames[recog] } # clear .options in case registerDoMC is called multiple times old.optnames <- ls(.options, all.names=TRUE) rm(list=old.optnames, pos=.options) # set new options for (i in seq(along=opts)) { assign(optnames[i], opts[[i]], pos=.options) } # register multicore backend setDoPar(doMC, cores, info) } # internal function that determines the number of workers to use workers <- function(cores) { if (identical(.Platform$OS.type, "windows")){ return(1) } if (!is.null(cores)) { # use the number specified when registering doMC cores } else { cores <- getOption('cores') if (!is.null(cores)) { # use the number specified via the 'cores' option cores } else { # use the number detected by parallel cores <- parallel::detectCores() if (cores > 2) { # try to use about half the cores cores <- ceiling(cores/2) } cores } } } # passed to setDoPar via registerDoMC, and called by getDoParWorkers, etc info <- function(data, item) { switch(item, workers=workers(data), name='doMC', version=packageDescription('doMC', fields='Version'), NULL) } comp <- function(expr, ...) { if (isTRUE(.options$nocompile)) expr else compiler::compile(expr, ...) } doMC <- function(obj, expr, envir, data) { # set the default mclapply options preschedule <- TRUE set.seed <- TRUE silent <- FALSE cores <- workers(data) if (!inherits(obj, 'foreach')) stop('obj must be a foreach object') it <- iter(obj) argsList <- as.list(it) accumulator <- makeAccum(it) # make sure all of the necessary libraries have been loaded for (p in obj$packages) library(p, character.only=TRUE) # check for multicore-specific options options <- obj$options$multicore if (!is.null(options)) { nms <- names(options) recog <- nms %in% c('preschedule', 'set.seed', 'silent', 'cores') if (any(!recog)) warning(sprintf('ignoring unrecognized multicore option(s): %s', paste(nms[!recog], collapse=', ')), call.=FALSE) if (!is.null(options$preschedule)) { if (!is.logical(options$preschedule) || length(options$preschedule) != 1) { warning('preschedule must be logical value', call.=FALSE) } else { if (obj$verbose) cat(sprintf('setting mc.preschedule option to %d\n', options$preschedule)) preschedule <- options$preschedule } } if (!is.null(options$set.seed)) { if (!is.logical(options$set.seed) || length(options$set.seed) != 1) { warning('set.seed must be logical value', call.=FALSE) } else { if (obj$verbose) cat(sprintf('setting mc.set.seed option to %d\n', options$set.seed)) set.seed <- options$set.seed } } if (!is.null(options$silent)) { if (!is.logical(options$silent) || length(options$silent) != 1) { warning('silent must be logical value', call.=FALSE) } else { if (obj$verbose) cat(sprintf('setting mc.silent option to %d\n', options$silent)) silent <- options$silent } } if (!is.null(options$cores)) { if (!is.numeric(options$cores) || length(options$cores) != 1 || options$cores < 1) { warning('cores must be numeric value >= 1', call.=FALSE) } else { if (obj$verbose) cat(sprintf('setting mc.cores option to %d\n', options$cores)) cores <- options$cores } } } # define the "worker" function, compiling expr if possible c.expr <- comp(expr, env=envir, options=list(suppressUndefined=TRUE)) FUN <- function(args) tryCatch(eval(c.expr, envir=args, enclos=envir), error=function(e) e) # execute the tasks results <- mclapply(argsList, FUN, mc.preschedule=preschedule, mc.set.seed=set.seed, mc.silent=silent, mc.cores=cores) # check for errors before calling combine function if error handling # is 'stop' so we can exit early if (identical(obj$errorHandling, 'stop')) { errorIndex <- 1 for (r in results) { if (inherits(r, 'error')) { msg <- sprintf('task %d failed - "%s"', errorIndex, conditionMessage(r)) stop(simpleError(msg, call=expr)) } errorIndex <- errorIndex + 1 } } # call the accumulator with all of the results tryCatch(accumulator(results, seq(along=results)), error=function(e) { cat('error calling combine function:\n') print(e) NULL }) # check for errors errorValue <- getErrorValue(it) errorIndex <- getErrorIndex(it) # throw an error or return the combined results if (identical(obj$errorHandling, 'stop') && !is.null(errorValue)) { msg <- sprintf('task %d failed - "%s"', errorIndex, conditionMessage(errorValue)) stop(simpleError(msg, call=expr)) } else { getResult(it) } } doMC/MD50000644000176200001440000000162214177342440011413 0ustar liggesusersc898a6a4041506735eda62ab5c6c4130 *DESCRIPTION 7fe3d7214125288822cd4472ecc6c4a4 *NAMESPACE 5273819802e4d91894ecc37cba3b198d *NEWS 32dfc0390122f8f3211a9ad035402c3b *R/doMC.R 225161bf005a373ee293100a52b33a87 *build/vignette.rds c09a9ac7a720c8ceb98ae815a5542092 *demo/00Index b6ddb31150961d04b467a413affde041 *demo/sincMC.R 64cace2ee0f1986d1baf44199b483faa *inst/doc/gettingstartedMC.R 4dc22e2e114202d5dc79910d0da93dba *inst/doc/gettingstartedMC.Rnw f3364b29ac1f6397d8662ad060e3374d *inst/doc/gettingstartedMC.pdf 794817093fdd85b71f892689a8ffe99d *inst/examples/bootMC.R ccb40b21ecc17bd71f764d7d67da9a7d *inst/unitTests/options.R 59f11a4ad61aea4c525507b6ac0ae4b2 *inst/unitTests/runTestSuite.sh 4065e26e2a11bd6bc313caaeefdc585a *man/doMC-package.Rd 9e2f90b44819dbc6b3ea34f5337d66d0 *man/registerDoMC.Rd 4ea3d878f4f2fc4b3a78a48af9a2ba0c *tests/doRUnit.R 4dc22e2e114202d5dc79910d0da93dba *vignettes/gettingstartedMC.Rnw doMC/inst/0000755000176200001440000000000014171061544012054 5ustar liggesusersdoMC/inst/examples/0000755000176200001440000000000014171057772013702 5ustar liggesusersdoMC/inst/examples/bootMC.R0000644000176200001440000000142414171057772015211 0ustar liggesuserslibrary(doMC) registerDoMC() x <- iris[which(iris[,5] != "setosa"), c(1,5)] trials <- 10000 ptime <- system.time({ r <- foreach(icount(trials), .combine=cbind) %dopar% { ind <- sample(100, 100, replace=TRUE) result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit)) coefficients(result1) } })[3] cat(sprintf('Parallel time using doMC on %d workers: %f\n', getDoParWorkers(), ptime)) stime <- system.time({ r <- foreach(icount(trials), .combine=cbind) %do% { ind <- sample(100, 100, replace=TRUE) result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit)) coefficients(result1) } })[3] cat(sprintf('Sequential time: %f\n', stime)) cat(sprintf('Speed up for %d workers: %f\n', getDoParWorkers(), round(stime / ptime, digits=2))) doMC/inst/doc/0000755000176200001440000000000014171061544012621 5ustar liggesusersdoMC/inst/doc/gettingstartedMC.pdf0000644000176200001440000045302314171061544016573 0ustar liggesusers%PDF-1.5 % 1 0 obj << /S /GoTo /D (section.1) >> endobj 4 0 obj (\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n) endobj 5 0 obj << /S /GoTo /D (section.2) >> endobj 8 0 obj (\376\377\000A\000\040\000w\000o\000r\000d\000\040\000o\000f\000\040\000c\000a\000u\000t\000i\000o\000n) endobj 9 0 obj << /S /GoTo /D (section.3) >> endobj 12 0 obj (\376\377\000R\000e\000g\000i\000s\000t\000e\000r\000i\000n\000g\000\040\000t\000h\000e\000\040\000d\000o\000M\000C\000\040\000p\000a\000r\000a\000l\000l\000e\000l\000\040\000b\000a\000c\000k\000e\000n\000d) endobj 13 0 obj << /S /GoTo /D (section.4) >> endobj 16 0 obj (\376\377\000A\000n\000\040\000e\000x\000a\000m\000p\000l\000e\000\040\000d\000o\000M\000C\000\040\000s\000e\000s\000s\000i\000o\000n) endobj 17 0 obj << /S /GoTo /D (section.5) >> endobj 20 0 obj (\376\377\000A\000\040\000m\000o\000r\000e\000\040\000s\000e\000r\000i\000o\000u\000s\000\040\000e\000x\000a\000m\000p\000l\000e) endobj 21 0 obj << /S /GoTo /D (section.6) >> endobj 24 0 obj (\376\377\000G\000e\000t\000t\000i\000n\000g\000\040\000i\000n\000f\000o\000r\000m\000a\000t\000i\000o\000n\000\040\000a\000b\000o\000u\000t\000\040\000t\000h\000e\000\040\000p\000a\000r\000a\000l\000l\000e\000l\000\040\000b\000a\000c\000k\000e\000n\000d) endobj 25 0 obj << /S /GoTo /D (section.7) >> endobj 28 0 obj (\376\377\000S\000p\000e\000c\000i\000f\000y\000i\000n\000g\000\040\000m\000u\000l\000t\000i\000c\000o\000r\000e\000\040\000o\000p\000t\000i\000o\000n\000s) endobj 29 0 obj << /S /GoTo /D (section.8) >> endobj 32 0 obj (\376\377\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n) endobj 33 0 obj << /S /GoTo /D [34 0 R /Fit] >> endobj 37 0 obj << /Length 2311 /Filter /FlateDecode >> stream xڥr6`mUjB<$35ag!Ɂ(۱$z()~ i{ /VuQ.g?^^|n U kU]\n jYX턲\,[_/8p4ozYK_~v/ lW ʛş?^BUeM4JXxD­^(_vpo 3#߸ӊDSbk!k6^>#Q +Sf ^K4+'\} hC>V6rߏJV27H!:*->?\a^~-l-KQ;PRZW!{v '˫$ ,E7}D'VY/蟔 {^]4N0U W\HZ,N_xGт̙ Tt m /k 'z֐7dLA1\|; xBUb>@`dD*\ѶocV+F!u#Ah$pq=8]0;hCv5,8GD") gc\0$B^pń3PӿWYjl&'|4Eo̯'X1i1'+?w5$b /KixP_Po:I'C2ֲ|;w< @@q".$ڲnDY^9v V}AP[x`Mҋ6J HbInԮ.Wct TuHFK s6ainsF!ʿ#t=h%.@$}(,A[a`6UU Qv8cfb dɰc9UF}a v̋' \{:oFq@זSrxmsRg䙌͙hlixX~*pvÔ:ΆحO#lP;Bߤ)z,âx d h4{h=4p۹T7TR"FcVU4PZH5Ӧ8=\hmBYn#K`&M,!*UN^{~ ? 򳷙{xlFaVAG?w?hdjq?>R5* Pea[r^Qi]ZXo v2˱jQɷEn/{K¨ oXxO@<&0*"dhs'|tbL3}#:ȥbc3pGtWTtˉkQ9$Jr~Iƞ^êۡ{X!y;nXf m&!6 >/( 0ChcRW_C6Q;Ni-9˲u.kZ~\l9YMy6s[0tu:6!Zutѣ3LD q!$:7 z`!fTU:5phT3ʱ}j y6n6}2qh@eK= WCLޒ_ VCzm#SYUt1[I&M2`D6~B29`ƽh I){c}o]mf~HcJb} fb-ŗ &" (Y]gUaLjnmaKŠaK ✃0Jx]gM*/GLJ VuWLR6w#Zz?=WF&Zz0|huwcuO:Y0_ŏ RBrc1WX>vC=we|(M;aMw5Rxz}_*#?B^ah xH)ArTȚZknz nS<Aت endstream endobj 34 0 obj << /Type /Page /Contents 37 0 R /Resources 36 0 R /MediaBox [0 0 612 792] /Parent 49 0 R /Annots [ 35 0 R ] >> endobj 35 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [552.274 419.237 558.996 432.956] /A << /S /GoTo /D (Hfootnote.1) >> >> endobj 38 0 obj << /D [34 0 R /XYZ 53 735.4 null] >> endobj 39 0 obj << /D [34 0 R /XYZ 54 697.538 null] >> endobj 2 0 obj << /D [34 0 R /XYZ 54 525.694 null] >> endobj 6 0 obj << /D [34 0 R /XYZ 54 293.919 null] >> endobj 46 0 obj << /D [34 0 R /XYZ 71.933 159.175 null] >> endobj 36 0 obj << /Font << /F59 40 0 R /F33 41 0 R /F66 42 0 R /F72 43 0 R /F41 44 0 R /F18 45 0 R /F78 47 0 R /F19 48 0 R >> /ProcSet [ /PDF /Text ] >> endobj 52 0 obj << /Length 2553 /Filter /FlateDecode >> stream xڥZYo#G~N}Tvdd$z,V{Ldu"Y<>RVxδ.6([j7kMUf0~nsš? +?p}[=7Etxz]M ./~>ه3 լ]Yly{RV0L]hV|ofzR!fh BeZ)U\\!{?Tdk5A}ݚUx>$?9.q^to6D^<zP+k嗶Ε{ʪD/0+HW|{]!۲s)FJ=a!SUdb;]kXFؔ3RRmG_^tbٓI.6ڲiЏ܋dO骅W6@9_TFrU wx 7qUYUMޛ(c>4W2? ;$ \߲-жB6kfL7.` t7tx;2;6Ιb[0VȀwgypKÞLpII=G ԛjXes^خ.[=|B Xi, ˪8vְe7ɵ|p.y]~8m|j9䫟T3!ku)Zۂo=S,dC) Rsp7|%@j|(EfU]㼮 aJX5k/5A5|d z\H?2g6֑p4DjLY5u_EXbXr\8-*!1u$tLBug&Ml AlH^&a34 (^v5ŞY|x4f:&90YX8G.c{ ~ 6o&xkx=ztҁF߭B]|PH(O!*RFHSB6Ю,jJW S`) AB†4m* (No*F+L JO2XQY[ "i5!|f]5+KtϬ@' OD/U x/J3'"ʣzwZy\yU"iap6IBx KٗSrാô-~% !d4$MBҾdZCTMz4Qq4uo R=_ 8a?NUٺ$$~ n:7S]V5_PJX.CvV@O-I(ņ W~GUW"筗l݆`$;5Cǟd(fP h)KHsRQ?+'i R q,xI:zWmH}sy#٣OAGyhmBGZwiS[l>vlU5~%tχ%B{۪,BY|SьQN4 Mѹ|v,.{0(0CN?Y%> endobj 53 0 obj << /D [51 0 R /XYZ 71 735.4 null] >> endobj 10 0 obj << /D [51 0 R /XYZ 54 697.538 null] >> endobj 14 0 obj << /D [51 0 R /XYZ 54 523.677 null] >> endobj 50 0 obj << /Font << /F33 41 0 R /F66 42 0 R /F72 43 0 R /F86 54 0 R /F88 55 0 R >> /ProcSet [ /PDF /Text ] >> endobj 59 0 obj << /Length 1625 /Filter /FlateDecode >> stream xXݏF_"!,^ڮJ*('"s{gvfKR`{?fgf󱳖"óу'ZGJ˜$:ʣ,IE߮N\]F7cbztH:b2 yӖ%lCa6W*JE rFBB¢ƥ!4`68vƍDe]QQDh] rhA#ɶڪuiBQwP|8b$}Uj.G@f]lsLFP2o50Uǭ!ge2 ;rsU->n7(p7H=W0$[Hd&si'2r3&9uM]LPi3&͇sq#5rWX(8;C&G)[] 6EHtx|qt9Zb YÏpTX]=3:mx2ceEUWAصJvWplbuvA?\=2͊>K^o)Y/Dwexk}Xmwq& !{wdtTtb.Y%Z+uVW_KacՆ7F U; x|/ZSE62V;=oM endstream endobj 58 0 obj << /Type /Page /Contents 59 0 R /Resources 57 0 R /MediaBox [0 0 612 792] /Parent 49 0 R >> endobj 60 0 obj << /D [58 0 R /XYZ 53 735.4 null] >> endobj 18 0 obj << /D [58 0 R /XYZ 54 636.045 null] >> endobj 57 0 obj << /Font << /F33 41 0 R /F72 43 0 R /F66 42 0 R /F88 55 0 R >> /ProcSet [ /PDF /Text ] >> endobj 63 0 obj << /Length 2365 /Filter /FlateDecode >> stream xڭYK6ϯ`bMCgrL(v'﷟ ȡ+ Lu&oGkMYrJ[%eMVU2y?{Ӟ ᷾,"Q7qKhk|/f#.b:+aև~sib'ϋdz!MS.G%yM~UzEe<&gM͏w:ٛ-'ln#Gȱۛ ak Xt{?{DD#Qp< B=,f8?w:s1N3)Lqn`Zhn,D0WJPZ2!W&glAD;ҕLiI{V<(2t?F'd $KxƎ ~M!X=%zIPY:uecMAv\ͻ,Lm B*=[aȽAئ%d.MȐ#eZGHFGK0 p? ]Gct"D=>uThOsظs*R\Cͽ%%XC׭Ţ :x]4a?)Ė&/oq=)rSiR54NAe!g:XVIM840E-(F}Jp!ڠ-Z""NeY?K4uB!BK$s1 dL [ǑHDM27 YU <\ LltEEjl-? TEr 8M Y_(k7 פA8W+I-Bc~މƈ_K)?~]T{|HN)7Q6~(:8$#{ j$qq%l+R?0s<'*Է3b>Sޗ=&^H.cu`-'V)tZ+dZ<#AUPHbzFT N,/\8^UC&YVa[ʍ+DqeilZ C$GsM)YH_GG͂?y7(.I X\[;bdq)p\aJqv(T +)w1ĭ8Ka"-5*YE ݉'M/(\KgkB +$dƛ o6KMo·,&[*p^b|%K`Q꤆{nVPd8SX2nS4=Fq{ϧ4&*9qDR$[kB{b ; w*0 G cV:{.ɮL45XĜM*p?\ . Gw?}[O2'*^rl>~/X'ImPfze.G ˍVsN25v*6k[b0=s`sf"f#>n{f_r2G_r#< V.~ endstream endobj 62 0 obj << /Type /Page /Contents 63 0 R /Resources 61 0 R /MediaBox [0 0 612 792] /Parent 49 0 R /Annots [ 56 0 R ] >> endobj 56 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [552.274 682.267 558.996 695.986] /A << /S /GoTo /D (Hfootnote.2) >> >> endobj 64 0 obj << /D [62 0 R /XYZ 71 735.4 null] >> endobj 22 0 obj << /D [62 0 R /XYZ 54 557.1 null] >> endobj 65 0 obj << /D [62 0 R /XYZ 71.933 121.404 null] >> endobj 61 0 obj << /Font << /F33 41 0 R /F41 44 0 R /F72 43 0 R /F66 42 0 R /F88 55 0 R /F18 45 0 R /F19 48 0 R /F78 47 0 R >> /ProcSet [ /PDF /Text ] >> endobj 68 0 obj << /Length 1618 /Filter /FlateDecode >> stream xڵXmo6_!(&1GR^u@e lhbHudLj]~wǣD)ray<=ގ~}&I"Da.瑖Pyi#tG7U܎U{xIm7na[~ =̇2(qv6캾|?z}9:R TdMBFZF70>(hOTJ菑 LHeB+`Jo[a)'JJI<' AsxW;I5ʸjT3.z SUFM6 /oi+e #MȆO btx`abʢ+0'Ii0y\휛D@e`6n8e /8B@\?jSPV ^q,!+!kqT{\%!%$j_Q`GT.#Y$Qe4uzuFOp8eUc0u,v].Ɔus{Ud-g^JbG(7v^6Lk71I bf34o;媹(:8։d}+aWL^:@ @} 6M!D {?Ku{B5z*uB6p2)瀅/> endobj 69 0 obj << /D [67 0 R /XYZ 53 735.4 null] >> endobj 26 0 obj << /D [67 0 R /XYZ 54 697.538 null] >> endobj 66 0 obj << /Font << /F33 41 0 R /F66 42 0 R /F72 43 0 R /F88 55 0 R >> /ProcSet [ /PDF /Text ] >> endobj 72 0 obj << /Length 935 /Filter /FlateDecode >> stream xڕVKs0W3"sl3m&f:m|L861q/vN{jۇdԣ2rq::Z;\E&v(d3u\V,Y".62f<[g0ṹ4(Ďk4P VOG_# eKTfsTݽQ3_+f&:Q8.N>4 a4!h-dh4nꌵ H8YfZp-XEsUqADjaS\d%NͭlW/<]UgT%M!j*^?08c&Id_y3w"T防Vq=ռe'Q@[Oclm!{5iX ل3 fil# y qik$[cLpQcH˥8,8'x2ϱN2^?}< GjOsS6c4}2^ZhPC/B;йxĕ@vG4MY? ߌC~M 1Lৱ)poyxW~rSS] gPp޵X}x~,X *D^q4 Y>|(Ϙj}ge Q'inO0(ߩ4X VBN{7bZA@e/a7E e͢+BC.$,ѭ͞8.mEs0T9U4!؊ |MM\YH7Ҙ@F4ѮyP)׮#sU F*>Y׃R90l:1.-ׅ?֍> endobj 73 0 obj << /D [71 0 R /XYZ 71 735.4 null] >> endobj 30 0 obj << /D [71 0 R /XYZ 54 616.228 null] >> endobj 70 0 obj << /Font << /F33 41 0 R /F72 43 0 R /F66 42 0 R >> /ProcSet [ /PDF /Text ] >> endobj 74 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 525 525 525 525 525 525 525] endobj 75 0 obj [550 500 500 450 412.5 400 325] endobj 76 0 obj [277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8] endobj 77 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] endobj 78 0 obj [569.5 569.5] endobj 79 0 obj [531.3 531.3] endobj 80 0 obj [514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6] endobj 81 0 obj [500 500 500 500 500 500 500 500 500 277.8 277.8 305.6 777.8 472.2 472.2 777.8 755.6 711.1 722.2 766.7 655.6 627.8 786.1 783.3 397.2 516.7 783.3 600 950 783.3 750 683.3 750 759.7 555.6 694.4 769.4 755.6 1033.3 755.6 755.6 611.1 280 544.4 280 500 277.8 277.8 486.1 555.6 444.4 555.6 466.7 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 427.8 394.4 390.3 555.6 527.8 722.2 527.8 527.8] endobj 82 0 obj [571.2 544 544 816 816 272 299.2 489.6 489.6 489.6 489.6 489.6 734 435.2 489.6 707.2 761.6 489.6 883.8 992.6 761.6 272 272 489.6 816 489.6 816 761.6 272 380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8] endobj 83 0 obj [667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9 484.7 667.6] endobj 84 0 obj << /Length1 1894 /Length2 12406 /Length3 0 /Length 13580 /Filter /FlateDecode >> stream xڍP۲-`a%B-Kpw! [Y+"LTm,읁"PL̀N6FFFv&t36g^/[^vvӷ"^?.@3O#x&&hfao73ovnmƷc0ϗxڀu ʢB4W@`b|;(Z#XIS[j?] ߹lߦwu~1?_!;m 1g/7_mh@m l7U قLOm m@iDYۮ{@6@[Gߏ p|ȿ\#EmmM~/3;mMn0-V}F &  `P޲8 F".Lo' bގ5vݶQ?[7V7?tۆ1ߤq^?oo:P*~# lotǷ߀ۖbp2wш7qN|/d~-_f-x@~q֘'в&Jߕnw z*ǢC#2LշLu[nԕmQ%: -OqJS-?&' k>Щy{YA6wH;s"+߻}Y U.e.J5Rǯd<(kډW"8x(" 臹ϫ*̎dZ87G>z$Ka/xGZ\ 썟V%Vq,+ӁN֙jR3| "/7M$*`BJnBEyrAÀ &8|5iVKŷKh7;qegݔwQ#3FYk[=hs@1j9gp&>>軉P3 ] p"K]oޅ)&4U2d&vʪ("g-kM.8?-&Z5c)+íg:б"!>E/OyG8ۺZ8S VgUJu~zf~)܄[CK:.y`hzCbMOv=aELٽbZ sޏ#5gW|- բ5_.X&r@ ,9XE\p i#=LDrdy݊I9F}w8_y=l}&5 (mDt8azQ 4+E -KsXg~\,̽g 9fFtvRCNpH{;j0@S]lTYf՞lD` wGř=CN(~Rw$(FUB yuhUXE5 ]:йbקKwǮ%>4g֬nHeReK_{,HҤ^cE28O7Xt<^K@gPǤGr0:]C2ߋ|$|RgUĒ֛̉☲Ws9௹vLp@ܔ#сVT*U h]w#v \nX[iwy3 Q tPDGܩ?NK'qiצ3`zmV4e(ғzɲBteFoxUH$B@}vp8HMYWr|?I+-Y`O!sXT/j;lyE*ܦbwȞ9!Z8g>[e:ÒZԙ bz%*G AU&6?^D X}r<:nQX*${'YC'ԥeq.%G*Ta'= OU_PaQ9_pw[Y%Rf Ȕ?X*U6~š>79vU{I9JA6LAsA-,7Z%S3X < :n#$[5۱DICg9ԭG(2kJykq?Dށ^XqZvr&--TKF"ƓQ/,m hs{9۫f&i5G:.ƈTgLvX)K2"{¯(EesqcfoFarK<&TYHF m<"t@m2 8ga@#fFf|<]b&kfokDC%%iKT+wx!IrwP''WZ'5+qjB?+wHp|KDrQh.ٓK@c]/8CzU:L*]*Xǰq8w,9>f'&EB(}1!Q[ReqϳG~¢I%;/jwhU0̂]ͪu4S-:FWRݫu4\МA=ix̌5b!T)AGlyqt;^tT0ߖz8i¾o1;}lh<3hU!qwUعJ-!QP(Cѯ2cO<] dOTTQ6L@GL:J_gmc!%A;\; Ƴy:خX/W7 d;u3Pc<߇}_|Ϲ$xNGK1H~GpyQdk!kjKr6OSn0GEՉt%&=qo!{mv/P&YU{$*;L}QC!q33]>}2kՀ¦}}q3W`ѢIt.ьdBLS?!nMک b#}Q+=.u42SjjEGjCs`7`U7aW\eaڵz+Nc<"l+Ӭ7I:J808>  $[ˌ'CYTLlD[gG%@HsėWO85C:NB'-GӱGy*ZВz ,|Q yyw|scX8> Ev T~Ҹz%{ݐNQM’Juɷ JAβ,XɳnPo5W0ROʱ{gMM!ea*8.A7JNeJNX`T==] S5 ֜վ}6Hb\%_H&W$^_g_>$>~^VTnu||6h;oUƿ1 ܁@\ i׻xydmH0WG휩l)A\pˋ4b#b3'|PdsжtxO׸2(gtJ QF1شM _xZ; /#=tzt.#_Ȑ@`e 0\8g>@sq̵%qY =qn}[ᰐ0 x6tj53QYڳήRPU)0Sq(2*R51.)d9oȰ1 -j+%4|S;-)I NzyC$m h} )88oq|y4VERd'#&p/Vlp9 _7GG5R kW?oh TX8Q(!qsC统ۍǧq^: gYɩ-+=ճ/U;&F*;zQ4zD==Z(ᨗdRe ^ޥsqf"Z\'z\=YcߤY0,-ĵ nM#F6'H{huC/,'Bt0S;? /]K!a=L;~frz~.;Of>ǑTfӗ#(QѧlE#~Imj{ +L\ y09xִw;$(PB"E:jZ$Cr@ 37D L`+pϒ,}% iQ*,{,82v3Fmo__t)>TfNƵ*.Hd{(8[+-!NQ0lݣ04X/$P~ #=,],N}߾1PGo Xn=q-&h qʧ0Yeylv˂}Ġ+hI\eDZAAD~L22͌QnCoˆMgѿ]i$4L!;~Z>_kePS..F>r#&2GR4Xf*f΃1A=y4{$:'OGgYT0*\VccqW#+({щiϟ\#ػ"C18~JPAnՆH'|"4CZ< M݆ CZ!v&.FXcj` 4}~#VF(XVCT Que[& a QM~y]l;1n}R#}s=KOV\7zڶī1GJ0{o$4I<6ʶԀ?G{h( ,p6*!蚓"gŭd 1mߍ3 T q-\(9O&*tN[8ucJ~a37&qzP:`Wׅ2j.R=dY{[\i_kɕeZ59JDo4Z#_I$!P&]Mmp^sg?]bp)U3mT]~Ѿ4D1i8_;Z#q`l@k0Lr X)/,/SK;F6sƱ9n4s1kU$7I|LE(DLR0 PyboO⋭U#z'H4\H`BC\td7϶c#)]8:2 #xu/ {.`|CgZՇz?'.2&GY +|%ZElno f8O36j`M8iTRE(+s>*pC;CɰuIs53  ˒ `;Үp^ZxY8rpGq'QVVJ duhs9ao|  Ť"1Eyf36n9qt v3Y>ˬ봪d]?M$!Z#톞 -aϓ{߸">lBe/:{ k-ot tsЙѱ9K¿Bi.H&,"5 fR;zIBJ|w㑜*E)nh%{"x0Y=ǺA!}+oA)$G1l߭sk;x&vBJم\F Ju3x5촷U$QOD$fZk犳k֪ζT͈,T͉ʂh3nQByJdM`: Ofj"i47lY/YU;7Q!/DPY߀,DmgL#"DLؚo᣾6JZs9QQbנɅͱI_pzr81 ~fA6&e2 ]C$8_r8[ѝJξh e^]|2>|PBZpw?PPDm>qak2aMZޥ k3ƌ`?sFX ],`7BjY1UCI\6 .Xb|{"V.BY*a"dg>k|v ` h5Btvi@{A_P*?`1Kyq( 0~wϸrHu'ȔYEsx%,')Sd?+jا;!p1,fwREKciroV4#2gu^0$z&V祮>?C/s V9)R &O1k˥M`7s#5#^Dd+Jacg扗!·/膟xgp赞J\U-p"34}x%Y(n6+9UvQg蒗P0ds0RR';ZncOpVI9yIJϾ *tGE8%DEh{ oQ˂Qi\;ڰǴO}FIaɱnj͹㗬ukO1ry[O8=,{}0.]RCy\nZ8l,X܈991J\i f$UrkQ!ү`"`׼ ͋r:oͳRt C#)1X&;~]8@a$HTHuԊw?%CGb\(;HP`W?PnϠ]C O=L*pPC't0<o W;hQ-75Ü2 &o_D0lr{0ǮTNWsSZ &*);e  _KFպBHҬYp( %404V"t7L 1ٮITc5)q{=f&sȲ;:AP5҂ 1ۧd2rz"2nVIܴvOĖ؂NleB< ?ArL#˿GA 61@WRVF<3)y&aϐȅ6 E`'RXK=Ƅ R.o}6,L[3"=RK"@㻵G:BiCBN3_1fd28 6tcJ·cOWԋM-[&_8z?}^6@ҹJXDR.JxCwyJG":kH3 }rB'ҏC#^zad[ /:vOnnS=|牗w*sRThz _]{zʏLb.6ocEw]V5>T. t|Z%ut+8#B@5ГmܒvC3T^]{0YL!l M^Ta;Е`I!a29/D{kU)9%sgN] *~ҧ! 0yCxFߵh+YH.~GٷZOO_8oK[laG};۪D/8Y?fNp/eNreš*F` T>@)f8I#"I<~K72&-c_6ʂT8c6p Ry..*VYTˢ33B;ʼ )NըۊE ҍJi<M14b'NKZ(6'e_ݝAv"'^4@0W Q0R4 v07?1Oh~俁c`H[bIu辐yKu"=+N|2$zL`!~6,7EQ 93{u Ąإ:TWP|iV})\/ ZusAL NwIB䯬 O0hP}GŧG04A>Ofԟl˼=&7-8H<3mMuRȄ o;dB҃?}Edi99 $+5f c:ojCX\v(_ЩvsꤽR~=n6 ӄZ-b+9]bf81k7Ț \0 \$ףҫ:"3 ,`Iob/Ǵ콾Z,EB& E:q* -Qy`(Y]/ð(|&&+JuU*f -_9& x2u*)g}J<@R99_\n =Dp7+W@D$,8 6Ri}[yl7C$oY CVvqBeO1~:#rǩ䁆"*G]>ۀ_h+sUUXeX F -fO@b;K+ WX[ߍ(ɤ%ؚt5T-Z KUjBjnhu:TʝW e5"Xq \#eV|~y.YH~inc;Gb~nJ¬vÆƵHuR9ĝ֎f1k.[Ϯڮ*eA_ͷbYFW<" ʬgƙTxv6qQZ}*j$-IKQ"N4 ?&N79.~ϟQ* Vi@pvn7U []Vin!mC3[fTS FkɅGx"5! yf&NyyD+٧"@H/X>,>7wu lM[ۣ QqX ,< q0Ic`^(<'-_}6 @!zsno endstream endobj 85 0 obj << /Type /FontDescriptor /FontName /YSEBGX+CMB10 /Flags 4 /FontBBox [-62 -250 1011 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 108 /XHeight 444 /CharSet (/A/C/G/I/R/S/a/b/c/d/e/eight/f/five/four/g/h/i/k/l/m/n/o/one/p/r/s/seven/six/t/three/two/u/w/x/y) /FontFile 84 0 R >> endobj 86 0 obj << /Length1 1785 /Length2 13749 /Length3 0 /Length 14877 /Filter /FlateDecode >> stream xڍP;ݝ=@pwwwv{y~ݽZݫj(HTL Ff 3B d Bb`G3n3;d\m,lN.ff+33:8Čݬ{ %56pss lt25,vo45:ZArabrwwg4satp[,*@ Wc;?1"P,\:܍w)}r@hO? DV/665us4[r =@c[nV&+7H+ Wy.V F+ۿJd+.ۛ:A.ro'?'kcn/0733WG&u{+'WؿBMYAfff.n6 0d+#o'_ |E}́?.n@ `fe - 4{,>~o/3{[}L*2’tTo `ɸ|;տdVmnj  s)8w-@&c`6}bnu_YoMIqYz+i]A >;Tͬ\Wd>F+ +nǮהZ\V G|ej~u.+M1VN'!}̀71^/b0Ie>ML&n.=?iobgO_1,& `25Y,@.|e .|*8A~39ʜwe.{.| u ߅zu_@aq7غ6Za'4Ůf so4Uםo lS-xÆ&(=<ƩL!,LbL 2 8h@vrA)޽Oңtyܮ^,s/h(Y\2-478:ߓho ֘Yr5V.",[:{sd\V4+tn̠ۺq*H>?dzd7B.K[ l *e:ߨf+$X$/`ݝi[B+G2I$ACHPHmY֡y{p̦WpNxJ.TIH»^xj"nvM(j]bT|> bxB7M`H1{ː ;4.^ETs?zm&&+bkrDBQo]SGEG4 /֤ OƠD>v1c <Pea%dYoye =6Wծaui O=s~C2G~ -oǪb.1t~ A F7+ z4H[Ip$ƺ_T:(8eȗI\vhwV6ly^qP].8g$xŕth8 ꓇;,?h^ l 3Y֕)M] * ^ TQ;5{K\5Nڴ6B䲩7?dMipG'6-*(Kc&aԎ;ɳD.)Mhz|r"3UMpâ5$/TsxJ߭@~0y7@Wcj}smUߡwPi"(m9z#b[B\ɐ'箥5rq0=;e tuU}1.UKc":C UCaɑ]P  hGcؾ&L %qb aU9=RYywޣ][%`"R?y,8ģuPjC8#bM'ku {qetHYs2$.HT4Db5E}5hB-[c7ctIDBv(e2tAMxCCVήBVSzq ~@;.9[&<6'b_| 2Ƈ*}52d×ZW2vS2>9SBL[3^+O7h{t >B @Cw!}(M|y0fWfqo9i4] lNs]b?xuVeyǠ:#F)uFKrqKYR&/XlrzJ(6\++ ㎸}I_eKp;_OLsir7+9Pdo$ G`Tw6pOKlUkEi&.{{")T[kI(6VOJJSK娗%`!^9rNp%In0Xɶ c7'W+WۋdW^SmUC).5Y$<&~$,^<47I7Y?>5Ӈ[6Wo~Cw:[_ieOfI!p~ g^g6n!D;sTT$Q_xq1E)ŌaJL:(f[ $O}It?<݂H6 kE*GBfti8j7#7okH wϵ+-䩪w"Ad<$)Ӎ)B"3ucݰJR!X>G˒sdl"W{Rzde0,I?SOM9KXdD^\ G4ZP_x`) Vn}Oto!Q!Ĥ {󬤱jp>,S1 R1qQg=S!_T{,#:?d1w(&aPΜV 9z>H:hqQBh9 ~%Sy$ l,mm`l=mD\=yZ,+v k^!kFH<,KcCC%S4/*A JZӣ.HYrg+ֲDL`Uy*oW'@(KVc?)nWAN*]aK1pBuL&I~i$-t9q+pXyQC \Cӻf!T2]oS0E:t\nF{x;,ŁixU S:☴>A* t+1]/r T_=9Jڒ%PфP%S8`ؑ!BSqAMbR֡.XX=V{&窪r&l+lx)>/U_ҘOHx5 6 nK JQ&Aك}̔LQSe\!Lپs1MeJqdBu.|ܗm=)xppL$ b\e vDKSY!1`fz|T,RQ nx<1 ܖL[·@䋰(T|/DmB i _m4/ca>.Ok{[/BURIfoԐ?L+x'ˆWt4>0@ \ILnϼԂے豸\_LhW-/GLqԎәp1um4+՝ˎ_ΨDb75c-wF -HH=$@C"w>#Kp)LPe* z|l!a"Q)6A;]h2 ( rX Яni:ݠ`Љ3)J@YLaUW-})53~=I%s* qս\WNf9n"!d̸PAc =@bB,5) ~]u lꙹ=gkи:}}0ő3LTҊo BQCF#I _x0|-䦕fŞn#^;cS_vݑ0[QZ/ zAƣ;MF( φǂ0KXAĂvdxYHIm P]ΥOg߼>zUYaعsUD>~9:g :l Klӓ%܀QP5@kVeT+ޘ[,8e}7_3RӕuWԻx>/- Rl*rp."˨8P;l_10)쇃Y%DÔ`ED%l`*:Wj{|qN6%0b E`sz^DdȲӎ2ͯj*EW JRafFO NJܲiiI}8vR7qi۬}*9a\kԗSU_p;0A Ю\[qYh6Y/D?| l_/X"KZ icSk0ů h̤T翮IoŸ`NjYe{6-f66{R9DxƥVZbm 4|d))i/rjŮ~+&tۉ¤BVދgUiYY4űp\y-jVz4ozE@ cY} Q6о9(VN|Y*vqh-LO+#Գ $% 5(W}_+w)`O,z0KȂ-7DF³jW6kz ݟZߕ@.1JcXK)<nz9zLc8a`io mݝPSҁ EA\)e>{ P 0M#wDkKh@NM^]aQ~"!OlH .n<#ՍP&n%^?vqozmjO]J  n}e}/ ~ƃgr_}۶f%kmiqUըkY趻sXJbiGT!}q:}sfQfϔ@W9;rZvrTdp Y7~~}آr}}g<22d_/Kؾ8^vjNF+B*3U\ť9Եd-'gLVܮ.\pDIr-MؙT:h 22%jb YF+FwnyRBͶ}p*4osU4!A%1֣(ZǎCN4e"sR/NS}F40<{K156kc"~K-|񎽫E;ݟi _{Tw/ER*j.vmb!kD' r3b)DdFYrj*[O4Ѷeі9Ry|*$B6kI\ԁ*i} 꼄:7K~KG}j}CzX ~г&%45TPq"NFپ:Pm@nh*̮ha5ovRv 9_S!0ڥ<ڪoga&9]C!0J'V@sS_j>BAWX`v",kٽtt%MbSĜY7ЛvLJ]#5Hkgh]Éju~ <~h&+ u VF*[69Qֆcנ@" >EHOц>۝7nQV{8Zd7OiqokUb]yC]m|1m =HyklRnNQ9TD]I)9S d<ϡ k5 GgP [?ndDz#HwL#|Өaѭ77Hd)Q|pɬN/V"@8g[fC Q_xjoeF^2.PKg^Kr’  Jt6 з 'm!!06Uc$h0})M-50u|=ЃQp) pSzjas|<͌ɈY=:ܛlA^ dDWBq[eRhC>kP}5Z^vjdOTd7|HA-m4X`Iʩ7 u#?X28^U=WZŭ? ]#ʟA>=9}*" BvR&]HM*USvfKZ]dw/4ġ>yL&YNb3 ˑ·VJw}n]^Qod ǝ 'rsē4쑢VR0$(}_٧Ecج-Җ9 * q[^C ? C5挘lE BTG3Z8;V* hXA; @ckd~/w~)*pu>̔2v]Q[njxpG06o[\ޒʬf'e2]MXr@[1g/Am3]_!W^To '_ja_gVJ\WT{͉51nR>YTDaPcd_`l  V_q,^ Z^=(O1/\Y>'CL17t&u ompJq'ݢ{LV1΀!+I/#!46>-KgkOcw`90va?pNJYu7MkЅ% EʍUl(2lСwkj~k/K!x eҌ`Z :}tcg{H |5ONb~akPdLe EP6_C^[8fMV|kQh]w&݌k39RU3aTlMTdK4siFF6 W2_b]%!JOW5T7ǧ~6{{tp<3EDQ_ec7vsj<"U WjRi D"ijEf*l41evj28cմ94>j\!_w @>"/ӆ;E)-kB!%Yot)?>l\=ʃX}SaNZؕwV;佹np#0"F%;ߥU$0r4n.ȰLմAqekA,NE4N":vN8O3!yOXzo` tzNj_#yRϓc;y"rS2&%̢ԔRmf,*̙R11M8\pxoMC!KyOʅej@sum{+!z-Fh{VE3T" 8F+c꼦I8!e;?h{ ӷ^`¤g-c:A*An*rTո Mx3Rqh -;y4UkEfh;d(ZaRE kMIFsm_Bab+.^Nz0"bmeҍػՉ`ɐ =mᅩa |~C|Q%~o֗\Kvӵ`EwRͽ?Ve;HRYy|`Z jnۍ\0gJ 4v;<,jğ%Db5먳6,Xi>l PC(,]}VQ-#α#ReU <)V-A\bǕNCylhٚsg\&p}l l6"vԔDfwxmB){e2:٤Q|Nh&?z$tv)c}:jo4`Lx\:X[%~L2qf;%_r&{&} '%>"-3űoH|.wFll\WZjû)/ծU5-R?.mv7o"򈫄`s/.rv]\#d߅ a&Dna _)"c͙ j짱O`㠔'DrJ2֊ubDHۄD>G9uOpvQ>G'$e;Zw0~:ySljb;4cj~:m#G cUDFխ]5WVa Wth.'\_[cܧ喊sыݮY^W'!vO>SWV)2'}3p[ʡeQ `{hPd 瑙R樼:uXc-\uGZV7mnf# 51<"׬{xȀ:_PA)D43jE/܍r2>,5ٺR!=#VhrB-H_3V!B2#䟭i}"cIļb[Hȍ~tyRj:\4P՗A\p'ϵ >e V,F׆x| eIx餶e[+,զ/1}5]%l=ͮ N$#>ºRx<6bq<~T& Û)HƱwQR}o`$+W'hBEh`'Xq}ze%WGM!Ħ7j|f9)5OvǸLr-j}{xj͏!|Xwzo?Br]l<{@o[qT Tj7P&Łرԃ&*0k6DcQkg=vY`^wccr6ڡ}_g7ܮPOpsm܀TeUN.vr~v߷IqOg>o`-?@2e-LW~3RW %"r-=c)̔ AnX+(S,Rto]O4aqQ:n̠@tU%%Y"!2XjkF+J,z[U@: em !8kiM$$|8H?`FέO)X*Nb%@F}*XΉP%W`jϻ &4U,1a̡te2E'Bqk(FewGNÏTy꨹(MԪBGۻ'|xayu= CiܦԚ%Xʼ@-)!YUkAb,MzN҈q-}5u23M[nAىP=XJ_ P^lcu1(+0ԖXHą$bdRқ]\P;BNU*g,Fmc,4Sg% bY]Ά> CF)K!ȳUUC 5JйoKʭ!*t+\w۹c N.[ :16K",Y3%8O]֬kr)-Q8?Ȍub>-1jPX endstream endobj 87 0 obj << /Type /FontDescriptor /FontName /ROIJAG+CMR10 /Flags 4 /FontBBox [-40 -250 1009 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/I/N/Y/a/b/c/comma/d/e/f/g/h/i/k/l/m/n/o/p/period/q/r/s/t/u/v/w/x/y) /FontFile 86 0 R >> endobj 88 0 obj << /Length1 2448 /Length2 18648 /Length3 0 /Length 20062 /Filter /FlateDecode >> stream xڌt.;۶XdǶm4ililۍ&7/ӞǸw133=Z!'VT6 qgf`)3XXU͝Ձ6<DN21Cw @ `aab01qց fbn cEmM͜O5os5 gd~hdhP52: *>3'';FFWWWCkG[Sj:@tp* oh 28r?r['WC ]`enq|p1:ރTe v@ȲwZocC##[k;CwsS !D01hhhnobhnew a%{h`nhnWyﲸ5Fmwgg66sc0vcT1wJKyLLLl=fd{Uw;Jx{Lދz߿< ]'g矊Fpcs#'g ob?}nmc0/2rM{*Ҳ T @ p3ۋY061p{'aO٠/y~;Mojuvz9S`󿩟Y9J;aSQ hhddϲ#WYmULLK~,o[|?8R0tp0tcz_$vv'Q4F{y[&`K0FF N&o `XR+Q7b0FdrQ70*qGW)FT~x{}j{O{<=;7zg~ޙFA:#[/o&h|?=YZx7|_ߐ/;_z[g?ܿSL~33w;3wh|%V~Q{/~{f7y_?NV;{l&NJ}Xv@*2s?3{@{g['g~Gqo1_c Mu݉叮_.~et2s18a>*?{ջݽlM=KN?7݀FpKFA5AmUx{3{R=ڝ>@'RWfl8 ' S -=CUVBLn4;w]/+OH3 7pr_ɼ8Nֳ}@^qRR+FѩQpx90/ְSN[!zAo]%Lf} |Ps,IO!>IC pxܒf~>׳|*S؈Ɲ`2 X4x;|9zb. Y }u*6mnZgq3 *r7D!+|Íg.gHI Z$MzwN1?oZ:A<^<#f[+RQ>|`437C ǺxA2ezI W:*]vᒰZP=xm:]xfggGTdA t6>YZpk>J4nEiN0g["[I[oIe÷Z V?؍F&#ݩ~SMf,Skaעq3 K@ XcG|Pq}X :G1gh#櫕O|I6l4F/A[قmb?t+c 2e?66J_%KXսą-}3/-#(!.%4?{lҏDA+vI\eZٜ[!&q?1v!d Ox P+o%6S?#1/gr1"CT,5^d"Ix "(G7C$ZX\$dH?^,2 CPj Dh|F"G妀hncHeWB;e֎ৠ ,zؓ움/yPt\Ygx`am%5x!.7 QM-EJ1Rʃ@З!\FL[:!A^l] }ɦE%Q"#+VukĐPLQ:b[E~ۚ];[Ư(ϲ:8kx X-ɹY(Τd{g<= H/15cs+izOc6$G)Q, ߲!b,+D2OA:PbB?u,4($/yroRٷȲ^Uc>9Bej3k4ȯ:t(g=SՎJv@EYAC5ô&/X=wRug)#* Fi,BxSx&9\Ÿg V@W);ojS]C@ aVAhel{ɐFj^ WŴjduSK1x61 F6g/xq,^ (e/HjCmgĚ&{# 2J P9j)JWQ۩45:XKPfswٓCZx 8n +i)5^sG R(֝oxwک}Q4FB>֖&.Ţ\k?тBUs54$(ɖru!6b P+v .k[ '3A z^7Ho;ˋH!Q^Dc*$i^3z;>eRxs33u:.A;C`T9K"`^ɀPSltY˅AvB@wvO^qډʈ43ޡܦ+<[qFú(nSIV)b#՘Upڼme&l *0<UO ?X:A15$_UZ3m.p ˾~wLs|]ѣA]#C?Ȗ:H{rxLm! :cCPD+-p Uۮ );is((R/_Oe9̠l} [ ˁW$l(  ǻdG/(z@omdS~j7۬D˱/՟ksw p.Ѯm[z7MG:qol1^հB*L% LE XN\Xx0W^pj>LQAMQȅqOBOO ijxQf>W/rlXUrfJ$E倿*&t 7p21/ 8Ew7@$?/hYYvEz~Yr9^˶&Rۑjt0c }J$TihmM=\87JWyCdDV6N)w|FK^>@ ` #2ߋt;ǭ'Z@ZV9buI3mM[2z˱X"zrd(Q@S*r+Dx8!߰û6{f$rͣ.BRk3K7/oeR=\U,(yWW s7y *iPCXBH_but2?%Γ_/[0=c3fuͦuN\, PԁeoD ?$}{4S=8&'ab#o+NvT:/Mp%6}Q> -ޓX<TS 拜VTr^;y~7{`F~qIpm&,ÍpY%ۂ&A` AwDǃ?،}&Rp95{rlx=#0w\$rdD<"pQ5?i2qrb R%-t'Zuڌ>ԪCV9u?J;P.Hn"il`bE?` &F/{ n3c= &q'0\kv+_ZvNKH#^CJL<c{+z v*sX+? Uctϧ[ 'Үs>Ui^<~Y@*aH:)l*Cb_Gi. yLxExCG5BS H*jqQvoד;O\`TdkHz-FvӅWjP6bz- ԓΎ3ll>|ޣuXŚ$klpxn䒤atmW@˺?L/]R3NT OCfo Aų׆MW/A:\'^~ @Y1RumO%@ۖ}%7 X+/I*/]݃V N?Pݼnf! dž n!j>F_Ϭ|n@܋B=x!ps#]G_!1V Q$)DT3aಭ7d+ih _3N {On -ItܤT^3HeOnP{|:\jr *셯' [>QGO$mDPUABa uc&?Ĥ6Rʧ'F(x<,/)zX@\Q[Ӗ=yCEh$ > @VCk τ:'h7}x#!1HYW.o("K4{[68&QRmxIِ5^g-0&>fp2r5Ch" Ac$-ݦV }#*DK0o ]nsӣ5]8<"iWoW0,㗧LVtʄdN#_/aR\L! q3d,H:"qz*SM19<˰#p * m6kU2S(/M z;+yu,6 x:E53xt9AR ~v#@r&?|DߗY/%O{ UB07AV 7$ aT܈?wM1؜#c4d)MwUHK)vA'24t4SzZt:h)dF}@?)#c@R3 mQERb"8V#XJ۷de؅ `~Ƒ82D޻3|_{Bb hz%S:7zh{}lf)R,QٔY 5˱Ss#}RRLD~1%'R#ܻDYH2\xF܉R ɓJ8+Q`90e5K^pCE.}q#P&wmHmՑu)*߾gLdr`7Fi3W'oFՋ݄^~=Z lX3`fŕ9hg_ EA Õ2^RȶGBޯ_@7;-(ħi jR٫ayfX13ٓ\t45PjYƛ V 25^۞!bYlU'8md&+3lf7M .,>))HN,O6%.X,6i~kMdCin[!2 ^FbuQ́[<VLvNJZS?-9!SGd!U>J?5 "E+ƌ4 Zq 7utgQ38 _:˂!ȯ)Qk*)F/#7{ʭ;a qpMN^0(wRF+T3$Q 5s +"ʃ Dr}5 RKB@;#Q^f' +mp VW< 䍩D m{ARL륬x=ST Mqf3ٞyMө*/ tI !Ј+}I# 9!;mĈw6pu|R>&B"uXݣkOrA8)OpEBÑB['kѭWfod,}l)\^>]Lm`0ҝy2a`3H;~6o)MH V)Xpz]1fӁY%u/Zߧ()aeNXɿzp>؃'a@/k+(y^le-u)r{/!&)*gKuGK HeŨV 1DblŮEk6WgS_oiN$^jO]Yo?Ex%7o@,K+@"˹AP\h7b _,g u`5fK@l]IiB&Y=t(s;(`evYt{y4x޴6Џ $q+:w7 A1-rX ܬMŚ1.jyHrV(dy&0<ʇ"}B^vԒ9d+>D xه/b E/jB6@b@/A- tFg: DEٖMdzd h/\1 $e?*1Fd5dS MDj u%W(}w99)ϔ~rʼgdhr?`khNGW!I6zPJ:6}BGwzV/Oj$l"| o##[|Ʒd{|D1В@G4lK )ŌYs^Aq8?`GFd6 CFDmQ _z8EpwcFkr`\2k 3JzüHICV pdGcx:.o{uab\Q0o5vyjMCG:E9ex%*B)3Nu;v&5΄o8#Y4ZtI觩.KL[4 hlJ%[40: ;Z/ CtW$C!մWj \BŊt֋6ayɺ!?'/~e"\/?Y{"rdGGjqqpS|j%M/JR'ABa*C~(QekijZLVd! Fz9x1N0$!sҳdAE_?yWz[]W}sA >J ̐n p3xkuCj\:Qof2`$cξo'VTXRg~! FhL&3鈊傹FF7ؗ^y2O$qvq;C~o`>4-QÁdx+ԳShuz^:L-):HⰕk(4ii=um^]ԓQ =-oZ.#j锭{]bO4]LN߳ }GMBo+""+/hzy-J\=نP %3>7_'N+cCy־G$mGap9z6)|6U@&Xa"W$-6dDEQ3`jWz={G4/s&m@sok aa#\X- 1MMƔ<+ž64>e -pP-U+~%{ ؞{4riQ{Y|PY[>y{LhbR,& +X}1zPA;3KeVsrG^ \+Z}fc1w;"\=fq>,lJ+ fn"EE}.~dΨ KMc71ϚaU'@TX_h1ά:ۏd+Kƛ0Fc' \|0??_a8,x}INxAuT14Ȏmjɀȝ-2jԫiM}8'e`vvCF!9q(|;j[O]Ʈv&E tVDP̒NL6ɡRE,K,|dϓjd@ ɼaw_ֵ]]YU nVV7 xIm6ί\%Fv82\Z?mي0v8:93 M)+⨛x>jC*SA΀ԲR Z˕*4S#h y>=HeZ}FWvygJ͌򔡯x!7v~{67Кs{f* >Z9;V0%e }mK" usg8C|ȧW҆p~=M32KF47Ds ވ%lBda`QQʩWd.{\Fگ.;·eUg)nI&# Hυ3Lf[ h$X3hVU⌳D ͍'CS_p[`n˜JьTz=v1_`R,>Nnr4lNT,҈ޓwrё3%DvhsapLڱMʩGСd)tsԯ]t/yG3ظ=MŔ˽NR$Mq5p$B§ yյF3;{#[L2wX(^$4ch}lcM::Ď>AT@HBh3{8*)C&7TĻB f~ /l'eB#o=q8c?#ImP4wd,u4-9{!_=zp{5M#Gx&d9{5?FnZHeS˜`Cr%1;7 o2wi>rc'sRyQfe^mbřCzۂJк ]YSi^(#x*Gw.gC[_هI5B+;g'*ʦ|ιKK{-]e"߰1 \KQt~\d mD<3UzsoɉuWg&ԡx70ֿf3V}咻P<&BastBU2VpRAk\ymTϰ UadrGQ?_ǥ p fp)]h\c ^*޴6 tg[I9"ԝȩ,Yi5XIZ[=T]|q0Gk`kqظNnY7e cpK5G3Xii쇺H0Cצ{ęt fLj"[OM d+Tዽ 赐6pCSi(`(.89ϜG53p?u!*dSqDrmRysl&Æ(9~oYKw)LtK}y:< ];]YB `I/4oĢ(.jUe|?o%=d1]M CU:22܅]z=ф1uiP6h9j|M4D 4|a\`}*Y.lH;ɺPz3`&|H_H^kEWW56I\`.ΟUO 5g[72Ub! .<(n{깘E_jCo" äR]X_N/wDsPyv-QhBe(C &* n"ƿV˸}|5,w1Р >f !;ݕ[k AlL"i7i@Jnp*ɰM6,j$ X^T<em9P+Ry2@GHZ4*V{ rb/Invm3ܼ^5,vj> <44rv>=հ䚊=չT2+b>W22,e QƃI>]PTcps"ɫKf -p"`ޛӀXdm,~Y΃_$%j/` ĜpchJ)QwRCKw@MR9ilhQz"Uq6P5.~| ;֚d^!fR]bK9{8P>davbՕqr,7P?Ĕԙ0{JW E(n0EՒgzf`vKE7"@DtȺa,D{ L \1 O`{5S1?ۘulc?F67#qమtK!*X(t87KNZ&;'R. KQ(7) bJp=bz>noT#6,, nP Ĩ{ 9d*ҍs2׭ *tiR<8,[$Ce}7ʊn'JN''ХҕW': |7hϝVGHo ?a rH{aۺ*7A#$JJCK)lgҖ6] iTC"'t*Z0ܰjBA5oE)"%}_L֤ЂjVAc\xly8hUGt,rMNzkWhY*)|ȶܑ c&8 T}|o;wpwc}e+sd'Ĭ^N8_pj~,MMz;Xa~I y`Vyd`sy̨ި~nP*p3!N8%kn;.QY173Rq~ тVL†CFPay޴-+:Τl8^DdovlbskqPʂi#4βl`>2%O`Zz"pպ'ԞFLV_ԩZKb=,,fM:v[\ٽ: ?^iLX>p7Wz&x(7K:5o7˦{39jcx%ڔиO#NyNWҁCU݃BIFΉǸz\t)9nA\h~iU [g<=Q QMH.B(DŽısF<}> Ea0 @am9?4-JhMZ|3Iwd W-sa*6(Vn=̅s,wRNyBhN؝T(xVI[LC1Hʍe(lͺ<~9J04=Tuwiho!Tw"GodOۺZO{o@izWiY.1TWm1XJ/!;;dbnR>Xia */>G!_v/-,Lr map]Gz@X8XY/QчEcR @B"HLa,´؎_m² Pk2jxB-$aՎV |xA)r'sFoxvHMNe{+n6/B vʽLk-vYG1ydhL;xdc~jx=Ua-b y)ٱ@sk5'et6 s0VnrL { Ĥ?] ]5U7裴ꟸCE %e9wo/lmBju?PfP+#iȝaܰAvy b>|=Pb$qI'TF/SWhb&5'͆Ώt8KPpYꈥ`)7\1s$#Q YlBgzE#9r!+<7=!ïZ2+8\2*:7M NKG4ğEЌSWJ~:6.Q^̛56}/^ӚTÌfX(!%bI7QBr֜H6G;Jl`8qMV 8V fЭx#|n;_p/z* 9x~t#H*+֓}Qw>IG; |"d;^fF͝rv4}{Q>nQu06r01Ʌ?x,B:h7^ؕDY.*sii|t[񓔏'G9=œn 5gL/aT ")b%jנCF&5E6Z7+S}dޒ9!՚cOWѣHk8ɟ~Rf@ΝXҘ[% y@+3ܐz";r.::t#0g!j%VC!CI8KZv0ursdJ(4`iuPë 06Ӎ<Æ1`$? ]GXQA ^Z ݨo޶MvP|-}x.~%@CYLr;N!Li["E >_^""I['EDY~{GnhU>K% %鰶.s/arNA8sDLy]9Ls^#gIߙVamKBdJl1b*2:ʇ*t2 O1gksZ #ٷ OᇭH.>O&iԍ(3ɀ&|nQR4Bo FNQ^FqNhKAAiO|`+cDXɛGkvcW:W',i+{:<=P ,y1+/ z_/xo[ '@i5zڿWވDݩ"<0צps^e[Tgb?wV)=h,u^2;!MX5!\g?[8~#3 *M85 \*a,g11~j<[8MH03)S(tl>&v~(Z,<,sUծl:2o?ҲN!# %/={ y se1>20R * ? HԝT} h-ruK̦^6IS5”-M5$OBffhjvwiD&㞥ybAٳ#v?cAe7_yſӦOY٤/[!,g< 6!c#PVa n45$oUD zь%%ydv,B  Ii>Ӱ|<6| &b/ٔw҂J HZA{Y;K 6|NVCƃu_V$]$,$S@@*gPW͠yY:sAH}8*J+VfZ,jCz=, h"NX^Mo>x{@oI+_eSMRj@-Z0 endstream endobj 89 0 obj << /Type /FontDescriptor /FontName /STILLO+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/A/B/C/F/G/H/I/J/L/M/N/O/P/R/S/T/U/W/X/Y/a/b/c/colon/comma/d/e/exclam/f/ff/ffi/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/q/quotedblleft/quotedblright/quoteright/r/s/seven/six/slash/t/three/two/u/v/w/x/y/zero) /FontFile 88 0 R >> endobj 90 0 obj << /Length1 1597 /Length2 9017 /Length3 0 /Length 10058 /Filter /FlateDecode >> stream xڍP-K$X Cin5[p; AK4;3{UڲYTP3CMARP33; ?P\Q;ۂ2hށPA&6 8E((b dggcr'0qYrP @#p[Z9??@:3z ;@Q;#T4q=5==?+ R v@ sJ&v?;c5Nաn& l8=g@Ae ȟ 0 o!$AM `%l *K)8;3M Ml&&`[?*7JM='3Gwi, 1ف NIAfc`dm P7_ 1݄=&+f rrqA@oz {N|@&@>` tvtx49MA`g3O|`w۳؁l??< 'e`}bbPw3'' 7 *IX@|<R>Gllf_J#OYo߂\lmpMſ/'Uo3YF`5|f rY-y-V@V?/ |u|du|._4sqt|Cx@ w`qj&l]~S#JƼ;.8MFrL_x%{e[RdDն{x6W~2TRf =_l?~‹w'^_<:WFl9F3Z?d&4{33 Ow˫i܉' xFa gY .bjb]"2K^bSJ[XF8eF( w{廑%6"_B;F}P~zJ7DiHw کBఘa^}u9, cu}|1@N7,·]}edc/oʴpRletNT!(#6bL7sR[Je6v'=t;N)5j7S},mep 1/*z݄֚ݿ ~e5վH&b16Gw;UdYB_W5 z[:N4g)LQX5,HЙߑʪ/{(xd &RNo`̵4_R;~6f=ˊ#Qd~jI0>TovYKI]>Ԗq" [&DOL:=YКvqj-ڡUp7{;T_C&Z|"=?PT¯ڞ*Jt]d;+҂en0f rh}G *< FeRwɥIXTdQ aj+~Ҷ)[4:lK.ÕRFn,E6*hަjUKuL\ܾwrH!UfSzW*}Yտ)DoQ11[ ~r&X $E;* OdXۆśjB3Qa$_c)bX !emN(d^[0j;yBAß8zgLJQ, ̙y*,rMHN1 $ޓM VY-݁ ڹAm[R#|wTh1&V|AїR-mcg3q!Fd_ |XV~f4E8VG$kڲE0 s LBۮW&H\!e+Zaa 3K[X.~#L!ѥ5d=R6jdsK2㎠zwG$B5ꗂh 0?v?6*[dkN[Hcjym J$}Gm S#j[E%ovYj[S"r-|6a숡g]gN#( Va <jb.n7׾ZjAVϠ, RۢEx5km.Gfj'#;|OT$H%s0+帹k,=y,e*'/N/50ɼ F#Ɗm[[5]q'T~v _g`[pga^tPn%B8")$f~WhKD[inaUύ܇63|<7斧d}Z wD0j8?\pAQ}'R2wt¶$F8iM.#iRn^(8]&tSiG_J_ḧ́Ɍf]1n4<ǴÛ A/CZ?l*5Dt(qIح GۚW*g3+&7[p*!H|}{Es}o M vAߵkJ=n`'E UHʃJ>W{s`hV@ucR\x{ Ro襎SrD#kiҾٌ}zq7$, EAo6"?(w#6T\M_wDD9Tɷ/5+yHl9SURxR8,+kmR^R]F lyA6ɷQ?؅F]H _Aio$mτ:k^@Q48|lT;BH2H]2m=PpiMG768πS] 0vmЍ+"Suf0))rQWr'+Q{wrox_ u>&J*#F|܄%e\{cՁɦaDBgV jZ.oB{ՍNvU:$.iC=N,\h<.Zf%O%Gˑ*-,I3իl xT?1ٲ) {D`7Jw:\eE RU8E4WA\Ip_D Bl6WAO>z}Ոz {Du1Z\gYm< C͌u_r/Ws>*~4mMhn0н+0m`7}D UA]GxP ASH'>YdJ U?Em4齺'[dLY$&4M~zU̫o uUjj \aGTImc+ <2+}g*o|'jH?&W(;d{L꼌`g";] $mڦfکxjFAY9XM*m؀@]Bj¥HU@E? @Q`^ݗ3 /ЌbKWГm r ҁXj!I){zSiKb:NȈ]~Tk3×T5bxDӇ6,;0O)m&MƘ)|(O:?["0I`$VklG؞]w90 MI::r*[BFT V\׳ m=``cEllS!%C8>gy @OvlNÙ'-WeB4?2ѳ3KX }Q~6Cl嶌N.Fk9)QAS2+Ԯ5:#hn鸲 Έ3x:"@(sᛱ [ f{B*PDf+TNyTܝ%V:u 1\c& r*C,3y?iRy _Ws :KҪI\ T-CA0hj0_=y3k}`jBӛ'1̎Otܷ 䊥렏[Jd=}BZQv%ZwTAҐLk5R_aFUgձ2Oi~v 8̺Hްسȇ(-PȂ0w5H[O dI9#w"1"˕Hoj=8l*ۄCkiR6P~Hxnw2pYyY㤭d'N) k˕DIOa^^I٧`١G9=Y O~Ki">aH'on,oW,W ]KQ'^ cl?;}4~- Qt&:bAnz &vz♏ΩV y5]-CJ+ɪ'D5 OL_)w,aAxBb2SgNTKj$~ rtH܏T\8d#}AkE64t =oqMAo$R}>N)^]@m&ڳ%Ĺ5(oR푧?z$YJVK>SUdɾ_~ͰV/r) n?@ = Gw׀ؖJ<>{Ѭ";X EcE3; YYqφO+`Ah>_VeT^%'r gr~ d?Xf9d:J-\!5(RaAl8/C*ئzmnG ;}{ ͔+.M"7p\EaW(:M7dE7r, 7,w1XYSejGȠteۢ3/Z~壸C˕1tkYIT"r|)'5M;[L!Cos]d?$)\؃oR챽`wVy,c=5,#{C5R%(KJYF79hXg,L/K inZ_w7#֧2YF_-lo9 d+=m $D\a`q <>a`A ՚K.`/&Gǿ)[MjFrЎrG+x.EħqW㩕K|7xD"fRrYЪ b?#eJ'uLS?uz c]m>Y󕀭A fٮkOX]!?v[ ]C{MjxSvǎFRi!ܺ;e+g]V#d%"["q:S7wG3 <yEQ%f \Dx &wK21wE1!Iw>!pBU ѶƝ-{x[^3s\s8L d0)!Kɀz$A^16 v9%p~DdPշF}]QPcsr:1@\+ aLC,*_ TaOJw#O׈9gg\ 9N:CPot敮n<5vK)!wv)"^ 5T2?hR/+N,L"߮#0wn9cJ"WWu?l-ǽx ry酃<՗j%I-vS бm!Q=;_NkZHXL-]_JFHiGsTurب!N)(C+5Ã?f$A^9 +/,(ԉȀ Cl{{Z,ް7½yʕk #AnTk֚36A[.^U5]4l)%RisW^vf$x$ʘpu~*cmטTE+k1e84qZ3>G$/;?RΛ5gV?N}=]qR~t Z<;0Go~_+ӕH(`v-THhc&2na4pΞ`„O 6OfȲ#@貢|GWq86ּӗLc͟3nK?҉u endstream endobj 91 0 obj << /Type /FontDescriptor /FontName /KKIEET+CMR17 /Flags 4 /FontBBox [-33 -250 945 749] /Ascent 694 /CapHeight 683 /Descent -195 /ItalicAngle 0 /StemV 53 /XHeight 430 /CharSet (/C/G/M/S/a/c/d/e/f/g/h/i/n/o/r/t/w) /FontFile 90 0 R >> endobj 92 0 obj << /Length1 1373 /Length2 6090 /Length3 0 /Length 7029 /Filter /FlateDecode >> stream xڍvTl7%1:I(nI 1 ch$$QA@$$.%E@RywW_}~uc3QUg\ ŠB@uCS ,!XO_Z8F/:uP,z!@.X(+<08rc@3]m/8/gD_ "w'BCa04 D\.O8𶖁6+;B=}x u;i R5B= <Oɚ(gu4 Ga}@`0G: P.GpY޾p]=*tp,P ȁpo << B{]#C.p_x) 3:](pd1]0x ';<(Y.HZ[B68Qqef1"X] (W[W~o_obG,(ۂ0BoGUBxb7DoWK_t5;#|mBPEz>Z1 s *-~}( /U0ODο%.% b0@~xI i ` H CB.h >% [Gab0x8 aI4=Wr)Zf 1-4d/s"1Gt5Uf/pobRMςRLGWS#mpQp_x߉ n$l1.d<驘=jRZhEmD8 VR(^C%^0 d+Qg t2幹O; +!Ç8 =O⹢q[ߒ8vڡK2 W}\nQ6 Dcf2]TUyIvp\ uyΟɨy|uI:.\:4=̃?nn jnj-7=. 5\<~UO9s}e}6aHB@: G!ZX1"-(q;E}Z5eРrz-i,l%mղݚr1SB sZmB8$)UrI1՝2v/GJފc{vmf |[˃(~)ҦPݯt/}5$Lȏ2l\}%6r:JGN~%@8>.X-z˰f7*sonή?,ʧ?tXFԐ!uxNMg@ϖFy=iK3n3CHxN~MsL`xm6agA8!ZЅ@q.ȧv!@+LkFm2~ϊe- ; , O}]F64]a4M:՛ @G+&IsFROr!_q*;0Z]ǹmUJM3 ΊMQc_SNF%ED"ߎ5+L㖷24jO+9kD 4w| $o"Dž8a#Ӌ؛zg]1<>^|HNTQ|ƽjHp8~D/g;oI*oސ^|bHC)پˡ3+~_: )Ip^ߓ{(Ux4ei zV[b[hwe9&Ӳ_>9.X4VwO&S ؜*> g}YsrN%XA{]c*cYJŏ4_^? AxBCy޷g{(rGBtY!NvV컘WCJ+ܒ7ȵ{1Ŷe4 %)Ԅ1jɰ|~̅o˃qlk]#fCpj7~`d.&sC'-M7-*2tS]mepWץ>D,OWniLT@FFD{kqOm.pf&P4J_M|EtjqAyM⊒UMTj~#.'1HcH,.[(vKl4i$1&DϘ)6< n˛][$g.7̓?>n~`Go*q/͎;*w5We`GuX5Zv("]zN|Hsu8nmrF^ɯs:Μ]~G[qU+ҟy ޥl]5jkܟ5ѻL&ܤҪ2#ygWxyAԶ._W}`2[hV%!Ҥׅx0;m lew|CwVs k1md!2U*f[GyYa;݌:# gD^`V gOl}wX`[^jo L6Zaumu}x_p$t\1x`Wcؓ`ܫ[l<{ySPen~ƀ(=4{ޕnһ6gצ,e9Ijl,_n Onkw^ޥ>Ǔt%G^w~_8?_֢[לT>͒@)5;J?v~ jcSۏ$SLʁJ5@+联Z=]Hxt50ꨢ\_|J>kdsۇEW*e'M}eRt8ݖ)"%W#_G|يVWlW;Q)zcK_ pu ;- D? gKB([;}r mEJ4>sYo0 ݼjl3r m#^lS4)JlٞPxy@c:xFf̽$K *!j eȀIe^+qzo3i);\bG?ӓ o*(>s?@2*1u>M NI6tB:S PBq3EKx_K^抠-/WCI\Ow8׼NK\AV EwMSG'gP;bەQ{m=X~y кDP˲B'XꝮVKZ&=߽'[vody_=0֛i27KUΝٵx/~MUCgiKyD%,, Wk;{ME^${3t\{͌TfKI{4'-Ʒ1Ē!ܳTŎFm`JHfj Ki Sh1z/>ɉ BJ{2 j~: 3WD m{1 ӷ1$桳! cR%0:߯:|^4ĵX: ;hFJMh(f7ɬE_6 鐤=!B(ټ nER 9N6 2_q|=9k^LuЉ#nf&/W6$~ ̣#̢{u=Gb# >=\/. ~esmZ ә[{wZ ~ p[<7?as:YgAh' {!Y/̻|,6nFdjxߨjK)q.יn9o gLvt옇麵j#ҫ3^4"rli ԣ3ˀkbgӃRk-ρu_2)K3&C)!1J66΁~ۅefR%|*\-ռJ՗ #^8UVWsJ`u T>&gb^pj娑dK{ugke"Kmi{ҷP_) EbVY-F] :qto/guxB3hFP%G`t0kˠ -䍝hFWeYOMTq:&[ovt% gu۬!'?gBCՊ.`)(p.iG:I4.#dŽdٖحbԝXpaAybFP,r%[L-x\^-eV吔UfޟIyM>ЪWgC?)$K|FTop\NSܳE}8 > ȅ9J*~|"UMcu%F%\A ]Uo*$Hh$ve{E6UY$erXIX!|?Fyj5`eBEd}Xܭr3Rl[5xZ=J?g^ 1JұI4B.c?3{ʽgìKmϝw#zQ.l[]\Rt|ҍKɭuB!,e>ʒ_%g>2>p |mS |^K-/kUj_[vd~Q36[Id<@ )=)5Vxv׫S(ȪpEHs\`~wdpu-.F>CY~MUq*kw ӚӖdZ,#9 wҎkz o~F_vzP܏X lzh׋LsNsig#:0{~D^ΌUP] Y,gu7]DhUrzb;@}M墄. _sO=yQ$% ewj:ԑ6#ٴ1+˥W|p{7UV^0k'لZNTC.#AlDu,"Gn,p|ωM0fy&)+n㽝pa+`Bե,S}w۷'[э/z!slUj944! JnX*ӝ}IP-GU):=@?[|;bL#Ykv/3|kWDtY h՗NZ!3k&5c:$j &.k@ǽVPfH)~ S#^ݭ*y}G$D B*^t7J5kǪ/q9:F1=P.O`$D,X-\:~⥙_mK BCL1+4:JJ9l7"P~g)8{n2ɞ N⑝4'B6RMT.XJVs09L,ųhnW'qG.Y,Dݟo;B=! &meE4E1RTmw$u[3xtGB<vMS㐟߹R.ѱ$CDE%~zKg?1P endstream endobj 93 0 obj << /Type /FontDescriptor /FontName /FYGEPU+CMR7 /Flags 4 /FontBBox [-27 -250 1122 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet (/one/two) /FontFile 92 0 R >> endobj 94 0 obj << /Length1 1373 /Length2 6093 /Length3 0 /Length 7034 /Filter /FlateDecode >> stream xڍtT/]%Ȁ9H#) 00--J#tJK(ߨ9{Ͻkݻf<~mp/( P >"bc3?Z"6c0 $]:E ݡ#PT(&)(#! Py@Zu8 $bSz# (t\p Z #]m!`?Rp>vD\%<==A.H~8 /r胑`k\6{0~"6#GmGy`Z؂aHt;k 4:`g?;ѿA`ApWsC`&? ~9H8:@A6hߍrzzC" ($?54KV)]\0W} {|!0;_#ع  n`5ſ=*(vl~%7v6Vu#!`/`mD ( #OvlGFo dƖ *&yy(OHD̢ ݅b`pğfѷ=>36X0?7E0C,w?Po+/a@xuGG3߮OU Bs@%B/.e*Fp$׃ *[gD &?K*lv%$" ! o"ђ708 @#~SX ~~):(Ool4~ſߜDp[Pֳj9OQ)ͧ\|6 R4+>+q.0_~kÏhNkJҟl!8N7\m/!#ߵq3vf:[8nՙgWmopVƝI8XiW63tx(>&n/)ʗcIC6 nslj!v~ZIr `SĮ4&$ |R_R)dI@jHz&j3ڐR[iuӃr+Q^ujяza~(It)i/9K:*J(9镤+;xz$LiR8΀ہFmCRn|qnV.CǤ1K 2/tx;\<+1R]0sߕD55bM;EJp@*δ;3Ŧn(rD>IE7,(sA%V=0!J%a8.aS>h;Y&`=uʚK#H|!PSynf/1T4Shn^B!KIi!! 5J-#Q(ͼNqE3Ɠ#GZHLwW$wC>4l(B~ב:S6!U/~5&, YOlj hy̥U1 N\Id:v@ SQ/]tCG2uk@uѝ,$ ?c}Q0@u=44mg z{ I.DmX6WD(LkEhni(9}d{az 1,Ũe(ǻ3e,3&—$O^u'5oU;ЫM-([t` ?Rl}1Đ7N.ĩ2t7?ER=zYbf6]pD`@g31,ܹRo>3kMonFJy_^t.~X] |N"K#вMd Cb.ך"&z B##]],P A1±V^aV36~jzwQu0<~՚ζoULby[p#i:m:w \!ܾ-onVIz6(JhqSnuߧpk#Eq",_U@i CF)(؁XkaD5lPB- ^K=&j2}EHLjq2٩Y 13̾< fGSiU[x"5O-ݎ7u>1^E.)a&'ѩ' J:^DN.E\&mدg#bCbv^~v& -ޔ*,lc@+nNG)d_LQ0:}_U-!8]0ˎqksm1m 6. Ǒ$2Z{ګvZG7Ym&Ќw#0Gf}P${Ǖ])fDDzGbez"uO>sl"ɑÌxG^IĺO4Z >A[0OT_q"2Wng]ŸխTw ΧRټos`bA=swǴ-Wer{*RP)N{^Ou/|fYڏzΜ~4N NA)lV#xbg&G=We\[i3SSM/:Xа*s|^4OA#~kR2Vq`L׬=GY¨Eg dw%nMz.+1T SFv7rTr]LRSux·{pD+6:5YE#05.h߸=0п# lD)cZ͓_g)'IXg6}ܕM))=fL#C~}wiZ'I*屨{lּ.嵐]-u$#] pdi+t}%-ޮJ=ƭ? _(UwR&x@fTf֏;;Om-(a C䛨LQO'_y}#kjɔB̞UlU$uw:yx4tJlRB7Z+&2Y'cdy䴧}+ݔfmycj'DUzkɟX ܝ=XE-*b7x2G>[<9ЬOgș}u^=?XecYʀߨS0z@\)"Jҙ/~nwY1z:|wZpaťM*)j/b-HΫIƹ A’C _?cG>o\}ѭ$JrxdU=_!;YH}U, - o'PWoܳ L|] :Ut&UZl¥RFQ'iSW%bgGO i,CG_ޱwȓRi[J)`\R!zB+l[4Ct?4wSK5uƾ>VkS#9c^z`J"BNu0Y,e,5v;4fc>ج]™kXp8Hx>:4"9 P6!K@Hf./+w52:' 8G'0c@|#bySb?C(sv,l_}cu (g&1y6Qyt+z4TtHHVaGR#ikTʻe;m2 h v2\pI_c!@ڻ˛xԑm Pܽwyn@.=| joKLy[0c-lrF2[f1*1^5$WlyNvGZm A>Nh$!JRt6ܴѵ)cԄC]7ĔgWGScmVKZeWІI3/}FUTּXkꋪO%y~@5drjoSXz_yecvФ%^Fw ΂4:[Ay~Q5ewWHG)]3YgwIR!&y:gB;!]| +V\8t\GuX mz}mNv-N?(mۇS3o ;z?lt `VɊen" eԭ$ca~f6Us< /Gl#ڿhD;M2slFp^b*U yµR69 }$ܓlF_7(u"R%k9y:t5׼I bKc`UGܾ̃#-EKqiDr&"ViJ|Yςc9(C"U)7ݣ6%{5!9i!E͘0o"ؒ]3{Vp_} v Jv|'n`#uAAUcmͰw!}> _!1+m%O=XX%cpW/QjpAeRQ}zsJrKCy3PE5,('v\W`68cZ >,.hAQ Pgt}h=,J\"a.hR;LRXk:2#[\eCQiV[ٶ--dÛwQ+Bƒߕ^ȩԼUq)ey`ɖwڑ-^l7f@7-lHW0p+ YMyGQym!FF 2JcX>c3V<,oΦ jc-v/enHy.Qiʎ8UP*!ᅀfOnux\'x>|\vLgEO~ ͙T' CMk?n&_~5*^o5$ʽa]-M'}6qx,ez4rtxglޗt͛=!pk1!Z%xu@.;R Ϳ9sp Lo1;8!Z#xnÛxectk->g)6pzE ~F u`2٬ojrVS8tl-\5\KF PÑ4AM7=G6}S[C]IT"2VմV.^ۡ9 xW_-]` =1AD3M&ī^?-~){?g>cAM]Q?a|&_5jzhg4D\%&J=^Dt[)þN>ET mM$m}'݅{M0}C4C$M'{@͖L BN5S7R*9?ziZr. 8$x7{HH=5=ۊs]và)~YN8?S7 -) ʩb ?I#C>u"Љ*m9[OQE >OwmX3z`Ќ%}]nk;1Eq*- IuF%Jz{rAdEګgJ. Җ`^]e|lw3`(=y'Ǎ!գg'8Ы|[qM` e#&"VUp[&(D$_a1vy$ê endstream endobj 95 0 obj << /Type /FontDescriptor /FontName /PXOHER+CMR8 /Flags 4 /FontBBox [-36 -250 1070 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 76 /XHeight 431 /CharSet (/one/two) /FontFile 94 0 R >> endobj 96 0 obj << /Length1 2399 /Length2 15243 /Length3 0 /Length 16650 /Filter /FlateDecode >> stream xڍeT\Ӹ;\. qι${=FwϪY$j "掦@IG7Ff^: 3B[G tqvt#4q{Sv6 '/ /33DG^9@ tstvr{߿j3 {@ hhf tVnnNLL&.4Ok7+*4U6@oqpu+kTjn&.@ n`t! #˿c#kML,v@<=/㻽;M"*S+_U2b@7Wvwޛ#upt--*݉I(#ֻ`ff~?X3efWuo'Ju:9:,K[[|]M<7wEp,,sk37)w1>.^=!d0;:y}Lr"""tZT ``ecpp8y8H?a*`'F7g =f_,oay9I͠/0}A})/U +ͭV}-D,G\1GY;]j ,Gkf׉tFp0s4kX98&..&pCey_Ns `btpt{7Wpth99L"A\&߈$$E\&߈${Q޽(#Vo`RL{{<=ֿXXߩ&f=3fge=h?_cĶ@+?3q6s{?J,0CΞ/6o81ۙa]Qpvtwb;ȻO{V~ƻ~g^_[ީ?JxИ~29}~i?g{N@Tοe֎ρCNv$N{{݀vpޥCzx;]fpt=W?{8b>9+AUU*-`=P PZg Hn}Յo:^݉f4 A έ_kɪSN $:dQ#R奟>3`- J/Ҩ2/@$j<VTVnLkB;af TH cK}bLA꼨?Ox4}ps m2c@*Y#.S-{yYۍbgkAPkE/Lid+YSEU 7gHqa<&NA髅08`PA*a׳x!݌W;x>{Y3OXE'un룿* 0V=˰ Zz(d jYtgV'=HrŕmȐ iy D 6A\ IɳhݒBA߳# `6ήWqy^d(gyff3?H䡮"n[Fj(NْXh$YWMgt;EfO~yjHRj'p+Qa܂=eGM~W/˪c(O{S/foi4*:(E|,rKbqH;cz"]3{$%[Gk"?\#咭Rdq3"D_I_Fs!m̙yB' /&8CT ^/lF(ú$gze8HJM V{i MWQ}Lّ#B噘LZj?YEd0p΋Wu⛅~񺃗c~G}e 慪pGW#ע$XP%&7aIq=J麔 ҏ.1Xf|:A'*xqqJvϬOv N mdWvN iʖ@ k)D0NR%!Qzs"Hi5kT3]W&mADQ `d˹BZ ?+ C!p pHq*PپRoB _^o55 g_3N_G<{zlyv7'UyJo^ڎjȬ[\grkm@q0|oFo޵'tCrvj?WkO6OmI9<)J_t3l/4u0=8Y/nW|;c.5 #&/6zbw*#8MY C}}h ]de'p=2 [3ieqwZd~4{, K~ri*]iNeoK,;qJA*&tEOs*f nB\l\pZl`̖cegQFQ)S&|+A)x&\WoR!:ǜ4 [?gҚuQid {^# (F_M[CM6x+$O @ylccLh 8J?̦djzɱeZbI[$7?˜}1? YL/_o&H>ŋHݣ6̴#UڃVIǓ#ldy6[,V덥e_<"h' b&3ȆDOgC`uraJ=ԘB Hk ҏW,NW_Gms4hE*2ԫ>4.nhո4F R^'Q/yA#fg jTAk•o0ꖸl)s<T} _w"4O)/{F1Ofv wΝ*)2  ]/j=YK-9ye٣P:=,#*_x>xװ:YA[2w봨Z yە l[->P; HIV/(S\ZTR+͙+lrsr)0GHN MNK9147[ng6 ;{j(3kRM^[ͯ] (LW)#f.G9AGsD`#F X ?vg o[|V[:QaVsGo7k`qKI[>EAj_8D( bz9|#^Ĵ}]"5(8d sʉ7p ra|uykh(p^T:DÔHЇTpJ:^w\JrcЭ>BJW{sϬJ$ksqVP9 B}eW i Qd q@at=VKC-4A|yvk^IjB S by "͜#N.btsN1nWBOlLĢ hn|Aa3N3$nf1caeuх+gp~_[>E;Nڶ+ncb'M[9{:f {.K+w記+ rdmFD3.m繖NR9`=״vq4+B-T&o9|8Xz<<ŗjIK\wMY6Vԙ# ud+ KuVs>WT.h*x'R eęm&WhW9dl>zґB(8A"FDbBpxxdG'6==_'/$FMXŮ妃8cƛUcv5ꛦoU9s0-(,Y7eH;Ͼ4= YN=Us#t^A\4t~}\.&_g]wҙ'O؃a.{'WP~$@0_ԺR3U[>M˂.R_Z_e@7duC 4ihy1K:zXjzQ+y(c_2&ȝgg2F6xZ1|u)Z @;F4!_"'|e|- v~6SpWoT_n|\,!QCo*'r# .n ިq'E]б5$OZ}T[sy҄EU.jz\qM;Ou՚g{ΚOO?FZj;b?%zv";Ov`}Vbp< ђQ mjf\A_ݮ*3h-jJ9}lnEZkO >`}5Ρ79fIet-*3bLG&I)2g>de]ӈ{q\J-A7vAbsH^+ -S0olLI荊a $v0xW],/xW $%;4 XVѓ0K;z1Iw 4s|C͗G>#jeqrIy[82]fW]SHF{T+"ኊ9e1"ܰ#A7~5';={*fHpbɊvM~мk9D.ǔ*ԵǶζMϤ-q.TVx3'M5wU1+"#? xMOK  v9AZ 0̉a9o5!!*]`d|'Pbɧ<ֳLڦ鏄h 6]/4Z!}+b(S  DM61qQK4#_MUKzjslp|g&-Gn꣐*Ϟ@-F΄:7KeqǼj]]bqJN#mQXCe#?TӖYu ?āǢɮLa+p/5}+#vwGE<}6}%_CNۭ+aS1v)1h?DL=U~هN]n'T2XG/&_Jt0OE i_TkZ[[#YZ 2#%ZLJP{7_OLȭ14!l0Rq ): zmDǧ|Dw+C[ؼ_#BVRS+1"q\ş%H벧Ca쾪d0yv+!ӿcpq#IHU8r6}\iL2 "mf)rWtlGjmF9ry >َCEJ`#;r鬣Eo$urދpnQu$b[Dߚ*_J0E3$9Z*??7K^pr@BcJjN @2TmJz~=g0@鎈G:*f*G,^L=ۯ;er6j0!)d\(j=}]to YYQ(5j l7&|> ˷==&VĆϣ`?bTT3GGqDigc23 Nn#dϽrXkqVIr~D) 4@߫R=1>bq*}~h 5qqgXIG-%[[# R,𧅁Cm\c=rۅFOV>[9}.@yE6t)NcĬ a{ 9Ium"~4**N/7#YPa3p%ϭDnf C_FRJÐN2XAmfFkd/gyVtb;/ b &RvÌ&S i3Ubr5k)!;mÛ`Oŧ$ <Ö4|O3/6٧:|G0*T6Ӳ$B~pʎHFYIuָźGKi3N& hg Y-YoɃhCWc /-TҨս`rwr,4vn\~ӯ#*V;6uyff=k6ҩ+&ҮGǴlEGfng]j%\p}7$VF7;QRGV-?~d;<_Brls/ uPlmې|uv̊U %SV9+2Da1 ƴLaxT׆B4Y Cmχ+lzB= [F6B{lg鯉ʊ1$H'hjLgѰC0X8U?Ֆ|̫')gўƘYUl_!׶W)-9zL ,vFIbjDu9kQr.聣P/yav'\sK$ A@djvIy{s/MIx6[~lj 8.xw#>2\ -jf-SLy!m}(6<w0z& VjCO -!ȏpMlQ6~n/F&ΐTe=Ccq-U2u"('V<%_y1QipHr'ȿ25{rwDs"(C/yqE33v{3w7?j7LJcT >)#іW~8mמfbߏ??wH_V.pP+Qu$r( Hl8 Y8Gwu^qIswy)zfy$D(t24Qg-EZ㧳OQuQݶG.FY湴ƣpg(Wi2R:ob@ߚpz[MXŖO(;OQFRն؁+0!PWZƦfg[xۆԺI%_=Έ7pҐwFɄsF4"H;n (Ŷ4tRO\h˫*{J%tC8OŇ~@0g=I7e+,l ?{/kq<|q] #h؀Fwj[pgQP-1 +|w[C$\OAaQ8ؿlØ',ܴ^%50rUpCq9*~^=^ڲE+:k5iFVfu-ޘ`Yn[q`Uɕ$;n|B?4Pt*`^T\RbK6 '40] Uq~Xk7A NS皹UXE<9ҧEΞȕW8YIO2Rk%5DŽ#  fY]1ԇX} نI Sg7]C&$ح̒҃YV-*$e w }G ,8uW? ? rVﺌ8=S9$\ ZV\„pI~in_v^ɥ;%hk?/6aqO| ~ӻ\pz,g ObAvbޫ q2""C;B䯊}s<(O`dNh鲙m*ꔙ%?]DDX%P>9pQp^=rDo+ Ʊ PV~Y֡h✫CEETBBa%lhSz{ׅl^QV ##yP; Z4廤(ƍ~,?SUhYs@GVޑ1[ P^5cH]Oy; tgc*~mUȆ#[Q۶py'kY !XPGvVbYH'hʧj+IsőfWa ' v2,IъG-B0ܽp!P& >đ{"hױZi:'{ C =ҋdݢT><|̷]»[v t"܏g>kf2yܐҘ):Cq)rmC~9XB[vOgUs#z.ic䉌{zkzY>دHɰ@%%GT֪ܯ֜R#{x3n͵.$/Kofnߣ x AJR, Lvށ(w6ႉ#'i2iij9b(Rj/YQh 3U,S@&=@4 ڡtm!dɁܖΑ{t`za |bo:kG*^p>TҤ -ͳpG |*]^ׁзoV:i+ T 緧Ojq"NƠRH%CϳHt%:1qgḼd!}G?(ԇ$]>I۔C!_q0^C7LCoe;ͧ[Gđhg:'j tmQ.YdEcmW F(C4(/SΧEԬԳ_\o`%`??>Kde[/V1#<5 [O>&M)0B:Q!kOa%?tJyR]AiMo E0ڕ퉾>ofgj'|[<`'M `>C2yrM&ϙNM}n7y @IҜ %$n*9,Z8ȋ l?#x6]@`S\ XQu]s'-/^]:* C8EOA^k  菺qÅѼB3NYdY]mPk,Pf}Tgt4 Kzo#n/?(n7tfCQ"ĉ{1q&朡]oUCF< m9/ [uoqC*b6]?RcGSu c>wr [ nS~\ePCx)яS]B*8`gM>.Gtw'J)C5wV~j21vf#$֟fHjwaֽ{]P[7Rʌ#P"VKd)L}3NF qNբQ"\O"xŤEXijQFs`㖁hO㘋Iy&G3(3QQQ{l?FS+O8VWJ*gȫR" ͜Kʥ.$ XV2ab!aN2=x,~"lj"d[mTL(•^K>J ~qx;0UOuJ6W*a-q7JjHqu:r(?D&)^; W }/@-_X4dX3-Cq}1efNflܛׅf*zk-Sоw;'&o Z4u#?8 7FLggΰ~d_s0i;yVh)HdEQ{!\;RrCA'~tGu)Aa{SϥL]_fX/+ݘ9_E!,9Su5?JJZ=4)l[hk .!aS6<Re b)yvNu0,t^+~2ZpWńщ\< EM>(xёօd+{P#+ .MHtT pw< Ƙ(i<0HoY9'ks߭i=E#L#)ɠW.t{ XtjW8NusszI[Ksmsx3z,n[^m6Fm 8љm5\%a"0Jd ab$:Ѯy(as5e`($|TH*YYu}e hc ά72 *"zs d"&fH9X +\O!,KT 1(o(2߈Pʫ[esX*\ 浄IOA 2g O<4ꅻsVcÄn+$Xҗi|aaUh/y\a G+CP]j$4Z7s%,{Ѣlk'4蕑=1obՐpd!'nhٔ>Ahky~ITF&Kj4-ZjșIm3H.0kX/K"ݗKbS h|NĂg A3Čr9z1iQ*E'hv%\O655g^:>W@)f,R# 4Y.'<6:c]a+#αs܁ d^.13f +5w$ZXgmY@} 롻|qd∰.d5EuN;IM H\>5}Ҵ>?M/M0NJv~=6Gltv!poPE7h5ryt tmx$)?&T C$Z86uu'!f3jo-orQqUJjxٜ*mjO\^#$ښHj&>)aaP#zv;s཯z$(y#ṙ]"EREs0 R{dƠ˪ZĽV])JkaM r3IXp`c¿y|ڻMT*`]2c&@@IMQŸYɺx!0)]39&q8b$`\;XkWwRPv;dbI[)o'rpRuuOѾrޑd;E>$":H/]8'$ѸJ \"FlOWD5X1Q#WQӦBRaGCu>s\Ӳj'K= 癥3܃y9uk{$s4$JuT& R֬yd>IL߉vWd{mh&df|P#n2ׯS9^Y,QЮ/q6W( kH!} D˶yMK>@wE7⬭B*Z~dQ\xm{V:PZ̰}I^Npz’v!'bgfLkp|`E)`Ykv\^,mk^WEX}Iuw| g"f& -εS҅^a~An]"WʴܪǽOLh`B6>HÅ[0g&hᆐ +'׸?P{Tkg ǗV@?@f!CXt& WRvG͔ ,;8RWVa%kEV^Pg7ݣ)oyݷ`, ³NH@ .5f^ L^S]Ph=|47yY4:⠳\a,,aq)ͬ(lȳ >^ aL/\EIݦdMg@?U]$iFI yQ_$~, q~]{scSeϰ+fJl%jk9)6K` {/KΠw:Ri֦`/t ֩yhCa>`Dc3KhFnuLfEpk) 6K}D;pӍ$H]4h 0QB >ƷQYSnݺc/kHv:q o8E ެsX^oCLnuIލBcv}(n pJ(.O jiOj_Zb'1#RH۴Uz﨑ŏo9 &Npݱb6;]%q5 m2Da4Fm^&[6i\鮗>%+SJO476sr%-o\|RXј>~g|I5<+̨U5hP"K$ % endstream endobj 97 0 obj << /Type /FontDescriptor /FontName /KAXAAF+CMSLTT10 /Flags 4 /FontBBox [-20 -233 617 696] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle -9 /StemV 69 /XHeight 431 /CharSet (/A/C/D/E/F/L/M/N/P/R/S/T/U/V/W/a/asciitilde/b/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/e/equal/exclam/f/five/four/g/greater/h/hyphen/i/k/l/less/m/n/o/one/p/parenleft/parenright/percent/period/plus/q/quotedbl/r/s/t/three/two/u/w/x/y/zero) /FontFile 96 0 R >> endobj 98 0 obj << /Length1 1407 /Length2 6266 /Length3 0 /Length 7225 /Filter /FlateDecode >> stream xڍuXm> %%H3RJ:  6ZNA$$FD[VZ}ǎc]u^u'=CEL A@e#X@$Fpo? }'DHB`}*P D5܀` X\,! A HOi j"04 2 wr`$ap{(8ܱn@C=G Yg %-$#uG "=y>p3yzVBaV$9 ' ua46 b !@= X/?;jotGA~pi b|1@(FbP =:b7 p_; *=fU2I~ͧcO">-G8^(!c QHsab HRX |흅~50C~PH,0 Z$`0nWǺa-@X_=YaD4!Fj&w "`PB  g{P9@΅ @Ş#{YKe. o[@/S,U%O;Cn~Xza*Abo /^`X5(" Djp_=8/7778vz`@aEf}a5Ͼ{/ P?Qbb0V0d "l c Ib !~`?Lq^X vz|a$SH{pƓJE~aQCbeUz5PeIy-u W2cij  R˝mWZZmEN; >[PzW~\C]-HKt[RR /I1\h3[*ifGbt)?.|!asu)Ae;\z<'1<k( QP;CæO2$)!"y'n^ʉE Ty?B u( >K3a7Cq^Gjx{-ayN-EYT>N'k!0r]Q6C嚡L)3Vp@gJO; YwߘWcѴGt_4f6`.|ME !<5cC߲QWJ3a {A b*u)Jxt5A. 7AGwKPJ͂YN=~p!Ĥ狗R\{9ۿ5-7>P h\wd9ȭ˝).i |#f4vl? !5,(~R!Rn$vc˨S3n6~X2 75,HS %ߟWΣ4R4p j{~mCT&PE7=`wZh^/{IɎ4<l0. ,6-{x. ;m .+,{RL#ܔ;G"_}oPe^apd[B` 3G4;@({nJ"K,n `"QvWĹMn~ݪV`U Cu:ֹ Z93kx5 &; LKw)Vn'L8Xpr.hzM/#4 )(C/n$99b6R ~#N_}u"YC"k % c(,[*0w[[ĶḙBɪF-~vؕ9gsѴiKZdm($nk7Tg͗:%>+ SAv7J,Ҏ!E o Z F 9hךyɡJK]VT" ,FOa*KSTTʩVN>0f#?ohvi;U UT/NZ4עE]4}>f9xDEQ0D-ݜ7|"pENLh(E )>H_vO\*8l"ќ2rSVguepG?. C} v~ɆD Nn)da'^E;(ڋ2MuJ\"̈{,EZ*TWHq@^Vƕehyչ[M*2w DI4+\U\Lmg-oSzvt%\Z9PV6'0Rn'VB8=(ssz7!0:sD"!S96nVSv45Aˋn/4dGOR/Hg[^I~̝p߾^Cz}CCc'-Wx.`āZYݠP<+>y9'` Rssթ!$[eL7;龸t,=)k S*U VzQLŅ*DX{>۪YsR 2ڻ;{ʹmOY!Yx%6xW8C|2Hf=bBnW/:- ^-ψXE0˕E=_/6j:"o[uh5V_.8i>&*@%oiVL# Gނ__ җ`u|tPٝ:Ȣ}|#.\|ncɂܕsⰰ{~j<G*(trZEJӇ0vע& Z#.¦; H-cަl0;mrgrL㹯ӵ$z픿6ձ#Vu-*&tvue GgV'xM!c@u= "±]"N\NӗM?p*'J~<;x,FyQnLKlkphT\)ٖYF! $^kY<}-g4m1/ݟ5 vGH1-)ؘI +]<>⻳мbJg!7'+,V~ Qn/"qqg7}/%% 0'<&hwd&[>gqWJQu9Q \NbӖѮz2O1x'42ytʨFpmy(cu.Nf>oV+?xW-LbBZL5뮸)_ 5Z5\V:TǚfWEm҆~?34\u vOdIq 277I)|ELtםILL2JHV3=cH[WO^wͽD;볣W9氙t$~| s) t:Tg(_D ~pe:.t aC_jP݈J:h)^PvPs#<ϱkr)@,Zkh O"ڠ&֘0l64c(^ˁUwgls󊹒;mzNWd=&/uc Ken+n֎yFjLE@mƭ&vjmQ5xo1J'8"[t$N?9:,cϲ;,jK\mI(_zu1|9^.uO?IW ZvֹAɒ1CR _%smzkө)H 3e 3gیꯪ<\m*8<-Q"lRlOh8+!b`„}.Fg!H"q}7Upp&jɢǶAif@}{YvOwƒ#Kw7-Eg~%6]Q :a` 3Y\*Uʔ; ,grT$%SEX=LcےyhV0 Wwiw6\@^eECsPIYጋQHqBV uw̒@q~-ɮ s_|1N+Z9Mz9[q !oT ZS8z4vVsu\<tږb8KUFjB\*a{u𵽫 ʉi zd]K&~ J^X?-s 7uUpn Fk-Ͼ|OGT㺿$LN=`Z\wH+p71)|~G(.EȀgE.+4>%@Pk.IHt^}Û;/}?~ )>P^yJ:fM"!p7$iJ 'esoN"n3qgu YvnY)ۤ(wm2.3Qѻ+"~;^CoOZ;{R:8hes@g 3Fu9]fo;5^bcw5f~)Lu"b? [G;P'w/Kjǫ>Ri/!ܮT-aɆ09IAeVvR͘2Ww;'Z+h#oi 0 0nNz r[ P5՘ٙ(*[>b騯Z];GOzke9jl4QG-9=+~\Fz,3*8JlKBXM蓂|2AzΛ\Bx/{lj.%% D!q봍f]?ecӈt $u[NF7]9DR_%&kXA,G$@5/jm ./_6qgQsƬQ_Ѣ6O w^_y.U&%x{)1E_0YC(Z䶟lW C4\@UtxH&A<똔RMH73ßna|ג$Dȭw`nM9հX0ѽд&w2:!ǐ@.RHixW|jI3IFWOOzhnl~F`sȚ^a. 38]t)Gqߛ,d ҽOdN=X%W,_TG0z*l_a endstream endobj 99 0 obj << /Type /FontDescriptor /FontName /JIQTFW+CMTI12 /Flags 4 /FontBBox [-36 -251 1103 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 63 /XHeight 431 /CharSet (/n/o/t) /FontFile 98 0 R >> endobj 100 0 obj << /Length1 1500 /Length2 8527 /Length3 0 /Length 9532 /Filter /FlateDecode >> stream xڍT6LtԀt 1 0t7%HJ7HtH{yo=k=s}}}׾td`E#(S@~n IˎwC@<@T9T\^!1^a1 AnP+:7@qb9y¡6u `xEE9d p(P!l!+A AxW V [Iݝ Hqܡ[6wX~ 9@n k uˡF 8<:ZA:jM'_d7tGNu aN GO jh*q#<o"rAA?2/ :!\]{a`G pa=y>\;G5wVN(OP0V?"p;!|08#6AHHD<ߵXx |@?ZG}} L k~yURʝks$Ӧ~< 3"3h~&qza*b-HM:ٌ(DTݩ< -^H?Gr& V]4/ɻ"|jQ}^$ڔQV8ȿ!U:R$RIАgaC¨/{~^xo"2Qe.g0R)l"42doO*lUkL_ILj5v~dx;q޴_ڰdќGEtux@}fy fiqQP-K߶ +nј܅!%eǭ݋>؁IIvi-Ta%\n&8'ko|tvN.OE8E ׁJ)TL3%f޴ n{,dզS-L))}&YR‹4 3N&zkhp0ZJ8YOky:\a1@0RԴ>akw,Oƈ/) k3lG6ZfݱӠ0`Y}dhf $`=.f{S7qWmMqYJ,_ J*}1#Sp';dlCuDY ˱o RAg0AK/%JFؔI@xJ۽J&4ql1zA  ز^㠾 }ҳ"v'm81ԣܷl_$bwlS)bR.4K> ձBDi#Ԃ-tbV =G{2)6鸢rQ+lDGܬbX뇥(LN%$?Jxyp.x%MB򆰺ӼJKrcdMq@SKF7uGGFE/i0%{UYmusl`/fʪ9rŋ_ls /S[.)@uR LV,Q)Yp̱x|+գl_$DBdIm5nrA {c*_L;M7]&pǠ0 ݻ\25'mS[,lqbCLOLb+HKٹYrlx(Cvꩊ/zm1CoeN<ö&kpd[/05^аBuYtD~9ഒji.zs԰Ke-oIyQ3?|YǓ6/+5W)3xм<#TytWD*+3!:Y,9O),>L,"a󪺺/ F6'CpuK'9?~E_dVHI|]6< plen|iTYM+vm{XKW$(潅 Py8Ujk1c w-RίJٰ콝Ȯϓ!'v_iP&^!['@|\YG J Uw_.|є/dܟ"0 VߐB]Qt3-}h$v;)-e|Csҟ|P3ھ!`A:nEm/mF&=VFf<}Ι|?n| |P g{5Ulz7K8(S1i7,ՆD ͧulaAky!1=^۪&Oda--NIdr= ာnC <{]c;7{F2>t"&x;71,kQyRly,UqDJž6Bsr_ܯw˓N_o\2FuʷPu}Ĺ62*eTKNH%yG67i&tXЧU^7+`YBd2%E}G0u1mCtK-Ԇ2`)su;A#XluQNM0T?]S7su{#96lLQDPr,@<Nۣ;||PԢ+cV q$S\hc7D\T$& --Te+Vim wEpO>S|aٞTJ 򶄩f(o9NܧmhN:c|ۜiJYuf`3/Mz0M36Q1+Fu¨% WhG0ar(EcE26N% < qX8WAbN,]VΒ=Oi2!ìl`/s>^W䰠_Yai$ԉʼnk 1HH>k %LR{\]D֟1m9fS|Xyi<f,z~֡dԦy'RUzot5$q@mP92P~YVbJc=LZBl;4#ἐBv']u{Λ_\2PvJ/[kUUs#j*8:U9Ő!p9iv}λR3o\'X wUIf>^  ,'C{ݵ~2놜#&lu*n/ol&ϙ 7`j5A[[$/^qlE3"GtLR~`5Pb",}%xCpI^;)y7c˦NzK$5WGK8_~X*Y?Qh_k(W1):zvh{UWˆ%j˛it=8mb4.UӪ!/U/'Ì]"YgvG$XGb˷!V/ԱD0FEn\'Ok Jŋ_BKda;h1W}^d;帱~jª|q޽W%t.oYRwJ 0K !{+V$Pjh:eȿ 2RY)R2VLNoZܓ>5'4]c̚jpI r5G⪑ 71ekO`rF@_MVM6/q4PmY kcJ+RY{I3 e6:)g4 pr`c]WRg!up3XAʋi' # Cį/[HAu~_ kaXds+GÌӌx/4mSQDXGo)2n8mؿO[Gv7kUi3sc]lm[i:1wRW՜r®0P!@̉14EsoԢ(>vP>bRF4+rPki)Fh٠ges`'xkzd$'U9'"!q uvKFVUmCD[Pyk }EZzmmtyF6tHwrF U|OE4846g6 &ӬC$xR f{Ө?㵵w]NŖw%U)%K<}Gy}"ZaT|JKwf٢llAQ[B3-{u3Ԗmo&uYX80"-dI7Q}^O+~]! x°(}"4ruSp) YR@&۝.|D.D2 W22C0Vx&lh+[0>>S41K #.IMw[غZ/u oJD*W/pHKCP91ӶtfW*涕`ʦi}vtJtkة_R_e6t}wl2Us{҂% *DA.`74G9ZiT"ߡtйDO+mXm5\'X}eKzG%C) ^<>@oNs@|ɓ9>nUqٞa".OBµyQE81;8}d>pb;2d{g\>/^{fFY)-U}3>Z\~U t 04127Y%6OUH)4Stm7F~;߼D(?0LEkN#LZ~EE{oޛ }B;;m˾ѐ۪Cyj=pzFIPgvU*0j[4*zb{_A͑bGFR ~ӟ b؋s$ U$_S@)y&Q=JlwQB40e BP癴%8D] oǏL3G\b^n */ݧ, :a8ErqKzK/{g "KT*4*[h")rc,TZ)#"|˓^4% /"MC XtLnQVf$s3 vB>/DKxս?~T~o'M{ٜ bd$[XBKo^,4|4i溫|)N@όohn])Su.sX\Oae^ci%m6tYzH⦆C _fE?_' =eJKYΦ O ~Ví\uQ#X+Yt9uïIVkvd8⍋ʨ ϪMIkk3)6]_p-u xop3 #{'-'Kê>YiVtݲ/1ƽų!TRG9~^ɂY1}幩 DiʚLQɻxto^t@/Gխ=-4 lWxs{yyZȦbԯo߁@^JpV ϫ;&" endstream endobj 101 0 obj << /Type /FontDescriptor /FontName /TEGUAR+CMTT10 /Flags 4 /FontBBox [-4 -233 537 696] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/C/M/a/c/d/e/f/h/o/r) /FontFile 100 0 R >> endobj 102 0 obj << /Length1 2141 /Length2 8157 /Length3 0 /Length 9427 /Filter /FlateDecode >> stream xڍT6N ҸttIww (, K%HJwH#H#!ݒ s9533s̳Ltz\2pK"#s01C]q (& rEAHC 8  xxD1# w5@ ]pN^+Vl^QQa_t# W[#D+@nz rt#l$8PW[.p[~ 9N o uKz`R\75@SQh9ae 8^n EYY@0/(:Zܮ!AP%W \P'Wn? ˬ;:a.8?㓇"VȺ{\{@a֐iX9 `Pg76Ho  #;V{9)y98d`?(q7ϟ"^^5` p~{G0PO)x=Av5Ud9N_,  D~ o ,Jw=l҄# `f<A!y ;OPËFk&apW$#p~^0(S#QP_$ڿ/zg/E"oY"@V`+U C,t"-S><uO5 ib#Ros4m Y?A&"I!=2#PIG  aVy A :f!Swv-H)>ȂN'Hi~ sG"@W[[B& 7CpLJt;)x3[VndY\?`O$Q]uHE 0~q)ѪN ~̇둗Kw?7-RLm &rwՎߺZ[?Anǩ8D斒8sCyK.7pt$?ZHLfkl*.{ 4[i|=%ЯiTNjےBjq뗬A-!./ (!;nZ!Uҷ|+NuwCmLָ fe˛|u/Y[s)>):+bx"cvB;<9e0H,h;a0tWjꕓtRMJ? r;f5z2TXW@BZPqOra]f뤬 gy={DxD. oGǒlRc5d_Ň, SĀBCӷL eI5#7btqJ|6;mƛjT>%|~NNTw\a\A||d[og9r4-[%"8ݬR:e}?efLAQWյqIq [$39ch,7f{w?N ܰ')sDM޲eAֺ?u#7̞Sr`鍲)- NpͤIe6~z`C([S_1ps7FS ȴHb١7@ۣw Oy_CkWijD$&dKkӒfbW~͘{~&ƱP`t!uDrʩ\|C+GкOcg9%`tC!w `4+,.6o9ua,:s3 ߫=r<.6k>?gQ^2 YM. "J:Q^͔qq5ˁ@ʴ2qMJ|JbYCUK9/ EQ_aov_, ^:o80ƴ;]&>5]!Lr+WS/;`7cm_bDTJzE'i~&^睨MYoy1ǗV*[u[6dK^79Y|BnE8Sb6a3\?'jp+ gU6PLHj c?Y =hz~^X|&z3s9WJ`V*#Z9vtɊ\>[2 '2pы:_NfT]F4Gt-hAXzíA8[08AWȪہD~(TU׷[g} OY#ǽkX8"):cv.ιYY)h&hV\+T VX\T{0.ro sgg^,[q;2WB^xBP>p&]|5b =PޢG$? /C>rk|gZHў;t7Frr6rHkSiTtn i󋏟h$¤G8HY8!*riwu ;lV!r_ }I~U2dn]Hd} +)S#&mږΏcٛ9dp/Ch}ӆ}_ ӯN}sGF+^h*W`jH1M٬ȢqYkl$Ӊa.UA_kѧXO(!#vĔN}z=M ϑ\o$cemίB_sJS0 X8]J>-=-x¯:mMsPdV |O{#, ㌋~91V;9MMiN{_:jXө?K|'KqB#:itu!txv6fKfcK<уojO3u|6Eೌ \ʻWKO\-ʌEn|1Z#}},~}MBቱR,/9ô-V^/i<=@q>/ULNp_qE4sU+DS7S)n1ͨr`r=2:̓L%B"uVm8:ۿ m:]h<͕ |gĦm; 3oAed|}>#>7884f™K̰yv|tWJX: 1FI[UtJF[Vk^}!rf8~{ulk#Lc#OD5/P={^tD}z:x˙4&'kC.yC2N CPsVRll]ȗmɁg\nju(I!-}T3 ɬR9&:fD =̓;`[/~Z84mH2MǯayĊ& 0 jCh+s-aO;:/HU~pKǏ ڃRT*K"PGZf\;*&05Jv}5 C躈UK5 |DL@L|Zx9zq*/E?げ!.a;]Frq˦:$qIۋN0;%W<e41`* v~GFdoK@[ 8Vt!t?4YFڵouX~jÜTX9oѶ٥sto\rkfo?v{ڹgۂmu &'Sj\NšBVɃ."TMQPϭ;dlacvRJw>-o#ݪ2}&mkeIpH/?>{kVg#udkmxg|4ܖ WS^m}݋q~z\> Hri92<'هdqRY͑ 6Gf 7}144P Κe*Wa`et({8pӲVkI#G%35bռKI >L9V"؊G}77=f -zY-[H%,_`3чwJ)Wq7wU>@?M|/,RKJ <չu1xJD]h7#I(ġ3?tyS ?~wc-ʍq;s98U8߭ŽHf)vF7qoџrKB:5iC+i`OJe@ሕWԻ;-m,Jը>^lez+(4t"BQXgVG4p >hxɶ0!4=R4)bKo+{_a|9!#mɓD(M!/4H_,frݜ8Oc(qVsU-qޙ ު_P}\~Yg;"=kڠ/f0\H"ctY L8Xs6܃S}?M7ubw\J%ngO G{$h:~ɥXda[&-GhH.gzgyByѰ|D ~/lfRG/ѭʪ$4(tRTс"'OX%#vC+`glA7FO:Fw|RY%%MՋ%4ĻZǞŗsrw.%h] ٛ 01]٤2;RCr=e\v>dEnA 5Y('@[}cǰ/N)fc}K#ҷ#q Yr6G|oN Sy+ZD+SΗB Mm˺=}=\C_^_kM^[0ۉZcȱʤۊ ' Bj~  `ԋK ~}9\"xXwOJ 4g&*gCEӤ{uks{' 5ғ6 -O}E4B++@7tJiv)lSGݹ^cw{zA ȞV$}NC%@jp x`Ec] zޥ(KƟ ` 5HLr"sb9UM*u>L5A5PoύQY.b@4j7ÈJnՀ'6*;n#ϝ%IJnevO\$#*ɔ\{ r#Hv%qxt)ңk`Vh- PjwD*hֆcr=5ĺNSHbk1u=ZJ4s3֐s+0 u=΍j"+Q|-_N}4$ `ypL k6=y"SQi9gyRg(O52GFUvz+gQ; JEl*kD+%[0u\Zm?c~u=q_^J1P9D+Jd⩙e?%֜t`xIh8ýqc:l)y˒7E4A!޹d ږhzhҕ5{KW; _D|uqx(y?f8>X tAMxʆz/Cʆ+JpmFVm"/{ޞ~K{*UN3&dfhWp ubV"=CG-GXa3{5OvM)]3wDuS&u:}OFGܞ]ț†p7UTDE%!٢{Yks"+pk J~ێ[  ߗӛ-sLpulMuP!l6nETHaN5Rr|" eED'OQ 9SOJeAQ%bݕLiZfSR]'[t-7ιR4V:bS{"XೄS>шӳa}cŧ 7,iZ+q(}]ㅈ[>1ԛ^4ai#԰jOɆ4n..)A5SgTP2tLu*Uþ0G7򃳳켬OCjAU9JG_^8b$nӀkk+G’P%* Du}ov$-9,09ZeGG,+jk7̼vs7 'L yw+>;K#;h^=Sb]O9PqUM3Cb~1ё -89{J(Tr7qݧpErxTC6g(fү#uO endstream endobj 103 0 obj << /Type /FontDescriptor /FontName /GLIBHF+CMTT12 /Flags 4 /FontBBox [-1 -234 524 695] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/C/D/E/M/P/Q/S/W/a/bracketleft/bracketright/c/d/e/eight/equal/f/five/four/g/greater/h/i/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/q/quotedbl/r/s/seven/six/t/three/two/u/x/y/zero) /FontFile 102 0 R >> endobj 104 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=['sv}o|7lԘ[kxBYwS0`Qٮi"m!-M5\F:i0U4e7;yO!(37Px\lCys0l+htcA620Ae L[7Њn& U RZ,cŶPSan aiqD4',IF\Bbu /y2RXR xHXc®eg:'c|0xq?S΃qI&'g΃y9 C :sǡ;(E8o"AJ'Ođ+6KIט'; ztFzKp&q"pBCT/9!ɩ~B}Rq҉TFIܨύ|nTs|neEAxwIyRm4͓_Oyf;s|KۄwU羷{lC'i=>vGr_$Ԩ endstream endobj 42 0 obj << /Type /Font /Subtype /Type1 /BaseFont /YSEBGX+CMB10 /FontDescriptor 85 0 R /FirstChar 49 /LastChar 121 /Widths 81 0 R /ToUnicode 104 0 R >> endobj 105 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=M;7rfnj-eSӵOLg~8 )ok A8 $`I\3`Af<Z]! xNky"7 _㓧q H`nḱRONH=CpB:# =%888QA~!*zƜАT?!~> tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L> endobj 106 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdCmU^!1H#x?gx]OTm$|͜s_Iss :L;<Sz==׾f`*_`ɫڟk3'iѴ}=M;7rfnj-eSӵOLg~8 )ok A8 $`I\3`Af<Z]! xNky"7 _㓧q H`nḱRONH=CpB:# =%888QA~!*zƜАT?!~> tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L> endobj 107 0 obj << /Length 740 /Filter /FlateDecode >> stream xmUMo0WxvH UdCmU^!1HDI8߯-@=ۙڽ١=?w]pwdV^ڑݧl#oxdGa0NiqF?Sր'YNR}{f{x2A! u xk={Exo"}Rɑ#x۠_J B C쩁b8!=%p&r"D9 Qg̑Tu+gGNN8O-(7ZRntH ʍ(7:hEњr1+w(O:͓.ndm'#Ʉ'> endobj 108 0 obj << /Length 740 /Filter /FlateDecode >> stream xmUMo0WxvH UdC۪TBb B8߯{ .@=/ۙڽs{K;K.k6/k+[M'ҷ>dyӔKe'$cS`vfSfK}fƁVGGf\bu<19w|擬CTAW $rG]IyMsh$aW7y̟u? sK-`θtJ!'c83?NaO<Dg!;IX 0z)rЃ@kpBQ]^Z7! / U <ɉ#W m/%]cX! gȀhID8QN~ACT/sQQRs 穅ύ>7: F+}n4eE=zG~<6OɈy2kLd>O&y2ϓQ>OfdV>OF<dR'<>O)yJS*}𗏿tx>z{O->tՍ]*3>cC~ endstream endobj 45 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FYGEPU+CMR7 /FontDescriptor 93 0 R /FirstChar 49 /LastChar 50 /Widths 78 0 R /ToUnicode 108 0 R >> endobj 109 0 obj << /Length 739 /Filter /FlateDecode >> stream xmUMo0WxvHUdC۪TBb A!Gp?gxYOTm$|՜s_Iss :L;268{zb/}WUjWm?fd}Oi=7gRd{nCN8oͰof-%6'&9Pu`L/"tkں(a[ duS $xqa MN{}m}gىx` tw8y*sύ }nFE>7*QύR>7G];~<6OIyktg>O:yұϓN|I/|yIg>O:y҅ϓ.}2 L> endobj 110 0 obj << /Length 675 /Filter /FlateDecode >> stream xuAo0 R{HcIE H9l[5j 8] CfUmóٟۃŏ١.rn|vxb}[6ߺf|歫NNhYgy8å9q7۾q0_f_ дGι/63Dk 6"WT#!YT XF{޺cl_c9K_۾qk8rw麓 G ylIo2"dݾ}hrYWydͼ//V&ZKLxY juwԯx2$OAPyt4sk)$Q "7A?g@c(3jok9E u9/d86dq/@cNiЃ9eyDH{f@/Z`~G. И!`DoSc_ BZ }%m<;4x{[W<Q $R1R R2R:dA3NUAUI5'ZG-^GGGG$zE"ZGmΉ..h$q41q1//fm|T ֵiKN" endstream endobj 55 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KAXAAF+CMSLTT10 /FontDescriptor 97 0 R /FirstChar 33 /LastChar 126 /Widths 74 0 R /ToUnicode 110 0 R >> endobj 111 0 obj << /Length 750 /Filter /FlateDecode >> stream xmUMo0Wx$*B!qض*jn$H$3Ch<~3~~~ngjv9{C{K;K.k6㳵ችm#O7٦4\ =؏8ݿ߳4B8͌>sIvdXC6OLx9im$l6Dl_7ڞhz*{pɲ2kAʶC+mk>lpfIQTT?LA>J e .1PbpqH I$\kL8Hb،Shąr =z51XQg_s2Ē+ sC:CQ}.'c-BbOEu+Xg~:?aj B.U $,ĨAA 2A%%" 19hM_)ELN 1sR3fg =傸aCYjV^w&L= 3nqFyDŽϠOL5'pZx?i^x?IGO:~I4ϼt~3][gF~Qgf}fB3y,h3cL}f23{,g>KYN0`^ay{7)q W7:*ሟS`R$m endstream endobj 54 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JIQTFW+CMTI12 /FontDescriptor 99 0 R /FirstChar 110 /LastChar 116 /Widths 75 0 R /ToUnicode 111 0 R >> endobj 112 0 obj << /Length 672 /Filter /FlateDecode >> stream xmTn0C6*drضj^pHA@Cfy'n`g#govh/}eg羋򶺜m=Ooٽ[׌uRۉ=Iۏw{VQҜ8ߛIߞ3d_ ~~hZ# W c *'qU;HHV7xwuɻa;zopO_`_ݥNd0m6G_?[6vLClw6ZsaD%!p%blcä  PP[ u_g_x4$O<X^\NB8 \;cBbMx y%P 3jok:E q:/d48Q4A2="\šY+ːs(5$Y r~+A\HȕWr{Nxo $TL~K//p1sQ*GG-G-GzA>|)3Q/G""&!uN>|%h8hh$hb,n~ᰏnˣ+p]h \2 M endstream endobj 47 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TEGUAR+CMTT10 /FontDescriptor 101 0 R /FirstChar 67 /LastChar 114 /Widths 77 0 R /ToUnicode 112 0 R >> endobj 113 0 obj << /Length 672 /Filter /FlateDecode >> stream xmTn0C6*drضj^pHA@Cfy'n`g#govh/}eg羋򶺜m=Ooٽ[׌uRۉ=Iۏw{VQҜ8ߛIߞ3d_ ~~hZ# W c *'qU;HHV7xwuɻa;zopO_`_ݥNd0m6G_?[6vLClw6ZsaD%!p%blcä  PP[ u_g_x4$O<X^\NB8 \;cBbMx y%P 3jok:E q:/d48Q4A2="\šY+ːs(5$Y r~+A\HȕWr{Nxo $TL~K//p1sQ*GG-G-GzA>|)3Q/G""&!uN>|%h8hh$hb,n~ᰏnˣ+p]h \2 ᫄ endstream endobj 43 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GLIBHF+CMTT12 /FontDescriptor 103 0 R /FirstChar 34 /LastChar 121 /Widths 80 0 R /ToUnicode 113 0 R >> endobj 49 0 obj << /Type /Pages /Count 6 /Kids [34 0 R 51 0 R 58 0 R 62 0 R 67 0 R 71 0 R] >> endobj 114 0 obj << /Type /Outlines /First 3 0 R /Last 31 0 R /Count 8 >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 114 0 R /Prev 27 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 114 0 R /Prev 23 0 R /Next 31 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 114 0 R /Prev 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 114 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 114 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 114 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 114 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 114 0 R /Next 7 0 R >> endobj 115 0 obj << /Names [(Doc-Start) 39 0 R (Hfootnote.1) 46 0 R (Hfootnote.2) 65 0 R (page.1) 38 0 R (page.2) 53 0 R (page.3) 60 0 R] /Limits [(Doc-Start) (page.3)] >> endobj 116 0 obj << /Names [(page.4) 64 0 R (page.5) 69 0 R (page.6) 73 0 R (section.1) 2 0 R (section.2) 6 0 R (section.3) 10 0 R] /Limits [(page.4) (section.3)] >> endobj 117 0 obj << /Names [(section.4) 14 0 R (section.5) 18 0 R (section.6) 22 0 R (section.7) 26 0 R (section.8) 30 0 R] /Limits [(section.4) (section.8)] >> endobj 118 0 obj << /Kids [115 0 R 116 0 R 117 0 R] /Limits [(Doc-Start) (section.8)] >> endobj 119 0 obj << /Dests 118 0 R >> endobj 120 0 obj << /Type /Catalog /Pages 49 0 R /Outlines 114 0 R /Names 119 0 R /PageMode/UseOutlines /OpenAction 33 0 R >> endobj 121 0 obj << /Producer (MiKTeX pdfTeX-1.40.24) /Author()/Title()/Subject()/Creator(LaTeX with hyperref)/Keywords() /CreationDate (D:20220116102643-08'00') /ModDate (D:20220116102643-08'00') /Trapped /False /PTEX.Fullbanner (This is MiKTeX-pdfTeX 4.10.0 (1.40.24)) >> endobj xref 0 122 0000000000 65535 f 0000000015 00000 n 0000004456 00000 n 0000149408 00000 n 0000000060 00000 n 0000000146 00000 n 0000004510 00000 n 0000149324 00000 n 0000000191 00000 n 0000000311 00000 n 0000007571 00000 n 0000149238 00000 n 0000000356 00000 n 0000000580 00000 n 0000007626 00000 n 0000149150 00000 n 0000000626 00000 n 0000000777 00000 n 0000009665 00000 n 0000149062 00000 n 0000000823 00000 n 0000000969 00000 n 0000012604 00000 n 0000148974 00000 n 0000001015 00000 n 0000001287 00000 n 0000014729 00000 n 0000148886 00000 n 0000001333 00000 n 0000001506 00000 n 0000016066 00000 n 0000148811 00000 n 0000001552 00000 n 0000001629 00000 n 0000004068 00000 n 0000004195 00000 n 0000004623 00000 n 0000001677 00000 n 0000004348 00000 n 0000004401 00000 n 0000142791 00000 n 0000141811 00000 n 0000139853 00000 n 0000148482 00000 n 0000144748 00000 n 0000143771 00000 n 0000004564 00000 n 0000147568 00000 n 0000140832 00000 n 0000148643 00000 n 0000007681 00000 n 0000007410 00000 n 0000004777 00000 n 0000007518 00000 n 0000146654 00000 n 0000145661 00000 n 0000012398 00000 n 0000009720 00000 n 0000009504 00000 n 0000007799 00000 n 0000009612 00000 n 0000012716 00000 n 0000012271 00000 n 0000009826 00000 n 0000012551 00000 n 0000012657 00000 n 0000014784 00000 n 0000014568 00000 n 0000012870 00000 n 0000014676 00000 n 0000016121 00000 n 0000015905 00000 n 0000014890 00000 n 0000016013 00000 n 0000016215 00000 n 0000016609 00000 n 0000016657 00000 n 0000017096 00000 n 0000017306 00000 n 0000017336 00000 n 0000017366 00000 n 0000017912 00000 n 0000018333 00000 n 0000018938 00000 n 0000019270 00000 n 0000032970 00000 n 0000033282 00000 n 0000048279 00000 n 0000048561 00000 n 0000068743 00000 n 0000069207 00000 n 0000079384 00000 n 0000079632 00000 n 0000086780 00000 n 0000087002 00000 n 0000094155 00000 n 0000094377 00000 n 0000111147 00000 n 0000111622 00000 n 0000118966 00000 n 0000119190 00000 n 0000128842 00000 n 0000129078 00000 n 0000138625 00000 n 0000139033 00000 n 0000140012 00000 n 0000140991 00000 n 0000141970 00000 n 0000142950 00000 n 0000143928 00000 n 0000144905 00000 n 0000145823 00000 n 0000146815 00000 n 0000147729 00000 n 0000148737 00000 n 0000149479 00000 n 0000149651 00000 n 0000149817 00000 n 0000149978 00000 n 0000150067 00000 n 0000150105 00000 n 0000150231 00000 n trailer << /Size 122 /Root 120 0 R /Info 121 0 R /ID [<0AC73AD619F429B3A010F95E4DBAB5CF> <0AC73AD619F429B3A010F95E4DBAB5CF>] >> startxref 150505 %%EOF doMC/inst/doc/gettingstartedMC.Rnw0000644000176200001440000002571114171057772016577 0ustar liggesusers% \VignetteIndexEntry{Getting Started with doMC and foreach} % \VignetteDepends{doMC} % \VignetteDepends{foreach} % \VignettePackage{doMC} \documentclass[12pt]{article} \usepackage{amsmath} \usepackage[pdftex]{graphicx} \usepackage{color} \usepackage{xspace} \usepackage{url} \usepackage{fancyvrb} \usepackage{fancyhdr} \usepackage[ colorlinks=true, linkcolor=blue, citecolor=blue, urlcolor=blue] {hyperref} \usepackage{lscape} \usepackage{Sweave} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % define new colors for use \definecolor{darkgreen}{rgb}{0,0.6,0} \definecolor{darkred}{rgb}{0.6,0.0,0} \definecolor{lightbrown}{rgb}{1,0.9,0.8} \definecolor{brown}{rgb}{0.6,0.3,0.3} \definecolor{darkblue}{rgb}{0,0,0.8} \definecolor{darkmagenta}{rgb}{0.5,0,0.5} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\bld}[1]{\mbox{\boldmath $#1$}} \newcommand{\shell}[1]{\mbox{$#1$}} \renewcommand{\vec}[1]{\mbox{\bf {#1}}} \newcommand{\ReallySmallSpacing}{\renewcommand{\baselinestretch}{.6}\Large\normalsize} \newcommand{\SmallSpacing}{\renewcommand{\baselinestretch}{1.1}\Large\normalsize} \newcommand{\halfs}{\frac{1}{2}} \setlength{\oddsidemargin}{-.25 truein} \setlength{\evensidemargin}{0truein} \setlength{\topmargin}{-0.2truein} \setlength{\textwidth}{7 truein} \setlength{\textheight}{8.5 truein} \setlength{\parindent}{0.20truein} \setlength{\parskip}{0.10truein} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagestyle{fancy} \lhead{} \chead{Getting Started with doMC and foreach} \rhead{} \lfoot{} \cfoot{} \rfoot{\thepage} \renewcommand{\headrulewidth}{1pt} \renewcommand{\footrulewidth}{1pt} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \title{Getting Started with doMC and foreach} \author{Steve Weston} \begin{document} \maketitle \thispagestyle{empty} \section{Introduction} The \texttt{doMC} package is a ``parallel backend'' for the \texttt{foreach} package. It provides a mechanism needed to execute \texttt{foreach} loops in parallel. The \texttt{foreach} package must be used in conjunction with a package such as \texttt{doMC} in order to execute code in parallel. The user must register a parallel backend to use, otherwise \texttt{foreach} will execute tasks sequentially, even when the \%dopar\% operator is used.\footnote{\texttt{foreach} will issue a warning that it is running sequentially if no parallel backend has been registered. It will only issue this warning once, however.} The \texttt{doMC} package acts as an interface between \texttt{foreach} and the \texttt{multicore} functionality of the \texttt{parallel} package, originally written by Simon Urbanek and incorporated into \texttt{parallel} for R 2.14.0. The \texttt{multicore} functionality currently only works with operating systems that support the \texttt{fork} system call (which means that Windows isn't supported). Also, \texttt{multicore} only runs tasks on a single computer, not a cluster of computers. That means that it is pointless to use \texttt{doMC} and \texttt{multicore} on a machine with only one processor with a single core. To get a speed improvement, it must run on a machine with multiple processors, multiple cores, or both. \section{A word of caution} Because the \texttt{multicore} functionality starts its workers using \texttt{fork} without doing a subsequent \texttt{exec}, it has some limitations. Some operations cannot be performed properly by forked processes. For example, connection objects very likely won't work. In some cases, this could cause an object to become corrupted, and the R session to crash. In addition, it usually isn't safe to run \texttt{doMC} and \texttt{multicore} from a GUI environment. \section{Registering the \texttt{doMC} parallel backend} To register \texttt{doMC} to be used with \texttt{foreach}, you must call the \texttt{registerDoMC} function. This function takes only one argument, named ``cores''. This specifies the number of worker processes that it will use to execute tasks, which will normally be equal to the total number of cores on the machine. You don't need to specify a value for it, however. By default, the \texttt{multicore} package will use the value of the ``cores'' option, as specified with the standard ``options'' function. If that isn't set, then \texttt{multicore} will try to detect the number of cores, and use approximately half that many workers. Remember: unless \texttt{registerDoMC} is called, \texttt{foreach} will {\em not} run in parallel. Simply loading the \texttt{doMC} package is not enough. \section{An example \texttt{doMC} session} Before we go any further, let's load \texttt{doMC}, register it, and use it with \texttt{foreach}: <>= library(doMC) registerDoMC(2) foreach(i=1:3) %dopar% sqrt(i) @ \begin{quote} Note well that this is {\em not} a practical use of \texttt{doMC}. This is my ``Hello, world'' program for parallel computing. It tests that everything is installed and set up properly, but don't expect it to run faster than a sequential \texttt{for} loop, because it won't! \texttt{sqrt} executes far too quickly to be worth executing in parallel, even with a large number of iterations. With small tasks, the overhead of scheduling the task and returning the result can be greater than the time to execute the task itself, resulting in poor performance. In addition, this example doesn't make use of the vector capabilities of \texttt{sqrt}, which it must to get decent performance. This is just a test and a pedagogical example, {\em not} a benchmark. \end{quote} But returning to the point of this example, you can see that it is very simple to load \texttt{doMC} with all of its dependencies (\texttt{foreach}, \texttt{iterators}, \texttt{multicore}, etc), and to register it. For the rest of the R session, whenever you execute \texttt{foreach} with \texttt{\%dopar\%}, the tasks will be executed using \texttt{doMC} and \texttt{multicore}. Note that you can register a different parallel backend later, or deregister \texttt{doMC} by registering the sequential backend by calling the \texttt{registerDoSEQ} function. \section{A more serious example} Now that we've gotten our feet wet, let's do something a bit less trivial. One good example is bootstrapping. Let's see how long it takes to run 10,000 bootstrap iterations in parallel on \Sexpr{getDoParWorkers()} cores: <>= x <- iris[which(iris[,5] != "setosa"), c(1,5)] trials <- 10000 ptime <- system.time({ r <- foreach(icount(trials), .combine=cbind) %dopar% { ind <- sample(100, 100, replace=TRUE) result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit)) coefficients(result1) } })[3] ptime @ Using \texttt{doMC} and \texttt{multicore} we were able to perform 10,000 bootstrap iterations in \Sexpr{ptime} seconds on \Sexpr{getDoParWorkers()} cores. By changing the \texttt{\%dopar\%} to \texttt{\%do\%}, we can run the same code sequentially to determine the performance improvement: <>= stime <- system.time({ r <- foreach(icount(trials), .combine=cbind) %do% { ind <- sample(100, 100, replace=TRUE) result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit)) coefficients(result1) } })[3] stime @ The sequential version ran in \Sexpr{stime} seconds, which means the speed up is about \Sexpr{round(stime / ptime, digits=1)} on \Sexpr{getDoParWorkers()} workers.\footnote{If you build this vignette yourself, you can see how well this problem runs on your hardware. None of the times are hardcoded in this document. You can also run the same example which is in the examples directory of the \texttt{doMC} distribution.} Ideally, the speed up would be \Sexpr{getDoParWorkers()}, but no multicore CPUs are ideal, and neither are the operating systems and software that run on them. At any rate, this is a more realistic example that is worth executing in parallel. I'm not going to explain what it's doing or how it works here. I just want to give you something more substantial than the \texttt{sqrt} example in case you want to run some benchmarks yourself. You can also run this example on a cluster by simply registering a different parallel backend that supports clusters in order to take advantage of more processors. \section{Getting information about the parallel backend} To find out how many workers \texttt{foreach} is going to use, you can use the \texttt{getDoParWorkers} function: <>= getDoParWorkers() @ This is a useful sanity check that you're actually running in parallel. If you haven't registered a parallel backend, or if your machine only has one core, \texttt{getDoParWorkers} will return one. In either case, don't expect a speed improvement. \texttt{foreach} is clever, but it isn't magic. The \texttt{getDoParWorkers} function is also useful when you want the number of tasks to be equal to the number of workers. You may want to pass this value to an iterator constructor, for example. You can also get the name and version of the currently registered backend: <>= getDoParName() getDoParVersion() @ This is mostly useful for documentation purposes, or for checking that you have the most recent version of \texttt{doMC}. \section{Specifying multicore options} The \texttt{doMC} package allows you to specify various options when running \texttt{foreach} that are supported by the underlying \texttt{mclapply} function: ``preschedule'', ``set.seed'', ``silent'', and ``cores''. You can learn about these options from the \texttt{mclapply} man page. They are set using the \texttt{foreach} \texttt{.options.multicore} argument. Here's an example of how to do that: <>= mcoptions <- list(preschedule=FALSE, set.seed=FALSE) foreach(i=1:3, .options.multicore=mcoptions) %dopar% sqrt(i) @ The ``cores'' options allows you to temporarily override the number of workers to use for a single \texttt{foreach} operation. This is more convenient than having to re-register \texttt{doMC}. Although if no value of ``cores'' was specified when \texttt{doMC} was registered, you can also change this value dynamically using the \texttt{options} function: \begin{verbatim} > registerDoMC() > getDoParWorkers() [1] 3 > options(cores=2) > getDoParWorkers() [1] 2 > options(cores=3) > getDoParWorkers() [1] 3 \end{verbatim} If you did specify the number of cores when registering \texttt{doMC}, the ``cores'' option is ignored: <>= registerDoMC(2) options(cores=4) getDoParWorkers() @ As you can see, there are a number of options for controlling the number of workers to use with \texttt{multicore}, but the default behaviour usually does what you want. \section{Conclusion} The \texttt{doMC} and \texttt{multicore} packages provide a nice, efficient parallel programming platform for multiprocessor/multicore computers running operating systems such as Linux and Mac OS X. It is very easy to install, and very easy to use. In short order, an average R programmer can start executing parallel programs, without any previous experience in parallel computing. \end{document} doMC/inst/doc/gettingstartedMC.R0000644000176200001440000000345614171061544016224 0ustar liggesusers### R code from vignette source 'gettingstartedMC.Rnw' ################################################### ### code chunk number 1: loadLibs ################################################### library(doMC) registerDoMC(2) foreach(i=1:3) %dopar% sqrt(i) ################################################### ### code chunk number 2: bootpar ################################################### x <- iris[which(iris[,5] != "setosa"), c(1,5)] trials <- 10000 ptime <- system.time({ r <- foreach(icount(trials), .combine=cbind) %dopar% { ind <- sample(100, 100, replace=TRUE) result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit)) coefficients(result1) } })[3] ptime ################################################### ### code chunk number 3: bootseq ################################################### stime <- system.time({ r <- foreach(icount(trials), .combine=cbind) %do% { ind <- sample(100, 100, replace=TRUE) result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit)) coefficients(result1) } })[3] stime ################################################### ### code chunk number 4: getDoParWorkers ################################################### getDoParWorkers() ################################################### ### code chunk number 5: getDoParName ################################################### getDoParName() getDoParVersion() ################################################### ### code chunk number 6: options ################################################### mcoptions <- list(preschedule=FALSE, set.seed=FALSE) foreach(i=1:3, .options.multicore=mcoptions) %dopar% sqrt(i) ################################################### ### code chunk number 7: coreoptions2 ################################################### registerDoMC(2) options(cores=4) getDoParWorkers() doMC/inst/unitTests/0000755000176200001440000000000014171057772014066 5ustar liggesusersdoMC/inst/unitTests/runTestSuite.sh0000644000176200001440000000152114171057772017077 0ustar liggesusers#!/bin/sh LOGFILE=test.log R --vanilla --slave > ${LOGFILE} 2>&1 <<'EOF' library(doMC) library(RUnit) verbose <- as.logical(Sys.getenv('FOREACH_VERBOSE', 'FALSE')) library(doMC) registerDoMC() options(warn=1) options(showWarnCalls=TRUE) cat('Starting test at', date(), '\n') cat(sprintf('doMC version: %s\n', getDoParVersion())) cat(sprintf('Running with %d worker(s)\n', getDoParWorkers())) tests <- c('options.R') errcase <- list() for (f in tests) { cat('\nRunning test file:', f, '\n') t <- runTestFile(f) e <- getErrors(t) if (e$nErr + e$nFail > 0) { errcase <- c(errcase, t) print(t) } } if (length(errcase) == 0) { cat('*** Ran all tests successfully ***\n') } else { cat('!!! Encountered', length(errcase), 'problems !!!\n') for (t in errcase) { print(t) } } cat('Finished test at', date(), '\n') EOF doMC/inst/unitTests/options.R0000644000176200001440000000056214171057772015707 0ustar liggesuserstest01 <- function() { x <- list(1:3, 1:9, 1:19) cs <- 1:20 for (chunkSize in cs) { mcopts <- list(preschedule=FALSE) for (y in x) { actual <- foreach(i=y, .options.multicore=mcopts) %dopar% i checkEquals(actual, as.list(y)) actual <- foreach(i=y, .combine='c', .options.multicore=mcopts) %do% i checkEquals(actual, y) } } }